├── src ├── tests │ ├── basic.png │ ├── clearance.png │ ├── annoying_dog.png │ ├── mod.rs │ └── snapshots │ │ ├── silkgen__tests__basic.snap │ │ ├── silkgen__tests__basic-invert.snap │ │ ├── silkgen__tests__clearance-invert.snap │ │ ├── silkgen__tests__clearance.snap │ │ └── silkgen__tests__annoying_dog.snap ├── err.rs ├── opt.rs ├── main.rs ├── sizes.rs ├── generate.rs └── analyze.rs ├── .gitignore ├── README.md ├── Cargo.toml ├── LICENSE ├── .github └── workflows │ └── ci.yml └── Cargo.lock /src/tests/basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/erikdesjardins/silkgen/main/src/tests/basic.png -------------------------------------------------------------------------------- /src/tests/clearance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/erikdesjardins/silkgen/main/src/tests/clearance.png -------------------------------------------------------------------------------- /src/tests/annoying_dog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/erikdesjardins/silkgen/main/src/tests/annoying_dog.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | /target/ 4 | 5 | # These are backup files generated by rustfmt 6 | **/*.rs.bk 7 | -------------------------------------------------------------------------------- /src/err.rs: -------------------------------------------------------------------------------- 1 | use std::fmt::{self, Debug, Display}; 2 | 3 | pub type Error = Box; 4 | 5 | pub struct DisplayError(Error); 6 | 7 | impl Debug for DisplayError { 8 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 9 | Display::fmt(&self.0, f) 10 | } 11 | } 12 | 13 | impl> From for DisplayError { 14 | fn from(display: T) -> Self { 15 | DisplayError(display.into()) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # silkgen 2 | 3 | Generate KiCad silkscreen art from PNGs. 4 | 5 | Primarily intended for pixel art. Turns black/white/transparent pixels into copper/silkscreen/nothing respectively. 6 | 7 | Adds clearance between silkscreen and copper to avoid DRC violations. 8 | 9 | ## Install 10 | 11 | From crates.io: `cargo install silkgen` 12 | 13 | From GitHub releases: https://github.com/erikdesjardins/silkgen/releases 14 | 15 | ## Example 16 | 17 | `silkgen --pixel-pitch 0.5mm --clearance 0.05mm annoying_dog.png -o annoying_dog.kicad_mod` 18 | 19 | | annoying_dog.png | annoying_dog.kicad_mod | 20 | | ------------- | ------------- | 21 | | example_image | example_footprint | 22 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "silkgen" 3 | version = "0.4.0" 4 | authors = ["Erik Desjardins "] 5 | description = "Generate KiCad silkscreen art from PNGs." 6 | repository = "https://github.com/erikdesjardins/silkgen" 7 | documentation = "https://docs.rs/silkgen" 8 | license = "MIT" 9 | keywords = ["kicad", "silkscreen", "art", "image", "png"] 10 | categories = ["command-line-utilities", "graphics"] 11 | edition = "2021" 12 | 13 | [dependencies] 14 | clap = { version = "4", features = ["derive"] } 15 | derive_more = "0.99" 16 | env_logger = { version = "0.10", default-features = false, features = ["humantime"] } 17 | fixed = { version = "1", features = ["std"] } 18 | fixed-macro = "1" 19 | image = { version = "0.24", default-features = false, features = ["png"] } 20 | insta = "1" 21 | log = "0.4" 22 | rand = "0.8" 23 | rand_chacha = "0.3" 24 | sha2 = "0.10" 25 | thiserror = "1" 26 | uuid = { version = "1", features = ["v4"] } 27 | 28 | [profile.release] 29 | panic = "abort" 30 | lto = true 31 | codegen-units = 1 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 erikdesjardins 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/opt.rs: -------------------------------------------------------------------------------- 1 | use crate::sizes::KicadDim; 2 | use clap::{ArgAction, Args, Parser}; 3 | use std::path::PathBuf; 4 | 5 | #[derive(Parser, Debug)] 6 | #[clap(version, about)] 7 | pub struct Arguments { 8 | /// Logging verbosity (-v info, -vv debug, -vvv trace) 9 | #[clap(short = 'v', long = "verbose", action = ArgAction::Count, global = true)] 10 | pub verbose: u8, 11 | 12 | /// Input PNG file to be converted 13 | pub input: PathBuf, 14 | 15 | /// Output file (defaults to .kicad_mod) 16 | #[clap(short = 'o', long = "output")] 17 | pub output: Option, 18 | 19 | #[clap(flatten)] 20 | pub config: Config, 21 | } 22 | 23 | #[derive(Args, Debug)] 24 | pub struct Config { 25 | /// Size of one pixel in the output footprint (e.g. 1mm or 0.05in) 26 | #[clap(short = 'p', long = "pixel-pitch")] 27 | pub pixel_pitch: KicadDim, 28 | 29 | /// Gap between silkscreen layers and copper layers (e.g. 0.1mm or 0.005in) 30 | /// 31 | /// This must be nonzero to avoid DRC violations. 32 | #[clap(short = 'c', long = "clearance")] 33 | pub clearance: KicadDim, 34 | 35 | /// Invert the image, treating dark pixels as silkscreen and light pixels as copper 36 | #[clap(long = "invert")] 37 | pub invert: bool, 38 | } 39 | -------------------------------------------------------------------------------- /src/tests/mod.rs: -------------------------------------------------------------------------------- 1 | use crate::generate; 2 | use crate::opt::{Arguments, Config}; 3 | use clap::CommandFactory; 4 | 5 | #[test] 6 | fn verify_cli() { 7 | Arguments::command().debug_assert(); 8 | } 9 | 10 | fn run_against(name: &str, file: &[u8], invert: bool) -> String { 11 | let image = image::load_from_memory(file).unwrap(); 12 | 13 | let config = Config { 14 | pixel_pitch: "1mm".parse().unwrap(), 15 | clearance: "0.1mm".parse().unwrap(), 16 | invert, 17 | }; 18 | 19 | let mut out = Vec::new(); 20 | 21 | generate::output_file(name, image, &config, &mut out).unwrap(); 22 | 23 | let out = String::from_utf8(out).unwrap(); 24 | 25 | out.replace(env!("CARGO_PKG_VERSION"), "x.x.x") 26 | } 27 | 28 | macro_rules! test { 29 | ($name:ident, $file:literal) => { 30 | #[test] 31 | fn $name() { 32 | insta::assert_snapshot!(run_against(stringify!($name), include_bytes!($file), false)); 33 | insta::assert_snapshot!( 34 | concat!(stringify!($name), "-invert"), 35 | run_against(stringify!($name), include_bytes!($file), true) 36 | ); 37 | } 38 | }; 39 | } 40 | 41 | test!(basic, "basic.png"); 42 | test!(clearance, "clearance.png"); 43 | test!(annoying_dog, "annoying_dog.png"); 44 | -------------------------------------------------------------------------------- /src/tests/snapshots/silkgen__tests__basic.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: src/tests/mod.rs 3 | expression: "run_against(stringify!(basic), include_bytes!(\"basic.png\"))" 4 | --- 5 | (footprint "basic" 6 | (version 20220630) 7 | (generator "silkgen x.x.x") 8 | (layer F.SilkS) 9 | (tedit 0) 10 | (attr board_only exclude_from_pos_files exclude_from_bom) 11 | (fp_text reference "G***" (at 0 0) (layer F.Fab) 12 | (effects (font (size 1.524 1.524) (thickness 0.3))) 13 | (tstamp e5476862-c780-4858-ad23-2141b5d696cd) 14 | ) 15 | (fp_text value "LOGO" (at 0.75 0) (layer F.Fab) hide 16 | (effects (font (size 1.524 1.524) (thickness 0.3))) 17 | (tstamp a4a732fb-002e-4bad-81b3-f6d61c96ff7a) 18 | ) 19 | (fp_poly (pts (xy -1 -1) 20 | (xy -0.1 -1) 21 | (xy -0.1 -0.1) 22 | (xy -1 -0.1) 23 | ) 24 | (layer F.SilkS) 25 | (width 0) 26 | (fill solid) 27 | (tstamp 741664a6-905c-4d5c-a79e-8e52204f1418) 28 | ) 29 | (fp_poly (pts (xy 0 -1) 30 | (xy 1 -1) 31 | (xy 1 0) 32 | (xy 0 0) 33 | ) 34 | (layer F.Cu) 35 | (width 0) 36 | (fill solid) 37 | (tstamp c33cf42c-49e6-47cd-93df-e401476290f2) 38 | ) 39 | (fp_poly (pts (xy 0 -1) 40 | (xy 1 -1) 41 | (xy 1 0) 42 | (xy 0 0) 43 | ) 44 | (layer F.Mask) 45 | (width 0) 46 | (fill solid) 47 | (tstamp 8afb8d00-9aa8-44b0-b3a6-0c1a3fa9f6b6) 48 | ) 49 | (fp_poly (pts (xy -1 0) 50 | (xy 0 0) 51 | (xy 0 1) 52 | (xy -1 1) 53 | ) 54 | (layer F.Cu) 55 | (width 0) 56 | (fill solid) 57 | (tstamp 5d6a07d0-0b11-466a-bb5c-9b52677c09ec) 58 | ) 59 | (fp_poly (pts (xy -1 0) 60 | (xy 0 0) 61 | (xy 0 1) 62 | (xy -1 1) 63 | ) 64 | (layer F.Mask) 65 | (width 0) 66 | (fill solid) 67 | (tstamp 2396ee4e-bd78-49a4-b892-c8076780e9ac) 68 | ) 69 | (fp_poly (pts (xy 0.1 0.1) 70 | (xy 1 0.1) 71 | (xy 1 1) 72 | (xy 0.1 1) 73 | ) 74 | (layer F.SilkS) 75 | (width 0) 76 | (fill solid) 77 | (tstamp e131e9b7-4577-43da-b67b-6648899e87e2) 78 | ) 79 | ) 80 | 81 | -------------------------------------------------------------------------------- /src/tests/snapshots/silkgen__tests__basic-invert.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: src/tests/mod.rs 3 | expression: "run_against(stringify!(basic), include_bytes!(\"basic.png\"), true)" 4 | --- 5 | (footprint "basic" 6 | (version 20220630) 7 | (generator "silkgen x.x.x") 8 | (layer F.SilkS) 9 | (tedit 0) 10 | (attr board_only exclude_from_pos_files exclude_from_bom) 11 | (fp_text reference "G***" (at 0 0) (layer F.Fab) 12 | (effects (font (size 1.524 1.524) (thickness 0.3))) 13 | (tstamp e5476862-c780-4858-ad23-2141b5d696cd) 14 | ) 15 | (fp_text value "LOGO" (at 0.75 0) (layer F.Fab) hide 16 | (effects (font (size 1.524 1.524) (thickness 0.3))) 17 | (tstamp a4a732fb-002e-4bad-81b3-f6d61c96ff7a) 18 | ) 19 | (fp_poly (pts (xy -1 -1) 20 | (xy 0 -1) 21 | (xy 0 0) 22 | (xy -1 0) 23 | ) 24 | (layer F.Cu) 25 | (width 0) 26 | (fill solid) 27 | (tstamp 741664a6-905c-4d5c-a79e-8e52204f1418) 28 | ) 29 | (fp_poly (pts (xy -1 -1) 30 | (xy 0 -1) 31 | (xy 0 0) 32 | (xy -1 0) 33 | ) 34 | (layer F.Mask) 35 | (width 0) 36 | (fill solid) 37 | (tstamp c33cf42c-49e6-47cd-93df-e401476290f2) 38 | ) 39 | (fp_poly (pts (xy 0.1 -1) 40 | (xy 1 -1) 41 | (xy 1 -0.1) 42 | (xy 0.1 -0.1) 43 | ) 44 | (layer F.SilkS) 45 | (width 0) 46 | (fill solid) 47 | (tstamp 8afb8d00-9aa8-44b0-b3a6-0c1a3fa9f6b6) 48 | ) 49 | (fp_poly (pts (xy -1 0.1) 50 | (xy -0.1 0.1) 51 | (xy -0.1 1) 52 | (xy -1 1) 53 | ) 54 | (layer F.SilkS) 55 | (width 0) 56 | (fill solid) 57 | (tstamp 5d6a07d0-0b11-466a-bb5c-9b52677c09ec) 58 | ) 59 | (fp_poly (pts (xy 0 0) 60 | (xy 1 0) 61 | (xy 1 1) 62 | (xy 0 1) 63 | ) 64 | (layer F.Cu) 65 | (width 0) 66 | (fill solid) 67 | (tstamp 2396ee4e-bd78-49a4-b892-c8076780e9ac) 68 | ) 69 | (fp_poly (pts (xy 0 0) 70 | (xy 1 0) 71 | (xy 1 1) 72 | (xy 0 1) 73 | ) 74 | (layer F.Mask) 75 | (width 0) 76 | (fill solid) 77 | (tstamp e131e9b7-4577-43da-b67b-6648899e87e2) 78 | ) 79 | ) 80 | 81 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use image::ImageError; 2 | use std::fs::File; 3 | use std::io; 4 | use std::io::BufWriter; 5 | use std::path::{Path, PathBuf}; 6 | use thiserror::Error; 7 | 8 | mod analyze; 9 | mod err; 10 | mod generate; 11 | mod opt; 12 | mod sizes; 13 | 14 | #[cfg(test)] 15 | mod tests; 16 | 17 | #[derive(Error, Debug)] 18 | enum MainError { 19 | #[error("failed to load input file: {0}")] 20 | FailedToLoadInput(ImageError), 21 | #[error("input file name improperly formatted or no extension")] 22 | BadInputFileName, 23 | #[error("failed to open output file: {0}")] 24 | FailedToCreateOutput(io::Error), 25 | #[error("failed to write to output file: {0}")] 26 | FailedToWriteToOutput(io::Error), 27 | } 28 | 29 | fn main() -> Result<(), err::DisplayError> { 30 | let opt::Arguments { 31 | verbose, 32 | input, 33 | output, 34 | config, 35 | } = clap::Parser::parse(); 36 | 37 | env_logger::Builder::new() 38 | .filter_level(match verbose { 39 | 0 => log::LevelFilter::Warn, 40 | 1 => log::LevelFilter::Info, 41 | 2 => log::LevelFilter::Debug, 42 | _ => log::LevelFilter::Trace, 43 | }) 44 | .init(); 45 | 46 | let name = match input.file_stem() { 47 | Some(s) => s, 48 | None => Err(MainError::BadInputFileName)?, 49 | }; 50 | 51 | let output = match output { 52 | Some(o) => o, 53 | None => { 54 | let mut out_dir = PathBuf::from(input.parent().unwrap_or_else(|| Path::new("."))); 55 | let mut out_name = name.to_owned(); 56 | out_name.push(".kicad_mod"); 57 | out_dir.push(out_name); 58 | out_dir 59 | } 60 | }; 61 | 62 | let image = image::open(&input).map_err(MainError::FailedToLoadInput)?; 63 | 64 | let mut output_file = File::create(output).map_err(MainError::FailedToCreateOutput)?; 65 | 66 | generate::output_file( 67 | &name.to_string_lossy(), 68 | image, 69 | &config, 70 | BufWriter::new(&mut output_file), 71 | ) 72 | .map_err(MainError::FailedToWriteToOutput)?; 73 | 74 | Ok(()) 75 | } 76 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | tags: 8 | - v*.*.* 9 | pull_request: 10 | 11 | jobs: 12 | fmt: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v3 16 | - run: rustup toolchain install stable --profile minimal 17 | - run: rustup component add rustfmt 18 | 19 | - run: cargo fmt --all -- --check 20 | 21 | clippy: 22 | runs-on: ubuntu-latest 23 | steps: 24 | - uses: actions/checkout@v3 25 | - run: rustup toolchain install stable --profile minimal 26 | - run: rustup component add clippy 27 | 28 | - run: RUSTFLAGS="-D warnings" cargo clippy 29 | 30 | test: 31 | runs-on: ubuntu-latest 32 | steps: 33 | - uses: actions/checkout@v3 34 | - run: rustup toolchain install stable --profile minimal 35 | 36 | - run: cargo test 37 | 38 | build-linux: 39 | runs-on: ubuntu-latest 40 | steps: 41 | - uses: actions/checkout@v3 42 | - run: rustup toolchain install stable --profile minimal 43 | - run: rustup target add x86_64-unknown-linux-musl 44 | - run: sudo apt-get install musl-tools 45 | 46 | - run: cargo build --release --target=x86_64-unknown-linux-musl 47 | - run: strip target/x86_64-unknown-linux-musl/release/silkgen 48 | - run: ls -lh target/x86_64-unknown-linux-musl/release/silkgen 49 | 50 | - uses: softprops/action-gh-release@v1 51 | if: startsWith(github.ref, 'refs/tags/') 52 | with: 53 | files: target/x86_64-unknown-linux-musl/release/silkgen 54 | env: 55 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 56 | 57 | build-windows: 58 | runs-on: windows-latest 59 | steps: 60 | - uses: actions/checkout@v3 61 | - run: rustup toolchain install stable --profile minimal 62 | 63 | - run: cargo build --release 64 | env: 65 | RUSTFLAGS: -Ctarget-feature=+crt-static 66 | - run: dir target/release/silkgen.exe 67 | 68 | - uses: softprops/action-gh-release@v1 69 | if: startsWith(github.ref, 'refs/tags/') 70 | with: 71 | files: target/release/silkgen.exe 72 | env: 73 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 74 | 75 | build-crate: 76 | runs-on: ubuntu-latest 77 | steps: 78 | - uses: actions/checkout@v3 79 | - run: rustup toolchain install stable --profile minimal 80 | 81 | - run: cargo package 82 | 83 | - run: cargo publish --token $CARGO_REGISTRY_TOKEN 84 | if: startsWith(github.ref, 'refs/tags/') 85 | env: 86 | CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} 87 | -------------------------------------------------------------------------------- /src/sizes.rs: -------------------------------------------------------------------------------- 1 | use derive_more::{Add, Neg, Sub}; 2 | use fixed::types::I12F52; 3 | use fixed::ParseFixedError; 4 | use fixed_macro::fixed; 5 | use std::fmt::{Debug, Display, Formatter}; 6 | use std::ops::Mul; 7 | use std::str::FromStr; 8 | use thiserror::Error; 9 | 10 | /// Support dimensions up to 2^11 (2048mm) 11 | type Num = I12F52; 12 | 13 | const MM_PER_IN: Num = fixed!(25.4: I12F52); 14 | 15 | /// A dimension in fractional mm, as used in KiCad file formats 16 | #[derive(Copy, Clone, PartialEq, Add, Sub, Neg)] 17 | pub struct KicadDim(pub Num); 18 | 19 | impl Debug for KicadDim { 20 | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { 21 | Debug::fmt(&self.0, f)?; 22 | f.write_str("mm") 23 | } 24 | } 25 | 26 | impl Display for KicadDim { 27 | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { 28 | Display::fmt(&self.0, f) 29 | } 30 | } 31 | 32 | #[derive(Error, Debug)] 33 | pub enum ParseKicadDimError { 34 | #[error("invalid suffix, expected `in` or `mm`")] 35 | InvalidSuffix, 36 | #[error("failed to parse as number: {0}")] 37 | InvalidNumber(#[from] ParseFixedError), 38 | } 39 | 40 | impl FromStr for KicadDim { 41 | type Err = ParseKicadDimError; 42 | 43 | fn from_str(s: &str) -> Result { 44 | if let Some(s) = s.strip_suffix("mm") { 45 | let num: Num = s.parse()?; 46 | Ok(Self(num)) 47 | } else if let Some(s) = s.strip_suffix("in") { 48 | let num: Num = s.parse()?; 49 | Ok(Self(num * MM_PER_IN)) 50 | } else { 51 | Err(ParseKicadDimError::InvalidSuffix) 52 | } 53 | } 54 | } 55 | 56 | impl Mul for KicadDim { 57 | type Output = Self; 58 | 59 | fn mul(self, rhs: PixelDim) -> Self::Output { 60 | Self(self.0 * Num::from_num(rhs.0)) 61 | } 62 | } 63 | 64 | /// A position in KiCad. 65 | /// 66 | /// Right and down positive. 67 | #[derive(Debug)] 68 | pub struct KicadPos { 69 | pub x: KicadDim, 70 | pub y: KicadDim, 71 | } 72 | 73 | impl Mul for KicadPos { 74 | type Output = Self; 75 | 76 | fn mul(self, rhs: PixelPos) -> Self::Output { 77 | Self { 78 | x: self.x * rhs.x, 79 | y: self.y * rhs.y, 80 | } 81 | } 82 | } 83 | 84 | /// A pixel index. 85 | #[derive(Copy, Clone, PartialEq, PartialOrd, Add)] 86 | pub struct PixelDim(pub u32); 87 | 88 | impl Debug for PixelDim { 89 | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { 90 | Debug::fmt(&self.0, f) 91 | } 92 | } 93 | 94 | impl PixelDim { 95 | pub fn abs_diff(self, other: Self) -> Self { 96 | Self(self.0.abs_diff(other.0)) 97 | } 98 | } 99 | 100 | /// A pixel position. 101 | /// 102 | /// Right and down positive. 103 | #[derive(Debug, Copy, Clone, Add)] 104 | pub struct PixelPos { 105 | pub x: PixelDim, 106 | pub y: PixelDim, 107 | } 108 | 109 | impl PixelPos { 110 | pub const X1: PixelPos = PixelPos { 111 | x: PixelDim(1), 112 | y: PixelDim(0), 113 | }; 114 | pub const Y1: PixelPos = PixelPos { 115 | x: PixelDim(0), 116 | y: PixelDim(1), 117 | }; 118 | } 119 | -------------------------------------------------------------------------------- /src/generate.rs: -------------------------------------------------------------------------------- 1 | use crate::analyze::{for_each_point_in_pixel, Extents, Nearby, PixelKind}; 2 | use crate::opt::Config; 3 | use crate::sizes::{PixelDim, PixelPos}; 4 | use image::{DynamicImage, GenericImageView}; 5 | use rand::{Rng, SeedableRng}; 6 | use rand_chacha::ChaCha12Rng; 7 | use sha2::{Digest, Sha256}; 8 | use std::io; 9 | use std::io::Write; 10 | 11 | pub fn output_file( 12 | name: &str, 13 | image: DynamicImage, 14 | config: &Config, 15 | mut w: impl Write, 16 | ) -> Result<(), io::Error> { 17 | let mut r = { 18 | // create deterministic hasher based on file name 19 | let mut hasher = Sha256::new(); 20 | hasher.update(name); 21 | ChaCha12Rng::from_seed(hasher.finalize().try_into().unwrap()) 22 | }; 23 | 24 | let extents = Extents::from_image(&image, config); 25 | 26 | sexpr(&mut w, "footprint", |w| { 27 | w.write_all(b"\"")?; 28 | w.write_all(name.replace('\"', "").as_bytes())?; 29 | w.write_all(b"\"\n")?; 30 | 31 | // prelude 32 | sexpr(w, "version", |w| w.write_all(b"20220630"))?; 33 | sexpr(w, "generator", |w| { 34 | w.write_all(b"\"")?; 35 | w.write_all( 36 | concat!(env!("CARGO_PKG_NAME"), " ", env!("CARGO_PKG_VERSION")).as_bytes(), 37 | )?; 38 | w.write_all(b"\"") 39 | })?; 40 | sexpr(w, "layer", |w| w.write_all(b"F.SilkS"))?; 41 | sexpr(w, "tedit", |w| w.write_all(b"0"))?; 42 | sexpr(w, "attr", |w| { 43 | w.write_all(b"board_only exclude_from_pos_files exclude_from_bom") 44 | })?; 45 | 46 | // text references 47 | sexpr(w, "fp_text", |w| { 48 | w.write_all(b"reference \"G***\" (at 0 0) (layer F.Fab)\n")?; 49 | w.write_all(b"(effects (font (size 1.524 1.524) (thickness 0.3)))\n")?; 50 | tstamp(w, &mut r) 51 | })?; 52 | sexpr(w, "fp_text", |w| { 53 | w.write_all(b"value \"LOGO\" (at 0.75 0) (layer F.Fab) hide\n")?; 54 | w.write_all(b"(effects (font (size 1.524 1.524) (thickness 0.3)))\n")?; 55 | tstamp(w, &mut r) 56 | })?; 57 | 58 | // pixels 59 | for (x, y, pixel) in image.pixels() { 60 | let pos = PixelPos { 61 | x: PixelDim(x), 62 | y: PixelDim(y), 63 | }; 64 | let kind = match PixelKind::from_pixel(pixel, config) { 65 | Some(k) => k, 66 | None => continue, 67 | }; 68 | let layers: &[_] = match kind { 69 | PixelKind::Light => &["F.SilkS"], 70 | PixelKind::Dark => &["F.Cu", "F.Mask"], 71 | }; 72 | let nearby = Nearby::from_pos(&image, pos, config); 73 | for layer in layers { 74 | sexpr(w, "fp_poly", |w| { 75 | sexpr(w, "pts", |w| { 76 | for_each_point_in_pixel(pos, kind, &nearby, &extents, config, |point| { 77 | sexpr(w, "xy", |w| write!(w, "{} {}", point.x, point.y)) 78 | }) 79 | })?; 80 | sexpr(w, "layer", |w| w.write_all(layer.as_bytes()))?; 81 | sexpr(w, "width", |w| w.write_all(b"0"))?; 82 | sexpr(w, "fill", |w| w.write_all(b"solid"))?; 83 | tstamp(w, &mut r) 84 | })?; 85 | } 86 | } 87 | 88 | Ok(()) 89 | }) 90 | } 91 | 92 | fn tstamp(w: &mut impl Write, r: &mut impl Rng) -> Result<(), io::Error> { 93 | sexpr(w, "tstamp", |w| { 94 | let uuid = uuid::Builder::from_random_bytes(r.gen()).into_uuid(); 95 | write!(w, "{}", uuid) 96 | }) 97 | } 98 | 99 | fn sexpr( 100 | w: &mut W, 101 | name: &str, 102 | f: impl FnOnce(&mut W) -> Result, 103 | ) -> Result { 104 | w.write_all(b"(")?; 105 | w.write_all(name.as_bytes())?; 106 | w.write_all(b" ")?; 107 | let r = f(w)?; 108 | w.write_all(b")\n")?; 109 | Ok(r) 110 | } 111 | -------------------------------------------------------------------------------- /src/analyze.rs: -------------------------------------------------------------------------------- 1 | use crate::opt::Config; 2 | use crate::sizes::{KicadPos, PixelDim, PixelPos}; 3 | use image::{GenericImageView, LumaA, Pixel}; 4 | 5 | #[derive(Debug, Copy, Clone, PartialEq)] 6 | pub enum PixelKind { 7 | Light, 8 | Dark, 9 | } 10 | 11 | impl PixelKind { 12 | pub fn from_pixel(pixel: impl Pixel, config: &Config) -> Option { 13 | let LumaA([luma, alpha]) = pixel.to_luma_alpha(); 14 | 15 | let is_light = match () { 16 | _ if alpha < u8::MAX / 2 => return None, 17 | _ if luma > u8::MAX / 2 => true, 18 | _ => false, 19 | }; 20 | 21 | match is_light ^ config.invert { 22 | true => Some(Self::Light), 23 | false => Some(Self::Dark), 24 | } 25 | } 26 | } 27 | 28 | #[derive(Debug)] 29 | pub struct Extents { 30 | pub min: PixelPos, 31 | pub max: PixelPos, 32 | } 33 | 34 | impl Extents { 35 | pub fn from_image( 36 | image: &impl GenericImageView>, 37 | config: &Config, 38 | ) -> Self { 39 | let mut min_x = u32::MAX; 40 | let mut max_x = 0; 41 | let mut min_y = u32::MAX; 42 | let mut max_y = 0; 43 | 44 | for (x, y, pixel) in image.pixels() { 45 | if PixelKind::from_pixel(pixel, config).is_some() { 46 | min_x = min_x.min(x); 47 | max_x = max_x.max(x); 48 | min_y = min_y.min(y); 49 | max_y = max_y.max(y); 50 | } 51 | } 52 | 53 | Self { 54 | min: PixelPos { 55 | x: PixelDim(min_x), 56 | y: PixelDim(min_y), 57 | }, 58 | max: PixelPos { 59 | x: PixelDim(max_x), 60 | y: PixelDim(max_y), 61 | }, 62 | } 63 | } 64 | 65 | pub fn center(&self) -> PixelPos { 66 | let x = self.min.x.0 + (self.max.x.0 - self.min.x.0) / 2; 67 | let y = self.min.y.0 + (self.max.y.0 - self.min.y.0) / 2; 68 | PixelPos { 69 | x: PixelDim(x), 70 | y: PixelDim(y), 71 | } 72 | } 73 | } 74 | 75 | #[derive(Debug)] 76 | pub struct Nearby { 77 | pub top: Option, 78 | pub bot: Option, 79 | pub left: Option, 80 | pub right: Option, 81 | pub top_left: Option, 82 | pub top_right: Option, 83 | pub bot_left: Option, 84 | pub bot_right: Option, 85 | } 86 | 87 | impl Nearby { 88 | pub fn from_pos( 89 | image: &impl GenericImageView>, 90 | PixelPos { 91 | x: PixelDim(x), 92 | y: PixelDim(y), 93 | }: PixelPos, 94 | config: &Config, 95 | ) -> Self { 96 | let try_get = |x, y| { 97 | let x = x?; 98 | let y = y?; 99 | if image.in_bounds(x, y) { 100 | PixelKind::from_pixel(image.get_pixel(x, y), config) 101 | } else { 102 | None 103 | } 104 | }; 105 | Self { 106 | top: try_get(Some(x), y.checked_sub(1)), 107 | bot: try_get(Some(x), y.checked_add(1)), 108 | left: try_get(x.checked_sub(1), Some(y)), 109 | right: try_get(x.checked_add(1), Some(y)), 110 | top_left: try_get(x.checked_sub(1), y.checked_sub(1)), 111 | top_right: try_get(x.checked_add(1), y.checked_sub(1)), 112 | bot_left: try_get(x.checked_sub(1), y.checked_add(1)), 113 | bot_right: try_get(x.checked_add(1), y.checked_add(1)), 114 | } 115 | } 116 | } 117 | 118 | pub fn for_each_point_in_pixel( 119 | top_left: PixelPos, 120 | kind: PixelKind, 121 | nearby: &Nearby, 122 | extents: &Extents, 123 | config: &Config, 124 | mut f: impl FnMut(KicadPos) -> Result<(), E>, 125 | ) -> Result<(), E> { 126 | // shift by 1 since we base positions on the top left of the pixel 127 | let center = extents.center() + PixelPos::X1 + PixelPos::Y1; 128 | // find pixel coords of edges 129 | let top = top_left.y; 130 | let bot = top + PixelDim(1); 131 | let left = top_left.x; 132 | let right = left + PixelDim(1); 133 | // find kicad coords of edges 134 | let kicad_pos = |pos: PixelDim, center_pos: PixelDim| { 135 | let relative_pos = config.pixel_pitch * pos.abs_diff(center_pos); 136 | if pos < center_pos { 137 | -relative_pos 138 | } else { 139 | relative_pos 140 | } 141 | }; 142 | let top = kicad_pos(top, center.y); 143 | let bot = kicad_pos(bot, center.y); 144 | let left = kicad_pos(left, center.x); 145 | let right = kicad_pos(right, center.x); 146 | // place points 147 | let mut add_points_from = 148 | |mut x, mut y, horiz, vert, diag, horiz_is_positive, vert_is_positive| { 149 | let sub_or_add = |lhs, should_sub, rhs| { 150 | if should_sub { 151 | lhs - rhs 152 | } else { 153 | lhs + rhs 154 | } 155 | }; 156 | 157 | match kind { 158 | PixelKind::Dark => { 159 | // dark pixels always fill the entire pixel, and don't need special processing 160 | f(KicadPos { x, y }) 161 | } 162 | PixelKind::Light => { 163 | // prepare inset dimensions 164 | let x_inset = sub_or_add(x, horiz_is_positive, config.clearance); 165 | let y_inset = sub_or_add(y, vert_is_positive, config.clearance); 166 | 167 | // add clearance for directly adjacent dark->light pixel transitions 168 | if horiz == Some(PixelKind::Dark) { 169 | x = x_inset; 170 | } 171 | if vert == Some(PixelKind::Dark) { 172 | y = y_inset; 173 | } 174 | 175 | if x == x_inset || y == y_inset || diag != Some(PixelKind::Dark) { 176 | // normal case: no diagonal inclusion, or already inset on one side or the other 177 | f(KicadPos { x, y }) 178 | } else { 179 | // special case: handle diagonal inclusion, splitting the corner into three points 180 | // x x_inset 181 | // 182 | // y + +---- ... 183 | // | 184 | // y_inset +--+ 185 | // | 186 | // | 187 | // ... 188 | let mut new_points = [ 189 | KicadPos { x, y: y_inset }, 190 | KicadPos { 191 | x: x_inset, 192 | y: y_inset, 193 | }, 194 | KicadPos { x: x_inset, y }, 195 | ]; 196 | // handle different coordinate ordering for top right and bottom left 197 | if horiz_is_positive != vert_is_positive { 198 | new_points.reverse(); 199 | } 200 | for point in new_points { 201 | f(point)?; 202 | } 203 | Ok(()) 204 | } 205 | } 206 | } 207 | }; 208 | add_points_from( 209 | left, 210 | top, 211 | nearby.left, 212 | nearby.top, 213 | nearby.top_left, 214 | false, 215 | false, 216 | )?; 217 | add_points_from( 218 | right, 219 | top, 220 | nearby.right, 221 | nearby.top, 222 | nearby.top_right, 223 | true, 224 | false, 225 | )?; 226 | add_points_from( 227 | right, 228 | bot, 229 | nearby.right, 230 | nearby.bot, 231 | nearby.bot_right, 232 | true, 233 | true, 234 | )?; 235 | add_points_from( 236 | left, 237 | bot, 238 | nearby.left, 239 | nearby.bot, 240 | nearby.bot_left, 241 | false, 242 | true, 243 | )?; 244 | Ok(()) 245 | } 246 | -------------------------------------------------------------------------------- /src/tests/snapshots/silkgen__tests__clearance-invert.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: src/tests/mod.rs 3 | expression: "run_against(stringify!(clearance), include_bytes!(\"clearance.png\"), true)" 4 | --- 5 | (footprint "clearance" 6 | (version 20220630) 7 | (generator "silkgen x.x.x") 8 | (layer F.SilkS) 9 | (tedit 0) 10 | (attr board_only exclude_from_pos_files exclude_from_bom) 11 | (fp_text reference "G***" (at 0 0) (layer F.Fab) 12 | (effects (font (size 1.524 1.524) (thickness 0.3))) 13 | (tstamp 98b43658-8d3d-4656-8f86-4faef3e0a688) 14 | ) 15 | (fp_text value "LOGO" (at 0.75 0) (layer F.Fab) hide 16 | (effects (font (size 1.524 1.524) (thickness 0.3))) 17 | (tstamp b67d1f63-6c42-4a22-836d-9db4f99eef3c) 18 | ) 19 | (fp_poly (pts (xy -6 -6) 20 | (xy -5 -6) 21 | (xy -5 -5) 22 | (xy -6 -5) 23 | ) 24 | (layer F.Cu) 25 | (width 0) 26 | (fill solid) 27 | (tstamp eb3df6c0-d8a9-48e6-b108-a12d43aa14a4) 28 | ) 29 | (fp_poly (pts (xy -6 -6) 30 | (xy -5 -6) 31 | (xy -5 -5) 32 | (xy -6 -5) 33 | ) 34 | (layer F.Mask) 35 | (width 0) 36 | (fill solid) 37 | (tstamp 327801b1-f487-4790-bac6-d756877c8395) 38 | ) 39 | (fp_poly (pts (xy -5 -6) 40 | (xy -4 -6) 41 | (xy -4 -5) 42 | (xy -5 -5) 43 | ) 44 | (layer F.Cu) 45 | (width 0) 46 | (fill solid) 47 | (tstamp 8016e7e1-5ba3-436a-8726-bad06ccb7101) 48 | ) 49 | (fp_poly (pts (xy -5 -6) 50 | (xy -4 -6) 51 | (xy -4 -5) 52 | (xy -5 -5) 53 | ) 54 | (layer F.Mask) 55 | (width 0) 56 | (fill solid) 57 | (tstamp f74a90d6-17d0-4d94-83dd-fa506c379c35) 58 | ) 59 | (fp_poly (pts (xy -3 -6) 60 | (xy -2 -6) 61 | (xy -2 -5.1) 62 | (xy -3 -5.1) 63 | ) 64 | (layer F.SilkS) 65 | (width 0) 66 | (fill solid) 67 | (tstamp 4d14bb37-b2d8-4935-94ef-901c00738830) 68 | ) 69 | (fp_poly (pts (xy -2 -6) 70 | (xy -1 -6) 71 | (xy -1 -5.1) 72 | (xy -2 -5.1) 73 | ) 74 | (layer F.SilkS) 75 | (width 0) 76 | (fill solid) 77 | (tstamp 4574a038-f5e9-4e7a-99c3-d559038b7a49) 78 | ) 79 | (fp_poly (pts (xy 0 -6) 80 | (xy 1 -6) 81 | (xy 1 -5) 82 | (xy 0 -5) 83 | ) 84 | (layer F.Cu) 85 | (width 0) 86 | (fill solid) 87 | (tstamp 3709d54c-913d-4049-a0a8-5ed81711b4a0) 88 | ) 89 | (fp_poly (pts (xy 0 -6) 90 | (xy 1 -6) 91 | (xy 1 -5) 92 | (xy 0 -5) 93 | ) 94 | (layer F.Mask) 95 | (width 0) 96 | (fill solid) 97 | (tstamp b229b08b-8a5d-4cdb-b949-b72366c39dc9) 98 | ) 99 | (fp_poly (pts (xy 1.1 -6) 100 | (xy 2 -6) 101 | (xy 2 -5) 102 | (xy 1.1 -5) 103 | ) 104 | (layer F.SilkS) 105 | (width 0) 106 | (fill solid) 107 | (tstamp f55b84ea-2c84-41d8-b5bf-40bfdab5182c) 108 | ) 109 | (fp_poly (pts (xy 3 -6) 110 | (xy 3.9 -6) 111 | (xy 3.9 -5) 112 | (xy 3 -5) 113 | ) 114 | (layer F.SilkS) 115 | (width 0) 116 | (fill solid) 117 | (tstamp 482a7c12-99a1-451f-89be-ec1fb9941d41) 118 | ) 119 | (fp_poly (pts (xy 4 -6) 120 | (xy 5 -6) 121 | (xy 5 -5) 122 | (xy 4 -5) 123 | ) 124 | (layer F.Cu) 125 | (width 0) 126 | (fill solid) 127 | (tstamp fea3f26f-11c8-4e50-85b6-9268ae836a0e) 128 | ) 129 | (fp_poly (pts (xy 4 -6) 130 | (xy 5 -6) 131 | (xy 5 -5) 132 | (xy 4 -5) 133 | ) 134 | (layer F.Mask) 135 | (width 0) 136 | (fill solid) 137 | (tstamp 3efbc0cc-c11a-4cdc-b792-fd68cb807371) 138 | ) 139 | (fp_poly (pts (xy -6 -4.9) 140 | (xy -5 -4.9) 141 | (xy -5 -4) 142 | (xy -6 -4) 143 | ) 144 | (layer F.SilkS) 145 | (width 0) 146 | (fill solid) 147 | (tstamp f8bc5631-82aa-431c-8485-609c30f4200a) 148 | ) 149 | (fp_poly (pts (xy -5 -4.9) 150 | (xy -4 -4.9) 151 | (xy -4 -4) 152 | (xy -5 -4) 153 | ) 154 | (layer F.SilkS) 155 | (width 0) 156 | (fill solid) 157 | (tstamp cacb60e7-0753-4798-8081-d7ce873fbdb6) 158 | ) 159 | (fp_poly (pts (xy -3 -5) 160 | (xy -2 -5) 161 | (xy -2 -4) 162 | (xy -3 -4) 163 | ) 164 | (layer F.Cu) 165 | (width 0) 166 | (fill solid) 167 | (tstamp 3917046f-0dd4-4491-bc8e-77111ac12497) 168 | ) 169 | (fp_poly (pts (xy -3 -5) 170 | (xy -2 -5) 171 | (xy -2 -4) 172 | (xy -3 -4) 173 | ) 174 | (layer F.Mask) 175 | (width 0) 176 | (fill solid) 177 | (tstamp 4ca52df6-0a91-4a16-b03d-c5289a4bfce1) 178 | ) 179 | (fp_poly (pts (xy -2 -5) 180 | (xy -1 -5) 181 | (xy -1 -4) 182 | (xy -2 -4) 183 | ) 184 | (layer F.Cu) 185 | (width 0) 186 | (fill solid) 187 | (tstamp da2ff761-c5b0-405d-99b1-b738a329aeca) 188 | ) 189 | (fp_poly (pts (xy -2 -5) 190 | (xy -1 -5) 191 | (xy -1 -4) 192 | (xy -2 -4) 193 | ) 194 | (layer F.Mask) 195 | (width 0) 196 | (fill solid) 197 | (tstamp 5e7ca18b-d5a4-4cd6-89fb-3fdd4246c140) 198 | ) 199 | (fp_poly (pts (xy 0 -5) 200 | (xy 1 -5) 201 | (xy 1 -4) 202 | (xy 0 -4) 203 | ) 204 | (layer F.Cu) 205 | (width 0) 206 | (fill solid) 207 | (tstamp dc1ddd13-30a6-48f9-8aa4-bdf9ddcfb714) 208 | ) 209 | (fp_poly (pts (xy 0 -5) 210 | (xy 1 -5) 211 | (xy 1 -4) 212 | (xy 0 -4) 213 | ) 214 | (layer F.Mask) 215 | (width 0) 216 | (fill solid) 217 | (tstamp fb80ba53-edf3-4ac7-a6ef-8cf96f9fb9ab) 218 | ) 219 | (fp_poly (pts (xy 1.1 -5) 220 | (xy 2 -5) 221 | (xy 2 -4) 222 | (xy 1.1 -4) 223 | ) 224 | (layer F.SilkS) 225 | (width 0) 226 | (fill solid) 227 | (tstamp 56aa9ce5-5268-4442-9a44-1aaedd5468a4) 228 | ) 229 | (fp_poly (pts (xy 3 -5) 230 | (xy 3.9 -5) 231 | (xy 3.9 -4) 232 | (xy 3 -4) 233 | ) 234 | (layer F.SilkS) 235 | (width 0) 236 | (fill solid) 237 | (tstamp 0ad272eb-d0df-4b19-b6bd-1e06ff3e49c8) 238 | ) 239 | (fp_poly (pts (xy 4 -5) 240 | (xy 5 -5) 241 | (xy 5 -4) 242 | (xy 4 -4) 243 | ) 244 | (layer F.Cu) 245 | (width 0) 246 | (fill solid) 247 | (tstamp 56cd2cd5-bb39-49f7-82b4-01fec8a8cc30) 248 | ) 249 | (fp_poly (pts (xy 4 -5) 250 | (xy 5 -5) 251 | (xy 5 -4) 252 | (xy 4 -4) 253 | ) 254 | (layer F.Mask) 255 | (width 0) 256 | (fill solid) 257 | (tstamp 1a765f72-1153-489a-8bdf-267ccb79fb78) 258 | ) 259 | (fp_poly (pts (xy -6 -3) 260 | (xy -5 -3) 261 | (xy -5 -2) 262 | (xy -6 -2) 263 | ) 264 | (layer F.Cu) 265 | (width 0) 266 | (fill solid) 267 | (tstamp 7bf0fa7a-b2f8-4a85-b0f2-f79e23e0790a) 268 | ) 269 | (fp_poly (pts (xy -6 -3) 270 | (xy -5 -3) 271 | (xy -5 -2) 272 | (xy -6 -2) 273 | ) 274 | (layer F.Mask) 275 | (width 0) 276 | (fill solid) 277 | (tstamp 00229bed-f4d6-4d59-8c62-11c71f00c5c8) 278 | ) 279 | (fp_poly (pts (xy -4.9 -3) 280 | (xy -4 -3) 281 | (xy -4 -2) 282 | (xy -4.9 -2) 283 | ) 284 | (layer F.SilkS) 285 | (width 0) 286 | (fill solid) 287 | (tstamp b8e8cf6f-2341-4169-aead-010588171a52) 288 | ) 289 | (fp_poly (pts (xy -3 -3) 290 | (xy -2.1 -3) 291 | (xy -2.1 -2) 292 | (xy -3 -2) 293 | ) 294 | (layer F.SilkS) 295 | (width 0) 296 | (fill solid) 297 | (tstamp 03301e23-4a4b-4355-a252-d293794adfbc) 298 | ) 299 | (fp_poly (pts (xy -2 -3) 300 | (xy -1 -3) 301 | (xy -1 -2) 302 | (xy -2 -2) 303 | ) 304 | (layer F.Cu) 305 | (width 0) 306 | (fill solid) 307 | (tstamp 1d970a54-1fed-4601-87e8-9b5908091f9c) 308 | ) 309 | (fp_poly (pts (xy -2 -3) 310 | (xy -1 -3) 311 | (xy -1 -2) 312 | (xy -2 -2) 313 | ) 314 | (layer F.Mask) 315 | (width 0) 316 | (fill solid) 317 | (tstamp 2621f9ce-a325-4b6a-a131-00164bdad811) 318 | ) 319 | (fp_poly (pts (xy 0 -3) 320 | (xy 1 -3) 321 | (xy 1 -2.1) 322 | (xy 0.9 -2.1) 323 | (xy 0.9 -2) 324 | (xy 0 -2) 325 | ) 326 | (layer F.SilkS) 327 | (width 0) 328 | (fill solid) 329 | (tstamp 1217d85e-d2b8-4780-aaf2-2aae62127ccd) 330 | ) 331 | (fp_poly (pts (xy 1 -3) 332 | (xy 2 -3) 333 | (xy 2 -2.1) 334 | (xy 1 -2.1) 335 | ) 336 | (layer F.SilkS) 337 | (width 0) 338 | (fill solid) 339 | (tstamp 77d3887c-1f57-4128-8771-811bf5684de5) 340 | ) 341 | (fp_poly (pts (xy 3 -3) 342 | (xy 4 -3) 343 | (xy 4 -2.1) 344 | (xy 3 -2.1) 345 | ) 346 | (layer F.SilkS) 347 | (width 0) 348 | (fill solid) 349 | (tstamp 4ea89a1c-d097-43a7-b331-c5d6d1da3082) 350 | ) 351 | (fp_poly (pts (xy 4 -3) 352 | (xy 5 -3) 353 | (xy 5 -2) 354 | (xy 4.1 -2) 355 | (xy 4.1 -2.1) 356 | (xy 4 -2.1) 357 | ) 358 | (layer F.SilkS) 359 | (width 0) 360 | (fill solid) 361 | (tstamp ad095262-f472-4214-8a40-76a643bfb12f) 362 | ) 363 | (fp_poly (pts (xy -6 -1.9) 364 | (xy -5 -1.9) 365 | (xy -5 -1) 366 | (xy -6 -1) 367 | ) 368 | (layer F.SilkS) 369 | (width 0) 370 | (fill solid) 371 | (tstamp f147514c-f2c3-43d0-ac00-7645ac8da4d8) 372 | ) 373 | (fp_poly (pts (xy -5 -1.9) 374 | (xy -4.9 -1.9) 375 | (xy -4.9 -2) 376 | (xy -4 -2) 377 | (xy -4 -1) 378 | (xy -5 -1) 379 | ) 380 | (layer F.SilkS) 381 | (width 0) 382 | (fill solid) 383 | (tstamp 6a4f16a8-cb40-40d6-81fe-6121def8da3a) 384 | ) 385 | (fp_poly (pts (xy -3 -2) 386 | (xy -2.1 -2) 387 | (xy -2.1 -1.9) 388 | (xy -2 -1.9) 389 | (xy -2 -1) 390 | (xy -3 -1) 391 | ) 392 | (layer F.SilkS) 393 | (width 0) 394 | (fill solid) 395 | (tstamp 650b4418-057d-43a5-9c6f-58382ba77824) 396 | ) 397 | (fp_poly (pts (xy -2 -1.9) 398 | (xy -1 -1.9) 399 | (xy -1 -1) 400 | (xy -2 -1) 401 | ) 402 | (layer F.SilkS) 403 | (width 0) 404 | (fill solid) 405 | (tstamp fafc65f7-fd01-4d8d-9540-b98c1aa25b45) 406 | ) 407 | (fp_poly (pts (xy 0 -2) 408 | (xy 0.9 -2) 409 | (xy 0.9 -1) 410 | (xy 0 -1) 411 | ) 412 | (layer F.SilkS) 413 | (width 0) 414 | (fill solid) 415 | (tstamp b17308d8-a049-4461-9e1d-704c0c1267a9) 416 | ) 417 | (fp_poly (pts (xy 1 -2) 418 | (xy 2 -2) 419 | (xy 2 -1) 420 | (xy 1 -1) 421 | ) 422 | (layer F.Cu) 423 | (width 0) 424 | (fill solid) 425 | (tstamp 29a83cfb-c324-4a5a-8228-6061da9f701d) 426 | ) 427 | (fp_poly (pts (xy 1 -2) 428 | (xy 2 -2) 429 | (xy 2 -1) 430 | (xy 1 -1) 431 | ) 432 | (layer F.Mask) 433 | (width 0) 434 | (fill solid) 435 | (tstamp 700f2a28-7a64-47d4-9fd7-975c06adea9f) 436 | ) 437 | (fp_poly (pts (xy 3 -2) 438 | (xy 4 -2) 439 | (xy 4 -1) 440 | (xy 3 -1) 441 | ) 442 | (layer F.Cu) 443 | (width 0) 444 | (fill solid) 445 | (tstamp 16315029-caaa-4f70-8ea1-050dcf85f546) 446 | ) 447 | (fp_poly (pts (xy 3 -2) 448 | (xy 4 -2) 449 | (xy 4 -1) 450 | (xy 3 -1) 451 | ) 452 | (layer F.Mask) 453 | (width 0) 454 | (fill solid) 455 | (tstamp a8f9d7f4-9ec1-4645-9c15-f8d8c3ab6cc9) 456 | ) 457 | (fp_poly (pts (xy 4.1 -2) 458 | (xy 5 -2) 459 | (xy 5 -1) 460 | (xy 4.1 -1) 461 | ) 462 | (layer F.SilkS) 463 | (width 0) 464 | (fill solid) 465 | (tstamp c971750c-bd84-4bad-961c-13037a17829d) 466 | ) 467 | (fp_poly (pts (xy -6 0) 468 | (xy -5.1 0) 469 | (xy -5.1 0.9) 470 | (xy -6 0.9) 471 | ) 472 | (layer F.SilkS) 473 | (width 0) 474 | (fill solid) 475 | (tstamp 60013054-c669-49ff-882b-8af884f12938) 476 | ) 477 | (fp_poly (pts (xy -5 0) 478 | (xy -4 0) 479 | (xy -4 1) 480 | (xy -5 1) 481 | ) 482 | (layer F.Cu) 483 | (width 0) 484 | (fill solid) 485 | (tstamp 66b694e9-da53-4aa2-9a72-b3d133098944) 486 | ) 487 | (fp_poly (pts (xy -5 0) 488 | (xy -4 0) 489 | (xy -4 1) 490 | (xy -5 1) 491 | ) 492 | (layer F.Mask) 493 | (width 0) 494 | (fill solid) 495 | (tstamp 74804f71-6cf8-45fd-ab68-30d60fe51ad3) 496 | ) 497 | (fp_poly (pts (xy -3 0) 498 | (xy -2 0) 499 | (xy -2 1) 500 | (xy -3 1) 501 | ) 502 | (layer F.Cu) 503 | (width 0) 504 | (fill solid) 505 | (tstamp 7d6aa1ed-4b84-4862-a274-6444057f60b6) 506 | ) 507 | (fp_poly (pts (xy -3 0) 508 | (xy -2 0) 509 | (xy -2 1) 510 | (xy -3 1) 511 | ) 512 | (layer F.Mask) 513 | (width 0) 514 | (fill solid) 515 | (tstamp b1b0c335-42b2-4ea2-b94a-3ab33f78ea50) 516 | ) 517 | (fp_poly (pts (xy -1.9 0) 518 | (xy -1 0) 519 | (xy -1 0.9) 520 | (xy -1.9 0.9) 521 | ) 522 | (layer F.SilkS) 523 | (width 0) 524 | (fill solid) 525 | (tstamp 64dfe626-e903-4856-a08c-2fb9032795a1) 526 | ) 527 | (fp_poly (pts (xy 0 0) 528 | (xy 1 0) 529 | (xy 1 1) 530 | (xy 0 1) 531 | ) 532 | (layer F.Cu) 533 | (width 0) 534 | (fill solid) 535 | (tstamp 236a84f6-59b8-406f-8f6c-a23f92b371e7) 536 | ) 537 | (fp_poly (pts (xy 0 0) 538 | (xy 1 0) 539 | (xy 1 1) 540 | (xy 0 1) 541 | ) 542 | (layer F.Mask) 543 | (width 0) 544 | (fill solid) 545 | (tstamp afd94416-ec0f-41fa-80e5-92652f0dfd34) 546 | ) 547 | (fp_poly (pts (xy 1 0) 548 | (xy 2 0) 549 | (xy 2 1) 550 | (xy 1 1) 551 | ) 552 | (layer F.Cu) 553 | (width 0) 554 | (fill solid) 555 | (tstamp 42829724-f326-4456-9d0b-cab675f0c6ed) 556 | ) 557 | (fp_poly (pts (xy 1 0) 558 | (xy 2 0) 559 | (xy 2 1) 560 | (xy 1 1) 561 | ) 562 | (layer F.Mask) 563 | (width 0) 564 | (fill solid) 565 | (tstamp 840906cf-7b74-476f-a09b-877e27c97921) 566 | ) 567 | (fp_poly (pts (xy 3 0) 568 | (xy 4 0) 569 | (xy 4 1) 570 | (xy 3 1) 571 | ) 572 | (layer F.Cu) 573 | (width 0) 574 | (fill solid) 575 | (tstamp 4c1ef20a-36be-4604-be39-35f395648334) 576 | ) 577 | (fp_poly (pts (xy 3 0) 578 | (xy 4 0) 579 | (xy 4 1) 580 | (xy 3 1) 581 | ) 582 | (layer F.Mask) 583 | (width 0) 584 | (fill solid) 585 | (tstamp 2f2084c9-77d1-4911-b13c-f2f1b0a6e018) 586 | ) 587 | (fp_poly (pts (xy 4 0) 588 | (xy 5 0) 589 | (xy 5 1) 590 | (xy 4 1) 591 | ) 592 | (layer F.Cu) 593 | (width 0) 594 | (fill solid) 595 | (tstamp ac51d6ef-b7b3-46a5-8789-89162b113739) 596 | ) 597 | (fp_poly (pts (xy 4 0) 598 | (xy 5 0) 599 | (xy 5 1) 600 | (xy 4 1) 601 | ) 602 | (layer F.Mask) 603 | (width 0) 604 | (fill solid) 605 | (tstamp 22f361a2-0d1f-4185-8b87-1db752f5fbda) 606 | ) 607 | (fp_poly (pts (xy -6 1) 608 | (xy -5 1) 609 | (xy -5 2) 610 | (xy -6 2) 611 | ) 612 | (layer F.Cu) 613 | (width 0) 614 | (fill solid) 615 | (tstamp 98dbab72-1ede-456a-896f-30298a094e36) 616 | ) 617 | (fp_poly (pts (xy -6 1) 618 | (xy -5 1) 619 | (xy -5 2) 620 | (xy -6 2) 621 | ) 622 | (layer F.Mask) 623 | (width 0) 624 | (fill solid) 625 | (tstamp 5ebd1a71-b818-4f8b-937b-9e28f415d750) 626 | ) 627 | (fp_poly (pts (xy -5 1) 628 | (xy -4 1) 629 | (xy -4 2) 630 | (xy -5 2) 631 | ) 632 | (layer F.Cu) 633 | (width 0) 634 | (fill solid) 635 | (tstamp 254c376f-c9bc-49c9-8d86-57cea3750ad7) 636 | ) 637 | (fp_poly (pts (xy -5 1) 638 | (xy -4 1) 639 | (xy -4 2) 640 | (xy -5 2) 641 | ) 642 | (layer F.Mask) 643 | (width 0) 644 | (fill solid) 645 | (tstamp 9ab6ca36-f944-42f8-86da-f5ddaaab9f1d) 646 | ) 647 | (fp_poly (pts (xy -3 1) 648 | (xy -2 1) 649 | (xy -2 2) 650 | (xy -3 2) 651 | ) 652 | (layer F.Cu) 653 | (width 0) 654 | (fill solid) 655 | (tstamp 58ba9f25-2000-46ba-bcde-5fcd0563ad78) 656 | ) 657 | (fp_poly (pts (xy -3 1) 658 | (xy -2 1) 659 | (xy -2 2) 660 | (xy -3 2) 661 | ) 662 | (layer F.Mask) 663 | (width 0) 664 | (fill solid) 665 | (tstamp f5f757a2-75d8-4eb6-b808-bfdbda7603e6) 666 | ) 667 | (fp_poly (pts (xy -2 1) 668 | (xy -1 1) 669 | (xy -1 2) 670 | (xy -2 2) 671 | ) 672 | (layer F.Cu) 673 | (width 0) 674 | (fill solid) 675 | (tstamp 5b529f77-960e-49c2-a878-47d6403dfb69) 676 | ) 677 | (fp_poly (pts (xy -2 1) 678 | (xy -1 1) 679 | (xy -1 2) 680 | (xy -2 2) 681 | ) 682 | (layer F.Mask) 683 | (width 0) 684 | (fill solid) 685 | (tstamp 89d184d0-9ad7-4bf5-b212-80cb5ca7b7c3) 686 | ) 687 | (fp_poly (pts (xy 0 1) 688 | (xy 1 1) 689 | (xy 1 2) 690 | (xy 0 2) 691 | ) 692 | (layer F.Cu) 693 | (width 0) 694 | (fill solid) 695 | (tstamp 0359c76a-d15b-46af-b410-997a8a7059cb) 696 | ) 697 | (fp_poly (pts (xy 0 1) 698 | (xy 1 1) 699 | (xy 1 2) 700 | (xy 0 2) 701 | ) 702 | (layer F.Mask) 703 | (width 0) 704 | (fill solid) 705 | (tstamp 48549174-d152-4429-87ee-ebb626ded1d1) 706 | ) 707 | (fp_poly (pts (xy 1.1 1.1) 708 | (xy 2 1.1) 709 | (xy 2 2) 710 | (xy 1.1 2) 711 | ) 712 | (layer F.SilkS) 713 | (width 0) 714 | (fill solid) 715 | (tstamp 0215b16d-2f4f-4403-b881-9b7251aaa416) 716 | ) 717 | (fp_poly (pts (xy 3 1.1) 718 | (xy 3.9 1.1) 719 | (xy 3.9 2) 720 | (xy 3 2) 721 | ) 722 | (layer F.SilkS) 723 | (width 0) 724 | (fill solid) 725 | (tstamp ce46f77e-696e-4c50-8bd2-1e9a5115b257) 726 | ) 727 | (fp_poly (pts (xy 4 1) 728 | (xy 5 1) 729 | (xy 5 2) 730 | (xy 4 2) 731 | ) 732 | (layer F.Cu) 733 | (width 0) 734 | (fill solid) 735 | (tstamp d73432c1-d37a-4229-bb3e-ea611d113699) 736 | ) 737 | (fp_poly (pts (xy 4 1) 738 | (xy 5 1) 739 | (xy 5 2) 740 | (xy 4 2) 741 | ) 742 | (layer F.Mask) 743 | (width 0) 744 | (fill solid) 745 | (tstamp 07252f7c-e4fd-40df-b205-7f2978b68ace) 746 | ) 747 | (fp_poly (pts (xy -6 3) 748 | (xy -5 3) 749 | (xy -5 3.9) 750 | (xy -5.1 3.9) 751 | (xy -5.1 4) 752 | (xy -6 4) 753 | ) 754 | (layer F.SilkS) 755 | (width 0) 756 | (fill solid) 757 | (tstamp 5c35b2f4-062f-4277-aa20-c6832842d588) 758 | ) 759 | (fp_poly (pts (xy -2 3) 760 | (xy -1 3) 761 | (xy -1 4) 762 | (xy -1.9 4) 763 | (xy -1.9 3.9) 764 | (xy -2 3.9) 765 | ) 766 | (layer F.SilkS) 767 | (width 0) 768 | (fill solid) 769 | (tstamp 2e9d1997-68f3-4b6d-988f-e0cbb4068019) 770 | ) 771 | (fp_poly (pts (xy 0 3) 772 | (xy 1 3) 773 | (xy 1 4) 774 | (xy 0 4) 775 | ) 776 | (layer F.Cu) 777 | (width 0) 778 | (fill solid) 779 | (tstamp 2f9c47dc-28e9-4996-971a-b06f92eead6a) 780 | ) 781 | (fp_poly (pts (xy 0 3) 782 | (xy 1 3) 783 | (xy 1 4) 784 | (xy 0 4) 785 | ) 786 | (layer F.Mask) 787 | (width 0) 788 | (fill solid) 789 | (tstamp 6a2ada04-1c03-4fce-bfd3-deeaeea87c44) 790 | ) 791 | (fp_poly (pts (xy 4 3) 792 | (xy 5 3) 793 | (xy 5 4) 794 | (xy 4 4) 795 | ) 796 | (layer F.Cu) 797 | (width 0) 798 | (fill solid) 799 | (tstamp 4f96d929-26ea-4890-b641-81451c8f3741) 800 | ) 801 | (fp_poly (pts (xy 4 3) 802 | (xy 5 3) 803 | (xy 5 4) 804 | (xy 4 4) 805 | ) 806 | (layer F.Mask) 807 | (width 0) 808 | (fill solid) 809 | (tstamp 1030d35a-f10f-40f9-b57e-ac3f5d565502) 810 | ) 811 | (fp_poly (pts (xy -5 4) 812 | (xy -4 4) 813 | (xy -4 5) 814 | (xy -5 5) 815 | ) 816 | (layer F.Cu) 817 | (width 0) 818 | (fill solid) 819 | (tstamp 9bb55264-d266-46cf-967a-88747fc74b9e) 820 | ) 821 | (fp_poly (pts (xy -5 4) 822 | (xy -4 4) 823 | (xy -4 5) 824 | (xy -5 5) 825 | ) 826 | (layer F.Mask) 827 | (width 0) 828 | (fill solid) 829 | (tstamp 37f94388-833e-48c8-8e6e-d1061fffd265) 830 | ) 831 | (fp_poly (pts (xy -3 4) 832 | (xy -2 4) 833 | (xy -2 5) 834 | (xy -3 5) 835 | ) 836 | (layer F.Cu) 837 | (width 0) 838 | (fill solid) 839 | (tstamp bf2476a1-09b7-41f2-b6b9-10708beca0bc) 840 | ) 841 | (fp_poly (pts (xy -3 4) 842 | (xy -2 4) 843 | (xy -2 5) 844 | (xy -3 5) 845 | ) 846 | (layer F.Mask) 847 | (width 0) 848 | (fill solid) 849 | (tstamp 6af9ff98-1cf2-4b61-9a66-24994e424227) 850 | ) 851 | (fp_poly (pts (xy 1 4.1) 852 | (xy 1.1 4.1) 853 | (xy 1.1 4) 854 | (xy 2 4) 855 | (xy 2 5) 856 | (xy 1 5) 857 | ) 858 | (layer F.SilkS) 859 | (width 0) 860 | (fill solid) 861 | (tstamp 380072c2-d010-4f4a-b918-b5d059e957c9) 862 | ) 863 | (fp_poly (pts (xy 3 4) 864 | (xy 3.9 4) 865 | (xy 3.9 4.1) 866 | (xy 4 4.1) 867 | (xy 4 5) 868 | (xy 3 5) 869 | ) 870 | (layer F.SilkS) 871 | (width 0) 872 | (fill solid) 873 | (tstamp 942ea56b-e553-486c-b38c-fb568aa5c445) 874 | ) 875 | ) 876 | 877 | -------------------------------------------------------------------------------- /src/tests/snapshots/silkgen__tests__clearance.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: src/tests/mod.rs 3 | expression: "run_against(stringify!(clearance), include_bytes!(\"clearance.png\"))" 4 | --- 5 | (footprint "clearance" 6 | (version 20220630) 7 | (generator "silkgen x.x.x") 8 | (layer F.SilkS) 9 | (tedit 0) 10 | (attr board_only exclude_from_pos_files exclude_from_bom) 11 | (fp_text reference "G***" (at 0 0) (layer F.Fab) 12 | (effects (font (size 1.524 1.524) (thickness 0.3))) 13 | (tstamp 98b43658-8d3d-4656-8f86-4faef3e0a688) 14 | ) 15 | (fp_text value "LOGO" (at 0.75 0) (layer F.Fab) hide 16 | (effects (font (size 1.524 1.524) (thickness 0.3))) 17 | (tstamp b67d1f63-6c42-4a22-836d-9db4f99eef3c) 18 | ) 19 | (fp_poly (pts (xy -6 -6) 20 | (xy -5 -6) 21 | (xy -5 -5.1) 22 | (xy -6 -5.1) 23 | ) 24 | (layer F.SilkS) 25 | (width 0) 26 | (fill solid) 27 | (tstamp eb3df6c0-d8a9-48e6-b108-a12d43aa14a4) 28 | ) 29 | (fp_poly (pts (xy -5 -6) 30 | (xy -4 -6) 31 | (xy -4 -5.1) 32 | (xy -5 -5.1) 33 | ) 34 | (layer F.SilkS) 35 | (width 0) 36 | (fill solid) 37 | (tstamp 327801b1-f487-4790-bac6-d756877c8395) 38 | ) 39 | (fp_poly (pts (xy -3 -6) 40 | (xy -2 -6) 41 | (xy -2 -5) 42 | (xy -3 -5) 43 | ) 44 | (layer F.Cu) 45 | (width 0) 46 | (fill solid) 47 | (tstamp 8016e7e1-5ba3-436a-8726-bad06ccb7101) 48 | ) 49 | (fp_poly (pts (xy -3 -6) 50 | (xy -2 -6) 51 | (xy -2 -5) 52 | (xy -3 -5) 53 | ) 54 | (layer F.Mask) 55 | (width 0) 56 | (fill solid) 57 | (tstamp f74a90d6-17d0-4d94-83dd-fa506c379c35) 58 | ) 59 | (fp_poly (pts (xy -2 -6) 60 | (xy -1 -6) 61 | (xy -1 -5) 62 | (xy -2 -5) 63 | ) 64 | (layer F.Cu) 65 | (width 0) 66 | (fill solid) 67 | (tstamp 4d14bb37-b2d8-4935-94ef-901c00738830) 68 | ) 69 | (fp_poly (pts (xy -2 -6) 70 | (xy -1 -6) 71 | (xy -1 -5) 72 | (xy -2 -5) 73 | ) 74 | (layer F.Mask) 75 | (width 0) 76 | (fill solid) 77 | (tstamp 4574a038-f5e9-4e7a-99c3-d559038b7a49) 78 | ) 79 | (fp_poly (pts (xy 0 -6) 80 | (xy 0.9 -6) 81 | (xy 0.9 -5) 82 | (xy 0 -5) 83 | ) 84 | (layer F.SilkS) 85 | (width 0) 86 | (fill solid) 87 | (tstamp 3709d54c-913d-4049-a0a8-5ed81711b4a0) 88 | ) 89 | (fp_poly (pts (xy 1 -6) 90 | (xy 2 -6) 91 | (xy 2 -5) 92 | (xy 1 -5) 93 | ) 94 | (layer F.Cu) 95 | (width 0) 96 | (fill solid) 97 | (tstamp b229b08b-8a5d-4cdb-b949-b72366c39dc9) 98 | ) 99 | (fp_poly (pts (xy 1 -6) 100 | (xy 2 -6) 101 | (xy 2 -5) 102 | (xy 1 -5) 103 | ) 104 | (layer F.Mask) 105 | (width 0) 106 | (fill solid) 107 | (tstamp f55b84ea-2c84-41d8-b5bf-40bfdab5182c) 108 | ) 109 | (fp_poly (pts (xy 3 -6) 110 | (xy 4 -6) 111 | (xy 4 -5) 112 | (xy 3 -5) 113 | ) 114 | (layer F.Cu) 115 | (width 0) 116 | (fill solid) 117 | (tstamp 482a7c12-99a1-451f-89be-ec1fb9941d41) 118 | ) 119 | (fp_poly (pts (xy 3 -6) 120 | (xy 4 -6) 121 | (xy 4 -5) 122 | (xy 3 -5) 123 | ) 124 | (layer F.Mask) 125 | (width 0) 126 | (fill solid) 127 | (tstamp fea3f26f-11c8-4e50-85b6-9268ae836a0e) 128 | ) 129 | (fp_poly (pts (xy 4.1 -6) 130 | (xy 5 -6) 131 | (xy 5 -5) 132 | (xy 4.1 -5) 133 | ) 134 | (layer F.SilkS) 135 | (width 0) 136 | (fill solid) 137 | (tstamp 3efbc0cc-c11a-4cdc-b792-fd68cb807371) 138 | ) 139 | (fp_poly (pts (xy -6 -5) 140 | (xy -5 -5) 141 | (xy -5 -4) 142 | (xy -6 -4) 143 | ) 144 | (layer F.Cu) 145 | (width 0) 146 | (fill solid) 147 | (tstamp f8bc5631-82aa-431c-8485-609c30f4200a) 148 | ) 149 | (fp_poly (pts (xy -6 -5) 150 | (xy -5 -5) 151 | (xy -5 -4) 152 | (xy -6 -4) 153 | ) 154 | (layer F.Mask) 155 | (width 0) 156 | (fill solid) 157 | (tstamp cacb60e7-0753-4798-8081-d7ce873fbdb6) 158 | ) 159 | (fp_poly (pts (xy -5 -5) 160 | (xy -4 -5) 161 | (xy -4 -4) 162 | (xy -5 -4) 163 | ) 164 | (layer F.Cu) 165 | (width 0) 166 | (fill solid) 167 | (tstamp 3917046f-0dd4-4491-bc8e-77111ac12497) 168 | ) 169 | (fp_poly (pts (xy -5 -5) 170 | (xy -4 -5) 171 | (xy -4 -4) 172 | (xy -5 -4) 173 | ) 174 | (layer F.Mask) 175 | (width 0) 176 | (fill solid) 177 | (tstamp 4ca52df6-0a91-4a16-b03d-c5289a4bfce1) 178 | ) 179 | (fp_poly (pts (xy -3 -4.9) 180 | (xy -2 -4.9) 181 | (xy -2 -4) 182 | (xy -3 -4) 183 | ) 184 | (layer F.SilkS) 185 | (width 0) 186 | (fill solid) 187 | (tstamp da2ff761-c5b0-405d-99b1-b738a329aeca) 188 | ) 189 | (fp_poly (pts (xy -2 -4.9) 190 | (xy -1 -4.9) 191 | (xy -1 -4) 192 | (xy -2 -4) 193 | ) 194 | (layer F.SilkS) 195 | (width 0) 196 | (fill solid) 197 | (tstamp 5e7ca18b-d5a4-4cd6-89fb-3fdd4246c140) 198 | ) 199 | (fp_poly (pts (xy 0 -5) 200 | (xy 0.9 -5) 201 | (xy 0.9 -4) 202 | (xy 0 -4) 203 | ) 204 | (layer F.SilkS) 205 | (width 0) 206 | (fill solid) 207 | (tstamp dc1ddd13-30a6-48f9-8aa4-bdf9ddcfb714) 208 | ) 209 | (fp_poly (pts (xy 1 -5) 210 | (xy 2 -5) 211 | (xy 2 -4) 212 | (xy 1 -4) 213 | ) 214 | (layer F.Cu) 215 | (width 0) 216 | (fill solid) 217 | (tstamp fb80ba53-edf3-4ac7-a6ef-8cf96f9fb9ab) 218 | ) 219 | (fp_poly (pts (xy 1 -5) 220 | (xy 2 -5) 221 | (xy 2 -4) 222 | (xy 1 -4) 223 | ) 224 | (layer F.Mask) 225 | (width 0) 226 | (fill solid) 227 | (tstamp 56aa9ce5-5268-4442-9a44-1aaedd5468a4) 228 | ) 229 | (fp_poly (pts (xy 3 -5) 230 | (xy 4 -5) 231 | (xy 4 -4) 232 | (xy 3 -4) 233 | ) 234 | (layer F.Cu) 235 | (width 0) 236 | (fill solid) 237 | (tstamp 0ad272eb-d0df-4b19-b6bd-1e06ff3e49c8) 238 | ) 239 | (fp_poly (pts (xy 3 -5) 240 | (xy 4 -5) 241 | (xy 4 -4) 242 | (xy 3 -4) 243 | ) 244 | (layer F.Mask) 245 | (width 0) 246 | (fill solid) 247 | (tstamp 56cd2cd5-bb39-49f7-82b4-01fec8a8cc30) 248 | ) 249 | (fp_poly (pts (xy 4.1 -5) 250 | (xy 5 -5) 251 | (xy 5 -4) 252 | (xy 4.1 -4) 253 | ) 254 | (layer F.SilkS) 255 | (width 0) 256 | (fill solid) 257 | (tstamp 1a765f72-1153-489a-8bdf-267ccb79fb78) 258 | ) 259 | (fp_poly (pts (xy -6 -3) 260 | (xy -5.1 -3) 261 | (xy -5.1 -2.1) 262 | (xy -6 -2.1) 263 | ) 264 | (layer F.SilkS) 265 | (width 0) 266 | (fill solid) 267 | (tstamp 7bf0fa7a-b2f8-4a85-b0f2-f79e23e0790a) 268 | ) 269 | (fp_poly (pts (xy -5 -3) 270 | (xy -4 -3) 271 | (xy -4 -2) 272 | (xy -5 -2) 273 | ) 274 | (layer F.Cu) 275 | (width 0) 276 | (fill solid) 277 | (tstamp 00229bed-f4d6-4d59-8c62-11c71f00c5c8) 278 | ) 279 | (fp_poly (pts (xy -5 -3) 280 | (xy -4 -3) 281 | (xy -4 -2) 282 | (xy -5 -2) 283 | ) 284 | (layer F.Mask) 285 | (width 0) 286 | (fill solid) 287 | (tstamp b8e8cf6f-2341-4169-aead-010588171a52) 288 | ) 289 | (fp_poly (pts (xy -3 -3) 290 | (xy -2 -3) 291 | (xy -2 -2) 292 | (xy -3 -2) 293 | ) 294 | (layer F.Cu) 295 | (width 0) 296 | (fill solid) 297 | (tstamp 03301e23-4a4b-4355-a252-d293794adfbc) 298 | ) 299 | (fp_poly (pts (xy -3 -3) 300 | (xy -2 -3) 301 | (xy -2 -2) 302 | (xy -3 -2) 303 | ) 304 | (layer F.Mask) 305 | (width 0) 306 | (fill solid) 307 | (tstamp 1d970a54-1fed-4601-87e8-9b5908091f9c) 308 | ) 309 | (fp_poly (pts (xy -1.9 -3) 310 | (xy -1 -3) 311 | (xy -1 -2.1) 312 | (xy -1.9 -2.1) 313 | ) 314 | (layer F.SilkS) 315 | (width 0) 316 | (fill solid) 317 | (tstamp 2621f9ce-a325-4b6a-a131-00164bdad811) 318 | ) 319 | (fp_poly (pts (xy 0 -3) 320 | (xy 1 -3) 321 | (xy 1 -2) 322 | (xy 0 -2) 323 | ) 324 | (layer F.Cu) 325 | (width 0) 326 | (fill solid) 327 | (tstamp 1217d85e-d2b8-4780-aaf2-2aae62127ccd) 328 | ) 329 | (fp_poly (pts (xy 0 -3) 330 | (xy 1 -3) 331 | (xy 1 -2) 332 | (xy 0 -2) 333 | ) 334 | (layer F.Mask) 335 | (width 0) 336 | (fill solid) 337 | (tstamp 77d3887c-1f57-4128-8771-811bf5684de5) 338 | ) 339 | (fp_poly (pts (xy 1 -3) 340 | (xy 2 -3) 341 | (xy 2 -2) 342 | (xy 1 -2) 343 | ) 344 | (layer F.Cu) 345 | (width 0) 346 | (fill solid) 347 | (tstamp 4ea89a1c-d097-43a7-b331-c5d6d1da3082) 348 | ) 349 | (fp_poly (pts (xy 1 -3) 350 | (xy 2 -3) 351 | (xy 2 -2) 352 | (xy 1 -2) 353 | ) 354 | (layer F.Mask) 355 | (width 0) 356 | (fill solid) 357 | (tstamp ad095262-f472-4214-8a40-76a643bfb12f) 358 | ) 359 | (fp_poly (pts (xy 3 -3) 360 | (xy 4 -3) 361 | (xy 4 -2) 362 | (xy 3 -2) 363 | ) 364 | (layer F.Cu) 365 | (width 0) 366 | (fill solid) 367 | (tstamp f147514c-f2c3-43d0-ac00-7645ac8da4d8) 368 | ) 369 | (fp_poly (pts (xy 3 -3) 370 | (xy 4 -3) 371 | (xy 4 -2) 372 | (xy 3 -2) 373 | ) 374 | (layer F.Mask) 375 | (width 0) 376 | (fill solid) 377 | (tstamp 6a4f16a8-cb40-40d6-81fe-6121def8da3a) 378 | ) 379 | (fp_poly (pts (xy 4 -3) 380 | (xy 5 -3) 381 | (xy 5 -2) 382 | (xy 4 -2) 383 | ) 384 | (layer F.Cu) 385 | (width 0) 386 | (fill solid) 387 | (tstamp 650b4418-057d-43a5-9c6f-58382ba77824) 388 | ) 389 | (fp_poly (pts (xy 4 -3) 390 | (xy 5 -3) 391 | (xy 5 -2) 392 | (xy 4 -2) 393 | ) 394 | (layer F.Mask) 395 | (width 0) 396 | (fill solid) 397 | (tstamp fafc65f7-fd01-4d8d-9540-b98c1aa25b45) 398 | ) 399 | (fp_poly (pts (xy -6 -2) 400 | (xy -5 -2) 401 | (xy -5 -1) 402 | (xy -6 -1) 403 | ) 404 | (layer F.Cu) 405 | (width 0) 406 | (fill solid) 407 | (tstamp b17308d8-a049-4461-9e1d-704c0c1267a9) 408 | ) 409 | (fp_poly (pts (xy -6 -2) 410 | (xy -5 -2) 411 | (xy -5 -1) 412 | (xy -6 -1) 413 | ) 414 | (layer F.Mask) 415 | (width 0) 416 | (fill solid) 417 | (tstamp 29a83cfb-c324-4a5a-8228-6061da9f701d) 418 | ) 419 | (fp_poly (pts (xy -5 -2) 420 | (xy -4 -2) 421 | (xy -4 -1) 422 | (xy -5 -1) 423 | ) 424 | (layer F.Cu) 425 | (width 0) 426 | (fill solid) 427 | (tstamp 700f2a28-7a64-47d4-9fd7-975c06adea9f) 428 | ) 429 | (fp_poly (pts (xy -5 -2) 430 | (xy -4 -2) 431 | (xy -4 -1) 432 | (xy -5 -1) 433 | ) 434 | (layer F.Mask) 435 | (width 0) 436 | (fill solid) 437 | (tstamp 16315029-caaa-4f70-8ea1-050dcf85f546) 438 | ) 439 | (fp_poly (pts (xy -3 -2) 440 | (xy -2 -2) 441 | (xy -2 -1) 442 | (xy -3 -1) 443 | ) 444 | (layer F.Cu) 445 | (width 0) 446 | (fill solid) 447 | (tstamp a8f9d7f4-9ec1-4645-9c15-f8d8c3ab6cc9) 448 | ) 449 | (fp_poly (pts (xy -3 -2) 450 | (xy -2 -2) 451 | (xy -2 -1) 452 | (xy -3 -1) 453 | ) 454 | (layer F.Mask) 455 | (width 0) 456 | (fill solid) 457 | (tstamp c971750c-bd84-4bad-961c-13037a17829d) 458 | ) 459 | (fp_poly (pts (xy -2 -2) 460 | (xy -1 -2) 461 | (xy -1 -1) 462 | (xy -2 -1) 463 | ) 464 | (layer F.Cu) 465 | (width 0) 466 | (fill solid) 467 | (tstamp 60013054-c669-49ff-882b-8af884f12938) 468 | ) 469 | (fp_poly (pts (xy -2 -2) 470 | (xy -1 -2) 471 | (xy -1 -1) 472 | (xy -2 -1) 473 | ) 474 | (layer F.Mask) 475 | (width 0) 476 | (fill solid) 477 | (tstamp 66b694e9-da53-4aa2-9a72-b3d133098944) 478 | ) 479 | (fp_poly (pts (xy 0 -2) 480 | (xy 1 -2) 481 | (xy 1 -1) 482 | (xy 0 -1) 483 | ) 484 | (layer F.Cu) 485 | (width 0) 486 | (fill solid) 487 | (tstamp 74804f71-6cf8-45fd-ab68-30d60fe51ad3) 488 | ) 489 | (fp_poly (pts (xy 0 -2) 490 | (xy 1 -2) 491 | (xy 1 -1) 492 | (xy 0 -1) 493 | ) 494 | (layer F.Mask) 495 | (width 0) 496 | (fill solid) 497 | (tstamp 7d6aa1ed-4b84-4862-a274-6444057f60b6) 498 | ) 499 | (fp_poly (pts (xy 1.1 -1.9) 500 | (xy 2 -1.9) 501 | (xy 2 -1) 502 | (xy 1.1 -1) 503 | ) 504 | (layer F.SilkS) 505 | (width 0) 506 | (fill solid) 507 | (tstamp b1b0c335-42b2-4ea2-b94a-3ab33f78ea50) 508 | ) 509 | (fp_poly (pts (xy 3 -1.9) 510 | (xy 3.9 -1.9) 511 | (xy 3.9 -1) 512 | (xy 3 -1) 513 | ) 514 | (layer F.SilkS) 515 | (width 0) 516 | (fill solid) 517 | (tstamp 64dfe626-e903-4856-a08c-2fb9032795a1) 518 | ) 519 | (fp_poly (pts (xy 4 -2) 520 | (xy 5 -2) 521 | (xy 5 -1) 522 | (xy 4 -1) 523 | ) 524 | (layer F.Cu) 525 | (width 0) 526 | (fill solid) 527 | (tstamp 236a84f6-59b8-406f-8f6c-a23f92b371e7) 528 | ) 529 | (fp_poly (pts (xy 4 -2) 530 | (xy 5 -2) 531 | (xy 5 -1) 532 | (xy 4 -1) 533 | ) 534 | (layer F.Mask) 535 | (width 0) 536 | (fill solid) 537 | (tstamp afd94416-ec0f-41fa-80e5-92652f0dfd34) 538 | ) 539 | (fp_poly (pts (xy -6 0) 540 | (xy -5 0) 541 | (xy -5 1) 542 | (xy -6 1) 543 | ) 544 | (layer F.Cu) 545 | (width 0) 546 | (fill solid) 547 | (tstamp 42829724-f326-4456-9d0b-cab675f0c6ed) 548 | ) 549 | (fp_poly (pts (xy -6 0) 550 | (xy -5 0) 551 | (xy -5 1) 552 | (xy -6 1) 553 | ) 554 | (layer F.Mask) 555 | (width 0) 556 | (fill solid) 557 | (tstamp 840906cf-7b74-476f-a09b-877e27c97921) 558 | ) 559 | (fp_poly (pts (xy -4.9 0) 560 | (xy -4 0) 561 | (xy -4 1) 562 | (xy -4.9 1) 563 | ) 564 | (layer F.SilkS) 565 | (width 0) 566 | (fill solid) 567 | (tstamp 4c1ef20a-36be-4604-be39-35f395648334) 568 | ) 569 | (fp_poly (pts (xy -3 0) 570 | (xy -2.1 0) 571 | (xy -2.1 1) 572 | (xy -3 1) 573 | ) 574 | (layer F.SilkS) 575 | (width 0) 576 | (fill solid) 577 | (tstamp 2f2084c9-77d1-4911-b13c-f2f1b0a6e018) 578 | ) 579 | (fp_poly (pts (xy -2 0) 580 | (xy -1 0) 581 | (xy -1 1) 582 | (xy -2 1) 583 | ) 584 | (layer F.Cu) 585 | (width 0) 586 | (fill solid) 587 | (tstamp ac51d6ef-b7b3-46a5-8789-89162b113739) 588 | ) 589 | (fp_poly (pts (xy -2 0) 590 | (xy -1 0) 591 | (xy -1 1) 592 | (xy -2 1) 593 | ) 594 | (layer F.Mask) 595 | (width 0) 596 | (fill solid) 597 | (tstamp 22f361a2-0d1f-4185-8b87-1db752f5fbda) 598 | ) 599 | (fp_poly (pts (xy 0 0) 600 | (xy 1 0) 601 | (xy 1 0.9) 602 | (xy 0.9 0.9) 603 | (xy 0.9 1) 604 | (xy 0 1) 605 | ) 606 | (layer F.SilkS) 607 | (width 0) 608 | (fill solid) 609 | (tstamp 98dbab72-1ede-456a-896f-30298a094e36) 610 | ) 611 | (fp_poly (pts (xy 1 0) 612 | (xy 2 0) 613 | (xy 2 0.9) 614 | (xy 1 0.9) 615 | ) 616 | (layer F.SilkS) 617 | (width 0) 618 | (fill solid) 619 | (tstamp 5ebd1a71-b818-4f8b-937b-9e28f415d750) 620 | ) 621 | (fp_poly (pts (xy 3 0) 622 | (xy 4 0) 623 | (xy 4 0.9) 624 | (xy 3 0.9) 625 | ) 626 | (layer F.SilkS) 627 | (width 0) 628 | (fill solid) 629 | (tstamp 254c376f-c9bc-49c9-8d86-57cea3750ad7) 630 | ) 631 | (fp_poly (pts (xy 4 0) 632 | (xy 5 0) 633 | (xy 5 1) 634 | (xy 4.1 1) 635 | (xy 4.1 0.9) 636 | (xy 4 0.9) 637 | ) 638 | (layer F.SilkS) 639 | (width 0) 640 | (fill solid) 641 | (tstamp 9ab6ca36-f944-42f8-86da-f5ddaaab9f1d) 642 | ) 643 | (fp_poly (pts (xy -6 1.1) 644 | (xy -5 1.1) 645 | (xy -5 2) 646 | (xy -6 2) 647 | ) 648 | (layer F.SilkS) 649 | (width 0) 650 | (fill solid) 651 | (tstamp 58ba9f25-2000-46ba-bcde-5fcd0563ad78) 652 | ) 653 | (fp_poly (pts (xy -5 1.1) 654 | (xy -4.9 1.1) 655 | (xy -4.9 1) 656 | (xy -4 1) 657 | (xy -4 2) 658 | (xy -5 2) 659 | ) 660 | (layer F.SilkS) 661 | (width 0) 662 | (fill solid) 663 | (tstamp f5f757a2-75d8-4eb6-b808-bfdbda7603e6) 664 | ) 665 | (fp_poly (pts (xy -3 1) 666 | (xy -2.1 1) 667 | (xy -2.1 1.1) 668 | (xy -2 1.1) 669 | (xy -2 2) 670 | (xy -3 2) 671 | ) 672 | (layer F.SilkS) 673 | (width 0) 674 | (fill solid) 675 | (tstamp 5b529f77-960e-49c2-a878-47d6403dfb69) 676 | ) 677 | (fp_poly (pts (xy -2 1.1) 678 | (xy -1 1.1) 679 | (xy -1 2) 680 | (xy -2 2) 681 | ) 682 | (layer F.SilkS) 683 | (width 0) 684 | (fill solid) 685 | (tstamp 89d184d0-9ad7-4bf5-b212-80cb5ca7b7c3) 686 | ) 687 | (fp_poly (pts (xy 0 1) 688 | (xy 0.9 1) 689 | (xy 0.9 2) 690 | (xy 0 2) 691 | ) 692 | (layer F.SilkS) 693 | (width 0) 694 | (fill solid) 695 | (tstamp 0359c76a-d15b-46af-b410-997a8a7059cb) 696 | ) 697 | (fp_poly (pts (xy 1 1) 698 | (xy 2 1) 699 | (xy 2 2) 700 | (xy 1 2) 701 | ) 702 | (layer F.Cu) 703 | (width 0) 704 | (fill solid) 705 | (tstamp 48549174-d152-4429-87ee-ebb626ded1d1) 706 | ) 707 | (fp_poly (pts (xy 1 1) 708 | (xy 2 1) 709 | (xy 2 2) 710 | (xy 1 2) 711 | ) 712 | (layer F.Mask) 713 | (width 0) 714 | (fill solid) 715 | (tstamp 0215b16d-2f4f-4403-b881-9b7251aaa416) 716 | ) 717 | (fp_poly (pts (xy 3 1) 718 | (xy 4 1) 719 | (xy 4 2) 720 | (xy 3 2) 721 | ) 722 | (layer F.Cu) 723 | (width 0) 724 | (fill solid) 725 | (tstamp ce46f77e-696e-4c50-8bd2-1e9a5115b257) 726 | ) 727 | (fp_poly (pts (xy 3 1) 728 | (xy 4 1) 729 | (xy 4 2) 730 | (xy 3 2) 731 | ) 732 | (layer F.Mask) 733 | (width 0) 734 | (fill solid) 735 | (tstamp d73432c1-d37a-4229-bb3e-ea611d113699) 736 | ) 737 | (fp_poly (pts (xy 4.1 1) 738 | (xy 5 1) 739 | (xy 5 2) 740 | (xy 4.1 2) 741 | ) 742 | (layer F.SilkS) 743 | (width 0) 744 | (fill solid) 745 | (tstamp 07252f7c-e4fd-40df-b205-7f2978b68ace) 746 | ) 747 | (fp_poly (pts (xy -6 3) 748 | (xy -5 3) 749 | (xy -5 4) 750 | (xy -6 4) 751 | ) 752 | (layer F.Cu) 753 | (width 0) 754 | (fill solid) 755 | (tstamp 5c35b2f4-062f-4277-aa20-c6832842d588) 756 | ) 757 | (fp_poly (pts (xy -6 3) 758 | (xy -5 3) 759 | (xy -5 4) 760 | (xy -6 4) 761 | ) 762 | (layer F.Mask) 763 | (width 0) 764 | (fill solid) 765 | (tstamp 2e9d1997-68f3-4b6d-988f-e0cbb4068019) 766 | ) 767 | (fp_poly (pts (xy -2 3) 768 | (xy -1 3) 769 | (xy -1 4) 770 | (xy -2 4) 771 | ) 772 | (layer F.Cu) 773 | (width 0) 774 | (fill solid) 775 | (tstamp 2f9c47dc-28e9-4996-971a-b06f92eead6a) 776 | ) 777 | (fp_poly (pts (xy -2 3) 778 | (xy -1 3) 779 | (xy -1 4) 780 | (xy -2 4) 781 | ) 782 | (layer F.Mask) 783 | (width 0) 784 | (fill solid) 785 | (tstamp 6a2ada04-1c03-4fce-bfd3-deeaeea87c44) 786 | ) 787 | (fp_poly (pts (xy 0 3) 788 | (xy 1 3) 789 | (xy 1 3.9) 790 | (xy 0.9 3.9) 791 | (xy 0.9 4) 792 | (xy 0 4) 793 | ) 794 | (layer F.SilkS) 795 | (width 0) 796 | (fill solid) 797 | (tstamp 4f96d929-26ea-4890-b641-81451c8f3741) 798 | ) 799 | (fp_poly (pts (xy 4 3) 800 | (xy 5 3) 801 | (xy 5 4) 802 | (xy 4.1 4) 803 | (xy 4.1 3.9) 804 | (xy 4 3.9) 805 | ) 806 | (layer F.SilkS) 807 | (width 0) 808 | (fill solid) 809 | (tstamp 1030d35a-f10f-40f9-b57e-ac3f5d565502) 810 | ) 811 | (fp_poly (pts (xy -5 4.1) 812 | (xy -4.9 4.1) 813 | (xy -4.9 4) 814 | (xy -4 4) 815 | (xy -4 5) 816 | (xy -5 5) 817 | ) 818 | (layer F.SilkS) 819 | (width 0) 820 | (fill solid) 821 | (tstamp 9bb55264-d266-46cf-967a-88747fc74b9e) 822 | ) 823 | (fp_poly (pts (xy -3 4) 824 | (xy -2.1 4) 825 | (xy -2.1 4.1) 826 | (xy -2 4.1) 827 | (xy -2 5) 828 | (xy -3 5) 829 | ) 830 | (layer F.SilkS) 831 | (width 0) 832 | (fill solid) 833 | (tstamp 37f94388-833e-48c8-8e6e-d1061fffd265) 834 | ) 835 | (fp_poly (pts (xy 1 4) 836 | (xy 2 4) 837 | (xy 2 5) 838 | (xy 1 5) 839 | ) 840 | (layer F.Cu) 841 | (width 0) 842 | (fill solid) 843 | (tstamp bf2476a1-09b7-41f2-b6b9-10708beca0bc) 844 | ) 845 | (fp_poly (pts (xy 1 4) 846 | (xy 2 4) 847 | (xy 2 5) 848 | (xy 1 5) 849 | ) 850 | (layer F.Mask) 851 | (width 0) 852 | (fill solid) 853 | (tstamp 6af9ff98-1cf2-4b61-9a66-24994e424227) 854 | ) 855 | (fp_poly (pts (xy 3 4) 856 | (xy 4 4) 857 | (xy 4 5) 858 | (xy 3 5) 859 | ) 860 | (layer F.Cu) 861 | (width 0) 862 | (fill solid) 863 | (tstamp 380072c2-d010-4f4a-b918-b5d059e957c9) 864 | ) 865 | (fp_poly (pts (xy 3 4) 866 | (xy 4 4) 867 | (xy 4 5) 868 | (xy 3 5) 869 | ) 870 | (layer F.Mask) 871 | (width 0) 872 | (fill solid) 873 | (tstamp 942ea56b-e553-486c-b38c-fb568aa5c445) 874 | ) 875 | ) 876 | 877 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "adler" 7 | version = "1.0.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 10 | 11 | [[package]] 12 | name = "anstream" 13 | version = "0.6.4" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" 16 | dependencies = [ 17 | "anstyle", 18 | "anstyle-parse", 19 | "anstyle-query", 20 | "anstyle-wincon", 21 | "colorchoice", 22 | "utf8parse", 23 | ] 24 | 25 | [[package]] 26 | name = "anstyle" 27 | version = "1.0.4" 28 | source = "registry+https://github.com/rust-lang/crates.io-index" 29 | checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" 30 | 31 | [[package]] 32 | name = "anstyle-parse" 33 | version = "0.2.2" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" 36 | dependencies = [ 37 | "utf8parse", 38 | ] 39 | 40 | [[package]] 41 | name = "anstyle-query" 42 | version = "1.0.0" 43 | source = "registry+https://github.com/rust-lang/crates.io-index" 44 | checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" 45 | dependencies = [ 46 | "windows-sys 0.48.0", 47 | ] 48 | 49 | [[package]] 50 | name = "anstyle-wincon" 51 | version = "3.0.1" 52 | source = "registry+https://github.com/rust-lang/crates.io-index" 53 | checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" 54 | dependencies = [ 55 | "anstyle", 56 | "windows-sys 0.48.0", 57 | ] 58 | 59 | [[package]] 60 | name = "autocfg" 61 | version = "1.1.0" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 64 | 65 | [[package]] 66 | name = "az" 67 | version = "1.2.1" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" 70 | 71 | [[package]] 72 | name = "bitflags" 73 | version = "1.3.2" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 76 | 77 | [[package]] 78 | name = "block-buffer" 79 | version = "0.10.4" 80 | source = "registry+https://github.com/rust-lang/crates.io-index" 81 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 82 | dependencies = [ 83 | "generic-array", 84 | ] 85 | 86 | [[package]] 87 | name = "bytemuck" 88 | version = "1.14.0" 89 | source = "registry+https://github.com/rust-lang/crates.io-index" 90 | checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" 91 | 92 | [[package]] 93 | name = "byteorder" 94 | version = "1.5.0" 95 | source = "registry+https://github.com/rust-lang/crates.io-index" 96 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 97 | 98 | [[package]] 99 | name = "cfg-if" 100 | version = "1.0.0" 101 | source = "registry+https://github.com/rust-lang/crates.io-index" 102 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 103 | 104 | [[package]] 105 | name = "clap" 106 | version = "4.4.6" 107 | source = "registry+https://github.com/rust-lang/crates.io-index" 108 | checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956" 109 | dependencies = [ 110 | "clap_builder", 111 | "clap_derive", 112 | ] 113 | 114 | [[package]] 115 | name = "clap_builder" 116 | version = "4.4.6" 117 | source = "registry+https://github.com/rust-lang/crates.io-index" 118 | checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45" 119 | dependencies = [ 120 | "anstream", 121 | "anstyle", 122 | "clap_lex", 123 | "strsim", 124 | ] 125 | 126 | [[package]] 127 | name = "clap_derive" 128 | version = "4.4.2" 129 | source = "registry+https://github.com/rust-lang/crates.io-index" 130 | checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" 131 | dependencies = [ 132 | "heck", 133 | "proc-macro2", 134 | "quote", 135 | "syn 2.0.38", 136 | ] 137 | 138 | [[package]] 139 | name = "clap_lex" 140 | version = "0.5.1" 141 | source = "registry+https://github.com/rust-lang/crates.io-index" 142 | checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" 143 | 144 | [[package]] 145 | name = "color_quant" 146 | version = "1.1.0" 147 | source = "registry+https://github.com/rust-lang/crates.io-index" 148 | checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" 149 | 150 | [[package]] 151 | name = "colorchoice" 152 | version = "1.0.0" 153 | source = "registry+https://github.com/rust-lang/crates.io-index" 154 | checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" 155 | 156 | [[package]] 157 | name = "console" 158 | version = "0.15.7" 159 | source = "registry+https://github.com/rust-lang/crates.io-index" 160 | checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" 161 | dependencies = [ 162 | "encode_unicode", 163 | "lazy_static", 164 | "libc", 165 | "windows-sys 0.45.0", 166 | ] 167 | 168 | [[package]] 169 | name = "convert_case" 170 | version = "0.4.0" 171 | source = "registry+https://github.com/rust-lang/crates.io-index" 172 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" 173 | 174 | [[package]] 175 | name = "cpufeatures" 176 | version = "0.2.9" 177 | source = "registry+https://github.com/rust-lang/crates.io-index" 178 | checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" 179 | dependencies = [ 180 | "libc", 181 | ] 182 | 183 | [[package]] 184 | name = "crc32fast" 185 | version = "1.3.2" 186 | source = "registry+https://github.com/rust-lang/crates.io-index" 187 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 188 | dependencies = [ 189 | "cfg-if", 190 | ] 191 | 192 | [[package]] 193 | name = "crunchy" 194 | version = "0.2.2" 195 | source = "registry+https://github.com/rust-lang/crates.io-index" 196 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 197 | 198 | [[package]] 199 | name = "crypto-common" 200 | version = "0.1.6" 201 | source = "registry+https://github.com/rust-lang/crates.io-index" 202 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 203 | dependencies = [ 204 | "generic-array", 205 | "typenum", 206 | ] 207 | 208 | [[package]] 209 | name = "derive_more" 210 | version = "0.99.17" 211 | source = "registry+https://github.com/rust-lang/crates.io-index" 212 | checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" 213 | dependencies = [ 214 | "convert_case", 215 | "proc-macro2", 216 | "quote", 217 | "rustc_version", 218 | "syn 1.0.109", 219 | ] 220 | 221 | [[package]] 222 | name = "digest" 223 | version = "0.10.7" 224 | source = "registry+https://github.com/rust-lang/crates.io-index" 225 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 226 | dependencies = [ 227 | "block-buffer", 228 | "crypto-common", 229 | ] 230 | 231 | [[package]] 232 | name = "encode_unicode" 233 | version = "0.3.6" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" 236 | 237 | [[package]] 238 | name = "env_logger" 239 | version = "0.10.0" 240 | source = "registry+https://github.com/rust-lang/crates.io-index" 241 | checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" 242 | dependencies = [ 243 | "humantime", 244 | "log", 245 | ] 246 | 247 | [[package]] 248 | name = "fdeflate" 249 | version = "0.3.0" 250 | source = "registry+https://github.com/rust-lang/crates.io-index" 251 | checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" 252 | dependencies = [ 253 | "simd-adler32", 254 | ] 255 | 256 | [[package]] 257 | name = "fixed" 258 | version = "1.24.0" 259 | source = "registry+https://github.com/rust-lang/crates.io-index" 260 | checksum = "02c69ce7e7c0f17aa18fdd9d0de39727adb9c6281f2ad12f57cbe54ae6e76e7d" 261 | dependencies = [ 262 | "az", 263 | "bytemuck", 264 | "half", 265 | "typenum", 266 | ] 267 | 268 | [[package]] 269 | name = "fixed-macro" 270 | version = "1.2.0" 271 | source = "registry+https://github.com/rust-lang/crates.io-index" 272 | checksum = "1fd0c48af8cb14e02868f449f8a2187bd78af7a08da201fdc78d518ecb1675bc" 273 | dependencies = [ 274 | "fixed", 275 | "fixed-macro-impl", 276 | "fixed-macro-types", 277 | ] 278 | 279 | [[package]] 280 | name = "fixed-macro-impl" 281 | version = "1.2.0" 282 | source = "registry+https://github.com/rust-lang/crates.io-index" 283 | checksum = "c93086f471c0a1b9c5e300ea92f5cd990ac6d3f8edf27616ef624b8fa6402d4b" 284 | dependencies = [ 285 | "fixed", 286 | "paste", 287 | "proc-macro-error", 288 | "proc-macro2", 289 | "quote", 290 | "syn 1.0.109", 291 | ] 292 | 293 | [[package]] 294 | name = "fixed-macro-types" 295 | version = "1.2.0" 296 | source = "registry+https://github.com/rust-lang/crates.io-index" 297 | checksum = "044a61b034a2264a7f65aa0c3cd112a01b4d4ee58baace51fead3f21b993c7e4" 298 | dependencies = [ 299 | "fixed", 300 | "fixed-macro-impl", 301 | ] 302 | 303 | [[package]] 304 | name = "flate2" 305 | version = "1.0.27" 306 | source = "registry+https://github.com/rust-lang/crates.io-index" 307 | checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" 308 | dependencies = [ 309 | "crc32fast", 310 | "miniz_oxide", 311 | ] 312 | 313 | [[package]] 314 | name = "generic-array" 315 | version = "0.14.7" 316 | source = "registry+https://github.com/rust-lang/crates.io-index" 317 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 318 | dependencies = [ 319 | "typenum", 320 | "version_check", 321 | ] 322 | 323 | [[package]] 324 | name = "getrandom" 325 | version = "0.2.10" 326 | source = "registry+https://github.com/rust-lang/crates.io-index" 327 | checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" 328 | dependencies = [ 329 | "cfg-if", 330 | "libc", 331 | "wasi", 332 | ] 333 | 334 | [[package]] 335 | name = "half" 336 | version = "2.3.1" 337 | source = "registry+https://github.com/rust-lang/crates.io-index" 338 | checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872" 339 | dependencies = [ 340 | "cfg-if", 341 | "crunchy", 342 | ] 343 | 344 | [[package]] 345 | name = "heck" 346 | version = "0.4.1" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 349 | 350 | [[package]] 351 | name = "humantime" 352 | version = "2.1.0" 353 | source = "registry+https://github.com/rust-lang/crates.io-index" 354 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 355 | 356 | [[package]] 357 | name = "image" 358 | version = "0.24.7" 359 | source = "registry+https://github.com/rust-lang/crates.io-index" 360 | checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711" 361 | dependencies = [ 362 | "bytemuck", 363 | "byteorder", 364 | "color_quant", 365 | "num-rational", 366 | "num-traits", 367 | "png", 368 | ] 369 | 370 | [[package]] 371 | name = "insta" 372 | version = "1.34.0" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | checksum = "5d64600be34b2fcfc267740a243fa7744441bb4947a619ac4e5bb6507f35fbfc" 375 | dependencies = [ 376 | "console", 377 | "lazy_static", 378 | "linked-hash-map", 379 | "similar", 380 | "yaml-rust", 381 | ] 382 | 383 | [[package]] 384 | name = "lazy_static" 385 | version = "1.4.0" 386 | source = "registry+https://github.com/rust-lang/crates.io-index" 387 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 388 | 389 | [[package]] 390 | name = "libc" 391 | version = "0.2.149" 392 | source = "registry+https://github.com/rust-lang/crates.io-index" 393 | checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" 394 | 395 | [[package]] 396 | name = "linked-hash-map" 397 | version = "0.5.6" 398 | source = "registry+https://github.com/rust-lang/crates.io-index" 399 | checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" 400 | 401 | [[package]] 402 | name = "log" 403 | version = "0.4.20" 404 | source = "registry+https://github.com/rust-lang/crates.io-index" 405 | checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" 406 | 407 | [[package]] 408 | name = "miniz_oxide" 409 | version = "0.7.1" 410 | source = "registry+https://github.com/rust-lang/crates.io-index" 411 | checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" 412 | dependencies = [ 413 | "adler", 414 | "simd-adler32", 415 | ] 416 | 417 | [[package]] 418 | name = "num-integer" 419 | version = "0.1.45" 420 | source = "registry+https://github.com/rust-lang/crates.io-index" 421 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 422 | dependencies = [ 423 | "autocfg", 424 | "num-traits", 425 | ] 426 | 427 | [[package]] 428 | name = "num-rational" 429 | version = "0.4.1" 430 | source = "registry+https://github.com/rust-lang/crates.io-index" 431 | checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" 432 | dependencies = [ 433 | "autocfg", 434 | "num-integer", 435 | "num-traits", 436 | ] 437 | 438 | [[package]] 439 | name = "num-traits" 440 | version = "0.2.17" 441 | source = "registry+https://github.com/rust-lang/crates.io-index" 442 | checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" 443 | dependencies = [ 444 | "autocfg", 445 | ] 446 | 447 | [[package]] 448 | name = "paste" 449 | version = "1.0.14" 450 | source = "registry+https://github.com/rust-lang/crates.io-index" 451 | checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" 452 | 453 | [[package]] 454 | name = "png" 455 | version = "0.17.10" 456 | source = "registry+https://github.com/rust-lang/crates.io-index" 457 | checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" 458 | dependencies = [ 459 | "bitflags", 460 | "crc32fast", 461 | "fdeflate", 462 | "flate2", 463 | "miniz_oxide", 464 | ] 465 | 466 | [[package]] 467 | name = "ppv-lite86" 468 | version = "0.2.17" 469 | source = "registry+https://github.com/rust-lang/crates.io-index" 470 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 471 | 472 | [[package]] 473 | name = "proc-macro-error" 474 | version = "1.0.4" 475 | source = "registry+https://github.com/rust-lang/crates.io-index" 476 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 477 | dependencies = [ 478 | "proc-macro-error-attr", 479 | "proc-macro2", 480 | "quote", 481 | "syn 1.0.109", 482 | "version_check", 483 | ] 484 | 485 | [[package]] 486 | name = "proc-macro-error-attr" 487 | version = "1.0.4" 488 | source = "registry+https://github.com/rust-lang/crates.io-index" 489 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 490 | dependencies = [ 491 | "proc-macro2", 492 | "quote", 493 | "version_check", 494 | ] 495 | 496 | [[package]] 497 | name = "proc-macro2" 498 | version = "1.0.69" 499 | source = "registry+https://github.com/rust-lang/crates.io-index" 500 | checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" 501 | dependencies = [ 502 | "unicode-ident", 503 | ] 504 | 505 | [[package]] 506 | name = "quote" 507 | version = "1.0.33" 508 | source = "registry+https://github.com/rust-lang/crates.io-index" 509 | checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" 510 | dependencies = [ 511 | "proc-macro2", 512 | ] 513 | 514 | [[package]] 515 | name = "rand" 516 | version = "0.8.5" 517 | source = "registry+https://github.com/rust-lang/crates.io-index" 518 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 519 | dependencies = [ 520 | "libc", 521 | "rand_chacha", 522 | "rand_core", 523 | ] 524 | 525 | [[package]] 526 | name = "rand_chacha" 527 | version = "0.3.1" 528 | source = "registry+https://github.com/rust-lang/crates.io-index" 529 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 530 | dependencies = [ 531 | "ppv-lite86", 532 | "rand_core", 533 | ] 534 | 535 | [[package]] 536 | name = "rand_core" 537 | version = "0.6.4" 538 | source = "registry+https://github.com/rust-lang/crates.io-index" 539 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 540 | dependencies = [ 541 | "getrandom", 542 | ] 543 | 544 | [[package]] 545 | name = "rustc_version" 546 | version = "0.4.0" 547 | source = "registry+https://github.com/rust-lang/crates.io-index" 548 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 549 | dependencies = [ 550 | "semver", 551 | ] 552 | 553 | [[package]] 554 | name = "semver" 555 | version = "1.0.20" 556 | source = "registry+https://github.com/rust-lang/crates.io-index" 557 | checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" 558 | 559 | [[package]] 560 | name = "sha2" 561 | version = "0.10.8" 562 | source = "registry+https://github.com/rust-lang/crates.io-index" 563 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 564 | dependencies = [ 565 | "cfg-if", 566 | "cpufeatures", 567 | "digest", 568 | ] 569 | 570 | [[package]] 571 | name = "silkgen" 572 | version = "0.4.0" 573 | dependencies = [ 574 | "clap", 575 | "derive_more", 576 | "env_logger", 577 | "fixed", 578 | "fixed-macro", 579 | "image", 580 | "insta", 581 | "log", 582 | "rand", 583 | "rand_chacha", 584 | "sha2", 585 | "thiserror", 586 | "uuid", 587 | ] 588 | 589 | [[package]] 590 | name = "simd-adler32" 591 | version = "0.3.7" 592 | source = "registry+https://github.com/rust-lang/crates.io-index" 593 | checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 594 | 595 | [[package]] 596 | name = "similar" 597 | version = "2.3.0" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | checksum = "2aeaf503862c419d66959f5d7ca015337d864e9c49485d771b732e2a20453597" 600 | 601 | [[package]] 602 | name = "strsim" 603 | version = "0.10.0" 604 | source = "registry+https://github.com/rust-lang/crates.io-index" 605 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 606 | 607 | [[package]] 608 | name = "syn" 609 | version = "1.0.109" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 612 | dependencies = [ 613 | "proc-macro2", 614 | "quote", 615 | "unicode-ident", 616 | ] 617 | 618 | [[package]] 619 | name = "syn" 620 | version = "2.0.38" 621 | source = "registry+https://github.com/rust-lang/crates.io-index" 622 | checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" 623 | dependencies = [ 624 | "proc-macro2", 625 | "quote", 626 | "unicode-ident", 627 | ] 628 | 629 | [[package]] 630 | name = "thiserror" 631 | version = "1.0.49" 632 | source = "registry+https://github.com/rust-lang/crates.io-index" 633 | checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4" 634 | dependencies = [ 635 | "thiserror-impl", 636 | ] 637 | 638 | [[package]] 639 | name = "thiserror-impl" 640 | version = "1.0.49" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc" 643 | dependencies = [ 644 | "proc-macro2", 645 | "quote", 646 | "syn 2.0.38", 647 | ] 648 | 649 | [[package]] 650 | name = "typenum" 651 | version = "1.17.0" 652 | source = "registry+https://github.com/rust-lang/crates.io-index" 653 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 654 | 655 | [[package]] 656 | name = "unicode-ident" 657 | version = "1.0.12" 658 | source = "registry+https://github.com/rust-lang/crates.io-index" 659 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 660 | 661 | [[package]] 662 | name = "utf8parse" 663 | version = "0.2.1" 664 | source = "registry+https://github.com/rust-lang/crates.io-index" 665 | checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" 666 | 667 | [[package]] 668 | name = "uuid" 669 | version = "1.4.1" 670 | source = "registry+https://github.com/rust-lang/crates.io-index" 671 | checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" 672 | dependencies = [ 673 | "getrandom", 674 | ] 675 | 676 | [[package]] 677 | name = "version_check" 678 | version = "0.9.4" 679 | source = "registry+https://github.com/rust-lang/crates.io-index" 680 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 681 | 682 | [[package]] 683 | name = "wasi" 684 | version = "0.11.0+wasi-snapshot-preview1" 685 | source = "registry+https://github.com/rust-lang/crates.io-index" 686 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 687 | 688 | [[package]] 689 | name = "windows-sys" 690 | version = "0.45.0" 691 | source = "registry+https://github.com/rust-lang/crates.io-index" 692 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 693 | dependencies = [ 694 | "windows-targets 0.42.2", 695 | ] 696 | 697 | [[package]] 698 | name = "windows-sys" 699 | version = "0.48.0" 700 | source = "registry+https://github.com/rust-lang/crates.io-index" 701 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 702 | dependencies = [ 703 | "windows-targets 0.48.5", 704 | ] 705 | 706 | [[package]] 707 | name = "windows-targets" 708 | version = "0.42.2" 709 | source = "registry+https://github.com/rust-lang/crates.io-index" 710 | checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 711 | dependencies = [ 712 | "windows_aarch64_gnullvm 0.42.2", 713 | "windows_aarch64_msvc 0.42.2", 714 | "windows_i686_gnu 0.42.2", 715 | "windows_i686_msvc 0.42.2", 716 | "windows_x86_64_gnu 0.42.2", 717 | "windows_x86_64_gnullvm 0.42.2", 718 | "windows_x86_64_msvc 0.42.2", 719 | ] 720 | 721 | [[package]] 722 | name = "windows-targets" 723 | version = "0.48.5" 724 | source = "registry+https://github.com/rust-lang/crates.io-index" 725 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 726 | dependencies = [ 727 | "windows_aarch64_gnullvm 0.48.5", 728 | "windows_aarch64_msvc 0.48.5", 729 | "windows_i686_gnu 0.48.5", 730 | "windows_i686_msvc 0.48.5", 731 | "windows_x86_64_gnu 0.48.5", 732 | "windows_x86_64_gnullvm 0.48.5", 733 | "windows_x86_64_msvc 0.48.5", 734 | ] 735 | 736 | [[package]] 737 | name = "windows_aarch64_gnullvm" 738 | version = "0.42.2" 739 | source = "registry+https://github.com/rust-lang/crates.io-index" 740 | checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 741 | 742 | [[package]] 743 | name = "windows_aarch64_gnullvm" 744 | version = "0.48.5" 745 | source = "registry+https://github.com/rust-lang/crates.io-index" 746 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 747 | 748 | [[package]] 749 | name = "windows_aarch64_msvc" 750 | version = "0.42.2" 751 | source = "registry+https://github.com/rust-lang/crates.io-index" 752 | checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 753 | 754 | [[package]] 755 | name = "windows_aarch64_msvc" 756 | version = "0.48.5" 757 | source = "registry+https://github.com/rust-lang/crates.io-index" 758 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 759 | 760 | [[package]] 761 | name = "windows_i686_gnu" 762 | version = "0.42.2" 763 | source = "registry+https://github.com/rust-lang/crates.io-index" 764 | checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 765 | 766 | [[package]] 767 | name = "windows_i686_gnu" 768 | version = "0.48.5" 769 | source = "registry+https://github.com/rust-lang/crates.io-index" 770 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 771 | 772 | [[package]] 773 | name = "windows_i686_msvc" 774 | version = "0.42.2" 775 | source = "registry+https://github.com/rust-lang/crates.io-index" 776 | checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 777 | 778 | [[package]] 779 | name = "windows_i686_msvc" 780 | version = "0.48.5" 781 | source = "registry+https://github.com/rust-lang/crates.io-index" 782 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 783 | 784 | [[package]] 785 | name = "windows_x86_64_gnu" 786 | version = "0.42.2" 787 | source = "registry+https://github.com/rust-lang/crates.io-index" 788 | checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 789 | 790 | [[package]] 791 | name = "windows_x86_64_gnu" 792 | version = "0.48.5" 793 | source = "registry+https://github.com/rust-lang/crates.io-index" 794 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 795 | 796 | [[package]] 797 | name = "windows_x86_64_gnullvm" 798 | version = "0.42.2" 799 | source = "registry+https://github.com/rust-lang/crates.io-index" 800 | checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 801 | 802 | [[package]] 803 | name = "windows_x86_64_gnullvm" 804 | version = "0.48.5" 805 | source = "registry+https://github.com/rust-lang/crates.io-index" 806 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 807 | 808 | [[package]] 809 | name = "windows_x86_64_msvc" 810 | version = "0.42.2" 811 | source = "registry+https://github.com/rust-lang/crates.io-index" 812 | checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 813 | 814 | [[package]] 815 | name = "windows_x86_64_msvc" 816 | version = "0.48.5" 817 | source = "registry+https://github.com/rust-lang/crates.io-index" 818 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 819 | 820 | [[package]] 821 | name = "yaml-rust" 822 | version = "0.4.5" 823 | source = "registry+https://github.com/rust-lang/crates.io-index" 824 | checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" 825 | dependencies = [ 826 | "linked-hash-map", 827 | ] 828 | -------------------------------------------------------------------------------- /src/tests/snapshots/silkgen__tests__annoying_dog.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: src/tests/mod.rs 3 | expression: "run_against(stringify!(annoying_dog), include_bytes!(\"annoying_dog.png\"))" 4 | --- 5 | (footprint "annoying_dog" 6 | (version 20220630) 7 | (generator "silkgen x.x.x") 8 | (layer F.SilkS) 9 | (tedit 0) 10 | (attr board_only exclude_from_pos_files exclude_from_bom) 11 | (fp_text reference "G***" (at 0 0) (layer F.Fab) 12 | (effects (font (size 1.524 1.524) (thickness 0.3))) 13 | (tstamp 63a6e029-0440-4d0c-8f47-da332b80ecf2) 14 | ) 15 | (fp_text value "LOGO" (at 0.75 0) (layer F.Fab) hide 16 | (effects (font (size 1.524 1.524) (thickness 0.3))) 17 | (tstamp 5733308c-4faf-412f-b058-0de2c29a2b84) 18 | ) 19 | (fp_poly (pts (xy -8 -10) 20 | (xy -7 -10) 21 | (xy -7 -9) 22 | (xy -8 -9) 23 | ) 24 | (layer F.Cu) 25 | (width 0) 26 | (fill solid) 27 | (tstamp c4192cfe-7bff-4e10-8b28-612b390ddae4) 28 | ) 29 | (fp_poly (pts (xy -8 -10) 30 | (xy -7 -10) 31 | (xy -7 -9) 32 | (xy -8 -9) 33 | ) 34 | (layer F.Mask) 35 | (width 0) 36 | (fill solid) 37 | (tstamp e70af675-6f03-4100-9a65-be8b7d2d941f) 38 | ) 39 | (fp_poly (pts (xy -6 -10) 40 | (xy -5 -10) 41 | (xy -5 -9) 42 | (xy -6 -9) 43 | ) 44 | (layer F.Cu) 45 | (width 0) 46 | (fill solid) 47 | (tstamp 2249048d-2d52-401d-9b67-15d2f5f32d50) 48 | ) 49 | (fp_poly (pts (xy -6 -10) 50 | (xy -5 -10) 51 | (xy -5 -9) 52 | (xy -6 -9) 53 | ) 54 | (layer F.Mask) 55 | (width 0) 56 | (fill solid) 57 | (tstamp 3369b3f9-6bc0-4545-8fa7-7757e5494ef2) 58 | ) 59 | (fp_poly (pts (xy -5 -10) 60 | (xy -4 -10) 61 | (xy -4 -9) 62 | (xy -5 -9) 63 | ) 64 | (layer F.Cu) 65 | (width 0) 66 | (fill solid) 67 | (tstamp 839e8b71-db1f-4e15-b919-c3f76cf50fe5) 68 | ) 69 | (fp_poly (pts (xy -5 -10) 70 | (xy -4 -10) 71 | (xy -4 -9) 72 | (xy -5 -9) 73 | ) 74 | (layer F.Mask) 75 | (width 0) 76 | (fill solid) 77 | (tstamp 124070dc-3bf8-48c9-8eda-1ee121da775f) 78 | ) 79 | (fp_poly (pts (xy -4 -10) 80 | (xy -3 -10) 81 | (xy -3 -9) 82 | (xy -4 -9) 83 | ) 84 | (layer F.Cu) 85 | (width 0) 86 | (fill solid) 87 | (tstamp 28a05f02-74bf-407b-9ab1-803d3470522e) 88 | ) 89 | (fp_poly (pts (xy -4 -10) 90 | (xy -3 -10) 91 | (xy -3 -9) 92 | (xy -4 -9) 93 | ) 94 | (layer F.Mask) 95 | (width 0) 96 | (fill solid) 97 | (tstamp b5044916-b337-4ff5-bc39-cd36aac76c5b) 98 | ) 99 | (fp_poly (pts (xy -3 -10) 100 | (xy -2 -10) 101 | (xy -2 -9) 102 | (xy -3 -9) 103 | ) 104 | (layer F.Cu) 105 | (width 0) 106 | (fill solid) 107 | (tstamp 7c9e1d40-544f-4433-8931-199c62b7651b) 108 | ) 109 | (fp_poly (pts (xy -3 -10) 110 | (xy -2 -10) 111 | (xy -2 -9) 112 | (xy -3 -9) 113 | ) 114 | (layer F.Mask) 115 | (width 0) 116 | (fill solid) 117 | (tstamp c7cb5c26-05b7-4f77-9b20-43f7732d4359) 118 | ) 119 | (fp_poly (pts (xy -1 -10) 120 | (xy 0 -10) 121 | (xy 0 -9) 122 | (xy -1 -9) 123 | ) 124 | (layer F.Cu) 125 | (width 0) 126 | (fill solid) 127 | (tstamp 4a1baa54-16d9-4bd4-876b-866f8cffc9a8) 128 | ) 129 | (fp_poly (pts (xy -1 -10) 130 | (xy 0 -10) 131 | (xy 0 -9) 132 | (xy -1 -9) 133 | ) 134 | (layer F.Mask) 135 | (width 0) 136 | (fill solid) 137 | (tstamp d3f28bf7-6a4d-48be-bdc1-3114c98564b3) 138 | ) 139 | (fp_poly (pts (xy -9 -9) 140 | (xy -8 -9) 141 | (xy -8 -8) 142 | (xy -9 -8) 143 | ) 144 | (layer F.Cu) 145 | (width 0) 146 | (fill solid) 147 | (tstamp ad1acae4-56f2-46b9-885a-5673257ff159) 148 | ) 149 | (fp_poly (pts (xy -9 -9) 150 | (xy -8 -9) 151 | (xy -8 -8) 152 | (xy -9 -8) 153 | ) 154 | (layer F.Mask) 155 | (width 0) 156 | (fill solid) 157 | (tstamp 7c4fbd08-f18f-451f-b0a4-49ec339f4311) 158 | ) 159 | (fp_poly (pts (xy -7.9 -8.9) 160 | (xy -7.1 -8.9) 161 | (xy -7.1 -8) 162 | (xy -7.9 -8) 163 | ) 164 | (layer F.SilkS) 165 | (width 0) 166 | (fill solid) 167 | (tstamp 68d5e775-aa8a-448a-b90d-8007764421da) 168 | ) 169 | (fp_poly (pts (xy -7 -9) 170 | (xy -6 -9) 171 | (xy -6 -8) 172 | (xy -7 -8) 173 | ) 174 | (layer F.Cu) 175 | (width 0) 176 | (fill solid) 177 | (tstamp 68fdf7d0-21e3-468a-af6f-e72b71626c7b) 178 | ) 179 | (fp_poly (pts (xy -7 -9) 180 | (xy -6 -9) 181 | (xy -6 -8) 182 | (xy -7 -8) 183 | ) 184 | (layer F.Mask) 185 | (width 0) 186 | (fill solid) 187 | (tstamp 35efa278-62e6-4c7f-8522-be7fc6841beb) 188 | ) 189 | (fp_poly (pts (xy -5.9 -8.9) 190 | (xy -5 -8.9) 191 | (xy -5 -8) 192 | (xy -5.9 -8) 193 | ) 194 | (layer F.SilkS) 195 | (width 0) 196 | (fill solid) 197 | (tstamp 14bdafd2-745b-4fdc-bd6d-0685124075b5) 198 | ) 199 | (fp_poly (pts (xy -5 -8.9) 200 | (xy -4 -8.9) 201 | (xy -4 -8) 202 | (xy -5 -8) 203 | ) 204 | (layer F.SilkS) 205 | (width 0) 206 | (fill solid) 207 | (tstamp 1bcae791-7901-4ca4-9476-7745c2246374) 208 | ) 209 | (fp_poly (pts (xy -4 -8.9) 210 | (xy -3 -8.9) 211 | (xy -3 -8) 212 | (xy -4 -8) 213 | ) 214 | (layer F.SilkS) 215 | (width 0) 216 | (fill solid) 217 | (tstamp abddee14-8eae-4680-8491-907fe97faf25) 218 | ) 219 | (fp_poly (pts (xy -3 -8.9) 220 | (xy -2.1 -8.9) 221 | (xy -2.1 -8) 222 | (xy -3 -8) 223 | ) 224 | (layer F.SilkS) 225 | (width 0) 226 | (fill solid) 227 | (tstamp 36bbd341-3023-4b5b-9ecf-965640655c8b) 228 | ) 229 | (fp_poly (pts (xy -2 -9) 230 | (xy -1 -9) 231 | (xy -1 -8) 232 | (xy -2 -8) 233 | ) 234 | (layer F.Cu) 235 | (width 0) 236 | (fill solid) 237 | (tstamp f082d5c8-8f1d-428b-9fac-2fa94cdfa390) 238 | ) 239 | (fp_poly (pts (xy -2 -9) 240 | (xy -1 -9) 241 | (xy -1 -8) 242 | (xy -2 -8) 243 | ) 244 | (layer F.Mask) 245 | (width 0) 246 | (fill solid) 247 | (tstamp b1cdc1ee-bdb9-4048-933f-4498137669bd) 248 | ) 249 | (fp_poly (pts (xy -0.9 -8.9) 250 | (xy -0.1 -8.9) 251 | (xy -0.1 -8) 252 | (xy -0.9 -8) 253 | ) 254 | (layer F.SilkS) 255 | (width 0) 256 | (fill solid) 257 | (tstamp 6c323a0c-6f89-4edb-8fdb-5b11a341776a) 258 | ) 259 | (fp_poly (pts (xy 0 -9) 260 | (xy 1 -9) 261 | (xy 1 -8) 262 | (xy 0 -8) 263 | ) 264 | (layer F.Cu) 265 | (width 0) 266 | (fill solid) 267 | (tstamp 21176cd7-e830-4fb4-8817-ffc0d6efcde6) 268 | ) 269 | (fp_poly (pts (xy 0 -9) 270 | (xy 1 -9) 271 | (xy 1 -8) 272 | (xy 0 -8) 273 | ) 274 | (layer F.Mask) 275 | (width 0) 276 | (fill solid) 277 | (tstamp 4b1987c1-a084-4222-bd8c-e21b382fa8e5) 278 | ) 279 | (fp_poly (pts (xy -9 -8) 280 | (xy -8 -8) 281 | (xy -8 -7) 282 | (xy -9 -7) 283 | ) 284 | (layer F.Cu) 285 | (width 0) 286 | (fill solid) 287 | (tstamp 5f6e0700-4e95-462c-beee-77d3de746ad4) 288 | ) 289 | (fp_poly (pts (xy -9 -8) 290 | (xy -8 -8) 291 | (xy -8 -7) 292 | (xy -9 -7) 293 | ) 294 | (layer F.Mask) 295 | (width 0) 296 | (fill solid) 297 | (tstamp fe99eeba-b018-4912-9ace-1769b8686ce6) 298 | ) 299 | (fp_poly (pts (xy -7.9 -8) 300 | (xy -7.1 -8) 301 | (xy -7.1 -7.9) 302 | (xy -7 -7.9) 303 | (xy -7 -7) 304 | (xy -7.9 -7) 305 | ) 306 | (layer F.SilkS) 307 | (width 0) 308 | (fill solid) 309 | (tstamp b18fd7fe-39f0-4d64-a3cb-b632203acfe6) 310 | ) 311 | (fp_poly (pts (xy -7 -7.9) 312 | (xy -6 -7.9) 313 | (xy -6 -7) 314 | (xy -7 -7) 315 | ) 316 | (layer F.SilkS) 317 | (width 0) 318 | (fill solid) 319 | (tstamp f1f7abd3-07c5-492d-9985-b1cc00bf8cde) 320 | ) 321 | (fp_poly (pts (xy -6 -7.9) 322 | (xy -5.9 -7.9) 323 | (xy -5.9 -8) 324 | (xy -5 -8) 325 | (xy -5 -7) 326 | (xy -6 -7) 327 | ) 328 | (layer F.SilkS) 329 | (width 0) 330 | (fill solid) 331 | (tstamp 868a693d-328d-49cb-a5c3-b44a9dbbfc3c) 332 | ) 333 | (fp_poly (pts (xy -5 -8) 334 | (xy -4 -8) 335 | (xy -4 -7) 336 | (xy -5 -7) 337 | ) 338 | (layer F.SilkS) 339 | (width 0) 340 | (fill solid) 341 | (tstamp 422632fb-8ebd-402c-a4f2-18b7aaf0a80c) 342 | ) 343 | (fp_poly (pts (xy -4 -8) 344 | (xy -3 -8) 345 | (xy -3 -7) 346 | (xy -4 -7) 347 | ) 348 | (layer F.SilkS) 349 | (width 0) 350 | (fill solid) 351 | (tstamp 02ed13eb-ae88-42fe-8f4c-4b130d10492e) 352 | ) 353 | (fp_poly (pts (xy -3 -8) 354 | (xy -2.1 -8) 355 | (xy -2.1 -7.9) 356 | (xy -2 -7.9) 357 | (xy -2 -7) 358 | (xy -3 -7) 359 | ) 360 | (layer F.SilkS) 361 | (width 0) 362 | (fill solid) 363 | (tstamp 0d3fa9e8-61db-4342-b354-bc6cec6f0d8c) 364 | ) 365 | (fp_poly (pts (xy -2 -7.9) 366 | (xy -1 -7.9) 367 | (xy -1 -7) 368 | (xy -2 -7) 369 | ) 370 | (layer F.SilkS) 371 | (width 0) 372 | (fill solid) 373 | (tstamp d7c688f7-89cf-4e69-b8cd-bf5886d1873d) 374 | ) 375 | (fp_poly (pts (xy -1 -7.9) 376 | (xy -0.9 -7.9) 377 | (xy -0.9 -8) 378 | (xy -0.1 -8) 379 | (xy -0.1 -7) 380 | (xy -1 -7) 381 | ) 382 | (layer F.SilkS) 383 | (width 0) 384 | (fill solid) 385 | (tstamp 5403c157-fd5f-41c1-abda-89d9adca9c8b) 386 | ) 387 | (fp_poly (pts (xy 0 -8) 388 | (xy 1 -8) 389 | (xy 1 -7) 390 | (xy 0 -7) 391 | ) 392 | (layer F.Cu) 393 | (width 0) 394 | (fill solid) 395 | (tstamp a348af12-6a60-4452-8503-5a81d2726af3) 396 | ) 397 | (fp_poly (pts (xy 0 -8) 398 | (xy 1 -8) 399 | (xy 1 -7) 400 | (xy 0 -7) 401 | ) 402 | (layer F.Mask) 403 | (width 0) 404 | (fill solid) 405 | (tstamp 049c80ea-26b1-448f-afb9-fe93245e55e2) 406 | ) 407 | (fp_poly (pts (xy -9 -7) 408 | (xy -8 -7) 409 | (xy -8 -6) 410 | (xy -9 -6) 411 | ) 412 | (layer F.Cu) 413 | (width 0) 414 | (fill solid) 415 | (tstamp 22d934b3-4df7-4fe1-8f41-cc2c5bbd10d0) 416 | ) 417 | (fp_poly (pts (xy -9 -7) 418 | (xy -8 -7) 419 | (xy -8 -6) 420 | (xy -9 -6) 421 | ) 422 | (layer F.Mask) 423 | (width 0) 424 | (fill solid) 425 | (tstamp 8014ae6b-1c74-4ec7-947c-f9806ac963b4) 426 | ) 427 | (fp_poly (pts (xy -7.9 -7) 428 | (xy -7 -7) 429 | (xy -7 -6.1) 430 | (xy -7.1 -6.1) 431 | (xy -7.1 -6) 432 | (xy -7.9 -6) 433 | ) 434 | (layer F.SilkS) 435 | (width 0) 436 | (fill solid) 437 | (tstamp 5bf23880-2857-4736-af0d-25e20f8db1a6) 438 | ) 439 | (fp_poly (pts (xy -7 -7) 440 | (xy -6 -7) 441 | (xy -6 -6.1) 442 | (xy -7 -6.1) 443 | ) 444 | (layer F.SilkS) 445 | (width 0) 446 | (fill solid) 447 | (tstamp 12de9d63-c886-47f5-8a8b-fa79a7cb72dd) 448 | ) 449 | (fp_poly (pts (xy -6 -7) 450 | (xy -5 -7) 451 | (xy -5 -6) 452 | (xy -5.9 -6) 453 | (xy -5.9 -6.1) 454 | (xy -6 -6.1) 455 | ) 456 | (layer F.SilkS) 457 | (width 0) 458 | (fill solid) 459 | (tstamp 3ab6575a-5e91-4798-ae2e-bb1c0c716706) 460 | ) 461 | (fp_poly (pts (xy -5 -7) 462 | (xy -4 -7) 463 | (xy -4 -6.1) 464 | (xy -4.1 -6.1) 465 | (xy -4.1 -6) 466 | (xy -5 -6) 467 | ) 468 | (layer F.SilkS) 469 | (width 0) 470 | (fill solid) 471 | (tstamp 08bc5709-7b59-47c5-942e-e4d19bd82a7f) 472 | ) 473 | (fp_poly (pts (xy -4 -7) 474 | (xy -3 -7) 475 | (xy -3 -6.1) 476 | (xy -4 -6.1) 477 | ) 478 | (layer F.SilkS) 479 | (width 0) 480 | (fill solid) 481 | (tstamp 19e55336-5f58-4018-a859-d01a0e83aa1f) 482 | ) 483 | (fp_poly (pts (xy -3 -7) 484 | (xy -2 -7) 485 | (xy -2 -6) 486 | (xy -2.9 -6) 487 | (xy -2.9 -6.1) 488 | (xy -3 -6.1) 489 | ) 490 | (layer F.SilkS) 491 | (width 0) 492 | (fill solid) 493 | (tstamp 9397633c-28b0-4c73-9ff5-47e14a49fa4b) 494 | ) 495 | (fp_poly (pts (xy -2 -7) 496 | (xy -1 -7) 497 | (xy -1 -6) 498 | (xy -2 -6) 499 | ) 500 | (layer F.SilkS) 501 | (width 0) 502 | (fill solid) 503 | (tstamp 746c6126-1e15-4e94-98d0-3309c9713137) 504 | ) 505 | (fp_poly (pts (xy -1 -7) 506 | (xy -0.1 -7) 507 | (xy -0.1 -6.9) 508 | (xy 0 -6.9) 509 | (xy 0 -6) 510 | (xy -1 -6) 511 | ) 512 | (layer F.SilkS) 513 | (width 0) 514 | (fill solid) 515 | (tstamp 7bf74356-f9d6-44e0-80b7-40d10c86f10f) 516 | ) 517 | (fp_poly (pts (xy 0 -6.9) 518 | (xy 0.9 -6.9) 519 | (xy 0.9 -6) 520 | (xy 0 -6) 521 | ) 522 | (layer F.SilkS) 523 | (width 0) 524 | (fill solid) 525 | (tstamp e190158a-0333-4ea6-a8ef-791cb4555bba) 526 | ) 527 | (fp_poly (pts (xy 1 -7) 528 | (xy 2 -7) 529 | (xy 2 -6) 530 | (xy 1 -6) 531 | ) 532 | (layer F.Cu) 533 | (width 0) 534 | (fill solid) 535 | (tstamp 3d2615e9-fb02-4e17-a410-056f10d4ab91) 536 | ) 537 | (fp_poly (pts (xy 1 -7) 538 | (xy 2 -7) 539 | (xy 2 -6) 540 | (xy 1 -6) 541 | ) 542 | (layer F.Mask) 543 | (width 0) 544 | (fill solid) 545 | (tstamp 4abc830c-21eb-45bf-a3f7-e2453afcc398) 546 | ) 547 | (fp_poly (pts (xy -10 -6) 548 | (xy -9 -6) 549 | (xy -9 -5) 550 | (xy -10 -5) 551 | ) 552 | (layer F.Cu) 553 | (width 0) 554 | (fill solid) 555 | (tstamp e2673bb8-10a6-4920-83d2-44a0144bf9fe) 556 | ) 557 | (fp_poly (pts (xy -10 -6) 558 | (xy -9 -6) 559 | (xy -9 -5) 560 | (xy -10 -5) 561 | ) 562 | (layer F.Mask) 563 | (width 0) 564 | (fill solid) 565 | (tstamp 916090c4-602e-4cc9-a722-b729fac324b0) 566 | ) 567 | (fp_poly (pts (xy -8.9 -5.9) 568 | (xy -8 -5.9) 569 | (xy -8 -5) 570 | (xy -8.9 -5) 571 | ) 572 | (layer F.SilkS) 573 | (width 0) 574 | (fill solid) 575 | (tstamp 6d98003b-2f34-47dc-bbe9-c1539fa91afd) 576 | ) 577 | (fp_poly (pts (xy -8 -5.9) 578 | (xy -7.9 -5.9) 579 | (xy -7.9 -6) 580 | (xy -7.1 -6) 581 | (xy -7.1 -5) 582 | (xy -8 -5) 583 | ) 584 | (layer F.SilkS) 585 | (width 0) 586 | (fill solid) 587 | (tstamp 7f2169f6-1ae6-475e-b808-4d2df6fb1ffc) 588 | ) 589 | (fp_poly (pts (xy -7 -6) 590 | (xy -6 -6) 591 | (xy -6 -5) 592 | (xy -7 -5) 593 | ) 594 | (layer F.Cu) 595 | (width 0) 596 | (fill solid) 597 | (tstamp a5db2fd6-1878-4bcd-9118-543737ddf623) 598 | ) 599 | (fp_poly (pts (xy -7 -6) 600 | (xy -6 -6) 601 | (xy -6 -5) 602 | (xy -7 -5) 603 | ) 604 | (layer F.Mask) 605 | (width 0) 606 | (fill solid) 607 | (tstamp 2154a66d-af04-47d0-aeb4-be93906a4211) 608 | ) 609 | (fp_poly (pts (xy -5.9 -6) 610 | (xy -5 -6) 611 | (xy -5 -5) 612 | (xy -5.9 -5) 613 | ) 614 | (layer F.SilkS) 615 | (width 0) 616 | (fill solid) 617 | (tstamp 947549fb-b9c4-4fc0-ae76-3978e9862e40) 618 | ) 619 | (fp_poly (pts (xy -5 -6) 620 | (xy -4.1 -6) 621 | (xy -4.1 -5) 622 | (xy -5 -5) 623 | ) 624 | (layer F.SilkS) 625 | (width 0) 626 | (fill solid) 627 | (tstamp e4ae8634-c3c8-4444-b790-9302b0cf089d) 628 | ) 629 | (fp_poly (pts (xy -4 -6) 630 | (xy -3 -6) 631 | (xy -3 -5) 632 | (xy -4 -5) 633 | ) 634 | (layer F.Cu) 635 | (width 0) 636 | (fill solid) 637 | (tstamp 80a97548-e09d-4b1e-aa57-233976573317) 638 | ) 639 | (fp_poly (pts (xy -4 -6) 640 | (xy -3 -6) 641 | (xy -3 -5) 642 | (xy -4 -5) 643 | ) 644 | (layer F.Mask) 645 | (width 0) 646 | (fill solid) 647 | (tstamp 03aa41d8-a9ae-4523-8889-e8c7c7b21bf5) 648 | ) 649 | (fp_poly (pts (xy -2.9 -6) 650 | (xy -2 -6) 651 | (xy -2 -5) 652 | (xy -2.9 -5) 653 | ) 654 | (layer F.SilkS) 655 | (width 0) 656 | (fill solid) 657 | (tstamp eff30b88-c11f-48b7-ba20-7e07247392b7) 658 | ) 659 | (fp_poly (pts (xy -2 -6) 660 | (xy -1 -6) 661 | (xy -1 -5) 662 | (xy -2 -5) 663 | ) 664 | (layer F.SilkS) 665 | (width 0) 666 | (fill solid) 667 | (tstamp 4745c34f-3420-4fa2-b0a5-d3db48254c68) 668 | ) 669 | (fp_poly (pts (xy -1 -6) 670 | (xy 0 -6) 671 | (xy 0 -5) 672 | (xy -1 -5) 673 | ) 674 | (layer F.SilkS) 675 | (width 0) 676 | (fill solid) 677 | (tstamp 74bcdeab-429e-4762-916a-6231a26d9af9) 678 | ) 679 | (fp_poly (pts (xy 0 -6) 680 | (xy 0.9 -6) 681 | (xy 0.9 -5) 682 | (xy 0 -5) 683 | ) 684 | (layer F.SilkS) 685 | (width 0) 686 | (fill solid) 687 | (tstamp ec196dee-dae6-442a-91cb-3b4e5e6509ec) 688 | ) 689 | (fp_poly (pts (xy 1 -6) 690 | (xy 2 -6) 691 | (xy 2 -5) 692 | (xy 1 -5) 693 | ) 694 | (layer F.Cu) 695 | (width 0) 696 | (fill solid) 697 | (tstamp fea52e8c-e08b-49b9-a3ed-76599d8e7c85) 698 | ) 699 | (fp_poly (pts (xy 1 -6) 700 | (xy 2 -6) 701 | (xy 2 -5) 702 | (xy 1 -5) 703 | ) 704 | (layer F.Mask) 705 | (width 0) 706 | (fill solid) 707 | (tstamp f2d1c435-20ab-4a31-89ea-42cd7658ed12) 708 | ) 709 | (fp_poly (pts (xy 2 -6) 710 | (xy 3 -6) 711 | (xy 3 -5) 712 | (xy 2 -5) 713 | ) 714 | (layer F.Cu) 715 | (width 0) 716 | (fill solid) 717 | (tstamp c9bda790-3b4d-480d-a671-7c89005f4da1) 718 | ) 719 | (fp_poly (pts (xy 2 -6) 720 | (xy 3 -6) 721 | (xy 3 -5) 722 | (xy 2 -5) 723 | ) 724 | (layer F.Mask) 725 | (width 0) 726 | (fill solid) 727 | (tstamp fdfb6c0d-630a-4155-a5bf-17d03f966c22) 728 | ) 729 | (fp_poly (pts (xy 8 -6) 730 | (xy 9 -6) 731 | (xy 9 -5) 732 | (xy 8 -5) 733 | ) 734 | (layer F.Cu) 735 | (width 0) 736 | (fill solid) 737 | (tstamp 84847e0b-3d7c-450d-ad07-0253daeaed01) 738 | ) 739 | (fp_poly (pts (xy 8 -6) 740 | (xy 9 -6) 741 | (xy 9 -5) 742 | (xy 8 -5) 743 | ) 744 | (layer F.Mask) 745 | (width 0) 746 | (fill solid) 747 | (tstamp c429cc9f-0ba3-4d1a-86c6-2b4227523105) 748 | ) 749 | (fp_poly (pts (xy -10 -5) 750 | (xy -9 -5) 751 | (xy -9 -4) 752 | (xy -10 -4) 753 | ) 754 | (layer F.Cu) 755 | (width 0) 756 | (fill solid) 757 | (tstamp 4c3b7419-4d62-4793-bd20-ec3401c92edb) 758 | ) 759 | (fp_poly (pts (xy -10 -5) 760 | (xy -9 -5) 761 | (xy -9 -4) 762 | (xy -10 -4) 763 | ) 764 | (layer F.Mask) 765 | (width 0) 766 | (fill solid) 767 | (tstamp 0e2c2084-6b97-48e4-a61b-ce8315b6152c) 768 | ) 769 | (fp_poly (pts (xy -8.9 -5) 770 | (xy -8 -5) 771 | (xy -8 -4) 772 | (xy -8.9 -4) 773 | ) 774 | (layer F.SilkS) 775 | (width 0) 776 | (fill solid) 777 | (tstamp ef8ecaea-d6f1-410f-a46a-3f36a7e5e8a6) 778 | ) 779 | (fp_poly (pts (xy -8 -5) 780 | (xy -7.1 -5) 781 | (xy -7.1 -4.9) 782 | (xy -7 -4.9) 783 | (xy -7 -4) 784 | (xy -8 -4) 785 | ) 786 | (layer F.SilkS) 787 | (width 0) 788 | (fill solid) 789 | (tstamp 48f63780-f3b2-470e-807b-c4ea13ada5ea) 790 | ) 791 | (fp_poly (pts (xy -7 -4.9) 792 | (xy -6 -4.9) 793 | (xy -6 -4.1) 794 | (xy -6.1 -4.1) 795 | (xy -6.1 -4) 796 | (xy -7 -4) 797 | ) 798 | (layer F.SilkS) 799 | (width 0) 800 | (fill solid) 801 | (tstamp 4288d4d4-d97e-4f2e-8b65-234dca368993) 802 | ) 803 | (fp_poly (pts (xy -6 -4.9) 804 | (xy -5.9 -4.9) 805 | (xy -5.9 -5) 806 | (xy -5 -5) 807 | (xy -5 -4.1) 808 | (xy -6 -4.1) 809 | ) 810 | (layer F.SilkS) 811 | (width 0) 812 | (fill solid) 813 | (tstamp b21d6424-806e-4127-952a-b4b8be456af9) 814 | ) 815 | (fp_poly (pts (xy -5 -5) 816 | (xy -4.1 -5) 817 | (xy -4.1 -4.9) 818 | (xy -4 -4.9) 819 | (xy -4 -4.1) 820 | (xy -5 -4.1) 821 | ) 822 | (layer F.SilkS) 823 | (width 0) 824 | (fill solid) 825 | (tstamp 7131ee57-22c4-4035-a9d6-e4dd706056f6) 826 | ) 827 | (fp_poly (pts (xy -4 -4.9) 828 | (xy -3 -4.9) 829 | (xy -3 -4) 830 | (xy -3.9 -4) 831 | (xy -3.9 -4.1) 832 | (xy -4 -4.1) 833 | ) 834 | (layer F.SilkS) 835 | (width 0) 836 | (fill solid) 837 | (tstamp 6d23a7c3-5cfe-43a6-920f-f5199d90a79e) 838 | ) 839 | (fp_poly (pts (xy -3 -4.9) 840 | (xy -2.9 -4.9) 841 | (xy -2.9 -5) 842 | (xy -2 -5) 843 | (xy -2 -4) 844 | (xy -3 -4) 845 | ) 846 | (layer F.SilkS) 847 | (width 0) 848 | (fill solid) 849 | (tstamp 0615ad1a-0ddb-4ca8-ad1b-526a3e42e698) 850 | ) 851 | (fp_poly (pts (xy -2 -5) 852 | (xy -1 -5) 853 | (xy -1 -4) 854 | (xy -2 -4) 855 | ) 856 | (layer F.SilkS) 857 | (width 0) 858 | (fill solid) 859 | (tstamp fe7a9ae3-21bb-4bac-8e49-10adb5429328) 860 | ) 861 | (fp_poly (pts (xy -1 -5) 862 | (xy 0 -5) 863 | (xy 0 -4) 864 | (xy -1 -4) 865 | ) 866 | (layer F.SilkS) 867 | (width 0) 868 | (fill solid) 869 | (tstamp 50cbbe97-bc6b-4b68-87fb-701012bb96a0) 870 | ) 871 | (fp_poly (pts (xy 0 -5) 872 | (xy 0.9 -5) 873 | (xy 0.9 -4.9) 874 | (xy 1 -4.9) 875 | (xy 1 -4) 876 | (xy 0 -4) 877 | ) 878 | (layer F.SilkS) 879 | (width 0) 880 | (fill solid) 881 | (tstamp e2ac2988-c0f1-476a-a860-fe03ff0f6f30) 882 | ) 883 | (fp_poly (pts (xy 1 -4.9) 884 | (xy 2 -4.9) 885 | (xy 2 -4) 886 | (xy 1 -4) 887 | ) 888 | (layer F.SilkS) 889 | (width 0) 890 | (fill solid) 891 | (tstamp 53aa41a2-66ba-479f-b60e-36970d8c7170) 892 | ) 893 | (fp_poly (pts (xy 2 -4.9) 894 | (xy 2.9 -4.9) 895 | (xy 2.9 -4) 896 | (xy 2 -4) 897 | ) 898 | (layer F.SilkS) 899 | (width 0) 900 | (fill solid) 901 | (tstamp e767e7d8-dcbb-4f46-a46c-539505172067) 902 | ) 903 | (fp_poly (pts (xy 3 -5) 904 | (xy 4 -5) 905 | (xy 4 -4) 906 | (xy 3 -4) 907 | ) 908 | (layer F.Cu) 909 | (width 0) 910 | (fill solid) 911 | (tstamp aee2bba1-199d-4466-86f7-5cd881c0842c) 912 | ) 913 | (fp_poly (pts (xy 3 -5) 914 | (xy 4 -5) 915 | (xy 4 -4) 916 | (xy 3 -4) 917 | ) 918 | (layer F.Mask) 919 | (width 0) 920 | (fill solid) 921 | (tstamp 275617ee-7b3f-496b-a189-547f68c244b6) 922 | ) 923 | (fp_poly (pts (xy 4 -5) 924 | (xy 5 -5) 925 | (xy 5 -4) 926 | (xy 4 -4) 927 | ) 928 | (layer F.Cu) 929 | (width 0) 930 | (fill solid) 931 | (tstamp 5d4dedd6-aadf-4a31-9bb9-61600fdd5cd4) 932 | ) 933 | (fp_poly (pts (xy 4 -5) 934 | (xy 5 -5) 935 | (xy 5 -4) 936 | (xy 4 -4) 937 | ) 938 | (layer F.Mask) 939 | (width 0) 940 | (fill solid) 941 | (tstamp 227cbef1-a5e9-44cf-8793-559f0611451f) 942 | ) 943 | (fp_poly (pts (xy 7 -5) 944 | (xy 8 -5) 945 | (xy 8 -4) 946 | (xy 7 -4) 947 | ) 948 | (layer F.Cu) 949 | (width 0) 950 | (fill solid) 951 | (tstamp ceabf288-f595-4bee-b75c-c23f4c461a93) 952 | ) 953 | (fp_poly (pts (xy 7 -5) 954 | (xy 8 -5) 955 | (xy 8 -4) 956 | (xy 7 -4) 957 | ) 958 | (layer F.Mask) 959 | (width 0) 960 | (fill solid) 961 | (tstamp 8c7232ad-312a-47c4-b762-116c1ee49c13) 962 | ) 963 | (fp_poly (pts (xy 8.1 -4.9) 964 | (xy 8.9 -4.9) 965 | (xy 8.9 -4) 966 | (xy 8.1 -4) 967 | ) 968 | (layer F.SilkS) 969 | (width 0) 970 | (fill solid) 971 | (tstamp ecda5de6-6653-4905-8b02-fd500e7f8eee) 972 | ) 973 | (fp_poly (pts (xy 9 -5) 974 | (xy 10 -5) 975 | (xy 10 -4) 976 | (xy 9 -4) 977 | ) 978 | (layer F.Cu) 979 | (width 0) 980 | (fill solid) 981 | (tstamp 792f68f0-40f7-4703-80d0-5c8baaeaf3e8) 982 | ) 983 | (fp_poly (pts (xy 9 -5) 984 | (xy 10 -5) 985 | (xy 10 -4) 986 | (xy 9 -4) 987 | ) 988 | (layer F.Mask) 989 | (width 0) 990 | (fill solid) 991 | (tstamp a8246679-9a49-4f15-bb1e-bd94b06dacfc) 992 | ) 993 | (fp_poly (pts (xy -10 -4) 994 | (xy -9 -4) 995 | (xy -9 -3) 996 | (xy -10 -3) 997 | ) 998 | (layer F.Cu) 999 | (width 0) 1000 | (fill solid) 1001 | (tstamp f95b96f3-5845-40c2-9496-61db616b581e) 1002 | ) 1003 | (fp_poly (pts (xy -10 -4) 1004 | (xy -9 -4) 1005 | (xy -9 -3) 1006 | (xy -10 -3) 1007 | ) 1008 | (layer F.Mask) 1009 | (width 0) 1010 | (fill solid) 1011 | (tstamp 4e0f34f8-3ac3-42b7-bd2c-0d45a3630be5) 1012 | ) 1013 | (fp_poly (pts (xy -8.9 -4) 1014 | (xy -8 -4) 1015 | (xy -8 -3.1) 1016 | (xy -8.1 -3.1) 1017 | (xy -8.1 -3) 1018 | (xy -8.9 -3) 1019 | ) 1020 | (layer F.SilkS) 1021 | (width 0) 1022 | (fill solid) 1023 | (tstamp 8ffdeb2a-dea4-4d1c-be7c-f053af405032) 1024 | ) 1025 | (fp_poly (pts (xy -8 -4) 1026 | (xy -7 -4) 1027 | (xy -7 -3.1) 1028 | (xy -8 -3.1) 1029 | ) 1030 | (layer F.SilkS) 1031 | (width 0) 1032 | (fill solid) 1033 | (tstamp 26d26303-d43a-46ee-9392-173b18d933bb) 1034 | ) 1035 | (fp_poly (pts (xy -7 -4) 1036 | (xy -6.1 -4) 1037 | (xy -6.1 -3) 1038 | (xy -6.9 -3) 1039 | (xy -6.9 -3.1) 1040 | (xy -7 -3.1) 1041 | ) 1042 | (layer F.SilkS) 1043 | (width 0) 1044 | (fill solid) 1045 | (tstamp 8e4c5c5d-3e8e-47eb-b62e-fb8dabe0c6c4) 1046 | ) 1047 | (fp_poly (pts (xy -6 -4) 1048 | (xy -5 -4) 1049 | (xy -5 -3) 1050 | (xy -6 -3) 1051 | ) 1052 | (layer F.Cu) 1053 | (width 0) 1054 | (fill solid) 1055 | (tstamp 1b7591d3-5145-4bde-aa24-58e27d472670) 1056 | ) 1057 | (fp_poly (pts (xy -6 -4) 1058 | (xy -5 -4) 1059 | (xy -5 -3) 1060 | (xy -6 -3) 1061 | ) 1062 | (layer F.Mask) 1063 | (width 0) 1064 | (fill solid) 1065 | (tstamp b840ac37-250d-46ba-b691-f2274045db07) 1066 | ) 1067 | (fp_poly (pts (xy -5 -4) 1068 | (xy -4 -4) 1069 | (xy -4 -3) 1070 | (xy -5 -3) 1071 | ) 1072 | (layer F.Cu) 1073 | (width 0) 1074 | (fill solid) 1075 | (tstamp 208b196c-fd8b-41f3-9bc2-ddb5d1afd6b7) 1076 | ) 1077 | (fp_poly (pts (xy -5 -4) 1078 | (xy -4 -4) 1079 | (xy -4 -3) 1080 | (xy -5 -3) 1081 | ) 1082 | (layer F.Mask) 1083 | (width 0) 1084 | (fill solid) 1085 | (tstamp 32cc0538-1e76-4310-bc3a-81c6b1b5fce3) 1086 | ) 1087 | (fp_poly (pts (xy -3.9 -4) 1088 | (xy -3 -4) 1089 | (xy -3 -3.1) 1090 | (xy -3.1 -3.1) 1091 | (xy -3.1 -3) 1092 | (xy -3.9 -3) 1093 | ) 1094 | (layer F.SilkS) 1095 | (width 0) 1096 | (fill solid) 1097 | (tstamp a5e88dba-b690-4537-a055-926898c1a2f4) 1098 | ) 1099 | (fp_poly (pts (xy -3 -4) 1100 | (xy -2 -4) 1101 | (xy -2 -3.1) 1102 | (xy -3 -3.1) 1103 | ) 1104 | (layer F.SilkS) 1105 | (width 0) 1106 | (fill solid) 1107 | (tstamp b0c06991-ce81-4455-b09f-d387e820cdc2) 1108 | ) 1109 | (fp_poly (pts (xy -2 -4) 1110 | (xy -1 -4) 1111 | (xy -1 -3) 1112 | (xy -1.9 -3) 1113 | (xy -1.9 -3.1) 1114 | (xy -2 -3.1) 1115 | ) 1116 | (layer F.SilkS) 1117 | (width 0) 1118 | (fill solid) 1119 | (tstamp eb530573-fa2a-4052-a500-d13a7230b3b3) 1120 | ) 1121 | (fp_poly (pts (xy -1 -4) 1122 | (xy 0 -4) 1123 | (xy 0 -3) 1124 | (xy -1 -3) 1125 | ) 1126 | (layer F.SilkS) 1127 | (width 0) 1128 | (fill solid) 1129 | (tstamp f77eb393-c8d6-47c9-a727-546eccc5f6c8) 1130 | ) 1131 | (fp_poly (pts (xy 0 -4) 1132 | (xy 1 -4) 1133 | (xy 1 -3) 1134 | (xy 0 -3) 1135 | ) 1136 | (layer F.SilkS) 1137 | (width 0) 1138 | (fill solid) 1139 | (tstamp 9539b9f3-9b3e-4e5b-a437-7f7a48491aa7) 1140 | ) 1141 | (fp_poly (pts (xy 1 -4) 1142 | (xy 2 -4) 1143 | (xy 2 -3) 1144 | (xy 1 -3) 1145 | ) 1146 | (layer F.SilkS) 1147 | (width 0) 1148 | (fill solid) 1149 | (tstamp 2c168400-7e7a-4da7-a2e6-886842e25565) 1150 | ) 1151 | (fp_poly (pts (xy 2 -4) 1152 | (xy 2.9 -4) 1153 | (xy 2.9 -3.9) 1154 | (xy 3 -3.9) 1155 | (xy 3 -3) 1156 | (xy 2 -3) 1157 | ) 1158 | (layer F.SilkS) 1159 | (width 0) 1160 | (fill solid) 1161 | (tstamp 359d6e62-f96a-4f71-a768-9042dc0d6ebf) 1162 | ) 1163 | (fp_poly (pts (xy 3 -3.9) 1164 | (xy 4 -3.9) 1165 | (xy 4 -3) 1166 | (xy 3 -3) 1167 | ) 1168 | (layer F.SilkS) 1169 | (width 0) 1170 | (fill solid) 1171 | (tstamp 682033f0-1296-4cd0-84a9-0c94c9aa246a) 1172 | ) 1173 | (fp_poly (pts (xy 4 -3.9) 1174 | (xy 4.9 -3.9) 1175 | (xy 4.9 -3) 1176 | (xy 4 -3) 1177 | ) 1178 | (layer F.SilkS) 1179 | (width 0) 1180 | (fill solid) 1181 | (tstamp a954f61e-b7ac-4827-93ac-188f42defcc9) 1182 | ) 1183 | (fp_poly (pts (xy 5 -4) 1184 | (xy 6 -4) 1185 | (xy 6 -3) 1186 | (xy 5 -3) 1187 | ) 1188 | (layer F.Cu) 1189 | (width 0) 1190 | (fill solid) 1191 | (tstamp fde091f7-c72e-4b59-9d1e-eedace9a580d) 1192 | ) 1193 | (fp_poly (pts (xy 5 -4) 1194 | (xy 6 -4) 1195 | (xy 6 -3) 1196 | (xy 5 -3) 1197 | ) 1198 | (layer F.Mask) 1199 | (width 0) 1200 | (fill solid) 1201 | (tstamp 0329d801-64c5-4c5e-86f3-9e4b3fbb79c4) 1202 | ) 1203 | (fp_poly (pts (xy 6 -4) 1204 | (xy 7 -4) 1205 | (xy 7 -3) 1206 | (xy 6 -3) 1207 | ) 1208 | (layer F.Cu) 1209 | (width 0) 1210 | (fill solid) 1211 | (tstamp 45aa1a92-0be1-47d4-a5d3-f74d26ce4623) 1212 | ) 1213 | (fp_poly (pts (xy 6 -4) 1214 | (xy 7 -4) 1215 | (xy 7 -3) 1216 | (xy 6 -3) 1217 | ) 1218 | (layer F.Mask) 1219 | (width 0) 1220 | (fill solid) 1221 | (tstamp 0830806d-83bb-46fb-8a55-91442d6e61a0) 1222 | ) 1223 | (fp_poly (pts (xy 7 -4) 1224 | (xy 8 -4) 1225 | (xy 8 -3) 1226 | (xy 7 -3) 1227 | ) 1228 | (layer F.Cu) 1229 | (width 0) 1230 | (fill solid) 1231 | (tstamp af040e9e-e25c-4bdb-b551-f35e4e71af6f) 1232 | ) 1233 | (fp_poly (pts (xy 7 -4) 1234 | (xy 8 -4) 1235 | (xy 8 -3) 1236 | (xy 7 -3) 1237 | ) 1238 | (layer F.Mask) 1239 | (width 0) 1240 | (fill solid) 1241 | (tstamp a37a9dd0-c1a3-4197-897d-8d0f34d6d3f7) 1242 | ) 1243 | (fp_poly (pts (xy 8.1 -4) 1244 | (xy 8.9 -4) 1245 | (xy 8.9 -3) 1246 | (xy 8.1 -3) 1247 | ) 1248 | (layer F.SilkS) 1249 | (width 0) 1250 | (fill solid) 1251 | (tstamp 74cc86cc-5658-4ce2-a977-f399a401fe11) 1252 | ) 1253 | (fp_poly (pts (xy 9 -4) 1254 | (xy 10 -4) 1255 | (xy 10 -3) 1256 | (xy 9 -3) 1257 | ) 1258 | (layer F.Cu) 1259 | (width 0) 1260 | (fill solid) 1261 | (tstamp eb1bac30-f6d5-4ad7-bb61-4b6b0eee3e8e) 1262 | ) 1263 | (fp_poly (pts (xy 9 -4) 1264 | (xy 10 -4) 1265 | (xy 10 -3) 1266 | (xy 9 -3) 1267 | ) 1268 | (layer F.Mask) 1269 | (width 0) 1270 | (fill solid) 1271 | (tstamp e17f475e-12df-41c3-80c3-4742116bfcd9) 1272 | ) 1273 | (fp_poly (pts (xy -10 -3) 1274 | (xy -9 -3) 1275 | (xy -9 -2) 1276 | (xy -10 -2) 1277 | ) 1278 | (layer F.Cu) 1279 | (width 0) 1280 | (fill solid) 1281 | (tstamp f04a90ae-b41c-4311-ac0a-19157da4b311) 1282 | ) 1283 | (fp_poly (pts (xy -10 -3) 1284 | (xy -9 -3) 1285 | (xy -9 -2) 1286 | (xy -10 -2) 1287 | ) 1288 | (layer F.Mask) 1289 | (width 0) 1290 | (fill solid) 1291 | (tstamp 14e70f98-f065-4729-91b4-f0c70836e4db) 1292 | ) 1293 | (fp_poly (pts (xy -8.9 -3) 1294 | (xy -8.1 -3) 1295 | (xy -8.1 -2) 1296 | (xy -8.9 -2) 1297 | ) 1298 | (layer F.SilkS) 1299 | (width 0) 1300 | (fill solid) 1301 | (tstamp d03ec362-8700-4f80-aacf-e43587aa15b7) 1302 | ) 1303 | (fp_poly (pts (xy -8 -3) 1304 | (xy -7 -3) 1305 | (xy -7 -2) 1306 | (xy -8 -2) 1307 | ) 1308 | (layer F.Cu) 1309 | (width 0) 1310 | (fill solid) 1311 | (tstamp b801f5df-d92b-4bf7-ae1f-9b41ccb218c8) 1312 | ) 1313 | (fp_poly (pts (xy -8 -3) 1314 | (xy -7 -3) 1315 | (xy -7 -2) 1316 | (xy -8 -2) 1317 | ) 1318 | (layer F.Mask) 1319 | (width 0) 1320 | (fill solid) 1321 | (tstamp 75056da0-e73a-4ca7-b96b-f959b43f4c54) 1322 | ) 1323 | (fp_poly (pts (xy -6.9 -3) 1324 | (xy -6.1 -3) 1325 | (xy -6.1 -2.1) 1326 | (xy -6.9 -2.1) 1327 | ) 1328 | (layer F.SilkS) 1329 | (width 0) 1330 | (fill solid) 1331 | (tstamp 8876e377-1500-4e8e-bcb5-256794294e96) 1332 | ) 1333 | (fp_poly (pts (xy -6 -3) 1334 | (xy -5 -3) 1335 | (xy -5 -2) 1336 | (xy -6 -2) 1337 | ) 1338 | (layer F.Cu) 1339 | (width 0) 1340 | (fill solid) 1341 | (tstamp 446ea9c7-16b8-422d-a3ef-aade3054274a) 1342 | ) 1343 | (fp_poly (pts (xy -6 -3) 1344 | (xy -5 -3) 1345 | (xy -5 -2) 1346 | (xy -6 -2) 1347 | ) 1348 | (layer F.Mask) 1349 | (width 0) 1350 | (fill solid) 1351 | (tstamp 04a9aad8-a194-4532-aa92-355549557e9c) 1352 | ) 1353 | (fp_poly (pts (xy -4.9 -2.9) 1354 | (xy -4 -2.9) 1355 | (xy -4 -2.1) 1356 | (xy -4.9 -2.1) 1357 | ) 1358 | (layer F.SilkS) 1359 | (width 0) 1360 | (fill solid) 1361 | (tstamp 7ced63b2-4e5a-4f04-9030-709a18637f32) 1362 | ) 1363 | (fp_poly (pts (xy -4 -2.9) 1364 | (xy -3.9 -2.9) 1365 | (xy -3.9 -3) 1366 | (xy -3.1 -3) 1367 | (xy -3.1 -2.1) 1368 | (xy -4 -2.1) 1369 | ) 1370 | (layer F.SilkS) 1371 | (width 0) 1372 | (fill solid) 1373 | (tstamp f0d5dec3-67a2-4052-994b-90dd1affafe2) 1374 | ) 1375 | (fp_poly (pts (xy -3 -3) 1376 | (xy -2 -3) 1377 | (xy -2 -2) 1378 | (xy -3 -2) 1379 | ) 1380 | (layer F.Cu) 1381 | (width 0) 1382 | (fill solid) 1383 | (tstamp 8eed486b-f10e-4062-ad6a-7c23dba14766) 1384 | ) 1385 | (fp_poly (pts (xy -3 -3) 1386 | (xy -2 -3) 1387 | (xy -2 -2) 1388 | (xy -3 -2) 1389 | ) 1390 | (layer F.Mask) 1391 | (width 0) 1392 | (fill solid) 1393 | (tstamp 65fed2a2-4f45-42e5-8c7c-5727c7f65b50) 1394 | ) 1395 | (fp_poly (pts (xy -1.9 -3) 1396 | (xy -1 -3) 1397 | (xy -1 -2) 1398 | (xy -1.9 -2) 1399 | ) 1400 | (layer F.SilkS) 1401 | (width 0) 1402 | (fill solid) 1403 | (tstamp b9f9ea04-3fc4-45c7-b335-26c29c8df55e) 1404 | ) 1405 | (fp_poly (pts (xy -1 -3) 1406 | (xy 0 -3) 1407 | (xy 0 -2) 1408 | (xy -1 -2) 1409 | ) 1410 | (layer F.SilkS) 1411 | (width 0) 1412 | (fill solid) 1413 | (tstamp 1efc0b1a-5941-452a-8891-33b122712b8f) 1414 | ) 1415 | (fp_poly (pts (xy 0 -3) 1416 | (xy 1 -3) 1417 | (xy 1 -2) 1418 | (xy 0 -2) 1419 | ) 1420 | (layer F.SilkS) 1421 | (width 0) 1422 | (fill solid) 1423 | (tstamp a06009f6-a572-4e27-99a2-e97ff512bfe8) 1424 | ) 1425 | (fp_poly (pts (xy 1 -3) 1426 | (xy 2 -3) 1427 | (xy 2 -2) 1428 | (xy 1 -2) 1429 | ) 1430 | (layer F.SilkS) 1431 | (width 0) 1432 | (fill solid) 1433 | (tstamp a5cb14fd-e42f-4e92-976b-a830fd45d20b) 1434 | ) 1435 | (fp_poly (pts (xy 2 -3) 1436 | (xy 3 -3) 1437 | (xy 3 -2) 1438 | (xy 2 -2) 1439 | ) 1440 | (layer F.SilkS) 1441 | (width 0) 1442 | (fill solid) 1443 | (tstamp 34278c66-50b7-4dc2-bdec-eff5f8af2de7) 1444 | ) 1445 | (fp_poly (pts (xy 3 -3) 1446 | (xy 4 -3) 1447 | (xy 4 -2) 1448 | (xy 3 -2) 1449 | ) 1450 | (layer F.SilkS) 1451 | (width 0) 1452 | (fill solid) 1453 | (tstamp 7b9cf988-97c4-4750-bcd9-eace67a66f18) 1454 | ) 1455 | (fp_poly (pts (xy 4 -3) 1456 | (xy 4.9 -3) 1457 | (xy 4.9 -2.9) 1458 | (xy 5 -2.9) 1459 | (xy 5 -2) 1460 | (xy 4 -2) 1461 | ) 1462 | (layer F.SilkS) 1463 | (width 0) 1464 | (fill solid) 1465 | (tstamp cfdf6de7-0d63-4048-bb71-84b589eed770) 1466 | ) 1467 | (fp_poly (pts (xy 5 -2.9) 1468 | (xy 6 -2.9) 1469 | (xy 6 -2) 1470 | (xy 5 -2) 1471 | ) 1472 | (layer F.SilkS) 1473 | (width 0) 1474 | (fill solid) 1475 | (tstamp 28b289b0-1ad3-4a03-a84b-3b432bee5c87) 1476 | ) 1477 | (fp_poly (pts (xy 6 -2.9) 1478 | (xy 7 -2.9) 1479 | (xy 7 -2) 1480 | (xy 6 -2) 1481 | ) 1482 | (layer F.SilkS) 1483 | (width 0) 1484 | (fill solid) 1485 | (tstamp 8e090ff6-4d92-4cf3-b465-004e53db3efe) 1486 | ) 1487 | (fp_poly (pts (xy 7 -2.9) 1488 | (xy 8 -2.9) 1489 | (xy 8 -2) 1490 | (xy 7 -2) 1491 | ) 1492 | (layer F.SilkS) 1493 | (width 0) 1494 | (fill solid) 1495 | (tstamp 452a6ed8-f19a-49ea-a6dd-f8ea8b32c9b8) 1496 | ) 1497 | (fp_poly (pts (xy 8 -2.9) 1498 | (xy 8.1 -2.9) 1499 | (xy 8.1 -3) 1500 | (xy 8.9 -3) 1501 | (xy 8.9 -2) 1502 | (xy 8 -2) 1503 | ) 1504 | (layer F.SilkS) 1505 | (width 0) 1506 | (fill solid) 1507 | (tstamp c98b21f9-37a2-4a1d-b051-0537a17686be) 1508 | ) 1509 | (fp_poly (pts (xy 9 -3) 1510 | (xy 10 -3) 1511 | (xy 10 -2) 1512 | (xy 9 -2) 1513 | ) 1514 | (layer F.Cu) 1515 | (width 0) 1516 | (fill solid) 1517 | (tstamp 68e214d1-aa29-47f3-b4f1-0c8eedf60df8) 1518 | ) 1519 | (fp_poly (pts (xy 9 -3) 1520 | (xy 10 -3) 1521 | (xy 10 -2) 1522 | (xy 9 -2) 1523 | ) 1524 | (layer F.Mask) 1525 | (width 0) 1526 | (fill solid) 1527 | (tstamp 0864d377-bcbb-40c4-a63a-a561bdd99cfa) 1528 | ) 1529 | (fp_poly (pts (xy -10 -2) 1530 | (xy -9 -2) 1531 | (xy -9 -1) 1532 | (xy -10 -1) 1533 | ) 1534 | (layer F.Cu) 1535 | (width 0) 1536 | (fill solid) 1537 | (tstamp fd079aab-53a6-4ead-a96d-30705fe5fe6c) 1538 | ) 1539 | (fp_poly (pts (xy -10 -2) 1540 | (xy -9 -2) 1541 | (xy -9 -1) 1542 | (xy -10 -1) 1543 | ) 1544 | (layer F.Mask) 1545 | (width 0) 1546 | (fill solid) 1547 | (tstamp ac6e46d4-5cab-4c8b-8660-daf953453385) 1548 | ) 1549 | (fp_poly (pts (xy -8.9 -2) 1550 | (xy -8.1 -2) 1551 | (xy -8.1 -1.9) 1552 | (xy -8 -1.9) 1553 | (xy -8 -1) 1554 | (xy -8.9 -1) 1555 | ) 1556 | (layer F.SilkS) 1557 | (width 0) 1558 | (fill solid) 1559 | (tstamp 423befb0-68a7-45c3-8258-3e878dd9be8a) 1560 | ) 1561 | (fp_poly (pts (xy -8 -1.9) 1562 | (xy -7.1 -1.9) 1563 | (xy -7.1 -1) 1564 | (xy -8 -1) 1565 | ) 1566 | (layer F.SilkS) 1567 | (width 0) 1568 | (fill solid) 1569 | (tstamp db7177bf-a844-4b2c-9827-65d24ad30262) 1570 | ) 1571 | (fp_poly (pts (xy -7 -2) 1572 | (xy -6 -2) 1573 | (xy -6 -1) 1574 | (xy -7 -1) 1575 | ) 1576 | (layer F.Cu) 1577 | (width 0) 1578 | (fill solid) 1579 | (tstamp b75c600e-e909-45ca-8816-2ef6ff1959e0) 1580 | ) 1581 | (fp_poly (pts (xy -7 -2) 1582 | (xy -6 -2) 1583 | (xy -6 -1) 1584 | (xy -7 -1) 1585 | ) 1586 | (layer F.Mask) 1587 | (width 0) 1588 | (fill solid) 1589 | (tstamp 178e9ee4-758e-4292-9148-11d488f9f334) 1590 | ) 1591 | (fp_poly (pts (xy -6 -2) 1592 | (xy -5 -2) 1593 | (xy -5 -1) 1594 | (xy -6 -1) 1595 | ) 1596 | (layer F.Cu) 1597 | (width 0) 1598 | (fill solid) 1599 | (tstamp 14298bd3-c650-4620-b965-a5cea5c6a1be) 1600 | ) 1601 | (fp_poly (pts (xy -6 -2) 1602 | (xy -5 -2) 1603 | (xy -5 -1) 1604 | (xy -6 -1) 1605 | ) 1606 | (layer F.Mask) 1607 | (width 0) 1608 | (fill solid) 1609 | (tstamp 98bf055c-a465-44d2-89d9-8d3f07bfd2a9) 1610 | ) 1611 | (fp_poly (pts (xy -5 -2) 1612 | (xy -4 -2) 1613 | (xy -4 -1) 1614 | (xy -5 -1) 1615 | ) 1616 | (layer F.Cu) 1617 | (width 0) 1618 | (fill solid) 1619 | (tstamp 3e84d56c-4870-480c-ad74-2e4f0776bc06) 1620 | ) 1621 | (fp_poly (pts (xy -5 -2) 1622 | (xy -4 -2) 1623 | (xy -4 -1) 1624 | (xy -5 -1) 1625 | ) 1626 | (layer F.Mask) 1627 | (width 0) 1628 | (fill solid) 1629 | (tstamp 35192a25-bed2-4970-9461-bb84b1fbee7d) 1630 | ) 1631 | (fp_poly (pts (xy -4 -2) 1632 | (xy -3 -2) 1633 | (xy -3 -1) 1634 | (xy -4 -1) 1635 | ) 1636 | (layer F.Cu) 1637 | (width 0) 1638 | (fill solid) 1639 | (tstamp 9adb6ebf-b09b-4e07-83fe-506dc2d3b4ea) 1640 | ) 1641 | (fp_poly (pts (xy -4 -2) 1642 | (xy -3 -2) 1643 | (xy -3 -1) 1644 | (xy -4 -1) 1645 | ) 1646 | (layer F.Mask) 1647 | (width 0) 1648 | (fill solid) 1649 | (tstamp fe768d3e-9691-4f1e-9273-d7a316abbb73) 1650 | ) 1651 | (fp_poly (pts (xy -2.9 -1.9) 1652 | (xy -2 -1.9) 1653 | (xy -2 -1) 1654 | (xy -2.9 -1) 1655 | ) 1656 | (layer F.SilkS) 1657 | (width 0) 1658 | (fill solid) 1659 | (tstamp d8745176-eb09-4329-8f59-5d8ea00fb34f) 1660 | ) 1661 | (fp_poly (pts (xy -2 -1.9) 1662 | (xy -1.9 -1.9) 1663 | (xy -1.9 -2) 1664 | (xy -1 -2) 1665 | (xy -1 -1) 1666 | (xy -2 -1) 1667 | ) 1668 | (layer F.SilkS) 1669 | (width 0) 1670 | (fill solid) 1671 | (tstamp 48434a64-a8ce-4668-b8a4-9996aea861a5) 1672 | ) 1673 | (fp_poly (pts (xy -1 -2) 1674 | (xy 0 -2) 1675 | (xy 0 -1) 1676 | (xy -1 -1) 1677 | ) 1678 | (layer F.SilkS) 1679 | (width 0) 1680 | (fill solid) 1681 | (tstamp 1908384f-6387-4f00-896a-627bb43b51fc) 1682 | ) 1683 | (fp_poly (pts (xy 0 -2) 1684 | (xy 1 -2) 1685 | (xy 1 -1) 1686 | (xy 0 -1) 1687 | ) 1688 | (layer F.SilkS) 1689 | (width 0) 1690 | (fill solid) 1691 | (tstamp b97edce7-4bc5-43ff-a9f7-95916d5abae4) 1692 | ) 1693 | (fp_poly (pts (xy 1 -2) 1694 | (xy 2 -2) 1695 | (xy 2 -1) 1696 | (xy 1 -1) 1697 | ) 1698 | (layer F.SilkS) 1699 | (width 0) 1700 | (fill solid) 1701 | (tstamp ae6aa6e0-e4cb-4b9e-8cef-7cdd7bb2a3cf) 1702 | ) 1703 | (fp_poly (pts (xy 2 -2) 1704 | (xy 3 -2) 1705 | (xy 3 -1) 1706 | (xy 2 -1) 1707 | ) 1708 | (layer F.SilkS) 1709 | (width 0) 1710 | (fill solid) 1711 | (tstamp b05efc58-fc99-4480-aedc-280043e9eabf) 1712 | ) 1713 | (fp_poly (pts (xy 3 -2) 1714 | (xy 4 -2) 1715 | (xy 4 -1) 1716 | (xy 3 -1) 1717 | ) 1718 | (layer F.SilkS) 1719 | (width 0) 1720 | (fill solid) 1721 | (tstamp 49fb9ba6-1b6b-4bc3-ae05-3c3f09494b28) 1722 | ) 1723 | (fp_poly (pts (xy 4 -2) 1724 | (xy 5 -2) 1725 | (xy 5 -1) 1726 | (xy 4 -1) 1727 | ) 1728 | (layer F.SilkS) 1729 | (width 0) 1730 | (fill solid) 1731 | (tstamp 3e505b69-6cc8-4de0-a346-07bc83730ba8) 1732 | ) 1733 | (fp_poly (pts (xy 5 -2) 1734 | (xy 6 -2) 1735 | (xy 6 -1) 1736 | (xy 5 -1) 1737 | ) 1738 | (layer F.SilkS) 1739 | (width 0) 1740 | (fill solid) 1741 | (tstamp 5415e038-93dc-4e08-9fe3-340f0a4cf683) 1742 | ) 1743 | (fp_poly (pts (xy 6 -2) 1744 | (xy 7 -2) 1745 | (xy 7 -1) 1746 | (xy 6 -1) 1747 | ) 1748 | (layer F.SilkS) 1749 | (width 0) 1750 | (fill solid) 1751 | (tstamp 139e1ab8-cb10-42a7-9af2-a382e21cbcc8) 1752 | ) 1753 | (fp_poly (pts (xy 7 -2) 1754 | (xy 8 -2) 1755 | (xy 8 -1) 1756 | (xy 7 -1) 1757 | ) 1758 | (layer F.SilkS) 1759 | (width 0) 1760 | (fill solid) 1761 | (tstamp e9ad3182-f6c1-464e-9c03-06feabb7d1e5) 1762 | ) 1763 | (fp_poly (pts (xy 8 -2) 1764 | (xy 8.9 -2) 1765 | (xy 8.9 -1) 1766 | (xy 8 -1) 1767 | ) 1768 | (layer F.SilkS) 1769 | (width 0) 1770 | (fill solid) 1771 | (tstamp a289ce81-709f-4495-b907-f3435efe1a5b) 1772 | ) 1773 | (fp_poly (pts (xy 9 -2) 1774 | (xy 10 -2) 1775 | (xy 10 -1) 1776 | (xy 9 -1) 1777 | ) 1778 | (layer F.Cu) 1779 | (width 0) 1780 | (fill solid) 1781 | (tstamp 2cd0a55a-2417-4fbb-a091-e0e7e8516bd8) 1782 | ) 1783 | (fp_poly (pts (xy 9 -2) 1784 | (xy 10 -2) 1785 | (xy 10 -1) 1786 | (xy 9 -1) 1787 | ) 1788 | (layer F.Mask) 1789 | (width 0) 1790 | (fill solid) 1791 | (tstamp 56af17de-e0ab-416b-bd5d-63c75685c574) 1792 | ) 1793 | (fp_poly (pts (xy -10 -1) 1794 | (xy -9 -1) 1795 | (xy -9 0) 1796 | (xy -10 0) 1797 | ) 1798 | (layer F.Cu) 1799 | (width 0) 1800 | (fill solid) 1801 | (tstamp 9527f452-e13b-4750-aeb6-93ce37930ce6) 1802 | ) 1803 | (fp_poly (pts (xy -10 -1) 1804 | (xy -9 -1) 1805 | (xy -9 0) 1806 | (xy -10 0) 1807 | ) 1808 | (layer F.Mask) 1809 | (width 0) 1810 | (fill solid) 1811 | (tstamp cb7fb7b2-5a0d-4fb8-8ded-c7f657c9dd12) 1812 | ) 1813 | (fp_poly (pts (xy -8.9 -1) 1814 | (xy -8 -1) 1815 | (xy -8 0) 1816 | (xy -8.9 0) 1817 | ) 1818 | (layer F.SilkS) 1819 | (width 0) 1820 | (fill solid) 1821 | (tstamp b08e7cbc-9561-4061-9702-5bfc7f09a579) 1822 | ) 1823 | (fp_poly (pts (xy -8 -1) 1824 | (xy -7.1 -1) 1825 | (xy -7.1 -0.9) 1826 | (xy -7 -0.9) 1827 | (xy -7 0) 1828 | (xy -8 0) 1829 | ) 1830 | (layer F.SilkS) 1831 | (width 0) 1832 | (fill solid) 1833 | (tstamp 2108b638-9872-4aba-8f47-096bc61f7445) 1834 | ) 1835 | (fp_poly (pts (xy -7 -0.9) 1836 | (xy -6 -0.9) 1837 | (xy -6 0) 1838 | (xy -7 0) 1839 | ) 1840 | (layer F.SilkS) 1841 | (width 0) 1842 | (fill solid) 1843 | (tstamp 91952cbb-c222-46a4-97bb-0430c3a52856) 1844 | ) 1845 | (fp_poly (pts (xy -6 -0.9) 1846 | (xy -5 -0.9) 1847 | (xy -5 0) 1848 | (xy -6 0) 1849 | ) 1850 | (layer F.SilkS) 1851 | (width 0) 1852 | (fill solid) 1853 | (tstamp f301ac2d-e58f-4858-978d-545846f276fc) 1854 | ) 1855 | (fp_poly (pts (xy -5 -0.9) 1856 | (xy -4 -0.9) 1857 | (xy -4 0) 1858 | (xy -5 0) 1859 | ) 1860 | (layer F.SilkS) 1861 | (width 0) 1862 | (fill solid) 1863 | (tstamp bd3046b0-a093-4918-b221-f319b2b2d2b3) 1864 | ) 1865 | (fp_poly (pts (xy -4 -0.9) 1866 | (xy -3 -0.9) 1867 | (xy -3 0) 1868 | (xy -4 0) 1869 | ) 1870 | (layer F.SilkS) 1871 | (width 0) 1872 | (fill solid) 1873 | (tstamp 978a8c04-1997-47d6-9d94-2de938a75dc2) 1874 | ) 1875 | (fp_poly (pts (xy -3 -0.9) 1876 | (xy -2.9 -0.9) 1877 | (xy -2.9 -1) 1878 | (xy -2 -1) 1879 | (xy -2 0) 1880 | (xy -3 0) 1881 | ) 1882 | (layer F.SilkS) 1883 | (width 0) 1884 | (fill solid) 1885 | (tstamp 8067b11b-9242-439a-8b1e-d8b4243e8aff) 1886 | ) 1887 | (fp_poly (pts (xy -2 -1) 1888 | (xy -1 -1) 1889 | (xy -1 0) 1890 | (xy -2 0) 1891 | ) 1892 | (layer F.SilkS) 1893 | (width 0) 1894 | (fill solid) 1895 | (tstamp fa9ff7e4-0d84-4716-90d0-725bf359c551) 1896 | ) 1897 | (fp_poly (pts (xy -1 -1) 1898 | (xy 0 -1) 1899 | (xy 0 0) 1900 | (xy -1 0) 1901 | ) 1902 | (layer F.SilkS) 1903 | (width 0) 1904 | (fill solid) 1905 | (tstamp be2cba31-dcf1-4884-bf3a-681801300aa8) 1906 | ) 1907 | (fp_poly (pts (xy 0 -1) 1908 | (xy 1 -1) 1909 | (xy 1 0) 1910 | (xy 0 0) 1911 | ) 1912 | (layer F.SilkS) 1913 | (width 0) 1914 | (fill solid) 1915 | (tstamp f8cb6007-b0ef-4a60-bf44-e334d221c001) 1916 | ) 1917 | (fp_poly (pts (xy 1 -1) 1918 | (xy 2 -1) 1919 | (xy 2 0) 1920 | (xy 1 0) 1921 | ) 1922 | (layer F.SilkS) 1923 | (width 0) 1924 | (fill solid) 1925 | (tstamp b7cd8642-23be-42ed-9b94-e708610cc437) 1926 | ) 1927 | (fp_poly (pts (xy 2 -1) 1928 | (xy 3 -1) 1929 | (xy 3 0) 1930 | (xy 2 0) 1931 | ) 1932 | (layer F.SilkS) 1933 | (width 0) 1934 | (fill solid) 1935 | (tstamp 83173780-bfad-455d-82c7-e0e532eeb820) 1936 | ) 1937 | (fp_poly (pts (xy 3 -1) 1938 | (xy 4 -1) 1939 | (xy 4 0) 1940 | (xy 3 0) 1941 | ) 1942 | (layer F.SilkS) 1943 | (width 0) 1944 | (fill solid) 1945 | (tstamp f926301f-f78c-4ee3-8f81-b1137fc835ee) 1946 | ) 1947 | (fp_poly (pts (xy 4 -1) 1948 | (xy 5 -1) 1949 | (xy 5 0) 1950 | (xy 4 0) 1951 | ) 1952 | (layer F.SilkS) 1953 | (width 0) 1954 | (fill solid) 1955 | (tstamp 2f62cf3c-79d1-4c28-bd1b-bf6991f608a4) 1956 | ) 1957 | (fp_poly (pts (xy 5 -1) 1958 | (xy 6 -1) 1959 | (xy 6 0) 1960 | (xy 5 0) 1961 | ) 1962 | (layer F.SilkS) 1963 | (width 0) 1964 | (fill solid) 1965 | (tstamp fc8f685f-b2a6-4106-a231-dc1ef7d173ab) 1966 | ) 1967 | (fp_poly (pts (xy 6 -1) 1968 | (xy 7 -1) 1969 | (xy 7 0) 1970 | (xy 6 0) 1971 | ) 1972 | (layer F.SilkS) 1973 | (width 0) 1974 | (fill solid) 1975 | (tstamp e76e107d-2552-4970-875f-a8517fd9b0d0) 1976 | ) 1977 | (fp_poly (pts (xy 7 -1) 1978 | (xy 8 -1) 1979 | (xy 8 0) 1980 | (xy 7 0) 1981 | ) 1982 | (layer F.SilkS) 1983 | (width 0) 1984 | (fill solid) 1985 | (tstamp 045c402a-b9c9-45ae-b9cc-e0fe29c8064e) 1986 | ) 1987 | (fp_poly (pts (xy 8 -1) 1988 | (xy 8.9 -1) 1989 | (xy 8.9 0) 1990 | (xy 8 0) 1991 | ) 1992 | (layer F.SilkS) 1993 | (width 0) 1994 | (fill solid) 1995 | (tstamp e6fa0430-f531-4005-a839-570d03226179) 1996 | ) 1997 | (fp_poly (pts (xy 9 -1) 1998 | (xy 10 -1) 1999 | (xy 10 0) 2000 | (xy 9 0) 2001 | ) 2002 | (layer F.Cu) 2003 | (width 0) 2004 | (fill solid) 2005 | (tstamp d8241e04-729d-4d8c-b341-62290c9bd6f4) 2006 | ) 2007 | (fp_poly (pts (xy 9 -1) 2008 | (xy 10 -1) 2009 | (xy 10 0) 2010 | (xy 9 0) 2011 | ) 2012 | (layer F.Mask) 2013 | (width 0) 2014 | (fill solid) 2015 | (tstamp 18b9e32b-06d9-49f8-8c7d-c8832bb9cd82) 2016 | ) 2017 | (fp_poly (pts (xy -10 0) 2018 | (xy -9 0) 2019 | (xy -9 1) 2020 | (xy -10 1) 2021 | ) 2022 | (layer F.Cu) 2023 | (width 0) 2024 | (fill solid) 2025 | (tstamp 8d28ddab-426e-4774-9515-6683ff9bb595) 2026 | ) 2027 | (fp_poly (pts (xy -10 0) 2028 | (xy -9 0) 2029 | (xy -9 1) 2030 | (xy -10 1) 2031 | ) 2032 | (layer F.Mask) 2033 | (width 0) 2034 | (fill solid) 2035 | (tstamp 18f8d4e5-cdf8-4060-bdaa-3fa4bf4b1f9b) 2036 | ) 2037 | (fp_poly (pts (xy -8.9 0) 2038 | (xy -8 0) 2039 | (xy -8 1) 2040 | (xy -8.9 1) 2041 | ) 2042 | (layer F.SilkS) 2043 | (width 0) 2044 | (fill solid) 2045 | (tstamp 5ae27a3e-6804-4d84-8f5f-eb24e8d2d8d8) 2046 | ) 2047 | (fp_poly (pts (xy -8 0) 2048 | (xy -7 0) 2049 | (xy -7 1) 2050 | (xy -8 1) 2051 | ) 2052 | (layer F.SilkS) 2053 | (width 0) 2054 | (fill solid) 2055 | (tstamp 828d3b37-4851-4525-bd57-a74f587f9936) 2056 | ) 2057 | (fp_poly (pts (xy -7 0) 2058 | (xy -6 0) 2059 | (xy -6 1) 2060 | (xy -7 1) 2061 | ) 2062 | (layer F.SilkS) 2063 | (width 0) 2064 | (fill solid) 2065 | (tstamp 6352e197-ce88-4378-add1-036e41f5ac58) 2066 | ) 2067 | (fp_poly (pts (xy -6 0) 2068 | (xy -5 0) 2069 | (xy -5 1) 2070 | (xy -6 1) 2071 | ) 2072 | (layer F.SilkS) 2073 | (width 0) 2074 | (fill solid) 2075 | (tstamp a7f487ae-1c1a-44da-a583-9b00aba8f7de) 2076 | ) 2077 | (fp_poly (pts (xy -5 0) 2078 | (xy -4 0) 2079 | (xy -4 1) 2080 | (xy -5 1) 2081 | ) 2082 | (layer F.SilkS) 2083 | (width 0) 2084 | (fill solid) 2085 | (tstamp beec185e-c8a7-414c-967a-a13ac8c1c4ad) 2086 | ) 2087 | (fp_poly (pts (xy -4 0) 2088 | (xy -3 0) 2089 | (xy -3 1) 2090 | (xy -4 1) 2091 | ) 2092 | (layer F.SilkS) 2093 | (width 0) 2094 | (fill solid) 2095 | (tstamp 903491da-ae9c-4e97-9179-a2a05a70f600) 2096 | ) 2097 | (fp_poly (pts (xy -3 0) 2098 | (xy -2 0) 2099 | (xy -2 1) 2100 | (xy -3 1) 2101 | ) 2102 | (layer F.SilkS) 2103 | (width 0) 2104 | (fill solid) 2105 | (tstamp 75af6b92-4972-47ee-86b9-095d39c32204) 2106 | ) 2107 | (fp_poly (pts (xy -2 0) 2108 | (xy -1 0) 2109 | (xy -1 1) 2110 | (xy -2 1) 2111 | ) 2112 | (layer F.SilkS) 2113 | (width 0) 2114 | (fill solid) 2115 | (tstamp 17c9bf99-1e95-4169-849c-8a9950390631) 2116 | ) 2117 | (fp_poly (pts (xy -1 0) 2118 | (xy 0 0) 2119 | (xy 0 1) 2120 | (xy -1 1) 2121 | ) 2122 | (layer F.SilkS) 2123 | (width 0) 2124 | (fill solid) 2125 | (tstamp 7e31b3b8-80cb-4d63-9c1f-67404a1baf62) 2126 | ) 2127 | (fp_poly (pts (xy 0 0) 2128 | (xy 1 0) 2129 | (xy 1 1) 2130 | (xy 0 1) 2131 | ) 2132 | (layer F.SilkS) 2133 | (width 0) 2134 | (fill solid) 2135 | (tstamp afccbd2a-c391-4c3f-877e-cb463b79beef) 2136 | ) 2137 | (fp_poly (pts (xy 1 0) 2138 | (xy 2 0) 2139 | (xy 2 1) 2140 | (xy 1 1) 2141 | ) 2142 | (layer F.SilkS) 2143 | (width 0) 2144 | (fill solid) 2145 | (tstamp 3be7b7ce-dc71-44c2-b78e-5c4733561367) 2146 | ) 2147 | (fp_poly (pts (xy 2 0) 2148 | (xy 3 0) 2149 | (xy 3 1) 2150 | (xy 2 1) 2151 | ) 2152 | (layer F.SilkS) 2153 | (width 0) 2154 | (fill solid) 2155 | (tstamp 76303183-e1e1-4601-aca5-66813e474377) 2156 | ) 2157 | (fp_poly (pts (xy 3 0) 2158 | (xy 4 0) 2159 | (xy 4 1) 2160 | (xy 3 1) 2161 | ) 2162 | (layer F.SilkS) 2163 | (width 0) 2164 | (fill solid) 2165 | (tstamp 313c3b4c-ca72-4789-bfed-db89a929ea9e) 2166 | ) 2167 | (fp_poly (pts (xy 4 0) 2168 | (xy 5 0) 2169 | (xy 5 1) 2170 | (xy 4 1) 2171 | ) 2172 | (layer F.SilkS) 2173 | (width 0) 2174 | (fill solid) 2175 | (tstamp c7fee5e4-3707-49f0-a030-e58cb0274c10) 2176 | ) 2177 | (fp_poly (pts (xy 5 0) 2178 | (xy 6 0) 2179 | (xy 6 1) 2180 | (xy 5 1) 2181 | ) 2182 | (layer F.SilkS) 2183 | (width 0) 2184 | (fill solid) 2185 | (tstamp f60cb73f-0179-4f53-9a54-55517c7f2987) 2186 | ) 2187 | (fp_poly (pts (xy 6 0) 2188 | (xy 7 0) 2189 | (xy 7 1) 2190 | (xy 6 1) 2191 | ) 2192 | (layer F.SilkS) 2193 | (width 0) 2194 | (fill solid) 2195 | (tstamp 67c7561b-687f-4453-ad64-8a73270fde82) 2196 | ) 2197 | (fp_poly (pts (xy 7 0) 2198 | (xy 8 0) 2199 | (xy 8 1) 2200 | (xy 7 1) 2201 | ) 2202 | (layer F.SilkS) 2203 | (width 0) 2204 | (fill solid) 2205 | (tstamp 29b5ff81-10bd-4e75-998b-4b72c8564d90) 2206 | ) 2207 | (fp_poly (pts (xy 8 0) 2208 | (xy 8.9 0) 2209 | (xy 8.9 1) 2210 | (xy 8 1) 2211 | ) 2212 | (layer F.SilkS) 2213 | (width 0) 2214 | (fill solid) 2215 | (tstamp ed01702a-e028-4eec-804d-38d2e46dd3da) 2216 | ) 2217 | (fp_poly (pts (xy 9 0) 2218 | (xy 10 0) 2219 | (xy 10 1) 2220 | (xy 9 1) 2221 | ) 2222 | (layer F.Cu) 2223 | (width 0) 2224 | (fill solid) 2225 | (tstamp e6e66c92-eeb1-4f16-a7d1-2d5e6acaeb59) 2226 | ) 2227 | (fp_poly (pts (xy 9 0) 2228 | (xy 10 0) 2229 | (xy 10 1) 2230 | (xy 9 1) 2231 | ) 2232 | (layer F.Mask) 2233 | (width 0) 2234 | (fill solid) 2235 | (tstamp 365966bb-c854-4549-9662-ff32d61a3fce) 2236 | ) 2237 | (fp_poly (pts (xy -10 1) 2238 | (xy -9 1) 2239 | (xy -9 2) 2240 | (xy -10 2) 2241 | ) 2242 | (layer F.Cu) 2243 | (width 0) 2244 | (fill solid) 2245 | (tstamp 191094a4-eaa5-42d4-9f34-b106f9473b71) 2246 | ) 2247 | (fp_poly (pts (xy -10 1) 2248 | (xy -9 1) 2249 | (xy -9 2) 2250 | (xy -10 2) 2251 | ) 2252 | (layer F.Mask) 2253 | (width 0) 2254 | (fill solid) 2255 | (tstamp 49d21139-a3fc-4c9e-a40b-e1b6165df993) 2256 | ) 2257 | (fp_poly (pts (xy -8.9 1) 2258 | (xy -8 1) 2259 | (xy -8 2) 2260 | (xy -8.9 2) 2261 | ) 2262 | (layer F.SilkS) 2263 | (width 0) 2264 | (fill solid) 2265 | (tstamp 37626e79-bd45-4bcb-bef1-3607608e6b3f) 2266 | ) 2267 | (fp_poly (pts (xy -8 1) 2268 | (xy -7 1) 2269 | (xy -7 2) 2270 | (xy -8 2) 2271 | ) 2272 | (layer F.SilkS) 2273 | (width 0) 2274 | (fill solid) 2275 | (tstamp 691daa82-2aa4-4559-94b7-b9695efdbb20) 2276 | ) 2277 | (fp_poly (pts (xy -7 1) 2278 | (xy -6 1) 2279 | (xy -6 2) 2280 | (xy -7 2) 2281 | ) 2282 | (layer F.SilkS) 2283 | (width 0) 2284 | (fill solid) 2285 | (tstamp 15924885-3440-415f-9fa5-4ef449e166cc) 2286 | ) 2287 | (fp_poly (pts (xy -6 1) 2288 | (xy -5 1) 2289 | (xy -5 2) 2290 | (xy -6 2) 2291 | ) 2292 | (layer F.SilkS) 2293 | (width 0) 2294 | (fill solid) 2295 | (tstamp d0511a86-d560-40b6-9f2a-6629e233c99e) 2296 | ) 2297 | (fp_poly (pts (xy -5 1) 2298 | (xy -4 1) 2299 | (xy -4 2) 2300 | (xy -5 2) 2301 | ) 2302 | (layer F.SilkS) 2303 | (width 0) 2304 | (fill solid) 2305 | (tstamp c7a81f00-d434-4587-a694-c03c0d3cdc91) 2306 | ) 2307 | (fp_poly (pts (xy -4 1) 2308 | (xy -3 1) 2309 | (xy -3 2) 2310 | (xy -4 2) 2311 | ) 2312 | (layer F.SilkS) 2313 | (width 0) 2314 | (fill solid) 2315 | (tstamp 91992d9b-e8d2-466d-a4e1-a1f42e696ebf) 2316 | ) 2317 | (fp_poly (pts (xy -3 1) 2318 | (xy -2 1) 2319 | (xy -2 2) 2320 | (xy -3 2) 2321 | ) 2322 | (layer F.SilkS) 2323 | (width 0) 2324 | (fill solid) 2325 | (tstamp f7218c7c-9d91-4757-ad66-c60098f32cd8) 2326 | ) 2327 | (fp_poly (pts (xy -2 1) 2328 | (xy -1 1) 2329 | (xy -1 2) 2330 | (xy -2 2) 2331 | ) 2332 | (layer F.SilkS) 2333 | (width 0) 2334 | (fill solid) 2335 | (tstamp 58016a93-7fe9-40b8-b42b-888ccdcb6c58) 2336 | ) 2337 | (fp_poly (pts (xy -1 1) 2338 | (xy 0 1) 2339 | (xy 0 2) 2340 | (xy -1 2) 2341 | ) 2342 | (layer F.SilkS) 2343 | (width 0) 2344 | (fill solid) 2345 | (tstamp a6f0b7ea-1b4f-4e7a-ad49-684c217c421a) 2346 | ) 2347 | (fp_poly (pts (xy 0 1) 2348 | (xy 1 1) 2349 | (xy 1 2) 2350 | (xy 0 2) 2351 | ) 2352 | (layer F.SilkS) 2353 | (width 0) 2354 | (fill solid) 2355 | (tstamp 97de8d26-1f07-4570-bb5a-da02f6368507) 2356 | ) 2357 | (fp_poly (pts (xy 1 1) 2358 | (xy 2 1) 2359 | (xy 2 2) 2360 | (xy 1 2) 2361 | ) 2362 | (layer F.SilkS) 2363 | (width 0) 2364 | (fill solid) 2365 | (tstamp 68f622b6-d7e9-4727-8c3e-195c48e6ca32) 2366 | ) 2367 | (fp_poly (pts (xy 2 1) 2368 | (xy 3 1) 2369 | (xy 3 2) 2370 | (xy 2 2) 2371 | ) 2372 | (layer F.SilkS) 2373 | (width 0) 2374 | (fill solid) 2375 | (tstamp 4d3e85a0-b0be-4825-9ddb-a1914341c609) 2376 | ) 2377 | (fp_poly (pts (xy 3 1) 2378 | (xy 4 1) 2379 | (xy 4 2) 2380 | (xy 3 2) 2381 | ) 2382 | (layer F.SilkS) 2383 | (width 0) 2384 | (fill solid) 2385 | (tstamp a5b84eb1-0d1d-4144-93ba-b4bfb658a9cf) 2386 | ) 2387 | (fp_poly (pts (xy 4 1) 2388 | (xy 5 1) 2389 | (xy 5 2) 2390 | (xy 4 2) 2391 | ) 2392 | (layer F.SilkS) 2393 | (width 0) 2394 | (fill solid) 2395 | (tstamp ce658280-b6c6-4f4f-95ae-6a4af5dbb436) 2396 | ) 2397 | (fp_poly (pts (xy 5 1) 2398 | (xy 6 1) 2399 | (xy 6 2) 2400 | (xy 5 2) 2401 | ) 2402 | (layer F.SilkS) 2403 | (width 0) 2404 | (fill solid) 2405 | (tstamp d0973682-aa61-4e6b-acdf-65170329a317) 2406 | ) 2407 | (fp_poly (pts (xy 6 1) 2408 | (xy 7 1) 2409 | (xy 7 2) 2410 | (xy 6 2) 2411 | ) 2412 | (layer F.SilkS) 2413 | (width 0) 2414 | (fill solid) 2415 | (tstamp 802c8cb1-5ac4-45dc-ad57-c3a69f95f035) 2416 | ) 2417 | (fp_poly (pts (xy 7 1) 2418 | (xy 8 1) 2419 | (xy 8 2) 2420 | (xy 7 2) 2421 | ) 2422 | (layer F.SilkS) 2423 | (width 0) 2424 | (fill solid) 2425 | (tstamp b8672767-0945-481c-b364-ee09223a79ec) 2426 | ) 2427 | (fp_poly (pts (xy 8 1) 2428 | (xy 8.9 1) 2429 | (xy 8.9 2) 2430 | (xy 8 2) 2431 | ) 2432 | (layer F.SilkS) 2433 | (width 0) 2434 | (fill solid) 2435 | (tstamp 122d9b2a-808f-446b-a301-84f85e59be40) 2436 | ) 2437 | (fp_poly (pts (xy 9 1) 2438 | (xy 10 1) 2439 | (xy 10 2) 2440 | (xy 9 2) 2441 | ) 2442 | (layer F.Cu) 2443 | (width 0) 2444 | (fill solid) 2445 | (tstamp 899a73f5-64f2-4a58-a995-a2fff2f59e86) 2446 | ) 2447 | (fp_poly (pts (xy 9 1) 2448 | (xy 10 1) 2449 | (xy 10 2) 2450 | (xy 9 2) 2451 | ) 2452 | (layer F.Mask) 2453 | (width 0) 2454 | (fill solid) 2455 | (tstamp 36b5a636-a575-4192-8c79-dde518b0a17d) 2456 | ) 2457 | (fp_poly (pts (xy -10 2) 2458 | (xy -9 2) 2459 | (xy -9 3) 2460 | (xy -10 3) 2461 | ) 2462 | (layer F.Cu) 2463 | (width 0) 2464 | (fill solid) 2465 | (tstamp 095478c5-a11c-4a4b-8e28-1b678f581492) 2466 | ) 2467 | (fp_poly (pts (xy -10 2) 2468 | (xy -9 2) 2469 | (xy -9 3) 2470 | (xy -10 3) 2471 | ) 2472 | (layer F.Mask) 2473 | (width 0) 2474 | (fill solid) 2475 | (tstamp b7504680-e7b5-4948-8291-ceb0d7b7f561) 2476 | ) 2477 | (fp_poly (pts (xy -8.9 2) 2478 | (xy -8 2) 2479 | (xy -8 3) 2480 | (xy -8.9 3) 2481 | ) 2482 | (layer F.SilkS) 2483 | (width 0) 2484 | (fill solid) 2485 | (tstamp f85bf2db-e180-4aaf-bc06-d6aa5edbdb47) 2486 | ) 2487 | (fp_poly (pts (xy -8 2) 2488 | (xy -7 2) 2489 | (xy -7 3) 2490 | (xy -8 3) 2491 | ) 2492 | (layer F.SilkS) 2493 | (width 0) 2494 | (fill solid) 2495 | (tstamp 7106995f-493c-43e5-9dd2-2e86993e427b) 2496 | ) 2497 | (fp_poly (pts (xy -7 2) 2498 | (xy -6 2) 2499 | (xy -6 3) 2500 | (xy -7 3) 2501 | ) 2502 | (layer F.SilkS) 2503 | (width 0) 2504 | (fill solid) 2505 | (tstamp ee504ec0-c1f0-4870-8dca-cd705c929e00) 2506 | ) 2507 | (fp_poly (pts (xy -6 2) 2508 | (xy -5 2) 2509 | (xy -5 3) 2510 | (xy -6 3) 2511 | ) 2512 | (layer F.SilkS) 2513 | (width 0) 2514 | (fill solid) 2515 | (tstamp 9cae5837-6ce3-4d23-b9d8-2a02e74c1410) 2516 | ) 2517 | (fp_poly (pts (xy -5 2) 2518 | (xy -4 2) 2519 | (xy -4 3) 2520 | (xy -5 3) 2521 | ) 2522 | (layer F.SilkS) 2523 | (width 0) 2524 | (fill solid) 2525 | (tstamp 087e0b4c-d487-4f40-b9c3-8f9e86e6d921) 2526 | ) 2527 | (fp_poly (pts (xy -4 2) 2528 | (xy -3 2) 2529 | (xy -3 3) 2530 | (xy -4 3) 2531 | ) 2532 | (layer F.SilkS) 2533 | (width 0) 2534 | (fill solid) 2535 | (tstamp f59ba12e-d338-433c-80e9-07386e4f9b7d) 2536 | ) 2537 | (fp_poly (pts (xy -3 2) 2538 | (xy -2 2) 2539 | (xy -2 3) 2540 | (xy -3 3) 2541 | ) 2542 | (layer F.SilkS) 2543 | (width 0) 2544 | (fill solid) 2545 | (tstamp 4e360f2d-a12f-48d0-9b6e-fd8165da12c4) 2546 | ) 2547 | (fp_poly (pts (xy -2 2) 2548 | (xy -1 2) 2549 | (xy -1 3) 2550 | (xy -2 3) 2551 | ) 2552 | (layer F.SilkS) 2553 | (width 0) 2554 | (fill solid) 2555 | (tstamp 8bf281b8-f082-4510-bf20-b4890a7a109a) 2556 | ) 2557 | (fp_poly (pts (xy -1 2) 2558 | (xy 0 2) 2559 | (xy 0 3) 2560 | (xy -1 3) 2561 | ) 2562 | (layer F.SilkS) 2563 | (width 0) 2564 | (fill solid) 2565 | (tstamp 53a9caf4-41d9-4fc9-a2ec-19103d5cdccc) 2566 | ) 2567 | (fp_poly (pts (xy 0 2) 2568 | (xy 1 2) 2569 | (xy 1 3) 2570 | (xy 0 3) 2571 | ) 2572 | (layer F.SilkS) 2573 | (width 0) 2574 | (fill solid) 2575 | (tstamp 05f5cf79-8fa2-442a-b119-897f5840b0bb) 2576 | ) 2577 | (fp_poly (pts (xy 1 2) 2578 | (xy 2 2) 2579 | (xy 2 3) 2580 | (xy 1 3) 2581 | ) 2582 | (layer F.SilkS) 2583 | (width 0) 2584 | (fill solid) 2585 | (tstamp 2176dfbe-17af-4f27-9b66-a761769f0007) 2586 | ) 2587 | (fp_poly (pts (xy 2 2) 2588 | (xy 3 2) 2589 | (xy 3 3) 2590 | (xy 2 3) 2591 | ) 2592 | (layer F.SilkS) 2593 | (width 0) 2594 | (fill solid) 2595 | (tstamp a3966952-bb39-4547-85d8-3005e1d45edd) 2596 | ) 2597 | (fp_poly (pts (xy 3 2) 2598 | (xy 4 2) 2599 | (xy 4 3) 2600 | (xy 3 3) 2601 | ) 2602 | (layer F.SilkS) 2603 | (width 0) 2604 | (fill solid) 2605 | (tstamp 6a642d42-dcc5-4e60-861b-bb083e6d758f) 2606 | ) 2607 | (fp_poly (pts (xy 4 2) 2608 | (xy 5 2) 2609 | (xy 5 3) 2610 | (xy 4 3) 2611 | ) 2612 | (layer F.SilkS) 2613 | (width 0) 2614 | (fill solid) 2615 | (tstamp e9009a8d-d9f5-4cc8-a679-9516fea5b8af) 2616 | ) 2617 | (fp_poly (pts (xy 5 2) 2618 | (xy 6 2) 2619 | (xy 6 3) 2620 | (xy 5 3) 2621 | ) 2622 | (layer F.SilkS) 2623 | (width 0) 2624 | (fill solid) 2625 | (tstamp 5c55e6fb-c545-48db-a418-c24974bf6518) 2626 | ) 2627 | (fp_poly (pts (xy 6 2) 2628 | (xy 7 2) 2629 | (xy 7 3) 2630 | (xy 6 3) 2631 | ) 2632 | (layer F.SilkS) 2633 | (width 0) 2634 | (fill solid) 2635 | (tstamp 00f8b7b1-603d-4843-8137-c06678a76844) 2636 | ) 2637 | (fp_poly (pts (xy 7 2) 2638 | (xy 8 2) 2639 | (xy 8 2.9) 2640 | (xy 7.9 2.9) 2641 | (xy 7.9 3) 2642 | (xy 7 3) 2643 | ) 2644 | (layer F.SilkS) 2645 | (width 0) 2646 | (fill solid) 2647 | (tstamp 9fd8e009-496b-41b0-a26d-07b74eaad4e7) 2648 | ) 2649 | (fp_poly (pts (xy 8 2) 2650 | (xy 8.9 2) 2651 | (xy 8.9 2.9) 2652 | (xy 8 2.9) 2653 | ) 2654 | (layer F.SilkS) 2655 | (width 0) 2656 | (fill solid) 2657 | (tstamp a76b2b67-17cb-4a30-a6f5-2bd29863f093) 2658 | ) 2659 | (fp_poly (pts (xy 9 2) 2660 | (xy 10 2) 2661 | (xy 10 3) 2662 | (xy 9 3) 2663 | ) 2664 | (layer F.Cu) 2665 | (width 0) 2666 | (fill solid) 2667 | (tstamp 97b3912b-1d7d-4749-85cc-2791d5de04ad) 2668 | ) 2669 | (fp_poly (pts (xy 9 2) 2670 | (xy 10 2) 2671 | (xy 10 3) 2672 | (xy 9 3) 2673 | ) 2674 | (layer F.Mask) 2675 | (width 0) 2676 | (fill solid) 2677 | (tstamp b2d2a242-0894-44de-b7d6-2ff63f2880ee) 2678 | ) 2679 | (fp_poly (pts (xy -10 3) 2680 | (xy -9 3) 2681 | (xy -9 4) 2682 | (xy -10 4) 2683 | ) 2684 | (layer F.Cu) 2685 | (width 0) 2686 | (fill solid) 2687 | (tstamp edc8f94b-07fb-416a-bdfa-5005d821294a) 2688 | ) 2689 | (fp_poly (pts (xy -10 3) 2690 | (xy -9 3) 2691 | (xy -9 4) 2692 | (xy -10 4) 2693 | ) 2694 | (layer F.Mask) 2695 | (width 0) 2696 | (fill solid) 2697 | (tstamp b03dd3eb-740a-4a5b-aa4f-f19d4997fd89) 2698 | ) 2699 | (fp_poly (pts (xy -8.9 3) 2700 | (xy -8 3) 2701 | (xy -8 3.9) 2702 | (xy -8.9 3.9) 2703 | ) 2704 | (layer F.SilkS) 2705 | (width 0) 2706 | (fill solid) 2707 | (tstamp 277c5ec3-812a-46dc-a216-aa0b82ff15c3) 2708 | ) 2709 | (fp_poly (pts (xy -8 3) 2710 | (xy -7 3) 2711 | (xy -7 4) 2712 | (xy -7.9 4) 2713 | (xy -7.9 3.9) 2714 | (xy -8 3.9) 2715 | ) 2716 | (layer F.SilkS) 2717 | (width 0) 2718 | (fill solid) 2719 | (tstamp 38893f00-dc41-4e84-9abf-a473dac52391) 2720 | ) 2721 | (fp_poly (pts (xy -7 3) 2722 | (xy -6 3) 2723 | (xy -6 4) 2724 | (xy -7 4) 2725 | ) 2726 | (layer F.SilkS) 2727 | (width 0) 2728 | (fill solid) 2729 | (tstamp 6f61cbb8-52de-4ace-a141-1f198200b6bb) 2730 | ) 2731 | (fp_poly (pts (xy -6 3) 2732 | (xy -5 3) 2733 | (xy -5 4) 2734 | (xy -6 4) 2735 | ) 2736 | (layer F.SilkS) 2737 | (width 0) 2738 | (fill solid) 2739 | (tstamp 33d3575b-f344-4338-8dd4-9a1ea2a790ce) 2740 | ) 2741 | (fp_poly (pts (xy -5 3) 2742 | (xy -4 3) 2743 | (xy -4 4) 2744 | (xy -5 4) 2745 | ) 2746 | (layer F.SilkS) 2747 | (width 0) 2748 | (fill solid) 2749 | (tstamp b8310afc-2e37-4b83-a960-1510f8c6cfa6) 2750 | ) 2751 | (fp_poly (pts (xy -4 3) 2752 | (xy -3 3) 2753 | (xy -3 4) 2754 | (xy -4 4) 2755 | ) 2756 | (layer F.SilkS) 2757 | (width 0) 2758 | (fill solid) 2759 | (tstamp 27427d7c-add9-41e3-89c1-d2a81adab34a) 2760 | ) 2761 | (fp_poly (pts (xy -3 3) 2762 | (xy -2 3) 2763 | (xy -2 4) 2764 | (xy -3 4) 2765 | ) 2766 | (layer F.SilkS) 2767 | (width 0) 2768 | (fill solid) 2769 | (tstamp 7da215b6-f6b0-468a-a3db-23f12c612d07) 2770 | ) 2771 | (fp_poly (pts (xy -2 3) 2772 | (xy -1 3) 2773 | (xy -1 4) 2774 | (xy -2 4) 2775 | ) 2776 | (layer F.SilkS) 2777 | (width 0) 2778 | (fill solid) 2779 | (tstamp 7642600c-d38f-449c-91bb-553e53b19f07) 2780 | ) 2781 | (fp_poly (pts (xy -1 3) 2782 | (xy 0 3) 2783 | (xy 0 4) 2784 | (xy -1 4) 2785 | ) 2786 | (layer F.SilkS) 2787 | (width 0) 2788 | (fill solid) 2789 | (tstamp 20d0d1ca-c5cb-4c26-a0e2-13d201a22aff) 2790 | ) 2791 | (fp_poly (pts (xy 0 3) 2792 | (xy 1 3) 2793 | (xy 1 4) 2794 | (xy 0 4) 2795 | ) 2796 | (layer F.SilkS) 2797 | (width 0) 2798 | (fill solid) 2799 | (tstamp 4d464edd-f7a4-4f97-9bd3-1ce5c41d2ac9) 2800 | ) 2801 | (fp_poly (pts (xy 1 3) 2802 | (xy 2 3) 2803 | (xy 2 4) 2804 | (xy 1 4) 2805 | ) 2806 | (layer F.SilkS) 2807 | (width 0) 2808 | (fill solid) 2809 | (tstamp c0f39122-320f-4ff9-bdc7-7c2374b37c44) 2810 | ) 2811 | (fp_poly (pts (xy 2 3) 2812 | (xy 3 3) 2813 | (xy 3 4) 2814 | (xy 2 4) 2815 | ) 2816 | (layer F.SilkS) 2817 | (width 0) 2818 | (fill solid) 2819 | (tstamp efc32f46-7b20-415d-9ee1-8d5a7b4b232a) 2820 | ) 2821 | (fp_poly (pts (xy 3 3) 2822 | (xy 4 3) 2823 | (xy 4 4) 2824 | (xy 3 4) 2825 | ) 2826 | (layer F.SilkS) 2827 | (width 0) 2828 | (fill solid) 2829 | (tstamp 6a098ffb-d532-4188-b0ef-42f7c43038a6) 2830 | ) 2831 | (fp_poly (pts (xy 4 3) 2832 | (xy 5 3) 2833 | (xy 5 4) 2834 | (xy 4 4) 2835 | ) 2836 | (layer F.SilkS) 2837 | (width 0) 2838 | (fill solid) 2839 | (tstamp 9fd21fe1-6304-4b19-ac5d-50a9d905d1e5) 2840 | ) 2841 | (fp_poly (pts (xy 5 3) 2842 | (xy 6 3) 2843 | (xy 6 4) 2844 | (xy 5 4) 2845 | ) 2846 | (layer F.SilkS) 2847 | (width 0) 2848 | (fill solid) 2849 | (tstamp 9ad45ab1-8e4a-426c-ae21-ccade961f5ef) 2850 | ) 2851 | (fp_poly (pts (xy 6 3) 2852 | (xy 7 3) 2853 | (xy 7 4) 2854 | (xy 6 4) 2855 | ) 2856 | (layer F.SilkS) 2857 | (width 0) 2858 | (fill solid) 2859 | (tstamp 5c06dd21-9710-4505-9440-6ac073bb16f3) 2860 | ) 2861 | (fp_poly (pts (xy 7 3) 2862 | (xy 7.9 3) 2863 | (xy 7.9 4) 2864 | (xy 7 4) 2865 | ) 2866 | (layer F.SilkS) 2867 | (width 0) 2868 | (fill solid) 2869 | (tstamp 751b085c-88d4-4a51-8251-c20e8b28c658) 2870 | ) 2871 | (fp_poly (pts (xy 8 3) 2872 | (xy 9 3) 2873 | (xy 9 4) 2874 | (xy 8 4) 2875 | ) 2876 | (layer F.Cu) 2877 | (width 0) 2878 | (fill solid) 2879 | (tstamp b8c58d78-4c58-428e-9921-967d3e206b90) 2880 | ) 2881 | (fp_poly (pts (xy 8 3) 2882 | (xy 9 3) 2883 | (xy 9 4) 2884 | (xy 8 4) 2885 | ) 2886 | (layer F.Mask) 2887 | (width 0) 2888 | (fill solid) 2889 | (tstamp d9729f83-dcad-455a-9a84-b8b4706aee0a) 2890 | ) 2891 | (fp_poly (pts (xy -9 4) 2892 | (xy -8 4) 2893 | (xy -8 5) 2894 | (xy -9 5) 2895 | ) 2896 | (layer F.Cu) 2897 | (width 0) 2898 | (fill solid) 2899 | (tstamp 088b94ee-e317-49e9-903b-4084d644a050) 2900 | ) 2901 | (fp_poly (pts (xy -9 4) 2902 | (xy -8 4) 2903 | (xy -8 5) 2904 | (xy -9 5) 2905 | ) 2906 | (layer F.Mask) 2907 | (width 0) 2908 | (fill solid) 2909 | (tstamp 4ce05be8-0433-48e4-aa4b-71bbb44e045d) 2910 | ) 2911 | (fp_poly (pts (xy -7.9 4) 2912 | (xy -7 4) 2913 | (xy -7 5) 2914 | (xy -7.9 5) 2915 | ) 2916 | (layer F.SilkS) 2917 | (width 0) 2918 | (fill solid) 2919 | (tstamp 0829a759-c745-4225-bd0d-c39347ff2699) 2920 | ) 2921 | (fp_poly (pts (xy -7 4) 2922 | (xy -6 4) 2923 | (xy -6 4.9) 2924 | (xy -6.1 4.9) 2925 | (xy -6.1 5) 2926 | (xy -7 5) 2927 | ) 2928 | (layer F.SilkS) 2929 | (width 0) 2930 | (fill solid) 2931 | (tstamp 4a5f1a7e-cb6a-4741-b3d5-97d51bc7d99a) 2932 | ) 2933 | (fp_poly (pts (xy -6 4) 2934 | (xy -5 4) 2935 | (xy -5 4.9) 2936 | (xy -6 4.9) 2937 | ) 2938 | (layer F.SilkS) 2939 | (width 0) 2940 | (fill solid) 2941 | (tstamp f794c3e5-6d8b-4f80-82cc-3ab1b731ff8d) 2942 | ) 2943 | (fp_poly (pts (xy -5 4) 2944 | (xy -4 4) 2945 | (xy -4 4.9) 2946 | (xy -5 4.9) 2947 | ) 2948 | (layer F.SilkS) 2949 | (width 0) 2950 | (fill solid) 2951 | (tstamp 26ae17f0-6f3c-4e82-884b-e133a8329068) 2952 | ) 2953 | (fp_poly (pts (xy -4 4) 2954 | (xy -3 4) 2955 | (xy -3 5) 2956 | (xy -3.9 5) 2957 | (xy -3.9 4.9) 2958 | (xy -4 4.9) 2959 | ) 2960 | (layer F.SilkS) 2961 | (width 0) 2962 | (fill solid) 2963 | (tstamp 5db141c5-3353-4a60-8071-84098144a841) 2964 | ) 2965 | (fp_poly (pts (xy -3 4) 2966 | (xy -2 4) 2967 | (xy -2 4.9) 2968 | (xy -2.1 4.9) 2969 | (xy -2.1 5) 2970 | (xy -3 5) 2971 | ) 2972 | (layer F.SilkS) 2973 | (width 0) 2974 | (fill solid) 2975 | (tstamp 402a0677-f633-4db6-860d-785fe2a609e9) 2976 | ) 2977 | (fp_poly (pts (xy -2 4) 2978 | (xy -1 4) 2979 | (xy -1 4.9) 2980 | (xy -2 4.9) 2981 | ) 2982 | (layer F.SilkS) 2983 | (width 0) 2984 | (fill solid) 2985 | (tstamp 142d8925-2f53-4234-becf-cf4577790856) 2986 | ) 2987 | (fp_poly (pts (xy -1 4) 2988 | (xy 0 4) 2989 | (xy 0 4.9) 2990 | (xy -1 4.9) 2991 | ) 2992 | (layer F.SilkS) 2993 | (width 0) 2994 | (fill solid) 2995 | (tstamp d8e05d76-76f9-4296-96c9-99f682a690b9) 2996 | ) 2997 | (fp_poly (pts (xy 0 4) 2998 | (xy 1 4) 2999 | (xy 1 4.9) 3000 | (xy 0 4.9) 3001 | ) 3002 | (layer F.SilkS) 3003 | (width 0) 3004 | (fill solid) 3005 | (tstamp 73e8b1a7-b52d-47f1-87f9-3cbf67b5e784) 3006 | ) 3007 | (fp_poly (pts (xy 1 4) 3008 | (xy 2 4) 3009 | (xy 2 4.9) 3010 | (xy 1 4.9) 3011 | ) 3012 | (layer F.SilkS) 3013 | (width 0) 3014 | (fill solid) 3015 | (tstamp 5306d60f-39a4-4ab8-8a6f-b58970747a9a) 3016 | ) 3017 | (fp_poly (pts (xy 2 4) 3018 | (xy 3 4) 3019 | (xy 3 5) 3020 | (xy 2.1 5) 3021 | (xy 2.1 4.9) 3022 | (xy 2 4.9) 3023 | ) 3024 | (layer F.SilkS) 3025 | (width 0) 3026 | (fill solid) 3027 | (tstamp 1414fdda-c4ac-466f-8526-98d5ed743a9d) 3028 | ) 3029 | (fp_poly (pts (xy 3 4) 3030 | (xy 4 4) 3031 | (xy 4 4.9) 3032 | (xy 3.9 4.9) 3033 | (xy 3.9 5) 3034 | (xy 3 5) 3035 | ) 3036 | (layer F.SilkS) 3037 | (width 0) 3038 | (fill solid) 3039 | (tstamp 5fc48aec-1e95-45c8-825f-88aba018f59d) 3040 | ) 3041 | (fp_poly (pts (xy 4 4) 3042 | (xy 5 4) 3043 | (xy 5 4.9) 3044 | (xy 4 4.9) 3045 | ) 3046 | (layer F.SilkS) 3047 | (width 0) 3048 | (fill solid) 3049 | (tstamp 2c108340-263a-4db4-a872-2486200ee84b) 3050 | ) 3051 | (fp_poly (pts (xy 5 4) 3052 | (xy 6 4) 3053 | (xy 6 4.9) 3054 | (xy 5 4.9) 3055 | ) 3056 | (layer F.SilkS) 3057 | (width 0) 3058 | (fill solid) 3059 | (tstamp 5e1f60d1-6375-4bb6-8804-1160243d3c3c) 3060 | ) 3061 | (fp_poly (pts (xy 6 4) 3062 | (xy 7 4) 3063 | (xy 7 5) 3064 | (xy 6.1 5) 3065 | (xy 6.1 4.9) 3066 | (xy 6 4.9) 3067 | ) 3068 | (layer F.SilkS) 3069 | (width 0) 3070 | (fill solid) 3071 | (tstamp f290d4ed-93c4-4a5b-ae9e-4b3f7178b961) 3072 | ) 3073 | (fp_poly (pts (xy 7 4) 3074 | (xy 7.9 4) 3075 | (xy 7.9 5) 3076 | (xy 7 5) 3077 | ) 3078 | (layer F.SilkS) 3079 | (width 0) 3080 | (fill solid) 3081 | (tstamp ebc1717f-3802-469f-982a-a747dc98ab7e) 3082 | ) 3083 | (fp_poly (pts (xy 8 4) 3084 | (xy 9 4) 3085 | (xy 9 5) 3086 | (xy 8 5) 3087 | ) 3088 | (layer F.Cu) 3089 | (width 0) 3090 | (fill solid) 3091 | (tstamp 77cea968-53c0-46df-80ce-e378f39b703c) 3092 | ) 3093 | (fp_poly (pts (xy 8 4) 3094 | (xy 9 4) 3095 | (xy 9 5) 3096 | (xy 8 5) 3097 | ) 3098 | (layer F.Mask) 3099 | (width 0) 3100 | (fill solid) 3101 | (tstamp ee0aa261-a781-4687-ba42-ec86ac16db89) 3102 | ) 3103 | (fp_poly (pts (xy -9 5) 3104 | (xy -8 5) 3105 | (xy -8 6) 3106 | (xy -9 6) 3107 | ) 3108 | (layer F.Cu) 3109 | (width 0) 3110 | (fill solid) 3111 | (tstamp cca6b99d-449a-4de0-8f1e-8d498f4202ff) 3112 | ) 3113 | (fp_poly (pts (xy -9 5) 3114 | (xy -8 5) 3115 | (xy -8 6) 3116 | (xy -9 6) 3117 | ) 3118 | (layer F.Mask) 3119 | (width 0) 3120 | (fill solid) 3121 | (tstamp e642aeb4-2e77-46f9-a207-4b402cdaa3a8) 3122 | ) 3123 | (fp_poly (pts (xy -7.9 5) 3124 | (xy -7 5) 3125 | (xy -7 5.9) 3126 | (xy -7.1 5.9) 3127 | (xy -7.1 6) 3128 | (xy -7.9 6) 3129 | ) 3130 | (layer F.SilkS) 3131 | (width 0) 3132 | (fill solid) 3133 | (tstamp b5d30444-becf-4744-ba37-92edd7dc3f52) 3134 | ) 3135 | (fp_poly (pts (xy -7 5) 3136 | (xy -6.1 5) 3137 | (xy -6.1 5.9) 3138 | (xy -7 5.9) 3139 | ) 3140 | (layer F.SilkS) 3141 | (width 0) 3142 | (fill solid) 3143 | (tstamp ada30fef-9ae5-414e-a07e-2c166ba1f070) 3144 | ) 3145 | (fp_poly (pts (xy -6 5) 3146 | (xy -5 5) 3147 | (xy -5 6) 3148 | (xy -6 6) 3149 | ) 3150 | (layer F.Cu) 3151 | (width 0) 3152 | (fill solid) 3153 | (tstamp 6c9f12fe-51de-4184-b7b3-3e000763ebdb) 3154 | ) 3155 | (fp_poly (pts (xy -6 5) 3156 | (xy -5 5) 3157 | (xy -5 6) 3158 | (xy -6 6) 3159 | ) 3160 | (layer F.Mask) 3161 | (width 0) 3162 | (fill solid) 3163 | (tstamp 100385e7-2604-4db1-84d1-8bec8ad4587d) 3164 | ) 3165 | (fp_poly (pts (xy -5 5) 3166 | (xy -4 5) 3167 | (xy -4 6) 3168 | (xy -5 6) 3169 | ) 3170 | (layer F.Cu) 3171 | (width 0) 3172 | (fill solid) 3173 | (tstamp da9f9525-6564-491d-8625-c6fd26329cff) 3174 | ) 3175 | (fp_poly (pts (xy -5 5) 3176 | (xy -4 5) 3177 | (xy -4 6) 3178 | (xy -5 6) 3179 | ) 3180 | (layer F.Mask) 3181 | (width 0) 3182 | (fill solid) 3183 | (tstamp 379733b9-ed55-40cc-8365-b1bf53dd8060) 3184 | ) 3185 | (fp_poly (pts (xy -3.9 5) 3186 | (xy -3 5) 3187 | (xy -3 6) 3188 | (xy -3.9 6) 3189 | ) 3190 | (layer F.SilkS) 3191 | (width 0) 3192 | (fill solid) 3193 | (tstamp b50b8bb6-4a16-463f-849f-db4e4044fc00) 3194 | ) 3195 | (fp_poly (pts (xy -3 5) 3196 | (xy -2.1 5) 3197 | (xy -2.1 6) 3198 | (xy -3 6) 3199 | ) 3200 | (layer F.SilkS) 3201 | (width 0) 3202 | (fill solid) 3203 | (tstamp 5afba3aa-a106-433b-9745-c9ca57bccd70) 3204 | ) 3205 | (fp_poly (pts (xy -2 5) 3206 | (xy -1 5) 3207 | (xy -1 6) 3208 | (xy -2 6) 3209 | ) 3210 | (layer F.Cu) 3211 | (width 0) 3212 | (fill solid) 3213 | (tstamp b017e63a-6c6c-44f0-af30-b331c0b1c751) 3214 | ) 3215 | (fp_poly (pts (xy -2 5) 3216 | (xy -1 5) 3217 | (xy -1 6) 3218 | (xy -2 6) 3219 | ) 3220 | (layer F.Mask) 3221 | (width 0) 3222 | (fill solid) 3223 | (tstamp 784deef2-9dbc-4b07-b4c3-fc7c93a9d6bc) 3224 | ) 3225 | (fp_poly (pts (xy -1 5) 3226 | (xy 0 5) 3227 | (xy 0 6) 3228 | (xy -1 6) 3229 | ) 3230 | (layer F.Cu) 3231 | (width 0) 3232 | (fill solid) 3233 | (tstamp 0e6afb47-ca3c-4f55-8a24-324dd8b701f6) 3234 | ) 3235 | (fp_poly (pts (xy -1 5) 3236 | (xy 0 5) 3237 | (xy 0 6) 3238 | (xy -1 6) 3239 | ) 3240 | (layer F.Mask) 3241 | (width 0) 3242 | (fill solid) 3243 | (tstamp 211a9dc4-e961-4716-a718-d9de1f9be785) 3244 | ) 3245 | (fp_poly (pts (xy 0 5) 3246 | (xy 1 5) 3247 | (xy 1 6) 3248 | (xy 0 6) 3249 | ) 3250 | (layer F.Cu) 3251 | (width 0) 3252 | (fill solid) 3253 | (tstamp 1c7df2fb-4392-4066-bd51-aae1b1a636dc) 3254 | ) 3255 | (fp_poly (pts (xy 0 5) 3256 | (xy 1 5) 3257 | (xy 1 6) 3258 | (xy 0 6) 3259 | ) 3260 | (layer F.Mask) 3261 | (width 0) 3262 | (fill solid) 3263 | (tstamp 6511312a-a431-4581-ae6c-877fd7fdbf9c) 3264 | ) 3265 | (fp_poly (pts (xy 1 5) 3266 | (xy 2 5) 3267 | (xy 2 6) 3268 | (xy 1 6) 3269 | ) 3270 | (layer F.Cu) 3271 | (width 0) 3272 | (fill solid) 3273 | (tstamp 15565f9c-be20-44f2-a26d-acd6ed0cd725) 3274 | ) 3275 | (fp_poly (pts (xy 1 5) 3276 | (xy 2 5) 3277 | (xy 2 6) 3278 | (xy 1 6) 3279 | ) 3280 | (layer F.Mask) 3281 | (width 0) 3282 | (fill solid) 3283 | (tstamp 9ce203d3-089c-4d23-ba64-e6857217c9e0) 3284 | ) 3285 | (fp_poly (pts (xy 2.1 5) 3286 | (xy 3 5) 3287 | (xy 3 6) 3288 | (xy 2.1 6) 3289 | ) 3290 | (layer F.SilkS) 3291 | (width 0) 3292 | (fill solid) 3293 | (tstamp 40bfe236-84da-4564-b95a-c1ecfb11aa24) 3294 | ) 3295 | (fp_poly (pts (xy 3 5) 3296 | (xy 3.9 5) 3297 | (xy 3.9 6) 3298 | (xy 3 6) 3299 | ) 3300 | (layer F.SilkS) 3301 | (width 0) 3302 | (fill solid) 3303 | (tstamp 1237a2c4-3cbe-4db4-94fd-bdd6c4c9668a) 3304 | ) 3305 | (fp_poly (pts (xy 4 5) 3306 | (xy 5 5) 3307 | (xy 5 6) 3308 | (xy 4 6) 3309 | ) 3310 | (layer F.Cu) 3311 | (width 0) 3312 | (fill solid) 3313 | (tstamp 665fbdb8-4a32-4ecb-a08d-c6c40f96f6e0) 3314 | ) 3315 | (fp_poly (pts (xy 4 5) 3316 | (xy 5 5) 3317 | (xy 5 6) 3318 | (xy 4 6) 3319 | ) 3320 | (layer F.Mask) 3321 | (width 0) 3322 | (fill solid) 3323 | (tstamp 63e1d1e5-fada-4fb4-a8f7-d74eaf473c96) 3324 | ) 3325 | (fp_poly (pts (xy 5 5) 3326 | (xy 6 5) 3327 | (xy 6 6) 3328 | (xy 5 6) 3329 | ) 3330 | (layer F.Cu) 3331 | (width 0) 3332 | (fill solid) 3333 | (tstamp 3d13530f-4762-40ba-8938-30a5fbf0aaac) 3334 | ) 3335 | (fp_poly (pts (xy 5 5) 3336 | (xy 6 5) 3337 | (xy 6 6) 3338 | (xy 5 6) 3339 | ) 3340 | (layer F.Mask) 3341 | (width 0) 3342 | (fill solid) 3343 | (tstamp 21c59196-b244-4e9b-b49b-d2a16f157e3d) 3344 | ) 3345 | (fp_poly (pts (xy 6.1 5) 3346 | (xy 7 5) 3347 | (xy 7 5.9) 3348 | (xy 6.9 5.9) 3349 | (xy 6.9 6) 3350 | (xy 6.1 6) 3351 | ) 3352 | (layer F.SilkS) 3353 | (width 0) 3354 | (fill solid) 3355 | (tstamp c328ddc6-337a-448e-bdea-c21b17611cd9) 3356 | ) 3357 | (fp_poly (pts (xy 7 5) 3358 | (xy 7.9 5) 3359 | (xy 7.9 5.9) 3360 | (xy 7 5.9) 3361 | ) 3362 | (layer F.SilkS) 3363 | (width 0) 3364 | (fill solid) 3365 | (tstamp c32dbd12-cd81-496c-b901-9b1870b4bcc5) 3366 | ) 3367 | (fp_poly (pts (xy 8 5) 3368 | (xy 9 5) 3369 | (xy 9 6) 3370 | (xy 8 6) 3371 | ) 3372 | (layer F.Cu) 3373 | (width 0) 3374 | (fill solid) 3375 | (tstamp b31abe66-44a7-432d-942c-a6053a53610d) 3376 | ) 3377 | (fp_poly (pts (xy 8 5) 3378 | (xy 9 5) 3379 | (xy 9 6) 3380 | (xy 8 6) 3381 | ) 3382 | (layer F.Mask) 3383 | (width 0) 3384 | (fill solid) 3385 | (tstamp 79883ce3-c604-430b-9015-33d667fc6003) 3386 | ) 3387 | (fp_poly (pts (xy -9 6) 3388 | (xy -8 6) 3389 | (xy -8 7) 3390 | (xy -9 7) 3391 | ) 3392 | (layer F.Cu) 3393 | (width 0) 3394 | (fill solid) 3395 | (tstamp 7b2d55dc-0dc9-40b8-bf33-34aba0d28ec8) 3396 | ) 3397 | (fp_poly (pts (xy -9 6) 3398 | (xy -8 6) 3399 | (xy -8 7) 3400 | (xy -9 7) 3401 | ) 3402 | (layer F.Mask) 3403 | (width 0) 3404 | (fill solid) 3405 | (tstamp d16aa4d1-d77a-44e1-b443-720c96c54fe3) 3406 | ) 3407 | (fp_poly (pts (xy -7.9 6) 3408 | (xy -7.1 6) 3409 | (xy -7.1 6.9) 3410 | (xy -7.9 6.9) 3411 | ) 3412 | (layer F.SilkS) 3413 | (width 0) 3414 | (fill solid) 3415 | (tstamp 169da233-a68d-4d3b-8938-6dd975b2ea23) 3416 | ) 3417 | (fp_poly (pts (xy -7 6) 3418 | (xy -6 6) 3419 | (xy -6 7) 3420 | (xy -7 7) 3421 | ) 3422 | (layer F.Cu) 3423 | (width 0) 3424 | (fill solid) 3425 | (tstamp cbf1645b-82a5-4def-804b-1d88f30308a3) 3426 | ) 3427 | (fp_poly (pts (xy -7 6) 3428 | (xy -6 6) 3429 | (xy -6 7) 3430 | (xy -7 7) 3431 | ) 3432 | (layer F.Mask) 3433 | (width 0) 3434 | (fill solid) 3435 | (tstamp d8c83fe8-0a9b-4b69-89af-da3d1bc39141) 3436 | ) 3437 | (fp_poly (pts (xy -5 6) 3438 | (xy -4 6) 3439 | (xy -4 7) 3440 | (xy -5 7) 3441 | ) 3442 | (layer F.Cu) 3443 | (width 0) 3444 | (fill solid) 3445 | (tstamp 9d76b02b-e1c2-410d-823c-bde7eb8a7e18) 3446 | ) 3447 | (fp_poly (pts (xy -5 6) 3448 | (xy -4 6) 3449 | (xy -4 7) 3450 | (xy -5 7) 3451 | ) 3452 | (layer F.Mask) 3453 | (width 0) 3454 | (fill solid) 3455 | (tstamp 6e87b6ac-061a-40d6-a539-294056ba5c6e) 3456 | ) 3457 | (fp_poly (pts (xy -3.9 6) 3458 | (xy -3 6) 3459 | (xy -3 6.9) 3460 | (xy -3.1 6.9) 3461 | (xy -3.1 7) 3462 | (xy -3.9 7) 3463 | ) 3464 | (layer F.SilkS) 3465 | (width 0) 3466 | (fill solid) 3467 | (tstamp bfeb1b17-b8bd-4a6a-b42d-6409c34f4280) 3468 | ) 3469 | (fp_poly (pts (xy -3 6) 3470 | (xy -2.1 6) 3471 | (xy -2.1 6.9) 3472 | (xy -3 6.9) 3473 | ) 3474 | (layer F.SilkS) 3475 | (width 0) 3476 | (fill solid) 3477 | (tstamp 483b8062-7c6a-40a1-ad3a-ef1466de959a) 3478 | ) 3479 | (fp_poly (pts (xy -2 6) 3480 | (xy -1 6) 3481 | (xy -1 7) 3482 | (xy -2 7) 3483 | ) 3484 | (layer F.Cu) 3485 | (width 0) 3486 | (fill solid) 3487 | (tstamp 42aa919b-b3a4-46d6-83cc-fc11fed1d34b) 3488 | ) 3489 | (fp_poly (pts (xy -2 6) 3490 | (xy -1 6) 3491 | (xy -1 7) 3492 | (xy -2 7) 3493 | ) 3494 | (layer F.Mask) 3495 | (width 0) 3496 | (fill solid) 3497 | (tstamp b773bd6b-1176-4df6-a61f-21bea972da53) 3498 | ) 3499 | (fp_poly (pts (xy 1 6) 3500 | (xy 2 6) 3501 | (xy 2 7) 3502 | (xy 1 7) 3503 | ) 3504 | (layer F.Cu) 3505 | (width 0) 3506 | (fill solid) 3507 | (tstamp cd8c140d-9e2c-4be7-90b6-679af0e2ab3e) 3508 | ) 3509 | (fp_poly (pts (xy 1 6) 3510 | (xy 2 6) 3511 | (xy 2 7) 3512 | (xy 1 7) 3513 | ) 3514 | (layer F.Mask) 3515 | (width 0) 3516 | (fill solid) 3517 | (tstamp b8717c28-976f-4003-8d42-8f71d4ef51ba) 3518 | ) 3519 | (fp_poly (pts (xy 2.1 6) 3520 | (xy 3 6) 3521 | (xy 3 6.9) 3522 | (xy 2.9 6.9) 3523 | (xy 2.9 7) 3524 | (xy 2.1 7) 3525 | ) 3526 | (layer F.SilkS) 3527 | (width 0) 3528 | (fill solid) 3529 | (tstamp 9d75296e-caeb-4095-9ea8-e25fe3cd1fce) 3530 | ) 3531 | (fp_poly (pts (xy 3 6) 3532 | (xy 3.9 6) 3533 | (xy 3.9 6.9) 3534 | (xy 3 6.9) 3535 | ) 3536 | (layer F.SilkS) 3537 | (width 0) 3538 | (fill solid) 3539 | (tstamp 9c358ce4-84de-4e74-9111-73a1eb169efd) 3540 | ) 3541 | (fp_poly (pts (xy 4 6) 3542 | (xy 5 6) 3543 | (xy 5 7) 3544 | (xy 4 7) 3545 | ) 3546 | (layer F.Cu) 3547 | (width 0) 3548 | (fill solid) 3549 | (tstamp c493c903-54c9-41c4-9d88-4310ad02eee7) 3550 | ) 3551 | (fp_poly (pts (xy 4 6) 3552 | (xy 5 6) 3553 | (xy 5 7) 3554 | (xy 4 7) 3555 | ) 3556 | (layer F.Mask) 3557 | (width 0) 3558 | (fill solid) 3559 | (tstamp c0d633a7-4630-4fe5-92ef-d95d2d90b5b1) 3560 | ) 3561 | (fp_poly (pts (xy 5 6) 3562 | (xy 6 6) 3563 | (xy 6 7) 3564 | (xy 5 7) 3565 | ) 3566 | (layer F.Cu) 3567 | (width 0) 3568 | (fill solid) 3569 | (tstamp ac248329-cd1e-4dd7-9354-355b4e9776ac) 3570 | ) 3571 | (fp_poly (pts (xy 5 6) 3572 | (xy 6 6) 3573 | (xy 6 7) 3574 | (xy 5 7) 3575 | ) 3576 | (layer F.Mask) 3577 | (width 0) 3578 | (fill solid) 3579 | (tstamp 507172cc-6952-47bb-9e6f-fa3d682e2bd0) 3580 | ) 3581 | (fp_poly (pts (xy 6.1 6) 3582 | (xy 6.9 6) 3583 | (xy 6.9 6.9) 3584 | (xy 6.1 6.9) 3585 | ) 3586 | (layer F.SilkS) 3587 | (width 0) 3588 | (fill solid) 3589 | (tstamp e8f8d7ed-094a-4e3d-9fcf-66334a70deef) 3590 | ) 3591 | (fp_poly (pts (xy 7 6) 3592 | (xy 8 6) 3593 | (xy 8 7) 3594 | (xy 7 7) 3595 | ) 3596 | (layer F.Cu) 3597 | (width 0) 3598 | (fill solid) 3599 | (tstamp 4620378d-19e8-4290-a699-388c19dd538f) 3600 | ) 3601 | (fp_poly (pts (xy 7 6) 3602 | (xy 8 6) 3603 | (xy 8 7) 3604 | (xy 7 7) 3605 | ) 3606 | (layer F.Mask) 3607 | (width 0) 3608 | (fill solid) 3609 | (tstamp 0db77a16-42d6-4f96-ac0d-a67b5910f96c) 3610 | ) 3611 | (fp_poly (pts (xy -8 7) 3612 | (xy -7 7) 3613 | (xy -7 8) 3614 | (xy -8 8) 3615 | ) 3616 | (layer F.Cu) 3617 | (width 0) 3618 | (fill solid) 3619 | (tstamp 3724381b-dc79-43b3-a3ab-738e7c59fd9e) 3620 | ) 3621 | (fp_poly (pts (xy -8 7) 3622 | (xy -7 7) 3623 | (xy -7 8) 3624 | (xy -8 8) 3625 | ) 3626 | (layer F.Mask) 3627 | (width 0) 3628 | (fill solid) 3629 | (tstamp 01d1017e-bc09-46dd-bde5-66dd3e3a19e0) 3630 | ) 3631 | (fp_poly (pts (xy -5 7) 3632 | (xy -4 7) 3633 | (xy -4 8) 3634 | (xy -5 8) 3635 | ) 3636 | (layer F.Cu) 3637 | (width 0) 3638 | (fill solid) 3639 | (tstamp ad41f4a5-a5f2-44a5-91a8-ad6d7f854550) 3640 | ) 3641 | (fp_poly (pts (xy -5 7) 3642 | (xy -4 7) 3643 | (xy -4 8) 3644 | (xy -5 8) 3645 | ) 3646 | (layer F.Mask) 3647 | (width 0) 3648 | (fill solid) 3649 | (tstamp 964d603d-fd41-4990-8129-afc5c15c4cd8) 3650 | ) 3651 | (fp_poly (pts (xy -3.9 7) 3652 | (xy -3.1 7) 3653 | (xy -3.1 7.9) 3654 | (xy -3.9 7.9) 3655 | ) 3656 | (layer F.SilkS) 3657 | (width 0) 3658 | (fill solid) 3659 | (tstamp 9547bb71-b67d-442e-86c5-fe6af31f9147) 3660 | ) 3661 | (fp_poly (pts (xy -3 7) 3662 | (xy -2 7) 3663 | (xy -2 8) 3664 | (xy -3 8) 3665 | ) 3666 | (layer F.Cu) 3667 | (width 0) 3668 | (fill solid) 3669 | (tstamp 16eacf6c-9940-4cc4-a3ee-03c5c4424ea0) 3670 | ) 3671 | (fp_poly (pts (xy -3 7) 3672 | (xy -2 7) 3673 | (xy -2 8) 3674 | (xy -3 8) 3675 | ) 3676 | (layer F.Mask) 3677 | (width 0) 3678 | (fill solid) 3679 | (tstamp 46b3de36-db24-43bc-a913-385642a13fe7) 3680 | ) 3681 | (fp_poly (pts (xy 1 7) 3682 | (xy 2 7) 3683 | (xy 2 8) 3684 | (xy 1 8) 3685 | ) 3686 | (layer F.Cu) 3687 | (width 0) 3688 | (fill solid) 3689 | (tstamp eb37e593-40a5-4e7d-be21-8d26384c0279) 3690 | ) 3691 | (fp_poly (pts (xy 1 7) 3692 | (xy 2 7) 3693 | (xy 2 8) 3694 | (xy 1 8) 3695 | ) 3696 | (layer F.Mask) 3697 | (width 0) 3698 | (fill solid) 3699 | (tstamp 4a7e98d2-441a-4510-a466-9841cbb03c2d) 3700 | ) 3701 | (fp_poly (pts (xy 2.1 7) 3702 | (xy 2.9 7) 3703 | (xy 2.9 7.9) 3704 | (xy 2.1 7.9) 3705 | ) 3706 | (layer F.SilkS) 3707 | (width 0) 3708 | (fill solid) 3709 | (tstamp 9559c8cf-4785-444c-89a7-014844d12ab1) 3710 | ) 3711 | (fp_poly (pts (xy 3 7) 3712 | (xy 4 7) 3713 | (xy 4 8) 3714 | (xy 3 8) 3715 | ) 3716 | (layer F.Cu) 3717 | (width 0) 3718 | (fill solid) 3719 | (tstamp 11c33f69-f2e4-44d3-add2-efc1b1c5c9e3) 3720 | ) 3721 | (fp_poly (pts (xy 3 7) 3722 | (xy 4 7) 3723 | (xy 4 8) 3724 | (xy 3 8) 3725 | ) 3726 | (layer F.Mask) 3727 | (width 0) 3728 | (fill solid) 3729 | (tstamp 79009a07-89f9-4ed7-b551-b1b279012709) 3730 | ) 3731 | (fp_poly (pts (xy 6 7) 3732 | (xy 7 7) 3733 | (xy 7 8) 3734 | (xy 6 8) 3735 | ) 3736 | (layer F.Cu) 3737 | (width 0) 3738 | (fill solid) 3739 | (tstamp be81b306-855d-47d3-9c50-d925fac8e714) 3740 | ) 3741 | (fp_poly (pts (xy 6 7) 3742 | (xy 7 7) 3743 | (xy 7 8) 3744 | (xy 6 8) 3745 | ) 3746 | (layer F.Mask) 3747 | (width 0) 3748 | (fill solid) 3749 | (tstamp c3515345-467b-402c-92ed-16ae7dd28723) 3750 | ) 3751 | (fp_poly (pts (xy -4 8) 3752 | (xy -3 8) 3753 | (xy -3 9) 3754 | (xy -4 9) 3755 | ) 3756 | (layer F.Cu) 3757 | (width 0) 3758 | (fill solid) 3759 | (tstamp c9f0b1fb-af77-4d73-a138-5be55396f885) 3760 | ) 3761 | (fp_poly (pts (xy -4 8) 3762 | (xy -3 8) 3763 | (xy -3 9) 3764 | (xy -4 9) 3765 | ) 3766 | (layer F.Mask) 3767 | (width 0) 3768 | (fill solid) 3769 | (tstamp 7b09ea2f-e0e3-44b8-aee6-d7ccf4959cf6) 3770 | ) 3771 | (fp_poly (pts (xy 2 8) 3772 | (xy 3 8) 3773 | (xy 3 9) 3774 | (xy 2 9) 3775 | ) 3776 | (layer F.Cu) 3777 | (width 0) 3778 | (fill solid) 3779 | (tstamp acb4106b-648e-4ff9-b658-44d714f1393a) 3780 | ) 3781 | (fp_poly (pts (xy 2 8) 3782 | (xy 3 8) 3783 | (xy 3 9) 3784 | (xy 2 9) 3785 | ) 3786 | (layer F.Mask) 3787 | (width 0) 3788 | (fill solid) 3789 | (tstamp 272d9066-696c-4423-8852-4f9c1d0be1d6) 3790 | ) 3791 | ) 3792 | 3793 | --------------------------------------------------------------------------------