diff --git a/docs/agent/current-state.md b/docs/agent/current-state.md index 6d18600..8458369 100644 --- a/docs/agent/current-state.md +++ b/docs/agent/current-state.md @@ -8,9 +8,23 @@ Working memory, not an implementation timeline. Source is authoritative; begin w - README was refined from the user's already-thinned version, not restored from Git. New `docs/getting_started.md`, `docs/user_administration.md`, and `docs/firmware_update.md` provide operating procedures; `docs/web_administration.md` is now a user guide and its original contract is preserved under `docs/devel/`. Flash layout and PCB research moved into the developer archive; contextual test/hardware/provenance READMEs remain beside artifacts. - Documentation relocation adds no new device evidence and does not change historical acceptance limits. Firmware, generated assets, CAD and historical hash JSON are untouched. Hardware scripts have only relocated-note reference/protection adjustments; Python syntax was checked without executing generators. Documentation links/anchors and `git diff --check` were checked; no firmware build, upload, erase, or hardware test was performed. +## PCB presentation labels — removed and exports refreshed + +- Removed PCB title suffix `draft`, revision suffix `DRAFT`, front-silkscreen `DRAFT - NOT FOR FAB`, and title-comment prefix `NOT FOR FABRICATION -` (also in the PDF exporter). Generator no longer emits them. Specific technical cautions, hidden metadata, footprint identifiers, filenames and schematic remain unchanged; this is not fabrication approval. +- `remove_draft_markers.py` guards editor locks/concurrent edits, saves with `SaveBoard(..., True)`, and audits the exact parsed-content delta and unchanged project settings. Two separate cleanup runs passed; same-process repeated board access hit a KiCad SWIG binding failure before any source overwrite. +- 1:1 placement PDF and SVG/PNG/3D previews regenerated and visually reviewed. U1 preservation audit permits only the exact label delta in addition to prior measured-U1/device-silk changes; original baseline retained. U1/silk regression, two footprint tests and fresh PCB checks pass: 565 segments, 22 vias, zero physical DRC/unrouted, expected U2 parity warning. Existing mechanical/electrical release gates and historical A0 settings-hash limitation remain; no firmware/device tests or fabrication outputs. + +## ESP32 mechanical measurements — board and review exports integrated + +- User supplied main PCB 56.07 × 28.09 mm excluding 6.89 mm antenna projection; antenna left/right insets 5.41/5.05 mm. Overall length 62.96 mm. Both USB shells 8.87 mm wide, outer-edge offsets 4.16 mm left / 3.66 mm right, mouth faces flush with main PCB bottom. +- Preserve 2.54 mm pitch / 25.40 mm row spacing. User accepted approximate 1.365 mm top/bottom pin-centre offset and same left offset; derived right margin 1.325 mm. Library HW678 F.Fab now has main PCB/antenna rectangles and USB mouth spans; no guessed USB depth, RF keepout, courtyard or heights. Footprint regression updated. +- Embedded U1 now has the four measured F.Fab shapes and two measurement-limit annotations. `update_u1_graphics.py` adds only owned graphics; pads/nets/existing UUIDs/placement/routing/project settings and existing footprint fields remain unchanged. Old hidden status/description fields are historical, not current measurement evidence. `add_device_silkscreen.py` replaces header guides with carrier/mask-clipped measured outlines and 0.30 mm width-only USB mouth markers. PDF now verifies saved U1 instead of overlaying library geometry; PDF/SVG/PNG/3D exports refreshed. +- New `validate_u1_update.py` audits exact pre-update preservation, library geometry, silk idempotence/clipping/mouth positions and stale-geometry rejection; snapshot/report retained in hardware/PCB/validation. Fresh PCB, independent routing, footprint and DB9 CAD checks pass: 565 segments, 22 vias, no physical DRC/unrouted, one expected U2 parity warning. Historical A0 preservation script fails its old `serial-carrier.kicad_prl` hash gate; not weakened or rebaselined. New A1-specific preservation passes. +- At unchanged A1 placement USB faces sit 2.295 mm inside carrier bottom edge; plug clearance and physical 1:1 fit remain pending. Antenna geometry is not RF guidance; no keepout, USB depth, courtyard or height was invented. No firmware/assets changes, rerouting, hardware tests or fabrication outputs. + ## Carrier PCB A1 — revised placement and CAD integration -- `hardware/PCB/serial-carrier.kicad_pcb`: routed 82 × 80 mm two-layer draft; 36 × 19 mm top-left notch, ESP32 shifted down for bottom USB access, RS-232 bare PCB front flush with carrier top. Exact ESP32 body/USB/antenna envelope remains pending user measurements; RF reserve is provisional. +- `hardware/PCB/serial-carrier.kicad_pcb`: routed 82 × 80 mm two-layer draft; 36 × 19 mm top-left notch, ESP32 shifted down for bottom USB access, RS-232 bare PCB front flush with carrier top. Measured ESP32 planar body/antenna and USB mouths are integrated; full connector/assembly envelopes and RF qualification remain pending. - Adafruit STEP metal geometry extracted and validated; provenance/dimensions in `docs/devel/hardware/PCB/db9-mechanical-notes.md`. Flange front sits 1.930 mm inside carrier edge, screw-lock mouths 2.870 mm outside, shell nose 3.870 mm outside. Case wall plane is not yet fixed. Seven board-local Dwgs.User projections added; rerun `add_db9_envelope.py` and `add_device_silkscreen.py` after moving modules. - Placement PDF and SVG/PNG/3D previews refreshed. Fresh PCB, independent routing, preservation and CAD validators pass: 38/38 connections, 565 segments, 22 vias, 0 physical DRC violations/unrouted, one expected provisional U2 footprint parity warning. Not fabrication-ready; no hardware qualification or Gerbers. Existing project/schematic/library work preserved; board saves must use `SaveBoard(..., True)` and require checking editor lock. Prior A0 preserved in validation backup. diff --git a/docs/devel/hardware/PCB/footprint-notes.md b/docs/devel/hardware/PCB/footprint-notes.md index 9a52417..1e09426 100644 --- a/docs/devel/hardware/PCB/footprint-notes.md +++ b/docs/devel/hardware/PCB/footprint-notes.md @@ -78,10 +78,38 @@ centre (pad 1), **not a PCB corner**. - Numbering follows the project's explicit convention, not a generic dual-row connector's alternating or counterclockwise numbering. Physical numbers do **not** establish GPIO, supply, or ground assignments. -- Only pads and annotation text are present. **No PCB outline, antenna keepout, - courtyard, USB envelope, mounting holes, or 3D model is guessed.** Text positions - are annotations, not dimensional evidence. Outline registration, antenna extent, - connector offsets/overhang, and assembly height remain unknown. +- User-measured planar geometry is now drawn on `F.Fab`, relative to pad 1: + + | Feature | Start (X, Y), mm | End (X, Y), mm | + |---|---|---| + | Main PCB rectangle | (-1.365, -1.365) | (26.725, 54.705) | + | Projecting antenna rectangle | (4.045, -8.255) | (21.675, -1.365) | + | Left USB-C shell mouth span | (2.795, 54.705) | (11.665, 54.705) | + | Right USB-C shell mouth span | (14.195, 54.705) | (23.065, 54.705) | + + Main PCB is 28.09 mm wide × 56.07 mm long; antenna projection adds 6.89 mm, + giving 62.96 mm overall. Antenna left/right insets are 5.41/5.05 mm, giving + 17.63 mm width and a centre 0.18 mm right of the PCB centre. Both shell widths + are 8.87 mm, with outer-edge offsets 4.16 mm left / 3.66 mm right; mouths are + flush with the bottom PCB edge. Lines indicate mouth spans, not shell depth. +- User accepted approximate 1.365 mm top/bottom pin-centre offsets and supplied + approximately the same left offset. Nominal pin pitch/row spacing are retained; + resulting right margin is 1.325 mm. This 0.04 mm asymmetry follows the selected + modelling datum, not a precision measurement of header asymmetry. +- **No RF keepout, courtyard, full USB envelope, mounting holes or 3D model is + inferred.** Shell depth/height, component/underside heights and plug clearances + remain unknown. The antenna rectangle is physical geometry, not RF guidance. +- Routed embedded U1 now contains the four measured F.Fab shapes and the two + antenna/USB measurement-limit annotations. Generic library captions are omitted + to avoid overlapping existing board labels. Existing footprint fields (including + the historical hidden status/description), reference/value positions, pads, + nets and UUIDs are deliberately retained; this is not a full footprint replacement. + The library is authoritative for measured geometry, not those old status strings. +- Measured board-local silkscreen and PDF/SVG/PNG/3D previews are refreshed. + `update_u1_graphics.py` synchronizes only owned graphics, with deterministic new + UUIDs and lock/concurrent-change guards; `validate_u1_update.py` checks exact + preservation against the pre-update A1 snapshot. A physical 1:1 fit check is + still pending; USB mouths sit 2.295 mm inside the carrier bottom edge. ## Validation and release gates @@ -89,7 +117,9 @@ Validation performed with KiCad 10.0.6 `pcbnew.FootprintLoad`: both footprints parsed successfully. Assertions passed for pad counts, all numbered pad positions, pad shapes/types/sizes/drills, OLED NPTH positions and diameters, both OLED `F.Fab` rectangle bounds, and absence of courtyards, `Edge.Cuts`, and keepout zones. -HW678 was also checked to contain no graphical shapes. The local Python binding +The HW678 regression now checks the two measured rectangles and two USB mouth +spans, while retaining exact pad geometry checks and prohibiting guessed +courtyards, zones and 3D models. The local Python binding emitted three startup `PROPERTY_ENUM` assertions (also seen on a version-only import); these did not prevent loading or the checks from passing. diff --git a/docs/devel/hardware/PCB/pcb-draft-notes.md b/docs/devel/hardware/PCB/pcb-draft-notes.md index 300056d..8b3fd2a 100644 --- a/docs/devel/hardware/PCB/pcb-draft-notes.md +++ b/docs/devel/hardware/PCB/pcb-draft-notes.md @@ -7,6 +7,26 @@ Open **`../../../../hardware/PCB/serial-carrier.kicad_pcb`** in KiCad 10. The ro existing `../../../../hardware/PCB/serial-carrier.kicad_pro` / `../../../../hardware/PCB/serial-carrier.kicad_sch` project. **Not for fabrication.** No Gerbers, production drills or manufacturing archive were generated. +## Measurement update — embedded U1, silkscreen and exports + +The user has now supplied ESP32 main-PCB, antenna and USB mouth geometry; see +`footprint-notes.md` and the hardware README. The library HW678 footprint contains +these measured F.Fab bounds. Embedded U1 now has the same four shapes and two +measurement-limit annotations; generic library captions are omitted to avoid +colliding with existing board labels. Silkscreen, PDF and SVG/PNG/3D previews are +refreshed. Existing footprint fields, all existing non-generated UUIDs, pads/nets, +placement, routing, edges, RF reserve and project settings are unchanged. Old +hidden U1 status/description fields are retained historical metadata, not evidence +that planar measurements are missing. RF requirements, full USB envelopes and +assembly heights remain pending; the antenna rectangle is not an RF keepout. + +At unchanged A1 U1 placement, the measured main PCB occupies carrier-local +X=6.635…34.725, Y=21.635…77.705 mm; the projecting antenna occupies +X=12.045…29.675, Y=14.745…21.635 mm. USB mouths are at Y=77.705 mm, +**2.295 mm inside the carrier bottom edge**, so flush-with-module USB does not +mean flush-with-carrier access. Review mating-plug clearance before accepting +placement; no relocation, rerouting or RF sign-off is implied by this update. + ## Size and placement - **Carrier bounding dimensions: 82 × 80 mm**, within the requested 100 × 100 mm. @@ -14,8 +34,8 @@ No Gerbers, production drills or manufacturing archive were generated. - Proposed **1.6 mm** carrier thickness; fabrication stackup/process not selected. - Stepped outline: a **36 × 19 mm top-left antenna cutaway** fits within a simple rectangular/square case. The lower edge is now straight, with ESP32 USB toward - the bottom and RS-232 toward the top. U1 moved down by 19 mm; its exact USB/body - registration remains provisional pending the user's measured ESP32 geometry. + the bottom and RS-232 toward the top. A1 moved U1 down by 19 mm; this measurement + integration retains that placement and uses the user-accepted approximate header datum. - Module and mating-plug overhangs are not included in the carrier dimensions. The final complete assembly/enclosure envelope still needs measurement. @@ -80,8 +100,8 @@ allocation, **not a measured antenna envelope or a manufacturer RF keepout**. The module itself may span the rule area; footprint placement is not forbidden. No carrier copper enters the reserve, but copper runs close to its boundary. -U1's exact PCB/antenna/USB offsets are still unmeasured. The intended antenna -overhang and USB access must be checked with the actual board and a printed +U1's planar PCB/antenna/USB-mouth offsets are now recorded. Antenna clearance +and USB access must still be checked with the actual board and a printed placement template. Move U1, change the edge or enlarge the reserve if required. Missing RF clearance cannot be signed off from the current footprint alone. @@ -147,11 +167,13 @@ RS-232's visible rounded corners retain true arcs. Small gaps clear pad/mask openings, vias and adjacent resistor markings; the original full F.Fab geometry remains unchanged. -U1 instead has **header-row guides**, labelled `HEADER GUIDES`: guide edges are -1.20 mm outside the outer pin centres. These are graphic alignment aids, **not -claimed socket-body dimensions or an inferred ESP32 PCB outline**. The actual -U1 body/antenna/USB outline still requires measured offsets. Existing button and -resistor silkscreen remains unchanged. +U1 now has **measured body/antenna outlines**, replacing the header-row guides +and `HEADER GUIDES` label. Silkscreen is clipped inside the stepped carrier with +0.22 mm additional edge/mask clearance; the off-carrier antenna projection remains +visible only on F.Fab. Two **0.30 mm strokes** mark the 8.87 mm USB mouth spans, +replacing coincident 0.12 mm body-edge strokes. Wider strokes receive correspondingly +wider clearance. No USB depth or RF keepout is inferred. Existing button/resistor +silkscreen remains unchanged. These are board-local drawings, not edits to the footprint libraries. If the module placement or routing changes, close PCB Editor and refresh them with: @@ -160,7 +182,8 @@ module placement or routing changes, close PCB Editor and refresh them with: /usr/bin/python3 -B hardware/PCB/add_device_silkscreen.py ``` -The script requires pcbnew and Shapely, replaces only its own generated graphics, +The script first verifies the saved U1 measured graphics against the library. +It requires pcbnew and Shapely, replaces only its own generated graphics, and refuses an open PCB or concurrent board change. It leaves project settings, copper, pads and source F.Fab outlines unchanged. Run it **after** placement or routing regeneration; moving a footprint does not move these board-local drawings. @@ -174,6 +197,21 @@ warning. PDF and both previews have been refreshed. ## Review outputs +PCB presentation labels have been removed: title suffix `draft`, revision suffix +`DRAFT`, front-silkscreen `DRAFT - NOT FOR FAB`, and the title-comment prefix +`NOT FOR FABRICATION -` (including the PDF exporter). The generator no longer +emits these labels. Specific technical cautions, dimensions, geometry, hidden +metadata and footprint identifiers remain; artifact filenames are unchanged. +This is a presentation change, **not fabrication approval**. The schematic and +its exports are outside this PCB-only cleanup. + +`remove_draft_markers.py` performs the guarded, idempotent cleanup and audits +that no other parsed board content or project settings change. The U1 regression +now permits exactly these label edits against its unchanged historical baseline, +without relaxing geometry/pad/net/routing checks. Fresh PCB DRC, U1/silkscreen +regressions and both footprint tests pass; the expected U2 parity warning remains. +PDF/SVG/PNG/3D outputs were regenerated and visually reviewed after cleanup. + - `../../../../hardware/PCB/validation/pcb-draft.svg` / `../../../../hardware/PCB/validation/pcb-draft.png`: combined copper/outline/fab review. - `../../../../hardware/PCB/validation/pcb-draft-3d.png`: KiCad render of the carrier and available standard component models. **ESP32, OLED and RS-232 assembled module models are absent**; @@ -181,7 +219,35 @@ warning. PDF and both previews have been refreshed. - `../../../../hardware/PCB/pcb-placement-draft.pdf`: **1:1** front placement/pad/outline drawing. Print at 100%, disable fit-to-page, and confirm the outer width is 82 mm before use. It includes the known module outlines and nominal STEP-derived DE-9 metal - bounding projections; no guessed U1 body or case-wall geometry. + bounding projections and measured U1 planar geometry; no guessed USB depth, + RF keepout or case-wall geometry. + +Refresh the embedded measurement graphics and PDF without replacing the footprint: + +```sh +/usr/bin/python3 -B hardware/PCB/update_u1_graphics.py +/usr/bin/python3 -B hardware/PCB/add_device_silkscreen.py +/usr/bin/python3 -B hardware/PCB/export_placement_pdf.py +``` + +Both board-writing helpers refuse PCB Editor locks and concurrent board changes, +use `SaveBoard(..., True)`, and check unchanged project settings. The PDF exporter +verifies embedded geometry instead of overlaying the library; only review captions +change on its temporary plotting board. Print at 100%, not fit-to-page. + +Preview refresh commands (repository root, KiCad and Inkscape installed): + +```sh +kicad-cli pcb export svg --mode-single --layers F.Cu,B.Cu,F.SilkS,F.Fab,Dwgs.User,Edge.Cuts --sketch-pads-on-fab-layers --page-size-mode 2 --output hardware/PCB/validation/pcb-draft.svg hardware/PCB/serial-carrier.kicad_pcb +inkscape hardware/PCB/validation/pcb-draft.svg --export-type=png --export-width=1800 --export-filename=hardware/PCB/validation/pcb-draft.png +kicad-cli pcb render --width 1600 --height 1200 --side top --quality high --output hardware/PCB/validation/pcb-draft-3d.png hardware/PCB/serial-carrier.kicad_pcb +``` + +KiCad's SVG trailing whitespace was normalized after export (`git diff --check` +passes); the rendered geometry is unchanged. PDF and previews were visually reviewed. + +The board-area SVG crop omits outside-board review captions/parts of the DE-9 +projection; use the full-page PDF for the complete placement drawing. ## Validation and limits @@ -190,6 +256,9 @@ Run from the repository root with the system Python containing KiCad bindings: ```sh /usr/bin/python3 -B hardware/PCB/validate_pcb_draft.py /usr/bin/python3 -B hardware/PCB/validation/pcb-routing-check.py +/usr/bin/python3 -B hardware/PCB/validate_footprints.py +/usr/bin/python3 -B hardware/PCB/validate_u1_update.py +/usr/bin/python3 -B hardware/PCB/reference/db9-cad/validate.py ``` The first script exports a **fresh saved-schematic netlist** and checks the actual @@ -204,7 +273,25 @@ placement/net/UUID preservation against the initial unrouted snapshot. It needs locally installed NumPy and Shapely in addition to pcbnew. It is not a substitute for current-schematic net validation and is specific to this initial layout. -Results with KiCad **10.0.6**: +Measurement-integration validation with KiCad **10.0.6**: + +- All five commands above pass. New `validate_u1_update.py` compares the complete + parsed board against `validation/pcb-before-u1-measured.kicad_pcb`, excluding + only owned silk and six new U1 graphics. Snapshot and project hashes are pinned; + full pad/net/UUID/placement/routing/edge/zone/settings preservation passes. +- Measured embedded/library geometry, silk regeneration idempotence, carrier/notch + clipping, two exact USB mouth markers and a stale-geometry negative control pass; + **91 generated silk items**. U1 refresh byte-idempotence also passed; an already + current U1 now returns without writing. Evidence: `hardware/PCB/validation/pcb-u1-update.json`. +- The historical A0 `pcb-routing-preservation.py` does **not** pass: it stops on + its historical `serial-carrier.kicad_prl` protected hash, already stale for this + working state. Its older exact-footprint contract also predates measured U1 + additions. Historical script/reports were not weakened or rebaselined; the new + A1 pre-update comparison is the preservation evidence for this change. +- PCB, project and schematic retain their existing content except the authorized + board graphics. No firmware/assets, reroute, upload, erase or hardware test. + +Current results: - **0 physical DRC errors/warnings; 0 unconnected items.** - All saved-schematic pad nets match the PCB; **1 expected U2 footprint parity warning**. diff --git a/hardware/PCB/Carrier.pretty/HW678_2x22_Provisional.kicad_mod b/hardware/PCB/Carrier.pretty/HW678_2x22_Provisional.kicad_mod index 4c89b25..496e3f9 100644 --- a/hardware/PCB/Carrier.pretty/HW678_2x22_Provisional.kicad_mod +++ b/hardware/PCB/Carrier.pretty/HW678_2x22_Provisional.kicad_mod @@ -2,13 +2,19 @@ (version 20260206) (generator "pcbnew") (layer "F.Cu") - (descr "HW-678, component/top view antenna up USB down; origin pad 1; left top-bottom 1..22, right top-bottom 23..44; only header centres verified; no GPIO mapping, outline, courtyard or antenna keepout; PROVISIONAL connector fit: 1.70 mm pads / 1.00 mm drills from installed KiCad PinHeader_1x04_P2.54mm_Vertical, awaiting selected actual pin/socket datasheet") + (descr "HW-678, component/top view antenna up USB down; origin pad 1; left top-bottom 1..22, right top-bottom 23..44; nominal header centres with user-measured main PCB/antenna bounds and USB shell mouth spans on F.Fab; approximate 1.365 mm top/left registration; no GPIO mapping, complete USB envelope, courtyard or RF keepout; PROVISIONAL connector fit: 1.70 mm pads / 1.00 mm drills from installed KiCad PinHeader_1x04_P2.54mm_Vertical, awaiting selected actual pin/socket datasheet") (tags "module provisional THT") (attr through_hole) (property "Reference" "REF**" (at 12.7 -3) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15)))) (property "Value" "HW678_2x22_Provisional" (at 12.7 57) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15)))) (fp_text user "PROVISIONAL CONNECTOR FIT" (at 12.7 25) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15)))) (fp_text user "ANTENNA UP / USB DOWN" (at 12.7 28) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15)))) + (fp_rect (start -1.365 -1.365) (end 26.725 54.705) (stroke (width 0.1) (type solid)) (fill none) (layer "F.Fab")) + (fp_rect (start 4.045 -8.255) (end 21.675 -1.365) (stroke (width 0.1) (type solid)) (fill none) (layer "F.Fab")) + (fp_line (start 2.795 54.705) (end 11.665 54.705) (stroke (width 0.3) (type solid)) (layer "F.Fab")) + (fp_line (start 14.195 54.705) (end 23.065 54.705) (stroke (width 0.3) (type solid)) (layer "F.Fab")) + (fp_text user "ANTENNA BOUNDS - NOT RF KEEPOUT" (at 12.7 -9.5) (layer "F.Fab") (effects (font (size 0.8 0.8) (thickness 0.12)))) + (fp_text user "USB SHELL MOUTHS ONLY" (at 12.7 59) (layer "F.Fab") (effects (font (size 0.8 0.8) (thickness 0.12)))) (pad "1" thru_hole rect (at 0.00 0.00) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (remove_unused_layers no)) (pad "2" thru_hole circle (at 0.00 2.54) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (remove_unused_layers no)) (pad "3" thru_hole circle (at 0.00 5.08) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (remove_unused_layers no)) diff --git a/hardware/PCB/README.md b/hardware/PCB/README.md index c945d1e..0174189 100644 --- a/hardware/PCB/README.md +++ b/hardware/PCB/README.md @@ -26,8 +26,11 @@ the carrier. All 3.3 V and ground connections are explicit named nets. | `validation/pcb-draft.png`, `validation/pcb-draft-3d.png` | Copper/fab preview and carrier-only 3D render | | `validate_pcb_draft.py` | Fresh schematic-to-PCB net checks, bounds/layers and DRC/parity report | | `generate_pcb_draft.py`, `route_pcb_draft.py` | Optional destructive-regeneration tools with explicit overwrite guards | -| `add_device_silkscreen.py` | Refresh board-local OLED/RS-232 outlines and ESP32 header guides after placement/routing; preserves copper and project settings | +| `add_device_silkscreen.py` | Refresh board-local OLED/RS-232 and measured ESP32 outlines/USB mouth markers after placement/routing; preserves copper and project settings | | [db9-mechanical-notes.md](../../docs/devel/hardware/PCB/db9-mechanical-notes.md), `reference/db9-cad/` | STEP-derived metal dimensions, originals, source licenses and repeatable extraction/validation | +| `update_u1_graphics.py`, `validate_u1_update.py` | Guarded measured-U1 graphics integration and exact pre-update preservation / geometry / silkscreen regressions | +| `export_placement_pdf.py` | 1:1 PDF from saved board geometry; refuses stale embedded U1 graphics | +| `remove_draft_markers.py` | Guarded presentation-label cleanup with exact-content preservation audit; does not qualify fabrication | | `add_db9_envelope.py` | Refresh nominal connector metal projections on Dwgs.User; not a case cutout or assembly clearance | | `Carrier.kicad_sym`, `sym-lib-table` | Project-local module, switch and resistor symbols | | `Carrier.pretty/`, `fp-lib-table` | OLED/ESP32/RS-232-reference provisional footprints; standard KiCad 10 switch/resistor/mounting-hole library references | @@ -217,9 +220,24 @@ The wiring guide warns that compatible ESP32 boards may have different layouts. rows fit a standard breadboard simultaneously without forcing. Use nominal 2.54 mm pitch (53.34 mm over 21 intervals) and 25.40 mm row spacing based on that fit check, not the raw caliper measurements. Verify with a 1:1 print before fabrication. -- ESP32 seller drawing states 28 mm width and annotates 63 mm length; its 20 mm - arrow is not header row spacing. Antenna extent and header-to-outline offsets - are not fully dimensioned. +- ESP32 actual user measurements supersede the seller's 28 × 63 mm drawing: + main PCB **56.07 × 28.09 mm**, excluding the antenna projection. Top/component + view, antenna up and USB down: antenna projects **6.89 mm** above the main PCB, + inset **5.41 mm left / 5.05 mm right**. Derived antenna width **17.63 mm**, + overall length **62.96 mm**, antenna centre **0.18 mm right** of PCB centre. +- Header end offsets were initially approximately 1.5 mm; user accepted **1.365 mm** + top/bottom to preserve the breadboard-confirmed 53.34 mm span. Left-edge-to-left-row + centre distance is also approximately **1.365 mm**. Preserve 25.40 mm row spacing: + the resulting right margin is **1.325 mm**, not an independently measured offset. + These modelling offsets are not a claim of micron-level measurement accuracy. +- Both USB-C metal shells are **8.87 mm wide**, with opening faces flush with the + main PCB bottom edge. Left shell's outside left edge is **4.16 mm** from the PCB + left edge; right shell's outside right edge is **3.66 mm** from the PCB right edge. + Shell depth/height and mating-plug clearance remain unmeasured. +- The library and routed board's embedded U1 now record these bounds on F.Fab; + USB mouths are width spans only, not complete connector outlines. Measured + board-local silkscreen, 1:1 placement PDF and SVG/PNG/3D previews are refreshed. See + `../../docs/devel/hardware/PCB/footprint-notes.md` for coordinates and limits. - OLED actual PCB outline measured by user: 26 × 26 mm, superseding the seller's 28.7 × 27.8 mm dimensions. Seller's 4.1 mm height remains unverified. - OLED front view, connector at top: GND, VCC, SCL, SDA from left to right, @@ -258,8 +276,9 @@ The wiring guide warns that compatible ESP32 boards may have different layouts. 1. OLED outline, mounting-hole placement, revised header position and display outline are user fit-verified. Select carrier header/socket pads and drills from the actual connector drawings. -2. Before final module outlines/courtyards, establish their registration to header - centres, connector overhang and display position from drawings or measurements. +2. ESP32 planar body/antenna bounds and USB mouth positions are now recorded in + the library and embedded board footprint. Verify a 1:1 fit; complete module heights, USB depth/height, mating-plug clearances and + assembly courtyards. Measured antenna bounds do not establish an RF keepout. 3. Verify power-path schematic/regulator capacity and OLED pull-up implementation. Photos alone do not establish those electrical properties. diff --git a/hardware/PCB/add_device_silkscreen.py b/hardware/PCB/add_device_silkscreen.py index ad8647e..727e714 100644 --- a/hardware/PCB/add_device_silkscreen.py +++ b/hardware/PCB/add_device_silkscreen.py @@ -10,6 +10,7 @@ import uuid import pcbnew as p from shapely.geometry import LineString, Point, box from shapely.ops import unary_union, polygonize +from update_u1_graphics import verify ROOT = Path(__file__).resolve().parent PCB = ROOT / "serial-carrier.kicad_pcb" @@ -38,6 +39,7 @@ def outline_lines(shape): def add_outlines(board): + verify(board) owned = {str(uuid.uuid5(NS, str(i))) for i in range(4096)} for drawing in list(board.GetDrawings()): if drawing.m_Uuid.AsString() in owned: @@ -82,8 +84,11 @@ def add_outlines(board): board.Add(shape) count+=1 - def line(a,b): - clipped=LineString([a,b]).intersection(silk_area).difference(blocked) + def line(a,b,width=WIDTH): + extra = max(0, (width-WIDTH)/2) + area = silk_area.buffer(-extra) if extra else silk_area + obstacles = blocked.buffer(extra) if extra else blocked + clipped=LineString([a,b]).intersection(area).difference(obstacles) pieces=list(clipped.geoms) if hasattr(clipped,"geoms") else [clipped] for piece in pieces: if piece.geom_type!="LineString" or piece.length < 0.25: @@ -91,7 +96,7 @@ def add_outlines(board): shape=p.PCB_SHAPE(board) shape.SetShape(p.SHAPE_T_SEGMENT) shape.SetStart(vec(piece.coords[0])); shape.SetEnd(vec(piece.coords[-1])) - shape.SetWidth(p.FromMM(WIDTH)) + shape.SetWidth(p.FromMM(width)) add(shape) for ref in ("DS1","U2"): @@ -137,22 +142,19 @@ def add_outlines(board): distance+=1.3 else: line(edge.coords[0],edge.coords[-1]) - # These are pad-row guides, not inferred socket/body or ESP32 PCB dimensions. - fp=footprints["U1"] - assert fp.GetOrientationDegrees()==0, "Review guide construction for rotated U1" - pads={pad.GetNumber():xy(pad.GetPosition()) for pad in fp.Pads()} - for first,last in (("1","22"),("23","44")): - x,ytop=pads[first]; _,ybottom=pads[last] - corners=[(x-1.2,ytop-1.2),(x+1.2,ytop-1.2),(x+1.2,ybottom+1.2),(x-1.2,ybottom+1.2)] - for a,b in zip(corners,corners[1:]+corners[:1]): - line(a,b) - label=p.PCB_TEXT(board) - label.SetText("HEADER GUIDES") - a,b=pads["1"],pads["23"] - label.SetPosition(vec(((a[0]+b[0])/2,a[1]+28))) - label.SetTextSize(p.VECTOR2I(p.FromMM(0.85),p.FromMM(0.85))) - label.SetTextThickness(p.FromMM(0.12)) - add(label) + # Union removes the shared body/antenna edge duplication. Mouth spans replace + # the coincident bottom-edge strokes, with their measured library line weight; + # this marks width only, without inventing connector depth or an RF keepout. + sources=[g for g in footprints["U1"].GraphicalItems() + if isinstance(g,p.PCB_SHAPE) and g.GetLayer()==p.F_Fab] + mouths=[g for g in sources if g.GetShape()==p.SHAPE_T_SEGMENT] + mouth_lines=unary_union([edge for g in mouths for edge in outline_lines(g)]) + perimeter=unary_union([edge for g in sources if g.GetShape()==p.SHAPE_T_RECT + for edge in outline_lines(g)]).difference(mouth_lines) + for edge in perimeter.geoms: + line(edge.coords[0],edge.coords[-1]) + for mouth in mouths: + line(xy(mouth.GetStart()),xy(mouth.GetEnd()),p.ToMM(mouth.GetWidth())) return count diff --git a/hardware/PCB/export_placement_pdf.py b/hardware/PCB/export_placement_pdf.py new file mode 100644 index 0000000..82294f4 --- /dev/null +++ b/hardware/PCB/export_placement_pdf.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +"""Export a 1:1 placement PDF with measured HW678 geometry, without editing CAD. + +Export the saved board's verified measured U1 graphics. Only review captions +change on a temporary plotting board; no library overlay hides stale CAD. +""" +from pathlib import Path +import hashlib +import subprocess +import tempfile + +import pcbnew as p +from update_u1_graphics import verify + +ROOT = Path(__file__).resolve().parent +PCB = ROOT / "serial-carrier.kicad_pcb" +PDF = ROOT / "pcb-placement-draft.pdf" + + +def export(): + original = PCB.read_bytes() + board = p.LoadBoard(str(PCB)) + verify(board) + for drawing in board.GetDrawings(): + if isinstance(drawing, p.PCB_TEXT): + if drawing.GetText() == "Nominal RS-232 metal verified; ESP32 USB / antenna / assembly clearance pending": + drawing.SetText("Measured ESP32 outline / USB mouths; RF / plug / assembly clearance pending") + board.GetTitleBlock().SetComment(0, "Measured planar outlines; verify RF / plug / assembly clearance") + with tempfile.TemporaryDirectory(prefix="carrier-placement-") as temporary: + draft = Path(temporary) / PCB.name + result = Path(temporary) / PDF.name + if not p.SaveBoard(str(draft), board, True): + raise RuntimeError("Cannot save temporary plotting board") + subprocess.run([ + "kicad-cli", "pcb", "export", "pdf", "--mode-single", + "--layers", "F.Fab,F.SilkS,Dwgs.User,Edge.Cuts", + "--sketch-pads-on-fab-layers", "--black-and-white", "--scale", "1", + "--output", str(result), str(draft), + ], check=True) + if PCB.read_bytes() != original: + raise RuntimeError("Source PCB changed during export; PDF not replaced") + PDF.write_bytes(result.read_bytes()) + print(f"Exported {PDF}; scale 1:1; source PCB unchanged") + print(f"Source PCB SHA256: {hashlib.sha256(original).hexdigest()}") + + +if __name__ == "__main__": + export() diff --git a/hardware/PCB/generate_pcb_draft.py b/hardware/PCB/generate_pcb_draft.py index beff4ab..7e9698f 100644 --- a/hardware/PCB/generate_pcb_draft.py +++ b/hardware/PCB/generate_pcb_draft.py @@ -114,9 +114,9 @@ def main(): settings.m_ViasMinSize=mm(0.7) # Proposed in-memory draft rules only; never overwrite the user's project settings. title=board.GetTitleBlock() - title.SetTitle("Serial Swiss Army Knife - 82x80 mm carrier draft") - title.SetRevision("A1 DRAFT") - title.SetComment(0,"NOT FOR FABRICATION - USB / antenna geometry pending; verify module pinout / assembly") + title.SetTitle("Serial Swiss Army Knife - 82x80 mm carrier") + title.SetRevision("A1") + title.SetComment(0,"USB / antenna geometry pending; verify module pinout / assembly") pad_nets={} for source_net in source.findall("nets/net"): net=p.NETINFO_ITEM(board,source_net.get("name")) @@ -194,7 +194,7 @@ def main(): text(board,"26mm OLED",56,52) for label,x in zip(("BACK","SELECT","NEXT"),(46.25,58.25,70.25)): text(board,label,x,75, size=0.9) - text(board,"DRAFT - NOT FOR FAB",56,78,size=0.9) + text(board,"82 x 80 mm / 2 copper layers",41,-5,p.Dwgs_User,1.5) text(board,"Nominal RS-232 metal verified; ESP32 USB / antenna / assembly clearance pending",41,-2.5,p.Dwgs_User,0.9) board.BuildConnectivity() diff --git a/hardware/PCB/pcb-placement-draft.pdf b/hardware/PCB/pcb-placement-draft.pdf index b4e7c1e..ccd826c 100644 Binary files a/hardware/PCB/pcb-placement-draft.pdf and b/hardware/PCB/pcb-placement-draft.pdf differ diff --git a/hardware/PCB/remove_draft_markers.py b/hardware/PCB/remove_draft_markers.py new file mode 100644 index 0000000..a52dfcb --- /dev/null +++ b/hardware/PCB/remove_draft_markers.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +"""Remove presentation-only PCB draft labels; retain all technical cautions.""" +from pathlib import Path +import tempfile +import pcbnew as p + +ROOT = Path(__file__).resolve().parent +PCB = ROOT / "serial-carrier.kicad_pcb" +TITLE = "Serial Swiss Army Knife - 82x80 mm carrier" +COMMENT = "USB / antenna geometry pending; verify module pinout / assembly" +SILK = "DRAFT - NOT FOR FAB" + + +def remove_labels(board): + title = board.GetTitleBlock() + assert title.GetTitle() in (TITLE, TITLE + " draft") + assert title.GetRevision() in ("A1", "A1 DRAFT") + assert title.GetComment(0) in (COMMENT, "NOT FOR FABRICATION - " + COMMENT) + title.SetTitle(TITLE) + title.SetRevision("A1") + title.SetComment(0, COMMENT) + for drawing in list(board.GetDrawings()): + if isinstance(drawing, p.PCB_TEXT) and drawing.GetText() == SILK: + assert drawing.GetLayer() == p.F_SilkS + board.Remove(drawing) + + +def expected_tree(tree): + """Exact permitted delta for preservation audits, independent of pcbnew edits.""" + import copy + result = copy.deepcopy(tree) + for item in list(result): + if not isinstance(item, list): + continue + if item[0] == "title_block": + for field in item[1:]: + replacements = { + ('title', '"' + TITLE + ' draft"'): '"' + TITLE + '"', + ('rev', '"A1 DRAFT"'): '"A1"', + ('comment', '"NOT FOR FABRICATION - ' + COMMENT + '"'): '"' + COMMENT + '"', + } + replacement = replacements.get((field[0], field[-1])) + if replacement is not None: + field[-1] = replacement + elif item[0] == "gr_text" and item[1] == '"' + SILK + '"': + assert ['layer', '"F.SilkS"'] in item + result.remove(item) + return result + + +def main(): + from validate_u1_update import parse, canonical + lock = ROOT / "~serial-carrier.kicad_pcb.lck" + if lock.exists(): + raise RuntimeError("Close PCB Editor before changing labels") + original = PCB.read_bytes() + settings = {path: path.read_bytes() for path in ROOT.glob("serial-carrier.kicad_pr*")} + expected = expected_tree(parse(PCB)) + board = p.LoadBoard(str(PCB)) + remove_labels(board) + with tempfile.TemporaryDirectory(prefix="carrier-labels-", dir=ROOT) as temporary: + result = Path(temporary) / PCB.name + assert p.SaveBoard(str(result), board, True) + assert canonical(parse(result)) == canonical(expected), "Change beyond exact label edits" + assert canonical(expected_tree(parse(result))) == canonical(expected), "Label cleanup not idempotent" + if lock.exists() or PCB.read_bytes() != original: + raise RuntimeError("PCB changed or reopened; refusing overwrite") + assert all(path.read_bytes() == data for path, data in settings.items()), "Project settings changed" + result.replace(PCB) + print("Removed draft presentation labels; exact preservation and idempotence passed.") + + +if __name__ == "__main__": + main() diff --git a/hardware/PCB/serial-carrier.kicad_pcb b/hardware/PCB/serial-carrier.kicad_pcb index dc0432c..96d7c85 100644 --- a/hardware/PCB/serial-carrier.kicad_pcb +++ b/hardware/PCB/serial-carrier.kicad_pcb @@ -8,9 +8,9 @@ ) (paper "A4") (title_block - (title "Serial Swiss Army Knife - 82x80 mm carrier draft") - (rev "A1 DRAFT") - (comment 1 "NOT FOR FABRICATION - USB / antenna geometry pending; verify module pinout / assembly") + (title "Serial Swiss Army Knife - 82x80 mm carrier") + (rev "A1") + (comment 1 "USB / antenna geometry pending; verify module pinout / assembly") ) (layers (0 "F.Cu" signal) @@ -562,6 +562,70 @@ (sheetfile "serial-carrier.kicad_sch") (attr through_hole) (duplicate_pad_numbers_are_jumpers no) + (fp_line + (start 2.795 54.705) + (end 11.665 54.705) + (stroke + (width 0.3) + (type solid) + ) + (layer "F.Fab") + (uuid "6434f4c9-cb7e-5b60-902d-bd13b5c57f13") + ) + (fp_line + (start 14.195 54.705) + (end 23.065 54.705) + (stroke + (width 0.3) + (type solid) + ) + (layer "F.Fab") + (uuid "a4082d84-0a5f-5edd-b97f-afbb68b73336") + ) + (fp_rect + (start -1.365 -1.365) + (end 26.725 54.705) + (stroke + (width 0.1) + (type solid) + ) + (fill no) + (layer "F.Fab") + (uuid "53b4b62c-705f-584c-9987-8e20cbcb0eae") + ) + (fp_rect + (start 4.045 -8.255) + (end 21.675 -1.365) + (stroke + (width 0.1) + (type solid) + ) + (fill no) + (layer "F.Fab") + (uuid "1a629168-d420-520b-820e-a4de5828228b") + ) + (fp_text user "ANTENNA BOUNDS - NOT RF KEEPOUT" + (at 12.7 -9.5 0) + (layer "F.Fab") + (uuid "acabe363-725d-5486-8c68-8e06b5758ceb") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + ) + ) + (fp_text user "USB SHELL MOUTHS ONLY" + (at 12.7 59 0) + (layer "F.Fab") + (uuid "4af1d9b9-5ec1-5ef3-a72d-b72b93ecc391") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + ) + ) (pad "1" thru_hole rect (at 0 0) (size 1.7 1.7) @@ -3025,8 +3089,8 @@ (embedded_fonts no) ) (gr_line - (start 106.8 121.8) - (end 109.2 121.8) + (start 106.635 121.635) + (end 112.045 121.635) (stroke (width 0.12) (type default) @@ -3035,78 +3099,8 @@ (uuid "cdd870c2-6daf-560d-a619-6903566202a1") ) (gr_line - (start 106.8 177.54) - (end 106.8 121.8) - (stroke - (width 0.12) - (type default) - ) - (layer "F.SilkS") - (uuid "1576658b-4eb9-5105-9817-e374c6ef271e") - ) - (gr_line - (start 109.2 121.8) - (end 109.2 177.54) - (stroke - (width 0.12) - (type default) - ) - (layer "F.SilkS") - (uuid "8f746121-d8e6-5a89-9328-da46f2da8ac0") - ) - (gr_line - (start 109.2 177.54) - (end 106.8 177.54) - (stroke - (width 0.12) - (type default) - ) - (layer "F.SilkS") - (uuid "bfbd0b33-54e8-590f-87da-4935db08a121") - ) - (gr_line - (start 132.2 121.8) - (end 134.6 121.8) - (stroke - (width 0.12) - (type default) - ) - (layer "F.SilkS") - (uuid "fef8b02b-8a5c-5e27-8e75-fc116ddbd526") - ) - (gr_line - (start 132.2 136.509273) - (end 132.2 121.8) - (stroke - (width 0.12) - (type default) - ) - (layer "F.SilkS") - (uuid "abb27fb8-ae0c-56d1-9e35-c66b92681547") - ) - (gr_line - (start 132.2 162.671905) - (end 132.2 137.390726) - (stroke - (width 0.12) - (type default) - ) - (layer "F.SilkS") - (uuid "03740f02-7c63-574b-ad1d-eeaa2c77d2ea") - ) - (gr_line - (start 132.2 170.202783) - (end 132.2 163.828094) - (stroke - (width 0.12) - (type default) - ) - (layer "F.SilkS") - (uuid "2cecac83-165e-5e49-a695-c0b09f3b631c") - ) - (gr_line - (start 132.2 177.54) - (end 132.2 171.397216) + (start 106.635 177.705) + (end 106.635 121.635) (stroke (width 0.12) (type default) @@ -3115,48 +3109,48 @@ (uuid "5473bcda-98ee-5a28-9fda-f27d137d534c") ) (gr_line - (start 134.6 121.8) - (end 134.6 130.421905) + (start 110.795 177.705) + (end 106.635 177.705) (stroke (width 0.12) (type default) ) (layer "F.SilkS") - (uuid "0445e79c-43e4-5609-90ad-67bffdf64341") + (uuid "2441022c-c903-5a57-a84c-86f0a5143cb5") ) (gr_line - (start 134.6 131.578094) - (end 134.6 140.571905) + (start 110.795 177.705) + (end 119.665 177.705) + (stroke + (width 0.3) + (type default) + ) + (layer "F.SilkS") + (uuid "abb27fb8-ae0c-56d1-9e35-c66b92681547") + ) + (gr_line + (start 112.045 121.635) + (end 112.045 119.28) (stroke (width 0.12) (type default) ) (layer "F.SilkS") - (uuid "6405d812-d377-52d9-8013-8c19bd4cdc2b") + (uuid "03740f02-7c63-574b-ad1d-eeaa2c77d2ea") ) (gr_line - (start 134.6 141.728094) - (end 134.6 160.952783) + (start 112.045 121.635) + (end 129.675 121.635) (stroke (width 0.12) (type default) ) (layer "F.SilkS") - (uuid "f938fe4f-5ff2-577d-9bff-2827fb32ce22") + (uuid "8f746121-d8e6-5a89-9328-da46f2da8ac0") ) (gr_line - (start 134.6 162.147216) - (end 134.6 169.559273) - (stroke - (width 0.12) - (type default) - ) - (layer "F.SilkS") - (uuid "d472d222-21c6-5a78-ab7f-18799bceab8a") - ) - (gr_line - (start 134.6 170.440726) - (end 134.6 177.54) + (start 122.195 177.705) + (end 119.665 177.705) (stroke (width 0.12) (type default) @@ -3165,14 +3159,94 @@ (uuid "bfa82c3d-e8e2-58ea-8b46-f0db41e84458") ) (gr_line - (start 134.6 177.54) - (end 132.2 177.54) + (start 122.195 177.705) + (end 131.065 177.705) + (stroke + (width 0.3) + (type default) + ) + (layer "F.SilkS") + (uuid "2b9b8e99-a473-51bc-8241-448388f63fcb") + ) + (gr_line + (start 129.675 119.28) + (end 129.675 121.635) (stroke (width 0.12) (type default) ) (layer "F.SilkS") - (uuid "2441022c-c903-5a57-a84c-86f0a5143cb5") + (uuid "2cecac83-165e-5e49-a695-c0b09f3b631c") + ) + (gr_line + (start 129.675 121.635) + (end 134.725 121.635) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "bfbd0b33-54e8-590f-87da-4935db08a121") + ) + (gr_line + (start 134.725 121.635) + (end 134.725 130.382575) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "1576658b-4eb9-5105-9817-e374c6ef271e") + ) + (gr_line + (start 134.725 131.617424) + (end 134.725 140.532575) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "fef8b02b-8a5c-5e27-8e75-fc116ddbd526") + ) + (gr_line + (start 134.725 141.767424) + (end 134.725 160.924667) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "0445e79c-43e4-5609-90ad-67bffdf64341") + ) + (gr_line + (start 134.725 162.175332) + (end 134.725 169.460337) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "6405d812-d377-52d9-8013-8c19bd4cdc2b") + ) + (gr_line + (start 134.725 170.539662) + (end 134.725 177.705) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "f938fe4f-5ff2-577d-9bff-2827fb32ce22") + ) + (gr_line + (start 134.725 177.705) + (end 131.065 177.705) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "d472d222-21c6-5a78-ab7f-18799bceab8a") ) (gr_line (start 141.095 100.28) @@ -4050,17 +4124,6 @@ (layer "Edge.Cuts") (uuid "17ad1955-d7db-47eb-a736-baff736aac39") ) - (gr_text "HEADER GUIDES" - (at 120.7 151 0) - (layer "F.SilkS") - (uuid "2b9b8e99-a473-51bc-8241-448388f63fcb") - (effects - (font - (size 0.85 0.85) - (thickness 0.12) - ) - ) - ) (gr_text "BACK" (at 146.25 175 0) (layer "F.SilkS") @@ -4072,17 +4135,6 @@ ) ) ) - (gr_text "DRAFT - NOT FOR FAB" - (at 156 178 0) - (layer "F.SilkS") - (uuid "875ba70f-7139-4924-a69c-d2e171f3f526") - (effects - (font - (size 0.9 0.9) - (thickness 0.15) - ) - ) - ) (gr_text "SELECT" (at 158.25 175 0) (layer "F.SilkS") diff --git a/hardware/PCB/update_u1_graphics.py b/hardware/PCB/update_u1_graphics.py new file mode 100644 index 0000000..f981d8d --- /dev/null +++ b/hardware/PCB/update_u1_graphics.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +"""Synchronize measured U1 F.Fab graphics only; never replace the footprint.""" +from pathlib import Path +import uuid +import pcbnew as p + +ROOT = Path(__file__).resolve().parent +PCB = ROOT / "serial-carrier.kicad_pcb" +NS = uuid.UUID("36693251-e1f8-44e9-a8a9-e201bd658ceb") + + +def library_graphics(): + fp = p.FootprintLoad(str(ROOT / "Carrier.pretty"), "HW678_2x22_Provisional") + if fp is None: + raise RuntimeError("Cannot load measured HW678 footprint") + return fp + + +def signature(g, origin): + def point(v): + return v.x-origin.x, v.y-origin.y + if isinstance(g, p.PCB_SHAPE): + return ("shape", g.GetShape(), point(g.GetStart()), point(g.GetEnd()), g.GetWidth()) + return ("text", g.GetText(), point(g.GetPosition()), + (g.GetTextSize().x, g.GetTextSize().y), g.GetTextThickness()) + + +def measured_items(fp): + # Generic library captions would overlap existing board labels. + return sorted((g for g in fp.GraphicalItems() if g.GetLayer() == p.F_Fab + and not (isinstance(g, p.PCB_TEXT) and g.GetText() in ( + "PROVISIONAL CONNECTOR FIT", "ANTENNA UP / USB DOWN"))), + key=lambda g: signature(g, fp.GetPosition())) + + +def verify(board): + u1 = next(f for f in board.GetFootprints() if f.GetReference() == "U1") + assert u1.GetOrientationDegrees() == 0 and u1.GetLayer() == p.F_Cu + assert len([g for g in u1.GraphicalItems() if g.GetLayer() == p.F_Fab]) == 6 + library = library_graphics() + expected = [signature(g, library.GetPosition()) for g in measured_items(library)] + actual = [signature(g, u1.GetPosition()) for g in measured_items(u1)] + assert actual == expected, "Embedded U1 F.Fab differs from measured library; run update_u1_graphics.py" + + +def main(): + lock = ROOT / "~serial-carrier.kicad_pcb.lck" + if lock.exists(): + raise SystemExit("Close PCB Editor before updating U1 graphics") + before = PCB.read_bytes() + project = ROOT / "serial-carrier.kicad_pro" + project_before = project.read_bytes() + board = p.LoadBoard(str(PCB)) + u1 = next(f for f in board.GetFootprints() if f.GetReference() == "U1") + assert u1.GetOrientationDegrees() == 0 and u1.GetLayer() == p.F_Cu + library = library_graphics() + sources = measured_items(library) + assert len(sources) == 6, "Review changed measured library before integration" + owned = {str(uuid.uuid5(NS, str(i))) for i in range(len(sources))} + existing = list(u1.GraphicalItems()) + assert all(g.m_Uuid.AsString() in owned for g in existing if g.GetLayer() == p.F_Fab), "Unowned U1 fabrication graphics; review manually" + if [signature(g, u1.GetPosition()) for g in measured_items(u1)] == [ + signature(g, library.GetPosition()) for g in sources]: + verify(board) + print("Embedded measured U1 graphics already current; no board write") + return + for g in existing: + if g.m_Uuid.AsString() in owned: + u1.Remove(g) + for i, source in enumerate(sources): + graphic = source.Duplicate() + graphic.SetParent(u1) + graphic.SetUuid(p.KIID(str(uuid.uuid5(NS, str(i))))) + graphic.Move(u1.GetPosition() - library.GetPosition()) + u1.Add(graphic) + verify(board) + temp = ROOT / "validation/pcb-u1-tmp.kicad_pcb" + try: + assert p.SaveBoard(str(temp), board, True) + verify(p.LoadBoard(str(temp))) + if lock.exists() or PCB.read_bytes() != before: + raise RuntimeError("PCB changed or reopened; refusing to overwrite") + assert project.read_bytes() == project_before, "Project settings changed" + temp.replace(PCB) + finally: + temp.unlink(missing_ok=True) + print("Embedded measured U1 graphics; existing footprint fields, pads and routing retained") + + +if __name__ == "__main__": + main() diff --git a/hardware/PCB/validate_footprints.py b/hardware/PCB/validate_footprints.py index 30f970c..2dc348b 100644 --- a/hardware/PCB/validate_footprints.py +++ b/hardware/PCB/validate_footprints.py @@ -117,9 +117,23 @@ class FootprintRegression(unittest.TestCase): for row, x in enumerate((0, 25.4)) for index in range(22) } self.check_header(footprint, positions) - self.assertFalse(any(isinstance(g, k.PCB_SHAPE) - for g in footprint.GraphicalItems()), - "HW678 must not acquire guessed outlines or envelopes") + shapes = [g for g in footprint.GraphicalItems() if isinstance(g, k.PCB_SHAPE)] + expected = [ + (k.SHAPE_T_RECT, mm(-1.365, -1.365), mm(26.725, 54.705), k.FromMM(0.1)), + (k.SHAPE_T_RECT, mm(4.045, -8.255), mm(21.675, -1.365), k.FromMM(0.1)), + (k.SHAPE_T_SEGMENT, mm(2.795, 54.705), mm(11.665, 54.705), k.FromMM(0.3)), + (k.SHAPE_T_SEGMENT, mm(14.195, 54.705), mm(23.065, 54.705), k.FromMM(0.3)), + ] + self.assertEqual(Counter((g.GetShape(), xy(g.GetStart()), xy(g.GetEnd()), + g.GetWidth()) for g in shapes), Counter(expected)) + for shape in shapes: + self.assertEqual(shape.GetLayer(), k.F_Fab) + self.assertFalse(shape.IsAnyFill()) + # Only measured planar bounds/mouth spans: no invented shell depth or RF area. + self.assertAlmostEqual(26.725 - (-1.365), 28.09) + self.assertAlmostEqual(54.705 - (-1.365), 56.07) + self.assertAlmostEqual(54.705 - (-8.255), 62.96) + self.assertAlmostEqual(26.725 - 25.4, 1.325) if __name__ == "__main__": diff --git a/hardware/PCB/validate_pcb_draft.py b/hardware/PCB/validate_pcb_draft.py index c527715..c60e646 100644 --- a/hardware/PCB/validate_pcb_draft.py +++ b/hardware/PCB/validate_pcb_draft.py @@ -10,6 +10,7 @@ from pathlib import Path import subprocess import xml.etree.ElementTree as ET import pcbnew as p +from update_u1_graphics import verify ROOT=Path(__file__).resolve().parent PCB=ROOT/"serial-carrier.kicad_pcb" @@ -21,6 +22,7 @@ def run(*args): run("kicad-cli","sch","export","netlist","--format","kicadxml","-o",str(OUT/"pcb-source-netlist.xml"),str(ROOT/"serial-carrier.kicad_sch")) run("kicad-cli","pcb","drc","--format","json","--all-track-errors","--severity-all","--schematic-parity","-o",str(OUT/"pcb-parity-drc.json"),str(PCB)) board=p.LoadBoard(str(PCB)) +verify(board) source=ET.parse(OUT/"pcb-source-netlist.xml").getroot() comps={c.get("ref"):c for c in source.findall("components/comp")} footprints={f.GetReference():f for f in board.GetFootprints()} @@ -121,7 +123,7 @@ summary={ "known_parity_warning":"U2 reference footprint assigned on PCB only; schematic footprint intentionally blank; nominal male external metal dimensions user-confirmed", "project_settings_sha256":hashlib.sha256((ROOT/'serial-carrier.kicad_pro').read_bytes()).hexdigest(), "ignored_DRC_checks":report["ignored_checks"], - "not_validated":["male module pin map/header fit", "ESP32 geometry and complete assembly envelope/heights", "header/socket fit", "RF performance and antenna clearance", "power/return-path integrity", "USB power path", "OLED pull-ups", "fabrication process", "hardware operation"], + "not_validated":["male module pin map/header fit", "ESP32 measured-planar 1:1 fit and complete assembly envelope/heights", "header/socket fit", "RF performance and antenna clearance", "power/return-path integrity", "USB power path", "OLED pull-ups", "fabrication process", "hardware operation"], } (OUT/"pcb-validation-summary.json").write_text(json.dumps(summary,indent=2)+"\n") print("PCB draft verified: 82 x 80 mm; 2 copper layers; 0 physical DRC violations; 0 unrouted.") diff --git a/hardware/PCB/validate_u1_update.py b/hardware/PCB/validate_u1_update.py new file mode 100644 index 0000000..9202607 --- /dev/null +++ b/hardware/PCB/validate_u1_update.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 +"""Measured U1 integration regression and exact pre-update preservation audit.""" +import hashlib +import json +from pathlib import Path +import re +import tempfile +import uuid +import pcbnew as p +from shapely.geometry import Polygon +from add_device_silkscreen import add_outlines, NS as SILK_NS, xy, outline_lines +from update_u1_graphics import verify, NS as U1_NS +from remove_draft_markers import expected_tree + +ROOT = Path(__file__).resolve().parent +PCB = ROOT / "serial-carrier.kicad_pcb" +BASE = ROOT / "validation/pcb-before-u1-measured.kicad_pcb" + + +def parse(path): + tokens = iter(re.findall(r'"(?:\\.|[^"\\])*"|[()]|[^\s()]+', path.read_text())) + def group(): + result = [] + for token in tokens: + if token == ')': + return result + result.append(group() if token == '(' else token) + raise ValueError("Unterminated S-expression") + assert next(tokens) == '(' + return group() + + +def ident(item): + return next((v[1].strip('"') for v in item if isinstance(v,list) and v[0]=='uuid'), None) + + +def canonical(item, excluded=frozenset()): + # KiCad can reorder independent board items when saving; compare their full + # parsed contents, not byte order. Pad coordinates/netnames/UUIDs remain exact. + if not isinstance(item, list): + return item + values = [canonical(v, excluded) for v in item + if not isinstance(v,list) or ident(v) not in excluded] + if item and item[0] in ("kicad_pcb", "footprint"): + return ([v for v in values if not isinstance(v,list)] + + sorted((v for v in values if isinstance(v,list)), key=repr)) + # Coordinates, polygon vertex order, text and other ordered values must + # remain ordered: sorting these could conceal an X/Y swap or zone edit. + return values + + +def main(): + assert hashlib.sha256(BASE.read_bytes()).hexdigest() == "53e36538c0669604457b9e1a9ff1b1e20422970e8f9f356088c4581868ad5045", "Pre-update snapshot changed" + assert hashlib.sha256((ROOT/"serial-carrier.kicad_pro").read_bytes()).hexdigest() == "9ad5b992785ebfe01fa7ea4e1aa391a2c7d7f1f2c3b1c13136173c301ecb6516", "Project settings changed" + before = PCB.read_bytes() + board = p.LoadBoard(str(PCB)) + verify(board) + silk_ids = {str(uuid.uuid5(SILK_NS,str(i))) for i in range(4096)} + u1_ids = {str(uuid.uuid5(U1_NS,str(i))) for i in range(6)} + # The original baseline retains historical draft labels. Permit only the + # exact requested title/revision/comment edits and removal of the silk label. + assert canonical(expected_tree(parse(BASE)), silk_ids) == canonical(parse(PCB), silk_ids | u1_ids), "Change outside owned U1 additions / device silk / exact presentation labels" + generated = [g for g in board.GetDrawings() if g.m_Uuid.AsString() in silk_ids] + assert not any(isinstance(g,p.PCB_TEXT) and g.GetText()=="HEADER GUIDES" for g in board.GetDrawings()) + carrier = Polygon([(136,100),(182,100),(182,180),(100,180),(100,119),(136,119)]) + mouths = [] + for g in generated: + assert g.GetLayer() == p.F_SilkS + for edge in outline_lines(g): + assert carrier.covers(edge.buffer(p.ToMM(g.GetWidth())/2)), "Silk outside carrier/notch" + if g.GetWidth() == p.FromMM(0.3): + mouths.append(g) + assert len(mouths) == 2 + assert sorted((xy(g.GetStart()),xy(g.GetEnd())) for g in mouths) == [ + ((110.795,177.705),(119.665,177.705)), + ((122.195,177.705),(131.065,177.705))] + # A second refresh must reproduce all drawing geometry and UUIDs. + add_outlines(board) + with tempfile.TemporaryDirectory(prefix="u1-regression-") as temporary: + result = Path(temporary)/PCB.name + assert p.SaveBoard(str(result),board,True) + assert canonical(parse(result)) == canonical(parse(PCB)), "Silkscreen refresh not idempotent" + u1 = next(f for f in board.GetFootprints() if f.GetReference()=="U1") + shape = next(g for g in u1.GraphicalItems() if isinstance(g,p.PCB_SHAPE)) + shape.SetWidth(shape.GetWidth()+1) + try: + verify(board) + except AssertionError: + pass + else: + raise AssertionError("Stale embedded geometry was not rejected") + assert PCB.read_bytes() == before + assert not (ROOT/"~serial-carrier.kicad_pcb.lck").exists() + summary = dict(measured_library_matches_embedded_u1=True, + existing_uuids_pads_nets_placement_routing_settings_and_unrelated_graphics_preserved=True, + presentation_label_cleanup=True, + silk_refresh_idempotent=True, stale_geometry_negative_control=True, + silk_clipped_to_carrier=True, usb_mouth_markers=2, + generated_silk_items=len(generated), + baseline_sha256=hashlib.sha256(BASE.read_bytes()).hexdigest(), + board_sha256=hashlib.sha256(before).hexdigest(), + project_sha256=hashlib.sha256((ROOT/"serial-carrier.kicad_pro").read_bytes()).hexdigest()) + (ROOT/"validation/pcb-u1-update.json").write_text(json.dumps(summary,indent=2)+"\n") + print(json.dumps(summary,indent=2)) + + +if __name__ == "__main__": + main() diff --git a/hardware/PCB/validation/pcb-before-u1-measured.kicad_pcb b/hardware/PCB/validation/pcb-before-u1-measured.kicad_pcb new file mode 100644 index 0000000..dc0432c --- /dev/null +++ b/hardware/PCB/validation/pcb-before-u1-measured.kicad_pcb @@ -0,0 +1,8946 @@ +(kicad_pcb + (version 20260206) + (generator "pcbnew") + (generator_version "10.0") + (general + (thickness 1.6) + (legacy_teardrops no) + ) + (paper "A4") + (title_block + (title "Serial Swiss Army Knife - 82x80 mm carrier draft") + (rev "A1 DRAFT") + (comment 1 "NOT FOR FABRICATION - USB / antenna geometry pending; verify module pinout / assembly") + ) + (layers + (0 "F.Cu" signal) + (2 "B.Cu" signal) + (9 "F.Adhes" user "F.Adhesive") + (11 "B.Adhes" user "B.Adhesive") + (13 "F.Paste" user) + (15 "B.Paste" user) + (5 "F.SilkS" user "F.Silkscreen") + (7 "B.SilkS" user "B.Silkscreen") + (1 "F.Mask" user) + (3 "B.Mask" user) + (17 "Dwgs.User" user "User.Drawings") + (19 "Cmts.User" user "User.Comments") + (21 "Eco1.User" user "User.Eco1") + (23 "Eco2.User" user "User.Eco2") + (25 "Edge.Cuts" user) + (27 "Margin" user) + (31 "F.CrtYd" user "F.Courtyard") + (29 "B.CrtYd" user "B.Courtyard") + (35 "F.Fab" user) + (33 "B.Fab" user) + (39 "User.1" user) + (41 "User.2" user) + (43 "User.3" user) + (45 "User.4" user) + ) + (setup + (pad_to_mask_clearance 0) + (allow_soldermask_bridges_in_footprints no) + (tenting + (front yes) + (back yes) + ) + (covering + (front no) + (back no) + ) + (plugging + (front no) + (back no) + ) + (capping no) + (filling no) + (pcbplotparams + (layerselection 0x00000000_00000000_55555555_5755f5ff) + (plot_on_all_layers_selection 0x00000000_00000000_00000000_00000000) + (disableapertmacros no) + (usegerberextensions no) + (usegerberattributes yes) + (usegerberadvancedattributes yes) + (creategerberjobfile yes) + (dashed_line_dash_ratio 12) + (dashed_line_gap_ratio 3) + (svgprecision 4) + (plotframeref no) + (mode 1) + (useauxorigin no) + (pdf_front_fp_property_popups yes) + (pdf_back_fp_property_popups yes) + (pdf_metadata yes) + (pdf_single_document no) + (dxfpolygonmode yes) + (dxfimperialunits yes) + (dxfusepcbnewfont yes) + (psnegative no) + (psa4output no) + (plot_black_and_white yes) + (sketchpadsonfab no) + (plotpadnumbers no) + (hidednponfab no) + (sketchdnponfab yes) + (crossoutdnponfab yes) + (subtractmaskfromsilk no) + (outputformat 1) + (mirror no) + (drillshape 1) + (scaleselection 1) + (outputdirectory "") + ) + ) + (footprint "Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x" + (layer "F.Cu") + (uuid "1545d15f-20f4-4a6a-a25e-c8bbaa98b280") + (at 155 168) + (descr "Tactile switch, 6x6 mm, H4.3 mm, 6.5 mm pitch, https://omronfs.omron.com/en_US/ecb/products/pdf/en-b3f.pdf") + (tags "Omron B3F-10xx SPST 1P1T") + (property "Reference" "SW2" + (at 3.25 -2 0) + (layer "F.SilkS") + (uuid "0464527f-fc60-4cc8-8e54-de5d4f9d1e82") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "B3F-1000" + (at 3.25 6.5 0) + (layer "F.Fab") + (hide yes) + (uuid "d63f862e-cc8a-4dbb-bf35-51f43f9f0de0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "bb3cd545-265a-4386-8c21-10e198d3b65b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "0d63e61b-daa6-4347-9de0-795aef167fd5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Manufacturer" "Omron" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "ed0c853c-7bad-4223-ac1a-808d0fb64350") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "MPN" "B3F-1000" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "9e5e1f5d-a99b-49ed-a322-375dd393a80c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Function" "Select / confirm" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "769482c4-e8d8-4700-b7f3-899603f4f2b0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Procurement" "Live stock not verified" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "5c19bcf2-9483-4cd5-bb8d-b4e61d5fceed") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/c86e0d56-4290-5f2b-b790-14926c8cdeea/c522a716-55a4-584d-a12e-ab135b4c08eb") + (sheetname "serial-carrier") + (sheetfile "serial-carrier.kicad_sch") + (attr through_hole) + (duplicate_pad_numbers_are_jumpers no) + (fp_line + (start 0.13 3.35) + (end 0.13 1.15) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "39a742ab-4817-43ba-b59e-fec67365543c") + ) + (fp_line + (start 0.75 -0.87) + (end 5.75 -0.87) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "57a7ae1f-aa3f-4d40-9de3-e769baa28284") + ) + (fp_line + (start 0.75 5.37) + (end 5.75 5.37) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "65a4dcdd-4a13-42eb-8d83-e83b5caa77d8") + ) + (fp_line + (start 6.37 1.15) + (end 6.37 3.35) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "45a080a4-8307-4946-8972-957264246942") + ) + (fp_circle + (center 3.25 2.25) + (end 5 2.25) + (stroke + (width 0.12) + (type solid) + ) + (fill no) + (layer "F.SilkS") + (uuid "8c3798ec-55b2-4e56-8409-0b78fe68138f") + ) + (fp_line + (start -1.1 -1.1) + (end -1.1 5.6) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4b2c37b6-e4ae-4f97-97e4-4806158a8ff0") + ) + (fp_line + (start -1.1 -1.1) + (end 7.6 -1.1) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c8ad2cf5-4e58-4e37-875e-22468b8434bd") + ) + (fp_line + (start -1.1 5.6) + (end 7.6 5.6) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "96726bc0-3180-465b-9abc-b3c3ee3cef44") + ) + (fp_line + (start 7.6 5.6) + (end 7.6 -1.1) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4cbe5799-cb0b-42b0-a7f0-dff748a1735c") + ) + (fp_line + (start 0.25 -0.75) + (end 0.25 5.25) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "1369fc8e-a420-476b-83a6-e121d270b1fb") + ) + (fp_line + (start 0.25 -0.75) + (end 6.25 -0.75) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "7d37bc49-6b1c-4a0d-9041-859bf5a6bb96") + ) + (fp_line + (start 0.25 5.25) + (end 6.25 5.25) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "096760c0-5588-4f79-8d14-31bea09bd316") + ) + (fp_line + (start 6.25 -0.75) + (end 6.25 5.25) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "cb7d23c1-1737-4bb6-a63a-45ab17b0c1ca") + ) + (pad "1" thru_hole circle + (at 0 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/BTN_SELECT") + (pintype "passive") + (thermal_bridge_angle 90) + (uuid "574d93e4-d3fc-4c28-b2d5-4e7d8682c22f") + ) + (pad "1" thru_hole circle + (at 6.5 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/BTN_SELECT") + (pintype "passive") + (uuid "0398530b-79dc-45b1-886c-51343182e1d3") + ) + (pad "2" thru_hole circle + (at 0 4.5) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/GND") + (pintype "passive") + (uuid "970e56ae-cc93-46cd-8807-ccc9cf082aa1") + ) + (pad "2" thru_hole circle + (at 6.5 4.5) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/GND") + (pintype "passive") + (uuid "2f44f580-c7e4-4f03-ba46-49605735875c") + ) + (embedded_fonts no) + (model "${KICAD10_3DMODEL_DIR}/Button_Switch_THT.3dshapes/SW_TH_Tactile_Omron_B3F-100x.step" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "MountingHole:MountingHole_3.2mm_M3" + (layer "F.Cu") + (uuid "1a8b4cef-8dea-4172-b360-f297696eb7e7") + (at 103.5 122.5) + (descr "Mounting Hole 3.2mm, M3, no annular, generated by kicad-footprint-generator mountinghole.py") + (tags "mountinghole M3") + (property "Reference" "H1" + (at 0 -4.15 0) + (layer "F.SilkS") + (hide yes) + (uuid "942249d7-2892-4702-9e47-3aa975dee74b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "M3 mounting proposal / 3.2mm" + (at 0 4.15 0) + (layer "F.Fab") + (hide yes) + (uuid "293f6764-7211-46e3-a49c-3565059c6144") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "7a11fc8e-2d4b-4615-a09a-cc51d3fcaf24") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "50c8eef0-6de1-468a-a132-a389bf146f8f") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "KiLib_Generator" "mounting_hardware/mounting_hole" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "36b2d4bf-e031-481a-96de-8e66cdad8c0b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (attr board_only exclude_from_pos_files exclude_from_bom) + (duplicate_pad_numbers_are_jumpers no) + (fp_circle + (center 0 0) + (end 3.2 0) + (stroke + (width 0.15) + (type solid) + ) + (fill no) + (layer "Cmts.User") + (uuid "81e644dc-ae4a-4ff6-b273-a5dd6ca4fa6e") + ) + (fp_circle + (center 0 0) + (end 3.45 0) + (stroke + (width 0.05) + (type solid) + ) + (fill no) + (layer "F.CrtYd") + (uuid "7c4bb299-dc78-4676-b761-710c7ebee708") + ) + (pad "" np_thru_hole circle + (at 0 0) + (size 3.2 3.2) + (drill 3.2) + (layers "*.Cu" "*.Mask") + (uuid "9ae57520-a253-498c-8cfb-ebf661082893") + ) + (embedded_fonts no) + ) + (footprint "Carrier:HW678_2x22_Provisional" + (layer "F.Cu") + (uuid "3b4d80e2-b60a-47c6-a06a-acd4c69d5a94") + (at 108 123) + (descr "HW-678, component/top view antenna up USB down; origin pad 1; left top-bottom 1..22, right top-bottom 23..44; only header centres verified; no GPIO mapping, outline, courtyard or antenna keepout; PROVISIONAL connector fit: 1.70 mm pads / 1.00 mm drills from installed KiCad PinHeader_1x04_P2.54mm_Vertical, awaiting selected actual pin/socket datasheet") + (tags "module provisional THT") + (property "Reference" "U1" + (at 12.7 21 0) + (layer "F.SilkS") + (uuid "4da63730-ca2f-4711-ac7d-31a41e5bab7d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "HW678 / S3-N16R8" + (at 12.7 57 0) + (layer "F.Fab") + (hide yes) + (uuid "1f3098b2-20e5-42d0-82a3-fdd16eea3f58") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6d045f0e-8c57-4970-ad19-218e6a6da564") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "bae61151-c60a-499e-97ad-06ebdf637ac9") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Status" "Header geometry nominal; outline/antenna clearance pending" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "4191f9f5-6321-4688-8d4b-79bd6e331adb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Pin_numbering" "Left 1-22; right 23-44; both top-to-bottom, antenna up" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "cb8b2cbb-0181-448d-b826-7aeaf767679f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/c86e0d56-4290-5f2b-b790-14926c8cdeea/3ab265d0-7fd3-5891-94eb-d39426c6a8a3") + (sheetname "serial-carrier") + (sheetfile "serial-carrier.kicad_sch") + (attr through_hole) + (duplicate_pad_numbers_are_jumpers no) + (pad "1" thru_hole rect + (at 0 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/+3V3") + (pinfunction "3V3_1") + (pintype "power_out") + (uuid "9aaad355-039f-439b-9cd7-308d07ace02e") + ) + (pad "2" thru_hole circle + (at 0 2.54) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/+3V3") + (pinfunction "3V3_2") + (pintype "passive") + (uuid "2c8cc7c5-7b73-4bc2-a384-b3a5ac459c92") + ) + (pad "3" thru_hole circle + (at 0 5.08) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-EN-Pad3)") + (pinfunction "EN_3") + (pintype "input+no_connect") + (uuid "3d92a22d-6120-42f5-a02c-ee31eafb8eed") + ) + (pad "4" thru_hole circle + (at 0 7.62) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_DCD") + (pinfunction "GPIO4_4") + (pintype "input") + (uuid "d9f0d2af-a701-43e9-9d1e-58a6c7cb5250") + ) + (pad "5" thru_hole circle + (at 0 10.16) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_DSR") + (pinfunction "GPIO5_5") + (pintype "input") + (uuid "0ceca603-53a8-4a53-85cc-f7f8e7be90e4") + ) + (pad "6" thru_hole circle + (at 0 12.7) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_RI") + (pinfunction "GPIO6_6") + (pintype "input") + (uuid "f35f1696-b778-437b-8cce-67b8c4d5f5d0") + ) + (pad "7" thru_hole circle + (at 0 15.24) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_DTR") + (pinfunction "GPIO7_7") + (pintype "output") + (uuid "354ab122-85b1-4c9c-9385-d5091fe12303") + ) + (pad "8" thru_hole circle + (at 0 17.78) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_RTS") + (pinfunction "GPIO15_8") + (pintype "output") + (uuid "55162730-46fd-465d-a1c5-20aed09ed534") + ) + (pad "9" thru_hole circle + (at 0 20.32) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_CTS") + (pinfunction "GPIO16_9") + (pintype "input") + (uuid "f75c20f8-d3b5-4c3b-9919-cb044b2da5c3") + ) + (pad "10" thru_hole circle + (at 0 22.86) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_TX") + (pinfunction "GPIO17_10") + (pintype "output") + (uuid "22c323db-7146-44af-951b-04a1d7dbb2fe") + ) + (pad "11" thru_hole circle + (at 0 25.4) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_RX") + (pinfunction "GPIO18_11") + (pintype "input") + (uuid "6573852d-5714-4c8d-8793-0be87f5a052a") + ) + (pad "12" thru_hole circle + (at 0 27.94) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_VALID") + (pinfunction "GPIO8_12") + (pintype "input") + (uuid "2fbc596b-c88f-4fc6-aa94-5dad4fcac9cc") + ) + (pad "13" thru_hole circle + (at 0 30.48) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO3-Pad13)") + (pinfunction "GPIO3_13") + (pintype "bidirectional+no_connect") + (uuid "53f04e63-0c66-4738-996e-3b56af1ef510") + ) + (pad "14" thru_hole circle + (at 0 33.02) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO46-Pad14)") + (pinfunction "GPIO46_14") + (pintype "bidirectional+no_connect") + (uuid "5d98e841-5162-4d6b-bbe5-eb3d74ea0deb") + ) + (pad "15" thru_hole circle + (at 0 35.56) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_OFF_N") + (pinfunction "GPIO9_15") + (pintype "bidirectional") + (uuid "34e1afe9-b3fc-4d3a-9e33-38b32244f19e") + ) + (pad "16" thru_hole circle + (at 0 38.1) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/BTN_PREVIOUS") + (pinfunction "GPIO10_16") + (pintype "input") + (uuid "fc705960-92fa-4d8f-bb0e-ce2b82d1e7fc") + ) + (pad "17" thru_hole circle + (at 0 40.64) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/OLED_SDA") + (pinfunction "GPIO11_17") + (pintype "bidirectional") + (uuid "1f91549c-5cb2-465f-86df-b2f1b0c16ed8") + ) + (pad "18" thru_hole circle + (at 0 43.18) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/OLED_SCL") + (pinfunction "GPIO12_18") + (pintype "output") + (uuid "1c55fd03-0b3e-494f-a37b-6e0b3496cfc9") + ) + (pad "19" thru_hole circle + (at 0 45.72) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/BTN_SELECT") + (pinfunction "GPIO13_19") + (pintype "input") + (uuid "f7b9badd-1db5-4575-9da8-979a7c8f3946") + ) + (pad "20" thru_hole circle + (at 0 48.26) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/BTN_NEXT") + (pinfunction "GPIO14_20") + (pintype "input") + (uuid "e7159c90-4e8d-4b21-8e84-a7f59f793440") + ) + (pad "21" thru_hole circle + (at 0 50.8) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-5V-Pad21)") + (pinfunction "5V_21") + (pintype "passive+no_connect") + (uuid "2b3b80ed-7fcd-424e-ab38-c91199dadfef") + ) + (pad "22" thru_hole circle + (at 0 53.34) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/GND") + (pinfunction "GND_22") + (pintype "power_out") + (uuid "9d509ec2-7588-4c77-9146-8d03c8646e37") + ) + (pad "23" thru_hole circle + (at 25.4 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/GND") + (pinfunction "GND_23") + (pintype "passive") + (uuid "b66490f6-5d60-415d-babb-215c70511b77") + ) + (pad "24" thru_hole circle + (at 25.4 2.54) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO43-Pad24)") + (pinfunction "GPIO43_24") + (pintype "bidirectional+no_connect") + (uuid "fb25926b-c585-42c7-9e29-cc01cfebb70a") + ) + (pad "25" thru_hole circle + (at 25.4 5.08) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO44-Pad25)") + (pinfunction "GPIO44_25") + (pintype "bidirectional+no_connect") + (uuid "c7817b90-5e57-42a4-b37c-e46699a38742") + ) + (pad "26" thru_hole circle + (at 25.4 7.62) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO1-Pad26)") + (pinfunction "GPIO1_26") + (pintype "bidirectional+no_connect") + (uuid "338dcbac-3c08-46e2-85ac-4307506fa3b1") + ) + (pad "27" thru_hole circle + (at 25.4 10.16) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO2-Pad27)") + (pinfunction "GPIO2_27") + (pintype "bidirectional+no_connect") + (uuid "bdf4b6cd-5000-4eeb-b840-e45b072cb269") + ) + (pad "28" thru_hole circle + (at 25.4 12.7) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO42-Pad28)") + (pinfunction "GPIO42_28") + (pintype "bidirectional+no_connect") + (uuid "37152b28-db53-49da-a02d-e3301b586d9e") + ) + (pad "29" thru_hole circle + (at 25.4 15.24) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO41-Pad29)") + (pinfunction "GPIO41_29") + (pintype "bidirectional+no_connect") + (uuid "a5583e2e-383e-4d5d-b250-efa92ca25df6") + ) + (pad "30" thru_hole circle + (at 25.4 17.78) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO40-Pad30)") + (pinfunction "GPIO40_30") + (pintype "bidirectional+no_connect") + (uuid "f6130f2e-993c-4d3d-bb20-c7a3edaabe5c") + ) + (pad "31" thru_hole circle + (at 25.4 20.32) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO39-Pad31)") + (pinfunction "GPIO39_31") + (pintype "bidirectional+no_connect") + (uuid "d222411f-3467-461e-9008-660aa4e3fe30") + ) + (pad "32" thru_hole circle + (at 25.4 22.86) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO38-Pad32)") + (pinfunction "GPIO38_32") + (pintype "bidirectional+no_connect") + (uuid "eabfa5be-79a6-4b07-b1d6-3c0a1ca06b43") + ) + (pad "33" thru_hole circle + (at 25.4 25.4) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO37-Pad33)") + (pinfunction "GPIO37_33") + (pintype "bidirectional+no_connect") + (uuid "bfbec8d0-9e84-4cfe-bdea-10a3701446f2") + ) + (pad "34" thru_hole circle + (at 25.4 27.94) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO36-Pad34)") + (pinfunction "GPIO36_34") + (pintype "bidirectional+no_connect") + (uuid "850c8ea4-54eb-42c6-af7d-5c95b9f61eac") + ) + (pad "35" thru_hole circle + (at 25.4 30.48) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO35-Pad35)") + (pinfunction "GPIO35_35") + (pintype "bidirectional+no_connect") + (uuid "8ae84977-518d-4025-b9ef-d766d62d1d0b") + ) + (pad "36" thru_hole circle + (at 25.4 33.02) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO0-Pad36)") + (pinfunction "GPIO0_36") + (pintype "bidirectional+no_connect") + (uuid "789493f5-ec55-40d3-87c3-f7c36c780be6") + ) + (pad "37" thru_hole circle + (at 25.4 35.56) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO45-Pad37)") + (pinfunction "GPIO45_37") + (pintype "bidirectional+no_connect") + (uuid "8fbd7a34-3c74-437c-a967-d8a624591364") + ) + (pad "38" thru_hole circle + (at 25.4 38.1) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO48-Pad38)") + (pinfunction "GPIO48_38") + (pintype "bidirectional+no_connect") + (uuid "4b8eabef-8493-437d-bd02-cb9ff4afd7cd") + ) + (pad "39" thru_hole circle + (at 25.4 40.64) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO47-Pad39)") + (pinfunction "GPIO47_39") + (pintype "bidirectional+no_connect") + (uuid "ebd2d5a6-6ea8-40fe-8786-1a53f5ddb4b8") + ) + (pad "40" thru_hole circle + (at 25.4 43.18) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO21-Pad40)") + (pinfunction "GPIO21_40") + (pintype "bidirectional+no_connect") + (uuid "17f8d0a7-7c14-4701-9dcd-63cf7ec7b48e") + ) + (pad "41" thru_hole circle + (at 25.4 45.72) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO20-Pad41)") + (pinfunction "GPIO20_41") + (pintype "bidirectional+no_connect") + (uuid "de6c7dc1-e662-44b6-bab0-b649efedabc1") + ) + (pad "42" thru_hole circle + (at 25.4 48.26) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "unconnected-(U1-GPIO19-Pad42)") + (pinfunction "GPIO19_42") + (pintype "bidirectional+no_connect") + (uuid "b68e8903-779a-477b-a2bb-f8eccb98756a") + ) + (pad "43" thru_hole circle + (at 25.4 50.8) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/GND") + (pinfunction "GND_43") + (pintype "passive") + (uuid "23b353d7-7ede-43a0-a655-57496d4f8aee") + ) + (pad "44" thru_hole circle + (at 25.4 53.34) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/GND") + (pinfunction "GND_44") + (pintype "passive") + (uuid "91b9e8e9-7e2c-43ab-b2ef-ec8ba16a25f1") + ) + (embedded_fonts no) + ) + (footprint "MountingHole:MountingHole_3.2mm_M3" + (layer "F.Cu") + (uuid "550e4f6f-2da4-4812-be68-647df70a0991") + (at 178 104) + (descr "Mounting Hole 3.2mm, M3, no annular, generated by kicad-footprint-generator mountinghole.py") + (tags "mountinghole M3") + (property "Reference" "H3" + (at 0 -4.15 0) + (layer "F.SilkS") + (hide yes) + (uuid "8011b8c3-b21a-4dc3-8dc5-800764985b9a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "M3 mounting proposal / 3.2mm" + (at 0 4.15 0) + (layer "F.Fab") + (hide yes) + (uuid "9c8ca97b-c295-41c5-8453-d0bb0ec0a8a2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "e45de6ce-c866-4f57-9e36-72da55d2b38e") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "0bb15147-57ab-48c2-9fc9-9e61b8b9fe82") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "KiLib_Generator" "mounting_hardware/mounting_hole" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "2a4707ae-2cbb-47bc-8819-8bfbaa657bae") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (attr board_only exclude_from_pos_files exclude_from_bom) + (duplicate_pad_numbers_are_jumpers no) + (fp_circle + (center 0 0) + (end 3.2 0) + (stroke + (width 0.15) + (type solid) + ) + (fill no) + (layer "Cmts.User") + (uuid "4c07d21c-21de-4de0-b107-ba79a3905641") + ) + (fp_circle + (center 0 0) + (end 3.45 0) + (stroke + (width 0.05) + (type solid) + ) + (fill no) + (layer "F.CrtYd") + (uuid "70cd9171-6019-437d-91dc-5c7bd8efa28b") + ) + (pad "" np_thru_hole circle + (at 0 0) + (size 3.2 3.2) + (drill 3.2) + (layers "*.Cu" "*.Mask") + (uuid "c20753db-9be8-4170-bbfd-a4fdb283a5bb") + ) + (embedded_fonts no) + ) + (footprint "Carrier:MAX3243_Reference_Provisional" + (layer "F.Cu") + (uuid "812387f6-6524-459e-8102-fe9c55122668") + (at 143 126.67) + (descr "PROVISIONAL female 5988 CAD reference / VERIFY MALE 6253 geometry and pad map. Top view DE9 toward -Y; origin JP2 pin 1. Female reference: 1 Vin, 2 GND, 3 DCD, 4 RX, 5 TX, 6 DTR, 7 DSR, 8 RTS, 9 CTS, 10 RI, 11 VLD, 12 OFF. PROVISIONAL connector fit: carrier pads 1.70 mm / drill 1.00 mm. No verified DE9 envelope or courtyard. CAD-derived outline: Limor Fried/Ladyada for Adafruit Industries, CC BY-SA 3.0; see rs232-footprint-notes.md") + (tags "MAX3243 module female5988 reference male6253 provisional THT") + (property "Reference" "U2" + (at 13.97 -12 0) + (layer "F.SilkS") + (uuid "bd08a9ac-0290-4ae2-9615-dea5e9a4967a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "Adafruit MAX3243 / male 6253" + (at 13.97 -20.5 0) + (layer "F.Fab") + (hide yes) + (uuid "0d4db5ba-61cc-4ab1-b843-2eeac08dc387") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "9e61c057-f888-4c96-84bd-d3202c346251") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c0e9973e-f4c4-4051-8883-093d77db134d") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Status" "VERIFY male header numbering; footprint intentionally unassigned" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "20d057b6-ffe5-4aae-a1a9-dd213e4abaae") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet_source" "adafruit-research.md; reference female 5988 CAD" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "4bfd59ab-ec6d-4656-918d-28d41109cf6c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/c86e0d56-4290-5f2b-b790-14926c8cdeea/1127195e-e393-5d1d-9119-b25d10556144") + (sheetname "serial-carrier") + (sheetfile "serial-carrier.kicad_sch") + (attr through_hole) + (duplicate_pad_numbers_are_jumpers no) + (fp_line + (start -1.905 -26.67) + (end -1.905 0.127) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b940a699-61eb-4e59-a95c-3028aedac077") + ) + (fp_line + (start 0.635 2.667) + (end 27.305 2.667) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "1cb154b8-adb2-485f-8250-a595d16d61a8") + ) + (fp_line + (start 29.845 -26.67) + (end -1.905 -26.67) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b8131c41-b527-4e85-b304-7e9aa5e19b63") + ) + (fp_line + (start 29.845 0.127) + (end 29.845 -26.67) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "5f905c30-2904-4dd8-a581-d968a85189e0") + ) + (fp_arc + (start 0.635 2.667) + (mid -1.161051 1.923051) + (end -1.905 0.127) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "d92141d6-2516-45cc-9d9d-07bdf31e21c4") + ) + (fp_arc + (start 29.845 0.127) + (mid 29.101051 1.923051) + (end 27.305 2.667) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "adb7b13a-027d-4418-bdd6-e3940fe5ff82") + ) + (pad "" np_thru_hole circle + (at 1.905 -8.763) + (size 3 3) + (drill 3) + (layers "*.Cu" "*.Mask") + (uuid "3c06a1e3-7b88-4036-af66-fe213957243a") + ) + (pad "" np_thru_hole circle + (at 26.035 -8.763) + (size 3 3) + (drill 3) + (layers "*.Cu" "*.Mask") + (uuid "5ffa74f9-09db-4672-a4d6-3a9cfe0bbc8f") + ) + (pad "1" thru_hole rect + (at 0 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/+3V3") + (pinfunction "Vin_1") + (pintype "power_in") + (uuid "f8aafd85-e635-47cd-ba22-ddf4a036d1cd") + ) + (pad "2" thru_hole circle + (at 2.54 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/GND") + (pinfunction "GND_2") + (pintype "power_in") + (uuid "7744910d-b37b-4fd5-a46a-95ee262d2a08") + ) + (pad "3" thru_hole circle + (at 5.08 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_DCD") + (pinfunction "DCD_3") + (pintype "output") + (uuid "d589a6a4-0d53-4c2a-8f68-fb4407d9f10e") + ) + (pad "4" thru_hole circle + (at 7.62 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_RX") + (pinfunction "RX_4") + (pintype "output") + (uuid "3d90cce4-14d8-46a0-b560-09524f11698f") + ) + (pad "5" thru_hole circle + (at 10.16 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_TX") + (pinfunction "TX_5") + (pintype "input") + (uuid "f919098b-4ad7-4600-9e8b-3375a1cff050") + ) + (pad "6" thru_hole circle + (at 12.7 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_DTR") + (pinfunction "DTR_6") + (pintype "input") + (uuid "81e8ad67-4bdc-4f57-90b1-68cff6a95261") + ) + (pad "7" thru_hole circle + (at 15.24 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_DSR") + (pinfunction "DSR_7") + (pintype "output") + (uuid "e2d6b2cb-6025-490c-8371-d7cc34ac37f6") + ) + (pad "8" thru_hole circle + (at 17.78 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_RTS") + (pinfunction "RTS_8") + (pintype "input") + (uuid "5c304724-2bc6-409d-9c59-2e40adc557b9") + ) + (pad "9" thru_hole circle + (at 20.32 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_CTS") + (pinfunction "CTS_9") + (pintype "output") + (uuid "a8411036-6859-4041-84b8-2c80c326c58e") + ) + (pad "10" thru_hole circle + (at 22.86 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_RI") + (pinfunction "RI_10") + (pintype "output") + (uuid "e28de6f2-fb85-4849-ba1a-e98e2a231492") + ) + (pad "11" thru_hole circle + (at 25.4 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_VALID") + (pinfunction "VLD_11") + (pintype "output") + (uuid "9ad42f44-160f-4aa5-bcf0-a4466c090438") + ) + (pad "12" thru_hole circle + (at 27.94 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/RS_OFF_N") + (pinfunction "OFF_N_12") + (pintype "input") + (uuid "a43ba2f2-477d-4850-87de-e1591119d5ae") + ) + (embedded_fonts no) + ) + (footprint "MountingHole:MountingHole_3.2mm_M3" + (layer "F.Cu") + (uuid "8394edc2-a74b-4829-b782-9bcd5245e09b") + (at 178 176) + (descr "Mounting Hole 3.2mm, M3, no annular, generated by kicad-footprint-generator mountinghole.py") + (tags "mountinghole M3") + (property "Reference" "H4" + (at 0 -4.15 0) + (layer "F.SilkS") + (hide yes) + (uuid "6309212a-0bca-4a93-a0b3-cbca466b1fac") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "M3 mounting proposal / 3.2mm" + (at 0 4.15 0) + (layer "F.Fab") + (hide yes) + (uuid "c5fbce2d-cc80-4f93-803e-222118fd8024") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "14a76ee0-1c9a-4911-befc-6965978746ad") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c872b54b-c7d3-47c9-8234-679b26056573") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "KiLib_Generator" "mounting_hardware/mounting_hole" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "b5223860-4934-477b-801e-e536c5dfb833") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (attr board_only exclude_from_pos_files exclude_from_bom) + (duplicate_pad_numbers_are_jumpers no) + (fp_circle + (center 0 0) + (end 3.2 0) + (stroke + (width 0.15) + (type solid) + ) + (fill no) + (layer "Cmts.User") + (uuid "2f5951d9-7483-42b8-ab4d-45c0fe17fa82") + ) + (fp_circle + (center 0 0) + (end 3.45 0) + (stroke + (width 0.05) + (type solid) + ) + (fill no) + (layer "F.CrtYd") + (uuid "aa6e2aa8-b539-451e-9a3b-d8231578d256") + ) + (pad "" np_thru_hole circle + (at 0 0) + (size 3.2 3.2) + (drill 3.2) + (layers "*.Cu" "*.Mask") + (uuid "a426daed-f153-48ec-8018-c7addacc3681") + ) + (embedded_fonts no) + ) + (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "868a0dda-24ff-4329-ba0b-e8abae4768cd") + (at 154 134) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=7.62mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 7.62mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (property "Reference" "R2" + (at 3.81 -1.6 0) + (layer "F.Fab") + (uuid "86961247-315c-4bd6-9b25-10895efda16a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "2.2k 1%" + (at 3.81 2.37 0) + (layer "F.Fab") + (hide yes) + (uuid "ad785a99-e980-4b32-a610-e39affb609a4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "cc3b97e2-6cc1-4c3d-9260-00af5b8bdbfb") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "61c69828-deec-40ef-b906-c794b84c0267") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "KiLib_Generator" "resistor/THT" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "13f9a803-5488-43c4-bb68-00b44c6ae0b4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Rating" "At least 0.125 W; exact resistor MPN pending" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "1f5a2e3f-0e6c-46be-850e-aefedf55be1e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/c86e0d56-4290-5f2b-b790-14926c8cdeea/405055c0-35ab-5334-ad4d-30d45c5ef6f2") + (sheetname "serial-carrier") + (sheetfile "serial-carrier.kicad_sch") + (attr through_hole) + (duplicate_pad_numbers_are_jumpers no) + (fp_line + (start 0.54 -1.37) + (end 7.08 -1.37) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "69624986-cd2b-4c3f-b5f0-bfdeed7ee36d") + ) + (fp_line + (start 0.54 -1.04) + (end 0.54 -1.37) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "654ca77d-bf1a-4293-aac4-be3bdda52258") + ) + (fp_line + (start 0.54 1.04) + (end 0.54 1.37) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4d5a051f-fa98-4c07-83b3-36505e9d7eb0") + ) + (fp_line + (start 0.54 1.37) + (end 7.08 1.37) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8660b27e-c043-44fc-9fe8-dfcd032190b0") + ) + (fp_line + (start 7.08 -1.37) + (end 7.08 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "73cff598-2675-48eb-8827-0253f7c007b0") + ) + (fp_line + (start 7.08 1.37) + (end 7.08 1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d72bf7c2-aa55-4565-9e31-2c00d552c8d7") + ) + (fp_rect + (start -1.05 -1.5) + (end 8.67 1.5) + (stroke + (width 0.05) + (type solid) + ) + (fill no) + (layer "F.CrtYd") + (uuid "b37a470f-3918-4ba9-8b79-628786714232") + ) + (fp_line + (start 0 0) + (end 0.66 0) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "d0c59d90-4379-484f-b43f-be1278e2719f") + ) + (fp_line + (start 7.62 0) + (end 6.96 0) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "677d54ac-5dc5-4d86-9235-35c2f8664f5e") + ) + (fp_rect + (start 0.66 -1.25) + (end 6.96 1.25) + (stroke + (width 0.1) + (type solid) + ) + (fill no) + (layer "F.Fab") + (uuid "70645bf5-f4dc-4c99-8c2e-f2eb8adae9f8") + ) + (pad "1" thru_hole circle + (at 0 0) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/+3V3") + (pintype "passive") + (uuid "73a249ed-c3b1-46fb-afd5-f8bfe0e3fa65") + ) + (pad "2" thru_hole circle + (at 7.62 0) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/BTN_SELECT") + (pintype "passive") + (uuid "c118f27f-8ad4-4abe-b9c0-a30a22fe60c9") + ) + (embedded_fonts no) + (model "${KICAD10_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal.step" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "MountingHole:MountingHole_3.2mm_M3" + (layer "F.Cu") + (uuid "93345be0-a55c-48b6-ad01-af0edc524bba") + (at 103.5 175) + (descr "Mounting Hole 3.2mm, M3, no annular, generated by kicad-footprint-generator mountinghole.py") + (tags "mountinghole M3") + (property "Reference" "H2" + (at 0 -4.15 0) + (layer "F.SilkS") + (hide yes) + (uuid "d3be5dc3-3f97-4e3e-be9e-799e0ebf99cc") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "M3 mounting proposal / 3.2mm" + (at 0 4.15 0) + (layer "F.Fab") + (hide yes) + (uuid "dfceaa6a-bc16-437e-b1fd-51ab6a03e177") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "baef20fa-70ac-48bd-9ead-91694bcb30e7") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "d7440d54-8ef3-4113-a294-411db08431ee") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "KiLib_Generator" "mounting_hardware/mounting_hole" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "389e6372-fd89-49f2-ba74-76282aa732b0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (attr board_only exclude_from_pos_files exclude_from_bom) + (duplicate_pad_numbers_are_jumpers no) + (fp_circle + (center 0 0) + (end 3.2 0) + (stroke + (width 0.15) + (type solid) + ) + (fill no) + (layer "Cmts.User") + (uuid "913cfb59-3591-41cf-9e8f-7206c29b17d9") + ) + (fp_circle + (center 0 0) + (end 3.45 0) + (stroke + (width 0.05) + (type solid) + ) + (fill no) + (layer "F.CrtYd") + (uuid "d91af5e3-5fbf-41af-81fd-0147cb0e8bd7") + ) + (pad "" np_thru_hole circle + (at 0 0) + (size 3.2 3.2) + (drill 3.2) + (layers "*.Cu" "*.Mask") + (uuid "4f463ef7-f6b1-4357-8534-939fecda018b") + ) + (embedded_fonts no) + ) + (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "96d33f92-df2a-4726-82fe-4813956c013d") + (at 165 134) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=7.62mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 7.62mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (property "Reference" "R3" + (at 3.81 -1.6 0) + (layer "F.Fab") + (uuid "839159d7-80c5-46d6-aeba-3fb01a9442c9") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "2.2k 1%" + (at 3.81 2.37 0) + (layer "F.Fab") + (hide yes) + (uuid "23167f17-a864-4014-bf13-726fef55bf03") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "b84a8da1-2073-48bd-b59a-6df8038e40fe") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "83f6d3a0-2699-4c3c-a38a-aa2fd74aab61") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "KiLib_Generator" "resistor/THT" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "ac8bacbe-89c2-4cf0-a6d2-f10142bd7296") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Rating" "At least 0.125 W; exact resistor MPN pending" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "e18b9be7-cc36-4c84-97c3-98fc7ee4c32f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/c86e0d56-4290-5f2b-b790-14926c8cdeea/78f9a74f-5d91-5687-b50e-68176333df23") + (sheetname "serial-carrier") + (sheetfile "serial-carrier.kicad_sch") + (attr through_hole) + (duplicate_pad_numbers_are_jumpers no) + (fp_line + (start 0.54 -1.37) + (end 7.08 -1.37) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "07002713-23b7-4f57-9520-27c433242b8a") + ) + (fp_line + (start 0.54 -1.04) + (end 0.54 -1.37) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b4480f78-5e8e-4ae8-9b76-6e4a412c088e") + ) + (fp_line + (start 0.54 1.04) + (end 0.54 1.37) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "21c53eab-3a6b-4f48-903a-4eb3eb7f2747") + ) + (fp_line + (start 0.54 1.37) + (end 7.08 1.37) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c07fb3cc-ba89-45a0-8f78-0f8e0365a58d") + ) + (fp_line + (start 7.08 -1.37) + (end 7.08 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d4837738-7620-40ab-a185-0a85c31607ae") + ) + (fp_line + (start 7.08 1.37) + (end 7.08 1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "99cf11a2-c3f1-4678-b548-b23c562c6347") + ) + (fp_rect + (start -1.05 -1.5) + (end 8.67 1.5) + (stroke + (width 0.05) + (type solid) + ) + (fill no) + (layer "F.CrtYd") + (uuid "fc0fc32f-21ae-494a-a403-2b7e1c7e2dcd") + ) + (fp_line + (start 0 0) + (end 0.66 0) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "8d3c4610-c413-4af9-a2aa-120399246226") + ) + (fp_line + (start 7.62 0) + (end 6.96 0) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "6b3237de-10fd-4d07-ba28-98b87d217d6c") + ) + (fp_rect + (start 0.66 -1.25) + (end 6.96 1.25) + (stroke + (width 0.1) + (type solid) + ) + (fill no) + (layer "F.Fab") + (uuid "944a92e5-c421-432b-929e-24120bcc86a9") + ) + (pad "1" thru_hole circle + (at 0 0) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/+3V3") + (pintype "passive") + (uuid "72b8a1ea-1fa7-480b-8122-aceb08f4bb4b") + ) + (pad "2" thru_hole circle + (at 7.62 0) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/BTN_NEXT") + (pintype "passive") + (uuid "9e9dfe49-4b68-472b-a86c-bfcee913a81b") + ) + (embedded_fonts no) + (model "${KICAD10_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal.step" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x" + (layer "F.Cu") + (uuid "c63139ce-f01c-4f14-ab23-39b344051786") + (at 167 168) + (descr "Tactile switch, 6x6 mm, H4.3 mm, 6.5 mm pitch, https://omronfs.omron.com/en_US/ecb/products/pdf/en-b3f.pdf") + (tags "Omron B3F-10xx SPST 1P1T") + (property "Reference" "SW3" + (at 3.25 -2 0) + (layer "F.SilkS") + (uuid "933a5866-e3ed-4011-8c92-ece7ac056f0e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "B3F-1000" + (at 3.25 6.5 0) + (layer "F.Fab") + (hide yes) + (uuid "c7325a8f-8eab-4643-b703-74201c5fcf6a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "6b4445eb-e073-4fb8-8b82-1654b9a5d560") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "88993b54-064f-4b59-b3b8-5a1d9f72e9af") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Manufacturer" "Omron" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "192dfc02-afc4-46d5-b9ca-54780213156f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "MPN" "B3F-1000" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "8734b77f-4d54-48c5-8647-9422ce526ee2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Function" "Next" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "c31a095f-1890-4667-b888-c43d0e6eba27") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Procurement" "Live stock not verified" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "c1e4ac05-8087-4ac2-9a88-1b43478e3815") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/c86e0d56-4290-5f2b-b790-14926c8cdeea/35caa6bb-42a6-512c-848c-f1e4457aa97f") + (sheetname "serial-carrier") + (sheetfile "serial-carrier.kicad_sch") + (attr through_hole) + (duplicate_pad_numbers_are_jumpers no) + (fp_line + (start 0.13 3.35) + (end 0.13 1.15) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "91d57212-d334-410a-a0a8-2b5ec24d3312") + ) + (fp_line + (start 0.75 -0.87) + (end 5.75 -0.87) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "55c65fd8-503d-4aaf-8fda-ced135fd9a71") + ) + (fp_line + (start 0.75 5.37) + (end 5.75 5.37) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6067404d-3497-40e3-af58-b974e69f2df3") + ) + (fp_line + (start 6.37 1.15) + (end 6.37 3.35) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "eff0b4b0-10ac-4ca1-bd56-9924a294bcdb") + ) + (fp_circle + (center 3.25 2.25) + (end 5 2.25) + (stroke + (width 0.12) + (type solid) + ) + (fill no) + (layer "F.SilkS") + (uuid "c31c079b-c85e-4a85-8ffc-71808074eb08") + ) + (fp_line + (start -1.1 -1.1) + (end -1.1 5.6) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9422231f-02be-4a97-a019-0a2e958c161c") + ) + (fp_line + (start -1.1 -1.1) + (end 7.6 -1.1) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "203a35c1-04ff-4bcb-b8ae-14f04b0f0418") + ) + (fp_line + (start -1.1 5.6) + (end 7.6 5.6) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f1f69f34-b6ec-4c48-adcf-c46730eefe63") + ) + (fp_line + (start 7.6 5.6) + (end 7.6 -1.1) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "af0fd814-f0a5-41b0-ae24-9dd8deb9ccb6") + ) + (fp_line + (start 0.25 -0.75) + (end 0.25 5.25) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "1c4f81ec-72a3-4464-9845-5fbc2b89dde8") + ) + (fp_line + (start 0.25 -0.75) + (end 6.25 -0.75) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "ab0ec0ec-089a-4af8-8941-ff0fce7cd304") + ) + (fp_line + (start 0.25 5.25) + (end 6.25 5.25) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b6d0010b-4f15-4ce7-953f-563a041a4b5b") + ) + (fp_line + (start 6.25 -0.75) + (end 6.25 5.25) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b3a8fd17-8a5e-4d48-bb8f-4a89e0c96e67") + ) + (pad "1" thru_hole circle + (at 0 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/BTN_NEXT") + (pintype "passive") + (thermal_bridge_angle 90) + (uuid "c67d0b07-c47f-48b3-9e79-7aed82edbbfc") + ) + (pad "1" thru_hole circle + (at 6.5 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/BTN_NEXT") + (pintype "passive") + (uuid "62f3da3b-8297-4232-92ee-88f3ce4a7d36") + ) + (pad "2" thru_hole circle + (at 0 4.5) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/GND") + (pintype "passive") + (uuid "3cdbd911-6e07-4f86-8887-5953fa3d2a01") + ) + (pad "2" thru_hole circle + (at 6.5 4.5) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/GND") + (pintype "passive") + (uuid "8e780381-cbfb-4f62-ae3b-8b0b8fa2a6a8") + ) + (embedded_fonts no) + (model "${KICAD10_3DMODEL_DIR}/Button_Switch_THT.3dshapes/SW_TH_Tactile_Omron_B3F-100x.step" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "e1d96413-a6ba-4d9e-b2ea-dd37b9c1462d") + (at 143 134) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=7.62mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 7.62mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (property "Reference" "R1" + (at 3.81 -1.6 0) + (layer "F.Fab") + (uuid "64521668-47a1-4385-955c-c3cd0bee5eee") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "2.2k 1%" + (at 3.81 2.37 0) + (layer "F.Fab") + (hide yes) + (uuid "e6565e6a-34c4-497c-92c2-7d2a369479c8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "de889b23-d1c1-494b-a844-ad84243da331") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "cee814da-51c9-4e35-b468-664c64a7e1e0") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "KiLib_Generator" "resistor/THT" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "3e87199a-cf7b-4c9b-ab46-7855df393762") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Rating" "At least 0.125 W; exact resistor MPN pending" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "8747985b-43a4-4e66-970f-744e1b5e42b6") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/c86e0d56-4290-5f2b-b790-14926c8cdeea/defb78eb-632f-5f9d-a59d-dffbb1d31dec") + (sheetname "serial-carrier") + (sheetfile "serial-carrier.kicad_sch") + (attr through_hole) + (duplicate_pad_numbers_are_jumpers no) + (fp_line + (start 0.54 -1.37) + (end 7.08 -1.37) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ad2d64fe-164e-4f30-8a0d-677fd41d7f0f") + ) + (fp_line + (start 0.54 -1.04) + (end 0.54 -1.37) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9ffa0750-0764-419f-92dd-b6ba9a9bc951") + ) + (fp_line + (start 0.54 1.04) + (end 0.54 1.37) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "666f5c40-9c61-4321-8a05-8faf9959d6ec") + ) + (fp_line + (start 0.54 1.37) + (end 7.08 1.37) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b320b16b-5258-4782-92db-de4b1bd65a2d") + ) + (fp_line + (start 7.08 -1.37) + (end 7.08 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d4e911ed-4ad2-4b03-8ea6-48e6ac46a18d") + ) + (fp_line + (start 7.08 1.37) + (end 7.08 1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "fa6f951d-57e6-4679-be14-b6146c40885c") + ) + (fp_rect + (start -1.05 -1.5) + (end 8.67 1.5) + (stroke + (width 0.05) + (type solid) + ) + (fill no) + (layer "F.CrtYd") + (uuid "3479814a-cdbb-4f2a-bb40-33ce8e737c2b") + ) + (fp_line + (start 0 0) + (end 0.66 0) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "6c464864-469f-40ac-b1d7-e1479e2db710") + ) + (fp_line + (start 7.62 0) + (end 6.96 0) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "ce6e1892-929c-43ba-a32f-ee3f98307c16") + ) + (fp_rect + (start 0.66 -1.25) + (end 6.96 1.25) + (stroke + (width 0.1) + (type solid) + ) + (fill no) + (layer "F.Fab") + (uuid "7d25adce-f5e2-40b6-972c-166655e33fd1") + ) + (pad "1" thru_hole circle + (at 0 0) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/+3V3") + (pintype "passive") + (uuid "56ff90bc-b894-4f81-8274-7a34384229e7") + ) + (pad "2" thru_hole circle + (at 7.62 0) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/BTN_PREVIOUS") + (pintype "passive") + (uuid "8237f507-f5c7-4eb6-9aa1-f46af2981e7c") + ) + (embedded_fonts no) + (model "${KICAD10_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal.step" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x" + (layer "F.Cu") + (uuid "f1ae48d9-4b6f-4c39-9405-d2af17482b49") + (at 143 168) + (descr "Tactile switch, 6x6 mm, H4.3 mm, 6.5 mm pitch, https://omronfs.omron.com/en_US/ecb/products/pdf/en-b3f.pdf") + (tags "Omron B3F-10xx SPST 1P1T") + (property "Reference" "SW1" + (at 3.25 -2 0) + (layer "F.SilkS") + (uuid "6aa8c4a1-7796-4b5d-a6c1-46d132e19a80") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "B3F-1000" + (at 3.25 6.5 0) + (layer "F.Fab") + (hide yes) + (uuid "36f04a57-7da1-49d1-85ea-3917d5292ce7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "88c57ffb-cd3f-4c07-bb90-b8f64b5cd331") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "a5d3fede-aab7-4a1b-98f9-c4d1684beeec") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Manufacturer" "Omron" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "4b323911-93a0-4b21-a243-14ebc2f618d7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "MPN" "B3F-1000" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "b0bfc103-fdfe-41d2-90f7-40d09e860129") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Function" "Previous / back" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "2225dcee-db56-4b8d-b7e6-a331d3a5ee2c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Procurement" "Live stock not verified" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "80cc3392-7ee9-4f40-9ab0-959d9528c918") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/c86e0d56-4290-5f2b-b790-14926c8cdeea/dd5f1f75-0093-55fc-9814-437ed26871eb") + (sheetname "serial-carrier") + (sheetfile "serial-carrier.kicad_sch") + (attr through_hole) + (duplicate_pad_numbers_are_jumpers no) + (fp_line + (start 0.13 3.35) + (end 0.13 1.15) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3ee86421-4cbf-4526-807b-4a9e30f004a9") + ) + (fp_line + (start 0.75 -0.87) + (end 5.75 -0.87) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2f5bc08e-35f8-40de-9252-7979166aa67d") + ) + (fp_line + (start 0.75 5.37) + (end 5.75 5.37) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f52bbfc5-8a25-4065-8125-126b301057a4") + ) + (fp_line + (start 6.37 1.15) + (end 6.37 3.35) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "7892a892-bc99-446a-bb7a-baf4a5c8ec14") + ) + (fp_circle + (center 3.25 2.25) + (end 5 2.25) + (stroke + (width 0.12) + (type solid) + ) + (fill no) + (layer "F.SilkS") + (uuid "38acf159-3b0f-4b73-8976-3d395d3abc1d") + ) + (fp_line + (start -1.1 -1.1) + (end -1.1 5.6) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "355a2ef0-7da8-4c31-a4f0-b3990708b13f") + ) + (fp_line + (start -1.1 -1.1) + (end 7.6 -1.1) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4a824a91-a22b-4b7c-b76e-987dc407ab46") + ) + (fp_line + (start -1.1 5.6) + (end 7.6 5.6) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "b002a80c-c0d6-4d84-bd5e-22282994acc1") + ) + (fp_line + (start 7.6 5.6) + (end 7.6 -1.1) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "5d6a4c70-3fe5-4673-8061-19b2e2145c92") + ) + (fp_line + (start 0.25 -0.75) + (end 0.25 5.25) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "444348d4-3929-472a-815b-ffcbafab85a5") + ) + (fp_line + (start 0.25 -0.75) + (end 6.25 -0.75) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "fed9732b-5d36-41ab-9b89-61a57d205773") + ) + (fp_line + (start 0.25 5.25) + (end 6.25 5.25) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "a2d61bf5-7235-4826-8ed6-fbb33de24248") + ) + (fp_line + (start 6.25 -0.75) + (end 6.25 5.25) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "5aef3422-8466-41fb-b502-12d60178828e") + ) + (pad "1" thru_hole circle + (at 0 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/BTN_PREVIOUS") + (pintype "passive") + (thermal_bridge_angle 90) + (uuid "5214c011-545b-4ae7-9cdb-852ade815805") + ) + (pad "1" thru_hole circle + (at 6.5 0) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/BTN_PREVIOUS") + (pintype "passive") + (uuid "84202d30-b2fe-4170-8146-69b68d3b82a1") + ) + (pad "2" thru_hole circle + (at 0 4.5) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/GND") + (pintype "passive") + (uuid "cc9a376c-9410-4f75-a7a6-3a849cc384b3") + ) + (pad "2" thru_hole circle + (at 6.5 4.5) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/GND") + (pintype "passive") + (uuid "24c82a41-4f9f-4c94-aaaf-2a3df71bbd08") + ) + (embedded_fonts no) + (model "${KICAD10_3DMODEL_DIR}/Button_Switch_THT.3dshapes/SW_TH_Tactile_Omron_B3F-100x.step" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "Carrier:OLED_26mm_I2C_Provisional" + (layer "F.Cu") + (uuid "f72b5833-5a2b-435a-9a8b-49aa76f19ee7") + (at 143 136) + (descr "User-verified front/display view, header at top; origin top-left PCB corner; 1 GND, 2 VCC, 3 SCL, 4 SDA; PROVISIONAL connector fit: 1.70 mm pads / 1.00 mm drills from installed KiCad PinHeader_1x04_P2.54mm_Vertical, awaiting selected actual pin/socket datasheet") + (tags "module provisional THT") + (property "Reference" "DS1" + (at 13 13 0) + (layer "F.SilkS") + (uuid "740d2e75-28c2-4250-a259-abc330ef5fe6") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "128x64 I2C OLED / 0x3C" + (at 13 28 0) + (layer "F.Fab") + (hide yes) + (uuid "a789331a-ae02-4dce-b503-d2959cada475") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "293c0d4b-7d9a-4202-93d2-9153ee6ca344") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f63796bd-b316-43ee-8c07-a23e9d138687") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Status" "Module outline/header/display user fit-verified; pad/drill fit provisional" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "06f7acd3-a6a6-4d04-9d60-cb6ed3f4c301") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/c86e0d56-4290-5f2b-b790-14926c8cdeea/0ae411c1-94cc-5551-9037-1d59c01a8ee5") + (sheetname "serial-carrier") + (sheetfile "serial-carrier.kicad_sch") + (attr through_hole) + (duplicate_pad_numbers_are_jumpers no) + (fp_rect + (start 0 0) + (end 26 26) + (stroke + (width 0.1) + (type solid) + ) + (fill no) + (layer "F.Fab") + (uuid "7a971509-2cce-4460-b464-63eeb8a67296") + ) + (fp_rect + (start 1 4.5) + (end 25.5 21) + (stroke + (width 0.1) + (type dash) + ) + (fill no) + (layer "F.Fab") + (uuid "c1d3499d-a905-484a-8fea-e9fa4a4e804e") + ) + (pad "" np_thru_hole circle + (at 1.75 1.75) + (size 2 2) + (drill 2) + (layers "*.Cu" "*.Mask") + (uuid "3faf2ff1-6fe2-4e81-aa94-fda726e79ed1") + ) + (pad "" np_thru_hole circle + (at 1.75 24.25) + (size 2 2) + (drill 2) + (layers "*.Cu" "*.Mask") + (uuid "bdc05890-8e39-4ee5-9d03-ded151e450a3") + ) + (pad "" np_thru_hole circle + (at 24.25 1.75) + (size 2 2) + (drill 2) + (layers "*.Cu" "*.Mask") + (uuid "211244de-27f9-4250-b486-ab659a41382f") + ) + (pad "" np_thru_hole circle + (at 24.25 24.25) + (size 2 2) + (drill 2) + (layers "*.Cu" "*.Mask") + (uuid "0d99fd7f-cfd9-476b-b742-2ff3b0616bce") + ) + (pad "1" thru_hole rect + (at 9.19 1.5) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/GND") + (pinfunction "GND_1") + (pintype "power_in") + (uuid "0d95ad6d-f278-4240-9618-08ad8fcb5e1c") + ) + (pad "2" thru_hole circle + (at 11.73 1.5) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/+3V3") + (pinfunction "VCC_2") + (pintype "power_in") + (uuid "62a98206-7a36-4b20-a201-d4ca10b404df") + ) + (pad "3" thru_hole circle + (at 14.27 1.5) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/OLED_SCL") + (pinfunction "SCL_3") + (pintype "input") + (uuid "704668d0-88bf-4b51-840a-60a35804fafd") + ) + (pad "4" thru_hole circle + (at 16.81 1.5) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net "/OLED_SDA") + (pinfunction "SDA_4") + (pintype "bidirectional") + (uuid "91a4dcef-1b36-4e3d-a15c-c4578077c27b") + ) + (embedded_fonts no) + ) + (gr_line + (start 106.8 121.8) + (end 109.2 121.8) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "cdd870c2-6daf-560d-a619-6903566202a1") + ) + (gr_line + (start 106.8 177.54) + (end 106.8 121.8) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "1576658b-4eb9-5105-9817-e374c6ef271e") + ) + (gr_line + (start 109.2 121.8) + (end 109.2 177.54) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "8f746121-d8e6-5a89-9328-da46f2da8ac0") + ) + (gr_line + (start 109.2 177.54) + (end 106.8 177.54) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "bfbd0b33-54e8-590f-87da-4935db08a121") + ) + (gr_line + (start 132.2 121.8) + (end 134.6 121.8) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "fef8b02b-8a5c-5e27-8e75-fc116ddbd526") + ) + (gr_line + (start 132.2 136.509273) + (end 132.2 121.8) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "abb27fb8-ae0c-56d1-9e35-c66b92681547") + ) + (gr_line + (start 132.2 162.671905) + (end 132.2 137.390726) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "03740f02-7c63-574b-ad1d-eeaa2c77d2ea") + ) + (gr_line + (start 132.2 170.202783) + (end 132.2 163.828094) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "2cecac83-165e-5e49-a695-c0b09f3b631c") + ) + (gr_line + (start 132.2 177.54) + (end 132.2 171.397216) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "5473bcda-98ee-5a28-9fda-f27d137d534c") + ) + (gr_line + (start 134.6 121.8) + (end 134.6 130.421905) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "0445e79c-43e4-5609-90ad-67bffdf64341") + ) + (gr_line + (start 134.6 131.578094) + (end 134.6 140.571905) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "6405d812-d377-52d9-8013-8c19bd4cdc2b") + ) + (gr_line + (start 134.6 141.728094) + (end 134.6 160.952783) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "f938fe4f-5ff2-577d-9bff-2827fb32ce22") + ) + (gr_line + (start 134.6 162.147216) + (end 134.6 169.559273) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "d472d222-21c6-5a78-ab7f-18799bceab8a") + ) + (gr_line + (start 134.6 170.440726) + (end 134.6 177.54) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "bfa82c3d-e8e2-58ea-8b46-f0db41e84458") + ) + (gr_line + (start 134.6 177.54) + (end 132.2 177.54) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "2441022c-c903-5a57-a84c-86f0a5143cb5") + ) + (gr_line + (start 141.095 100.28) + (end 141.095 126.797) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "a8548815-ac11-50b2-ba28-b237fdad1749") + ) + (gr_line + (start 143 136) + (end 149.652783 136) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "3c5ac182-42c7-574a-bb6f-4b6c0ee76706") + ) + (gr_line + (start 143 149.821905) + (end 143 136) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "59de7e5d-cc91-5921-ae22-5399ab7d7260") + ) + (gr_line + (start 143 162) + (end 143 150.978094) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "67e7188b-be0e-5e36-b5fd-99720ba61b5b") + ) + (gr_arc + (start 143.635 129.336999) + (mid 141.838948 128.593051) + (end 141.095 126.797) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "cf0840d6-e320-5738-912d-aac58ed27ccc") + ) + (gr_line + (start 143.635 129.336999) + (end 170.305 129.336999) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "10948042-6a50-57a7-bf8a-824a085b69cf") + ) + (gr_line + (start 144 140.5) + (end 144.8 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "64969ed3-fe46-58ab-8b01-383456d0e844") + ) + (gr_line + (start 144 141.4) + (end 144 140.6) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "8ffddb5d-8084-5c88-8fe9-77ff0f8ba9b9") + ) + (gr_line + (start 144 142.7) + (end 144 141.9) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "63f734c4-7020-596a-bd28-4c3c60b7669f") + ) + (gr_line + (start 144 144) + (end 144 143.2) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "85e05f25-b376-55a9-85d1-8abf39e7d326") + ) + (gr_line + (start 144 145.3) + (end 144 144.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "7dd7b9b7-08c4-5db7-91b1-6fb9e43467c8") + ) + (gr_line + (start 144 146.6) + (end 144 145.8) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "82aeff4e-9853-564a-b19e-fb07bcba6d23") + ) + (gr_line + (start 144 147.9) + (end 144 147.1) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "3efbb191-f441-57d8-9200-9427fe66fc4c") + ) + (gr_line + (start 144 149.2) + (end 144 148.4) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "24dea679-bf9b-5c03-85fc-5fcc9c8d8899") + ) + (gr_line + (start 144 150.5) + (end 144 149.7) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "2d08a05c-bc08-549a-9d8d-3da28631ab96") + ) + (gr_line + (start 144 151.8) + (end 144 151) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "a2ddb3e7-e806-5b1c-bffe-d806af05aad2") + ) + (gr_line + (start 144 153.1) + (end 144 152.3) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "8c3a99fe-a676-525a-87a4-89234954431f") + ) + (gr_line + (start 144 154.4) + (end 144 153.6) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "76770f5c-bc4a-5eef-a35f-6048cd46bda3") + ) + (gr_line + (start 144 155.7) + (end 144 154.9) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "573b0ff8-c4ea-55ce-8639-35b5be69384b") + ) + (gr_line + (start 144 157) + (end 144 156.2) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "aaf95d9c-f138-540b-b31a-466b00817eaf") + ) + (gr_line + (start 145.1 157) + (end 144.299999 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "45540257-1072-5b43-8806-db920d8cde30") + ) + (gr_line + (start 145.3 140.5) + (end 146.1 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "90946748-831c-586e-ade0-b1d90f661000") + ) + (gr_line + (start 146.4 157) + (end 145.6 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "dc6da13a-189c-5734-82cd-2ef01eb034a4") + ) + (gr_line + (start 146.6 140.5) + (end 147.4 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "0b7d01df-fbc6-5fcf-b328-8da125f3ab3e") + ) + (gr_line + (start 147.7 157) + (end 146.9 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "2d1175d7-ed91-5747-b77a-f6f329680dd8") + ) + (gr_line + (start 147.9 140.5) + (end 148.7 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "a7c8b9f8-828c-5549-83fc-d2542af076cf") + ) + (gr_line + (start 149 157) + (end 148.2 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "ed159221-5eca-528e-b1a4-5b30d18a2cd4") + ) + (gr_line + (start 149.2 140.5) + (end 150 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "5b69e660-ec9e-5d7a-87dc-71afbd183e09") + ) + (gr_line + (start 150.3 157) + (end 149.5 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "068702f2-fabb-5ab8-a238-41a1bcae3a5c") + ) + (gr_line + (start 150.5 140.5) + (end 151.3 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "33ab64dc-41a6-58b5-8c7e-dac85140f221") + ) + (gr_line + (start 150.847216 136) + (end 169 136) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "79102baa-5b2e-5141-a687-0481bb2f2d50") + ) + (gr_line + (start 151.6 157) + (end 150.8 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "ec867bc4-6241-5c66-9bd9-4756692a8d82") + ) + (gr_line + (start 151.8 140.5) + (end 152.6 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "f97def7c-bd44-5020-8c22-df9768781ac0") + ) + (gr_line + (start 152.9 157) + (end 152.1 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "8f03ea77-026c-5c8d-aa29-a7ff1d0f1626") + ) + (gr_line + (start 153.1 140.5) + (end 153.9 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "1436861d-6d51-5a72-9c96-c2344d13c4d2") + ) + (gr_line + (start 154.2 157) + (end 153.4 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "86403081-4364-503a-b80a-f2f6cfb17ca7") + ) + (gr_line + (start 154.4 140.5) + (end 155.2 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "ccc766d5-3f55-5aec-8baa-5bd07dd6131b") + ) + (gr_line + (start 155.5 157) + (end 154.7 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "bfbcc8cd-c216-527f-b9a7-d268475ede18") + ) + (gr_line + (start 155.7 140.5) + (end 156.5 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "ad991aa4-39b1-5562-8e4d-618b54b334f6") + ) + (gr_line + (start 156.8 157) + (end 156 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "22a543c4-7e51-5d19-9d27-dd391da9a84c") + ) + (gr_line + (start 157 140.5) + (end 157.8 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "82228b17-5750-59ca-ae15-db8f225cc196") + ) + (gr_line + (start 158.1 157) + (end 157.3 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "c53539ab-a3f2-50c7-b026-d8ee2b891494") + ) + (gr_line + (start 158.3 140.5) + (end 159.1 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "a913db38-7f74-57c4-9b25-430980512811") + ) + (gr_line + (start 159.4 157) + (end 158.6 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "d27e8b9c-b1ea-5c18-8278-394acbdabfbf") + ) + (gr_line + (start 159.6 140.5) + (end 160.4 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "1e0f312b-86c8-58a4-a0e3-704649cf1e0f") + ) + (gr_line + (start 160.7 157) + (end 159.9 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "41161fc2-6555-570c-a906-eda5f8b94e9d") + ) + (gr_line + (start 160.9 140.5) + (end 161.7 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "b7878612-ec05-578a-b6bc-a585ae66410f") + ) + (gr_line + (start 162 157) + (end 161.2 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "cd6af73e-4d80-5b67-b089-a36575ee79d0") + ) + (gr_line + (start 162.2 140.5) + (end 163 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "fa67187e-ef24-5fd6-b707-0826f86595da") + ) + (gr_line + (start 163.3 157) + (end 162.5 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "c19669ff-2796-59fa-8d21-374f70cc47a1") + ) + (gr_line + (start 163.5 140.5) + (end 164.3 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "017159d4-f763-5935-96be-819d9cf7878e") + ) + (gr_line + (start 164.6 157) + (end 163.8 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "3b334bf8-d470-576e-8018-5c023737fbfa") + ) + (gr_line + (start 164.8 140.5) + (end 165.6 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "c1e3293a-42b2-5558-b6aa-48e5a4276edf") + ) + (gr_line + (start 165.9 157) + (end 165.1 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "f567ed85-7e5a-5353-a3f2-497dde11e131") + ) + (gr_line + (start 166.1 140.5) + (end 166.9 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "ead94f5c-d608-5c11-9d40-ec05ada8d73d") + ) + (gr_line + (start 167.2 157) + (end 166.4 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "9bec74a1-b2b0-5663-8243-5e9fe9325dbf") + ) + (gr_line + (start 167.4 140.5) + (end 168.2 140.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "f78963f3-3bdf-5404-b632-3b6521f61c77") + ) + (gr_line + (start 168.5 140.5) + (end 168.5 141.3) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "c6e5c586-d62a-554c-9efe-2237f792fca4") + ) + (gr_line + (start 168.5 141.8) + (end 168.5 142.6) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "a5299371-ef8c-518b-a9d5-9e8a242ac835") + ) + (gr_line + (start 168.5 143.1) + (end 168.5 143.9) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "eae4089a-dce4-52fa-aba8-5bb5072f13f3") + ) + (gr_line + (start 168.5 144.4) + (end 168.5 145.2) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "960176a3-1513-546b-995b-a38341db4120") + ) + (gr_line + (start 168.5 145.7) + (end 168.5 146.5) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "c9fa2037-2c3c-5a66-9df9-41d3bc1eb88e") + ) + (gr_line + (start 168.5 147) + (end 168.5 147.8) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "8d353170-b534-5f6e-b0a2-5601ef413400") + ) + (gr_line + (start 168.5 148.3) + (end 168.5 149.1) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "ae95f6b3-86a4-591b-9619-b43cfb481f89") + ) + (gr_line + (start 168.5 149.6) + (end 168.5 150.4) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "fa9dcc79-d45b-5629-aaf5-febdb74782dd") + ) + (gr_line + (start 168.5 150.9) + (end 168.5 151.7) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "67587d58-c9fa-51d6-b90c-2fae3175d65b") + ) + (gr_line + (start 168.5 152.2) + (end 168.5 153) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "c4fcb0ff-8d91-5c60-81b2-0546bd284ee2") + ) + (gr_line + (start 168.5 153.5) + (end 168.5 154.3) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "33c787fb-1f73-52fc-b3e3-865cdc8d5da4") + ) + (gr_line + (start 168.5 154.8) + (end 168.5 155.6) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "3b734e22-c7bc-5bbc-b9b8-5f790cbf1389") + ) + (gr_line + (start 168.5 156.1) + (end 168.5 156.9) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "cf25e2e9-2244-5dbc-8a41-12843d40441e") + ) + (gr_line + (start 168.5 157) + (end 167.7 157) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "1e5e9d07-9557-5786-a182-7f0313e5797f") + ) + (gr_line + (start 169 136) + (end 169 162) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "cd62f738-1d93-5fc0-9290-2414676652c8") + ) + (gr_line + (start 169 162) + (end 143 162) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "1af3fb4e-80e9-5ef1-b3dc-5a02d2828ea8") + ) + (gr_arc + (start 172.845 126.797) + (mid 172.101051 128.593051) + (end 170.305 129.336999) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "c62b295c-ee54-5fb8-a84a-62d59f4f6f07") + ) + (gr_line + (start 172.845 126.797) + (end 172.845 100.28) + (stroke + (width 0.12) + (type default) + ) + (layer "F.SilkS") + (uuid "4cfe669d-785f-544f-8f26-a6120f2d5aa8") + ) + (gr_rect + (start 141.57 101.93) + (end 172.37 102.329999) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "a63c3bd0-77b3-5a7b-985f-217cdbe9ba3d") + ) + (gr_rect + (start 141.814188 97.13) + (end 147.125811 101.93) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "c3c1afd7-b296-5fb5-9222-3bc5748a47b7") + ) + (gr_line + (start 144.47 102.43) + (end 144.47 96.63) + (stroke + (width 0.08) + (type default) + ) + (layer "Dwgs.User") + (uuid "9b0e8653-6263-5653-ad4c-8a9cbb9d2601") + ) + (gr_rect + (start 148.530981 96.13) + (end 165.409018 101.93) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "7faaeb3d-233c-5538-91e1-95c4103ad5db") + ) + (gr_rect + (start 166.814188 97.13) + (end 172.125811 101.93) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "8566ee06-7e9b-58cd-9c1f-9d311905cfec") + ) + (gr_line + (start 169.47 102.43) + (end 169.47 96.63) + (stroke + (width 0.08) + (type default) + ) + (layer "Dwgs.User") + (uuid "b85e91f4-b8d4-5ff6-8d7a-e6ef71e6fe7f") + ) + (gr_line + (start 100 119) + (end 136 119) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "1dc7a9fd-03af-4394-8ed1-9a6edc5f15e6") + ) + (gr_line + (start 100 180) + (end 100 119) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "f3fe1b44-d774-4285-b572-67c64ac82b95") + ) + (gr_line + (start 136 100) + (end 182 100) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "c7599f57-6a67-4917-b673-436faff51ee4") + ) + (gr_line + (start 136 119) + (end 136 100) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "390e3d7e-1ebd-4f8c-9ba4-0ebdd92195a1") + ) + (gr_line + (start 182 100) + (end 182 180) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "731f9232-3e68-476f-901a-8c5f8ed62319") + ) + (gr_line + (start 182 180) + (end 100 180) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "17ad1955-d7db-47eb-a736-baff736aac39") + ) + (gr_text "HEADER GUIDES" + (at 120.7 151 0) + (layer "F.SilkS") + (uuid "2b9b8e99-a473-51bc-8241-448388f63fcb") + (effects + (font + (size 0.85 0.85) + (thickness 0.12) + ) + ) + ) + (gr_text "BACK" + (at 146.25 175 0) + (layer "F.SilkS") + (uuid "9e13f54b-c35f-4d9f-84ff-2be2da0ab076") + (effects + (font + (size 0.9 0.9) + (thickness 0.15) + ) + ) + ) + (gr_text "DRAFT - NOT FOR FAB" + (at 156 178 0) + (layer "F.SilkS") + (uuid "875ba70f-7139-4924-a69c-d2e171f3f526") + (effects + (font + (size 0.9 0.9) + (thickness 0.15) + ) + ) + ) + (gr_text "SELECT" + (at 158.25 175 0) + (layer "F.SilkS") + (uuid "e42ffe5c-7aa5-4770-8cfb-0e94ee336881") + (effects + (font + (size 0.9 0.9) + (thickness 0.15) + ) + ) + ) + (gr_text "NEXT" + (at 170.25 175 0) + (layer "F.SilkS") + (uuid "386e2ef9-9cf9-455d-933f-67c41ac75aea") + (effects + (font + (size 0.9 0.9) + (thickness 0.15) + ) + ) + ) + (gr_text "ESP32 HW678" + (at 120.7 148 0) + (layer "F.SilkS") + (uuid "f45876c7-f270-4231-bfa4-b69ded09f3a4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (gr_text "26mm OLED" + (at 156 152 0) + (layer "F.SilkS") + (uuid "915becba-730c-42f7-8457-618fb5610a07") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (gr_text "MAX3243 REF" + (at 156.97 117.67 0) + (layer "F.SilkS") + (uuid "fa700fde-d4f3-437c-9b51-4322d0fd68e0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (gr_text "CAD METAL ENVELOPES - NOT CASE CUTOUT" + (at 156.97 109 0) + (layer "Dwgs.User") + (uuid "7980ebeb-f20b-55f4-9bb1-05d1ff647c6b") + (effects + (font + (size 0.65 0.65) + (thickness 0.1) + ) + ) + ) + (gr_text "Nominal RS-232 metal verified; ESP32 USB / antenna / assembly clearance pending" + (at 141 93.5 0) + (layer "Dwgs.User") + (uuid "de46e0e9-8a3a-42d0-b1c7-8915a9856836") + (effects + (font + (size 0.9 0.9) + (thickness 0.15) + ) + ) + ) + (gr_text "USB ACCESS - VERIFY" + (at 118 183 0) + (layer "Dwgs.User") + (uuid "c695eb94-004e-4a56-801a-0ca6797a46b2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (gr_text "VERIFY ANTENNA" + (at 120.5 129 0) + (layer "Dwgs.User") + (uuid "ce061da3-831a-4fb1-9676-9177435d649e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (gr_text "DE-9 OUT / NOMINAL MALE" + (at 156.97 106 0) + (layer "Dwgs.User") + (uuid "94303a67-2a65-4a16-9499-2b409a657ba6") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (gr_text "RF RESERVE" + (at 120.5 126 0) + (layer "Dwgs.User") + (uuid "e8228b54-6114-48a6-80ef-7f0a68175b1d") + (effects + (font + (size 1.2 1.2) + (thickness 0.15) + ) + ) + ) + (gr_text "82 x 80 mm / 2 copper layers" + (at 141 91 0) + (layer "Dwgs.User") + (uuid "a742de35-8412-472f-a2e3-0b85d84866bc") + (effects + (font + (size 1.5 1.5) + (thickness 0.15) + ) + ) + ) + (segment + (start 133.949999 169.9) + (end 133.85 169.9) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "0bead82f-1ee1-444b-8df1-7b9fe5993336") + ) + (segment + (start 150.05 169.15) + (end 150 169.2) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "10ad3d08-02fe-4fdf-8961-5a8f2df8e51f") + ) + (segment + (start 134.05 169.85) + (end 134 169.85) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "1bec74d0-10c5-4854-98ab-3856478f1f5c") + ) + (segment + (start 133.6 170) + (end 109.3 170) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "46b0da28-ea19-4da7-b86b-bda52f05f834") + ) + (segment + (start 108 168.7) + (end 108 168.72) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "4a88aaf6-4631-4c87-85f7-42c47e73e0ab") + ) + (segment + (start 155 168) + (end 161.5 168) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "51b7f32a-3173-4aba-8a70-98f9cb39acd9") + ) + (segment + (start 134.199999 169.75) + (end 134.15 169.75) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "5d9829da-980b-41ab-8df1-3cc6fdb75ebc") + ) + (segment + (start 134.7 169.25) + (end 134.199999 169.75) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "618b09bb-b1b6-457b-9355-f755248d35ff") + ) + (segment + (start 150 169.2) + (end 149.9 169.2) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "62a26a49-0768-4185-9186-ba8e8cccc57b") + ) + (segment + (start 151.35 168) + (end 150.35 169) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "64a6cfa2-ef20-4174-90fb-51361959fd76") + ) + (segment + (start 133.8 169.95) + (end 133.65 169.95) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "69bfd1a3-5b67-4a84-93b4-f7f83d5b3565") + ) + (segment + (start 149.85 169.25) + (end 134.7 169.25) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "7fdaf338-8ac7-481d-85b7-6ed49b8a35f5") + ) + (segment + (start 155 168) + (end 151.35 168) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "9deb2320-69b9-49bc-b005-31bd63f210f6") + ) + (segment + (start 134 169.85) + (end 133.949999 169.9) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "9e623456-2066-438d-b8e6-b9739fd4e0fa") + ) + (segment + (start 133.85 169.9) + (end 133.8 169.95) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "9e8737f2-db63-4b5d-92f5-540eff3134bb") + ) + (segment + (start 150.35 169) + (end 150.3 169) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "b2539077-f1f9-4d70-81e4-4048b577a61b") + ) + (segment + (start 134.15 169.75) + (end 134.05 169.85) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "b2b2b793-b0f1-4de6-949c-d12947580177") + ) + (segment + (start 150.15 169.1) + (end 150.1 169.15) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "b64ba5dd-8030-466b-9b00-c44c8d64fce4") + ) + (segment + (start 133.65 169.95) + (end 133.6 170) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "b78dde75-64b2-4290-ae80-9b8a3a06cbf4") + ) + (segment + (start 150.3 169) + (end 150.2 169.1) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "c3286c6d-0250-4bdc-ba30-f78d8faf6904") + ) + (segment + (start 150.1 169.15) + (end 150.05 169.15) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "cf05c621-c6b2-4a2f-b0fa-36a2d18f4c26") + ) + (segment + (start 149.9 169.2) + (end 149.85 169.25) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "da8b3ae1-383c-40b5-a43b-65f87e2510d8") + ) + (segment + (start 109.3 170) + (end 108 168.7) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "ea26376d-e7c6-4833-b005-eef476be3d60") + ) + (segment + (start 150.2 169.1) + (end 150.15 169.1) + (width 0.25) + (layer "F.Cu") + (net "/BTN_SELECT") + (uuid "ef76cd50-c8df-435d-8f37-edef67daca82") + ) + (segment + (start 161.6 134) + (end 161.62 134) + (width 0.25) + (layer "B.Cu") + (net "/BTN_SELECT") + (uuid "15c5caea-afd8-4f13-ad41-65aa162be77b") + ) + (segment + (start 161.5 134.1) + (end 161.6 134) + (width 0.25) + (layer "B.Cu") + (net "/BTN_SELECT") + (uuid "2b971840-588b-4f00-a60f-ef4d726679e3") + ) + (segment + (start 161.5 168) + (end 161.5 134.1) + (width 0.25) + (layer "B.Cu") + (net "/BTN_SELECT") + (uuid "38b14c4a-1117-48f1-84c2-69df406efd45") + ) + (segment + (start 144.4 125.25) + (end 135.65 125.25) + (width 0.5) + (layer "F.Cu") + (net "/GND") + (uuid "276a7101-8bcd-4fc1-a600-63095465aeb9") + ) + (segment + (start 135.65 125.25) + (end 133.4 123) + (width 0.5) + (layer "F.Cu") + (net "/GND") + (uuid "36a61d44-e817-4d3f-b487-1554bb00450c") + ) + (segment + (start 155 172.5) + (end 161.5 172.5) + (width 0.5) + (layer "F.Cu") + (net "/GND") + (uuid "5483317e-7a20-4f3a-b0f3-13553cc537fe") + ) + (segment + (start 133.4 176.34) + (end 133.4 176.35) + (width 0.5) + (layer "F.Cu") + (net "/GND") + (uuid "557bc89e-e637-4518-a38d-5e10409f6fda") + ) + (segment + (start 133.4 176.35) + (end 108 176.35) + (width 0.5) + (layer "F.Cu") + (net "/GND") + (uuid "74b97b96-d7de-4bf2-a24e-d4e3e0af732f") + ) + (segment + (start 149.5 172.5) + (end 143 172.5) + (width 0.5) + (layer "F.Cu") + (net "/GND") + (uuid "7f4000a0-39ce-4aae-85e0-cd1263ea5b3f") + ) + (segment + (start 155 172.5) + (end 149.5 172.5) + (width 0.5) + (layer "F.Cu") + (net "/GND") + (uuid "818050bc-4a91-42c9-ade1-f1035cf68e3d") + ) + (segment + (start 148.75 137.3) + (end 150.25 135.8) + (width 0.5) + (layer "F.Cu") + (net "/GND") + (uuid "892a0e9c-edf4-42c3-8068-83d1416cbd39") + ) + (segment + (start 143 172.5) + (end 134.7 172.5) + (width 0.5) + (layer "F.Cu") + (net "/GND") + (uuid "8d36b3c6-af43-4fbf-92c7-4f45f97b900c") + ) + (segment + (start 134.7 172.5) + (end 133.4 173.8) + (width 0.5) + (layer "F.Cu") + (net "/GND") + (uuid "a2623c5c-5f28-4a61-bfca-5f1273eed5a7") + ) + (segment + (start 145.54 126.67) + (end 145.55 126.65) + (width 0.5) + (layer "F.Cu") + (net "/GND") + (uuid "a4c67cfd-5fa3-484f-85f3-e3c82d59cc0b") + ) + (segment + (start 161.5 172.5) + (end 167 172.5) + (width 0.5) + (layer "F.Cu") + (net "/GND") + (uuid "a6147a48-5550-4597-8de4-1dcb3c8756ce") + ) + (segment + (start 145.55 126.65) + (end 144.4 125.5) + (width 0.5) + (layer "F.Cu") + (net "/GND") + (uuid "a8c8b3fe-60c8-42a7-8c5e-136a0cdfd590") + ) + (segment + (start 144.4 125.5) + (end 144.4 125.25) + (width 0.5) + (layer "F.Cu") + (net "/GND") + (uuid "ceda1a43-b38d-429f-9bf8-1a79383cbe18") + ) + (segment + (start 167 172.5) + (end 173.5 172.5) + (width 0.5) + (layer "F.Cu") + (net "/GND") + (uuid "e6ab044d-fd33-4080-8de7-4573f281ceb0") + ) + (segment + (start 108 176.35) + (end 108 176.34) + (width 0.5) + (layer "F.Cu") + (net "/GND") + (uuid "f3dd4cb1-362b-483a-8c86-e63d6fe311b2") + ) + (via + (at 148.75 137.3) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/GND") + (uuid "7e66538a-56b8-4c42-8443-0e3947ee0a50") + ) + (via + (at 150.25 135.8) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/GND") + (uuid "a3174b96-03c8-49f0-9f5f-417b656c8e40") + ) + (segment + (start 150.25 135.8) + (end 151.95 137.5) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "03d6ff8c-16a7-4469-b2db-8c097276ec4c") + ) + (segment + (start 148.15 168.3) + (end 148.1 168.25) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "0436d2d5-7e3c-4343-a104-b27263f50378") + ) + (segment + (start 148.15 168.45) + (end 148.15 168.3) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "0cd2f1ba-dd20-43d0-88bf-b78d25caa7f2") + ) + (segment + (start 148.25 168.7) + (end 148.25 168.65) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "0df43fc8-4848-4075-9ee2-84440d3d4c52") + ) + (segment + (start 148.1 168.25) + (end 148.1 156.55) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "114df41e-6104-445f-b52b-b623673294c3") + ) + (segment + (start 142.35 150.6) + (end 142.35 147.35) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "14253541-0b9a-498f-bf88-1d0492924bc8") + ) + (segment + (start 142.45 150.85) + (end 142.45 150.8) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "15922f8b-19cd-46aa-8710-a1ff98002c40") + ) + (segment + (start 142.45 150.8) + (end 142.4 150.75) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "188995db-0475-4b54-a8b7-65eeb5749138") + ) + (segment + (start 148.1 156.55) + (end 142.5 150.95) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "1cec3985-635b-4135-9b60-dbaec2902fff") + ) + (segment + (start 151.95 137.5) + (end 152.2 137.5) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "1e4c5737-9b1b-44d0-ada8-fe4401c0bf2c") + ) + (segment + (start 145.55 126.65) + (end 145.54 126.67) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "2b753da3-4d0e-4b90-98b5-55fb08c265a8") + ) + (segment + (start 142.4 150.75) + (end 142.4 150.65) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "2c4d2ac0-ae1a-4013-8088-567d7dad443c") + ) + (segment + (start 148.25 168.65) + (end 148.2 168.6) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "2f38905d-78e9-4853-b3d0-50b257179e7b") + ) + (segment + (start 142.35 147.35) + (end 148.75 140.95) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "356fc46f-b514-4320-b6bd-0e0d158643a8") + ) + (segment + (start 133.4 173.8) + (end 133.4 176.35) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "44e9889c-9490-432d-a008-5bfbfce28962") + ) + (segment + (start 148.75 140.95) + (end 148.75 137.3) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "45789c67-e414-4c43-bff0-c57e15992b2c") + ) + (segment + (start 148.2 168.6) + (end 148.2 168.5) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "5b48705f-d547-4a77-84fa-6e4149256b50") + ) + (segment + (start 148.2 168.5) + (end 148.15 168.45) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "68657908-8a9e-41e0-832d-7e05a448acea") + ) + (segment + (start 148.35 168.85) + (end 148.35 168.8) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "6b91cd8a-246d-4cfc-9398-242d2912fc37") + ) + (segment + (start 133.4 176.35) + (end 133.4 176.34) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "81988ad6-ff20-4617-b14e-2b3478b16bd4") + ) + (segment + (start 149.5 170) + (end 148.35 168.85) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "88c50c34-fa4a-4fb9-89c7-fb8e40fcaad2") + ) + (segment + (start 149.5 172.5) + (end 149.5 170) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "91ba911d-2d9d-4a42-a692-6376d6ed8d8a") + ) + (segment + (start 142.4 150.65) + (end 142.35 150.6) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "9889c4e3-9006-4f19-9670-ca49a4f26c11") + ) + (segment + (start 152.2 133.3) + (end 145.55 126.65) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "9e80e1c0-4aaa-4ebc-9689-497f9e2d3e92") + ) + (segment + (start 142.5 150.9) + (end 142.45 150.85) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "a5a06a16-7ca2-483f-8a85-15e8cb114c34") + ) + (segment + (start 152.2 137.5) + (end 152.2 133.3) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "b88df4ea-9af3-402e-b7ca-59ce0b2065bb") + ) + (segment + (start 142.5 150.95) + (end 142.5 150.9) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "bb6f2a19-c80b-406c-8cd5-3c98b77ac7cb") + ) + (segment + (start 152.2 137.5) + (end 152.19 137.5) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "be0612b6-9ad5-496c-af34-27fb7bb2e667") + ) + (segment + (start 152.19 137.5) + (end 152.2 137.5) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "daf2d1fc-dec8-4e75-b894-eda08e17fba7") + ) + (segment + (start 148.35 168.8) + (end 148.25 168.7) + (width 0.5) + (layer "B.Cu") + (net "/GND") + (uuid "e1a92e9c-97e5-4400-b977-42536a8d2f2d") + ) + (segment + (start 157 136.1) + (end 162.9 136.1) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "035f44c0-74b7-4161-a7cd-674edb64837e") + ) + (segment + (start 150.15 132.699999) + (end 150.3 132.699999) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "073a79bf-6f12-4c76-ba49-fbbfb977d470") + ) + (segment + (start 154.73 137.5) + (end 155.25 137.5) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "1808790d-c6c4-41e4-8d89-55db5020f596") + ) + (segment + (start 150.3 132.699999) + (end 150.35 132.65) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "18bac46c-c87a-4575-b8af-1934ea6110c4") + ) + (segment + (start 149.85 132.85) + (end 149.9 132.85) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "20378a0c-b433-42ba-a643-c5af22ce09ed") + ) + (segment + (start 148.7 134) + (end 149.85 132.85) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "28595a1b-947e-4fdd-be3e-d725cdabbcd4") + ) + (segment + (start 156.5 136.3) + (end 156.55 136.3) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "361c324e-8744-478b-be5c-40c6d3d8e6ee") + ) + (segment + (start 143 134) + (end 148.7 134) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "4049aa0f-3f17-41c6-b441-9570a4d1df85") + ) + (segment + (start 150.1 132.75) + (end 150.15 132.699999) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "49bb5dc7-5ca7-4d9c-8bb0-79ddb15d928f") + ) + (segment + (start 156.8 136.15) + (end 156.95 136.15) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "4db270fc-c773-4b79-b538-bf1c5924ee02") + ) + (segment + (start 156.4 136.4) + (end 156.5 136.3) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "56ecb5e9-0ff9-490c-8319-32e1c98dad95") + ) + (segment + (start 156.65 136.25) + (end 156.7 136.2) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "5ca9fbf4-0761-4787-a650-a91f24622482") + ) + (segment + (start 152.65 132.65) + (end 154 134) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "5e71cee0-5251-4a9d-9a39-a542dbccc3ef") + ) + (segment + (start 156.95 136.15) + (end 157 136.1) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "757e1216-0b80-4fbf-8378-491399e3684c") + ) + (segment + (start 149.95 132.8) + (end 150 132.8) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "79379f9c-e912-4b19-af4c-1638bb948703") + ) + (segment + (start 156.35 136.4) + (end 156.4 136.4) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "82ca8e7e-0080-42a7-8f1a-5b3e1572d519") + ) + (segment + (start 155.25 137.5) + (end 156.35 136.4) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "9548a695-9c5c-4071-b37a-75f34b59b132") + ) + (segment + (start 150.05 132.75) + (end 150.1 132.75) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "97355a54-7801-4a02-8b6f-e1d31d364035") + ) + (segment + (start 156.7 136.2) + (end 156.75 136.2) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "9a29d7b6-f09f-4fca-8184-2491420d478f") + ) + (segment + (start 150 132.8) + (end 150.05 132.75) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "a2b2baa5-e50d-449a-ab05-53aaaf15c06c") + ) + (segment + (start 156.6 136.25) + (end 156.65 136.25) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "bc45aa48-f842-4e48-9b9c-c340ca438081") + ) + (segment + (start 156.55 136.3) + (end 156.6 136.25) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "d88dfd01-7676-427f-802c-36b0277cc6c1") + ) + (segment + (start 150.35 132.65) + (end 152.65 132.65) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "da453fcc-84cc-470b-bc5a-49aa69700fa2") + ) + (segment + (start 156.75 136.2) + (end 156.8 136.15) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "de5c3ecf-f02d-4f7b-ae20-dc89513ecad3") + ) + (segment + (start 149.9 132.85) + (end 149.95 132.8) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "eab2ad52-ceaa-4fcb-ba9d-336bbc8745de") + ) + (segment + (start 162.9 136.1) + (end 165 134) + (width 0.5) + (layer "F.Cu") + (net "/+3V3") + (uuid "f94e272d-4022-46b3-84f0-b3549713741a") + ) + (segment + (start 134.05 121.75) + (end 134.1 121.75) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "00b004e4-0459-4fa2-970e-10b1d2cb17d9") + ) + (segment + (start 133.65 121.6) + (end 133.699999 121.65) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "00c11337-3713-43be-a45f-6afc36b05066") + ) + (segment + (start 132.75 121.75) + (end 132.8 121.7) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "0a16a997-2e4b-48c0-881e-0696fb2186bc") + ) + (segment + (start 132.1 122.5) + (end 132.1 122.4) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "12d128d8-8433-49f0-8ff9-cce16d573ea7") + ) + (segment + (start 133.15 121.6) + (end 133.65 121.6) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "165fee85-55a8-463a-b271-5597681377de") + ) + (segment + (start 132.55 121.85) + (end 132.6 121.85) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "1c2d255f-f246-44e7-893a-1fb50177c94d") + ) + (segment + (start 132.15 122.35) + (end 132.15 122.3) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "20510f4d-5a4c-4848-b789-4d5b857706a6") + ) + (segment + (start 143 126.65) + (end 143 126.67) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "23930ecc-c4b7-4a3f-80cb-a56f567a2d8a") + ) + (segment + (start 154 136.75) + (end 154.75 137.5) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "27bfb939-d170-4d17-9aab-8d68ea6995ca") + ) + (segment + (start 132.15 122.3) + (end 132.25 122.2) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "2b4d8c17-0007-4388-870c-063dc816dc33") + ) + (segment + (start 132.1 122.4) + (end 132.15 122.35) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "307bf71d-5c73-4d37-9181-527de4b9861f") + ) + (segment + (start 133.85 121.65) + (end 133.9 121.7) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "3265a2ff-1e86-499d-b9ab-51a73f1d684a") + ) + (segment + (start 131.3 132.3) + (end 132 131.6) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "339d6c09-f678-451d-9130-7fa813a9176e") + ) + (segment + (start 154.75 137.5) + (end 154.73 137.5) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "40b1d433-ac1d-4dae-ab85-9555482c1865") + ) + (segment + (start 143 126.67) + (end 143 126.65) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "411bf780-bfd5-4830-ba09-439dde2b594b") + ) + (segment + (start 132.25 122.15) + (end 132.55 121.85) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "50140d6d-78e2-47d0-9e4e-2d9d5090d3d5") + ) + (segment + (start 132.9 121.7) + (end 132.949999 121.65) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "55eb620d-70a5-4549-8a29-92acee97682f") + ) + (segment + (start 134.199999 121.85) + (end 134.25 121.85) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "5b752018-3f5c-40fe-9975-6c1040b84068") + ) + (segment + (start 132.05 122.7) + (end 132.05 122.55) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "6952e7da-8b70-48a2-8c1d-5ddea1fe70a5") + ) + (segment + (start 154 134) + (end 154 136.75) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "6bb98a8c-ace7-48cb-8836-47b54273ebc3") + ) + (segment + (start 108 123) + (end 108 125.55) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "72933f77-f130-4ae6-a00e-a60a9b5bfd1b") + ) + (segment + (start 133.699999 121.65) + (end 133.85 121.65) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "77c87aef-a0fa-443d-8228-59c3220f0749") + ) + (segment + (start 139.05 126.65) + (end 143 126.65) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "822b4ddf-0560-4a61-8816-ffbfa7ceb197") + ) + (segment + (start 108 125.55) + (end 108 125.54) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "8527b83d-116a-4415-92c7-20c7a2a336d3") + ) + (segment + (start 109.7 132.3) + (end 131.3 132.3) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "8564a371-b4fb-4db5-8347-da0179d8ec26") + ) + (segment + (start 132.949999 121.65) + (end 133.1 121.65) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "88de81df-8af8-48a6-8b66-cb520f7690c3") + ) + (segment + (start 133.1 121.65) + (end 133.15 121.6) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "88fe4b4a-8cb5-469c-8c86-e91345ee2908") + ) + (segment + (start 143 126.65) + (end 143 134) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "8fdf9680-a2dc-4d68-9f81-9c860179e468") + ) + (segment + (start 132.25 122.2) + (end 132.25 122.15) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "920c94f3-9f80-4f2f-aa82-fe99fc4acae2") + ) + (segment + (start 108 125.54) + (end 108 125.55) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "95784d76-08dd-4e13-abe2-5673864120ee") + ) + (segment + (start 132.8 121.7) + (end 132.9 121.7) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "abdf8c0e-dad4-4205-abac-aa303cbcb753") + ) + (segment + (start 132.05 122.55) + (end 132.1 122.5) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "ad81d4f3-eccd-4bd8-b2c0-205b56055b3c") + ) + (segment + (start 108 125.55) + (end 109.7 127.25) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "b2e0c9d5-4de8-44ef-be31-f5d4d01b2476") + ) + (segment + (start 132 131.6) + (end 132 122.75) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "b7b373fd-4031-48b3-bcf8-86c350e78ec6") + ) + (segment + (start 109.7 127.25) + (end 109.7 132.3) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "bc4b1725-975a-4d58-b515-dbc819f1d727") + ) + (segment + (start 133.9 121.7) + (end 134 121.7) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "bf8973b5-090d-4cb6-bd87-cde74f0e528f") + ) + (segment + (start 134.25 121.85) + (end 139.05 126.65) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "bfbec666-c9e2-42a5-a45c-60701bd60fda") + ) + (segment + (start 132 122.75) + (end 132.05 122.7) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "d0a23da8-a290-4361-82aa-b5a4f262116d") + ) + (segment + (start 134.1 121.75) + (end 134.199999 121.85) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "e3d4108b-b4d5-446d-877e-05ba83d2802a") + ) + (segment + (start 134 121.7) + (end 134.05 121.75) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "ef8afe5a-439e-4f0d-9cc2-ae9f044a6749") + ) + (segment + (start 132.699999 121.75) + (end 132.75 121.75) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "f6479d4b-fbc0-47b6-9b84-23bc30cf35c6") + ) + (segment + (start 132.6 121.85) + (end 132.699999 121.75) + (width 0.5) + (layer "B.Cu") + (net "/+3V3") + (uuid "f85da337-781c-4f5f-85b5-c0f4f1e5e7df") + ) + (segment + (start 132.9 131.949999) + (end 133.05 131.949999) + (width 0.25) + (layer "F.Cu") + (net "/RS_DCD") + (uuid "0879c62e-77a6-4793-a4ae-b8c5860c8a2d") + ) + (segment + (start 108 130.62) + (end 108 130.6) + (width 0.25) + (layer "F.Cu") + (net "/RS_DCD") + (uuid "511444a2-c1d8-4a96-8585-7edc397fda06") + ) + (segment + (start 133.05 131.949999) + (end 133.1 131.9) + (width 0.25) + (layer "F.Cu") + (net "/RS_DCD") + (uuid "65049537-3e20-4639-9f69-a30e34405242") + ) + (segment + (start 108 130.6) + (end 108.3 130.6) + (width 0.25) + (layer "F.Cu") + (net "/RS_DCD") + (uuid "6826e019-f115-495f-ae07-d8637b040299") + ) + (segment + (start 132.699999 132.05) + (end 132.75 132.05) + (width 0.25) + (layer "F.Cu") + (net "/RS_DCD") + (uuid "7f003c6f-f106-4df1-bb97-676d0eab4da2") + ) + (segment + (start 142.85 131.9) + (end 148.1 126.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_DCD") + (uuid "8f0d756a-6380-4e82-b65c-17d2f12cf462") + ) + (segment + (start 148.1 126.65) + (end 148.08 126.67) + (width 0.25) + (layer "F.Cu") + (net "/RS_DCD") + (uuid "a42acdd9-5f2f-47c0-aa8e-710f0f5a76a5") + ) + (segment + (start 132.75 132.05) + (end 132.8 132) + (width 0.25) + (layer "F.Cu") + (net "/RS_DCD") + (uuid "b82a9bdb-29e4-4a06-aa68-8f6bff65c40d") + ) + (segment + (start 132.6 132.15) + (end 132.699999 132.05) + (width 0.25) + (layer "F.Cu") + (net "/RS_DCD") + (uuid "bcd78f10-d97f-4acd-90a1-2f51d40e5c5b") + ) + (segment + (start 132.85 132) + (end 132.9 131.949999) + (width 0.25) + (layer "F.Cu") + (net "/RS_DCD") + (uuid "dcdadde7-420f-4e53-a917-e7f92cb57c44") + ) + (segment + (start 108.3 130.6) + (end 109.85 132.15) + (width 0.25) + (layer "F.Cu") + (net "/RS_DCD") + (uuid "dd2eb9c2-f7ac-4f41-a311-39f98b1032b3") + ) + (segment + (start 132.8 132) + (end 132.85 132) + (width 0.25) + (layer "F.Cu") + (net "/RS_DCD") + (uuid "e4dad100-91a8-4106-8fad-09e7b57c68e6") + ) + (segment + (start 133.1 131.9) + (end 142.85 131.9) + (width 0.25) + (layer "F.Cu") + (net "/RS_DCD") + (uuid "eb39c8eb-56cd-4331-b798-e769bfd19c05") + ) + (segment + (start 109.85 132.15) + (end 132.6 132.15) + (width 0.25) + (layer "F.Cu") + (net "/RS_DCD") + (uuid "f898bff4-6d9a-4540-b13f-5c50db6936d0") + ) + (segment + (start 141.2 131) + (end 144.05 128.15) + (width 0.25) + (layer "F.Cu") + (net "/RS_DSR") + (uuid "05c071ab-5ab2-4a6a-9b7a-47a135b72d23") + ) + (segment + (start 108 133.16) + (end 108 133.15) + (width 0.25) + (layer "F.Cu") + (net "/RS_DSR") + (uuid "09bb2a2d-83c8-4dca-8970-811e863e6f35") + ) + (segment + (start 108 133.15) + (end 131.55 133.15) + (width 0.25) + (layer "F.Cu") + (net "/RS_DSR") + (uuid "416061b0-afd1-40ea-8233-6a254a6d1cae") + ) + (segment + (start 134.85 131) + (end 141.2 131) + (width 0.25) + (layer "F.Cu") + (net "/RS_DSR") + (uuid "62b346f2-6fb0-422d-b514-c36feb0b9ab1") + ) + (via + (at 134.85 131) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/RS_DSR") + (uuid "0742cf87-0d6e-429d-96a6-8c955b43bdd1") + ) + (via + (at 144.05 128.15) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/RS_DSR") + (uuid "c4c4c959-0946-4f7d-bac8-bfd62e9d2c21") + ) + (via + (at 131.55 133.15) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/RS_DSR") + (uuid "db5a60be-72af-4440-9608-72515518b919") + ) + (segment + (start 144.4 126.1) + (end 144.4 126.05) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "06d7a1d9-24c5-4ace-94ef-9659684f7f9e") + ) + (segment + (start 144.95 125.5) + (end 145.05 125.5) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "08450a37-a65f-4f74-b0a9-185217ccee72") + ) + (segment + (start 144.6 125.8) + (end 144.6 125.75) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "0a8eb6f4-bcc6-4f58-aed6-7334edb37782") + ) + (segment + (start 156.2 125.5) + (end 156.25 125.5) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "1020a927-f7d0-448d-926a-eb48db311fa4") + ) + (segment + (start 144.3 126.3) + (end 144.35 126.25) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "12dea520-cd08-4f77-bee4-5dd3cebea913") + ) + (segment + (start 133.8 131.85) + (end 133.85 131.8) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "23e841d4-2dc9-48d6-8351-7251a8987e37") + ) + (segment + (start 144.8 125.6) + (end 144.85 125.6) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "2667b6d5-d063-4c51-88e6-7ef473dffb25") + ) + (segment + (start 144.35 126.25) + (end 144.35 126.15) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "2f144139-8cde-4289-9803-27e2b7142960") + ) + (segment + (start 156.15 125.45) + (end 156.2 125.5) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "355d9bf5-79e4-4041-850e-d6ac787b174d") + ) + (segment + (start 156.3 125.55) + (end 156.35 125.55) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "3b4bd87e-274b-4233-a879-91e363bab0e9") + ) + (segment + (start 155.95 125.4) + (end 156 125.45) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "3c84aca8-86fb-4cd8-8e95-02b648cfb4b0") + ) + (segment + (start 156.35 125.55) + (end 156.4 125.6) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "3ca35d3a-cd0a-42ed-ba01-aa634f87c9e8") + ) + (segment + (start 131.55 133.15) + (end 132.8 131.9) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "3d66bd24-9cdc-43f1-88ca-e035860329dd") + ) + (segment + (start 134.15 131.65) + (end 134.199999 131.65) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "47e9eaa3-1684-4419-be27-ef470d8bb3d1") + ) + (segment + (start 144.35 126.15) + (end 144.4 126.1) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "4b3bdc70-11d0-4829-9dd2-b2359d0407f1") + ) + (segment + (start 144.45 125.95) + (end 144.6 125.8) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "4bb40287-f9f8-430d-b626-bda85d624bf2") + ) + (segment + (start 158.25 126.65) + (end 158.24 126.67) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "4e483fa6-0145-44f8-9a76-cc8c193c3ed2") + ) + (segment + (start 156.4 125.6) + (end 156.45 125.6) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "53fdfa14-6266-4c8b-ad4e-dcfc908fd327") + ) + (segment + (start 144.25 126.55) + (end 144.3 126.5) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "54e57763-d970-4338-83c9-704b188b0885") + ) + (segment + (start 133.65 131.85) + (end 133.8 131.85) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "590c85f5-4848-41bc-9718-dbbc6a6e24d1") + ) + (segment + (start 144.05 128.15) + (end 144.25 127.95) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "5cad6bcb-168b-45a5-b993-5f32675e41b1") + ) + (segment + (start 156.45 125.6) + (end 157.5 126.65) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "68408121-a8a9-4f97-8fec-9d9652d58c1d") + ) + (segment + (start 132.8 131.9) + (end 133.6 131.9) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "69e1cd46-8206-4c1b-a592-6951fb260a9d") + ) + (segment + (start 144.45 126) + (end 144.45 125.95) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "6e3ec90e-8e1e-4454-9949-035509dd689a") + ) + (segment + (start 133.85 131.8) + (end 133.949999 131.8) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "71630b83-5d90-4947-92c7-c02d425c9b8a") + ) + (segment + (start 133.949999 131.8) + (end 134 131.75) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "7dac5b9b-1597-4822-8abc-d31e1ffec27e") + ) + (segment + (start 134.199999 131.65) + (end 134.85 131) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "800c3a31-296c-40d3-90dd-13ce67e91d7f") + ) + (segment + (start 156.25 125.5) + (end 156.3 125.55) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "819fb2dc-a9c9-4f70-a495-e2937b8109db") + ) + (segment + (start 145.2 125.45) + (end 145.25 125.4) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "8a923ffc-3736-437a-8b86-922f5537d609") + ) + (segment + (start 134 131.75) + (end 134.05 131.75) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "8bd1671b-26f2-425e-b322-140e316e332c") + ) + (segment + (start 144.25 127.95) + (end 144.25 126.55) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "9afb488d-0be7-40bf-91d9-0e482e8367c3") + ) + (segment + (start 134.05 131.75) + (end 134.15 131.65) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "a1696008-2575-4a40-8a74-c15794cda589") + ) + (segment + (start 157.5 126.65) + (end 158.25 126.65) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "a9028dfc-85c8-49b2-b5cf-f4f75a00e841") + ) + (segment + (start 144.65 125.75) + (end 144.8 125.6) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "bad31385-de38-4009-85a6-3223573c97d2") + ) + (segment + (start 144.3 126.5) + (end 144.3 126.3) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "bec71c36-0374-42ec-ad07-380fdfb1577e") + ) + (segment + (start 145.05 125.5) + (end 145.1 125.45) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "c19a2f1c-52c1-42a5-bded-a50e6488445e") + ) + (segment + (start 156 125.45) + (end 156.15 125.45) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "ca7ddc92-b819-4e8b-8dcf-28c914c7d6fa") + ) + (segment + (start 144.4 126.05) + (end 144.45 126) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "d0b61bf6-f3ed-46cd-82e8-420d25bc6545") + ) + (segment + (start 144.85 125.6) + (end 144.95 125.5) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "d5ce829f-fbe1-4351-a024-c3beee238a15") + ) + (segment + (start 145.25 125.4) + (end 155.95 125.4) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "da682355-864b-4135-bcf9-63a9a5d020e4") + ) + (segment + (start 144.6 125.75) + (end 144.65 125.75) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "ebe4c140-da32-4d18-a8e7-9b63c383b488") + ) + (segment + (start 133.6 131.9) + (end 133.65 131.85) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "ec90855c-1ea7-4c74-a026-20850acae409") + ) + (segment + (start 145.1 125.45) + (end 145.2 125.45) + (width 0.25) + (layer "B.Cu") + (net "/RS_DSR") + (uuid "f6e505b2-9580-457f-aee5-18a359e952a1") + ) + (segment + (start 147.7 141.15) + (end 150.25 138.6) + (width 0.25) + (layer "F.Cu") + (net "/RS_RI") + (uuid "2358037a-fece-481d-a543-e6dbbfa8d6eb") + ) + (segment + (start 134.85 141.15) + (end 147.7 141.15) + (width 0.25) + (layer "F.Cu") + (net "/RS_RI") + (uuid "799e0f85-ba42-488f-90c1-d60dc7dff980") + ) + (via + (at 150.25 138.6) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/RS_RI") + (uuid "340f5a04-e14f-4625-b183-cdb6050e7d05") + ) + (via + (at 134.85 141.15) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/RS_RI") + (uuid "f6dabd76-d1d3-4d16-bd62-6e7d14a8117c") + ) + (segment + (start 108 135.7) + (end 124.25 135.7) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "007d74ea-6ad9-49db-a784-57387542c6a1") + ) + (segment + (start 165.85 126.65) + (end 165.86 126.67) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "044d5f75-82ed-487e-b175-63525c3fd3f3") + ) + (segment + (start 150.75 138.6) + (end 150.9 138.75) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "0fd7a362-fac5-4d46-ac81-0bf89fde7864") + ) + (segment + (start 156 136.5) + (end 165.85 126.65) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "16c19532-1b7d-4251-a3f2-07d08811abe4") + ) + (segment + (start 124.25 135.7) + (end 128.65 140.1) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "18aed921-2c3d-448f-8b7f-9a51d8e005e8") + ) + (segment + (start 134 141.9) + (end 134.05 141.9) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "1e516f6c-5006-4bbe-a1d7-60514f41e496") + ) + (segment + (start 132.65 141.85) + (end 132.699999 141.85) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "2209611e-068a-46a5-be44-ed868c0f6cc1") + ) + (segment + (start 132.9 141.95) + (end 132.949999 142) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "328ca793-d45a-41c2-9f33-f6ec4f2d25fa") + ) + (segment + (start 155.15 138.7) + (end 155.25 138.7) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "3cc0ce66-5427-4a82-8471-7efd27d78d03") + ) + (segment + (start 131.05 140.25) + (end 132.65 141.85) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "443246f7-d926-4657-8a37-07fdf3cf8a3c") + ) + (segment + (start 132.75 141.9) + (end 132.8 141.9) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "4589879f-ce0d-4a0f-b8e2-f8619847430a") + ) + (segment + (start 155.85 138.15) + (end 155.85 138.1) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "45f61cb8-ad1d-4ca5-bb0d-3d26df7a61eb") + ) + (segment + (start 128.85 140.2) + (end 128.9 140.25) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "46769c25-cb67-4f1a-818d-42190b232cd4") + ) + (segment + (start 132.85 141.95) + (end 132.9 141.95) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "4bbcd6bd-afd9-4eaf-8f66-886dbd3f2c19") + ) + (segment + (start 155.85 138.1) + (end 155.9 138.05) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "4dc2388f-7f09-4efc-ae8d-5593cfd0efc5") + ) + (segment + (start 156 137.75) + (end 156 136.5) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "527da12c-1892-4783-8e1e-bbb23491cf13") + ) + (segment + (start 132.699999 141.85) + (end 132.75 141.9) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "55e3699a-7198-4f9e-9929-33c060f686db") + ) + (segment + (start 155.45 138.55) + (end 155.5 138.55) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "643622f8-985f-41ef-9f60-97b85df04a4b") + ) + (segment + (start 133.15 142.05) + (end 133.65 142.05) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "68a61771-f5e2-44b5-873b-c2d6608be07c") + ) + (segment + (start 150.9 138.75) + (end 155.1 138.75) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "705ee66b-cbc5-4058-b7cb-0e11a4849780") + ) + (segment + (start 155.9 138.05) + (end 155.9 138) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "7201c8b8-a924-4a78-8718-8639e1b84375") + ) + (segment + (start 155.1 138.75) + (end 155.15 138.7) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "736bec63-3d46-4976-bbe8-0098d9fd494f") + ) + (segment + (start 133.699999 142) + (end 133.85 142) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "741c30ae-59b3-4787-a3f1-275e27770d51") + ) + (segment + (start 133.1 142) + (end 133.15 142.05) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "74abfbb7-415e-4ca0-b282-2056d13a791b") + ) + (segment + (start 155.8 138.25) + (end 155.8 138.2) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "82d24494-1863-4798-8dab-d6acaa6af1ef") + ) + (segment + (start 155.95 137.8) + (end 156 137.75) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "9d886175-0a22-4800-bacf-d027a2594149") + ) + (segment + (start 128.8 140.2) + (end 128.85 140.2) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "9f1f508d-8f25-4417-9fbb-4732179f868d") + ) + (segment + (start 128.699999 140.1) + (end 128.8 140.2) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "a3d1dcf4-6880-4192-8846-bee0dc662857") + ) + (segment + (start 132.949999 142) + (end 133.1 142) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "a4a4809d-065a-46c4-a1e7-226fd852ac05") + ) + (segment + (start 128.9 140.25) + (end 131.05 140.25) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "a5c5d759-3948-4ec8-804a-16b172daf463") + ) + (segment + (start 133.9 141.95) + (end 133.949999 141.95) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "b3d4dd51-8a5a-4225-a7ae-2cadf307c6b9") + ) + (segment + (start 155.9 138) + (end 155.95 137.95) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "b87e55c6-667a-4320-b42e-5311956f3869") + ) + (segment + (start 150.25 138.6) + (end 150.75 138.6) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "c26004bb-2c0d-4e56-90d4-86e5c5e48e80") + ) + (segment + (start 128.65 140.1) + (end 128.699999 140.1) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "c5d95850-4d47-4dca-ac7d-8efb8e708576") + ) + (segment + (start 134.05 141.9) + (end 134.1 141.85) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "c7e1d881-ba1a-47e1-a3d3-ff3b2f386aa9") + ) + (segment + (start 134.1 141.85) + (end 134.15 141.85) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "c98b9168-743c-4c9d-ac0d-b8fc2a573dbe") + ) + (segment + (start 155.8 138.2) + (end 155.85 138.15) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "ca3aebf5-89f6-4d95-920c-7f751b4e7227") + ) + (segment + (start 133.85 142) + (end 133.9 141.95) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "cd1dab57-ea22-4859-aa5a-44a16fdf36f1") + ) + (segment + (start 155.3 138.65) + (end 155.35 138.65) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "d43c4432-114e-4488-b457-1015c677dd58") + ) + (segment + (start 155.35 138.65) + (end 155.45 138.55) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "d5c6f4dc-918d-453a-a950-6fa7ff814a53") + ) + (segment + (start 155.5 138.55) + (end 155.8 138.25) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "db004298-a5ea-4295-a340-99861f12affa") + ) + (segment + (start 134.15 141.85) + (end 134.85 141.15) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "db5ba5f3-c789-4007-84cd-56d34ab11a35") + ) + (segment + (start 133.949999 141.95) + (end 134 141.9) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "ddf51391-c4a2-4fad-a03d-2068bdaaa349") + ) + (segment + (start 155.25 138.7) + (end 155.3 138.65) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "e058474e-eea8-44c5-9566-227ab00f9713") + ) + (segment + (start 132.8 141.9) + (end 132.85 141.95) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "e6f2f3ae-4777-4a1b-95eb-fb84ec2d36b1") + ) + (segment + (start 155.95 137.95) + (end 155.95 137.8) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "ebf07a5b-1b77-4da4-9009-b5456894c1a6") + ) + (segment + (start 133.65 142.05) + (end 133.699999 142) + (width 0.25) + (layer "B.Cu") + (net "/RS_RI") + (uuid "fbe50826-5b0d-4e8e-a347-79ae25f5218e") + ) + (segment + (start 149.75 132.15) + (end 149.8 132.1) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "0348920f-ac8a-4881-925c-2379c1c042a3") + ) + (segment + (start 150.1 132) + (end 150.35 132) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "1376e497-a31b-44ba-8756-a0c3909ae497") + ) + (segment + (start 149.4 132.3) + (end 149.45 132.3) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "1ae9db6c-00ce-498f-a69a-4917829179a3") + ) + (segment + (start 149.5 132.25) + (end 149.55 132.25) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "3385b064-faba-489a-ab8f-e2efd7bc6078") + ) + (segment + (start 155.7 126.65) + (end 155.7 126.67) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "3704f2cc-141f-4d3f-86f9-3b11bfcca63c") + ) + (segment + (start 150.05 132.05) + (end 150.1 132) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "41b7e5dc-e873-4e78-add1-4a8aef2cf0f2") + ) + (segment + (start 108 138.24) + (end 108 138.25) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "4387011b-d84b-4f5c-8b46-0e07d43f6e8a") + ) + (segment + (start 150.35 132) + (end 155.7 126.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "4a9ea5ca-9548-464c-90aa-d5a11171700b") + ) + (segment + (start 148.6 133.1) + (end 149.4 132.3) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "53084fac-b12d-4262-8e8a-326bb1598e1d") + ) + (segment + (start 149.7 132.15) + (end 149.75 132.15) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "6278694c-ab84-4d18-966d-cdd87569b736") + ) + (segment + (start 149.55 132.25) + (end 149.6 132.199999) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "70ecf107-6be8-4c81-944d-b9195d0e907b") + ) + (segment + (start 149.6 132.199999) + (end 149.65 132.199999) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "7d370000-a728-42ad-8fb3-07bd56f55834") + ) + (segment + (start 130.449999 138.25) + (end 131.75 136.95) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "7d718676-b298-4fc7-a4cb-a6ac6dd3d7e5") + ) + (segment + (start 149.45 132.3) + (end 149.5 132.25) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "8a26d3a6-0e4e-47ac-914a-4e2ac03e80b8") + ) + (segment + (start 149.8 132.1) + (end 149.85 132.1) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "a4794925-fe72-46c4-bea5-8cdf2ead8bbe") + ) + (segment + (start 108 138.25) + (end 130.449999 138.25) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "bd459ed2-22b0-412a-a122-3b0e03605a8a") + ) + (segment + (start 149.9 132.05) + (end 150.05 132.05) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "c8f89618-ed14-47ff-8e60-c489062cce99") + ) + (segment + (start 149.85 132.1) + (end 149.9 132.05) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "d42d944c-5031-40e7-bab4-578d2a05e07c") + ) + (segment + (start 147.8 133.1) + (end 148.6 133.1) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "ec1a2b40-3aff-428a-8fe6-998b618b6c8e") + ) + (segment + (start 149.65 132.199999) + (end 149.7 132.15) + (width 0.25) + (layer "F.Cu") + (net "/RS_DTR") + (uuid "fc51bdbd-326c-4620-b799-b1fcbfd0abfa") + ) + (via + (at 131.75 136.95) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/RS_DTR") + (uuid "08658be1-1863-479e-9f07-e5495cbd6dfa") + ) + (via + (at 147.8 133.1) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/RS_DTR") + (uuid "1340aea3-2d46-4ed1-9de8-0ca8034ccd81") + ) + (segment + (start 146 133.8) + (end 146.05 133.8) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "0248084d-afa3-4763-af76-c2e7f6682b1d") + ) + (segment + (start 145.95 133.85) + (end 146 133.8) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "112efb7f-7f6e-4c14-b059-085b9d768d43") + ) + (segment + (start 134.25 136.7) + (end 135 135.95) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "114f9b43-3c66-4624-9f80-601579645092") + ) + (segment + (start 143.8 135.65) + (end 143.85 135.6) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "1b629dae-6bd1-467c-b26c-7d6829458264") + ) + (segment + (start 143.65 135.7) + (end 143.7 135.65) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "29aa812e-ceb4-4954-93ea-e0e61dbed4e4") + ) + (segment + (start 133.9 136.9) + (end 133.949999 136.85) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "2ba82771-b3e4-49ec-8eb9-e6f0109dd768") + ) + (segment + (start 146.8 133.1) + (end 147.8 133.1) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "428eb724-d136-49aa-b17d-f1bf07b701ec") + ) + (segment + (start 143.5 135.75) + (end 143.55 135.7) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "4dd73c8e-20f6-4f3c-b5a7-a25e3f17a4f8") + ) + (segment + (start 134 136.85) + (end 134.05 136.8) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "4fa14825-0f70-4597-974b-68a9a5d0c39f") + ) + (segment + (start 135 135.95) + (end 139.25 135.95) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "579b4ba3-370f-4439-9945-930d76e9f815") + ) + (segment + (start 143.55 135.7) + (end 143.65 135.7) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "6a20d883-0eb9-4a9a-94fc-f26197bcc7a3") + ) + (segment + (start 146.05 133.8) + (end 146.15 133.699999) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "6b66a5ca-c75c-4d31-b4ae-d4a2e9a15f9c") + ) + (segment + (start 133.949999 136.85) + (end 134 136.85) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "74c8c55a-b041-48ba-95dd-e6fd6d1b027b") + ) + (segment + (start 139.3 135.9) + (end 139.35 135.9) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "75764789-f203-4ef2-80d2-4faedf64954d") + ) + (segment + (start 139.25 135.95) + (end 139.3 135.9) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "7f67a28e-711f-4d4b-becf-833bd8e0298d") + ) + (segment + (start 145.7 133.85) + (end 145.95 133.85) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "94e837cb-2548-4220-9888-75941e47695e") + ) + (segment + (start 139.35 135.9) + (end 139.45 135.8) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "9ef743d9-8426-4834-bed0-980de0e14416") + ) + (segment + (start 143.9 135.6) + (end 143.95 135.55) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "a547aa0c-5cea-4df4-b650-8221b80f9729") + ) + (segment + (start 146.2 133.699999) + (end 146.8 133.1) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "af55d1aa-2f5a-46fd-a874-b5a1553c4bdd") + ) + (segment + (start 139.5 135.8) + (end 139.55 135.75) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "b12c92ab-832e-4169-9aff-41ba3ffe530c") + ) + (segment + (start 133.75 136.95) + (end 133.8 136.9) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "b1bfea9e-57fb-4d14-b1c8-d07bd42dadd6") + ) + (segment + (start 131.75 136.95) + (end 133.75 136.95) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "b3a5998a-950c-459b-bcf0-c2ae29297b42") + ) + (segment + (start 133.8 136.9) + (end 133.9 136.9) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "c57a802b-1684-48ad-adb3-c26e81833267") + ) + (segment + (start 146.15 133.699999) + (end 146.2 133.699999) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "ccd27ecf-fd06-46ea-863c-c89f1d7c979b") + ) + (segment + (start 134.199999 136.7) + (end 134.25 136.7) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "cf5eada0-8ffe-4196-95fd-29c61fe37a28") + ) + (segment + (start 139.45 135.8) + (end 139.5 135.8) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "e136f508-c6c0-48f4-9309-26ac55b384cf") + ) + (segment + (start 143.95 135.55) + (end 144 135.55) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "e420fea0-b424-481d-b484-7aeeb65d636a") + ) + (segment + (start 134.05 136.8) + (end 134.1 136.8) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "e57d665f-912a-4342-b9d6-d40ad59bdd9d") + ) + (segment + (start 134.1 136.8) + (end 134.199999 136.7) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "e79c4a35-690d-471e-b979-4166f54939ee") + ) + (segment + (start 144 135.55) + (end 145.7 133.85) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "ea2938f2-133c-4ac0-8ba3-ffc78c47fe09") + ) + (segment + (start 143.7 135.65) + (end 143.8 135.65) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "ef923769-1f64-493e-b7f5-b0538343a91d") + ) + (segment + (start 139.55 135.75) + (end 143.5 135.75) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "efe1f7b9-1ab5-4f2a-a800-79b99687e118") + ) + (segment + (start 143.85 135.6) + (end 143.9 135.6) + (width 0.25) + (layer "B.Cu") + (net "/RS_DTR") + (uuid "f989985e-b2f0-4d45-94ca-de930482e01e") + ) + (segment + (start 154.35 135.2) + (end 154.4 135.15) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "0852a7bd-e008-4abe-998e-a8ed91329346") + ) + (segment + (start 147.65 139.5) + (end 150.9 136.25) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "1d786d5b-4f72-42b5-a58a-af05251eab48") + ) + (segment + (start 154.55 135.1) + (end 154.6 135.1) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "22fff482-e1ae-4d60-8a80-1028ad808dd9") + ) + (segment + (start 154.7 135.05) + (end 160.8 128.949999) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "25140bf2-264f-4230-9a40-467c0424cbef") + ) + (segment + (start 154.5 135.15) + (end 154.55 135.1) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "4320d9ba-7050-423a-aa3d-273bfd36016c") + ) + (segment + (start 127.9 140.8) + (end 129.199999 139.5) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "545338f0-4e8f-4690-9e14-7b912e5cbfaf") + ) + (segment + (start 154.4 135.15) + (end 154.5 135.15) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "83b6be69-69fa-4b8b-af85-1facc6390aeb") + ) + (segment + (start 152.25 135.2) + (end 154.35 135.2) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "83dfe307-e015-470a-8fda-8603d03b6199") + ) + (segment + (start 154.65 135.05) + (end 154.7 135.05) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "89f7a330-01f4-4b61-bc2e-2d5d53c5bf4e") + ) + (segment + (start 150.9 136.25) + (end 151.2 136.25) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "8dedd1f5-2b14-4f36-9a43-b42edd75abd2") + ) + (segment + (start 136.85 139.5) + (end 147.65 139.5) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "8e8d77c6-9d75-4ca2-9a43-db2ffb2466b6") + ) + (segment + (start 160.8 126.65) + (end 160.78 126.67) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "b1d7a9f0-91bf-4768-97ed-ba0332b5066e") + ) + (segment + (start 154.6 135.1) + (end 154.65 135.05) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "bade3086-f60f-480b-9205-388151df0f0b") + ) + (segment + (start 108 140.78) + (end 108 140.8) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "cbcba429-0176-41d5-9140-647c9c4c57cd") + ) + (segment + (start 108 140.8) + (end 127.9 140.8) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "e297c3a8-19f9-43bc-96dc-15cdabf7712c") + ) + (segment + (start 160.8 128.949999) + (end 160.8 126.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "f147bc19-4c22-480b-89ae-e0a4ce8aad9e") + ) + (segment + (start 151.2 136.25) + (end 152.25 135.2) + (width 0.25) + (layer "F.Cu") + (net "/RS_RTS") + (uuid "f6466575-0fc1-4122-af44-6cf5f1cf350f") + ) + (via + (at 129.199999 139.5) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/RS_RTS") + (uuid "c176d168-0472-4188-a683-fc2e19a028ac") + ) + (via + (at 136.85 139.5) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/RS_RTS") + (uuid "e7d7193b-209f-4443-aa38-411ec082a762") + ) + (segment + (start 129.199999 139.5) + (end 136.85 139.5) + (width 0.25) + (layer "B.Cu") + (net "/RS_RTS") + (uuid "d30a98e2-d716-4d71-9233-efcdaa0a64c3") + ) + (segment + (start 153.45 138.75) + (end 153.45 137.3) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "08eda9a1-b0e4-4ed1-8d7d-cec706f0162c") + ) + (segment + (start 151.2 138.75) + (end 153.45 138.75) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "1822752c-e926-4612-9130-c36bd7cac66d") + ) + (segment + (start 132.699999 142.25) + (end 132.75 142.2) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "29524f5d-05ee-49d2-b092-6ed4a5dab357") + ) + (segment + (start 154.95 135.55) + (end 155 135.55) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "2a07e8b7-cf05-47b1-a0b9-729733a74e3c") + ) + (segment + (start 147.9 142.05) + (end 151.2 138.75) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "2aa888e6-7b0a-43a7-9b44-fba94af41883") + ) + (segment + (start 154.8 135.65) + (end 154.85 135.6) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "2f04cc30-6baf-40d0-b2e5-66b7c463c0a9") + ) + (segment + (start 130.15 143.3) + (end 131.6 143.3) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "3fbec349-6f0e-4468-93c9-7ab6beecfdd9") + ) + (segment + (start 132.949999 142.1) + (end 133.1 142.1) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "417b2bcc-17c3-4631-a75a-b885181d36de") + ) + (segment + (start 132.8 142.2) + (end 132.85 142.15) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "42937186-dc4c-423d-9929-dec907b16785") + ) + (segment + (start 131.6 143.3) + (end 132.65 142.25) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "4727a838-5f15-40bf-a14a-3377c31e8da1") + ) + (segment + (start 132.75 142.2) + (end 132.8 142.2) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "5592b004-ae21-4f23-a436-ef43d3e8c5af") + ) + (segment + (start 153.45 137.3) + (end 153.5 137.25) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "56f6e44c-d9f4-4144-8950-869e365e09d5") + ) + (segment + (start 153.7 136.7) + (end 154.75 135.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "575729f7-8e91-43fc-ba36-47bd1927aebb") + ) + (segment + (start 153.7 136.75) + (end 153.7 136.7) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "58b8f7f8-efff-41d9-a224-6c87461ab440") + ) + (segment + (start 132.65 142.25) + (end 132.699999 142.25) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "5db3c197-b840-45e3-8dc8-7d9fbc94a320") + ) + (segment + (start 154.9 135.6) + (end 154.95 135.55) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "63453903-3b03-4f43-a833-6d123462c138") + ) + (segment + (start 153.6 136.9) + (end 153.6 136.85) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "847e753c-6cc0-4300-8d7c-a3aba8914103") + ) + (segment + (start 153.5 137.25) + (end 153.5 137.1) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "8b3de05f-9c1d-4e9f-82ab-64f1d17763e7") + ) + (segment + (start 155 135.55) + (end 163.3 127.25) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "91827cb9-5a6a-4762-8824-50ef37c6c7a8") + ) + (segment + (start 163.3 127.25) + (end 163.3 126.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "93afaeb7-abae-40d8-aa7f-9d48fc08f92d") + ) + (segment + (start 153.6 136.85) + (end 153.7 136.75) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "c0c4c166-7646-41f9-b005-9fe5c7ded558") + ) + (segment + (start 163.3 126.65) + (end 163.32 126.67) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "c8faf496-576a-4fd2-85a2-4a6712eb121b") + ) + (segment + (start 153.55 137.05) + (end 153.55 136.95) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "c972b3de-08dc-4ad9-a684-3ff40523f29a") + ) + (segment + (start 154.75 135.65) + (end 154.8 135.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "d5c586b8-f48f-49a2-85c5-603ecde1972b") + ) + (segment + (start 132.9 142.15) + (end 132.949999 142.1) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "de41b70d-0a09-4906-b95a-372e092475ab") + ) + (segment + (start 154.85 135.6) + (end 154.9 135.6) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "dff09db1-54b6-467b-b9c8-25a0a8a16af2") + ) + (segment + (start 153.5 137.1) + (end 153.55 137.05) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "e0902a82-2700-41ac-b7e3-328984d82703") + ) + (segment + (start 153.55 136.95) + (end 153.6 136.9) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "efb34c99-e6f3-4563-b01e-7d740f4bb0d1") + ) + (segment + (start 133.15 142.05) + (end 147.9 142.05) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "f43d1250-7506-4948-91e6-c6ec657efc2c") + ) + (segment + (start 132.85 142.15) + (end 132.9 142.15) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "fa04e5d1-d42f-44f5-9976-09623f26d249") + ) + (segment + (start 133.1 142.1) + (end 133.15 142.05) + (width 0.25) + (layer "F.Cu") + (net "/RS_CTS") + (uuid "fc56d846-d6d0-4798-9466-b39dc5cac355") + ) + (via + (at 130.15 143.3) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/RS_CTS") + (uuid "dcb7ae49-2355-4d1a-a849-11e7673108ee") + ) + (segment + (start 108 143.32) + (end 108 143.3) + (width 0.25) + (layer "B.Cu") + (net "/RS_CTS") + (uuid "98110725-c7be-4535-a5ae-de16082fa135") + ) + (segment + (start 108 143.3) + (end 130.15 143.3) + (width 0.25) + (layer "B.Cu") + (net "/RS_CTS") + (uuid "c3ddea8c-fe2e-45e3-b878-52d6a6b3aef3") + ) + (segment + (start 108 145.86) + (end 108 145.85) + (width 0.25) + (layer "F.Cu") + (net "/RS_TX") + (uuid "0b5fa72d-991a-4b3b-ac12-185210bfe786") + ) + (segment + (start 153.15 126.65) + (end 153.16 126.67) + (width 0.25) + (layer "F.Cu") + (net "/RS_TX") + (uuid "1697acf3-2ceb-4f08-9b5a-7171c794f9f9") + ) + (segment + (start 132.6 137.2) + (end 132.65 137.2) + (width 0.25) + (layer "F.Cu") + (net "/RS_TX") + (uuid "2da27f4d-fde5-4beb-bbf4-f2c2481db546") + ) + (segment + (start 108 145.85) + (end 123.95 145.85) + (width 0.25) + (layer "F.Cu") + (net "/RS_TX") + (uuid "42df52fd-28be-4ce5-9018-df8914b0f070") + ) + (segment + (start 133.25 136.95) + (end 137.2 136.95) + (width 0.25) + (layer "F.Cu") + (net "/RS_TX") + (uuid "541ed554-1ddf-43f5-88ea-e08998ac70fd") + ) + (segment + (start 132.8 137.1) + (end 132.85 137.05) + (width 0.25) + (layer "F.Cu") + (net "/RS_TX") + (uuid "5882ed68-dc73-4463-9cd6-c34482202a5e") + ) + (segment + (start 133.199999 137) + (end 133.25 136.95) + (width 0.25) + (layer "F.Cu") + (net "/RS_TX") + (uuid "592e34ec-0ec8-4f2c-8f39-18572b5392bd") + ) + (segment + (start 145.65 133.1) + (end 146.7 133.1) + (width 0.25) + (layer "F.Cu") + (net "/RS_TX") + (uuid "5f50481d-c9db-4477-8619-81317489f86b") + ) + (segment + (start 123.95 145.85) + (end 132.6 137.2) + (width 0.25) + (layer "F.Cu") + (net "/RS_TX") + (uuid "6b60ef15-c01b-4068-a124-914ffd0b7363") + ) + (segment + (start 132.75 137.1) + (end 132.8 137.1) + (width 0.25) + (layer "F.Cu") + (net "/RS_TX") + (uuid "99719bd8-6bbb-4808-a286-2c717bb9f640") + ) + (segment + (start 133 137) + (end 133.199999 137) + (width 0.25) + (layer "F.Cu") + (net "/RS_TX") + (uuid "9a35acd8-1d72-4d0c-943a-3775752ce1f7") + ) + (segment + (start 132.949999 137.05) + (end 133 137) + (width 0.25) + (layer "F.Cu") + (net "/RS_TX") + (uuid "9e5cb45c-05d3-448c-bdd3-ab9c62cfed45") + ) + (segment + (start 137.2 136.95) + (end 138.95 135.2) + (width 0.25) + (layer "F.Cu") + (net "/RS_TX") + (uuid "b0881b7b-e09e-430b-ab52-4a4b946f0c5c") + ) + (segment + (start 132.85 137.05) + (end 132.949999 137.05) + (width 0.25) + (layer "F.Cu") + (net "/RS_TX") + (uuid "b19ccd01-e646-4c07-a2bc-b85b2b08b2c5") + ) + (segment + (start 132.65 137.2) + (end 132.75 137.1) + (width 0.25) + (layer "F.Cu") + (net "/RS_TX") + (uuid "cb2a70a8-9dfb-4dec-a52a-b404f40bcda4") + ) + (segment + (start 146.7 133.1) + (end 153.15 126.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_TX") + (uuid "fa43d81f-55ce-4300-b470-2eccd205abda") + ) + (via + (at 138.95 135.2) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/RS_TX") + (uuid "2a9e7bd7-8dd2-42db-b24b-27231e97c578") + ) + (via + (at 145.65 133.1) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/RS_TX") + (uuid "4efd3d60-2dda-4690-8c7f-1c6c5fc27632") + ) + (segment + (start 143.5 135.15) + (end 143.55 135.1) + (width 0.25) + (layer "B.Cu") + (net "/RS_TX") + (uuid "060ca1dc-a80c-4378-b5c1-4546cdda8d4b") + ) + (segment + (start 143.65 135.05) + (end 143.7 135.05) + (width 0.25) + (layer "B.Cu") + (net "/RS_TX") + (uuid "2429f1ea-c500-4c34-9a57-08de78ae554e") + ) + (segment + (start 143.6 135.1) + (end 143.65 135.05) + (width 0.25) + (layer "B.Cu") + (net "/RS_TX") + (uuid "5bdc528a-5edc-4524-8d5d-cb6be9859dc5") + ) + (segment + (start 138.95 135.2) + (end 143.35 135.2) + (width 0.25) + (layer "B.Cu") + (net "/RS_TX") + (uuid "7a59d584-272e-44c8-8571-d67509fa227e") + ) + (segment + (start 143.4 135.15) + (end 143.5 135.15) + (width 0.25) + (layer "B.Cu") + (net "/RS_TX") + (uuid "8cb1649f-4acd-427b-9db8-666caa8e5c2f") + ) + (segment + (start 143.35 135.2) + (end 143.4 135.15) + (width 0.25) + (layer "B.Cu") + (net "/RS_TX") + (uuid "9ba1ced9-6b68-4dae-add6-e3d2cd4d75b6") + ) + (segment + (start 143.7 135.05) + (end 145.65 133.1) + (width 0.25) + (layer "B.Cu") + (net "/RS_TX") + (uuid "ae1b1650-8a6e-4606-87ef-69101b3fe72e") + ) + (segment + (start 143.55 135.1) + (end 143.6 135.1) + (width 0.25) + (layer "B.Cu") + (net "/RS_TX") + (uuid "ce6e81ec-f5ae-4e1e-bbf9-07245954baab") + ) + (segment + (start 150.6 126.65) + (end 150.62 126.67) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "27858579-2885-41e4-9237-369ac7d5ee3e") + ) + (segment + (start 123.95 148.4) + (end 132.6 139.75) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "2fe470e8-052e-4f69-b01a-46c1f8881306") + ) + (segment + (start 132.65 139.75) + (end 132.75 139.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "4dea39e6-efcf-4bf3-83e7-d8b0abcc33bc") + ) + (segment + (start 142.4 132.9) + (end 142.45 132.9) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "5a6d5bb5-ab3e-4f95-9afc-8e9b5e1651b3") + ) + (segment + (start 133 139.55) + (end 133.15 139.55) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "5ec4f258-3417-4722-b525-adc14e36ab0b") + ) + (segment + (start 132.6 139.75) + (end 132.65 139.75) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "662d8d54-aa84-4d16-81ca-7aa8734e5204") + ) + (segment + (start 142.35 132.949999) + (end 142.4 132.9) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "679beec8-cb5f-4c3c-9fab-d7d370b03f50") + ) + (segment + (start 132.8 139.65) + (end 132.85 139.6) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "6b0145ea-c033-472a-bd8e-345f5ff300df") + ) + (segment + (start 142.5 132.85) + (end 142.6 132.85) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "70fb66f6-deb5-4699-bb7d-effa571a4758") + ) + (segment + (start 142.45 132.9) + (end 142.5 132.85) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "736e4133-a876-4d18-83ad-2a0649b0a9bf") + ) + (segment + (start 132.85 139.6) + (end 132.949999 139.6) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "7830d8fe-6a01-4dd0-a1aa-2f6a1ff9691f") + ) + (segment + (start 142.65 132.8) + (end 144.45 132.8) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "785f6aab-ebe2-4476-b49f-a75d98b64c44") + ) + (segment + (start 142.3 132.949999) + (end 142.35 132.949999) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "7a2820fc-35e9-408e-8e6d-1fa62e0f3416") + ) + (segment + (start 135.75 139.5) + (end 142.3 132.949999) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "870bf561-8eb8-4dbe-a63b-64a573c40a28") + ) + (segment + (start 108 148.4) + (end 123.95 148.4) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "89b2a265-02d2-42df-9f5a-20a56284c461") + ) + (segment + (start 132.75 139.65) + (end 132.8 139.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "a2af717a-5db5-40c0-9806-0620f32f1a24") + ) + (segment + (start 132.949999 139.6) + (end 133 139.55) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "aaa53fb6-e097-49d8-9c85-109521849810") + ) + (segment + (start 142.6 132.85) + (end 142.65 132.8) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "b519d784-ca35-488d-b0d2-5f4c344e7519") + ) + (segment + (start 133.15 139.55) + (end 133.199999 139.5) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "e57c7280-2dea-4c80-99b3-058966cfd1f9") + ) + (segment + (start 144.45 132.8) + (end 150.6 126.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "e764f7d1-2229-426c-896e-596f9b9fb693") + ) + (segment + (start 133.199999 139.5) + (end 135.75 139.5) + (width 0.25) + (layer "F.Cu") + (net "/RS_RX") + (uuid "f223bf23-390c-4fa6-9313-a81cc9ffa36e") + ) + (segment + (start 133.25 149.65) + (end 144 149.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_VALID") + (uuid "0f3b9c84-ecaf-427b-b4b5-df480d045d19") + ) + (segment + (start 144 149.65) + (end 154.15 139.5) + (width 0.25) + (layer "F.Cu") + (net "/RS_VALID") + (uuid "126f292f-b65c-4663-9fd1-9063bc984534") + ) + (segment + (start 133 149.7) + (end 133.199999 149.7) + (width 0.25) + (layer "F.Cu") + (net "/RS_VALID") + (uuid "1934c4e9-cc23-420f-86e8-43eb5f2ef8b6") + ) + (segment + (start 132.85 149.75) + (end 132.949999 149.75) + (width 0.25) + (layer "F.Cu") + (net "/RS_VALID") + (uuid "4dd9b60a-f6ab-40f8-b8ad-521f0cbfdb65") + ) + (segment + (start 108 150.95) + (end 131.55 150.95) + (width 0.25) + (layer "F.Cu") + (net "/RS_VALID") + (uuid "60630de0-2d87-41d0-9438-b0c24ae4f815") + ) + (segment + (start 132.949999 149.75) + (end 133 149.7) + (width 0.25) + (layer "F.Cu") + (net "/RS_VALID") + (uuid "639a9286-e75e-471c-aecc-51f89a1703cb") + ) + (segment + (start 133.199999 149.7) + (end 133.25 149.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_VALID") + (uuid "7d2d7bfd-8f9b-41d8-9e01-47cd64664e52") + ) + (segment + (start 132.6 149.9) + (end 132.65 149.9) + (width 0.25) + (layer "F.Cu") + (net "/RS_VALID") + (uuid "864b194a-ed15-44fd-bee9-2b909a7d0b0d") + ) + (segment + (start 132.8 149.8) + (end 132.85 149.75) + (width 0.25) + (layer "F.Cu") + (net "/RS_VALID") + (uuid "9b3f19a6-5453-4520-91e9-6e221c778212") + ) + (segment + (start 131.55 150.95) + (end 132.6 149.9) + (width 0.25) + (layer "F.Cu") + (net "/RS_VALID") + (uuid "aaef8d3c-73e6-4957-8d7b-e86e08789eef") + ) + (segment + (start 132.75 149.8) + (end 132.8 149.8) + (width 0.25) + (layer "F.Cu") + (net "/RS_VALID") + (uuid "b082849d-0625-4f67-8df8-0f49dc0fceaa") + ) + (segment + (start 132.65 149.9) + (end 132.75 149.8) + (width 0.25) + (layer "F.Cu") + (net "/RS_VALID") + (uuid "dc03a07d-2d4e-4cfd-bf66-ffd9a8c65dd9") + ) + (segment + (start 108 150.94) + (end 108 150.95) + (width 0.25) + (layer "F.Cu") + (net "/RS_VALID") + (uuid "e2e73970-dd8f-45a6-a2e5-a007e0f492d9") + ) + (via + (at 154.15 139.5) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/RS_VALID") + (uuid "edb0d941-6e6c-4beb-adde-115903b64227") + ) + (segment + (start 160.4 134.65) + (end 160.4 133.75) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "0225087c-1bcb-4bdc-ac0b-11fe1bff8a27") + ) + (segment + (start 157.8 138.65) + (end 157.9 138.65) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "0237718c-7284-4cf8-8958-2e7e2e829e16") + ) + (segment + (start 155.75 139.05) + (end 155.8 139.05) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "06feb1df-b4a1-47f7-b29f-54ad3dd0769f") + ) + (segment + (start 154.35 139.3) + (end 155.25 139.3) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "0d9e38c0-bf34-4dfb-9664-023c2aca6a98") + ) + (segment + (start 160.65 133.199999) + (end 165.9 127.95) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "18a95172-f9ce-43f8-b9dd-ab56b48eaaa8") + ) + (segment + (start 160.65 133.25) + (end 160.65 133.199999) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "1ca667c6-9ebc-4ed5-9aeb-90c176a57a9f") + ) + (segment + (start 168.4 126.65) + (end 168.4 126.67) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "1d3521f2-16b9-423b-99cf-49b88285035e") + ) + (segment + (start 158.45 137.95) + (end 158.5 137.9) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "241e7690-286a-467b-b825-70d989d4cb66") + ) + (segment + (start 155.4 139.25) + (end 155.45 139.2) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "292c29ff-fdd6-4748-be8f-e0783b1723c9") + ) + (segment + (start 158.55 136.5) + (end 160.4 134.65) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "2a05aea8-421b-4c13-a82e-d49ae2a0c82e") + ) + (segment + (start 166.1 127.95) + (end 166.15 127.9) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "2c7b56f3-ea24-499e-943c-643a5ef69656") + ) + (segment + (start 158.4 138.15) + (end 158.4 138.1) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "2d7c81b1-9664-4486-bb9e-46db89cc5b02") + ) + (segment + (start 157.9 138.65) + (end 158 138.55) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "310d85fb-84d9-440e-80a3-b2824fcd4d15") + ) + (segment + (start 155.25 139.3) + (end 155.3 139.25) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "3abbcebe-bad0-4a99-b6fa-0c9de5cf5526") + ) + (segment + (start 155.45 139.2) + (end 155.55 139.2) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "3c20c2c4-d2f7-4ab8-8e25-e8056d5e9b17") + ) + (segment + (start 158.5 137.9) + (end 158.5 137.75) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "3fbbbb13-12d9-42e8-9b0a-7c40cbeef8a5") + ) + (segment + (start 158 138.55) + (end 158.05 138.55) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "4260b587-cd60-4ca0-8a41-71e2e49f46a4") + ) + (segment + (start 167.7 126.65) + (end 168.4 126.65) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "42faed67-4e7b-43fb-99e8-c000bdf50d26") + ) + (segment + (start 157.7 138.7) + (end 157.75 138.7) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "4b00ef57-bf3e-4c0f-afbf-fad8837313de") + ) + (segment + (start 158.05 138.55) + (end 158.3 138.3) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "52415179-03b2-49b7-9e57-1fd6965ef4f4") + ) + (segment + (start 166.35 127.85) + (end 166.4 127.85) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "5979190c-2169-46ce-ab74-80a3c456b3b4") + ) + (segment + (start 158.4 138.1) + (end 158.45 138.05) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "7239518a-93d0-46dc-9114-703f779efb33") + ) + (segment + (start 166.15 127.9) + (end 166.3 127.9) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "751a2187-28a7-4c60-979c-8c6cb30fa02f") + ) + (segment + (start 166.4 127.85) + (end 166.45 127.8) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "7b84fad9-7675-4c56-93e4-d212b27e2990") + ) + (segment + (start 160.55 133.4) + (end 160.55 133.35) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "7bbda78d-630f-429b-816c-5b3db4ef39d0") + ) + (segment + (start 155.6 139.15) + (end 155.65 139.15) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "7c147dc7-bd94-449e-8449-3d3835bc55f1") + ) + (segment + (start 158.5 137.75) + (end 158.55 137.7) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "7df7c029-9651-4323-bd67-afbf86fe336b") + ) + (segment + (start 160.45 133.55) + (end 160.5 133.5) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "7e68296a-607b-446e-91e0-4fd4e30f18c9") + ) + (segment + (start 166.6 127.75) + (end 167.7 126.65) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "83ee0498-2133-4d02-b4f5-f634f31a5609") + ) + (segment + (start 155.55 139.2) + (end 155.6 139.15) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "84ee921d-eed7-4bf9-b609-d215cf8cb4dc") + ) + (segment + (start 157.65 138.75) + (end 157.7 138.7) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "8df2653b-b1b6-4e09-8395-27509081cf55") + ) + (segment + (start 155.65 139.15) + (end 155.75 139.05) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "93181c19-8c5f-4810-9312-5b92f8a8e13d") + ) + (segment + (start 154.15 139.5) + (end 154.35 139.3) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "a1ab164d-07ec-45d3-837b-a728db0b5b75") + ) + (segment + (start 160.5 133.449999) + (end 160.55 133.4) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "a88c6fe8-c782-4db0-9c1c-afc4a1bc3f4b") + ) + (segment + (start 156.1 138.75) + (end 157.65 138.75) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "aa1bd2fa-0c57-4275-943c-b304d750c7ea") + ) + (segment + (start 155.3 139.25) + (end 155.4 139.25) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "b2583fb3-90d9-4c21-b939-dbadb93842bf") + ) + (segment + (start 160.45 133.699999) + (end 160.45 133.55) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "c058ecbb-3e79-457e-a16c-77c319e0107c") + ) + (segment + (start 166.5 127.8) + (end 166.55 127.75) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "c4ba59ff-bea5-482f-aa58-076e60ff917d") + ) + (segment + (start 160.4 133.75) + (end 160.45 133.699999) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "ce63f9cd-80a2-422e-9d7b-251b8f54bbf7") + ) + (segment + (start 158.3 138.25) + (end 158.4 138.15) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "d1d00ff3-b284-45e3-836a-0f5cfb666142") + ) + (segment + (start 166.55 127.75) + (end 166.6 127.75) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "d464bdf1-e178-415d-8c87-f994b8d271df") + ) + (segment + (start 160.5 133.5) + (end 160.5 133.449999) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "da267940-8d82-4b44-9d44-b28614c250cf") + ) + (segment + (start 158.55 137.7) + (end 158.55 136.5) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "dbfbcc12-4305-4cd7-ba73-6f6dade960e4") + ) + (segment + (start 155.8 139.05) + (end 156.1 138.75) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "dd095126-61ad-4700-94d1-7c24aedc2f28") + ) + (segment + (start 166.3 127.9) + (end 166.35 127.85) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "e0a6a78f-8aeb-4c25-a6c2-24745d04f208") + ) + (segment + (start 158.3 138.3) + (end 158.3 138.25) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "e125d718-5926-473f-b25b-b9419465b0b1") + ) + (segment + (start 158.45 138.05) + (end 158.45 137.95) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "ec4f2ef8-ca69-4520-aee7-6b12e42625b1") + ) + (segment + (start 160.55 133.35) + (end 160.65 133.25) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "eca47b24-175d-4f12-9300-8770ec274a4d") + ) + (segment + (start 157.75 138.7) + (end 157.8 138.65) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "f120e834-5db9-4ce4-9e4b-3b2b0757fa3f") + ) + (segment + (start 166.45 127.8) + (end 166.5 127.8) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "f161c8da-9e59-484a-b14e-7f43f5410a4e") + ) + (segment + (start 165.9 127.95) + (end 166.1 127.95) + (width 0.25) + (layer "B.Cu") + (net "/RS_VALID") + (uuid "fa682992-07c2-420e-afa1-9815132276c4") + ) + (segment + (start 165.55 135.1) + (end 165.6 135.1) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "02dc98c0-22a4-4181-bd5f-c15b3864a0b1") + ) + (segment + (start 170.95 126.65) + (end 170.94 126.67) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "082f827a-5fac-4fc1-b7ea-9327de95dbd6") + ) + (segment + (start 160.55 138.55) + (end 160.6 138.55) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "08f34dfb-69ce-4ce7-aeb3-9b04878939bd") + ) + (segment + (start 148.75 149.65) + (end 159.65 138.75) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "0ba922ca-53ff-4ff4-aa44-ba3a7a579e81") + ) + (segment + (start 132.85 157.4) + (end 132.9 157.35) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "0ceed0d7-6fbe-4280-94b2-d0a040c24d12") + ) + (segment + (start 132.75 157.45) + (end 132.8 157.4) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "0f844d27-3297-4129-b62a-88f9b24d9d20") + ) + (segment + (start 164.8 135.2) + (end 165.35 135.2) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "1c0c63b2-bedd-47da-99d9-093b951bc2bc") + ) + (segment + (start 160.3 138.7) + (end 160.35 138.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "265214f3-776f-4707-be6e-993749f3c8a7") + ) + (segment + (start 159.65 138.75) + (end 160.15 138.75) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "356a3362-5fa2-4fec-8133-f131551cfdcc") + ) + (segment + (start 136.35 157.3) + (end 143.25 150.4) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "39050fdc-428c-42bf-b9b6-503034dd6891") + ) + (segment + (start 163.3 136.65) + (end 163.35 136.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "4b48b728-18e1-4601-81f3-b8ecaefcbec7") + ) + (segment + (start 108 158.55) + (end 131.55 158.55) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "4e516256-6b7e-4b1f-8110-4378fdffb15e") + ) + (segment + (start 163.35 136.65) + (end 164.8 135.2) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "511d8cef-7024-49b2-ba16-616414b45874") + ) + (segment + (start 165.35 135.2) + (end 165.4 135.15) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "6102f2be-d7bc-43c9-8776-31592f1f3d61") + ) + (segment + (start 163.25 136.7) + (end 163.3 136.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "674e64ea-133e-4e62-97cc-80fd45d7dad6") + ) + (segment + (start 163.15 136.75) + (end 163.2 136.7) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "6843cd59-bf19-47fa-babe-d080ee0c815b") + ) + (segment + (start 132.9 157.35) + (end 133.05 157.35) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "6db27179-bc9c-43c4-9cf8-da6349745aea") + ) + (segment + (start 160.6 138.55) + (end 162.4 136.75) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "75e60ab2-4a98-4ae8-8155-068279b73dd6") + ) + (segment + (start 132.5 157.65) + (end 132.699999 157.45) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "7a058c79-f8a0-4766-98d5-a3a0b992b0cc") + ) + (segment + (start 133.1 157.3) + (end 136.35 157.3) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "7d8f5976-bdc4-4d37-9557-d53d15661223") + ) + (segment + (start 162.4 136.75) + (end 163.15 136.75) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "948bf7cb-580a-40ae-a1ed-92d4e738a3e7") + ) + (segment + (start 165.5 135.15) + (end 165.55 135.1) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "966e20d6-0f78-451a-9872-2ce3b53c2d33") + ) + (segment + (start 160.35 138.65) + (end 160.4 138.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "98485ed4-b71e-46b1-aebe-781d40674d9f") + ) + (segment + (start 160.5 138.6) + (end 160.55 138.55) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "9cbac9b7-9f29-4742-9e3b-8817a22ad4af") + ) + (segment + (start 160.4 138.65) + (end 160.45 138.6) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "ab28a160-1194-460a-bcd9-cb165a51a47e") + ) + (segment + (start 165.4 135.15) + (end 165.5 135.15) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "aeb74ebd-1e8c-4d56-8864-a51873f0836e") + ) + (segment + (start 131.55 158.55) + (end 132.449999 157.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "af15de44-eabe-421e-9151-4e79076da049") + ) + (segment + (start 160.45 138.6) + (end 160.5 138.6) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "bac74aef-8326-4288-ac02-51ae39830b3d") + ) + (segment + (start 108 158.56) + (end 108 158.55) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "bf89e681-e4a6-464f-ab56-10cbb6909ab1") + ) + (segment + (start 132.699999 157.45) + (end 132.75 157.45) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "c54031ac-82a2-4859-842d-12388f4eded0") + ) + (segment + (start 165.65 135.05) + (end 165.7 135.05) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "c8271d8d-173a-4e2f-b7d6-64637d46f798") + ) + (segment + (start 165.7 135.05) + (end 170.95 129.8) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "c8e2b360-012d-4488-b2cf-178e2002fc5f") + ) + (segment + (start 132.8 157.4) + (end 132.85 157.4) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "ccc792f1-359c-4840-b668-11cd0e579bde") + ) + (segment + (start 170.95 129.8) + (end 170.95 126.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "d83d5273-2dd8-48a6-b045-79e6ec52fe50") + ) + (segment + (start 160.15 138.75) + (end 160.2 138.7) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "dbaed98a-d6c0-48cc-a3a1-1cf991e6ea4d") + ) + (segment + (start 163.2 136.7) + (end 163.25 136.7) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "dd294c47-5121-48fe-b2b2-25a09e06232a") + ) + (segment + (start 132.449999 157.65) + (end 132.5 157.65) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "dd7028dc-d34c-46ff-be75-743ed978ed53") + ) + (segment + (start 165.6 135.1) + (end 165.65 135.05) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "f3af0d60-6073-4ac0-8b99-8189f8e995e4") + ) + (segment + (start 133.05 157.35) + (end 133.1 157.3) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "f9bd78e2-495d-452f-9bea-a7b97de108df") + ) + (segment + (start 160.2 138.7) + (end 160.3 138.7) + (width 0.25) + (layer "F.Cu") + (net "/RS_OFF_N") + (uuid "fc518d80-b6c5-4201-9de9-0bb037b2faf5") + ) + (via + (at 148.75 149.65) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/RS_OFF_N") + (uuid "51565cd2-751d-4862-86b3-355e10a8d68e") + ) + (via + (at 143.25 150.4) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/RS_OFF_N") + (uuid "7887ebce-f9fa-4e8c-bc21-4cd1fdeda15c") + ) + (segment + (start 143.25 150.4) + (end 144 149.65) + (width 0.25) + (layer "B.Cu") + (net "/RS_OFF_N") + (uuid "5f95670d-40ed-470f-b7fe-03bf9edbb6a8") + ) + (segment + (start 144 149.65) + (end 148.75 149.65) + (width 0.25) + (layer "B.Cu") + (net "/RS_OFF_N") + (uuid "b88fa514-4bfc-4c87-b4e3-32d6303a2191") + ) + (segment + (start 132.8 162.25) + (end 132.85 162.25) + (width 0.25) + (layer "F.Cu") + (net "/BTN_PREVIOUS") + (uuid "03fc4497-e7a6-4047-a574-a27b3d268f81") + ) + (segment + (start 143 168) + (end 149.5 168) + (width 0.25) + (layer "F.Cu") + (net "/BTN_PREVIOUS") + (uuid "3a64a994-a8e7-418c-8fe1-5b12e8067e2d") + ) + (segment + (start 132.85 162.25) + (end 132.9 162.3) + (width 0.25) + (layer "F.Cu") + (net "/BTN_PREVIOUS") + (uuid "3d28b404-dd29-4897-8549-e156b7e1e759") + ) + (segment + (start 132.6 162.1) + (end 132.699999 162.2) + (width 0.25) + (layer "F.Cu") + (net "/BTN_PREVIOUS") + (uuid "3dd42cbc-6586-4dd2-b8be-d43eefe48906") + ) + (segment + (start 108 161.1) + (end 131.55 161.1) + (width 0.25) + (layer "F.Cu") + (net "/BTN_PREVIOUS") + (uuid "79903367-7fd7-4925-9352-ded4f18cf632") + ) + (segment + (start 137.35 162.35) + (end 143 168) + (width 0.25) + (layer "F.Cu") + (net "/BTN_PREVIOUS") + (uuid "804c0c3e-70be-4286-ac84-dbc0460809db") + ) + (segment + (start 132.699999 162.2) + (end 132.75 162.2) + (width 0.25) + (layer "F.Cu") + (net "/BTN_PREVIOUS") + (uuid "87302b9c-d9b7-427d-a39a-2cfc4fa4e21d") + ) + (segment + (start 132.9 162.3) + (end 133 162.3) + (width 0.25) + (layer "F.Cu") + (net "/BTN_PREVIOUS") + (uuid "88ae868e-c03b-44d5-83d5-459c2c65cfdd") + ) + (segment + (start 132.55 162.1) + (end 132.6 162.1) + (width 0.25) + (layer "F.Cu") + (net "/BTN_PREVIOUS") + (uuid "9ac1663b-119e-4aed-9c12-e9fdfb2eead4") + ) + (segment + (start 131.55 161.1) + (end 132.55 162.1) + (width 0.25) + (layer "F.Cu") + (net "/BTN_PREVIOUS") + (uuid "dcb60ba6-a725-4743-a08d-835316a8a110") + ) + (segment + (start 133 162.3) + (end 133.05 162.35) + (width 0.25) + (layer "F.Cu") + (net "/BTN_PREVIOUS") + (uuid "eb2cc63f-7814-4f99-b01f-711e20406b19") + ) + (segment + (start 132.75 162.2) + (end 132.8 162.25) + (width 0.25) + (layer "F.Cu") + (net "/BTN_PREVIOUS") + (uuid "f741c3d8-007d-48f8-a676-ae69576386c5") + ) + (segment + (start 133.05 162.35) + (end 137.35 162.35) + (width 0.25) + (layer "F.Cu") + (net "/BTN_PREVIOUS") + (uuid "fc13ee07-f122-4346-843c-bbef7111c916") + ) + (segment + (start 150.6 134) + (end 150.62 134) + (width 0.25) + (layer "B.Cu") + (net "/BTN_PREVIOUS") + (uuid "64cefc0c-db46-4fe9-bba7-c43c8901e416") + ) + (segment + (start 149.5 135.1) + (end 150.6 134) + (width 0.25) + (layer "B.Cu") + (net "/BTN_PREVIOUS") + (uuid "7b52384a-025c-4c72-8222-b19d34eb3dda") + ) + (segment + (start 149.5 168) + (end 149.5 135.1) + (width 0.25) + (layer "B.Cu") + (net "/BTN_PREVIOUS") + (uuid "86183c13-0c18-4d56-98e7-4068b4e6c04e") + ) + (segment + (start 159.8 137.5) + (end 159.81 137.5) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SDA") + (uuid "138ebb79-8de5-4e5d-a07a-7a69dc183f51") + ) + (segment + (start 134.8 161.55) + (end 135.75 161.55) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SDA") + (uuid "83228900-96b1-4f90-aed0-1055c48539eb") + ) + (segment + (start 108 163.64) + (end 108 163.65) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SDA") + (uuid "a9fb629f-d740-403b-b450-55f80a8c5616") + ) + (segment + (start 131.55 163.65) + (end 131.949999 163.25) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SDA") + (uuid "b178cfc6-4976-4c7b-b141-8563f3d37234") + ) + (segment + (start 135.75 161.55) + (end 159.8 137.5) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SDA") + (uuid "d8112662-ca8b-4828-8ad4-34d71ca66db7") + ) + (segment + (start 108 163.65) + (end 131.55 163.65) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SDA") + (uuid "e3fde337-8dd4-44c5-b002-a476207ef97a") + ) + (via + (at 131.949999 163.25) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/OLED_SDA") + (uuid "60cd051f-34a3-4b94-8eee-22f833af435c") + ) + (via + (at 134.8 161.55) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/OLED_SDA") + (uuid "d95f45cb-7fa4-4203-a786-0a069425e2b8") + ) + (segment + (start 134.05 162.2) + (end 134.1 162.2) + (width 0.25) + (layer "B.Cu") + (net "/OLED_SDA") + (uuid "395f4b19-8e54-4dd9-a89a-75fb300d5307") + ) + (segment + (start 133.949999 162.25) + (end 134 162.25) + (width 0.25) + (layer "B.Cu") + (net "/OLED_SDA") + (uuid "64ad62ad-fb28-4bec-8c66-19ff63314c2f") + ) + (segment + (start 133.75 162.35) + (end 133.8 162.3) + (width 0.25) + (layer "B.Cu") + (net "/OLED_SDA") + (uuid "99f92b9a-2c63-4d31-86a3-c50ed61de4cb") + ) + (segment + (start 132.85 162.35) + (end 133.75 162.35) + (width 0.25) + (layer "B.Cu") + (net "/OLED_SDA") + (uuid "a03514c3-c5b8-446e-8111-41197703c884") + ) + (segment + (start 134.25 162.1) + (end 134.8 161.55) + (width 0.25) + (layer "B.Cu") + (net "/OLED_SDA") + (uuid "b165a476-d418-4bc0-be53-22db7613c84c") + ) + (segment + (start 133.9 162.3) + (end 133.949999 162.25) + (width 0.25) + (layer "B.Cu") + (net "/OLED_SDA") + (uuid "c0a105c4-2fe4-43db-9137-75f7a178b581") + ) + (segment + (start 131.949999 163.25) + (end 132.85 162.35) + (width 0.25) + (layer "B.Cu") + (net "/OLED_SDA") + (uuid "c4c0d3b8-4b64-46ea-aee4-1695b092fdff") + ) + (segment + (start 134.1 162.2) + (end 134.199999 162.1) + (width 0.25) + (layer "B.Cu") + (net "/OLED_SDA") + (uuid "cb35cd12-0ce2-4a31-b1fa-10b04489883d") + ) + (segment + (start 134.199999 162.1) + (end 134.25 162.1) + (width 0.25) + (layer "B.Cu") + (net "/OLED_SDA") + (uuid "e02fb4e2-c685-4b68-b812-b95ab741b334") + ) + (segment + (start 134 162.25) + (end 134.05 162.2) + (width 0.25) + (layer "B.Cu") + (net "/OLED_SDA") + (uuid "e06692f2-cfa9-44dc-b60c-6bf098ab0687") + ) + (segment + (start 133.8 162.3) + (end 133.9 162.3) + (width 0.25) + (layer "B.Cu") + (net "/OLED_SDA") + (uuid "f69f0ac1-a2c4-47fc-9a32-e45fe4898d74") + ) + (segment + (start 113.85 160.35) + (end 132.3 160.35) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SCL") + (uuid "164751b8-cc4c-41d3-af66-8e32a196f735") + ) + (segment + (start 132.699999 160) + (end 132.75 160) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SCL") + (uuid "343b1ee0-5bfb-4e3c-827b-21c0bd9cd01f") + ) + (segment + (start 133.05 159.85) + (end 134.9 159.85) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SCL") + (uuid "5041f6fe-8b34-4ac1-b3a4-2a5e2864b351") + ) + (segment + (start 133 159.9) + (end 133.05 159.85) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SCL") + (uuid "54aad168-0394-4126-8933-75dbac36a806") + ) + (segment + (start 134.9 159.85) + (end 157.25 137.5) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SCL") + (uuid "55f54e2b-ba8d-4c59-97e8-2e3c26ec1d98") + ) + (segment + (start 132.85 159.95) + (end 132.9 159.9) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SCL") + (uuid "75ea04e9-65b5-443b-b015-b970d53e47e0") + ) + (segment + (start 157.25 137.5) + (end 157.27 137.5) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SCL") + (uuid "78a22315-9708-4bc9-b85f-413a088c595e") + ) + (segment + (start 132.8 159.95) + (end 132.85 159.95) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SCL") + (uuid "7c1b537b-2253-4a4e-80f1-3978dcc9f1f6") + ) + (segment + (start 132.75 160) + (end 132.8 159.95) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SCL") + (uuid "ab149b02-6a83-4fc4-9dea-b139c2066f40") + ) + (segment + (start 132.6 160.1) + (end 132.699999 160) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SCL") + (uuid "ed1989dc-a15c-424e-aef4-3565e8e083fa") + ) + (segment + (start 132.55 160.1) + (end 132.6 160.1) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SCL") + (uuid "ee10d021-1f91-4356-8db9-b833e8698b47") + ) + (segment + (start 132.3 160.35) + (end 132.55 160.1) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SCL") + (uuid "f96c33ff-4a66-46cd-a0d9-ecf32d1d68c0") + ) + (segment + (start 132.9 159.9) + (end 133 159.9) + (width 0.25) + (layer "F.Cu") + (net "/OLED_SCL") + (uuid "febb14e1-73b1-4506-be7e-9a7726f182ef") + ) + (via + (at 113.85 160.35) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/OLED_SCL") + (uuid "6a4e2c18-e2ee-4702-9bd1-6bc3cd636617") + ) + (segment + (start 108 166.2) + (end 113.85 160.35) + (width 0.25) + (layer "B.Cu") + (net "/OLED_SCL") + (uuid "089a21b5-362f-4296-af34-9a28e6ca135d") + ) + (segment + (start 108 166.18) + (end 108 166.2) + (width 0.25) + (layer "B.Cu") + (net "/OLED_SCL") + (uuid "755fd72a-c5c1-436e-be42-f58f9f3689f1") + ) + (segment + (start 165 170) + (end 167 168) + (width 0.25) + (layer "F.Cu") + (net "/BTN_NEXT") + (uuid "265017f2-e1f0-495d-8edb-3d3f6f6b913e") + ) + (segment + (start 108 171.26) + (end 108 171.25) + (width 0.25) + (layer "F.Cu") + (net "/BTN_NEXT") + (uuid "54d82efb-7505-42ca-9e3a-4ddf25c66101") + ) + (segment + (start 108 171.25) + (end 131.55 171.25) + (width 0.25) + (layer "F.Cu") + (net "/BTN_NEXT") + (uuid "6ca8dbb5-43b0-4f5e-8730-e589f9de28aa") + ) + (segment + (start 167 168) + (end 173.5 168) + (width 0.25) + (layer "F.Cu") + (net "/BTN_NEXT") + (uuid "96d62821-9fb1-4f52-ab62-84e0f3997065") + ) + (segment + (start 135.05 170) + (end 165 170) + (width 0.25) + (layer "F.Cu") + (net "/BTN_NEXT") + (uuid "9a6c35a4-c61d-4d62-8767-0193d208f2b5") + ) + (segment + (start 131.55 171.25) + (end 132 170.8) + (width 0.25) + (layer "F.Cu") + (net "/BTN_NEXT") + (uuid "fd3aca07-b286-4c7f-9028-ea89c86e8a3a") + ) + (via + (at 132 170.8) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/BTN_NEXT") + (uuid "9adb2f0f-b52e-4586-a222-c5684cda5125") + ) + (via + (at 135.05 170) + (size 0.7) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net "/BTN_NEXT") + (uuid "c399a178-1b50-4f83-9b67-3fe49dfa4f35") + ) + (segment + (start 172.6 134) + (end 172.62 134) + (width 0.25) + (layer "B.Cu") + (net "/BTN_NEXT") + (uuid "0806ce46-3896-4c68-ab6b-e07f137928b3") + ) + (segment + (start 173.5 134.9) + (end 172.6 134) + (width 0.25) + (layer "B.Cu") + (net "/BTN_NEXT") + (uuid "64ef684a-25da-413a-b297-c4ad0c8fc0a8") + ) + (segment + (start 173.5 168) + (end 173.5 134.9) + (width 0.25) + (layer "B.Cu") + (net "/BTN_NEXT") + (uuid "7c01d24d-f63d-4c94-a2b1-58aedc12fba5") + ) + (segment + (start 132.8 170) + (end 135.05 170) + (width 0.25) + (layer "B.Cu") + (net "/BTN_NEXT") + (uuid "e613856b-b1f9-4746-9ec1-db400ade8274") + ) + (segment + (start 132 170.8) + (end 132.8 170) + (width 0.25) + (layer "B.Cu") + (net "/BTN_NEXT") + (uuid "fddf7742-165d-4cf3-a456-f1d5d0fa9a61") + ) + (zone + (layers "F.Cu" "B.Cu") + (uuid "4c476672-82f3-4c68-b164-f63aa123584a") + (name "PROVISIONAL RF RESERVE - verify actual antenna clearance") + (hatch edge 0.5) + (connect_pads + (clearance 0) + ) + (min_thickness 0.25) + (keepout + (tracks not_allowed) + (vias not_allowed) + (pads not_allowed) + (copperpour not_allowed) + (footprints allowed) + ) + (placement + (enabled no) + (sheetname "") + ) + (fill + (thermal_gap 0.5) + (thermal_bridge_width 0.5) + (island_removal_mode 0) + ) + (polygon + (pts + (xy 110 119) (xy 131 119) (xy 131 132) (xy 110 132) + ) + ) + ) + (embedded_fonts no) +) diff --git a/hardware/PCB/validation/pcb-draft-3d.png b/hardware/PCB/validation/pcb-draft-3d.png index bd5ce32..2fc75b8 100644 Binary files a/hardware/PCB/validation/pcb-draft-3d.png and b/hardware/PCB/validation/pcb-draft-3d.png differ diff --git a/hardware/PCB/validation/pcb-draft.png b/hardware/PCB/validation/pcb-draft.png index 207dd76..63eb333 100644 Binary files a/hardware/PCB/validation/pcb-draft.png and b/hardware/PCB/validation/pcb-draft.png differ diff --git a/hardware/PCB/validation/pcb-draft.svg b/hardware/PCB/validation/pcb-draft.svg index c426b41..426a29a 100644 --- a/hardware/PCB/validation/pcb-draft.svg +++ b/hardware/PCB/validation/pcb-draft.svg @@ -7,13 +7,4990 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" - width="88mm" height="100mm" viewBox="-3 -12 88 100"> -