diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 8d30786..16240a6 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -193,3 +193,26 @@ jobs:
core/src/two_way.cpp core/src/timecode.cpp core/src/chirp.cpp core/src/detect.cpp core/src/g711.cpp \
-framework Foundation -o /tmp/avsync-calibration-math
/tmp/avsync-calibration-math
+
+ calibrator:
+ # Calibrator board: firmware build, host tests, KiCad ERC/DRC (hardware/calibrator).
+ runs-on: ubuntu-24.04
+ steps:
+ - uses: actions/checkout@v4
+ - name: packages
+ run: |
+ sudo apt-get update
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y gcc-riscv64-unknown-elf picolibc-riscv64-unknown-elf make
+ - name: firmware (CH32X035, RISC-V)
+ working-directory: hardware/calibrator/firmware
+ run: |
+ make test
+ make CROSS=riscv64-unknown-elf- EXTRA_CFLAGS="-isystem /usr/lib/picolibc/riscv64-unknown-elf/include"
+ - name: ERC and DRC (KiCad 9.0.9)
+ working-directory: hardware/calibrator
+ run: |
+ docker run --rm -u "$(id -u):$(id -g)" -e HOME=/tmp -v "$PWD:/work" -w /work kicad/kicad:9.0.9 \
+ sh -c 'kicad-cli sch erc --severity-error --exit-code-violations -o /tmp/erc.rpt calibrator.kicad_sch &&
+ kicad-cli sch export netlist --format kicadsexpr -o /tmp/cal.net calibrator.kicad_sch &&
+ python3 scripts/check_netlist.py /tmp/cal.net &&
+ kicad-cli pcb drc --severity-error --exit-code-violations -o /tmp/drc.rpt calibrator.kicad_pcb'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 96ee94b..41bf3da 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,16 @@
# Changelog
+## Hardware (in development)
+
+- Calibrator board v0.3 under `hardware/calibrator/` (signal contract in
+ `docs/calibrator.md`): KiCad 9 project, JLCPCB files, CH32X035 firmware with host
+ tests. USB-C powered by the phone (no battery, no cables supplied); the firmware never
+ enables USB, so a phone only supplies power, and it can be updated over USB-C with the
+ BOOT button and open tools (wchisp, chprog). Comparator with hysteresis for the sensor
+ pair, 1 nF sensor filters. AVsync logo on both sides (gold ENIG copper, white silk,
+ black mask), QR code to the project site. Board files CERN-OHL-P-2.0, firmware MIT.
+ A first batch of 10 is ordered; not tested yet.
+
## Mobile (not released yet)
- Test signal (iPhone and Android) no longer stops by itself about 5 minutes
diff --git a/docs/calibration.md b/docs/calibration.md
index 7abe920..0a46595 100644
--- a/docs/calibration.md
+++ b/docs/calibration.md
@@ -9,7 +9,7 @@ The rig is an LED and a piezo on one microcontroller pin. Parts and firmware are
## With the calibrator
The calibrator is a small board with an LED, a buzzer and two light sensors
-([signal contract](calibrator.md)). The phone powers it over a USB-C cable.
+([signal contract](calibrator.md), [hardware](../hardware/calibrator/README.md)). The phone powers it over a USB-C cable.
In the app: **Settings → With calibrator** (iPhone and Android; the clap
calibration stays as it is). Three steps:
diff --git a/hardware/calibrator/.gitignore b/hardware/calibrator/.gitignore
new file mode 100644
index 0000000..49e3036
--- /dev/null
+++ b/hardware/calibrator/.gitignore
@@ -0,0 +1,9 @@
+*.rpt
+*.dsn
+*.ses
+*-backups/
+fp-info-cache
+*.kicad_prl
+fab/gerbers/
+fab/calibrator-pos.csv
+__pycache__/
diff --git a/hardware/calibrator/3d/LED_reverse_1206.wrl b/hardware/calibrator/3d/LED_reverse_1206.wrl
new file mode 100644
index 0000000..72fb822
--- /dev/null
+++ b/hardware/calibrator/3d/LED_reverse_1206.wrl
@@ -0,0 +1,3 @@
+#VRML V2.0 utf8
+Transform { translation 0.0000 0.0000 0.0551 children [ Shape { appearance Appearance { material Material { diffuseColor 0.9 0.9 0.85 } } geometry Box { size 1.2598 0.6299 0.1102 } } ] }
+Transform { translation 0.0000 0.0000 -0.1024 children [ Shape { appearance Appearance { material Material { diffuseColor 1 1 0.6 } } geometry Box { size 0.7323 0.5512 0.2047 } } ] }
diff --git a/hardware/calibrator/3d/MLT-8530.wrl b/hardware/calibrator/3d/MLT-8530.wrl
new file mode 100644
index 0000000..5633a38
--- /dev/null
+++ b/hardware/calibrator/3d/MLT-8530.wrl
@@ -0,0 +1,3 @@
+#VRML V2.0 utf8
+Transform { translation 0.0000 0.0000 0.5906 children [ Shape { appearance Appearance { material Material { diffuseColor 0.08 0.08 0.08 } } geometry Box { size 3.3465 3.3465 1.1811 } } ] }
+Transform { translation -1.7126 0.0000 0.5906 children [ Shape { appearance Appearance { material Material { diffuseColor 0.3 0.3 0.3 } } geometry Box { size 0.1181 0.4724 0.3937 } } ] }
diff --git a/hardware/calibrator/3d/QSOP-28.wrl b/hardware/calibrator/3d/QSOP-28.wrl
new file mode 100644
index 0000000..dd13bff
--- /dev/null
+++ b/hardware/calibrator/3d/QSOP-28.wrl
@@ -0,0 +1,31 @@
+#VRML V2.0 utf8
+Transform { translation 0.0000 0.0000 0.3346 children [ Shape { appearance Appearance { material Material { diffuseColor 0.12 0.12 0.12 } } geometry Box { size 1.5354 3.8976 0.5906 } } ] }
+Transform { translation -0.4528 1.6929 0.6378 children [ Shape { appearance Appearance { material Material { diffuseColor 0.6 0.6 0.6 } } geometry Box { size 0.1969 0.1969 0.0197 } } ] }
+Transform { translation -0.9646 1.6250 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation 0.9646 1.6250 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation -0.9646 1.3750 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation 0.9646 1.3750 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation -0.9646 1.1250 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation 0.9646 1.1250 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation -0.9646 0.8750 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation 0.9646 0.8750 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation -0.9646 0.6250 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation 0.9646 0.6250 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation -0.9646 0.3750 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation 0.9646 0.3750 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation -0.9646 0.1250 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation 0.9646 0.1250 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation -0.9646 -0.1250 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation 0.9646 -0.1250 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation -0.9646 -0.3750 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation 0.9646 -0.3750 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation -0.9646 -0.6250 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation 0.9646 -0.6250 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation -0.9646 -0.8750 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation 0.9646 -0.8750 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation -0.9646 -1.1250 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation 0.9646 -1.1250 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation -0.9646 -1.3750 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation 0.9646 -1.3750 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation -0.9646 -1.6250 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
+Transform { translation 0.9646 -1.6250 0.0984 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4331 0.0984 0.0787 } } ] }
diff --git a/hardware/calibrator/3d/TS-1187A.wrl b/hardware/calibrator/3d/TS-1187A.wrl
new file mode 100644
index 0000000..86526ea
--- /dev/null
+++ b/hardware/calibrator/3d/TS-1187A.wrl
@@ -0,0 +1,7 @@
+#VRML V2.0 utf8
+Transform { translation 0.0000 0.0000 0.2953 children [ Shape { appearance Appearance { material Material { diffuseColor 0.85 0.85 0.85 } } geometry Box { size 2.0079 2.0079 0.5906 } } ] }
+Transform { translation 0.0000 0.0000 0.6299 children [ Shape { appearance Appearance { material Material { diffuseColor 0.15 0.15 0.15 } } geometry Box { size 1.1811 1.1811 0.1181 } } ] }
+Transform { translation -1.1417 -0.7382 0.0394 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4724 0.2756 0.0787 } } ] }
+Transform { translation -1.1417 0.7382 0.0394 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4724 0.2756 0.0787 } } ] }
+Transform { translation 1.1417 -0.7382 0.0394 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4724 0.2756 0.0787 } } ] }
+Transform { translation 1.1417 0.7382 0.0394 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4724 0.2756 0.0787 } } ] }
diff --git a/hardware/calibrator/3d/VEMT2500X01_RGW.wrl b/hardware/calibrator/3d/VEMT2500X01_RGW.wrl
new file mode 100644
index 0000000..00902ac
--- /dev/null
+++ b/hardware/calibrator/3d/VEMT2500X01_RGW.wrl
@@ -0,0 +1,5 @@
+#VRML V2.0 utf8
+Transform { translation 0.0000 0.0000 0.3150 children [ Shape { appearance Appearance { material Material { diffuseColor 0.75 0.8 0.85 } } geometry Box { size 0.9055 0.9055 0.6299 } } ] }
+Transform { translation 0.0000 0.0000 -0.2283 children [ Shape { appearance Appearance { material Material { diffuseColor 0.7 0.75 0.8 } } geometry Box { size 0.7087 0.7087 0.4606 } } ] }
+Transform { translation -0.9843 0.0000 0.0394 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4724 0.1575 0.0787 } } ] }
+Transform { translation 0.9843 0.0000 0.0394 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 } } geometry Box { size 0.4724 0.1575 0.0787 } } ] }
diff --git a/hardware/calibrator/LICENSE-CERN-OHL-P-2.0.txt b/hardware/calibrator/LICENSE-CERN-OHL-P-2.0.txt
new file mode 100644
index 0000000..4fe041e
--- /dev/null
+++ b/hardware/calibrator/LICENSE-CERN-OHL-P-2.0.txt
@@ -0,0 +1,199 @@
+CERN Open Hardware Licence Version 2 - Permissive
+
+
+Preamble
+
+CERN has developed this licence to promote collaboration among
+hardware designers and to provide a legal tool which supports the
+freedom to use, study, modify, share and distribute hardware designs
+and products based on those designs. Version 2 of the CERN Open
+Hardware Licence comes in three variants: this licence, CERN-OHL-P
+(permissive); and two reciprocal licences: CERN-OHL-W (weakly
+reciprocal) and CERN-OHL-S (strongly reciprocal).
+
+The CERN-OHL-P is copyright CERN 2020. Anyone is welcome to use it, in
+unmodified form only.
+
+Use of this Licence does not imply any endorsement by CERN of any
+Licensor or their designs nor does it imply any involvement by CERN in
+their development.
+
+
+1 Definitions
+
+ 1.1 'Licence' means this CERN-OHL-P.
+
+ 1.2 'Source' means information such as design materials or digital
+ code which can be applied to Make or test a Product or to
+ prepare a Product for use, Conveyance or sale, regardless of its
+ medium or how it is expressed. It may include Notices.
+
+ 1.3 'Covered Source' means Source that is explicitly made available
+ under this Licence.
+
+ 1.4 'Product' means any device, component, work or physical object,
+ whether in finished or intermediate form, arising from the use,
+ application or processing of Covered Source.
+
+ 1.5 'Make' means to create or configure something, whether by
+ manufacture, assembly, compiling, loading or applying Covered
+ Source or another Product or otherwise.
+
+ 1.6 'Notice' means copyright, acknowledgement and trademark notices,
+ references to the location of any Notices, modification notices
+ (subsection 3.3(b)) and all notices that refer to this Licence
+ and to the disclaimer of warranties that are included in the
+ Covered Source.
+
+ 1.7 'Licensee' or 'You' means any person exercising rights under
+ this Licence.
+
+ 1.8 'Licensor' means a person who creates Source or modifies Covered
+ Source and subsequently Conveys the resulting Covered Source
+ under the terms and conditions of this Licence. A person may be
+ a Licensee and a Licensor at the same time.
+
+ 1.9 'Convey' means to communicate to the public or distribute.
+
+
+2 Applicability
+
+ 2.1 This Licence governs the use, copying, modification, Conveying
+ of Covered Source and Products, and the Making of Products. By
+ exercising any right granted under this Licence, You irrevocably
+ accept these terms and conditions.
+
+ 2.2 This Licence is granted by the Licensor directly to You, and
+ shall apply worldwide and without limitation in time.
+
+ 2.3 You shall not attempt to restrict by contract or otherwise the
+ rights granted under this Licence to other Licensees.
+
+ 2.4 This Licence is not intended to restrict fair use, fair dealing,
+ or any other similar right.
+
+
+3 Copying, Modifying and Conveying Covered Source
+
+ 3.1 You may copy and Convey verbatim copies of Covered Source, in
+ any medium, provided You retain all Notices.
+
+ 3.2 You may modify Covered Source, other than Notices.
+
+ You may only delete Notices if they are no longer applicable to
+ the corresponding Covered Source as modified by You and You may
+ add additional Notices applicable to Your modifications.
+
+ 3.3 You may Convey modified Covered Source (with the effect that You
+ shall also become a Licensor) provided that You:
+
+ a) retain Notices as required in subsection 3.2; and
+
+ b) add a Notice to the modified Covered Source stating that You
+ have modified it, with the date and brief description of how
+ You have modified it.
+
+ 3.4 You may Convey Covered Source or modified Covered Source under
+ licence terms which differ from the terms of this Licence
+ provided that You:
+
+ a) comply at all times with subsection 3.3; and
+
+ b) provide a copy of this Licence to anyone to whom You
+ Convey Covered Source or modified Covered Source.
+
+
+4 Making and Conveying Products
+
+You may Make Products, and/or Convey them, provided that You ensure
+that the recipient of the Product has access to any Notices applicable
+to the Product.
+
+
+5 DISCLAIMER AND LIABILITY
+
+ 5.1 DISCLAIMER OF WARRANTY -- The Covered Source and any Products
+ are provided 'as is' and any express or implied warranties,
+ including, but not limited to, implied warranties of
+ merchantability, of satisfactory quality, non-infringement of
+ third party rights, and fitness for a particular purpose or use
+ are disclaimed in respect of any Source or Product to the
+ maximum extent permitted by law. The Licensor makes no
+ representation that any Source or Product does not or will not
+ infringe any patent, copyright, trade secret or other
+ proprietary right. The entire risk as to the use, quality, and
+ performance of any Source or Product shall be with You and not
+ the Licensor. This disclaimer of warranty is an essential part
+ of this Licence and a condition for the grant of any rights
+ granted under this Licence.
+
+ 5.2 EXCLUSION AND LIMITATION OF LIABILITY -- The Licensor shall, to
+ the maximum extent permitted by law, have no liability for
+ direct, indirect, special, incidental, consequential, exemplary,
+ punitive or other damages of any character including, without
+ limitation, procurement of substitute goods or services, loss of
+ use, data or profits, or business interruption, however caused
+ and on any theory of contract, warranty, tort (including
+ negligence), product liability or otherwise, arising in any way
+ in relation to the Covered Source, modified Covered Source
+ and/or the Making or Conveyance of a Product, even if advised of
+ the possibility of such damages, and You shall hold the
+ Licensor(s) free and harmless from any liability, costs,
+ damages, fees and expenses, including claims by third parties,
+ in relation to such use.
+
+
+6 Patents
+
+ 6.1 Subject to the terms and conditions of this Licence, each
+ Licensor hereby grants to You a perpetual, worldwide,
+ non-exclusive, no-charge, royalty-free, irrevocable (except as
+ stated in this section 6, or where terminated by the Licensor
+ for cause) patent licence to Make, have Made, use, offer to
+ sell, sell, import, and otherwise transfer the Covered Source
+ and Products, where such licence applies only to those patent
+ claims licensable by such Licensor that are necessarily
+ infringed by exercising rights under the Covered Source as
+ Conveyed by that Licensor.
+
+ 6.2 If You institute patent litigation against any entity (including
+ a cross-claim or counterclaim in a lawsuit) alleging that the
+ Covered Source or a Product constitutes direct or contributory
+ patent infringement, or You seek any declaration that a patent
+ licensed to You under this Licence is invalid or unenforceable
+ then any rights granted to You under this Licence shall
+ terminate as of the date such process is initiated.
+
+
+7 General
+
+ 7.1 If any provisions of this Licence are or subsequently become
+ invalid or unenforceable for any reason, the remaining
+ provisions shall remain effective.
+
+ 7.2 You shall not use any of the name (including acronyms and
+ abbreviations), image, or logo by which the Licensor or CERN is
+ known, except where needed to comply with section 3, or where
+ the use is otherwise allowed by law. Any such permitted use
+ shall be factual and shall not be made so as to suggest any kind
+ of endorsement or implication of involvement by the Licensor or
+ its personnel.
+
+ 7.3 CERN may publish updated versions and variants of this Licence
+ which it considers to be in the spirit of this version, but may
+ differ in detail to address new problems or concerns. New
+ versions will be published with a unique version number and a
+ variant identifier specifying the variant. If the Licensor has
+ specified that a given variant applies to the Covered Source
+ without specifying a version, You may treat that Covered Source
+ as being released under any version of the CERN-OHL with that
+ variant. If no variant is specified, the Covered Source shall be
+ treated as being released under CERN-OHL-S. The Licensor may
+ also specify that the Covered Source is subject to a specific
+ version of the CERN-OHL or any later version in which case You
+ may apply this or any later version of CERN-OHL with the same
+ variant identifier published by CERN.
+
+ 7.4 This Licence shall not be enforceable except by a Licensor
+ acting as such, and third party beneficiary rights are
+ specifically excluded.
diff --git a/hardware/calibrator/README.md b/hardware/calibrator/README.md
new file mode 100644
index 0000000..9025184
--- /dev/null
+++ b/hardware/calibrator/README.md
@@ -0,0 +1,247 @@
+# AV Sync calibrator board
+
+
+
+**Status: v0.3 proposal, in development. Not ordered, not built, not tested.**
+
+A small giveaway board (66 × 22 mm) for the AVsync app. The phone powers it over a
+USB-C to USB-C cable. **No cable comes with the board: the user needs their own.**
+It calibrates:
+
+- **camera mode**: a phone's camera against its microphone (LED flash + click together),
+- **display mode**: a sending screen against its speaker (the board clicks when the
+ screen pattern swaps).
+
+The board picks the mode from its two light sensors. What the app must do is in
+[`docs/calibrator.md`](../../docs/calibrator.md). The firmware can be updated over the
+same USB-C socket from a PC (see [Update over USB](#update-over-usb)).
+
+
+
+
+Black solder mask, ENIG finish: the orange parts of the AVsync logo (waveform and the
+ring in the middle) are bare gold copper; the rest of the logo is white silkscreen. The
+bottom has a QR code to .
+
+Schematic: [`renders/calibrator-schematic.pdf`](renders/calibrator-schematic.pdf)
+(also [SVG](renders/calibrator.svg)). 3D view: [`renders/calibrator-3d.png`](renders/calibrator-3d.png).
+
+## How it works (short)
+
+- **MCU**: WCH CH32X035G8R6 (RISC-V, QSOP-28). It runs straight from the phone's 5 V
+ (2–5.5 V; 3.0–5.3 V while USB is used); 10 Ω + 1 µF/100 nF filter spikes. No regulator,
+ no crystal.
+- **USB-C, 16 pins**: 5.1 kΩ on CC1/CC2 so the phone turns on 5 V. D+/D− go to the MCU
+ (PC17/PC16) **only for firmware updates**. The firmware never turns the USB block or its
+ D+ pull-up on, so a phone sees no USB device: no "accessory not supported" message and
+ no audio route change.
+- **BOOT button** SW1 (update mode): connects D+ (PC17) to VDD through 4.7 kΩ (R9). The ROM bootloader
+ starts only at power-on and only if PC17 is high then (CH32X035 datasheet, pin note 8).
+- **Flash and click**: white LED (PA4, ~12 mA) and buzzer transistor (PA5) are on the same
+ port, so one register write starts both.
+- **Light sensors**: two phototransistors feed comparator 3 (PA13 +, PA2 −, hysteresis on).
+ It flips at the crossing point of a black/white swap. 22 kΩ + 1 nF per sensor
+ (τ ≈ 22 µs) delays that point by only ~15 µs, the same on both sensors. The ADC reads the same nodes (PA0,
+ PA2) for dark/light and to check that a flip is real. PB3 is the comparator output
+ (used inside the firmware) and must stay unconnected.
+
+### Choices on the update path
+
+- **No 10 kΩ pull-down on D+.** It was meant to stop a dumb wall charger (which may put
+ ~2.7 V on D+) from starting the bootloader. That case is harmless (the board just waits
+ in update mode until unplugged; the phone use case is not affected, because a phone holds
+ D+ low with its own 15 kΩ). A pull-down would also fight the button: with the PC's 15 kΩ
+ in parallel, D+ would only reach about 2.8 V when the button is pressed, too close to the
+ unknown input threshold. Without it D+ reaches ~3.8 V with a PC attached and 5 V without.
+- **R9 = 4.7 kΩ** (as on community CH32X035 boards) limits the current into D+ to well under
+ 1 mA while the button is held.
+- **No ESD part on D+/D−.** USB is only used for the occasional update, the MCU pins have
+ their own protection, and an extra extended part costs $3.07 per order plus ~$0.04/board
+ (+$0.35/board on the 10-board test). Revisit if boards fail.
+
+## Mechanics: why holes through the board
+
+The LED must touch the camera lens and the sensors must lie flat on the screen, but the
+buzzer (3 mm) and the USB-C receptacle (3.2 mm) are much taller than an LED.
+
+| Option | Cost per order | Result |
+| --- | --- | --- |
+| **Chosen: all parts on top, LED and sensors look down through holes, bottom side flat** | 0 extra; sensors cost ~$0.40/board more than normal ones | flat bottom touches lens and screen; one-side Economic PCBA |
+| Two-sided assembly (LED + sensors on the bottom) | Standard PCBA: setup $51.12 instead of $8.18, stencil $16.42, fixtures $41 (100 pcs), $0.48/board minimum | ≈ +$1.00/board at 100 |
+| LED and sensors on the top, board lies parts-down | 0 | does not lie flat: buzzer and plug are 3 mm tall |
+
+Parts that make the hole idea work, all in JLC stock:
+
+- **LED**: XINGLIGHT XL-3216UWC-FB, a white *reverse-mount* 1206 LED. Its lens sits in a
+ 2.1 × 1.7 mm cut-out and shines through the board. Lite-On LTW-C230DS (C575513) fits the
+ same footprint as a second source.
+- **Sensors**: Vishay VEMT2500X01, a *reverse-gullwing* phototransistor (visible + IR,
+ ±15°). The body sits on top, the dome lens looks down through a 2.3 mm hole. With a
+ **1.2 mm board** the lens ends flush with the bottom. VEMT2000X01 is the same package.
+- **USB-C at the far end**: the cable plug is thicker than the board and sticks out
+ ~0.5 mm below the bottom. It sits ~55 mm away from the LED and sensors, so the board tilts
+ less than 1° and the LED end stays flat on the lens or screen.
+
+Look and markings:
+
+- **Logo** on both sides, from `assets/app-icon.svg`: on the top centred in the free area
+ between the BOOT button and the USB-C, on the bottom in the middle of the board, 11 mm,
+ beside the QR code; the short instructions sit at the LED/sensor end. Cyan and white strokes are silkscreen.
+ The orange parts are copper with a solder-mask opening and no paste, so with ENIG they look
+ gold. That copper has no net; keep-outs keep tracks and vias away from it. Like in the
+ icon, the white dashed centre line and the white centre dot lie on top of the gold: the
+ copper and its mask opening are cut away under them, because JLC removes silkscreen from
+ bare copper. On the bottom the logo and QR are mirrored so they read right from below.
+- **QR code** (bottom): `https://leeo86.github.io/mxl-avsync/`. Version 3-M, 0.45 mm modules
+ (3× JLC's 0.153 mm minimum line), 4-module quiet zone, white silkscreen on black mask
+ (normal polarity), no via holes inside. Checked: zxing-cpp decodes the bottom render, also
+ at 1/3 size. Matrix: `scripts/qr_matrix.txt` (from `scripts/gen_qr.py`, needs `segno`).
+- **Text**: one font; name 1.8–2.0 mm, sub-lines 1.0–1.2 mm, and JLC's minimum
+ (1.0 mm / 0.153 mm stroke) for "not a toy", the licence (small, below the MCU); "BOOT" under SW1 (1.2 mm bold).
+- **Alignment**: LED circle, `A`/`B`, the split line (on the top next to the LED and again
+ behind the buzzer, so it is visible while the board lies face down) and a half-round notch
+ in the board edge on the split line. Marks on both sides.
+- iPhone camera bumps: the lens rings stand higher than the bump plate. The board rests on
+ the ring of the lens under the LED circle; hold it lightly or tape it. The buzzer sits
+ next to the LED (5 mm), sound port pointing at the LED, close to the rear microphone.
+- No company name on the board. Ground copper on both layers stops light going sideways
+ through the board; no vias at the optics end.
+
+## BOM (JLCPCB/LCSC, live stock and prices checked 2026-11-08)
+
+USD per part at the order quantity of 10 and 100 boards. Ext = extended part
+($3.07 feeder fee per type, Economic PCBA).
+
+| Ref | Part | LCSC | Lib | Qty | Stock | $ @10 | $ @100 |
+| --- | --- | --- | --- | --- | --- | --- | --- |
+| U1 | CH32X035G8R6, QSOP-28 | C49118551 | Ext | 1 | 800 | 0.4351 | 0.3304 |
+| Q2, Q3 | VEMT2500X01 phototransistor, reverse gullwing | C3210911 | Ext | 2 | 782 | 0.3141 | 0.2306 |
+| BZ1 | MLT-8530 magnetic buzzer 8.5 × 8.5 × 3 mm | C94599 | Ext | 1 | 137,398 | 0.2015 | 0.158 |
+| J1 | TYPE-C 16P receptacle (SHOU HAN), USB 2.0 | C393939 | Ext | 1 | 366,678 | 0.0691 | 0.0553 |
+| D1 | XL-3216UWC-FB white LED, reverse mount | C3646935 | Ext | 1 | 111,067 | 0.0164 | 0.0164 |
+| SW1 | TS-1187A tact switch 5.1 × 5.1 mm (update) | C318884 | Basic | 1 | 871,253 | 0.0207 | 0.0207 |
+| Q1 | S8050 NPN, SOT-23 | C2146 | Basic | 1 | 1.45 M | 0.0141 | 0.0141 |
+| D2 | 1N4148WS, SOD-323 | C2128 | Basic | 1 | 2.8 M | 0.011 | 0.011 |
+| C1 | 10 µF 25 V 0805 | C15850 | Basic | 1 | 8.7 M | 0.0359 | 0.0359 |
+| C2 | 1 µF 0402 | C52923 | Basic | 1 | 11.5 M | 0.0058 | 0.0058 |
+| C3 | 100 nF 0402 | C1525 | Basic | 1 | 34.2 M | 0.0031 | 0.0031 |
+| C4, C5 | 1 nF 0402 | C1523 | Basic | 2 | 2.3 M | 0.0038 | 0.0038 |
+| R1, R2 | 5.1 kΩ 0402 | C25905 | Basic | 2 | 4.5 M | 0.0023 | 0.0023 |
+| R3 | 10 Ω 0402 | C25077 | Basic | 1 | 3.6 M | 0.001 | 0.001 |
+| R4 | 150 Ω 0603 | C22808 | Basic | 1 | 1.3 M | 0.0015 | 0.0015 |
+| R5 | 1 kΩ 0402 | C11702 | Basic | 1 | 33.7 M | 0.0013 | 0.0013 |
+| R6 | 100 kΩ 0402 | C25741 | Basic | 1 | 8.8 M | 0.0012 | 0.0012 |
+| R7, R8 | 22 kΩ 0402 | C25768 | Basic | 2 | 1.0 M | 0.0012 | 0.0012 |
+| R9 | 4.7 kΩ 0402 | C25900 | Basic | 1 | 15.7 M | 0.0017 | 0.0017 |
+
+**Parts per board: $1.80 @10, $1.16 @100.** Stock covers the 10 + 100 boards (U1: 800,
+sensors: 782 for 220 needed). Reserve them in the JLC parts library before ordering.
+
+## Cost (both orders, CHF, everything included, no cables)
+
+Assumptions: Economic PCBA fees from the JLC price page (setup $8.18, stencil $1.53,
+5 extended types × $3.07, 95 joints × $0.0016, Confirm Parts Placement $0.45); PCB 2-layer
+66 × 22 mm, 1.2 mm, **ENIG, black mask** [estimate: $21 for 10, $42 for 100; JLC's PCB price
+only comes from their JavaScript calculator]; DHL $20 / $30 [estimate]; 1 USD = 0.80 CHF;
+Swiss import VAT 8.1 % (only when ≥ CHF 5) + DHL clearance CHF 11.50 + 3 %.
+
+| | Test, 10 boards | Run, 100 boards |
+| --- | --- | --- |
+| Parts | $18.0 | $116.0 |
+| PCBA fees | $27.0 | $40.7 |
+| PCB with ENIG + black | ~$21 | ~$42 |
+| DHL | ~$20 | ~$30 |
+| Subtotal | $86 → CHF 69 | $229 → CHF 183 |
+| VAT 8.1 % + DHL clearance | CHF 5.6 + 11.7 | CHF 14.8 + 11.9 |
+| **Total** | **≈ CHF 86 (CHF 8.60/board)** | **≈ CHF 210 (CHF 2.10/board)** |
+
+**Both orders: ≈ CHF 296**, just under the CHF 300 budget. No programmer is needed (update
+over USB-C). No cables are included. Ways to get more margin: JLC Global Standard Direct
+instead of DHL (−CHF 10–20), or HASL instead of ENIG on the test batch (−~CHF 15; also stays
+under the VAT limit). Run the real JLC quote with `fab/calibrator-gerbers.zip` before ordering.
+
+## Update over USB
+
+The CH32X035 has a USB bootloader in ROM, so the board cannot be bricked and needs no
+programmer.
+
+1. Unplug the board. Hold the **BOOT** button (SW1).
+2. Plug the board into a PC (USB-C to USB-C, or USB-A to C). Release after about a second.
+3. The board shows up as a WCH ISP device. Flash with an open tool:
+ - [`wchisp`](https://github.com/ch32-rs/wchisp) (Rust, GPL-2.0): `wchisp flash firmware/build/calibrator.bin`
+ - or `chprog.py` from [wagiminator/MCU-Flash-Tools](https://github.com/wagiminator/MCU-Flash-Tools) (MIT).
+4. Unplug and plug in again: the new firmware runs.
+
+A **blank chip** (as delivered by JLC) always starts the bootloader, so the first flash
+needs no button. Linux needs a udev rule for the WCH device; see the
+[firmware README](firmware/README.md). In normal use (no button) the phone never sees a
+USB device.
+
+## Files
+
+| Path | What |
+| --- | --- |
+| `calibrator.kicad_pro/.kicad_sch/.kicad_pcb` | KiCad 9 project |
+| `calibrator.kicad_sym` | custom CH32X035G8R6 symbol with pins grouped by use |
+| `calibrator.pretty/` | custom footprints (buzzer, reverse LED, reverse-gullwing sensor) |
+| `3d/` | simple box 3D models for the renders (KiCad 9's image has none for some parts; renders only, not used for assembly) |
+| `fab/calibrator-gerbers.zip` | gerbers + drill for JLCPCB (order **1.2 mm**, **ENIG**, **black** mask, white silk) |
+| `fab/calibrator-bom-jlc.csv`, `fab/calibrator-cpl-jlc.csv` | JLC BOM and pick-and-place files |
+| `renders/` | PNG renders, schematic PDF/SVG |
+| `scripts/` | generators: `design.py` (parts, nets, placement) → schematic (`gen_sch.py`, drawn in code), board (`gen_pcb.py`), fab files; `check_netlist.py` checks the drawn schematic against `design.py` |
+| `firmware/` | CH32X035 firmware + host tests ([README](firmware/README.md)) |
+
+### Rebuild
+
+Needs docker only (pinned images `kicad/kicad:9.0.9-full`, `ghcr.io/freerouting/freerouting:2.1.0`).
+
+```sh
+scripts/build.sh # footprints, schematic + netlist check, placement, autoroute, ground stitching, ERC, DRC
+scripts/fab.sh # gerbers, drill, BOM, CPL, renders, schematic PDF/SVG
+```
+
+The autorouter does not give the same tracks every run; the committed board is the
+checked one.
+
+### Checks
+
+- ERC: 0 violations. Netlist check: the schematic wires give exactly the nets in `design.py`.
+- DRC: 0 violations, 0 unconnected (JLC rules: 0.15 mm track/space, 0.3/0.6 mm vias,
+ 0.3 mm copper to board edge).
+- Footprints match the datasheets (U1: QSOP-28 3.9 × 9.9 mm, 0.635 mm pitch, pin 1 top left;
+ the USB-C uses KiCad's HRO TYPE-C-31-M-12 footprint, same pad layout as the SHOU HAN
+ C393939 drawing).
+- CPL rotations: JLC's 0° is the orientation of its own footprint for each part, which is
+ not always KiCad's. `scripts/jlc_files.py` adds the known offsets for the stock footprints
+ (QSOP-28 +270°, SOT-23 −90°, HRO USB-C +180°; values from the community list of JLC
+ corrections, e.g. matthewlai/JLCKicadTools). Custom footprints (buzzer, reverse LED,
+ sensors) and the button keep KiCad's rotation. Still check every part in JLC's placement
+ preview before ordering (or use "Confirm Parts Placement"); JLC also places by the pin-1
+ and polarity marks in the silkscreen.
+
+## Risks and open points
+
+1. **Phone powers the board?** A sink with 5.1 kΩ Rd is the standard USB-C way to ask for
+ 5 V. iPhone 15+ and most Android phones supply it. To test with real phones, including
+ that no "accessory" message appears with D+/D− wired to the MCU.
+2. **Bootloader entry**: R9/SW1 values follow community boards, not a WCH document; one
+ user reports an "unknown device" when powered only from USB-C. Test on the first board.
+3. **Comparator interrupt path** (comparator 3 → PB3 → EXTI) and the ADC/clock register
+ setup are written from the datasheet, ch32fun and WCH EVT, not tested on hardware.
+4. **Buzzer delay** from coil-on to sound is unknown (expect 0.05–0.3 ms). Measure once.
+5. **Sensor signal** on dim screens (22 kΩ load) and room light entering the clear sensor
+ bodies from above (both sensors alike, mostly cancels).
+6. **LED fit**: the reverse LED lens (1.86 × 1.4 mm) has only ~0.1 mm room in the cut-out.
+7. **Stock**: U1 800 and sensors 782 at JLC; enough for 110 boards, not for many more.
+8. **VDD with USB**: the datasheet allows 3.0–5.3 V while USB runs; a PC port at the top of
+ the USB range (5.25 V) is just inside.
+
+## Licence
+
+- **Board** (KiCad project, footprints, 3D models, scripts, fab files, renders and the logo
+ artwork on the board): **CERN-OHL-P-2.0**, see
+ [`LICENSE-CERN-OHL-P-2.0.txt`](LICENSE-CERN-OHL-P-2.0.txt).
+ `SPDX-License-Identifier: CERN-OHL-P-2.0`. It is printed small on the top silkscreen.
+ CERN-OHL-S-2.0 (share-alike: changed boards must stay open) would be the alternative.
+- **Firmware** (`firmware/`): MIT, like the rest of the repository. Vendored register
+ definitions come from ch32fun (MIT); see [`firmware/vendor/README.md`](firmware/vendor/README.md).
diff --git a/hardware/calibrator/calibrator.kicad_pcb b/hardware/calibrator/calibrator.kicad_pcb
new file mode 100644
index 0000000..c5ca176
--- /dev/null
+++ b/hardware/calibrator/calibrator.kicad_pcb
@@ -0,0 +1,12550 @@
+(kicad_pcb
+ (version 20241229)
+ (generator "pcbnew")
+ (generator_version "9.0")
+ (general
+ (thickness 1.2)
+ (legacy_teardrops no)
+ )
+ (paper "A4")
+ (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
+ (stackup
+ (layer "F.SilkS"
+ (type "Top Silk Screen")
+ (color "White")
+ )
+ (layer "F.Paste"
+ (type "Top Solder Paste")
+ )
+ (layer "F.Mask"
+ (type "Top Solder Mask")
+ (color "Black")
+ (thickness 0.01)
+ )
+ (layer "F.Cu"
+ (type "copper")
+ (thickness 0.035)
+ )
+ (layer "dielectric 1"
+ (type "core")
+ (thickness 1.11)
+ (material "FR4")
+ (epsilon_r 4.5)
+ (loss_tangent 0.02)
+ )
+ (layer "B.Cu"
+ (type "copper")
+ (thickness 0.035)
+ )
+ (layer "B.Mask"
+ (type "Bottom Solder Mask")
+ (color "Black")
+ (thickness 0.01)
+ )
+ (layer "B.Paste"
+ (type "Bottom Solder Paste")
+ )
+ (layer "B.SilkS"
+ (type "Bottom Silk Screen")
+ (color "White")
+ )
+ (copper_finish "ENIG")
+ (dielectric_constraints no)
+ )
+ (pad_to_mask_clearance 0)
+ (allow_soldermask_bridges_in_footprints no)
+ (tenting front back)
+ (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.000000)
+ (dashed_line_gap_ratio 3.000000)
+ (svgprecision 4)
+ (plotframeref no)
+ (mode 1)
+ (useauxorigin no)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15.000000)
+ (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 "")
+ )
+ )
+ (net 0 "")
+ (net 1 "BOOT")
+ (net 2 "BUZ_B")
+ (net 3 "BUZ_DRV")
+ (net 4 "BUZ_N")
+ (net 5 "CC1")
+ (net 6 "CC2")
+ (net 7 "DM")
+ (net 8 "DP")
+ (net 9 "GND")
+ (net 10 "LED_A")
+ (net 11 "LED_DRV")
+ (net 12 "SENS_A")
+ (net 13 "SENS_B")
+ (net 14 "VBUS")
+ (net 15 "VDD")
+ (footprint "Resistor_SMD:R_0402_1005Metric"
+ (layer "F.Cu")
+ (uuid "07828d2b-4eeb-4f42-9e4f-cbb22e121321")
+ (at 124.4 119.6)
+ (descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "resistor")
+ (property "Reference" "R6"
+ (at 0 -1.17 0)
+ (layer "F.Fab")
+ (uuid "8d775f7a-fbd0-4ac8-be12-2400b602b363")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "100k"
+ (at 0 1.17 0)
+ (layer "F.Fab")
+ (uuid "66e2f994-300d-4eb8-96e6-98cc918f5e22")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "3c708250-3630-4492-9920-c8d8b841fff0")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "d60ea37a-b920-4d34-91a6-553f1d2e5e24")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C25741"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "015ddf67-868a-46ae-8daf-c499ad9ecd6d")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -0.153641 -0.38)
+ (end 0.153641 -0.38)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "593d78ed-a0bb-4585-986e-b61f207aabb3")
+ )
+ (fp_line
+ (start -0.153641 0.38)
+ (end 0.153641 0.38)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "6a3b891b-35d4-442e-a147-8465c6fef34c")
+ )
+ (fp_rect
+ (start -0.93 -0.47)
+ (end 0.93 0.47)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.CrtYd")
+ (uuid "2e8783d5-0b89-4600-8a3d-2fab5d6894c5")
+ )
+ (fp_rect
+ (start -0.525 -0.27)
+ (end 0.525 0.27)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "96d5b5d6-f8c7-4428-bc2d-8b0119b3e4a6")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (uuid "f228864b-bd84-40f2-a19f-1a6968f894cd")
+ (effects
+ (font
+ (size 0.26 0.26)
+ (thickness 0.04)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.51 0)
+ (size 0.54 0.64)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 2 "BUZ_B")
+ (uuid "2485a3ad-8cc5-4355-9f4c-1c664d5b6e6b")
+ )
+ (pad "2" smd roundrect
+ (at 0.51 0)
+ (size 0.54 0.64)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 9 "GND")
+ (uuid "3b7792c8-1fed-453c-bce2-1bcaca219650")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0402_1005Metric.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Button_Switch_SMD:SW_Push_1P1T_XKB_TS-1187A"
+ (layer "F.Cu")
+ (uuid "27c04bbd-46e8-4d8c-b6ae-9f4df034f306")
+ (at 140.5 106)
+ (descr "SMD Tactile Switch, http://www.helloxkb.com/public/images/pdf/TS-1187A-X-X-X.pdf")
+ (tags "SPST Tactile Switch")
+ (property "Reference" "SW1"
+ (at 0 -3.75 0)
+ (layer "F.Fab")
+ (uuid "e9e3fb86-a712-4c77-be2d-cc4900d1f562")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "TS-1187A (BOOT)"
+ (at 0 3.75 0)
+ (layer "F.Fab")
+ (uuid "371ee147-7b54-40a6-9cb4-6c2446268057")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 0)
+ (unlocked yes)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "ab8e7c08-5d89-4a8d-9757-39260b498be7")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 0)
+ (unlocked yes)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "210b7a27-18b6-493d-9361-029a780e220d")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C318884"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "52218168-0f8c-4354-a152-092039f9cea2")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -2.75 -1)
+ (end -2.75 1)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "ae3f8f2b-2bfc-48ad-ae1f-e170f5f483f9")
+ )
+ (fp_line
+ (start -1.75 -2.3)
+ (end -1.3 -2.75)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "c68de916-8e0d-4b1a-a14a-ed2ec6f44cd5")
+ )
+ (fp_line
+ (start -1.75 2.3)
+ (end -1.3 2.75)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "6f21b8b5-8d51-483d-81f8-bf503a8a2042")
+ )
+ (fp_line
+ (start -1.3 -2.75)
+ (end 1.3 -2.75)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "98b05a6b-13bf-4dae-bf29-3c09b91662dc")
+ )
+ (fp_line
+ (start -1.3 2.75)
+ (end 1.3 2.75)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "e46dbe38-bc03-46f0-9173-2b088cf0f13f")
+ )
+ (fp_line
+ (start 1.75 -2.3)
+ (end 1.3 -2.75)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "1ab17a96-a0df-464e-8b91-0dba57dcb7ed")
+ )
+ (fp_line
+ (start 1.75 2.3)
+ (end 1.3 2.75)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "f990d8be-0dc6-482f-a8c7-7868aaf2ab14")
+ )
+ (fp_line
+ (start 2.75 -1)
+ (end 2.75 1)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "b1929e63-68aa-431e-a493-ab8945e48605")
+ )
+ (fp_line
+ (start -3.75 -2.8)
+ (end 3.75 -2.8)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "ae00380f-882f-4b4f-9d33-36641d386666")
+ )
+ (fp_line
+ (start -3.75 2.8)
+ (end -3.75 -2.8)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "91f02a04-627b-4c0b-beb9-9a90b24c1d1b")
+ )
+ (fp_line
+ (start 3.75 -2.8)
+ (end 3.75 2.8)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "34961336-4865-4a42-8571-58369a57f368")
+ )
+ (fp_line
+ (start 3.75 2.8)
+ (end -3.75 2.8)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "4cab20b7-834b-4ef0-9dd0-081bfd69d03d")
+ )
+ (fp_line
+ (start -2.9 -2.1)
+ (end -2.9 -1.6)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "8b70d3b6-0b5d-4c14-8c77-8fa222929cc9")
+ )
+ (fp_line
+ (start -2.9 2.1)
+ (end -2.9 1.6)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "d9f4f92a-7be5-478f-92de-df9bfcdb2124")
+ )
+ (fp_line
+ (start -2.4 -1.4)
+ (end -1.4 -2.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "0ed41b2b-4053-4184-990f-50d54316cb7c")
+ )
+ (fp_line
+ (start -2.4 -1.25)
+ (end -2.4 -1.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "7f6e4ed8-b538-4700-a577-bd114145bf27")
+ )
+ (fp_line
+ (start -2.4 1.4)
+ (end -2.4 1.25)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "c4ff28be-8360-4258-903d-7827184ec967")
+ )
+ (fp_line
+ (start -1.4 -2.4)
+ (end -1.25 -2.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "b49a4cfc-a913-42de-a914-bf8f9f57a03a")
+ )
+ (fp_line
+ (start -1.4 2.4)
+ (end -2.4 1.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "b64a2b09-684b-48a0-a495-3810ce6849c0")
+ )
+ (fp_line
+ (start -1.25 2.4)
+ (end -1.4 2.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "003ba07a-ffd3-41fd-bd7b-235aa0992327")
+ )
+ (fp_line
+ (start 1.25 -2.4)
+ (end 1.4 -2.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "f7e2c8a1-7f4b-4ea9-b3c4-38ef104aed8d")
+ )
+ (fp_line
+ (start 1.4 -2.4)
+ (end 2.4 -1.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "59a2702a-9121-4179-81ad-715a4bf52018")
+ )
+ (fp_line
+ (start 1.4 2.4)
+ (end 1.25 2.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "3c990e3b-e3d9-4e8f-aa93-512092d278d4")
+ )
+ (fp_line
+ (start 2.4 -1.4)
+ (end 2.4 -1.25)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "00e078ba-ecf9-4894-9f7e-24710b9dc1af")
+ )
+ (fp_line
+ (start 2.4 1.25)
+ (end 2.4 1.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "f3ce9b86-fa65-4e1b-8d8b-685e1830c214")
+ )
+ (fp_line
+ (start 2.4 1.4)
+ (end 1.4 2.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "6d00623d-0b13-43ea-8654-814860db14ad")
+ )
+ (fp_line
+ (start 2.9 -2.1)
+ (end 2.9 -1.6)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "a07b1cc3-59f1-4356-ae94-3f16a641c8c1")
+ )
+ (fp_line
+ (start 2.9 2.1)
+ (end 2.9 1.6)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "8334f7ea-1aa2-4708-a332-73354662c397")
+ )
+ (fp_circle
+ (center 0 0)
+ (end 1 0)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "f9d3529e-6133-49e0-851c-ceb7f2e29460")
+ )
+ (fp_poly
+ (pts
+ (xy -1.7 -2.1) (xy -2.2 -1.6) (xy -3.25 -1.6) (xy -3.25 -2.1)
+ )
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "5ca38dea-f7d5-410d-889f-ab8c53181064")
+ )
+ (fp_poly
+ (pts
+ (xy -1.7 2.1) (xy -2.2 1.6) (xy -3.25 1.6) (xy -3.25 2.1)
+ )
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "62e9d694-57e0-4359-931d-3667b5315412")
+ )
+ (fp_poly
+ (pts
+ (xy 1.7 -2.1) (xy 2.2 -1.6) (xy 3.25 -1.6) (xy 3.25 -2.1)
+ )
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "994e1723-0d5f-4c88-932c-99d0357c5c80")
+ )
+ (fp_poly
+ (pts
+ (xy 1.7 2.1) (xy 2.2 1.6) (xy 3.25 1.6) (xy 3.25 2.1)
+ )
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "30c15edd-acab-425e-8b90-d68b343f17f0")
+ )
+ (fp_poly
+ (pts
+ (xy 0.85 -1.85) (xy 1.85 -0.85) (xy 1.85 0.85) (xy 0.85 1.85) (xy -0.85 1.85) (xy -1.85 0.85) (xy -1.85 -0.85)
+ (xy -0.85 -1.85)
+ )
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "760a07dc-318d-4745-972a-69f21c6a1352")
+ )
+ (fp_poly
+ (pts
+ (xy -1.25 -2.55) (xy 1.25 -2.55) (xy 1.25 -1.975) (xy 1.575 -1.975) (xy 1.975 -1.575) (xy 1.975 -1.25)
+ (xy 2.55 -1.25) (xy 2.55 1.25) (xy 1.975 1.25) (xy 1.975 1.575) (xy 1.575 1.975) (xy 1.25 1.975)
+ (xy 1.25 2.55) (xy -1.25 2.55) (xy -1.25 1.975) (xy -1.575 1.975) (xy -1.975 1.575) (xy -1.975 1.25)
+ (xy -2.55 1.25) (xy -2.55 -1.25) (xy -1.975 -1.25) (xy -1.975 -1.575) (xy -1.575 -1.975) (xy -1.25 -1.975)
+ )
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "12e388d4-e7d6-4ff0-96ff-189502992f7d")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 -3.75 0)
+ (layer "F.Fab")
+ (uuid "f1528427-5e42-4a44-9900-cdbfefdd692d")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (pad "1" smd rect
+ (at -3 -1.875)
+ (size 1 0.75)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 1 "BOOT")
+ (uuid "ef6f3371-64c0-41d0-893b-a18290621a67")
+ )
+ (pad "1" smd rect
+ (at 3 -1.875)
+ (size 1 0.75)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 1 "BOOT")
+ (uuid "e810e254-d43e-44cd-9bb0-25f86a9d77aa")
+ )
+ (pad "2" smd rect
+ (at -3 1.875)
+ (size 1 0.75)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 15 "VDD")
+ (uuid "3e6384ca-029f-486c-8181-889fd25de91c")
+ )
+ (pad "2" smd rect
+ (at 3 1.875)
+ (size 1 0.75)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 15 "VDD")
+ (uuid "c108e665-ec81-474f-86cd-d3e61a50842b")
+ )
+ (embedded_fonts no)
+ (model "${KIPRJMOD}/3d/TS-1187A.wrl"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Resistor_SMD:R_0402_1005Metric"
+ (layer "F.Cu")
+ (uuid "290396a8-2e7f-4e3d-9d24-c2bd696586bc")
+ (at 156.6 115 90)
+ (descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "resistor")
+ (property "Reference" "R2"
+ (at 0 -1.17 90)
+ (layer "F.Fab")
+ (uuid "616c4c58-6a6b-42eb-962f-66be34e0cabc")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "5.1k"
+ (at 0 1.17 90)
+ (layer "F.Fab")
+ (uuid "c69daaeb-2bd5-424c-b31f-64d481bd59c3")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "0732bd4c-1971-4a94-97f0-e1e1a46e29a3")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "90058b31-135d-4aa6-8452-448ecc2f1c82")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C25905"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "17700340-ffe7-40c8-b8aa-5551a6a50204")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -0.153641 -0.38)
+ (end 0.153641 -0.38)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "4efff164-317a-438d-b768-8e006236a0a7")
+ )
+ (fp_line
+ (start -0.153641 0.38)
+ (end 0.153641 0.38)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "70e35034-b547-4ee1-a2e4-884814dabcbf")
+ )
+ (fp_rect
+ (start -0.93 -0.47)
+ (end 0.93 0.47)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.CrtYd")
+ (uuid "f514b61a-8397-43fd-ba2f-59ae9de7bfbf")
+ )
+ (fp_rect
+ (start -0.525 -0.27)
+ (end 0.525 0.27)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "903d1665-f81a-4a65-abb9-8cc88fd8977e")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "b364ff4c-708e-4a9f-a593-764b135b8daa")
+ (effects
+ (font
+ (size 0.26 0.26)
+ (thickness 0.04)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.51 0 90)
+ (size 0.54 0.64)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 6 "CC2")
+ (uuid "f0250eb7-8f84-4f8b-a632-538fefeced21")
+ )
+ (pad "2" smd roundrect
+ (at 0.51 0 90)
+ (size 0.54 0.64)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 9 "GND")
+ (uuid "663ef5f8-b534-4e8d-ad2b-2be713dbecf8")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0402_1005Metric.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Resistor_SMD:R_0402_1005Metric"
+ (layer "F.Cu")
+ (uuid "36db2f3e-081c-4acb-862c-33eb584cd4c1")
+ (at 124.4 115.4 90)
+ (descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "resistor")
+ (property "Reference" "R5"
+ (at 0 -1.17 90)
+ (layer "F.Fab")
+ (uuid "93d24245-6d96-411b-8a83-e8308260e7fd")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "1k"
+ (at 0 1.17 90)
+ (layer "F.Fab")
+ (uuid "7e4d813c-d4c7-47e0-983a-7e0c22ae1ae3")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "73dcc267-490e-41a8-a649-91b62806d1ee")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "e7a689fb-3315-4ceb-bf0e-2a7df9f5a7af")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C11702"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "4a62d153-cd50-48ff-9fda-237c7083f498")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -0.153641 -0.38)
+ (end 0.153641 -0.38)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "a497c94f-502b-42cc-8104-90bd54a70383")
+ )
+ (fp_line
+ (start -0.153641 0.38)
+ (end 0.153641 0.38)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "e9d1aba0-b920-4107-b99e-9ba6f91ec41e")
+ )
+ (fp_rect
+ (start -0.93 -0.47)
+ (end 0.93 0.47)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.CrtYd")
+ (uuid "230e03b6-461b-4fd8-a9b3-9e7fd1d0015b")
+ )
+ (fp_rect
+ (start -0.525 -0.27)
+ (end 0.525 0.27)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "600cd512-cdb7-4a27-9feb-01e05116962f")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "974db476-3395-4325-a3fe-c4195a5320ae")
+ (effects
+ (font
+ (size 0.26 0.26)
+ (thickness 0.04)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.51 0 90)
+ (size 0.54 0.64)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 3 "BUZ_DRV")
+ (uuid "77771b44-2f5f-4db6-b8fb-cb9b0ea1f190")
+ )
+ (pad "2" smd roundrect
+ (at 0.51 0 90)
+ (size 0.54 0.64)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 2 "BUZ_B")
+ (uuid "904f1d30-1cca-46c9-880b-68592310d740")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0402_1005Metric.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Resistor_SMD:R_0402_1005Metric"
+ (layer "F.Cu")
+ (uuid "3c5e5133-e20f-49b9-bdff-0e3c93d717c8")
+ (at 134.3 102.4)
+ (descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "resistor")
+ (property "Reference" "R3"
+ (at 0 -1.17 0)
+ (layer "F.Fab")
+ (uuid "832c63df-14c4-4665-989e-d65499d917a3")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "10"
+ (at 0 1.17 0)
+ (layer "F.Fab")
+ (uuid "24a213c3-708f-47e5-96c2-f237b50a7e66")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "97145a24-5f6b-40a3-b2f4-c8202c40869b")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "51f44796-a767-4f3f-b682-643a20b3c9c6")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C25077"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "db72a1e1-7900-4fb4-8558-8115929c828c")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -0.153641 -0.38)
+ (end 0.153641 -0.38)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "2fd2bfba-fc9c-4255-8fee-f960875e81ed")
+ )
+ (fp_line
+ (start -0.153641 0.38)
+ (end 0.153641 0.38)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "b67c3ea2-1dfd-468e-a405-c868e256b84a")
+ )
+ (fp_rect
+ (start -0.93 -0.47)
+ (end 0.93 0.47)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.CrtYd")
+ (uuid "fe55d859-abf7-48d9-b64a-8a7cb3b4adea")
+ )
+ (fp_rect
+ (start -0.525 -0.27)
+ (end 0.525 0.27)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "a98e7bfd-29bb-49d1-9e62-0a9d71ef2278")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (uuid "2175b94d-7e66-4b51-bca5-5d4a4c873912")
+ (effects
+ (font
+ (size 0.26 0.26)
+ (thickness 0.04)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.51 0)
+ (size 0.54 0.64)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 14 "VBUS")
+ (uuid "4093b458-74d1-4771-8e07-42dd62bdc745")
+ )
+ (pad "2" smd roundrect
+ (at 0.51 0)
+ (size 0.54 0.64)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 15 "VDD")
+ (uuid "ad700fcf-e4e6-4ea8-80c3-22fda2d9d4ea")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0402_1005Metric.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "calibrator:Buzzer_MLT-8530"
+ (layer "F.Cu")
+ (uuid "3ca9db10-f868-440b-8818-71c45e897eb8")
+ (at 114.6 111 180)
+ (descr "Magnetic buzzer Huaneng MLT-8530 8.5x8.5x3mm SMD, sound port on +x side, datasheet LCSC C94599")
+ (property "Reference" "BZ1"
+ (at 0 -5.6 180)
+ (layer "F.Fab")
+ (uuid "741a0d70-e8ed-48fb-a1db-26564a11a726")
+ (effects
+ (font
+ (size 0.8 0.8)
+ (thickness 0.12)
+ )
+ )
+ )
+ (property "Value" "MLT-8530"
+ (at 0 5.6 180)
+ (layer "F.Fab")
+ (uuid "0f0f5fc7-edfc-4153-990c-8bb331d534c4")
+ (effects
+ (font
+ (size 0.8 0.8)
+ (thickness 0.12)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 180)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "b13c7306-3fca-46fb-948d-3f1ec5605474")
+ (effects
+ (font
+ (size 0.8 0.8)
+ (thickness 0.12)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 180)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "5741b633-8037-4d05-80a4-b54947a54a08")
+ (effects
+ (font
+ (size 0.8 0.8)
+ (thickness 0.12)
+ )
+ )
+ )
+ (property "LCSC" "C94599"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "40aec76f-26f5-46ff-b2b0-60a4876a433f")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start 4.35 -2.2)
+ (end 4.35 2.2)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "e1c1c63b-cbac-4ad3-a826-3b56b7ebeb51")
+ )
+ (fp_line
+ (start 3.6 0)
+ (end 3.1 0.4)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "d74582b9-2a25-4c71-b962-c14e2410d355")
+ )
+ (fp_line
+ (start 3.6 0)
+ (end 3.1 -0.4)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "2d9d7366-e496-4520-9a9b-d6ba569516d6")
+ )
+ (fp_line
+ (start 2.6 0)
+ (end 3.6 0)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "9bf84f0d-1a3c-4f84-837c-17f39558aa06")
+ )
+ (fp_line
+ (start -2.2 4.35)
+ (end 2.2 4.35)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "140a9010-f9ac-45f1-8459-89f684fa6144")
+ )
+ (fp_line
+ (start -2.2 -4.35)
+ (end 2.2 -4.35)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "73f1ea9c-ac3e-4636-a964-f29f6435bf91")
+ )
+ (fp_line
+ (start -4.35 -2.2)
+ (end -4.35 2.2)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "0f1c220a-322f-4b88-8ebf-69dd6e8ec6d5")
+ )
+ (fp_line
+ (start -5.25 -3.9)
+ (end -5.25 -3.2)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "138d6c4f-30a8-4968-a889-869199d818a4")
+ )
+ (fp_line
+ (start -5.6 -3.55)
+ (end -4.9 -3.55)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "ec7bf93a-e900-424b-b444-5fed942874a0")
+ )
+ (fp_line
+ (start 5 5)
+ (end -5 5)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "d2756064-f066-4fc7-a97b-08baff84c65f")
+ )
+ (fp_line
+ (start 5 -5)
+ (end 5 5)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "eb106929-92ad-4cc4-a519-5c7e985987dd")
+ )
+ (fp_line
+ (start -5 5)
+ (end -5 -5)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "533a06ed-1909-44f9-aadd-385a92f3bce9")
+ )
+ (fp_line
+ (start -5 -5)
+ (end 5 -5)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "6b99c9f9-7eb5-42aa-9cdb-55c795f1d96f")
+ )
+ (fp_line
+ (start 4.25 4.25)
+ (end -4.25 4.25)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "a97e5b45-8dfb-4ded-aa80-9579c4555415")
+ )
+ (fp_line
+ (start 4.25 -4.25)
+ (end 4.25 4.25)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "3d35da8c-f66e-490c-b245-9b99e3a75b35")
+ )
+ (fp_line
+ (start -4.25 4.25)
+ (end -4.25 -4.25)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "da0af827-10bf-4595-a9f7-7e3a0c26bd50")
+ )
+ (fp_line
+ (start -4.25 -4.25)
+ (end 4.25 -4.25)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "44b4f726-45d6-4167-948e-54d0a55b7f2e")
+ )
+ (pad "" smd roundrect
+ (at 3.55 -3.55 180)
+ (size 2.3 2.3)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.15)
+ (uuid "f9a9b968-e344-4abd-93c9-4346d176c104")
+ )
+ (pad "" smd roundrect
+ (at 3.55 3.55 180)
+ (size 2.3 2.3)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.15)
+ (uuid "b60b0221-434c-46f3-aaf2-5d129cd73a12")
+ )
+ (pad "1" smd roundrect
+ (at -3.55 -3.55 180)
+ (size 2.3 2.3)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.15)
+ (net 14 "VBUS")
+ (uuid "2a7d8d62-55be-4e44-9060-c59bdf27e4fe")
+ )
+ (pad "2" smd roundrect
+ (at -3.55 3.55 180)
+ (size 2.3 2.3)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.15)
+ (net 4 "BUZ_N")
+ (uuid "730e3190-0dbb-48a3-8e49-c48e57ec6c56")
+ )
+ (embedded_fonts no)
+ (model "${KIPRJMOD}/3d/MLT-8530.wrl"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Capacitor_SMD:C_0402_1005Metric"
+ (layer "F.Cu")
+ (uuid "408f798e-34c4-43e8-b917-d54252cb3df7")
+ (at 135 112 90)
+ (descr "Capacitor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "capacitor")
+ (property "Reference" "C3"
+ (at 0 -1.16 90)
+ (layer "F.Fab")
+ (uuid "d0d59b4b-17b5-43e7-be55-5a29aa0ac301")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "100n"
+ (at 0 1.16 90)
+ (layer "F.Fab")
+ (uuid "5ddd9253-c779-434a-a560-e297127f0a4f")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "566258db-b757-4da5-ab51-a1e56612157d")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "6e53a63d-be8a-4680-ba0e-56cb7561178c")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C1525"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "e9e72b82-410d-4983-9237-1aca8a5b04f6")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -0.107836 -0.36)
+ (end 0.107836 -0.36)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "5db9f1e0-3bbb-4f65-a9a4-25fbe527cae0")
+ )
+ (fp_line
+ (start -0.107836 0.36)
+ (end 0.107836 0.36)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "54c2240f-6061-438e-a1d7-7ce95d094f31")
+ )
+ (fp_rect
+ (start -0.91 -0.46)
+ (end 0.91 0.46)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.CrtYd")
+ (uuid "fb3f459f-0a12-44e5-8166-104769d27372")
+ )
+ (fp_rect
+ (start -0.5 -0.25)
+ (end 0.5 0.25)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "326c1f5a-d309-4a10-bfd5-23b093cf45ac")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "9fe43a1c-8917-424e-99ef-f23a6d1a53fc")
+ (effects
+ (font
+ (size 0.25 0.25)
+ (thickness 0.04)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.48 0 90)
+ (size 0.56 0.62)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 15 "VDD")
+ (uuid "27be8af0-96f8-416d-ae89-fe0eee038050")
+ )
+ (pad "2" smd roundrect
+ (at 0.48 0 90)
+ (size 0.56 0.62)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 9 "GND")
+ (uuid "1be9905b-f327-403a-b679-51e203c88e30")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0402_1005Metric.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Resistor_SMD:R_0402_1005Metric"
+ (layer "F.Cu")
+ (uuid "4ab6a9f5-d613-4834-8efd-e48f467fae9f")
+ (at 140.5 116.6 90)
+ (descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "resistor")
+ (property "Reference" "R9"
+ (at 0 -1.17 90)
+ (layer "F.Fab")
+ (uuid "98b0e5fa-3d15-41c6-97d3-cc97559a92e8")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "4.7k"
+ (at 0 1.17 90)
+ (layer "F.Fab")
+ (uuid "015db927-7dde-42eb-abc6-0d690b827044")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "cf138a72-01f8-44eb-a6f9-fad343764484")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "8f975621-2653-4c4f-952e-f85e05ba24ee")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C25900"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "1be52af3-4dc5-4a62-b89e-78ef7559360e")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -0.153641 -0.38)
+ (end 0.153641 -0.38)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "e0d0f740-30c1-4b83-8ca8-3fa7c26f603e")
+ )
+ (fp_line
+ (start -0.153641 0.38)
+ (end 0.153641 0.38)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "d7478ca9-b4dc-4d72-a007-e370ee34a4eb")
+ )
+ (fp_rect
+ (start -0.93 -0.47)
+ (end 0.93 0.47)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.CrtYd")
+ (uuid "68ac429d-5a53-4d23-a993-afe96bccf958")
+ )
+ (fp_rect
+ (start -0.525 -0.27)
+ (end 0.525 0.27)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "ed5f9c09-8d16-4246-b1d9-32cde6451629")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "e624b978-a16e-41fb-851b-f43b5ec8b5ec")
+ (effects
+ (font
+ (size 0.26 0.26)
+ (thickness 0.04)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.51 0 90)
+ (size 0.54 0.64)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 8 "DP")
+ (uuid "99b5b33d-2aeb-4634-85ce-c0965da03603")
+ )
+ (pad "2" smd roundrect
+ (at 0.51 0 90)
+ (size 0.54 0.64)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 1 "BOOT")
+ (uuid "e99b40bb-c112-4c9e-81d4-78f2fa3d03d8")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0402_1005Metric.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Diode_SMD:D_SOD-323"
+ (layer "F.Cu")
+ (uuid "4b4ceef3-f970-4d3a-a025-8ed380e9d2a9")
+ (at 121.6 104.3 90)
+ (descr "SOD-323")
+ (tags "SOD-323")
+ (property "Reference" "D2"
+ (at 0 -1.85 90)
+ (layer "F.Fab")
+ (uuid "4d19ee8f-3e71-4c1d-863a-394fcfbc1b34")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "1N4148WS"
+ (at 0.1 1.9 90)
+ (layer "F.Fab")
+ (uuid "ae07001f-43aa-448e-a6d9-5e7fc86318de")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 90)
+ (unlocked yes)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "683c2df0-0015-403e-a6de-540fe0d50305")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 90)
+ (unlocked yes)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "8934a8e3-3b1e-45b6-912d-8326fdf34525")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C2128"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "b2b6d013-248c-4972-9308-549813f50e7c")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -1.61 -0.85)
+ (end 1.05 -0.85)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "52f4ffd4-7270-4e66-847d-fa4f36be99d9")
+ )
+ (fp_line
+ (start -1.61 -0.85)
+ (end -1.61 0.85)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "8e8a0c6a-1176-49a7-af2d-31f79db8855e")
+ )
+ (fp_line
+ (start -1.61 0.85)
+ (end 1.05 0.85)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "0d69ee2e-324b-4de7-af9e-3a15ddaa8bb4")
+ )
+ (fp_line
+ (start 1.6 -0.95)
+ (end 1.6 0.95)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "7a2b0511-dfb2-49f7-ba31-954bb1dc1e93")
+ )
+ (fp_line
+ (start -1.6 -0.95)
+ (end 1.6 -0.95)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "eb3da3dd-40c2-4ce5-90ba-c7d4f7653c26")
+ )
+ (fp_line
+ (start -1.6 -0.95)
+ (end -1.6 0.95)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "9565b78e-54bd-484d-bf6f-6f37fc13ad1e")
+ )
+ (fp_line
+ (start -1.6 0.95)
+ (end 1.6 0.95)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "eabc2a0e-490b-4add-ac46-8cab87ccdb3b")
+ )
+ (fp_line
+ (start 0.9 -0.7)
+ (end 0.9 0.7)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "a77dbe40-f270-4d3e-b2f8-482b8561915c")
+ )
+ (fp_line
+ (start -0.9 -0.7)
+ (end 0.9 -0.7)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "3d3e0bba-698a-4375-9439-1b4329457daf")
+ )
+ (fp_line
+ (start 0.2 -0.35)
+ (end 0.2 0.35)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "10fb315f-f0cc-4d9e-9c7b-0d8f42c90934")
+ )
+ (fp_line
+ (start -0.3 -0.35)
+ (end -0.3 0.35)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "1815a50f-1649-4e28-8979-14d348d8e0cd")
+ )
+ (fp_line
+ (start 0.2 0)
+ (end 0.45 0)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "5f947790-8872-4dd7-83b4-3fe7610a76d0")
+ )
+ (fp_line
+ (start -0.3 0)
+ (end 0.2 -0.35)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "cbd47cf8-0bcc-4fab-81ef-0692bcdc49f4")
+ )
+ (fp_line
+ (start -0.3 0)
+ (end -0.5 0)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "c04eafae-3d49-4e87-9e48-204e9b3e5e30")
+ )
+ (fp_line
+ (start 0.2 0.35)
+ (end -0.3 0)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "383ff968-d006-4230-adc7-04f73f609c42")
+ )
+ (fp_line
+ (start 0.9 0.7)
+ (end -0.9 0.7)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "add09da1-c1bd-4c8f-8282-94834f1dae14")
+ )
+ (fp_line
+ (start -0.9 0.7)
+ (end -0.9 -0.7)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "6ef691da-3f2e-4c4d-8107-cbf17a573ae9")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 -1.85 90)
+ (layer "F.Fab")
+ (uuid "6107400e-f337-4627-9e5b-8197949aa3ce")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -1.05 0 90)
+ (size 0.6 0.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 14 "VBUS")
+ (uuid "7f839482-2000-49ce-a861-6b46fb9db27d")
+ )
+ (pad "2" smd roundrect
+ (at 1.05 0 90)
+ (size 0.6 0.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 4 "BUZ_N")
+ (uuid "8214c98b-6ba9-441e-a39d-9ac36c948276")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Diode_SMD.3dshapes/D_SOD-323.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Capacitor_SMD:C_0402_1005Metric"
+ (layer "F.Cu")
+ (uuid "5010c2e7-cb6b-4bd1-a031-ab65098bf9af")
+ (at 135 108.4 90)
+ (descr "Capacitor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "capacitor")
+ (property "Reference" "C4"
+ (at 0 -1.16 90)
+ (layer "F.Fab")
+ (uuid "5e17fa7e-60ca-468d-8b93-aea1ac88f3df")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "1n"
+ (at 0 1.16 90)
+ (layer "F.Fab")
+ (uuid "2728666e-7674-411e-b11c-09a4097f0a27")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "fb5f98b0-5939-42f9-b9d3-bdbe4c8b8365")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "5609fca7-3f5f-4274-b6a3-a5fc9690fc6b")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C1523"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "558ba612-9dcc-4fb9-9122-11b34be5e14d")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -0.107836 -0.36)
+ (end 0.107836 -0.36)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "5e47bf92-e8e2-4154-8e82-fb10c714c5aa")
+ )
+ (fp_line
+ (start -0.107836 0.36)
+ (end 0.107836 0.36)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "a98f8ad3-b943-418c-83d7-3d384b403eb5")
+ )
+ (fp_rect
+ (start -0.91 -0.46)
+ (end 0.91 0.46)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.CrtYd")
+ (uuid "54366c30-5874-4273-8dde-761b3d6558d7")
+ )
+ (fp_rect
+ (start -0.5 -0.25)
+ (end 0.5 0.25)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "3ed0ad37-c773-4e35-9f32-5d92b6f1d2b5")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "6d79c267-106c-4da1-a0cd-7b67562c813c")
+ (effects
+ (font
+ (size 0.25 0.25)
+ (thickness 0.04)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.48 0 90)
+ (size 0.56 0.62)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 12 "SENS_A")
+ (uuid "e001917f-d9d6-483e-93d5-16ba06fe3789")
+ )
+ (pad "2" smd roundrect
+ (at 0.48 0 90)
+ (size 0.56 0.62)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 9 "GND")
+ (uuid "69db524c-8771-4989-86f1-b45cc4e9be89")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0402_1005Metric.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Resistor_SMD:R_0603_1608Metric"
+ (layer "F.Cu")
+ (uuid "7b47f4a0-10a6-413f-90d4-bcc976ffeeed")
+ (at 123.2 109.6 90)
+ (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "resistor")
+ (property "Reference" "R4"
+ (at 0 -1.43 90)
+ (layer "F.Fab")
+ (uuid "003e88cb-1c39-497b-88c8-2471555c17ab")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "150"
+ (at 0 1.43 90)
+ (layer "F.Fab")
+ (uuid "c54512db-96e7-420e-a4d5-f30a239a631e")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "8b3e15ca-c0da-4487-824b-12961e7f6ae3")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "ebaff8b3-7153-4734-a04b-65e53fc4f3f8")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C22808"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "419f64ac-1c9d-411c-8541-378db349ffd1")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -0.237258 -0.5225)
+ (end 0.237258 -0.5225)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "06d193f5-84f4-4cfc-ba35-e42e8f9bc0da")
+ )
+ (fp_line
+ (start -0.237258 0.5225)
+ (end 0.237258 0.5225)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "58623f28-18c2-43c1-b546-3f131714d4cb")
+ )
+ (fp_rect
+ (start -1.48 -0.73)
+ (end 1.48 0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.CrtYd")
+ (uuid "0028dc23-f3b0-41f0-8c81-1672e8e36486")
+ )
+ (fp_rect
+ (start -0.8 -0.4125)
+ (end 0.8 0.4125)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "70bc6991-3369-4e9a-a8e1-8f5dceaed2dc")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "5fcd083f-7b8d-4fba-a05b-211522283912")
+ (effects
+ (font
+ (size 0.4 0.4)
+ (thickness 0.06)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.825 0 90)
+ (size 0.8 0.95)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 11 "LED_DRV")
+ (uuid "59d39084-25cf-4bba-aacb-aeaad02b3056")
+ )
+ (pad "2" smd roundrect
+ (at 0.825 0 90)
+ (size 0.8 0.95)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 10 "LED_A")
+ (uuid "6a34f0eb-bd88-474b-a7f8-e4a1bfd2c3b5")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0603_1608Metric.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Capacitor_SMD:C_0402_1005Metric"
+ (layer "F.Cu")
+ (uuid "84ebcc12-ffa1-4616-9274-550acdc1c482")
+ (at 133.6 112 90)
+ (descr "Capacitor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "capacitor")
+ (property "Reference" "C2"
+ (at 0 -1.16 90)
+ (layer "F.Fab")
+ (uuid "4b8d7d4a-a296-4532-93eb-c524356b523f")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "1u"
+ (at 0 1.16 90)
+ (layer "F.Fab")
+ (uuid "029c3f19-238d-42ae-81e9-d8d9596e3f23")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "424b5fa2-4009-4994-8ea3-9cecd6509e15")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "46b99433-59f6-4a35-bf77-70f5eba7384f")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C52923"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "1904f51f-26c1-47cf-bcf6-848bd431dc07")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -0.107836 -0.36)
+ (end 0.107836 -0.36)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "3b5fb7b1-26e0-42be-9a5f-0158bac90a7b")
+ )
+ (fp_line
+ (start -0.107836 0.36)
+ (end 0.107836 0.36)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "c585ac7c-da3b-435a-b5b7-947ae05ca1f0")
+ )
+ (fp_rect
+ (start -0.91 -0.46)
+ (end 0.91 0.46)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.CrtYd")
+ (uuid "fe40e7dc-89ee-43f6-a640-5e8996b77599")
+ )
+ (fp_rect
+ (start -0.5 -0.25)
+ (end 0.5 0.25)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "91c30daa-1932-412d-81aa-ed4aa6bce7c2")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "e30ce232-24b2-4804-80d3-c9262f1ecc4f")
+ (effects
+ (font
+ (size 0.25 0.25)
+ (thickness 0.04)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.48 0 90)
+ (size 0.56 0.62)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 15 "VDD")
+ (uuid "301d618c-9593-4a04-a803-31350d682fb4")
+ )
+ (pad "2" smd roundrect
+ (at 0.48 0 90)
+ (size 0.56 0.62)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 9 "GND")
+ (uuid "9cead523-ae95-48a2-8ee2-894720e50c6b")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0402_1005Metric.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12"
+ (layer "F.Cu")
+ (uuid "8681018d-15ad-45fb-93c3-a2b6d9721899")
+ (at 162.65 111 90)
+ (descr "USB Type-C receptacle for USB 2.0 and PD, http://www.krhro.com/uploads/soft/180320/1-1P320120243.pdf")
+ (tags "usb usb-c 2.0 pd")
+ (property "Reference" "J1"
+ (at 0 -5.645 90)
+ (layer "F.Fab")
+ (uuid "d4980fae-f607-47dc-bf24-b755a13b7df7")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "TYPE-C 16P"
+ (at 0 5.1 90)
+ (layer "F.Fab")
+ (uuid "1d7b88cb-1ae8-4562-a7c6-bccc24dd8cc9")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 90)
+ (unlocked yes)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "28813ff3-b104-4f5d-8b78-43da1d12550f")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 90)
+ (unlocked yes)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "c25ac2e8-5c7b-49b2-b483-222947a23c3b")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C393939"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "677458c3-cb63-4981-b4c5-4874989082d9")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start 5.32 -5.27)
+ (end 5.32 4.15)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "14b8cbee-612e-4710-b737-3fc3777ccfc7")
+ )
+ (fp_line
+ (start -5.32 -5.27)
+ (end 5.32 -5.27)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "00d82233-a1ea-4e2f-ad6f-66c27b149faa")
+ )
+ (fp_line
+ (start -5.32 -5.27)
+ (end -5.32 4.15)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "4eb26ed6-fc2d-40b2-aa75-8c0434ba3849")
+ )
+ (fp_line
+ (start -5.32 4.15)
+ (end 5.32 4.15)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "cfb7751a-7adb-4530-88b1-7013321995e7")
+ )
+ (fp_line
+ (start 4.47 -3.65)
+ (end 4.47 3.65)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "d6c97dbf-c948-47c5-82a8-8bf24c6ed775")
+ )
+ (fp_line
+ (start -4.47 -3.65)
+ (end 4.47 -3.65)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "537d5b23-28d2-4b23-a23e-4ac4df2820d5")
+ )
+ (fp_line
+ (start -4.47 -3.65)
+ (end -4.47 3.65)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "867ed174-cd2e-4021-9022-e2feee986e26")
+ )
+ (fp_line
+ (start -4.47 3.65)
+ (end 4.47 3.65)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "77e68cbb-1480-448d-9f2c-a81d53d99216")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "299c177b-bd5e-4bf9-84ca-2d99c3d47dc4")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (pad "" np_thru_hole circle
+ (at -2.89 -2.6 90)
+ (size 0.65 0.65)
+ (drill 0.65)
+ (layers "*.Cu" "*.Mask")
+ (uuid "b4bb65b2-a409-4304-8254-20a6c0f534e2")
+ )
+ (pad "" np_thru_hole circle
+ (at 2.89 -2.6 90)
+ (size 0.65 0.65)
+ (drill 0.65)
+ (layers "*.Cu" "*.Mask")
+ (uuid "d906aa06-4ca3-401e-816d-ec2caf51ef49")
+ )
+ (pad "A1" smd rect
+ (at -3.25 -4.045 90)
+ (size 0.6 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 9 "GND")
+ (uuid "014a70d2-f856-4378-9b83-5faba5e3c3a0")
+ )
+ (pad "A4" smd rect
+ (at -2.45 -4.045 90)
+ (size 0.6 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 14 "VBUS")
+ (uuid "4153eb69-5491-4827-acf2-62cf1163872c")
+ )
+ (pad "A5" smd rect
+ (at -1.25 -4.045 90)
+ (size 0.3 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 5 "CC1")
+ (uuid "38e6e001-4b83-4946-867c-c02c2574d50b")
+ )
+ (pad "A6" smd rect
+ (at -0.25 -4.045 90)
+ (size 0.3 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 8 "DP")
+ (uuid "2b550584-9256-4812-912c-27a4c0671827")
+ )
+ (pad "A7" smd rect
+ (at 0.25 -4.045 90)
+ (size 0.3 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 7 "DM")
+ (uuid "57f81c8c-0fde-4e92-8a5c-1af3b47423f2")
+ )
+ (pad "A8" smd rect
+ (at 1.25 -4.045 90)
+ (size 0.3 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (uuid "2190a8cc-3f7c-4081-aefd-459be9ffe20c")
+ )
+ (pad "A9" smd rect
+ (at 2.45 -4.045 90)
+ (size 0.6 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 14 "VBUS")
+ (uuid "a5090fe9-a25d-4eb4-9a60-afa3d71cc5a0")
+ )
+ (pad "A12" smd rect
+ (at 3.25 -4.045 90)
+ (size 0.6 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 9 "GND")
+ (uuid "3c2bd131-d4d7-473d-9c7f-6e052b564adc")
+ )
+ (pad "B1" smd rect
+ (at 3.25 -4.045 90)
+ (size 0.6 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 9 "GND")
+ (uuid "04e92903-114d-41df-a830-9f676b17e732")
+ )
+ (pad "B4" smd rect
+ (at 2.45 -4.045 90)
+ (size 0.6 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 14 "VBUS")
+ (uuid "9ca0a306-a1e8-47d1-9142-04eeb6352bfc")
+ )
+ (pad "B5" smd rect
+ (at 1.75 -4.045 90)
+ (size 0.3 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 6 "CC2")
+ (uuid "62bc6aa8-e73f-4f25-8612-5840e582a186")
+ )
+ (pad "B6" smd rect
+ (at 0.75 -4.045 90)
+ (size 0.3 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 8 "DP")
+ (uuid "c281e116-3855-4dee-b774-6e0e0ae32492")
+ )
+ (pad "B7" smd rect
+ (at -0.75 -4.045 90)
+ (size 0.3 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 7 "DM")
+ (uuid "6a70c755-6ac2-4d98-b486-6b630e528229")
+ )
+ (pad "B8" smd rect
+ (at -1.75 -4.045 90)
+ (size 0.3 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (uuid "c4462ce3-305e-4e07-b33e-edd55194b177")
+ )
+ (pad "B9" smd rect
+ (at -2.45 -4.045 90)
+ (size 0.6 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 14 "VBUS")
+ (uuid "6c1c9bca-e6de-43ac-a8e5-93abf84bb9b3")
+ )
+ (pad "B12" smd rect
+ (at -3.25 -4.045 90)
+ (size 0.6 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (net 9 "GND")
+ (uuid "ec4df1d6-6c7c-4a3e-8d0d-9b73280b422b")
+ )
+ (pad "S1" thru_hole oval
+ (at -4.32 -3.13 90)
+ (size 1 2.1)
+ (drill oval 0.6 1.7)
+ (property pad_prop_heatsink)
+ (layers "*.Cu" "*.Mask")
+ (remove_unused_layers no)
+ (net 9 "GND")
+ (uuid "aae59115-103e-4b28-baec-dc90c2327520")
+ )
+ (pad "S1" thru_hole oval
+ (at -4.32 1.05 90)
+ (size 1 1.6)
+ (drill oval 0.6 1.2)
+ (property pad_prop_heatsink)
+ (layers "*.Cu" "*.Mask")
+ (remove_unused_layers no)
+ (net 9 "GND")
+ (uuid "c23a5feb-1952-4f65-8d3a-c378c780365e")
+ )
+ (pad "S1" thru_hole oval
+ (at 4.32 -3.13 90)
+ (size 1 2.1)
+ (drill oval 0.6 1.7)
+ (property pad_prop_heatsink)
+ (layers "*.Cu" "*.Mask")
+ (remove_unused_layers no)
+ (net 9 "GND")
+ (uuid "378054f3-e201-40a5-bd2d-87a6526af82a")
+ )
+ (pad "S1" thru_hole oval
+ (at 4.32 1.05 90)
+ (size 1 1.6)
+ (drill oval 0.6 1.2)
+ (property pad_prop_heatsink)
+ (layers "*.Cu" "*.Mask")
+ (remove_unused_layers no)
+ (net 9 "GND")
+ (uuid "6b0d2a4e-b17e-4aab-93bc-fb52ecd5c056")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Connector_USB.3dshapes/USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Resistor_SMD:R_0402_1005Metric"
+ (layer "F.Cu")
+ (uuid "88250087-cd15-401b-8cf9-90f4fd885d24")
+ (at 133.6 105.4 90)
+ (descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "resistor")
+ (property "Reference" "R8"
+ (at 0 -1.17 90)
+ (layer "F.Fab")
+ (uuid "ec740f22-a1bf-4534-9f62-9464d5c4b418")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "22k"
+ (at 0 1.17 90)
+ (layer "F.Fab")
+ (uuid "57da4e77-6cc3-416d-be92-53193d600516")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "87d5776b-8e7c-440a-bbad-80fa93b772d2")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "4d7d9475-ba7c-4990-a3d6-19029b0a5bcf")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C25768"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "36964418-33b2-4618-8bc7-3624e2567b94")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -0.153641 -0.38)
+ (end 0.153641 -0.38)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "a96f25f1-4f54-4c7c-ad6a-dc67641d75bd")
+ )
+ (fp_line
+ (start -0.153641 0.38)
+ (end 0.153641 0.38)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "0d628427-63ec-4df7-b057-000077b35d37")
+ )
+ (fp_rect
+ (start -0.93 -0.47)
+ (end 0.93 0.47)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.CrtYd")
+ (uuid "fd98153e-b461-4888-8d6d-da598e631d90")
+ )
+ (fp_rect
+ (start -0.525 -0.27)
+ (end 0.525 0.27)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "1a2e19f9-2916-4c10-b632-76a5b9524440")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "db1f82a1-2d15-4776-b5df-fbec6532a075")
+ (effects
+ (font
+ (size 0.26 0.26)
+ (thickness 0.04)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.51 0 90)
+ (size 0.54 0.64)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 13 "SENS_B")
+ (uuid "cdb5e333-d12b-45c5-af67-3933074b7b18")
+ )
+ (pad "2" smd roundrect
+ (at 0.51 0 90)
+ (size 0.54 0.64)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 9 "GND")
+ (uuid "027b2fcf-c491-4d62-b044-68dc090a350d")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0402_1005Metric.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Capacitor_SMD:C_0402_1005Metric"
+ (layer "F.Cu")
+ (uuid "895df405-d8f0-436c-8dfb-ca0b8fdcca1c")
+ (at 135 105.4 90)
+ (descr "Capacitor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "capacitor")
+ (property "Reference" "C5"
+ (at 0 -1.16 90)
+ (layer "F.Fab")
+ (uuid "aec0a524-7394-4461-88d7-4c09ecf6c1aa")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "1n"
+ (at 0 1.16 90)
+ (layer "F.Fab")
+ (uuid "d5c66b49-56de-40fc-a501-3971d28ab7dc")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "c4d5ad26-486d-41b1-b187-1cea1bb3a642")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "4d74b49c-2d08-4e0d-a887-3e1de26757ff")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C1523"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "3ec690bb-f4a7-45b8-b605-6ae6a2f5cf67")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -0.107836 -0.36)
+ (end 0.107836 -0.36)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "536a29ca-7550-4179-aa54-91a9d35166bf")
+ )
+ (fp_line
+ (start -0.107836 0.36)
+ (end 0.107836 0.36)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "2f289637-c1a8-48ca-ab87-dbce91b546ac")
+ )
+ (fp_rect
+ (start -0.91 -0.46)
+ (end 0.91 0.46)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.CrtYd")
+ (uuid "a4a333df-19c5-47ca-9612-e04609dd0502")
+ )
+ (fp_rect
+ (start -0.5 -0.25)
+ (end 0.5 0.25)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "69ed99c8-79a2-448e-b0af-cec9d11930fd")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "cc13d139-b49d-4103-83f0-55372681bab0")
+ (effects
+ (font
+ (size 0.25 0.25)
+ (thickness 0.04)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.48 0 90)
+ (size 0.56 0.62)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 13 "SENS_B")
+ (uuid "86ff673b-4e6b-4c61-9a86-b3813dca837a")
+ )
+ (pad "2" smd roundrect
+ (at 0.48 0 90)
+ (size 0.56 0.62)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 9 "GND")
+ (uuid "d9047c76-beec-4580-a826-a3301fc59fd8")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0402_1005Metric.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Resistor_SMD:R_0402_1005Metric"
+ (layer "F.Cu")
+ (uuid "a0d8b4b1-4e86-4fa4-9112-f045f9d64197")
+ (at 156.6 107 90)
+ (descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "resistor")
+ (property "Reference" "R1"
+ (at 0 -1.17 90)
+ (layer "F.Fab")
+ (uuid "53a83f45-dcb3-46d3-8ca7-66e62af653af")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "5.1k"
+ (at 0 1.17 90)
+ (layer "F.Fab")
+ (uuid "cad88f3b-e383-4565-bb55-4353b6f4dcc4")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "9dde193e-ccb1-45d6-9a04-01062fcbb447")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "dfd5658b-2c51-4b89-aae5-fc5963c743d0")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C25905"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "bdfbfece-2abf-4f96-b413-f65cd204968a")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -0.153641 -0.38)
+ (end 0.153641 -0.38)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "2b177794-db82-4776-b1f8-a4678ff2100e")
+ )
+ (fp_line
+ (start -0.153641 0.38)
+ (end 0.153641 0.38)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "e6c77f7f-1eda-492c-9e1e-968473c4bdcf")
+ )
+ (fp_rect
+ (start -0.93 -0.47)
+ (end 0.93 0.47)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.CrtYd")
+ (uuid "fa09b958-52a9-44a4-98fc-e3e31cb31f57")
+ )
+ (fp_rect
+ (start -0.525 -0.27)
+ (end 0.525 0.27)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "775cf935-7ed5-4f9a-943e-14bf2e85a981")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "e4edc29e-b5c8-46b6-b596-57b48bb942a7")
+ (effects
+ (font
+ (size 0.26 0.26)
+ (thickness 0.04)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.51 0 90)
+ (size 0.54 0.64)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 5 "CC1")
+ (uuid "356792c4-5fe0-4aaa-bd8a-bda538bd1064")
+ )
+ (pad "2" smd roundrect
+ (at 0.51 0 90)
+ (size 0.54 0.64)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 9 "GND")
+ (uuid "004fe717-e2d7-4c60-b167-036008deef2c")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0402_1005Metric.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Package_SO:QSOP-28_3.9x9.9mm_P0.635mm"
+ (layer "F.Cu")
+ (uuid "a9f72ff5-2a79-474f-bc73-ba842e7d42aa")
+ (at 129 111 180)
+ (descr "QSOP, 28 Pin (https://pdfserv.maximintegrated.com/package_dwgs/21-0055.PDF), generated with kicad-footprint-generator ipc_gullwing_generator.py")
+ (tags "QSOP SO")
+ (property "Reference" "U1"
+ (at 0 -5.9 180)
+ (layer "F.Fab")
+ (uuid "7a9d873e-4b9a-43f4-87b2-5c7480ac7c99")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "CH32X035G8R6"
+ (at 0 5.9 180)
+ (layer "F.Fab")
+ (uuid "a62b8f56-c857-4f2b-9e20-c2ea47aeb74c")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 180)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "d7d77e0f-7d4f-480d-8f2f-58e9ae73102f")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 180)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "875d8546-7e43-4968-9515-6b6d610493ea")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C49118551"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "f8a78dda-1045-4a97-99b6-5146dc76a3c3")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start 2.06 5.06)
+ (end -2.06 5.06)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "f47f91e7-550f-41f2-816f-0287559a3afd")
+ )
+ (fp_line
+ (start 2.06 4.5875)
+ (end 2.06 5.06)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "632a64cb-d926-4c94-a847-5ea4026f0f72")
+ )
+ (fp_line
+ (start 2.06 -5.06)
+ (end 2.06 -4.5875)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "e3aab9ce-3b74-467b-b512-24a09402ea65")
+ )
+ (fp_line
+ (start -2.06 5.06)
+ (end -2.06 4.5875)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "c7b1826e-7647-4db7-8038-2114deb70133")
+ )
+ (fp_line
+ (start -2.06 -4.5875)
+ (end -2.06 -5.06)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "7683e0cd-a13d-4f5e-948f-5a92758f4372")
+ )
+ (fp_line
+ (start -2.06 -5.06)
+ (end 2.06 -5.06)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "70256ecc-a0f1-40a5-9f1f-75d43ccf68ca")
+ )
+ (fp_poly
+ (pts
+ (xy -2.7 -4.59) (xy -3.04 -5.06) (xy -2.36 -5.06)
+ )
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (fill yes)
+ (layer "F.SilkS")
+ (uuid "d82277c5-67d4-41de-9e69-6b4232a4cda8")
+ )
+ (fp_line
+ (start 3.7 4.58)
+ (end 2.2 4.58)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "61706dda-8fef-4441-8750-89042e3526c5")
+ )
+ (fp_line
+ (start 3.7 -4.58)
+ (end 3.7 4.58)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "90414c5e-411f-42d7-b8bb-d65a4d1b474d")
+ )
+ (fp_line
+ (start 2.2 5.2)
+ (end -2.2 5.2)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "a9cb186a-74b1-42bd-b74d-3018ba933859")
+ )
+ (fp_line
+ (start 2.2 4.58)
+ (end 2.2 5.2)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "545d781c-f314-4adf-b840-6130772f329f")
+ )
+ (fp_line
+ (start 2.2 -4.58)
+ (end 3.7 -4.58)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "f56b5175-c4cc-434f-a1cf-dee8f0f97287")
+ )
+ (fp_line
+ (start 2.2 -5.2)
+ (end 2.2 -4.58)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "2a51d471-ffa2-4e10-bb6c-ad4f8c55754f")
+ )
+ (fp_line
+ (start -2.2 5.2)
+ (end -2.2 4.58)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "4ecc954d-29d5-4d87-ab33-77297c4dcb91")
+ )
+ (fp_line
+ (start -2.2 4.58)
+ (end -3.7 4.58)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "02c261ae-214d-4aa6-9f82-0374dbd19034")
+ )
+ (fp_line
+ (start -2.2 -4.58)
+ (end -2.2 -5.2)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "d2820390-6483-45fc-8a87-4ce8433328f6")
+ )
+ (fp_line
+ (start -2.2 -5.2)
+ (end 2.2 -5.2)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "004fb94e-2f19-463f-a5ba-ec672ad7fe58")
+ )
+ (fp_line
+ (start -3.7 4.58)
+ (end -3.7 -4.58)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "f7112bd4-50a1-4f91-aa84-bc23137e51f6")
+ )
+ (fp_line
+ (start -3.7 -4.58)
+ (end -2.2 -4.58)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "aeb6c738-0289-4fed-b423-3149986da71f")
+ )
+ (fp_poly
+ (pts
+ (xy -0.975 -4.95) (xy 1.95 -4.95) (xy 1.95 4.95) (xy -1.95 4.95) (xy -1.95 -3.975)
+ )
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "7b0d9e33-7ff2-4d94-a20e-4845403916e0")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 270)
+ (layer "F.Fab")
+ (uuid "743dfcad-e9ab-4e4b-8ce5-f426813174fa")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -2.6375 -4.1275 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "4c2d1ad2-5c0c-47e1-9cee-9c65bbc5417c")
+ )
+ (pad "2" smd roundrect
+ (at -2.6375 -3.4925 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 7 "DM")
+ (uuid "287f56e4-f2ab-49eb-8ae4-b25f3e13c2cb")
+ )
+ (pad "3" smd roundrect
+ (at -2.6375 -2.8575 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 8 "DP")
+ (uuid "3f281d2d-fa1d-45a9-a36f-3f4e5b7e5f91")
+ )
+ (pad "4" smd roundrect
+ (at -2.6375 -2.2225 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "de9d7f25-01c6-4608-bcba-e1f49f0e9fde")
+ )
+ (pad "5" smd roundrect
+ (at -2.6375 -1.5875 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 12 "SENS_A")
+ (uuid "c84ab6fb-4a61-422e-98a9-b116efbcbbbb")
+ )
+ (pad "6" smd roundrect
+ (at -2.6375 -0.9525 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 15 "VDD")
+ (uuid "968c9ea0-a082-41c8-9587-82618cca0b83")
+ )
+ (pad "7" smd roundrect
+ (at -2.6375 -0.3175 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 9 "GND")
+ (uuid "c4433018-4c54-4852-bc86-0e3a0df1b6fa")
+ )
+ (pad "8" smd roundrect
+ (at -2.6375 0.3175 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "a7841677-c711-4343-99e3-fa37272d3a60")
+ )
+ (pad "9" smd roundrect
+ (at -2.6375 0.9525 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 12 "SENS_A")
+ (uuid "c6770b7f-7df8-44c3-840b-6278f7d36561")
+ )
+ (pad "10" smd roundrect
+ (at -2.6375 1.5875 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "42b8c86b-c793-4405-8e69-091bd08e8f13")
+ )
+ (pad "11" smd roundrect
+ (at -2.6375 2.2225 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 13 "SENS_B")
+ (uuid "5c9f46db-abcc-467a-b5b8-ed3ba7369bdf")
+ )
+ (pad "12" smd roundrect
+ (at -2.6375 2.8575 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "db8fe2f3-3a7c-4ff6-9a0f-c912a08bede0")
+ )
+ (pad "13" smd roundrect
+ (at -2.6375 3.4925 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "a7b2044d-3f4b-4c8b-828b-1dfcec5d23a7")
+ )
+ (pad "14" smd roundrect
+ (at -2.6375 4.1275 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "2dfff98d-a8e9-4f57-ba2f-5753c231f95c")
+ )
+ (pad "15" smd roundrect
+ (at 2.6375 4.1275 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 11 "LED_DRV")
+ (uuid "d3cf05d7-c61a-4997-bdde-1a8b2a99e820")
+ )
+ (pad "16" smd roundrect
+ (at 2.6375 3.4925 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 3 "BUZ_DRV")
+ (uuid "6891f005-b0c7-494d-8ac8-e9f0ade41729")
+ )
+ (pad "17" smd roundrect
+ (at 2.6375 2.8575 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "35dccdd3-0c7d-4917-bcd1-1ce275fd3274")
+ )
+ (pad "18" smd roundrect
+ (at 2.6375 2.2225 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "660b8eb4-598c-4dfa-bbdf-799af8ce34c5")
+ )
+ (pad "19" smd roundrect
+ (at 2.6375 1.5875 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "ddc5f080-9272-41dd-baee-2b2b1f09b2e9")
+ )
+ (pad "20" smd roundrect
+ (at 2.6375 0.9525 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "75bca6e9-e6a0-4273-b970-d9fccec3f68b")
+ )
+ (pad "21" smd roundrect
+ (at 2.6375 0.3175 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "15517271-dc1e-4187-b71e-04475f6a6951")
+ )
+ (pad "22" smd roundrect
+ (at 2.6375 -0.3175 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "01a7112b-3307-43c1-a9aa-e1536f1b5041")
+ )
+ (pad "23" smd roundrect
+ (at 2.6375 -0.9525 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "5e0a1a18-4366-4f75-940a-a60d1f516a9c")
+ )
+ (pad "24" smd roundrect
+ (at 2.6375 -1.5875 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "b19fb78c-de11-46b3-9223-5ef5ba8704c1")
+ )
+ (pad "25" smd roundrect
+ (at 2.6375 -2.2225 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "64e52c2e-3c92-4f3e-9fa4-1bf0e73fbc6d")
+ )
+ (pad "26" smd roundrect
+ (at 2.6375 -2.8575 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "f7d68e91-f84f-4ea9-b634-14d9849b71af")
+ )
+ (pad "27" smd roundrect
+ (at 2.6375 -3.4925 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "329f9838-70bb-4412-8cdb-a3b4acf6db86")
+ )
+ (pad "28" smd roundrect
+ (at 2.6375 -4.1275 180)
+ (size 1.625 0.4)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (uuid "c323be8b-48ec-40b5-9623-ad7cd2ffb184")
+ )
+ (embedded_fonts no)
+ (model "${KIPRJMOD}/3d/QSOP-28.wrl"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Capacitor_SMD:C_0805_2012Metric"
+ (layer "F.Cu")
+ (uuid "b734f976-9b91-4832-9734-50ef3ee808cf")
+ (at 156.6 102.8)
+ (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
+ (tags "capacitor")
+ (property "Reference" "C1"
+ (at 0 -1.68 0)
+ (layer "F.Fab")
+ (uuid "9edcc109-0d70-41e1-84f8-9f1fa16b90df")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "10u"
+ (at 0 1.68 0)
+ (layer "F.Fab")
+ (uuid "a3e8a3da-917b-4b4c-a2cd-89ca81fa9ecf")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "4e564c39-b18b-4b29-a592-f6e5dbb87618")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "378d0323-d6b2-44a6-8086-6f3713e2c3d3")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C15850"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "c9584460-1f9e-4471-844e-39f866ae29da")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -0.261252 -0.735)
+ (end 0.261252 -0.735)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "c29f2d58-0c69-4454-8aa6-27f3e209a660")
+ )
+ (fp_line
+ (start -0.261252 0.735)
+ (end 0.261252 0.735)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "3b754f8f-928a-4a45-8940-1967299abed6")
+ )
+ (fp_rect
+ (start -1.7 -0.98)
+ (end 1.7 0.98)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.CrtYd")
+ (uuid "a648c499-170a-4a6c-be7d-0036693f0743")
+ )
+ (fp_rect
+ (start -1 -0.625)
+ (end 1 0.625)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "d06d6a63-468f-43c6-b4b7-6442045d08d7")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (uuid "378b58e8-1a3e-4f11-8da6-c13059293f4a")
+ (effects
+ (font
+ (size 0.5 0.5)
+ (thickness 0.08)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.95 0)
+ (size 1 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 14 "VBUS")
+ (uuid "8e8b73bf-c8d7-47c6-bc4f-42fc8b8ca829")
+ )
+ (pad "2" smd roundrect
+ (at 0.95 0)
+ (size 1 1.45)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 9 "GND")
+ (uuid "1fa392c1-968e-429d-835c-9752d8744738")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Resistor_SMD:R_0402_1005Metric"
+ (layer "F.Cu")
+ (uuid "d53f0d64-51e3-4e9a-9a53-cba002fc58dc")
+ (at 133.6 108.4 90)
+ (descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "resistor")
+ (property "Reference" "R7"
+ (at 0 -1.17 90)
+ (layer "F.Fab")
+ (uuid "bcbbf309-36f3-49e8-9ec6-055bdba2901a")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "22k"
+ (at 0 1.17 90)
+ (layer "F.Fab")
+ (uuid "e27a67b3-ecbb-41fd-a994-efd190fb187f")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "b70c7fd5-56d0-403f-a2c9-e010ded51a40")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "d32a0d77-c5c4-42cb-bac8-6c98252a9a7e")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C25768"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "63f48075-103b-4247-85e0-5da154c55ef1")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -0.153641 -0.38)
+ (end 0.153641 -0.38)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "e505f606-1d79-4899-b207-1cd9fd70a3c2")
+ )
+ (fp_line
+ (start -0.153641 0.38)
+ (end 0.153641 0.38)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "0d620b05-4fc0-4cf8-b48f-5b011cef2bcf")
+ )
+ (fp_rect
+ (start -0.93 -0.47)
+ (end 0.93 0.47)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.CrtYd")
+ (uuid "8a8d041d-30a1-43bc-8edd-e534c25b2352")
+ )
+ (fp_rect
+ (start -0.525 -0.27)
+ (end 0.525 0.27)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "65f3a403-57a5-43ec-9e7d-2b931d479e40")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "0ead1a70-f74c-4f7f-95aa-e06f38aaede8")
+ (effects
+ (font
+ (size 0.26 0.26)
+ (thickness 0.04)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.51 0 90)
+ (size 0.54 0.64)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 12 "SENS_A")
+ (uuid "3a6dcc3a-8be0-447d-9753-2ae5c2c6a975")
+ )
+ (pad "2" smd roundrect
+ (at 0.51 0 90)
+ (size 0.54 0.64)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 9 "GND")
+ (uuid "e61a381d-52fc-4b0d-835f-493881187000")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0402_1005Metric.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Package_TO_SOT_SMD:SOT-23"
+ (layer "F.Cu")
+ (uuid "d9910488-3112-40df-ac88-ce063eba1d9b")
+ (at 121.6 117.6)
+ (descr "SOT, 3 Pin (JEDEC TO-236 Var AB https://www.jedec.org/document_search?search_api_views_fulltext=TO-236), generated with kicad-footprint-generator ipc_gullwing_generator.py")
+ (tags "SOT TO_SOT_SMD")
+ (property "Reference" "Q1"
+ (at 0 -2.4 0)
+ (layer "F.Fab")
+ (uuid "40350358-45e9-4c9c-bd1d-3a19a955d43a")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "S8050"
+ (at 0 2.4 0)
+ (layer "F.Fab")
+ (uuid "4ab18b07-177d-4bab-90c2-85201fa94e35")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "3d3fced9-b73f-4bea-b602-96666c84947c")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "acc769c3-3f4d-4a77-9a6f-4403102d571e")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "LCSC" "C2146"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "b50b0f74-fd84-448d-ac49-fa8c16382129")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -0.76 -1.56)
+ (end 0.76 -1.56)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "437265f1-5884-45aa-9187-8e4c9406ca36")
+ )
+ (fp_line
+ (start -0.76 -1.51)
+ (end -0.76 -1.56)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "5dc8ea82-7423-4232-a06f-4e55d87d15a4")
+ )
+ (fp_line
+ (start -0.76 0.39)
+ (end -0.76 -0.39)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "4eb39937-41fc-4c87-abb2-8a480c84ea2b")
+ )
+ (fp_line
+ (start -0.76 1.56)
+ (end -0.76 1.51)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "2aac5cdb-1e3e-4858-8560-78979d473c63")
+ )
+ (fp_line
+ (start 0.76 -1.56)
+ (end 0.76 -0.56)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "aa38dbac-9cf0-47b0-a7fd-4e7ff2d96669")
+ )
+ (fp_line
+ (start 0.76 0.56)
+ (end 0.76 1.56)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "666eb491-3cf3-47bd-914e-39368467bdd4")
+ )
+ (fp_line
+ (start 0.76 1.56)
+ (end -0.76 1.56)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "874f747f-fc87-4d0a-8512-eaff7de2287e")
+ )
+ (fp_poly
+ (pts
+ (xy -1.3 -0.38) (xy -1.06 -0.05) (xy -1.54 -0.05)
+ )
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (fill yes)
+ (layer "F.SilkS")
+ (uuid "d9c57ff0-2090-47b9-9f0a-40de6276406e")
+ )
+ (fp_line
+ (start -1.93 -1.5)
+ (end -0.9 -1.5)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "28dad49a-5db4-4eb6-a858-47a3ea91e852")
+ )
+ (fp_line
+ (start -1.93 -0.39)
+ (end -1.93 -1.5)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "3f02f2c5-515e-4a37-a70f-b8bf48902bf1")
+ )
+ (fp_line
+ (start -1.93 0.39)
+ (end -0.9 0.39)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "3648939e-212e-419b-86f5-4727b2df0c54")
+ )
+ (fp_line
+ (start -1.93 1.5)
+ (end -1.93 0.39)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "58105756-3086-4f72-980c-ed1ace05260a")
+ )
+ (fp_line
+ (start -0.9 -1.7)
+ (end 0.9 -1.7)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "41e18301-cd00-4d94-bc41-afdb405d1d72")
+ )
+ (fp_line
+ (start -0.9 -1.5)
+ (end -0.9 -1.7)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "400bf58c-da74-409e-b1df-ba13bb4e038d")
+ )
+ (fp_line
+ (start -0.9 -0.39)
+ (end -1.93 -0.39)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "9bda8ac4-78f4-40a2-8a05-d960ddc9c7a7")
+ )
+ (fp_line
+ (start -0.9 0.39)
+ (end -0.9 -0.39)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "d8ba33d4-f476-4245-8140-1d38b68e7b07")
+ )
+ (fp_line
+ (start -0.9 1.5)
+ (end -1.93 1.5)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "1dae120e-c535-4903-a146-6c9ae777ee79")
+ )
+ (fp_line
+ (start -0.9 1.7)
+ (end -0.9 1.5)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "bed01b55-b48e-46b5-b7cf-506aa84a1ad8")
+ )
+ (fp_line
+ (start 0.9 -1.7)
+ (end 0.9 -0.55)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "88c35a30-df37-4af5-92cf-749c3b9d8e1c")
+ )
+ (fp_line
+ (start 0.9 -0.55)
+ (end 1.93 -0.55)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "dda5082d-98f5-4018-bc55-239203004bf7")
+ )
+ (fp_line
+ (start 0.9 0.55)
+ (end 0.9 1.7)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "6e8b22c9-99d8-4d9e-9b89-bd9d67c8c934")
+ )
+ (fp_line
+ (start 0.9 1.7)
+ (end -0.9 1.7)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "14b70b5f-0178-46fd-a9cb-70fb3ec59f97")
+ )
+ (fp_line
+ (start 1.93 -0.55)
+ (end 1.93 0.55)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "32dfbcea-3fc6-4866-9ff7-4190dc31bece")
+ )
+ (fp_line
+ (start 1.93 0.55)
+ (end 0.9 0.55)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "3c164999-f57c-4269-a5d2-f5f56caebda0")
+ )
+ (fp_poly
+ (pts
+ (xy -0.325 -1.45) (xy 0.65 -1.45) (xy 0.65 1.45) (xy -0.65 1.45) (xy -0.65 -1.125)
+ )
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (fill no)
+ (layer "F.Fab")
+ (uuid "97dadac3-3854-4806-b804-825765a50e14")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "601a5e68-b657-4487-bfdd-4c9a6c213b34")
+ (effects
+ (font
+ (size 0.72 0.72)
+ (thickness 0.11)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.9375 -0.95)
+ (size 1.475 0.6)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 2 "BUZ_B")
+ (uuid "fd2ab339-185b-4d24-b167-1873b004c16c")
+ )
+ (pad "2" smd roundrect
+ (at -0.9375 0.95)
+ (size 1.475 0.6)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 9 "GND")
+ (uuid "f596ae5c-7490-44cb-bf24-eab6ec2303f5")
+ )
+ (pad "3" smd roundrect
+ (at 0.9375 0)
+ (size 1.475 0.6)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.25)
+ (net 4 "BUZ_N")
+ (uuid "f745ad03-68fa-45b9-940b-258b2dcd867d")
+ )
+ (embedded_fonts no)
+ (model "${KICAD9_3DMODEL_DIR}/Package_TO_SOT_SMD.3dshapes/SOT-23.step"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "calibrator:Vishay_VEMT2500X01_ReverseGullwing"
+ (layer "F.Cu")
+ (uuid "e8ce6c74-6940-4524-b7a1-11f174d5bf1b")
+ (at 105 106.5)
+ (descr "Phototransistor Vishay VEMT2500X01 reverse gullwing, lens looks through a 2.3 mm hole; VEMT2000X01 is the same package")
+ (property "Reference" "Q2"
+ (at 0 -2 0)
+ (layer "F.Fab")
+ (uuid "335d554c-825d-4c00-9a2c-ea1e2fb96d97")
+ (effects
+ (font
+ (size 0.8 0.8)
+ (thickness 0.12)
+ )
+ )
+ )
+ (property "Value" "VEMT2500X01"
+ (at 0 2 0)
+ (layer "F.Fab")
+ (uuid "c7e9c35e-40c6-48f4-bb4e-65aaa41f0e9a")
+ (effects
+ (font
+ (size 0.8 0.8)
+ (thickness 0.12)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "9301f98e-6db7-4805-9185-5fb46ed5c225")
+ (effects
+ (font
+ (size 0.8 0.8)
+ (thickness 0.12)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "7bd72ab5-2916-4be3-824c-3629d39b2b21")
+ (effects
+ (font
+ (size 0.8 0.8)
+ (thickness 0.12)
+ )
+ )
+ )
+ (property "LCSC" "C3210911"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "9882c54f-fb83-4997-b00a-10474fcd3017")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -1.25 -1.25)
+ (end -1.25 -0.6)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "c54cb386-21cf-477c-be2a-ae9c759e367b")
+ )
+ (fp_line
+ (start -1.25 -1.25)
+ (end 1.25 -1.25)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "387ed010-d108-482d-b223-5ac612d764ca")
+ )
+ (fp_line
+ (start -1.25 1.25)
+ (end 1.25 1.25)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "239cff0c-15b5-48bf-b58c-bdff11c6587c")
+ )
+ (fp_line
+ (start -3.6 -1.6)
+ (end 3.6 -1.6)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "2318a1dd-919c-4a52-98ce-177ef4f71304")
+ )
+ (fp_line
+ (start -3.6 1.6)
+ (end -3.6 -1.6)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "22ce0757-2d14-4e51-ae9d-651836aab6dd")
+ )
+ (fp_line
+ (start 3.6 -1.6)
+ (end 3.6 1.6)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "50a4abee-88e5-4697-8831-b2397aec38b3")
+ )
+ (fp_line
+ (start 3.6 1.6)
+ (end -3.6 1.6)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "cfa2d3b6-22a5-408a-8412-7b7805289091")
+ )
+ (fp_line
+ (start -1.15 -1.15)
+ (end 1.15 -1.15)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "9092915a-f144-45fd-b04e-d429f86f5fe7")
+ )
+ (fp_line
+ (start -1.15 1.15)
+ (end -1.15 -1.15)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "0a399f63-d65e-4ca5-a313-1f6a2f7811e7")
+ )
+ (fp_line
+ (start 1.15 -1.15)
+ (end 1.15 1.15)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "888ef869-2282-4817-a1f5-903e4b5b4f92")
+ )
+ (fp_line
+ (start 1.15 1.15)
+ (end -1.15 1.15)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "188650a4-2ad3-4889-9606-263b79e85d68")
+ )
+ (pad "" np_thru_hole circle
+ (at 0 0)
+ (size 2.3 2.3)
+ (drill 2.3)
+ (layers "*.Cu" "*.Mask")
+ (uuid "e7f42c73-ace3-4fea-845e-1d7bcb46210b")
+ )
+ (pad "1" smd roundrect
+ (at -2.5 0)
+ (size 1.7 0.75)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.15)
+ (net 15 "VDD")
+ (uuid "0fe719ab-e2b5-4ab6-bceb-ce67928eba11")
+ )
+ (pad "2" smd roundrect
+ (at 2.5 0)
+ (size 1.7 0.75)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.15)
+ (net 12 "SENS_A")
+ (uuid "da086fca-8931-424e-9ddb-710e13915f7a")
+ )
+ (embedded_fonts no)
+ (model "${KIPRJMOD}/3d/VEMT2500X01_RGW.wrl"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "calibrator:LED_1206_ReverseMount_XL-3216UWC-FB"
+ (layer "F.Cu")
+ (uuid "ee2da1ac-e733-4678-812e-443d5f0458a3")
+ (at 104.4 111)
+ (descr "Reverse mount 1206 LED shining through a board cut-out, XINGLIGHT XL-3216UWC-FB (LCSC C3646935); Lite-On LTW-C230DS fits the same footprint")
+ (property "Reference" "D1"
+ (at 0 -1.8 0)
+ (layer "F.Fab")
+ (uuid "aeb82a29-4dee-4799-b74d-e122bb02b580")
+ (effects
+ (font
+ (size 0.8 0.8)
+ (thickness 0.12)
+ )
+ )
+ )
+ (property "Value" "XL-3216UWC-FB white"
+ (at 0 1.8 0)
+ (layer "F.Fab")
+ (uuid "9813b59b-00f4-4cde-81ab-30899a8cec2a")
+ (effects
+ (font
+ (size 0.8 0.8)
+ (thickness 0.12)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "70f62c42-a5ee-4174-866f-4628707ce52f")
+ (effects
+ (font
+ (size 0.8 0.8)
+ (thickness 0.12)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "0478b3d1-a212-4bac-b0ad-b40f09c0dfb5")
+ (effects
+ (font
+ (size 0.8 0.8)
+ (thickness 0.12)
+ )
+ )
+ )
+ (property "LCSC" "C3646935"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "9f8ceb0f-7508-4838-8e86-b118d76a755f")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -2.45 -1)
+ (end -2.45 1)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "afa858f2-0804-4e1a-9a8d-eaea78346402")
+ )
+ (fp_line
+ (start -1.05 0.35)
+ (end -1.05 -0.35)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "Edge.Cuts")
+ (uuid "ac795334-4bb7-4c1a-943e-9a31647c8e9b")
+ )
+ (fp_line
+ (start -0.55 -0.85)
+ (end 0.55 -0.85)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "Edge.Cuts")
+ (uuid "5d46bb54-8d42-4301-a181-6a42ea15da13")
+ )
+ (fp_line
+ (start 0.55 0.85)
+ (end -0.55 0.85)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "Edge.Cuts")
+ (uuid "dc184fdb-744c-4c3a-8cdf-12b3724cd370")
+ )
+ (fp_line
+ (start 1.05 -0.35)
+ (end 1.05 0.35)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "Edge.Cuts")
+ (uuid "1457c065-40a2-4224-abf0-908b09230013")
+ )
+ (fp_arc
+ (start -1.05 -0.35)
+ (mid -0.9036 -0.7036)
+ (end -0.55 -0.85)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "Edge.Cuts")
+ (uuid "55181589-4ab9-4953-b1d1-e5ce33d6d66e")
+ )
+ (fp_arc
+ (start -0.55 0.85)
+ (mid -0.9036 0.7036)
+ (end -1.05 0.35)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "Edge.Cuts")
+ (uuid "0629f980-892d-4606-bbe6-27a2cad7b71b")
+ )
+ (fp_arc
+ (start 0.55 -0.85)
+ (mid 0.9036 -0.7036)
+ (end 1.05 -0.35)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "Edge.Cuts")
+ (uuid "86871a69-0fa6-44f2-a1eb-3e26298cdd69")
+ )
+ (fp_arc
+ (start 1.05 0.35)
+ (mid 0.9036 0.7036)
+ (end 0.55 0.85)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "Edge.Cuts")
+ (uuid "3593866b-95c9-44b3-83fc-df9601d6574c")
+ )
+ (fp_line
+ (start -2.3 -1.1)
+ (end 2.3 -1.1)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "1d043938-f719-4323-9cfe-a223cb941590")
+ )
+ (fp_line
+ (start -2.3 1.1)
+ (end -2.3 -1.1)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "55b07e8a-1ebc-47b4-bbaa-3fb29474766d")
+ )
+ (fp_line
+ (start 2.3 -1.1)
+ (end 2.3 1.1)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "6933d86c-2041-4db2-8b0f-5d0705d0d68a")
+ )
+ (fp_line
+ (start 2.3 1.1)
+ (end -2.3 1.1)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "3c35b55e-9562-4b66-adb3-f45354e6c8bf")
+ )
+ (fp_line
+ (start -1.6 -0.8)
+ (end 1.6 -0.8)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "989cdfa8-9f35-4d29-919a-a2d9ad5415ba")
+ )
+ (fp_line
+ (start -1.6 0.8)
+ (end -1.6 -0.8)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "d65cd7a9-9cc6-4d0b-a376-ddf6dfc26275")
+ )
+ (fp_line
+ (start 1.6 -0.8)
+ (end 1.6 0.8)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "074bf84c-01a5-44b5-9eb3-3ae6d725ce91")
+ )
+ (fp_line
+ (start 1.6 0.8)
+ (end -1.6 0.8)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "ab5a1980-df4c-4ab6-94ad-d8f35dccba64")
+ )
+ (pad "1" smd roundrect
+ (at -1.7 0)
+ (size 0.7 1.5)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.15)
+ (net 9 "GND")
+ (uuid "ba3629a8-57ed-4989-939d-69b4f012e048")
+ )
+ (pad "2" smd roundrect
+ (at 1.7 0)
+ (size 0.7 1.5)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.15)
+ (net 10 "LED_A")
+ (uuid "07a3304f-499a-42d4-aed5-41e974d8a6fa")
+ )
+ (embedded_fonts no)
+ (model "${KIPRJMOD}/3d/LED_reverse_1206.wrl"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "calibrator:Vishay_VEMT2500X01_ReverseGullwing"
+ (layer "F.Cu")
+ (uuid "fba50a84-e70d-437d-ade9-c5a79a5a1c26")
+ (at 105 115.5)
+ (descr "Phototransistor Vishay VEMT2500X01 reverse gullwing, lens looks through a 2.3 mm hole; VEMT2000X01 is the same package")
+ (property "Reference" "Q3"
+ (at 0 -2 0)
+ (layer "F.Fab")
+ (uuid "73693b13-167e-4fce-81bd-f8f26a5534ec")
+ (effects
+ (font
+ (size 0.8 0.8)
+ (thickness 0.12)
+ )
+ )
+ )
+ (property "Value" "VEMT2500X01"
+ (at 0 2 0)
+ (layer "F.Fab")
+ (uuid "8e1be82a-8a5d-4f15-9d25-335d59403cbf")
+ (effects
+ (font
+ (size 0.8 0.8)
+ (thickness 0.12)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "c15411b5-7d33-479b-9023-7cc5246834f3")
+ (effects
+ (font
+ (size 0.8 0.8)
+ (thickness 0.12)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "9b5596cd-cecd-494c-bb85-2394ae68456e")
+ (effects
+ (font
+ (size 0.8 0.8)
+ (thickness 0.12)
+ )
+ )
+ )
+ (property "LCSC" "C3210911"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "e71a430f-bc07-4841-a548-8656fe2e0fbd")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (attr smd)
+ (fp_line
+ (start -1.25 -1.25)
+ (end -1.25 -0.6)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "172dfd67-7d8c-4d96-be9d-07c0ad1740ab")
+ )
+ (fp_line
+ (start -1.25 -1.25)
+ (end 1.25 -1.25)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "88a52dbd-a25b-4e12-ba23-2310868edc3f")
+ )
+ (fp_line
+ (start -1.25 1.25)
+ (end 1.25 1.25)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "23c818e3-4b8b-4394-9aec-c87df7afdc1f")
+ )
+ (fp_line
+ (start -3.6 -1.6)
+ (end 3.6 -1.6)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "f3c14a94-332a-41b5-8c81-55e3b5fbdafc")
+ )
+ (fp_line
+ (start -3.6 1.6)
+ (end -3.6 -1.6)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "3675091a-68f7-44fa-aaa6-f49e67dc5b89")
+ )
+ (fp_line
+ (start 3.6 -1.6)
+ (end 3.6 1.6)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "bb59486b-a929-4214-81f7-012233f81bf4")
+ )
+ (fp_line
+ (start 3.6 1.6)
+ (end -3.6 1.6)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "858d34b7-344e-42f0-8c4b-05b48f76dd9b")
+ )
+ (fp_line
+ (start -1.15 -1.15)
+ (end 1.15 -1.15)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "6f9d486b-6eb9-413b-be77-a2efb8dcf911")
+ )
+ (fp_line
+ (start -1.15 1.15)
+ (end -1.15 -1.15)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "3a12acb0-8517-4cfd-bed9-500412794e53")
+ )
+ (fp_line
+ (start 1.15 -1.15)
+ (end 1.15 1.15)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "33cc8640-c2af-42a1-856c-429da966d9c7")
+ )
+ (fp_line
+ (start 1.15 1.15)
+ (end -1.15 1.15)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "6ef2feb0-2c19-4449-ab43-276c3a9cfde1")
+ )
+ (pad "" np_thru_hole circle
+ (at 0 0)
+ (size 2.3 2.3)
+ (drill 2.3)
+ (layers "*.Cu" "*.Mask")
+ (uuid "d48d6683-2cda-45b0-89be-f06c31598690")
+ )
+ (pad "1" smd roundrect
+ (at -2.5 0)
+ (size 1.7 0.75)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.15)
+ (net 15 "VDD")
+ (uuid "26176112-652f-45c8-bf7f-8c3bd637d5be")
+ )
+ (pad "2" smd roundrect
+ (at 2.5 0)
+ (size 1.7 0.75)
+ (layers "F.Cu" "F.Mask" "F.Paste")
+ (roundrect_rratio 0.15)
+ (net 13 "SENS_B")
+ (uuid "c081198d-676a-4fd4-9bf4-ab4e6e460f3d")
+ )
+ (embedded_fonts no)
+ (model "${KIPRJMOD}/3d/VEMT2500X01_RGW.wrl"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (gr_poly
+ (pts
+ (xy 150.482268 106.807378) (xy 150.875862 108.45332) (xy 150.895002 108.481965) (xy 150.945615 108.604155)
+ (xy 150.971417 108.733871) (xy 150.971417 108.852912) (xy 151.151419 109.605649) (xy 151.695864 107.917873)
+ (xy 151.707255 107.891679) (xy 151.7082 107.888469) (xy 151.70918 107.887252) (xy 151.710516 107.884183)
+ (xy 151.732654 107.85815) (xy 151.754108 107.831553) (xy 151.756282 107.830366) (xy 151.757888 107.828479)
+ (xy 151.788317 107.812893) (xy 151.818302 107.796538) (xy 151.820763 107.796274) (xy 151.822969 107.795145)
+ (xy 151.857043 107.79239) (xy 151.89101 107.788755) (xy 151.893385 107.789453) (xy 151.895855 107.789254)
+ (xy 151.928393 107.799749) (xy 151.96116 107.809387) (xy 151.963086 107.81094) (xy 151.965446 107.811702)
+ (xy 151.991492 107.833852) (xy 152.018076 107.855295) (xy 152.019958 107.858061) (xy 152.021149 107.859074)
+ (xy 152.022674 107.862052) (xy 152.038745 107.885668) (xy 152.435249 108.612593) (xy 153.073627 108.612593)
+ (xy 153.110188 108.616194) (xy 153.177745 108.644177) (xy 153.22945 108.695882) (xy 153.257433 108.763439)
+ (xy 153.257433 108.836561) (xy 153.22945 108.904118) (xy 153.177745 108.955823) (xy 153.110188 108.983806)
+ (xy 153.073627 108.987407) (xy 152.323998 108.987407) (xy 152.311585 108.986184) (xy 152.307209 108.986653)
+ (xy 152.30261 108.9853) (xy 152.287437 108.983806) (xy 152.262722 108.973569) (xy 152.237059 108.966021)
+ (xy 152.229204 108.959685) (xy 152.21988 108.955823) (xy 152.200961 108.936904) (xy 152.180143 108.920112)
+ (xy 152.171566 108.907509) (xy 152.168175 108.904118) (xy 152.166489 108.900049) (xy 152.159474 108.88974)
+ (xy 151.918627 108.448187) (xy 151.302948 110.356793) (xy 151.30074 110.361869) (xy 151.300356 110.364281)
+ (xy 151.298077 110.367991) (xy 151.288296 110.390482) (xy 151.273802 110.407525) (xy 151.262094 110.426593)
+ (xy 151.250335 110.43512) (xy 151.240925 110.446186) (xy 151.22101 110.456386) (xy 151.202898 110.469521)
+ (xy 151.188771 110.472899) (xy 151.175843 110.479521) (xy 151.153541 110.481323) (xy 151.131781 110.486527)
+ (xy 151.117435 110.484241) (xy 151.102957 110.485412) (xy 151.081663 110.478542) (xy 151.059568 110.475023)
+ (xy 151.047189 110.467421) (xy 151.033367 110.462963) (xy 151.016323 110.448469) (xy 150.997256 110.436761)
+ (xy 150.988728 110.425002) (xy 150.977663 110.415592) (xy 150.967462 110.395677) (xy 150.954328 110.377565)
+ (xy 150.946314 110.354388) (xy 150.944328 110.35051) (xy 150.944131 110.348073) (xy 150.942323 110.342844)
+ (xy 150.702215 109.338755) (xy 150.618035 109.395002) (xy 150.495845 109.445615) (xy 150.366129 109.471417)
+ (xy 150.233871 109.471417) (xy 150.104155 109.445615) (xy 149.981965 109.395002) (xy 149.91169 109.348046)
+ (xy 149.732906 110.116819) (xy 149.730442 110.12409) (xy 149.730156 110.12727) (xy 149.727916 110.131545)
+ (xy 149.721117 110.151614) (xy 149.70727 110.17096) (xy 149.696227 110.192044) (xy 149.686176 110.200433)
+ (xy 149.678559 110.211077) (xy 149.65836 110.223653) (xy 149.640092 110.238903) (xy 149.627597 110.242807)
+ (xy 149.616486 110.249726) (xy 149.593014 110.253615) (xy 149.570298 110.260714) (xy 149.557257 110.259539)
+ (xy 149.544346 110.261679) (xy 149.521171 110.256289) (xy 149.49747 110.254155) (xy 149.485873 110.24808)
+ (xy 149.473125 110.245116) (xy 149.453776 110.231267) (xy 149.432696 110.220226) (xy 149.424307 110.210176)
+ (xy 149.413662 110.202558) (xy 149.401084 110.182357) (xy 149.385836 110.164091) (xy 149.377562 110.14458)
+ (xy 149.375013 110.140485) (xy 149.374491 110.137336) (xy 149.371494 110.130268) (xy 148.77904 108.234416)
+ (xy 148.524967 108.869601) (xy 148.508045 108.90221) (xy 148.507232 108.903042) (xy 148.506787 108.904118)
+ (xy 148.481719 108.929185) (xy 148.456974 108.954542) (xy 148.455904 108.955) (xy 148.455082 108.955823)
+ (xy 148.422327 108.96939) (xy 148.389764 108.983346) (xy 148.388601 108.98336) (xy 148.387525 108.983806)
+ (xy 148.350964 108.987407) (xy 147.526372 108.987407) (xy 147.489811 108.983806) (xy 147.422254 108.955823)
+ (xy 147.370549 108.904118) (xy 147.342566 108.836561) (xy 147.342566 108.763439) (xy 147.370549 108.695882)
+ (xy 147.422254 108.644177) (xy 147.489811 108.616194) (xy 147.526372 108.612593) (xy 148.224083 108.612593)
+ (xy 148.626738 107.605955) (xy 148.64366 107.573346) (xy 148.650403 107.566436) (xy 148.654884 107.557882)
+ (xy 148.675748 107.540465) (xy 148.694731 107.521014) (xy 148.703607 107.51721) (xy 148.71102 107.511022)
+ (xy 148.736961 107.502915) (xy 148.761941 107.49221) (xy 148.771596 107.492092) (xy 148.780813 107.489212)
+ (xy 148.807882 107.491649) (xy 148.835059 107.491318) (xy 148.844023 107.494904) (xy 148.853641 107.49577)
+ (xy 148.877718 107.508381) (xy 148.902951 107.518475) (xy 148.90986 107.525218) (xy 148.918415 107.529699)
+ (xy 148.935831 107.550563) (xy 148.955283 107.569546) (xy 148.959086 107.578422) (xy 148.965275 107.585835)
+ (xy 148.979617 107.619657) (xy 149.523829 109.361138) (xy 149.633361 108.890152) (xy 149.628583 108.866129)
+ (xy 149.628583 108.750655) (xy 149.925186 108.750655) (xy 149.925186 108.849345) (xy 149.950729 108.944673)
+ (xy 149.989771 109.012296) (xy 149.989771 109.012297) (xy 150.000074 109.030142) (xy 150.069858 109.099926)
+ (xy 150.155327 109.149272) (xy 150.250655 109.174815) (xy 150.349345 109.174815) (xy 150.444673 109.149272)
+ (xy 150.530142 109.099926) (xy 150.599926 109.030142) (xy 150.620072 108.995248) (xy 150.620071 108.995247)
+ (xy 150.649271 108.944673) (xy 150.674814 108.849345) (xy 150.674814 108.750655) (xy 150.649271 108.655327)
+ (xy 150.599926 108.569859) (xy 150.530141 108.500074) (xy 150.497099 108.480997) (xy 150.497099 108.480996)
+ (xy 150.444673 108.450728) (xy 150.349345 108.425185) (xy 150.250655 108.425185) (xy 150.155327 108.450728)
+ (xy 150.114947 108.474041) (xy 150.114946 108.474042) (xy 150.069859 108.500074) (xy 150.000074 108.569859)
+ (xy 149.950729 108.655327) (xy 149.925186 108.750655) (xy 149.628583 108.750655) (xy 149.628583 108.733871)
+ (xy 149.654385 108.604155) (xy 149.704998 108.481965) (xy 149.740722 108.428498) (xy 149.808598 108.13663)
+ (xy 150.193415 108.13663) (xy 150.233871 108.128583) (xy 150.366129 108.128583) (xy 150.415158 108.138335)
+ (xy 150.302541 107.66739) (xy 150.193415 108.13663) (xy 149.808598 108.13663) (xy 149.927436 107.62563)
+ (xy 150.106296 107.62563) (xy 150.493703 107.62563) (xy 150.493703 107.125778) (xy 150.106296 107.125778)
+ (xy 150.106296 107.62563) (xy 149.927436 107.62563) (xy 150.117464 106.808513) (xy 150.119996 106.801038)
+ (xy 150.480076 106.801038)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "F.Cu")
+ (uuid "7927278d-74b9-4a26-8665-12a4f1f78541")
+ )
+ (gr_poly
+ (pts
+ (xy 150.515431 106.765683) (xy 150.527331 106.7847) (xy 150.529523 106.79104) (xy 150.530897 106.795749)
+ (xy 150.922409 108.432985) (xy 150.936575 108.454186) (xy 150.941196 108.462831) (xy 150.991809 108.585021)
+ (xy 150.994654 108.594401) (xy 151.020456 108.724117) (xy 151.021417 108.733871) (xy 151.021417 108.847016)
+ (xy 151.158577 109.420595) (xy 151.648279 107.902523) (xy 151.650012 107.897933) (xy 151.660165 107.874583)
+ (xy 151.660235 107.874349) (xy 151.66043 107.873976) (xy 151.661403 107.871739) (xy 151.661564 107.871809)
+ (xy 151.663817 107.867504) (xy 151.663336 107.867295) (xy 151.664672 107.864226) (xy 151.672426 107.851792)
+ (xy 151.694152 107.826242) (xy 151.715191 107.800161) (xy 151.719137 107.796864) (xy 151.719811 107.796073)
+ (xy 151.725029 107.791942) (xy 151.730147 107.787668) (xy 151.731061 107.787168) (xy 151.735094 107.783977)
+ (xy 151.764946 107.768686) (xy 151.79436 107.752643) (xy 151.799262 107.751109) (xy 151.80019 107.750635)
+ (xy 151.806639 107.748802) (xy 151.812969 107.746823) (xy 151.813993 107.746713) (xy 151.818939 107.745308)
+ (xy 151.852361 107.742605) (xy 151.88569 107.739039) (xy 151.890803 107.739498) (xy 151.89184 107.739415)
+ (xy 151.89851 107.740191) (xy 151.905108 107.740784) (xy 151.906092 107.741073) (xy 151.911204 107.741668)
+ (xy 151.943134 107.751966) (xy 151.975269 107.761419) (xy 151.979819 107.763801) (xy 151.980809 107.764121)
+ (xy 151.986674 107.76739) (xy 151.992545 107.770464) (xy 151.993343 107.771107) (xy 151.997838 107.773613)
+ (xy 152.023391 107.795344) (xy 152.049467 107.816377) (xy 152.059415 107.827168) (xy 152.061297 107.829934)
+ (xy 152.06086 107.83023) (xy 152.063862 107.834022) (xy 152.06401 107.833922) (xy 152.065399 107.835963)
+ (xy 152.065653 107.836284) (xy 152.065761 107.836495) (xy 152.080081 107.857538) (xy 152.08264 107.861725)
+ (xy 152.464931 108.562593) (xy 153.073627 108.562593) (xy 153.078528 108.562834) (xy 153.115089 108.566435)
+ (xy 153.129322 108.57) (xy 153.196879 108.597983) (xy 153.2131 108.608822) (xy 153.264805 108.660527)
+ (xy 153.275644 108.676748) (xy 153.303627 108.744305) (xy 153.307433 108.763439) (xy 153.307433 108.836561)
+ (xy 153.303627 108.855695) (xy 153.275644 108.923252) (xy 153.264805 108.939473) (xy 153.2131 108.991178)
+ (xy 153.196879 109.002017) (xy 153.129322 109.03) (xy 153.115089 109.033565) (xy 153.078528 109.037166)
+ (xy 153.073627 109.037407) (xy 152.323998 109.037407) (xy 152.319095 109.037166) (xy 152.306682 109.035943)
+ (xy 152.306691 109.035842) (xy 152.297712 109.035035) (xy 152.29771 109.035059) (xy 152.294877 109.03478)
+ (xy 152.293097 109.03462) (xy 152.293019 109.034597) (xy 152.282537 109.033565) (xy 152.268303 109.03)
+ (xy 152.24605 109.020783) (xy 152.222951 109.013989) (xy 152.205667 109.004938) (xy 152.203417 109.003123)
+ (xy 152.200746 109.002017) (xy 152.184525 108.991178) (xy 152.167496 108.974149) (xy 152.148752 108.95903)
+ (xy 152.138807 108.948243) (xy 152.132878 108.939531) (xy 152.13282 108.939473) (xy 152.131805 108.937954)
+ (xy 152.13023 108.93564) (xy 152.130249 108.935626) (xy 152.125233 108.928122) (xy 152.125152 108.928178)
+ (xy 152.118137 108.917869) (xy 152.115579 108.913683) (xy 151.930474 108.574324) (xy 151.350533 110.372143)
+ (xy 151.348798 110.376737) (xy 151.34659 110.381813) (xy 151.346216 110.38165) (xy 151.343897 110.387917)
+ (xy 151.343929 110.387931) (xy 151.343685 110.38849) (xy 151.34296 110.390452) (xy 151.342523 110.391161)
+ (xy 151.334148 110.410422) (xy 151.326385 110.422874) (xy 151.314389 110.436978) (xy 151.304703 110.452755)
+ (xy 151.291446 110.467071) (xy 151.284539 110.472079) (xy 151.279015 110.478576) (xy 151.263718 110.490688)
+ (xy 151.247239 110.499127) (xy 151.232252 110.509997) (xy 151.214526 110.51815) (xy 151.206231 110.520133)
+ (xy 151.198638 110.524023) (xy 151.17987 110.529359) (xy 151.161415 110.53085) (xy 151.143411 110.535156)
+ (xy 151.123913 110.535904) (xy 151.115488 110.534561) (xy 151.106988 110.535249) (xy 151.087605 110.532997)
+ (xy 151.069986 110.527312) (xy 151.051704 110.524401) (xy 151.033403 110.51763) (xy 151.026134 110.513166)
+ (xy 151.018019 110.510549) (xy 151.000976 110.501053) (xy 150.986867 110.489055) (xy 150.971093 110.479369)
+ (xy 150.95678 110.466116) (xy 150.95177 110.459208) (xy 150.945271 110.453681) (xy 150.933161 110.438387)
+ (xy 150.924718 110.421904) (xy 150.91385 110.406917) (xy 150.907073 110.393904) (xy 150.900208 110.374052)
+ (xy 150.899824 110.373301) (xy 150.899246 110.371269) (xy 150.899059 110.370727) (xy 150.899089 110.370716)
+ (xy 150.897259 110.364279) (xy 150.896876 110.364412) (xy 150.895068 110.359183) (xy 150.893694 110.354473)
+ (xy 150.670286 109.420223) (xy 150.645813 109.436576) (xy 150.637169 109.441196) (xy 150.514979 109.491809)
+ (xy 150.505599 109.494654) (xy 150.375883 109.520456) (xy 150.366129 109.521417) (xy 150.233871 109.521417)
+ (xy 150.224117 109.520456) (xy 150.094401 109.494654) (xy 150.085021 109.491809) (xy 149.962831 109.441196)
+ (xy 149.954187 109.436576) (xy 149.944016 109.42978) (xy 149.781606 110.128145) (xy 149.780261 110.132867)
+ (xy 149.777797 110.140138) (xy 149.777514 110.140042) (xy 149.774445 110.150476) (xy 149.774016 110.151293)
+ (xy 149.768473 110.167657) (xy 149.761775 110.180715) (xy 149.749951 110.197234) (xy 149.740519 110.215243)
+ (xy 149.728266 110.23043) (xy 149.72312 110.234724) (xy 149.71922 110.240175) (xy 149.704986 110.253523)
+ (xy 149.687729 110.264266) (xy 149.672134 110.277286) (xy 149.655003 110.286628) (xy 149.648602 110.288627)
+ (xy 149.642916 110.292169) (xy 149.624659 110.299054) (xy 149.60461 110.302375) (xy 149.585212 110.308438)
+ (xy 149.565811 110.310512) (xy 149.559132 110.30991) (xy 149.552522 110.311006) (xy 149.533019 110.310379)
+ (xy 149.513231 110.305776) (xy 149.492986 110.303954) (xy 149.474269 110.298446) (xy 149.468329 110.295334)
+ (xy 149.461802 110.293817) (xy 149.444024 110.285775) (xy 149.427496 110.273945) (xy 149.409497 110.264518)
+ (xy 149.394311 110.252267) (xy 149.390014 110.247119) (xy 149.384564 110.243219) (xy 149.371217 110.228986)
+ (xy 149.360474 110.211733) (xy 149.347452 110.196133) (xy 149.339804 110.183612) (xy 149.333052 110.167691)
+ (xy 149.332565 110.166908) (xy 149.328731 110.156739) (xy 149.328458 110.156855) (xy 149.325461 110.149787)
+ (xy 149.32377 110.145182) (xy 148.77325 108.383519) (xy 148.571391 108.88817) (xy 148.569347 108.892631)
+ (xy 148.552425 108.92524) (xy 148.543806 108.937155) (xy 148.543441 108.937527) (xy 148.542142 108.939474)
+ (xy 148.517301 108.964313) (xy 148.492759 108.989463) (xy 148.49083 108.990785) (xy 148.490459 108.991157)
+ (xy 148.483587 108.995751) (xy 148.476649 109.000508) (xy 148.476157 109.000718) (xy 148.474215 109.002017)
+ (xy 148.441758 109.01546) (xy 148.40946 109.029303) (xy 148.407171 109.029787) (xy 148.40667 109.029995)
+ (xy 148.392426 109.033565) (xy 148.355865 109.037166) (xy 148.350964 109.037407) (xy 147.526372 109.037407)
+ (xy 147.521471 109.037166) (xy 147.48491 109.033565) (xy 147.470677 109.03) (xy 147.40312 109.002017)
+ (xy 147.386899 108.991178) (xy 147.335194 108.939473) (xy 147.324355 108.923252) (xy 147.296372 108.855695)
+ (xy 147.292566 108.836561) (xy 147.292566 108.763439) (xy 147.296372 108.744305) (xy 147.324355 108.676748)
+ (xy 147.335194 108.660527) (xy 147.386899 108.608822) (xy 147.40312 108.597983) (xy 147.470677 108.57)
+ (xy 147.48491 108.566435) (xy 147.521471 108.562834) (xy 147.526372 108.562593) (xy 148.190231 108.562593)
+ (xy 148.580314 107.587385) (xy 148.582358 107.582925) (xy 148.59928 107.550316) (xy 148.607875 107.538426)
+ (xy 148.609506 107.536754) (xy 148.610593 107.53468) (xy 148.622842 107.519498) (xy 148.64175 107.503713)
+ (xy 148.658948 107.486092) (xy 148.675035 107.475057) (xy 148.677184 107.474135) (xy 148.678979 107.472638)
+ (xy 148.696106 107.463298) (xy 148.719609 107.455952) (xy 148.742246 107.446252) (xy 148.76133 107.442214)
+ (xy 148.763669 107.442185) (xy 148.765901 107.441488) (xy 148.785296 107.439413) (xy 148.80983 107.441621)
+ (xy 148.83445 107.441322) (xy 148.85363 107.444895) (xy 148.855795 107.445761) (xy 148.858125 107.445971)
+ (xy 148.87684 107.451478) (xy 148.898657 107.462905) (xy 148.921522 107.472052) (xy 148.937874 107.482692)
+ (xy 148.939544 107.484322) (xy 148.941615 107.485407) (xy 148.9568 107.497658) (xy 148.972583 107.516566)
+ (xy 148.990204 107.533762) (xy 149.001242 107.549854) (xy 149.002161 107.551999) (xy 149.003657 107.553791)
+ (xy 149.011307 107.566315) (xy 149.025649 107.600137) (xy 149.027341 107.604743) (xy 149.516748 109.170849)
+ (xy 149.582218 108.889329) (xy 149.579544 108.875883) (xy 149.578583 108.866129) (xy 149.578583 108.757236)
+ (xy 149.975186 108.757236) (xy 149.975186 108.842763) (xy 149.997321 108.925373) (xy 150.033072 108.987296)
+ (xy 150.033072 108.987297) (xy 150.040084 108.999442) (xy 150.100557 109.059915) (xy 150.174626 109.102679)
+ (xy 150.257237 109.124815) (xy 150.342763 109.124815) (xy 150.425373 109.102679) (xy 150.499442 109.059915)
+ (xy 150.559915 108.999442) (xy 150.576768 108.970252) (xy 150.57677 108.970246) (xy 150.602679 108.925371)
+ (xy 150.624814 108.842763) (xy 150.624814 108.757236) (xy 150.602678 108.674626) (xy 150.559915 108.600558)
+ (xy 150.499441 108.540084) (xy 150.472099 108.524298) (xy 150.472097 108.524296) (xy 150.425373 108.49732)
+ (xy 150.342763 108.475185) (xy 150.257237 108.475185) (xy 150.174626 108.49732) (xy 150.139952 108.517338)
+ (xy 150.139947 108.517343) (xy 150.100557 108.540085) (xy 150.040084 108.600558) (xy 149.997321 108.674626)
+ (xy 149.975186 108.757236) (xy 149.578583 108.757236) (xy 149.578583 108.733871) (xy 149.579544 108.724117)
+ (xy 149.605346 108.594401) (xy 149.608191 108.585021) (xy 149.658804 108.462831) (xy 149.663424 108.454187)
+ (xy 149.694086 108.408295) (xy 149.759898 108.125304) (xy 149.770763 108.078583) (xy 150.258248 108.078583)
+ (xy 150.34946 108.078583) (xy 150.303218 107.885211) (xy 150.258248 108.078583) (xy 149.770763 108.078583)
+ (xy 149.878736 107.614304) (xy 149.88773 107.57563) (xy 150.156296 107.57563) (xy 150.443703 107.57563)
+ (xy 150.443703 107.175778) (xy 150.156296 107.175778) (xy 150.156296 107.57563) (xy 149.88773 107.57563)
+ (xy 150.068764 106.797187) (xy 150.070107 106.792472) (xy 150.072639 106.784997) (xy 150.097852 106.756209)
+ (xy 150.119996 106.751038) (xy 150.480076 106.751038)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "F.Mask")
+ (uuid "d0e83a23-de62-4883-b3fa-c93f6d97d8f3")
+ )
+ (gr_poly
+ (pts
+ (xy 132.014825 106.538373) (xy 132.015777 106.544349) (xy 132.023099 106.565961) (xy 132.483558 108.545937)
+ (xy 132.527226 108.61129) (xy 132.589086 108.760633) (xy 132.620622 108.919176) (xy 132.620622 109.080824)
+ (xy 132.61478 109.11019) (xy 132.748651 109.685832) (xy 133.413799 107.557359) (xy 133.431329 107.51602)
+ (xy 133.438891 107.50696) (xy 133.443541 107.496112) (xy 133.467314 107.472911) (xy 133.488601 107.447411)
+ (xy 133.499056 107.441934) (xy 133.507502 107.433692) (xy 133.53834 107.421356) (xy 133.56777 107.405941)
+ (xy 133.579525 107.404882) (xy 133.590482 107.4005) (xy 133.6237 107.400904) (xy 133.656782 107.397926)
+ (xy 133.668043 107.401445) (xy 133.679848 107.401589) (xy 133.710386 107.414676) (xy 133.742086 107.424583)
+ (xy 133.751145 107.432145) (xy 133.761994 107.436795) (xy 133.785194 107.460568) (xy 133.810695 107.481855)
+ (xy 133.816171 107.492309) (xy 133.824414 107.500756) (xy 133.845096 107.540612) (xy 134.33723 108.770947)
+ (xy 135.189989 108.770947) (xy 135.234675 108.775348) (xy 135.317244 108.809549) (xy 135.38044 108.872745)
+ (xy 135.414641 108.955314) (xy 135.414641 109.044686) (xy 135.38044 109.127255) (xy 135.317244 109.190451)
+ (xy 135.234675 109.224652) (xy 135.189989 109.229053) (xy 134.182154 109.229053) (xy 134.137468 109.224652)
+ (xy 134.136155 109.224108) (xy 134.134732 109.224091) (xy 134.094899 109.207019) (xy 134.054899 109.190451)
+ (xy 134.053893 109.189445) (xy 134.052586 109.188885) (xy 134.022327 109.157879) (xy 133.991703 109.127255)
+ (xy 133.991158 109.125941) (xy 133.990166 109.124924) (xy 133.969484 109.085068) (xy 133.658949 108.30873)
+ (xy 132.93484 110.625883) (xy 132.931176 110.634522) (xy 132.930539 110.63837) (xy 132.927421 110.643376)
+ (xy 132.91731 110.667222) (xy 132.898673 110.689548) (xy 132.8833 110.714238) (xy 132.87029 110.723549)
+ (xy 132.860038 110.735831) (xy 132.834273 110.749327) (xy 132.810624 110.766253) (xy 132.795042 110.769876)
+ (xy 132.780869 110.777301) (xy 132.751899 110.779909) (xy 132.723575 110.786497) (xy 132.707792 110.783881)
+ (xy 132.691857 110.785317) (xy 132.664098 110.776642) (xy 132.635405 110.771888) (xy 132.621821 110.76343)
+ (xy 132.606553 110.758659) (xy 132.58423 110.740024) (xy 132.559537 110.72465) (xy 132.550224 110.711637)
+ (xy 132.537944 110.701387) (xy 132.524449 110.675625) (xy 132.507522 110.651974) (xy 132.499211 110.627444)
+ (xy 132.496474 110.622218) (xy 132.496123 110.61833) (xy 132.493114 110.609446) (xy 132.2746 109.669836)
+ (xy 132.18871 109.727226) (xy 132.039367 109.789086) (xy 131.880824 109.820622) (xy 131.719176 109.820622)
+ (xy 131.560633 109.789086) (xy 131.41129 109.727226) (xy 131.308402 109.658478) (xy 131.014937 110.885698)
+ (xy 131.012727 110.892087) (xy 131.012487 110.895067) (xy 131.010057 110.899809) (xy 131.000264 110.928135)
+ (xy 130.984211 110.950271) (xy 130.971744 110.974612) (xy 130.958219 110.986113) (xy 130.947798 111.000485)
+ (xy 130.924494 111.014794) (xy 130.903662 111.032511) (xy 130.886765 111.037961) (xy 130.871637 111.047251)
+ (xy 130.844629 111.051553) (xy 130.818606 111.059948) (xy 130.800911 111.058517) (xy 130.783378 111.061311)
+ (xy 130.756782 111.054951) (xy 130.729524 111.052748) (xy 130.71372 111.044653) (xy 130.696456 111.040525)
+ (xy 130.674319 111.024472) (xy 130.649979 111.012005) (xy 130.638478 110.998481) (xy 130.624106 110.988059)
+ (xy 130.609795 110.964752) (xy 130.592081 110.943923) (xy 130.580127 110.916437) (xy 130.57734 110.911898)
+ (xy 130.576869 110.908947) (xy 130.574173 110.902746) (xy 129.821676 108.570007) (xy 129.527309 109.109682)
+ (xy 129.518735 109.122281) (xy 129.516675 109.127255) (xy 129.51253 109.131399) (xy 129.502047 109.146805)
+ (xy 129.476598 109.167331) (xy 129.453479 109.190451) (xy 129.442083 109.195171) (xy 129.432484 109.202914)
+ (xy 129.401119 109.212138) (xy 129.37091 109.224652) (xy 129.352365 109.226478) (xy 129.346743 109.228132)
+ (xy 129.341391 109.227559) (xy 129.326224 109.229053) (xy 128.41001 109.229053) (xy 128.365324 109.224652)
+ (xy 128.282755 109.190451) (xy 128.219559 109.127255) (xy 128.185358 109.044686) (xy 128.185358 108.955314)
+ (xy 128.219559 108.872745) (xy 128.282755 108.809549) (xy 128.365324 108.775348) (xy 128.41001 108.770947)
+ (xy 129.19025 108.770947) (xy 129.674867 107.882483) (xy 129.694506 107.853623) (xy 129.696373 107.849979)
+ (xy 129.697829 107.84874) (xy 129.700129 107.845361) (xy 129.732618 107.819155) (xy 129.764455 107.79208)
+ (xy 129.767337 107.79115) (xy 129.769692 107.789251) (xy 129.80974 107.777472) (xy 129.849511 107.764643)
+ (xy 129.852529 107.764886) (xy 129.855433 107.764033) (xy 129.896962 107.768478) (xy 129.938593 107.771844)
+ (xy 129.941286 107.773223) (xy 129.944297 107.773546) (xy 129.980961 107.793544) (xy 130.018138 107.812586)
+ (xy 130.020099 107.814892) (xy 130.022757 107.816342) (xy 130.048972 107.848843) (xy 130.076037 107.880668)
+ (xy 130.077669 107.884421) (xy 130.078866 107.885905) (xy 130.080018 107.889823) (xy 130.093944 107.921845)
+ (xy 130.759375 109.984682) (xy 130.979378 109.064671) (xy 130.979378 108.939689) (xy 131.341893 108.939689)
+ (xy 131.341893 109.060311) (xy 131.373112 109.176823) (xy 131.408799 109.238635) (xy 131.408799 109.238637)
+ (xy 131.433422 109.281285) (xy 131.518715 109.366578) (xy 131.623177 109.426889) (xy 131.739689 109.458108)
+ (xy 131.860311 109.458108) (xy 131.976823 109.426889) (xy 132.081285 109.366578) (xy 132.166578 109.281285)
+ (xy 132.179168 109.259478) (xy 132.179167 109.259476) (xy 132.226888 109.176823) (xy 132.258107 109.060311)
+ (xy 132.258107 108.939689) (xy 132.226888 108.823177) (xy 132.166577 108.718716) (xy 132.081284 108.633423)
+ (xy 132.026174 108.601605) (xy 132.026174 108.601603) (xy 131.976823 108.573111) (xy 131.860311 108.541892)
+ (xy 131.739689 108.541892) (xy 131.623177 108.573111) (xy 131.5591 108.610105) (xy 131.559099 108.610107)
+ (xy 131.518716 108.633423) (xy 131.433423 108.718716) (xy 131.373112 108.823177) (xy 131.341893 108.939689)
+ (xy 130.979378 108.939689) (xy 130.979378 108.919176) (xy 131.010914 108.760633) (xy 131.072774 108.61129)
+ (xy 131.096167 108.576278) (xy 131.188228 108.191297) (xy 131.65925 108.191297) (xy 131.719176 108.179378)
+ (xy 131.880824 108.179378) (xy 131.930269 108.189213) (xy 131.796893 107.615698) (xy 131.65925 108.191297)
+ (xy 131.188228 108.191297) (xy 131.34339 107.542437) (xy 131.585473 107.542437) (xy 132.014526 107.542437)
+ (xy 132.014526 106.975952) (xy 131.585473 106.975952) (xy 131.585473 107.542437) (xy 131.34339 107.542437)
+ (xy 131.577228 106.564573) (xy 131.584684 106.543006) (xy 131.585674 106.537037) (xy 131.58719 106.534602)
+ (xy 132.012509 106.534602)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.Cu")
+ (uuid "ea8d243b-3d45-49f8-92ae-580229fc7986")
+ )
+ (gr_poly
+ (pts
+ (xy 132.047864 106.499247) (xy 132.055115 106.508435) (xy 132.057431 106.512206) (xy 132.064202 106.530507)
+ (xy 132.064488 106.532306) (xy 132.070455 106.549917) (xy 132.071799 106.554635) (xy 132.530193 108.525734)
+ (xy 132.568799 108.583511) (xy 132.57342 108.592156) (xy 132.63528 108.741499) (xy 132.638125 108.750879)
+ (xy 132.669661 108.909422) (xy 132.670622 108.919176) (xy 132.670622 109.080824) (xy 132.669661 109.09058)
+ (xy 132.665923 109.109369) (xy 132.755731 109.495543) (xy 133.366075 107.542445) (xy 133.367767 107.537839)
+ (xy 133.385297 107.4965) (xy 133.392943 107.483981) (xy 133.395816 107.480537) (xy 133.397585 107.476413)
+ (xy 133.408619 107.460329) (xy 133.430562 107.438913) (xy 133.450217 107.415369) (xy 133.465399 107.40312)
+ (xy 133.469371 107.401038) (xy 133.472581 107.397907) (xy 133.488931 107.387269) (xy 133.517396 107.375882)
+ (xy 133.54457 107.361649) (xy 133.563284 107.356143) (xy 133.56775 107.35574) (xy 133.571915 107.354075)
+ (xy 133.59109 107.350504) (xy 133.62175 107.350876) (xy 133.652299 107.348127) (xy 133.671696 107.350202)
+ (xy 133.675972 107.351538) (xy 133.680458 107.351593) (xy 133.699543 107.355631) (xy 133.727735 107.367712)
+ (xy 133.757001 107.376859) (xy 133.774127 107.386199) (xy 133.777566 107.38907) (xy 133.781691 107.390838)
+ (xy 133.797778 107.401874) (xy 133.819195 107.42382) (xy 133.842736 107.443471) (xy 133.854986 107.458654)
+ (xy 133.857065 107.462624) (xy 133.860199 107.465835) (xy 133.868794 107.477726) (xy 133.889476 107.517582)
+ (xy 133.89152 107.522042) (xy 134.371082 108.720947) (xy 135.189989 108.720947) (xy 135.19489 108.721188)
+ (xy 135.239576 108.725589) (xy 135.253809 108.729154) (xy 135.336378 108.763355) (xy 135.352599 108.774194)
+ (xy 135.415795 108.83739) (xy 135.426634 108.853611) (xy 135.460835 108.93618) (xy 135.464641 108.955314)
+ (xy 135.464641 109.044686) (xy 135.460835 109.06382) (xy 135.426634 109.146389) (xy 135.415795 109.16261)
+ (xy 135.352599 109.225806) (xy 135.336378 109.236645) (xy 135.253809 109.270846) (xy 135.239576 109.274411)
+ (xy 135.19489 109.278812) (xy 135.189989 109.279053) (xy 134.182154 109.279053) (xy 134.177253 109.278812)
+ (xy 134.132567 109.274411) (xy 134.11833 109.270844) (xy 134.11784 109.270641) (xy 134.115035 109.270048)
+ (xy 134.075466 109.253089) (xy 134.035765 109.236645) (xy 134.033383 109.235053) (xy 134.032894 109.234844)
+ (xy 134.026245 109.230283) (xy 134.019544 109.225806) (xy 134.019167 109.225429) (xy 134.016802 109.223807)
+ (xy 133.986705 109.192967) (xy 133.956348 109.16261) (xy 133.954757 109.160231) (xy 133.954373 109.159837)
+ (xy 133.945786 109.147954) (xy 133.925104 109.108098) (xy 133.92306 109.103638) (xy 133.664738 108.457834)
+ (xy 132.982564 110.640797) (xy 132.980871 110.645406) (xy 132.977207 110.654045) (xy 132.97706 110.653982)
+ (xy 132.97298 110.664804) (xy 132.971929 110.66649) (xy 132.963343 110.686741) (xy 132.955694 110.699264)
+ (xy 132.939282 110.718924) (xy 132.925745 110.740666) (xy 132.912399 110.754898) (xy 132.904584 110.760491)
+ (xy 132.898423 110.767872) (xy 132.883238 110.780123) (xy 132.860546 110.792009) (xy 132.839724 110.806912)
+ (xy 132.821948 110.814954) (xy 132.812585 110.81713) (xy 132.804072 110.821591) (xy 132.785352 110.8271)
+ (xy 132.759839 110.829396) (xy 132.734902 110.835197) (xy 132.715399 110.835824) (xy 132.705917 110.834252)
+ (xy 132.696345 110.835115) (xy 132.676943 110.833041) (xy 132.652501 110.825402) (xy 132.627232 110.821216)
+ (xy 132.608977 110.814333) (xy 132.600811 110.809249) (xy 132.59164 110.806383) (xy 132.574511 110.797043)
+ (xy 132.554855 110.780635) (xy 132.53311 110.767096) (xy 132.518877 110.753749) (xy 132.51328 110.745929)
+ (xy 132.505904 110.739772) (xy 132.493653 110.724588) (xy 132.481768 110.7019) (xy 132.466863 110.681074)
+ (xy 132.460166 110.668019) (xy 132.453105 110.64718) (xy 132.452181 110.645415) (xy 132.448915 110.634319)
+ (xy 132.448766 110.63437) (xy 132.445757 110.625486) (xy 132.444414 110.620772) (xy 132.242273 109.75157)
+ (xy 132.216489 109.768799) (xy 132.207844 109.77342) (xy 132.058501 109.83528) (xy 132.049121 109.838125)
+ (xy 131.890578 109.869661) (xy 131.880824 109.870622) (xy 131.719176 109.870622) (xy 131.709422 109.869661)
+ (xy 131.550879 109.838125) (xy 131.541499 109.83528) (xy 131.392156 109.77342) (xy 131.383511 109.768799)
+ (xy 131.34033 109.739946) (xy 131.063566 110.897327) (xy 131.06219 110.902043) (xy 131.05998 110.908432)
+ (xy 131.059695 110.908333) (xy 131.056985 110.917869) (xy 131.056162 110.919474) (xy 131.04752 110.944472)
+ (xy 131.040741 110.957489) (xy 131.02695 110.976505) (xy 131.016246 110.997405) (xy 131.004134 111.012702)
+ (xy 130.995179 111.020316) (xy 130.988277 111.029836) (xy 130.973961 111.043094) (xy 130.953944 111.055384)
+ (xy 130.936055 111.070599) (xy 130.91901 111.080097) (xy 130.907819 111.083706) (xy 130.897802 111.089858)
+ (xy 130.879502 111.096629) (xy 130.856302 111.100324) (xy 130.833957 111.107533) (xy 130.814576 111.109785)
+ (xy 130.802859 111.108837) (xy 130.791247 111.110688) (xy 130.771749 111.10994) (xy 130.748903 111.104476)
+ (xy 130.725496 111.102585) (xy 130.70673 111.09725) (xy 130.696261 111.091887) (xy 130.684828 111.089154)
+ (xy 130.667103 111.081002) (xy 130.64809 111.067214) (xy 130.627185 111.056507) (xy 130.61189 111.044397)
+ (xy 130.604271 111.035438) (xy 130.594753 111.028536) (xy 130.581497 111.014222) (xy 130.569205 110.994203)
+ (xy 130.553992 110.976315) (xy 130.54623 110.963864) (xy 130.535679 110.939603) (xy 130.534731 110.93806)
+ (xy 130.53129 110.928763) (xy 130.531015 110.928883) (xy 130.528319 110.922682) (xy 130.526588 110.918096)
+ (xy 129.809828 108.696144) (xy 129.571204 109.133625) (xy 129.568645 109.137812) (xy 129.562964 109.146159)
+ (xy 129.56287 109.146387) (xy 129.552026 109.162615) (xy 129.551215 109.163425) (xy 129.543385 109.174933)
+ (xy 129.533437 109.185724) (xy 129.510066 109.204573) (xy 129.488835 109.225806) (xy 129.472612 109.236646)
+ (xy 129.467867 109.23861) (xy 129.463876 109.241831) (xy 129.446591 109.250883) (xy 129.417782 109.259355)
+ (xy 129.390046 109.270845) (xy 129.375809 109.274411) (xy 129.361956 109.275774) (xy 129.360855 109.276099)
+ (xy 129.34142 109.277848) (xy 129.341176 109.277821) (xy 129.331125 109.278812) (xy 129.326224 109.279053)
+ (xy 128.41001 109.279053) (xy 128.405109 109.278812) (xy 128.360423 109.274411) (xy 128.34619 109.270846)
+ (xy 128.263621 109.236645) (xy 128.2474 109.225806) (xy 128.184204 109.16261) (xy 128.173365 109.146389)
+ (xy 128.139164 109.06382) (xy 128.135358 109.044686) (xy 128.135358 108.955314) (xy 128.139164 108.93618)
+ (xy 128.173365 108.853611) (xy 128.184204 108.83739) (xy 128.2474 108.774194) (xy 128.263621 108.763355)
+ (xy 128.34619 108.729154) (xy 128.360423 108.725589) (xy 128.405109 108.721188) (xy 128.41001 108.720947)
+ (xy 129.160568 108.720947) (xy 129.630972 107.85854) (xy 129.63353 107.854354) (xy 129.651423 107.828058)
+ (xy 129.651874 107.82718) (xy 129.652926 107.82585) (xy 129.653169 107.825494) (xy 129.653194 107.825511)
+ (xy 129.656874 107.820862) (xy 129.656496 107.820605) (xy 129.658796 107.817226) (xy 129.668738 107.806443)
+ (xy 129.700718 107.780647) (xy 129.732063 107.753991) (xy 129.737572 107.75092) (xy 129.738306 107.750329)
+ (xy 129.743721 107.747493) (xy 129.7491 107.744496) (xy 129.750003 107.744204) (xy 129.755583 107.741283)
+ (xy 129.794987 107.729693) (xy 129.834161 107.717057) (xy 129.840431 107.716327) (xy 129.841342 107.71606)
+ (xy 129.847419 107.715514) (xy 129.853524 107.714804) (xy 129.854476 107.71488) (xy 129.860754 107.714317)
+ (xy 129.901648 107.718694) (xy 129.942623 107.722007) (xy 129.94868 107.723729) (xy 129.94963 107.723831)
+ (xy 129.955533 107.725677) (xy 129.961382 107.72734) (xy 129.962217 107.727767) (xy 129.968239 107.729651)
+ (xy 130.004331 107.749337) (xy 130.040932 107.768084) (xy 130.045871 107.771994) (xy 130.046702 107.772448)
+ (xy 130.05143 107.776396) (xy 130.056228 107.780195) (xy 130.056836 107.78091) (xy 130.061675 107.784951)
+ (xy 130.08748 107.816943) (xy 130.114126 107.848276) (xy 130.121889 107.860729) (xy 130.123521 107.864482)
+ (xy 130.123099 107.864665) (xy 130.125838 107.869896) (xy 130.12587 107.869883) (xy 130.126062 107.870325)
+ (xy 130.126835 107.871801) (xy 130.127108 107.87273) (xy 130.139796 107.901905) (xy 130.141529 107.906495)
+ (xy 130.752217 109.799628) (xy 130.929378 109.058775) (xy 130.929378 108.94627) (xy 131.391893 108.94627)
+ (xy 131.391893 109.053729) (xy 131.419704 109.157523) (xy 131.4521 109.213635) (xy 131.452101 109.213638)
+ (xy 131.473432 109.250585) (xy 131.549414 109.326567) (xy 131.642476 109.380296) (xy 131.746271 109.408108)
+ (xy 131.853729 109.408108) (xy 131.957523 109.380296) (xy 132.050585 109.326567) (xy 132.126565 109.250587)
+ (xy 132.135861 109.234485) (xy 132.135866 109.234476) (xy 132.180295 109.157523) (xy 132.208107 109.053729)
+ (xy 132.208107 108.94627) (xy 132.180295 108.842476) (xy 132.126566 108.749415) (xy 132.050584 108.673433)
+ (xy 132.001174 108.644906) (xy 132.001171 108.644903) (xy 131.957522 108.619703) (xy 131.853729 108.591892)
+ (xy 131.746271 108.591892) (xy 131.642479 108.619702) (xy 131.584102 108.653405) (xy 131.5841 108.653408)
+ (xy 131.549414 108.673434) (xy 131.473433 108.749415) (xy 131.419704 108.842476) (xy 131.391893 108.94627)
+ (xy 130.929378 108.94627) (xy 130.929378 108.919176) (xy 130.930339 108.909422) (xy 130.961875 108.750879)
+ (xy 130.96472 108.741499) (xy 131.02658 108.592156) (xy 131.0312 108.583513) (xy 131.049619 108.555944)
+ (xy 131.139599 108.179668) (xy 131.151625 108.129378) (xy 131.725467 108.129378) (xy 131.86502 108.129378)
+ (xy 131.796215 107.833519) (xy 131.725467 108.129378) (xy 131.151625 108.129378) (xy 131.294761 107.530808)
+ (xy 131.303937 107.492437) (xy 131.635473 107.492437) (xy 131.964526 107.492437) (xy 131.964526 107.025952)
+ (xy 131.635473 107.025952) (xy 131.635473 107.492437) (xy 131.303937 107.492437) (xy 131.528599 106.552944)
+ (xy 131.529972 106.548236) (xy 131.536049 106.530657) (xy 131.536348 106.528856) (xy 131.543228 106.510611)
+ (xy 131.544744 106.508176) (xy 131.575862 106.485902) (xy 131.58719 106.484602) (xy 132.012509 106.484602)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.Mask")
+ (uuid "f862d90e-fda0-4672-ad5f-086e4219fc50")
+ )
+ (gr_line
+ (start 101.5 111)
+ (end 102.05 111)
+ (stroke
+ (width 0.25)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "18051333-ab42-4674-8b96-b1eb04553a38")
+ )
+ (gr_circle
+ (center 104.4 111)
+ (end 107.1 111)
+ (stroke
+ (width 0.2)
+ (type default)
+ )
+ (fill no)
+ (layer "F.SilkS")
+ (uuid "573271b1-05bd-49d7-988e-55337e911211")
+ )
+ (gr_line
+ (start 106.75 111)
+ (end 109.3 111)
+ (stroke
+ (width 0.25)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "9f872215-17f0-4584-b3e4-749b068c1dbf")
+ )
+ (gr_line
+ (start 119.8 111)
+ (end 122.4 111)
+ (stroke
+ (width 0.25)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "d16e54d3-ba8b-4ed2-a0b6-0cd993a091da")
+ )
+ (gr_line
+ (start 122.4 110.3)
+ (end 122.4 111.7)
+ (stroke
+ (width 0.25)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "61c537e0-8d67-4a98-919c-243da1921058")
+ )
+ (gr_line
+ (start 145.802225 104.302225)
+ (end 147.526372 104.302225)
+ (stroke
+ (width 0.674666)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "2ab10e70-6b3c-4f37-8b10-c73c7da8253a")
+ )
+ (gr_line
+ (start 145.802225 106.026372)
+ (end 145.802225 104.302225)
+ (stroke
+ (width 0.674666)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "c8c08d21-d409-4b42-a104-d1bb3cab1ed7")
+ )
+ (gr_line
+ (start 145.802225 111.573627)
+ (end 145.802225 113.297774)
+ (stroke
+ (width 0.674666)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "125b6de3-4e76-43b4-b1ab-b3e3343f72bf")
+ )
+ (gr_line
+ (start 145.802225 113.297774)
+ (end 147.526372 113.297774)
+ (stroke
+ (width 0.674666)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "4f41f0a2-def8-4d5c-89cc-8e4292d16f0a")
+ )
+ (gr_arc
+ (start 147.001632 106.476149)
+ (mid 147.199241 105.999093)
+ (end 147.676298 105.801483)
+ (stroke
+ (width 0.224888)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "d3621660-0d44-479d-9814-2832b7393bc6")
+ )
+ (gr_line
+ (start 147.001632 111.12385)
+ (end 147.001632 106.476149)
+ (stroke
+ (width 0.224888)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "14b59671-10db-4036-847b-6d97d098b152")
+ )
+ (gr_line
+ (start 147.676298 105.801483)
+ (end 152.923701 105.801483)
+ (stroke
+ (width 0.224888)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "514c999e-5cf0-477c-a639-38b088a56d87")
+ )
+ (gr_arc
+ (start 147.676298 111.798516)
+ (mid 147.199241 111.600906)
+ (end 147.001632 111.12385)
+ (stroke
+ (width 0.224888)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "cf7c043b-391f-4e61-bf7c-56bb9d3caa5a")
+ )
+ (gr_line
+ (start 147.751261 114.122366)
+ (end 152.848738 114.122366)
+ (stroke
+ (width 0.299851)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "2bf56d92-1bab-4fbc-8d01-99553296fe0c")
+ )
+ (gr_line
+ (start 150.3 104.845706)
+ (end 150.3 104.95815)
+ (stroke
+ (width 0.187407)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "99fc1567-bc7f-4d50-99cf-a1032a9dfa83")
+ )
+ (gr_line
+ (start 150.3 105.670298)
+ (end 150.3 105.782742)
+ (stroke
+ (width 0.187407)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "251dd620-beeb-4b89-9c64-b9d308212b03")
+ )
+ (gr_line
+ (start 150.3 106.49489)
+ (end 150.3 106.607334)
+ (stroke
+ (width 0.187407)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "32377b69-22a9-47b2-ab1b-be2624a9d8c8")
+ )
+ (gr_line
+ (start 150.3 107.319482)
+ (end 150.3 107.431926)
+ (stroke
+ (width 0.187407)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "0eb9ad91-c4ae-4b6a-8873-2d8fda5c43e0")
+ )
+ (gr_circle
+ (center 150.3 108.8)
+ (end 150.574814 108.8)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "F.SilkS")
+ (uuid "18af174a-004a-48ff-9b6e-345025f940d7")
+ )
+ (gr_line
+ (start 150.3 109.793258)
+ (end 150.3 109.905702)
+ (stroke
+ (width 0.187407)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "192bea3c-5102-44a3-b39f-a371282386c8")
+ )
+ (gr_line
+ (start 150.3 110.61785)
+ (end 150.3 110.730294)
+ (stroke
+ (width 0.187407)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "fd217f56-14c0-44a2-a8c2-333fdae67e6b")
+ )
+ (gr_line
+ (start 150.3 111.442442)
+ (end 150.3 111.554886)
+ (stroke
+ (width 0.187407)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "b8ffd16d-7787-42d9-9e4b-dc8fb6d330b3")
+ )
+ (gr_line
+ (start 150.3 112.267034)
+ (end 150.3 112.379478)
+ (stroke
+ (width 0.187407)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "c4bae915-d609-495d-919e-e1923c774671")
+ )
+ (gr_arc
+ (start 152.923701 105.801483)
+ (mid 153.400758 105.999093)
+ (end 153.598367 106.476149)
+ (stroke
+ (width 0.224888)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "8d4139c8-6dd9-4f9c-bd78-7889f3698d47")
+ )
+ (gr_line
+ (start 152.923701 111.798516)
+ (end 147.676298 111.798516)
+ (stroke
+ (width 0.224888)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "ca74496d-1b30-4081-b31d-b0e0785c8f12")
+ )
+ (gr_line
+ (start 153.073627 104.302225)
+ (end 154.797774 104.302225)
+ (stroke
+ (width 0.674666)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "510b3dcf-c75b-4ee5-9489-2a9bac0e0825")
+ )
+ (gr_line
+ (start 153.073627 113.297774)
+ (end 154.797774 113.297774)
+ (stroke
+ (width 0.674666)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "7bda2fa3-e998-461a-830b-cadf92613aea")
+ )
+ (gr_line
+ (start 153.598367 106.476149)
+ (end 153.598367 111.12385)
+ (stroke
+ (width 0.224888)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "6a5b971c-e7d5-4a44-ac0b-d1c1ba86a321")
+ )
+ (gr_arc
+ (start 153.598367 111.12385)
+ (mid 153.400758 111.600906)
+ (end 152.923701 111.798516)
+ (stroke
+ (width 0.224888)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "35d1b096-71ec-4689-8152-83af08125891")
+ )
+ (gr_line
+ (start 154.797774 104.302225)
+ (end 154.797774 106.026372)
+ (stroke
+ (width 0.674666)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "db09966f-24bf-477c-a13e-0f59162858c2")
+ )
+ (gr_line
+ (start 154.797774 113.297774)
+ (end 154.797774 111.573627)
+ (stroke
+ (width 0.674666)
+ (type default)
+ )
+ (layer "F.SilkS")
+ (uuid "54d7524c-f98c-4ca9-8b69-626007c6ac60")
+ )
+ (gr_line
+ (start 101.5 111)
+ (end 103.1 111)
+ (stroke
+ (width 0.25)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "976f4a23-e4eb-45d0-93ed-d5e0a710ddad")
+ )
+ (gr_circle
+ (center 104.4 111)
+ (end 107.1 111)
+ (stroke
+ (width 0.2)
+ (type default)
+ )
+ (fill no)
+ (layer "B.SilkS")
+ (uuid "03a03cd5-7a85-4f6d-b1ca-2702b08589cf")
+ )
+ (gr_line
+ (start 105.7 111)
+ (end 110.6 111)
+ (stroke
+ (width 0.25)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "49b83002-4ac6-4097-b5ba-5c063c2753b0")
+ )
+ (gr_line
+ (start 110.6 110.3)
+ (end 110.6 111.7)
+ (stroke
+ (width 0.25)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "4f296d86-91c2-45ee-bdd4-de6abc1a4b98")
+ )
+ (gr_line
+ (start 126.30272 103.50272)
+ (end 126.30272 105.61001)
+ (stroke
+ (width 0.824591)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "6408dbc9-aab9-4433-9312-1cb80b1e3d2a")
+ )
+ (gr_line
+ (start 126.30272 114.497279)
+ (end 126.30272 112.389989)
+ (stroke
+ (width 0.824591)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "4aaac678-3587-4e52-bad3-12c71a2592ad")
+ )
+ (gr_line
+ (start 127.768661 106.159738)
+ (end 127.768661 111.840261)
+ (stroke
+ (width 0.274863)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "71f15113-7c8e-4ec5-9c36-617662ce599d")
+ )
+ (gr_arc
+ (start 127.768661 106.159738)
+ (mid 128.010197 105.576687)
+ (end 128.593253 105.335146)
+ (stroke
+ (width 0.274863)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "a29a5e8e-5c35-4525-9bc2-191506cd9191")
+ )
+ (gr_line
+ (start 128.41001 103.50272)
+ (end 126.30272 103.50272)
+ (stroke
+ (width 0.824591)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "a50a067d-1bad-4131-ae78-2e4c0a1b98f7")
+ )
+ (gr_line
+ (start 128.41001 114.497279)
+ (end 126.30272 114.497279)
+ (stroke
+ (width 0.824591)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "e9ca503c-d73d-42fb-857f-46fcaf749ecf")
+ )
+ (gr_arc
+ (start 128.593253 112.664853)
+ (mid 128.010187 112.423323)
+ (end 127.768661 111.840261)
+ (stroke
+ (width 0.274863)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "b1a51633-bb86-4962-9d79-c65c191bde7a")
+ )
+ (gr_line
+ (start 128.593253 112.664853)
+ (end 135.006746 112.664853)
+ (stroke
+ (width 0.274863)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "de86062f-0868-4ce4-98f9-be1bfcdca079")
+ )
+ (gr_line
+ (start 131.8 104.166974)
+ (end 131.8 104.304406)
+ (stroke
+ (width 0.229053)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "914f959c-1fcf-4146-9fd3-1b05d4864c98")
+ )
+ (gr_line
+ (start 131.8 105.174809)
+ (end 131.8 105.312241)
+ (stroke
+ (width 0.229053)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "2a73e1d9-584f-4c9b-8389-6f5a2f1ca5fc")
+ )
+ (gr_line
+ (start 131.8 106.182644)
+ (end 131.8 106.320076)
+ (stroke
+ (width 0.229053)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "806b3c64-4752-4f43-9916-08928e23726a")
+ )
+ (gr_line
+ (start 131.8 107.190478)
+ (end 131.8 107.32791)
+ (stroke
+ (width 0.229053)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "600001ed-965b-418c-9b69-8c73aa501a3a")
+ )
+ (gr_circle
+ (center 131.8 109)
+ (end 132.158106 109)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "4c52f557-d172-4b96-bef7-f1fbf59c8a0f")
+ )
+ (gr_line
+ (start 131.8 110.213982)
+ (end 131.8 110.351414)
+ (stroke
+ (width 0.229053)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "8db31ac3-7623-4d1b-aa96-949a30b5f220")
+ )
+ (gr_line
+ (start 131.8 111.221817)
+ (end 131.8 111.359249)
+ (stroke
+ (width 0.229053)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "7b3b1633-0116-4166-9219-66e67e1a9fce")
+ )
+ (gr_line
+ (start 131.8 112.229651)
+ (end 131.8 112.367083)
+ (stroke
+ (width 0.229053)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "9b1fb0f4-ea7a-4ee4-91f1-daa7170457e8")
+ )
+ (gr_line
+ (start 131.8 113.237486)
+ (end 131.8 113.374918)
+ (stroke
+ (width 0.229053)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "cdc2bffa-7a1b-4a5d-82ea-f9b3e1c8f670")
+ )
+ (gr_line
+ (start 134.915125 115.505114)
+ (end 128.684874 115.505114)
+ (stroke
+ (width 0.366485)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "a8cb39db-a7cb-43f0-a4a3-84e91fa1a4ac")
+ )
+ (gr_line
+ (start 135.006746 105.335146)
+ (end 128.593253 105.335146)
+ (stroke
+ (width 0.274863)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "7ef5556d-48b3-4db8-a66d-4330771d7253")
+ )
+ (gr_arc
+ (start 135.006746 105.335146)
+ (mid 135.589813 105.576676)
+ (end 135.831338 106.159738)
+ (stroke
+ (width 0.274863)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "d3a81eac-68b1-4ab7-90c9-3a244c1fa253")
+ )
+ (gr_arc
+ (start 135.831338 111.840261)
+ (mid 135.589802 112.423312)
+ (end 135.006746 112.664853)
+ (stroke
+ (width 0.274863)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "721a7521-20a2-4cbc-98f7-a859bcba8517")
+ )
+ (gr_line
+ (start 135.831338 111.840261)
+ (end 135.831338 106.159738)
+ (stroke
+ (width 0.274863)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "91293c3d-7f9f-4bd4-ba0d-ad723850c4a4")
+ )
+ (gr_line
+ (start 137.297279 103.50272)
+ (end 135.189989 103.50272)
+ (stroke
+ (width 0.824591)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "273b2e0a-480f-4c76-8eba-f493087eb97e")
+ )
+ (gr_line
+ (start 137.297279 105.61001)
+ (end 137.297279 103.50272)
+ (stroke
+ (width 0.824591)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "b58f2ccd-bd00-46f8-8357-f534ec0353af")
+ )
+ (gr_line
+ (start 137.297279 112.389989)
+ (end 137.297279 114.497279)
+ (stroke
+ (width 0.824591)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "d4b5c999-daa4-4cfa-9737-51605f7195e9")
+ )
+ (gr_line
+ (start 137.297279 114.497279)
+ (end 135.189989 114.497279)
+ (stroke
+ (width 0.824591)
+ (type default)
+ )
+ (layer "B.SilkS")
+ (uuid "e853fad2-2e3a-47c6-af91-7db70b8c57b7")
+ )
+ (gr_rect
+ (start 140 102.675)
+ (end 156.65 103.125)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "8eaa4ed3-335e-488c-902f-9baa61348187")
+ )
+ (gr_rect
+ (start 140 103.125)
+ (end 156.65 103.575)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "7d5ceb49-8ebc-4c65-8117-fa0a622e1987")
+ )
+ (gr_rect
+ (start 140 103.575)
+ (end 156.65 104.025)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "3fb3c4ae-daa1-4333-b44f-03a826b7a041")
+ )
+ (gr_rect
+ (start 140 104.025)
+ (end 156.65 104.475)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "45b6063e-6821-4bb0-b28c-1ca7c2748025")
+ )
+ (gr_rect
+ (start 140 104.475)
+ (end 141.8 104.925)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "e050de80-d03b-4ac1-acad-4df46757e9ef")
+ )
+ (gr_rect
+ (start 140 104.925)
+ (end 141.8 105.375)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "e7129777-dc4a-406b-ac86-01b11261bdd2")
+ )
+ (gr_rect
+ (start 140 105.375)
+ (end 141.8 105.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "4208348b-943e-4883-b75b-7beac811be96")
+ )
+ (gr_rect
+ (start 140 105.825)
+ (end 141.8 106.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "20776142-3a2a-49f4-aaa4-3c37aebc81c1")
+ )
+ (gr_rect
+ (start 140 106.275)
+ (end 141.8 106.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "b7c8d204-a07e-4aba-abb7-0b7bc08bac17")
+ )
+ (gr_rect
+ (start 140 106.725)
+ (end 141.8 107.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "a7334358-a508-4982-ab86-be9e3d03a1ed")
+ )
+ (gr_rect
+ (start 140 107.175)
+ (end 141.8 107.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "426a2966-28d7-4c62-8701-348b57f6cee7")
+ )
+ (gr_rect
+ (start 140 107.625)
+ (end 145.4 108.075)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "33a480b0-b554-4a95-8cf4-52cf5797824d")
+ )
+ (gr_rect
+ (start 140 108.075)
+ (end 141.8 108.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "398ab761-7d57-41e3-8c08-4af84e73fc32")
+ )
+ (gr_rect
+ (start 140 108.525)
+ (end 141.8 108.975)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "4379d499-758f-4780-b242-91e000040d5e")
+ )
+ (gr_rect
+ (start 140 108.975)
+ (end 142.25 109.425)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "b46c8538-b6c1-45ea-bc51-babbcd5a9718")
+ )
+ (gr_rect
+ (start 140 109.425)
+ (end 141.8 109.875)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "7d718336-3e23-422b-9831-43aa6a29faff")
+ )
+ (gr_rect
+ (start 140 109.875)
+ (end 142.7 110.325)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "a7e918f2-e000-4f3c-a15f-5e0e9427f684")
+ )
+ (gr_rect
+ (start 140 110.325)
+ (end 141.8 110.775)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "b315bfd2-2fdf-4506-837e-36968bf1a13e")
+ )
+ (gr_rect
+ (start 140 110.775)
+ (end 141.8 111.225)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "df292594-9f87-4643-a0e1-a4e6f4b26de4")
+ )
+ (gr_rect
+ (start 140 111.225)
+ (end 142.25 111.675)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "903a5191-e36d-4857-91a4-ae1aeb8d7f77")
+ )
+ (gr_rect
+ (start 140 111.675)
+ (end 142.25 112.125)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "97724ef1-9b28-4e04-987a-69c8c45958ad")
+ )
+ (gr_rect
+ (start 140 112.125)
+ (end 142.25 112.575)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "fcfe9aa7-6f09-4d57-b1b5-2f74dd3c7a8e")
+ )
+ (gr_rect
+ (start 140 112.575)
+ (end 142.7 113.025)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "ef0cfd37-6bf3-4e66-8308-4202ebb2955a")
+ )
+ (gr_rect
+ (start 140 113.025)
+ (end 142.7 113.475)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "524ad889-3873-4a3b-8bbe-3399dfde6d35")
+ )
+ (gr_rect
+ (start 140 113.475)
+ (end 142.7 113.925)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "aa946285-d18e-4ba2-9c4a-4542135efff5")
+ )
+ (gr_rect
+ (start 140 113.925)
+ (end 141.8 114.375)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "4f3d05c5-d854-4756-aa31-5d1ba9a870b1")
+ )
+ (gr_rect
+ (start 140 114.375)
+ (end 142.25 114.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "cab5617b-5500-499b-a1ff-daf9a142488f")
+ )
+ (gr_rect
+ (start 140 114.825)
+ (end 141.8 115.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "2ad79929-81c2-49bd-8841-2674d37d7287")
+ )
+ (gr_rect
+ (start 140 115.275)
+ (end 142.7 115.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "5681086b-fe62-4cfd-a7ba-6859ed1f9b48")
+ )
+ (gr_rect
+ (start 140 115.725)
+ (end 141.8 116.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "8836aadd-a818-4825-adbf-f4b5a0d41654")
+ )
+ (gr_rect
+ (start 140 116.175)
+ (end 141.8 116.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "106cfeb9-dc46-48fb-9170-9b80542de696")
+ )
+ (gr_rect
+ (start 140 116.625)
+ (end 142.25 117.075)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "4684bcb7-444b-4ea0-b7ea-d0e1e90ccede")
+ )
+ (gr_rect
+ (start 140 117.075)
+ (end 142.25 117.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "3ece503d-8525-4f99-b12f-a7167adea2c1")
+ )
+ (gr_rect
+ (start 140 117.525)
+ (end 156.65 117.975)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "b0029c23-4cae-41d9-be7b-268f41b355cc")
+ )
+ (gr_rect
+ (start 140 117.975)
+ (end 156.65 118.425)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "ad0d14ef-ee95-482e-bead-370b313fcb1b")
+ )
+ (gr_rect
+ (start 140 118.425)
+ (end 156.65 118.875)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "dd977b2d-1c12-46a3-af0a-08f68213dfb1")
+ )
+ (gr_rect
+ (start 140 118.875)
+ (end 156.65 119.325)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "d7dcd124-b3fc-4600-ab22-a7e98f733e61")
+ )
+ (gr_rect
+ (start 142.25 104.925)
+ (end 144.5 105.375)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "e5af0eaf-1e99-41e5-acb4-8e3adaff194e")
+ )
+ (gr_rect
+ (start 142.25 105.375)
+ (end 142.7 105.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "4e98cfd1-e192-4b57-acb3-89fe6869b4fc")
+ )
+ (gr_rect
+ (start 142.25 105.825)
+ (end 142.7 106.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "ff98a493-6869-46e7-87ca-d7d6c10cb215")
+ )
+ (gr_rect
+ (start 142.25 106.275)
+ (end 142.7 106.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "f39d782e-373c-4c8d-abd5-7e327367e684")
+ )
+ (gr_rect
+ (start 142.25 106.725)
+ (end 144.5 107.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "084fba05-2f58-4906-a770-006076d5551a")
+ )
+ (gr_rect
+ (start 142.25 108.525)
+ (end 143.6 108.975)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "d640d5d3-b509-4e58-9d3d-aceef58d6d63")
+ )
+ (gr_rect
+ (start 142.25 109.425)
+ (end 143.6 109.875)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "0a7309be-bbf0-42e2-b06d-8c4135373a9e")
+ )
+ (gr_rect
+ (start 142.25 114.825)
+ (end 143.15 115.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "fb0dc308-fb87-45fe-b0ef-17e8a2ccfc7e")
+ )
+ (gr_rect
+ (start 142.25 115.725)
+ (end 143.15 116.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "9551a513-b779-42d6-b9bb-4835116ed639")
+ )
+ (gr_rect
+ (start 142.25 116.175)
+ (end 142.7 116.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "8e4f96fe-648e-4329-b583-e7cb32d73240")
+ )
+ (gr_rect
+ (start 142.7 108.075)
+ (end 143.15 108.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "3f166812-291a-4791-8f82-5cce96f41513")
+ )
+ (gr_rect
+ (start 142.7 111.225)
+ (end 143.6 111.675)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "8b2eadfe-6045-4377-af21-15938c716c6f")
+ )
+ (gr_rect
+ (start 142.7 111.675)
+ (end 143.15 112.125)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "8cba0675-3d0f-41a6-bd1c-89620f7690c7")
+ )
+ (gr_rect
+ (start 142.7 114.375)
+ (end 143.15 114.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "cbacc6ca-186b-4b74-9695-3150407ae7ad")
+ )
+ (gr_rect
+ (start 142.7 116.625)
+ (end 143.15 117.075)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "ee2faff7-bdd3-4308-95a2-f11f70301910")
+ )
+ (gr_rect
+ (start 142.7 117.075)
+ (end 143.6 117.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "22c370b8-8c9b-4f14-b4d7-385ad57f8c06")
+ )
+ (gr_rect
+ (start 143.15 108.975)
+ (end 143.6 109.425)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "2d1ecf15-675f-4e09-8d55-7695cbba5ddb")
+ )
+ (gr_rect
+ (start 143.15 110.325)
+ (end 144.5 110.775)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "79236812-f3f0-4cf1-a928-539c83c244a0")
+ )
+ (gr_rect
+ (start 143.15 110.775)
+ (end 144.05 111.225)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "641861da-b6f2-4fbe-8af9-87d558e63bb1")
+ )
+ (gr_rect
+ (start 143.15 112.575)
+ (end 143.6 113.025)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "5114fa8b-6ba3-44d6-bab3-c74e4619550c")
+ )
+ (gr_rect
+ (start 143.15 113.025)
+ (end 144.5 113.475)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "ff079b60-6056-44c4-97f4-d619de6d1609")
+ )
+ (gr_rect
+ (start 143.15 115.275)
+ (end 143.6 115.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "40706b3d-4066-417d-a783-645dcf174434")
+ )
+ (gr_rect
+ (start 143.15 116.175)
+ (end 144.05 116.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "35595c59-1507-471b-b363-b1c2c307e61c")
+ )
+ (gr_rect
+ (start 143.6 108.075)
+ (end 144.5 108.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "7c717051-2d28-4ad7-925d-a9c69a772729")
+ )
+ (gr_rect
+ (start 143.6 109.875)
+ (end 144.95 110.325)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "ec6a4e75-711b-4524-b4a2-df1535442252")
+ )
+ (gr_rect
+ (start 143.6 112.125)
+ (end 144.05 112.575)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "c1db26d6-ca87-4979-b60b-5cef97270b97")
+ )
+ (gr_rect
+ (start 144.05 105.375)
+ (end 144.5 105.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "53de8ce9-5775-43d2-96ed-79847c264127")
+ )
+ (gr_rect
+ (start 144.05 105.825)
+ (end 144.5 106.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "6aae7fb1-f1bb-40a0-92ca-8fee862d4f9d")
+ )
+ (gr_rect
+ (start 144.05 106.275)
+ (end 144.5 106.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "46ea9d9a-7df1-49a5-950e-1e9d7383c857")
+ )
+ (gr_rect
+ (start 144.05 108.525)
+ (end 144.5 108.975)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "17302c99-7ecc-4c39-b61c-08e1a633cb10")
+ )
+ (gr_rect
+ (start 144.05 108.975)
+ (end 144.5 109.425)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "5b2bea67-81f2-4154-a493-b803e905edf4")
+ )
+ (gr_rect
+ (start 144.05 113.925)
+ (end 145.4 114.375)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "b46628cb-09d2-4c50-9a26-2807b67b53b0")
+ )
+ (gr_rect
+ (start 144.05 114.375)
+ (end 144.5 114.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "a4312ffe-2c7d-4bdb-aab1-1b8a66884d2f")
+ )
+ (gr_rect
+ (start 144.05 114.825)
+ (end 145.4 115.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "931cd598-f4af-4d4f-a44a-8f7b8132d9f3")
+ )
+ (gr_rect
+ (start 144.05 116.625)
+ (end 145.4 117.075)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "f90e50dd-5b20-4bf8-aca1-ad548e9df2bd")
+ )
+ (gr_rect
+ (start 144.05 117.075)
+ (end 144.5 117.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "5cdd1503-c278-4866-b22a-74018b58e99d")
+ )
+ (gr_rect
+ (start 144.5 111.675)
+ (end 145.4 112.125)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "c0c6d7b7-e16b-4a1d-b4d9-ef1e51423d8f")
+ )
+ (gr_rect
+ (start 144.5 112.125)
+ (end 145.4 112.575)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "297f54da-d8f2-44b6-af86-fdf76a412adb")
+ )
+ (gr_rect
+ (start 144.5 115.725)
+ (end 144.95 116.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "f5fb9f4d-cd56-41e7-874e-e28ad4a4605b")
+ )
+ (gr_rect
+ (start 144.5 116.175)
+ (end 145.4 116.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "839c7685-c985-4205-8ef1-1fbda5ede252")
+ )
+ (gr_rect
+ (start 144.95 104.475)
+ (end 145.4 104.925)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "6a47c8ba-ad6d-4a4c-b542-d13a0bff2c5e")
+ )
+ (gr_rect
+ (start 144.95 104.925)
+ (end 145.4 105.375)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "d24e834e-b5cf-4fc5-833a-57372d74c5ea")
+ )
+ (gr_rect
+ (start 144.95 105.375)
+ (end 145.4 105.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "5573a292-7953-4af4-b8c3-b7df10d0b760")
+ )
+ (gr_rect
+ (start 144.95 105.825)
+ (end 145.85 106.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "51ea40d5-6443-427c-8215-6cb1108fa0db")
+ )
+ (gr_rect
+ (start 144.95 106.275)
+ (end 145.4 106.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "6049db36-a07a-45f1-aa23-3ded8d3eb446")
+ )
+ (gr_rect
+ (start 144.95 106.725)
+ (end 145.85 107.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "87a48070-64a5-4dfc-bed0-73a534a973a8")
+ )
+ (gr_rect
+ (start 144.95 107.175)
+ (end 145.4 107.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "3e4cdb45-fb67-479b-a496-dcbee3633102")
+ )
+ (gr_rect
+ (start 144.95 108.075)
+ (end 145.85 108.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "99260872-82d6-4d27-b9d5-f88ba7953234")
+ )
+ (gr_rect
+ (start 144.95 108.525)
+ (end 145.4 108.975)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "7c1c501a-77de-49fd-a037-8f2b31ebd57e")
+ )
+ (gr_rect
+ (start 144.95 108.975)
+ (end 146.3 109.425)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "b2b4a539-4692-4b2c-9210-86593ab69e71")
+ )
+ (gr_rect
+ (start 144.95 109.425)
+ (end 145.4 109.875)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "4a7098b3-9d52-4261-a982-1998de9e3963")
+ )
+ (gr_rect
+ (start 144.95 112.575)
+ (end 146.3 113.025)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "f84f956a-9c4b-4a00-a7b9-a05f36bb36f9")
+ )
+ (gr_rect
+ (start 144.95 113.025)
+ (end 146.75 113.475)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "bc55a945-4fae-48b4-bd64-66b3d9327432")
+ )
+ (gr_rect
+ (start 144.95 114.375)
+ (end 145.4 114.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "f0f843a2-e8dc-460b-902b-1d9e896671b6")
+ )
+ (gr_rect
+ (start 145.4 110.325)
+ (end 145.85 110.775)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "f654da6f-128a-4fad-adf1-10cbde99d694")
+ )
+ (gr_rect
+ (start 145.4 110.775)
+ (end 145.85 111.225)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "4c73b9d1-afb1-49cb-b77e-9d813aa9b709")
+ )
+ (gr_rect
+ (start 145.4 111.225)
+ (end 147.65 111.675)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "20ca8935-2910-41d5-b474-f0483f1e27f0")
+ )
+ (gr_rect
+ (start 145.85 104.925)
+ (end 146.75 105.375)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "0862998f-85c0-4de8-a03c-09f760dbb09a")
+ )
+ (gr_rect
+ (start 145.85 105.375)
+ (end 146.3 105.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "4863c359-5fd8-4bad-9acf-bab1f332dfaf")
+ )
+ (gr_rect
+ (start 145.85 107.175)
+ (end 146.3 107.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "a8378ad4-d5b6-453b-a1a2-57ff3e70e565")
+ )
+ (gr_rect
+ (start 145.85 109.875)
+ (end 146.75 110.325)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "d5910b27-4255-4751-8c46-f634df199a70")
+ )
+ (gr_rect
+ (start 145.85 112.125)
+ (end 146.3 112.575)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "8dbebfbf-da23-4e3e-9bca-8f144309f466")
+ )
+ (gr_rect
+ (start 145.85 114.825)
+ (end 147.65 115.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "98229b60-0f98-4299-bcf7-b4883706bdec")
+ )
+ (gr_rect
+ (start 145.85 115.275)
+ (end 146.3 115.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "3715618c-ca8e-473e-98cc-eb56e2224379")
+ )
+ (gr_rect
+ (start 145.85 116.625)
+ (end 147.65 117.075)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "60a9a9de-af6c-458b-8d4d-70f2a12a6212")
+ )
+ (gr_rect
+ (start 146.3 105.825)
+ (end 146.75 106.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "932e7a9b-eed2-4ed7-b2da-c87eb8085a64")
+ )
+ (gr_rect
+ (start 146.3 106.275)
+ (end 147.65 106.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "5a1df7d0-87b3-4aa9-b8f6-403be6f21a53")
+ )
+ (gr_rect
+ (start 146.3 108.075)
+ (end 146.75 108.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "0e11b6a2-44d3-45fc-8cba-cf382a758e2b")
+ )
+ (gr_rect
+ (start 146.3 110.325)
+ (end 147.2 110.775)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "deafc4d1-31a7-4ae0-913a-750b45a66110")
+ )
+ (gr_rect
+ (start 146.3 115.725)
+ (end 147.2 116.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "1a3f0c49-f04f-437d-9c4a-9fc42ff7cb62")
+ )
+ (gr_rect
+ (start 146.75 105.375)
+ (end 147.65 105.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "d4ade137-3efa-4161-8ae5-8630294c2b60")
+ )
+ (gr_rect
+ (start 146.75 107.175)
+ (end 147.2 107.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "e612d630-0c49-4ee7-9bb0-4a45a346e356")
+ )
+ (gr_rect
+ (start 146.75 108.975)
+ (end 148.1 109.425)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "88048b82-44e9-4016-9def-c90549d9eb1d")
+ )
+ (gr_rect
+ (start 146.75 109.425)
+ (end 147.65 109.875)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "1488881f-c420-4649-bf47-ec2e866456e3")
+ )
+ (gr_rect
+ (start 146.75 110.775)
+ (end 148.1 111.225)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "cd9f2c24-e7ab-40be-b5be-ef0f0dc8c8b8")
+ )
+ (gr_rect
+ (start 146.75 111.675)
+ (end 147.2 112.125)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "f57d41f9-143a-419d-a9ed-59aebb1e09fa")
+ )
+ (gr_rect
+ (start 146.75 112.575)
+ (end 147.2 113.025)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "19323129-4372-4b0c-808b-db9b582f7e70")
+ )
+ (gr_rect
+ (start 146.75 116.175)
+ (end 149 116.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "c547333a-ef65-4434-926d-d2879d640ccb")
+ )
+ (gr_rect
+ (start 146.75 117.075)
+ (end 148.1 117.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "a95abef2-24a0-4f5b-b4af-08a2f6b12c4b")
+ )
+ (gr_rect
+ (start 147.2 104.475)
+ (end 147.65 104.925)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "0c5990ec-df5b-4e46-823f-0d3a2976001b")
+ )
+ (gr_rect
+ (start 147.2 105.825)
+ (end 149 106.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "de5dba2b-8186-4452-93a0-96166bb34197")
+ )
+ (gr_rect
+ (start 147.2 106.725)
+ (end 148.1 107.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "5c96ea50-2f42-40c4-9912-9a1cca897e09")
+ )
+ (gr_rect
+ (start 147.2 107.625)
+ (end 147.65 108.075)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "3aefd1f7-b95c-42d1-94ee-b18cea1f85aa")
+ )
+ (gr_rect
+ (start 147.2 109.875)
+ (end 149 110.325)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "2e43162f-3bb1-406f-845e-23a33afee9c5")
+ )
+ (gr_rect
+ (start 147.2 112.125)
+ (end 147.65 112.575)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "8009195c-d0d5-4885-be9e-8eb15f219218")
+ )
+ (gr_rect
+ (start 147.2 113.025)
+ (end 147.65 113.475)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "efcd4daa-6366-423a-85f6-85412d4f421e")
+ )
+ (gr_rect
+ (start 147.2 113.475)
+ (end 148.55 113.925)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "a600e8d2-e47d-4f65-a6c1-4c2fb023c9b9")
+ )
+ (gr_rect
+ (start 147.2 114.375)
+ (end 148.55 114.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "afdd41d3-bae4-4777-bff1-1adfb6ec0a34")
+ )
+ (gr_rect
+ (start 147.65 104.925)
+ (end 148.1 105.375)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "6246e25a-416a-41fb-ab92-7611631a4123")
+ )
+ (gr_rect
+ (start 147.65 107.175)
+ (end 148.1 107.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "37298cf1-2ed1-427b-b9f0-6390a8f25268")
+ )
+ (gr_rect
+ (start 147.65 108.075)
+ (end 148.1 108.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "4a393899-7c8c-4aa8-8c7d-f433894b7f39")
+ )
+ (gr_rect
+ (start 147.65 108.525)
+ (end 149 108.975)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "69155ee3-4cd2-4a3e-9c3c-1c2be169a707")
+ )
+ (gr_rect
+ (start 147.65 113.925)
+ (end 148.1 114.375)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "3dadf9e6-d0c5-4168-94f9-9c48d42e8aab")
+ )
+ (gr_rect
+ (start 148.1 104.475)
+ (end 149 104.925)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "45761387-fda6-4cfb-a0c9-0db60ecbe402")
+ )
+ (gr_rect
+ (start 148.1 105.375)
+ (end 148.55 105.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "b50ac22d-6092-435c-a2c7-89e742378e6e")
+ )
+ (gr_rect
+ (start 148.1 110.325)
+ (end 148.55 110.775)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "05452ee2-d190-4d1d-9baa-7fedf9ce6533")
+ )
+ (gr_rect
+ (start 148.1 111.225)
+ (end 148.55 111.675)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "a1410f4a-af2d-4327-aad0-7f2c249934f9")
+ )
+ (gr_rect
+ (start 148.1 111.675)
+ (end 149 112.125)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "f57bda86-5ccf-4391-8c7b-294fad16f43d")
+ )
+ (gr_rect
+ (start 148.1 112.125)
+ (end 148.55 112.575)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "8459d0ce-8fb9-403d-9e0c-a89db96b824a")
+ )
+ (gr_rect
+ (start 148.1 112.575)
+ (end 149.45 113.025)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "0302f9c9-c1fb-4c48-9fe3-25fd47efbd62")
+ )
+ (gr_rect
+ (start 148.1 113.025)
+ (end 149 113.475)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "1862afa3-829e-4f05-9a30-6f42a904ec04")
+ )
+ (gr_rect
+ (start 148.1 114.825)
+ (end 149 115.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "f7194056-d443-42ad-8230-d13ff9139d2d")
+ )
+ (gr_rect
+ (start 148.1 116.625)
+ (end 148.55 117.075)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "80395a8c-6f22-4a0d-bd99-253ad6accf38")
+ )
+ (gr_rect
+ (start 148.55 104.925)
+ (end 149 105.375)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "a24127df-2fc2-482c-8f49-eeb7e43984af")
+ )
+ (gr_rect
+ (start 148.55 106.725)
+ (end 150.35 107.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "c479adaa-f7d0-49aa-a575-11fa28814a66")
+ )
+ (gr_rect
+ (start 148.55 107.175)
+ (end 149 107.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "cad33187-212c-4340-bb32-01254118eccd")
+ )
+ (gr_rect
+ (start 148.55 108.975)
+ (end 149.45 109.425)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "458573ea-f13a-4fa2-81ef-7b2bd5511582")
+ )
+ (gr_rect
+ (start 148.55 110.775)
+ (end 149 111.225)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "28759b0c-4b74-463e-a5a2-50e7c280de07")
+ )
+ (gr_rect
+ (start 148.55 115.275)
+ (end 151.7 115.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "7ffc00af-0540-42ee-bbf5-f27805afc58e")
+ )
+ (gr_rect
+ (start 148.55 115.725)
+ (end 149 116.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "cbbde727-f780-4f10-897c-058a600d03c6")
+ )
+ (gr_rect
+ (start 148.55 117.075)
+ (end 149 117.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "d2a757e8-071f-4302-ada7-9dfced23c217")
+ )
+ (gr_rect
+ (start 149 105.375)
+ (end 149.45 105.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "93a01371-e812-4c46-a4f3-63ebdcc7887b")
+ )
+ (gr_rect
+ (start 149 106.275)
+ (end 150.35 106.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "143542dc-7a08-4828-8f0e-015ba91feb8a")
+ )
+ (gr_rect
+ (start 149 109.425)
+ (end 149.45 109.875)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "768866d0-77c1-444e-a243-923620a17f86")
+ )
+ (gr_rect
+ (start 149 110.325)
+ (end 151.25 110.775)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "de0ceb03-0d03-4c05-b3b0-134ae5cc8bf4")
+ )
+ (gr_rect
+ (start 149 111.225)
+ (end 149.45 111.675)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "ddc36125-2b4f-4989-be1b-96a7fa8e7116")
+ )
+ (gr_rect
+ (start 149 113.475)
+ (end 149.9 113.925)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "d8a10acb-9ede-422c-abd2-f21f4d02755b")
+ )
+ (gr_rect
+ (start 149 113.925)
+ (end 149.45 114.375)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "6b3543e3-62fb-4b71-a06b-13493a669495")
+ )
+ (gr_rect
+ (start 149 114.375)
+ (end 150.35 114.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "a99cd855-acc0-46ad-99b6-73b2870ada73")
+ )
+ (gr_rect
+ (start 149.45 104.475)
+ (end 149.9 104.925)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "9e515955-52f2-46f8-bf20-94bed0d1367c")
+ )
+ (gr_rect
+ (start 149.45 107.175)
+ (end 149.9 107.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "cdbc8d7c-a250-4425-b6fd-4e173e25a7d7")
+ )
+ (gr_rect
+ (start 149.45 107.625)
+ (end 150.35 108.075)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "3ca7961f-e7cf-4403-88e4-c83da14888f6")
+ )
+ (gr_rect
+ (start 149.45 108.075)
+ (end 149.9 108.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "8644d743-b13c-4da5-9919-1241c6a8840b")
+ )
+ (gr_rect
+ (start 149.45 108.525)
+ (end 149.9 108.975)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "9a961bc6-7892-4141-9f63-63edcfe44abd")
+ )
+ (gr_rect
+ (start 149.45 109.875)
+ (end 150.35 110.325)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "eb0a46e2-afed-469a-a2ba-7817a7c18df2")
+ )
+ (gr_rect
+ (start 149.45 114.825)
+ (end 150.8 115.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "3d9bdfce-7067-4a53-921e-7914abd12d31")
+ )
+ (gr_rect
+ (start 149.45 116.175)
+ (end 149.9 116.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "2cbaf7d5-2a93-4b5d-9cb1-bd93a5f8ce09")
+ )
+ (gr_rect
+ (start 149.45 116.625)
+ (end 149.9 117.075)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "aae50a9d-7099-40a6-abb7-4623ef720c93")
+ )
+ (gr_rect
+ (start 149.45 117.075)
+ (end 150.8 117.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "a8894cd9-9133-4de8-83c1-3898a39e8f13")
+ )
+ (gr_rect
+ (start 149.9 108.975)
+ (end 150.35 109.425)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "9e83326b-a35d-4fc4-853f-acef4fa02651")
+ )
+ (gr_rect
+ (start 149.9 110.775)
+ (end 150.35 111.225)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "c61d26f6-de47-4c27-b7c1-8c1f276c6200")
+ )
+ (gr_rect
+ (start 149.9 111.675)
+ (end 151.25 112.125)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "e49bfc7b-1a6e-4dab-b866-9e829f7b6e82")
+ )
+ (gr_rect
+ (start 149.9 112.125)
+ (end 152.6 112.575)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "e1c61625-aafe-4f7e-ae6e-0dcf12bcba13")
+ )
+ (gr_rect
+ (start 150.35 105.375)
+ (end 151.7 105.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "23a7f197-6fbb-42fd-81cd-24920364146c")
+ )
+ (gr_rect
+ (start 150.35 105.825)
+ (end 150.8 106.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "7288f9ec-dd73-4d62-89a5-7ae1683b6258")
+ )
+ (gr_rect
+ (start 150.35 107.175)
+ (end 150.8 107.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "8442d88b-d66e-4fa5-916b-b090a950aaac")
+ )
+ (gr_rect
+ (start 150.35 111.225)
+ (end 150.8 111.675)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "66e6df12-adb3-46ca-a5c7-f20f8947fe66")
+ )
+ (gr_rect
+ (start 150.35 113.025)
+ (end 151.25 113.475)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "9e04b103-cd84-4d82-8e8e-832f1d42144f")
+ )
+ (gr_rect
+ (start 150.35 115.725)
+ (end 150.8 116.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "b35f8b13-fafd-4544-ae48-12fffe4cb289")
+ )
+ (gr_rect
+ (start 150.35 116.175)
+ (end 150.8 116.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "588dcb20-a311-4751-b483-91419c0317e5")
+ )
+ (gr_rect
+ (start 150.8 106.275)
+ (end 151.7 106.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "50f1aac3-a433-4c00-a461-ce4bfcb0de0a")
+ )
+ (gr_rect
+ (start 150.8 106.725)
+ (end 151.7 107.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "17725645-3fd0-40b8-8baa-2fa22ba6d427")
+ )
+ (gr_rect
+ (start 150.8 108.075)
+ (end 151.25 108.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "3e9d4b95-b8af-4545-818d-179dda7706ca")
+ )
+ (gr_rect
+ (start 150.8 113.475)
+ (end 151.7 113.925)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "d2f4432f-f851-4adf-abbb-16f38bf9682f")
+ )
+ (gr_rect
+ (start 150.8 116.625)
+ (end 151.7 117.075)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "71fe3c4a-1866-4a6b-b55a-936168edd10a")
+ )
+ (gr_rect
+ (start 151.25 104.475)
+ (end 151.7 104.925)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "47bc7096-bcf5-47e6-a962-65d8726a3b42")
+ )
+ (gr_rect
+ (start 151.25 104.925)
+ (end 151.7 105.375)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "5a598413-b750-403f-9ed3-d6e9d227acfd")
+ )
+ (gr_rect
+ (start 151.25 105.825)
+ (end 151.7 106.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "2abbe1a2-5c6f-4c08-b629-9ef8a4acbf44")
+ )
+ (gr_rect
+ (start 151.25 107.175)
+ (end 151.7 107.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "7c5f7515-b2b1-462a-a8c6-631020010d45")
+ )
+ (gr_rect
+ (start 151.25 107.625)
+ (end 156.65 108.075)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "e5dd9a02-1266-44c2-82b2-e63ebc7fe4af")
+ )
+ (gr_rect
+ (start 151.25 108.975)
+ (end 151.7 109.425)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "522e9935-d0c7-45b8-bfd2-48b55288cfe6")
+ )
+ (gr_rect
+ (start 151.25 109.425)
+ (end 152.6 109.875)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "96ec47d1-9e10-4001-9869-0bf4f59c856a")
+ )
+ (gr_rect
+ (start 151.25 109.875)
+ (end 151.7 110.325)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "e75fdf2e-3f3a-4b12-aff9-c6337b3f3d9e")
+ )
+ (gr_rect
+ (start 151.25 113.925)
+ (end 156.65 114.375)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "1f28d46e-c4fb-4e9a-a416-4980021a1b15")
+ )
+ (gr_rect
+ (start 151.25 114.375)
+ (end 151.7 114.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "92900693-17cf-4817-be3e-088d93f54850")
+ )
+ (gr_rect
+ (start 151.25 114.825)
+ (end 151.7 115.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "ba9d49ba-cd5e-459e-8641-30fd453c6b6a")
+ )
+ (gr_rect
+ (start 151.25 115.725)
+ (end 151.7 116.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "68da94fd-e937-4596-8e9e-90ef53d05750")
+ )
+ (gr_rect
+ (start 151.25 116.175)
+ (end 151.7 116.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "613b165e-f7c9-430e-b21a-acc8401994a5")
+ )
+ (gr_rect
+ (start 151.25 117.075)
+ (end 151.7 117.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "be67a88e-d8e4-4568-887a-2ad238fe73b8")
+ )
+ (gr_rect
+ (start 151.7 108.525)
+ (end 152.15 108.975)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "4cc96d76-ad0d-42c6-9f9b-77b7b05f36f4")
+ )
+ (gr_rect
+ (start 151.7 110.325)
+ (end 152.15 110.775)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "f7080675-e3f2-4662-afa5-ed93710c4537")
+ )
+ (gr_rect
+ (start 151.7 111.225)
+ (end 152.15 111.675)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "3226785e-a112-4d6e-8d74-df3a726a000e")
+ )
+ (gr_rect
+ (start 151.7 113.025)
+ (end 152.15 113.475)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "d8f635e2-ce46-4f56-9111-7f18fdba93ff")
+ )
+ (gr_rect
+ (start 152.15 104.925)
+ (end 154.4 105.375)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "2263e6ce-a6af-459f-a03c-576365130ab2")
+ )
+ (gr_rect
+ (start 152.15 105.375)
+ (end 152.6 105.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "5a7c13fe-f081-4cf0-937b-f8a6745b34fd")
+ )
+ (gr_rect
+ (start 152.15 105.825)
+ (end 152.6 106.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "7fa34620-fb31-4049-b60a-ea894af4f6fe")
+ )
+ (gr_rect
+ (start 152.15 106.275)
+ (end 152.6 106.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "40c2281f-72d4-4fde-b29f-97d1884b6cf2")
+ )
+ (gr_rect
+ (start 152.15 106.725)
+ (end 154.4 107.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "3848f3ed-6399-443a-a869-60144faa6ca5")
+ )
+ (gr_rect
+ (start 152.15 108.975)
+ (end 153.95 109.425)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "0d5e5280-4644-4052-9c78-3867c4144e3e")
+ )
+ (gr_rect
+ (start 152.15 110.775)
+ (end 153.05 111.225)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "02954d1c-5d10-4f0d-9712-77fea6d7c416")
+ )
+ (gr_rect
+ (start 152.15 111.675)
+ (end 156.65 112.125)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "3e3fbfec-db93-49c9-a770-adf79f1a5c66")
+ )
+ (gr_rect
+ (start 152.15 114.825)
+ (end 154.4 115.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "3f0c4f6f-3676-437b-920e-dc1b2820c261")
+ )
+ (gr_rect
+ (start 152.15 115.275)
+ (end 152.6 115.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "740c4226-7bbf-4377-a658-3c0fc9515fb4")
+ )
+ (gr_rect
+ (start 152.15 115.725)
+ (end 152.6 116.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "fb5d55af-f359-49eb-b3c4-b852d18f376e")
+ )
+ (gr_rect
+ (start 152.15 116.175)
+ (end 152.6 116.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "9d36767c-d091-4e94-b556-ed55b5473e64")
+ )
+ (gr_rect
+ (start 152.15 116.625)
+ (end 154.4 117.075)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "d362a8fb-2077-4ca2-9ab8-62c7790472c8")
+ )
+ (gr_rect
+ (start 152.6 108.075)
+ (end 153.05 108.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "8c9e8d18-d4c3-4ccd-96c3-c1d6999f7131")
+ )
+ (gr_rect
+ (start 152.6 110.325)
+ (end 156.65 110.775)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "d54656e8-df72-4430-95c0-31099d93f14c")
+ )
+ (gr_rect
+ (start 152.6 111.225)
+ (end 156.65 111.675)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "6b1d016e-51fa-4bdf-ba6d-ea32f9b8c5ad")
+ )
+ (gr_rect
+ (start 153.05 109.875)
+ (end 153.95 110.325)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "64522805-30f1-4a4e-8d7b-20721f31c1ab")
+ )
+ (gr_rect
+ (start 153.05 113.475)
+ (end 153.5 113.925)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "9a369007-466e-4cd7-b180-49df7b6909ff")
+ )
+ (gr_rect
+ (start 153.5 109.425)
+ (end 156.65 109.875)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "40413193-8960-4408-81c6-b0c6233fc8d4")
+ )
+ (gr_rect
+ (start 153.95 105.375)
+ (end 154.4 105.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "1c25f9a4-8416-4516-8f71-0b59e96c10d6")
+ )
+ (gr_rect
+ (start 153.95 105.825)
+ (end 154.4 106.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "afb32abf-2562-47ea-b88d-97a8f58797ec")
+ )
+ (gr_rect
+ (start 153.95 106.275)
+ (end 154.4 106.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "4205925c-956d-4b6d-801b-867f03560476")
+ )
+ (gr_rect
+ (start 153.95 108.075)
+ (end 154.4 108.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "1bedfd5e-bafe-4c61-b3f5-474f8efa7cef")
+ )
+ (gr_rect
+ (start 153.95 108.525)
+ (end 154.4 108.975)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "022230bc-3941-40c2-a174-b6af09a6d1ed")
+ )
+ (gr_rect
+ (start 153.95 112.575)
+ (end 154.4 113.025)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "5340770b-22b5-48ad-bd32-9b01445df39f")
+ )
+ (gr_rect
+ (start 153.95 113.025)
+ (end 156.65 113.475)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "ca0619b5-e081-4594-a007-fac8965d2c0f")
+ )
+ (gr_rect
+ (start 153.95 115.275)
+ (end 154.4 115.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "8f3f6863-ff01-4d86-a229-c87dc07c7e1d")
+ )
+ (gr_rect
+ (start 153.95 115.725)
+ (end 154.4 116.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "ebaa5f89-ad05-4612-bbad-861793a3f525")
+ )
+ (gr_rect
+ (start 153.95 116.175)
+ (end 154.4 116.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "d0203e6d-5a37-4b64-900a-004baaea1b92")
+ )
+ (gr_rect
+ (start 154.4 110.775)
+ (end 156.65 111.225)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "4ded825e-8a0c-47a8-bb8b-f73c22b1f1a5")
+ )
+ (gr_rect
+ (start 154.4 112.125)
+ (end 156.65 112.575)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "200fffc7-30b2-4524-a7cb-6ba8d9c7c413")
+ )
+ (gr_rect
+ (start 154.4 113.475)
+ (end 156.65 113.925)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "948c7b24-041d-4ae8-933c-363dc371d050")
+ )
+ (gr_rect
+ (start 154.85 104.475)
+ (end 156.65 104.925)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "103e1f26-7a83-48d9-8490-d5d201373b24")
+ )
+ (gr_rect
+ (start 154.85 104.925)
+ (end 156.65 105.375)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "e70e7de7-4367-4824-b5ed-c0c92dcf1ec3")
+ )
+ (gr_rect
+ (start 154.85 105.375)
+ (end 156.65 105.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "55e2d879-64c5-4239-8573-5f908f3303cc")
+ )
+ (gr_rect
+ (start 154.85 105.825)
+ (end 156.65 106.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "ca759bb6-9076-44e6-b234-dccec3c02795")
+ )
+ (gr_rect
+ (start 154.85 106.275)
+ (end 156.65 106.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "72400880-94b3-4958-89e0-4d6e262255b4")
+ )
+ (gr_rect
+ (start 154.85 106.725)
+ (end 156.65 107.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "3a4295b5-466c-4c49-93e6-612d5e2eb603")
+ )
+ (gr_rect
+ (start 154.85 107.175)
+ (end 156.65 107.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "87740d5e-2f93-4b56-b358-21da64644631")
+ )
+ (gr_rect
+ (start 154.85 108.075)
+ (end 156.65 108.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "ac153fde-c441-4a72-984d-0c738f8091a3")
+ )
+ (gr_rect
+ (start 154.85 108.525)
+ (end 156.65 108.975)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "462ce390-4fb9-4e93-aa20-bbeaf776f155")
+ )
+ (gr_rect
+ (start 154.85 108.975)
+ (end 156.65 109.425)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "bef89aa3-7a6a-4533-9dbe-cac45536149e")
+ )
+ (gr_rect
+ (start 154.85 109.875)
+ (end 156.65 110.325)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "43c03f9b-bfeb-4ba9-9b90-7ece14c100d3")
+ )
+ (gr_rect
+ (start 154.85 112.575)
+ (end 156.65 113.025)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "e9f39858-dca6-43ab-926c-470b1ccb2539")
+ )
+ (gr_rect
+ (start 154.85 114.375)
+ (end 156.65 114.825)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "33033103-7e4c-41b8-be9a-fda664b88a11")
+ )
+ (gr_rect
+ (start 154.85 114.825)
+ (end 156.65 115.275)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "346a6adf-aaa4-43be-b186-b61f73dcc137")
+ )
+ (gr_rect
+ (start 154.85 115.275)
+ (end 156.65 115.725)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "90003a51-f9c5-43ea-9f17-f997b39eed46")
+ )
+ (gr_rect
+ (start 154.85 115.725)
+ (end 156.65 116.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "643c806d-712d-40cf-a86b-1074d05f2f20")
+ )
+ (gr_rect
+ (start 154.85 116.175)
+ (end 156.65 116.625)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "2842ba12-6bdd-4cab-9e87-4671e42f1d1e")
+ )
+ (gr_rect
+ (start 154.85 116.625)
+ (end 156.65 117.075)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "70cf583f-4e51-41af-a772-c66d1ad623fc")
+ )
+ (gr_rect
+ (start 154.85 117.075)
+ (end 156.65 117.525)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill yes)
+ (layer "B.SilkS")
+ (uuid "7d86eb2a-766a-462d-8832-78258d9ea27e")
+ )
+ (gr_arc
+ (start 100 102)
+ (mid 100.5858 100.5858)
+ (end 102 100)
+ (stroke
+ (width 0.05)
+ (type default)
+ )
+ (layer "Edge.Cuts")
+ (uuid "983bdc8f-d5aa-419b-a9f1-214e2d2a2322")
+ )
+ (gr_line
+ (start 100 110)
+ (end 100 102)
+ (stroke
+ (width 0.05)
+ (type default)
+ )
+ (layer "Edge.Cuts")
+ (uuid "8e02c711-20d5-48f3-877f-5d531f879b89")
+ )
+ (gr_arc
+ (start 100 110)
+ (mid 101 111)
+ (end 100 112)
+ (stroke
+ (width 0.05)
+ (type default)
+ )
+ (layer "Edge.Cuts")
+ (uuid "966bc26d-7a07-4f9f-b813-5ca53d0d79de")
+ )
+ (gr_line
+ (start 100 120)
+ (end 100 112)
+ (stroke
+ (width 0.05)
+ (type default)
+ )
+ (layer "Edge.Cuts")
+ (uuid "3b28bff8-7940-40d2-b238-4c222f629d0b")
+ )
+ (gr_line
+ (start 102 100)
+ (end 164 100)
+ (stroke
+ (width 0.05)
+ (type default)
+ )
+ (layer "Edge.Cuts")
+ (uuid "17008e26-33bb-43f1-b211-6240e78e18d0")
+ )
+ (gr_arc
+ (start 102 122)
+ (mid 100.5858 121.4142)
+ (end 100 120)
+ (stroke
+ (width 0.05)
+ (type default)
+ )
+ (layer "Edge.Cuts")
+ (uuid "c1a33b4c-b597-42f8-867f-ef27717186a9")
+ )
+ (gr_arc
+ (start 164 100)
+ (mid 165.4142 100.5858)
+ (end 166 102)
+ (stroke
+ (width 0.05)
+ (type default)
+ )
+ (layer "Edge.Cuts")
+ (uuid "561c42c0-9dae-4068-82d6-909c26ecc014")
+ )
+ (gr_line
+ (start 164 122)
+ (end 102 122)
+ (stroke
+ (width 0.05)
+ (type default)
+ )
+ (layer "Edge.Cuts")
+ (uuid "a5d75d98-4c0b-441e-a2ec-ebde7c2d9386")
+ )
+ (gr_line
+ (start 166 102)
+ (end 166 120)
+ (stroke
+ (width 0.05)
+ (type default)
+ )
+ (layer "Edge.Cuts")
+ (uuid "d59577f9-3b33-44fb-9f02-0f4c8d266ed1")
+ )
+ (gr_arc
+ (start 166 120)
+ (mid 165.4142 121.4142)
+ (end 164 122)
+ (stroke
+ (width 0.05)
+ (type default)
+ )
+ (layer "Edge.Cuts")
+ (uuid "ed34ab9c-bbf4-49a2-b931-ab4bbbf2b3f4")
+ )
+ (gr_text "CERN-OHL-P-2.0"
+ (at 132.8 120.7 0)
+ (layer "F.SilkS")
+ (uuid "67df1d93-accd-49f4-b738-9f5d3532bd16")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.155)
+ )
+ )
+ )
+ (gr_text "calibrator"
+ (at 150.3 118.5 0)
+ (layer "F.SilkS")
+ (uuid "26de0886-3ae6-40fa-b1b8-0d5a4a935a31")
+ (effects
+ (font
+ (size 1.2 1.2)
+ (thickness 0.18)
+ )
+ )
+ )
+ (gr_text "BOOT"
+ (at 140.5 110.5 0)
+ (layer "F.SilkS")
+ (uuid "3708a746-656c-4a62-9f7f-be355dcb7436")
+ (effects
+ (font
+ (size 1.2 1.2)
+ (thickness 0.252)
+ )
+ )
+ )
+ (gr_text "A"
+ (at 105 103.8 0)
+ (layer "F.SilkS")
+ (uuid "287d9e4d-9f7f-4865-94c7-becc493c9f94")
+ (effects
+ (font
+ (size 1.3 1.3)
+ (thickness 0.272999)
+ )
+ )
+ )
+ (gr_text "B"
+ (at 105 118.2 0)
+ (layer "F.SilkS")
+ (uuid "406bda47-c056-4218-9807-27c7ce094417")
+ (effects
+ (font
+ (size 1.3 1.3)
+ (thickness 0.272999)
+ )
+ )
+ )
+ (gr_text "AVsync"
+ (at 150.3 116.1 0)
+ (layer "F.SilkS")
+ (uuid "fdd61744-f5d0-4def-a458-3e516886d05d")
+ (effects
+ (font
+ (size 2 2)
+ (thickness 0.42)
+ )
+ )
+ )
+ (gr_text "LED on lens"
+ (at 116.8 105.8 0)
+ (layer "B.SilkS")
+ (uuid "e5025bdc-b680-4eea-a502-60963e135d47")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.155)
+ )
+ (justify mirror)
+ )
+ )
+ (gr_text "A|B on line"
+ (at 116.8 115.8 0)
+ (layer "B.SilkS")
+ (uuid "9f545da9-716b-44b5-b9e4-1ea69bc48eed")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.155)
+ )
+ (justify mirror)
+ )
+ )
+ (gr_text "not a toy"
+ (at 116.8 118.8 0)
+ (layer "B.SilkS")
+ (uuid "b8d1a913-b87a-4ca0-9533-2aa723787cd5")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.155)
+ )
+ (justify mirror)
+ )
+ )
+ (gr_text "calibrator v0.3"
+ (at 131.8 118.8 0)
+ (layer "B.SilkS")
+ (uuid "fd98b6dd-ab93-4542-a813-39d1e251a686")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.155)
+ )
+ (justify mirror)
+ )
+ )
+ (gr_text "CAMERA"
+ (at 116.8 104 0)
+ (layer "B.SilkS")
+ (uuid "2db0dba1-4927-4fbc-8a09-fcef943ba391")
+ (effects
+ (font
+ (size 1.2 1.2)
+ (thickness 0.252)
+ )
+ (justify mirror)
+ )
+ )
+ (gr_text "SCREEN"
+ (at 116.8 114 0)
+ (layer "B.SilkS")
+ (uuid "0eef150d-5eb6-4ee4-93af-650667c4c992")
+ (effects
+ (font
+ (size 1.2 1.2)
+ (thickness 0.252)
+ )
+ (justify mirror)
+ )
+ )
+ (gr_text "A"
+ (at 105 103.8 0)
+ (layer "B.SilkS")
+ (uuid "4f5e04a4-8e7e-4bd7-bbb3-fd2b02523b27")
+ (effects
+ (font
+ (size 1.3 1.3)
+ (thickness 0.272999)
+ )
+ (justify mirror)
+ )
+ )
+ (gr_text "B"
+ (at 105 118.2 0)
+ (layer "B.SilkS")
+ (uuid "0be03af4-3aba-4f1a-a6c7-17e54b31c30e")
+ (effects
+ (font
+ (size 1.3 1.3)
+ (thickness 0.272999)
+ )
+ (justify mirror)
+ )
+ )
+ (gr_text "AVsync"
+ (at 131.8 116.7 0)
+ (layer "B.SilkS")
+ (uuid "04300474-507c-4b71-a72f-b2ad4d5b6adf")
+ (effects
+ (font
+ (size 1.8 1.8)
+ (thickness 0.378)
+ )
+ (justify mirror)
+ )
+ )
+ (segment
+ (start 137.5 104.125)
+ (end 137.5 104.7617)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "0256609a-8e15-4625-bed7-4660d10248b7")
+ )
+ (segment
+ (start 144.2617 105.5234)
+ (end 144.2617 108.4296)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "2e0b2620-9930-4e5c-8436-c4dd4491e72f")
+ )
+ (segment
+ (start 143.5 104.7617)
+ (end 144.2617 105.5234)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "3f9ae758-98f1-4bc5-aec5-f54ebf12c15d")
+ )
+ (segment
+ (start 143.5 104.125)
+ (end 143.5 104.7617)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "54d402cb-da3e-4df4-a529-0977a80432fe")
+ )
+ (segment
+ (start 140.5 107.803)
+ (end 140.5 107.7617)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "72a60880-30f7-46e0-8077-da0774b85317")
+ )
+ (segment
+ (start 144.1779 108.5134)
+ (end 140.5 108.5134)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "81c29836-53dc-4bb3-9f06-b60df05fd760")
+ )
+ (segment
+ (start 140.5 116.09)
+ (end 140.5 108.5134)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "a10d005d-874b-4a65-9483-3a42b000e877")
+ )
+ (segment
+ (start 144.2617 108.4296)
+ (end 144.1779 108.5134)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "a9827bd5-e689-4a3b-8952-6d260342eb3b")
+ )
+ (segment
+ (start 140.5 108.5134)
+ (end 140.5 107.803)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "c216d9ff-b471-4114-8375-0e920b5a3bc8")
+ )
+ (segment
+ (start 140.5 107.7617)
+ (end 137.5 104.7617)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "dd2bdc6f-5256-46ba-9e50-e9df8cfb4898")
+ )
+ (segment
+ (start 123.89 119.6)
+ (end 123.89 116.65)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "125e19eb-dbdc-4803-be5f-2641dd663eaf")
+ )
+ (segment
+ (start 124.5912 116.65)
+ (end 123.89 116.65)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "3d93e84e-615f-45ae-8c52-05d2f3d20f2b")
+ )
+ (segment
+ (start 124.4 114.89)
+ (end 124.9967 115.4867)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "7f8b3b08-57c7-4c7e-8fb7-046202d39a75")
+ )
+ (segment
+ (start 124.9967 116.2445)
+ (end 124.5912 116.65)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "d778539d-78a7-4770-a7bf-9c85bdbb51e0")
+ )
+ (segment
+ (start 124.9967 115.4867)
+ (end 124.9967 116.2445)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "ec1be73d-eff3-463c-a9ac-1b2f7005debc")
+ )
+ (segment
+ (start 123.89 116.65)
+ (end 120.6625 116.65)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "fc2ef32d-7673-4fe9-a3c3-ac1d0f9e1403")
+ )
+ (segment
+ (start 124.5319 108.6129)
+ (end 125.6373 107.5075)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 3)
+ (uuid "097032d0-2788-4e07-ac3f-5a14e943416e")
+ )
+ (segment
+ (start 123.7705 115.2805)
+ (end 123.7705 110.9836)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 3)
+ (uuid "38c2fdb5-465c-492f-97f5-e4b1c6f5ecad")
+ )
+ (segment
+ (start 125.6373 107.5075)
+ (end 126.3625 107.5075)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 3)
+ (uuid "a21e3b27-7215-4c17-b04d-d695918a5b4f")
+ )
+ (segment
+ (start 124.4 115.91)
+ (end 123.7705 115.2805)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 3)
+ (uuid "b1604468-834f-4266-aa84-c0b043efbc5e")
+ )
+ (segment
+ (start 124.5319 110.2222)
+ (end 124.5319 108.6129)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 3)
+ (uuid "b785c643-75d7-4b60-a76e-7c4c04e31fd7")
+ )
+ (segment
+ (start 123.7705 110.9836)
+ (end 124.5319 110.2222)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 3)
+ (uuid "e714339a-a820-4ca1-8de3-020d00cf5e50")
+ )
+ (segment
+ (start 118.599 117.6)
+ (end 116.6821 115.6831)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 4)
+ (uuid "1e7c6aaa-0ce2-4b00-81c1-d7a7d675e973")
+ )
+ (segment
+ (start 116.6821 115.6831)
+ (end 116.6821 108.9179)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 4)
+ (uuid "2aad2043-0cb9-4d04-82ac-6e6b200b2149")
+ )
+ (segment
+ (start 121.6 103.25)
+ (end 118.15 106.7)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 4)
+ (uuid "4ab05c4f-60d2-4f23-8109-61c2363770d4")
+ )
+ (segment
+ (start 116.6821 108.9179)
+ (end 118.15 107.45)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 4)
+ (uuid "845ba773-6297-46fd-9bc2-b80464952372")
+ )
+ (segment
+ (start 122.5375 117.6)
+ (end 118.599 117.6)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 4)
+ (uuid "ac41c2cc-eb3a-4bc8-bbaf-3e3c8443a2d8")
+ )
+ (segment
+ (start 118.15 106.7)
+ (end 118.15 107.45)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 4)
+ (uuid "c8216aa6-0c9f-42b3-979f-c9b80663655e")
+ )
+ (segment
+ (start 156.6 111.2729)
+ (end 157.5771 112.25)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 5)
+ (uuid "230f8d64-7c0c-4e30-9910-06aa8826fe85")
+ )
+ (segment
+ (start 156.6 107.51)
+ (end 156.6 111.2729)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 5)
+ (uuid "7a9569bb-4279-41ca-b5a7-8eba3f0ee9a7")
+ )
+ (segment
+ (start 157.5771 112.25)
+ (end 158.605 112.25)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 5)
+ (uuid "dc76fbc2-b3da-4973-bdd6-f1ec4326224e")
+ )
+ (segment
+ (start 160.8901 110.5484)
+ (end 159.5917 109.25)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 6)
+ (uuid "1c75cbd2-7c7f-4373-9af4-b90174302068")
+ )
+ (segment
+ (start 158.605 109.25)
+ (end 159.5917 109.25)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 6)
+ (uuid "36a1861e-cd51-417e-a798-e0659c999d66")
+ )
+ (segment
+ (start 157.2256 116.1356)
+ (end 160.3654 116.1356)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 6)
+ (uuid "4fcc98e0-84ec-4a11-9c0d-cc8bd00062c4")
+ )
+ (segment
+ (start 160.8901 115.6109)
+ (end 160.8901 110.5484)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 6)
+ (uuid "56eec71f-d019-4af0-9760-07ab2f64b948")
+ )
+ (segment
+ (start 160.3654 116.1356)
+ (end 160.8901 115.6109)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 6)
+ (uuid "b4fa596b-c591-4b33-9c15-647db10ca4f4")
+ )
+ (segment
+ (start 156.6 115.51)
+ (end 157.2256 116.1356)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 6)
+ (uuid "d9e441e5-6520-4ded-8a6f-7a54bcf1b5be")
+ )
+ (segment
+ (start 158.605 111.75)
+ (end 157.6183 111.75)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 7)
+ (uuid "0d22be08-7b66-4147-8295-c12256afd12d")
+ )
+ (segment
+ (start 159.7856 111.75)
+ (end 159.5917 111.75)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 7)
+ (uuid "329e7c6b-1b4f-48ec-91de-278a08b37410")
+ )
+ (segment
+ (start 159.0976 111.75)
+ (end 158.605 111.75)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 7)
+ (uuid "49b2f175-6ca6-483e-90d9-a2592a0519b8")
+ )
+ (segment
+ (start 159.0976 111.75)
+ (end 159.5902 111.75)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 7)
+ (uuid "5ccd1736-027a-4efa-86dd-ae7a90160fe6")
+ )
+ (segment
+ (start 137.2231 114.4925)
+ (end 138.9337 116.2031)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 7)
+ (uuid "63b67b09-8471-42bc-ac0d-e771db243dba")
+ )
+ (segment
+ (start 159.5902 111.75)
+ (end 159.5917 111.75)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 7)
+ (uuid "6c526c8a-45b7-4ebf-a759-24ba9cdaff35")
+ )
+ (segment
+ (start 158.605 110.75)
+ (end 157.6183 110.75)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 7)
+ (uuid "acd88f0b-4498-4c07-8e91-e3a6f407ea7f")
+ )
+ (segment
+ (start 159.8372 111.8016)
+ (end 159.7856 111.75)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 7)
+ (uuid "b22a79ec-5058-4b21-bd31-774fa3a8bc47")
+ )
+ (segment
+ (start 157.6183 110.75)
+ (end 157.6183 111.75)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 7)
+ (uuid "f2b67121-792e-43a8-bf57-b6987f9cb6ae")
+ )
+ (segment
+ (start 131.6375 114.4925)
+ (end 137.2231 114.4925)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 7)
+ (uuid "f825276a-b7e5-43d7-9cc3-367956e60117")
+ )
+ (via
+ (at 159.8372 111.8016)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 7)
+ (uuid "51c75c13-5102-49b8-88a8-19f798523791")
+ )
+ (via
+ (at 138.9337 116.2031)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 7)
+ (uuid "f4bb375c-5d97-436d-bbd6-cc85674cc30a")
+ )
+ (segment
+ (start 155.4357 116.2031)
+ (end 159.8372 111.8016)
+ (width 0.2)
+ (layer "B.Cu")
+ (net 7)
+ (uuid "aa4ed0ec-09cd-4356-b3a8-c755feb8ee36")
+ )
+ (segment
+ (start 138.9337 116.2031)
+ (end 155.4357 116.2031)
+ (width 0.2)
+ (layer "B.Cu")
+ (net 7)
+ (uuid "d7c68f11-9c2f-41c5-8c9e-2dcd19373f83")
+ )
+ (segment
+ (start 158.605 110.25)
+ (end 159.5917 110.25)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 8)
+ (uuid "18b22744-81b2-490e-b62e-97cfbc0d65e7")
+ )
+ (segment
+ (start 159.5009 111.25)
+ (end 159.5917 111.1592)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 8)
+ (uuid "535a1260-1f19-468d-8251-d54198ee9e44")
+ )
+ (segment
+ (start 159.5917 110.4885)
+ (end 159.8481 110.4885)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 8)
+ (uuid "7202d942-a457-4a18-ba29-364226651e19")
+ )
+ (segment
+ (start 159.5917 110.4885)
+ (end 159.5917 110.4472)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 8)
+ (uuid "822b03fd-64a8-4c74-b4ac-59f5ff3479b3")
+ )
+ (segment
+ (start 159.5917 110.4472)
+ (end 159.5917 110.25)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 8)
+ (uuid "86ea618b-43c2-4771-9e5f-6ab21f3dc577")
+ )
+ (segment
+ (start 138.2925 113.8575)
+ (end 131.6375 113.8575)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 8)
+ (uuid "87addead-ee22-4594-8080-23c1e1b44996")
+ )
+ (segment
+ (start 158.605 111.25)
+ (end 159.5009 111.25)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 8)
+ (uuid "b4cc4d5b-cf53-4bfb-b7cd-f93d26764167")
+ )
+ (segment
+ (start 140.5 116.975)
+ (end 140.5 117.11)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 8)
+ (uuid "bf527ca4-6c91-43fb-be66-9986888a0db4")
+ )
+ (segment
+ (start 159.5917 111.1592)
+ (end 159.5917 110.4885)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 8)
+ (uuid "e01fc89f-04eb-42cb-a810-103ddabc468c")
+ )
+ (segment
+ (start 139.2068 114.7718)
+ (end 138.2925 113.8575)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 8)
+ (uuid "f5be3726-31ba-44a3-98df-fc0540615a0f")
+ )
+ (segment
+ (start 139.2068 115.6818)
+ (end 140.5 116.975)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 8)
+ (uuid "f6b73926-16e1-45fa-82e0-3cefb078a3a9")
+ )
+ (segment
+ (start 139.2068 114.7718)
+ (end 139.2068 115.6818)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 8)
+ (uuid "fe7aaa5f-e8de-49ce-aa27-3d4f9c51537a")
+ )
+ (via
+ (at 159.8481 110.4885)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 8)
+ (uuid "3deb2dd7-f933-498c-854b-14e3ed6d3403")
+ )
+ (via
+ (at 139.2068 114.7718)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 8)
+ (uuid "6ca2598b-dc12-41b7-a302-4447940c1bca")
+ )
+ (segment
+ (start 159.8481 110.4885)
+ (end 143.4901 110.4885)
+ (width 0.2)
+ (layer "B.Cu")
+ (net 8)
+ (uuid "0a803852-c2a0-42da-8439-c05e61277181")
+ )
+ (segment
+ (start 143.4901 110.4885)
+ (end 139.2068 114.7718)
+ (width 0.2)
+ (layer "B.Cu")
+ (net 8)
+ (uuid "721fc7dd-3a57-4d76-be4d-e73bb1aa4ffb")
+ )
+ (segment
+ (start 159.52 115.32)
+ (end 158.1583 115.32)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "036c2dad-535a-4b42-9f8d-838a7ef0b632")
+ )
+ (segment
+ (start 134.3 111.52)
+ (end 133.6 111.52)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "03cc55aa-eeaa-4984-bf4c-933da01a6dc7")
+ )
+ (segment
+ (start 112.1531 118.55)
+ (end 107.1817 113.5786)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "0ca5c45e-2ba2-4cd5-bec6-8b9fd254e3e8")
+ )
+ (segment
+ (start 133.6 104.89)
+ (end 134.97 104.89)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "17a8c997-39a5-4a5e-9ec8-4284044b7ff2")
+ )
+ (segment
+ (start 124.7607 118.1303)
+ (end 124.645 118.0147)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "1914164d-9cfb-4b8a-90e9-f7befda28723")
+ )
+ (segment
+ (start 156.6 114.25)
+ (end 156.6 114.49)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "1ab2466f-f5fe-42f6-aa76-faef7a30cec2")
+ )
+ (segment
+ (start 134.362 111.52)
+ (end 134.3 111.52)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "21078b15-7f64-4b1a-b51e-8833496f20a0")
+ )
+ (segment
+ (start 135.661 107.259)
+ (end 135 107.92)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "253cfaa8-3f0b-4835-9a19-78cbfec84bcf")
+ )
+ (segment
+ (start 163.7 106.68)
+ (end 162.5883 106.68)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "26eb03c4-4288-4152-88df-16c0272abb61")
+ )
+ (segment
+ (start 135 111.52)
+ (end 134.362 111.52)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "2743fc25-b338-4816-8c26-5db27ec1e70c")
+ )
+ (segment
+ (start 122.3885 120.276)
+ (end 120.6625 118.55)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "2875e427-773c-4e40-85f2-71e2b634bd73")
+ )
+ (segment
+ (start 135 107.92)
+ (end 133.63 107.92)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "2ce76873-5dc0-4716-b08d-5fb409b2a78c")
+ )
+ (segment
+ (start 158.7767 104.0267)
+ (end 157.55 102.8)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "396c8ce7-3720-4ad8-96e2-aa1eea3e00a9")
+ )
+ (segment
+ (start 134.97 104.89)
+ (end 135 104.92)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "3a70e31a-7291-45bd-9556-fd337d7a2b61")
+ )
+ (segment
+ (start 157.1396 105.8645)
+ (end 156.6 106.4041)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "420c08c8-b1c7-463d-8454-394d502d22f4")
+ )
+ (segment
+ (start 158.1583 115.32)
+ (end 157.5683 114.73)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "42ee47fb-a6a3-47df-aaa5-4e043a14ac23")
+ )
+ (segment
+ (start 135.661 105.581)
+ (end 135.661 107.259)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "43d66b87-4478-4061-8ede-c4d868be8fab")
+ )
+ (segment
+ (start 156.6 114.25)
+ (end 157.5683 114.25)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "50df1b39-aaa9-472d-a36a-7509b4e39bb5")
+ )
+ (segment
+ (start 125.5702 118.9398)
+ (end 125.3232 119.1868)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "53547d11-3524-43dc-a255-2f7739d6b03c")
+ )
+ (segment
+ (start 158.1583 106.68)
+ (end 158.1583 107.3033)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "58d45719-0cbc-4424-8c85-317bf413cf04")
+ )
+ (segment
+ (start 131.6375 111.3175)
+ (end 133.3975 111.3175)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "5c24b427-1d0a-420d-a879-f43b0a497b9a")
+ )
+ (segment
+ (start 103.8805 113.4302)
+ (end 103.8805 113.0796)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "5f5caf25-5a2b-421f-9f72-08998037ec23")
+ )
+ (segment
+ (start 103.8805 113.0796)
+ (end 103.5222 112.7213)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "5f72445c-d6da-4163-a1ac-e43346c34cc8")
+ )
+ (segment
+ (start 125.3232 119.1868)
+ (end 124.91 119.6)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "74bf6a48-8fce-4070-9dd0-c8c8349e61bc")
+ )
+ (segment
+ (start 159.52 106.68)
+ (end 158.7767 106.68)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "77c8cb74-2010-49d3-b014-708cfe0e56c6")
+ )
+ (segment
+ (start 128.6369 108.4155)
+ (end 128.6369 114.2541)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "785e4f21-2625-4d0d-9ee1-d6f9fc3063bb")
+ )
+ (segment
+ (start 158.605 114.25)
+ (end 157.5683 114.25)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "7926fed9-335b-4501-9b6c-5ad5d4d792a6")
+ )
+ (segment
+ (start 158.1583 107.3033)
+ (end 158.605 107.75)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "793215e5-129d-48fb-ba1f-4e5a631f6d0a")
+ )
+ (segment
+ (start 133.63 107.92)
+ (end 133.6 107.89)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "7fd8dfc6-c40c-4a33-a3fe-95729fe2f3d3")
+ )
+ (segment
+ (start 135 111.52)
+ (end 135.6222 110.8978)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "8e27d9e0-6bda-4456-8b4a-6489fd21af55")
+ )
+ (segment
+ (start 135.6222 108.5422)
+ (end 135 107.92)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "973f89fd-d22d-49b2-bb45-f7152c66fdd3")
+ )
+ (segment
+ (start 124.234 120.276)
+ (end 122.3885 120.276)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "97aaea8b-9220-45eb-80d1-1cb5d59e8ddb")
+ )
+ (segment
+ (start 103.5222 112.7213)
+ (end 103.1716 112.7213)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "99d7426a-2f30-4c45-9928-c5b5f60347b4")
+ )
+ (segment
+ (start 158.7767 106.68)
+ (end 158.7767 104.0267)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "9b126ba6-c4b3-4470-a872-86963e920a5a")
+ )
+ (segment
+ (start 107.1817 113.5786)
+ (end 104.0289 113.5786)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "a0aa3420-03b3-4934-85a4-eb2d6f5c0fa2")
+ )
+ (segment
+ (start 103.1716 112.7213)
+ (end 102.7 112.2497)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "a3524a51-6795-487f-85c0-d90668d9f011")
+ )
+ (segment
+ (start 120.6625 118.55)
+ (end 112.1531 118.55)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "a3d64457-d6bb-4a88-972f-f8d8c8047df4")
+ )
+ (segment
+ (start 156.6 106.4041)
+ (end 156.6 106.49)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "a40c4518-154f-47ad-b844-146897d36ef8")
+ )
+ (segment
+ (start 162.5883 106.68)
+ (end 162.5883 115.32)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "ac79e1e3-1cda-4db5-9594-7ae86df3e32b")
+ )
+ (segment
+ (start 133.6 104.89)
+ (end 132.1624 104.89)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "aee078a1-f13e-4017-aa94-6328cea09d00")
+ )
+ (segment
+ (start 135.6222 110.8978)
+ (end 135.6222 108.5422)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "b22fea35-e5d2-4f6e-851c-9e322867fd2d")
+ )
+ (segment
+ (start 157.5683 114.73)
+ (end 157.5683 114.25)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "b39db1d6-1588-457c-ae29-9ea4b9ca5ac3")
+ )
+ (segment
+ (start 133.3975 111.3175)
+ (end 133.6 111.52)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "be8447b9-2a65-4134-bf18-2ce215008fcf")
+ )
+ (segment
+ (start 102.7 112.2497)
+ (end 102.7 111)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "bfc3cca8-bcb2-47fa-8454-a68e82508ce1")
+ )
+ (segment
+ (start 128.6369 114.2541)
+ (end 124.7607 118.1303)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "c89835ec-fd47-4a1d-a123-ba6cd0f00184")
+ )
+ (segment
+ (start 124.91 119.6)
+ (end 124.234 120.276)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "ca79f205-ed72-44c2-be0c-a16e64ef8d0c")
+ )
+ (segment
+ (start 125.5702 118.9398)
+ (end 124.7607 118.1303)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "d7727125-7f42-4a92-981b-3302d5f3fc33")
+ )
+ (segment
+ (start 132.1624 104.89)
+ (end 128.6369 108.4155)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "e1a3340c-e88a-448e-b591-c6b72bd1972f")
+ )
+ (segment
+ (start 104.0289 113.5786)
+ (end 103.8805 113.4302)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "e3a120ee-ba51-4252-b678-a58d553c205b")
+ )
+ (segment
+ (start 163.7 115.32)
+ (end 162.5883 115.32)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "ea13cf1e-1f95-40dd-848e-d02cf0363aed")
+ )
+ (segment
+ (start 135 104.92)
+ (end 135.661 105.581)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "f205e9da-8b0a-4757-af6a-c002351436f5")
+ )
+ (segment
+ (start 158.7767 106.68)
+ (end 158.1583 106.68)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 9)
+ (uuid "f5fce6ae-2e0d-4638-ad3c-a81a3d8496d6")
+ )
+ (via
+ (at 160.5 103.9)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "1d919eb7-b591-490e-98ec-9bed391d8d19")
+ )
+ (via
+ (at 160.5 118.9)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "200e8760-d27b-40e6-a0be-a617d7bff5f6")
+ )
+ (via
+ (at 163 103.9)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "22e1c664-a0c2-4641-914c-ed24d4eb31aa")
+ )
+ (via
+ (at 115.5 101.4)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "272d2f59-c6ed-4970-870a-5fb4cfb3801a")
+ )
+ (via
+ (at 124.645 118.0147)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "2bbd198e-8218-4cfc-9375-860a52322d59")
+ )
+ (via
+ (at 158 118.9)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "3ed59ea4-b085-4c65-b85a-3678abc2a3a4")
+ )
+ (via
+ (at 110.5 101.4)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "53d04136-96e7-48a5-9b43-1d3b10913acf")
+ )
+ (via
+ (at 163 106.4)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "6a96f8b8-a06f-4427-bb72-a094f8662f34")
+ )
+ (via
+ (at 163 113.9)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "84cac82c-d65a-45a9-a523-87b51633347a")
+ )
+ (via
+ (at 110.5 103.9)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "8b18aa30-eb63-43ca-9994-5230d8e4b3b5")
+ )
+ (via
+ (at 163 118.9)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "8b9a2dbd-9946-439f-a774-aa45438bbd60")
+ )
+ (via
+ (at 160.5 101.4)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "9e1bccb7-fdea-45a0-913e-4e0c4e860a5e")
+ )
+ (via
+ (at 158 101.4)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "a5ba10da-dd9c-4ed0-be4c-26b1d26b1205")
+ )
+ (via
+ (at 163 111.4)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "a6f23530-8e53-43eb-ac9f-7ca41afd7fd9")
+ )
+ (via
+ (at 160.5 106.4)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "b4ab317e-4357-4a37-961a-803db8abb404")
+ )
+ (via
+ (at 163 108.9)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "c7629b6d-7222-4b99-858c-8a988ca940ed")
+ )
+ (via
+ (at 157.1396 105.8645)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "d020d6f4-429b-4691-915c-443cbe3b9e33")
+ )
+ (via
+ (at 163 101.4)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "ea529fc0-9283-4b39-9cb2-765dafe5a745")
+ )
+ (via
+ (at 118 101.4)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "ec20d463-c1dc-4e81-a3c0-fff5a48e6533")
+ )
+ (via
+ (at 163 116.4)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "f277e1ca-253e-4ef8-a7e6-b51ef357213d")
+ )
+ (via
+ (at 113 101.4)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 9)
+ (uuid "ff71bb6b-88c5-4d5b-b806-57830778a0a0")
+ )
+ (segment
+ (start 155.4636 118.0147)
+ (end 158.1583 115.32)
+ (width 0.3)
+ (layer "B.Cu")
+ (net 9)
+ (uuid "1e69a2ef-47e0-4508-92ab-799170d5711b")
+ )
+ (segment
+ (start 163.7 106.68)
+ (end 159.52 106.68)
+ (width 0.3)
+ (layer "B.Cu")
+ (net 9)
+ (uuid "261af396-7040-4879-bc4f-d1ab20362df7")
+ )
+ (segment
+ (start 159.52 106.68)
+ (end 157.9551 106.68)
+ (width 0.3)
+ (layer "B.Cu")
+ (net 9)
+ (uuid "54f01bd9-7f54-441d-ae3c-b4096033188c")
+ )
+ (segment
+ (start 124.645 118.0147)
+ (end 155.4636 118.0147)
+ (width 0.3)
+ (layer "B.Cu")
+ (net 9)
+ (uuid "5f0bba25-f5ba-4aa3-8bd2-c34e8cdf27ad")
+ )
+ (segment
+ (start 157.9551 106.68)
+ (end 157.1396 105.8645)
+ (width 0.3)
+ (layer "B.Cu")
+ (net 9)
+ (uuid "604c18b7-7994-4d81-84b3-fa1c942401d3")
+ )
+ (segment
+ (start 159.52 115.32)
+ (end 158.1583 115.32)
+ (width 0.3)
+ (layer "B.Cu")
+ (net 9)
+ (uuid "7052fcad-94e4-4408-89e3-2a2df84eee7f")
+ )
+ (segment
+ (start 163.7 115.32)
+ (end 159.52 115.32)
+ (width 0.3)
+ (layer "B.Cu")
+ (net 9)
+ (uuid "f75cbdff-5ef7-4c07-8090-dcddfa773b87")
+ )
+ (segment
+ (start 106.1 111)
+ (end 107.2708 111)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 10)
+ (uuid "1832c306-4a92-4e55-9500-64214567b00e")
+ )
+ (segment
+ (start 123.1254 108.7004)
+ (end 123.2 108.775)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 10)
+ (uuid "27ecb775-a4a6-49a9-8469-26a809368b22")
+ )
+ (segment
+ (start 122.2371 108.7004)
+ (end 123.1254 108.7004)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 10)
+ (uuid "548a9446-ad41-4a35-bf84-6741c048eb44")
+ )
+ (segment
+ (start 107.2708 111)
+ (end 107.7238 111.453)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 10)
+ (uuid "eb28eea9-5c15-46bb-869f-f774d8a277af")
+ )
+ (via
+ (at 122.2371 108.7004)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 10)
+ (uuid "4ee86240-8b32-4482-b268-252ea1832b92")
+ )
+ (via
+ (at 107.7238 111.453)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 10)
+ (uuid "c75b23f7-9d4e-4e4b-ac83-9acbcf3706f4")
+ )
+ (segment
+ (start 107.7238 111.453)
+ (end 119.4845 111.453)
+ (width 0.2)
+ (layer "B.Cu")
+ (net 10)
+ (uuid "204c816c-b62d-4353-80ab-def24c045caf")
+ )
+ (segment
+ (start 119.4845 111.453)
+ (end 122.2371 108.7004)
+ (width 0.2)
+ (layer "B.Cu")
+ (net 10)
+ (uuid "34c88254-72c4-4e1a-b467-b734134fa811")
+ )
+ (segment
+ (start 125.5955 106.8725)
+ (end 124.1145 108.3535)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 11)
+ (uuid "10c5ba67-4cb9-48a3-9deb-2deab836c34a")
+ )
+ (segment
+ (start 124.1145 108.3535)
+ (end 124.1145 109.5105)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 11)
+ (uuid "19af7e8e-daa5-4739-92cc-be763759612a")
+ )
+ (segment
+ (start 126.3625 106.8725)
+ (end 125.5955 106.8725)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 11)
+ (uuid "ca73fdce-6cc2-4f92-bcc5-0b83351fb303")
+ )
+ (segment
+ (start 124.1145 109.5105)
+ (end 123.2 110.425)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 11)
+ (uuid "cad809df-c1b4-4b1d-b101-71e1264bb2f8")
+ )
+ (segment
+ (start 131.6375 110.0475)
+ (end 130.906 110.0475)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 12)
+ (uuid "23159d05-39a0-4fc8-bba9-457a80cf70f7")
+ )
+ (segment
+ (start 107.5 108.8266)
+ (end 107.3223 109.0043)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 12)
+ (uuid "4122922a-7bc6-44a2-8eac-b643b0d044a9")
+ )
+ (segment
+ (start 130.5268 110.4267)
+ (end 130.5268 112.5875)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 12)
+ (uuid "4e337cc7-d10a-4354-8250-85040459a15f")
+ )
+ (segment
+ (start 133.6 108.91)
+ (end 132.4625 110.0475)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 12)
+ (uuid "5f382ad3-1d6c-4b12-9e43-278579864d8f")
+ )
+ (segment
+ (start 134.97 108.91)
+ (end 133.6 108.91)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 12)
+ (uuid "68288777-cd4d-47ad-910c-c2990f595b85")
+ )
+ (segment
+ (start 130.5268 120.5904)
+ (end 130.1222 120.995)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 12)
+ (uuid "685895be-8811-4be7-ac12-fb3fed3c1ba6")
+ )
+ (segment
+ (start 132.4625 110.0475)
+ (end 131.6375 110.0475)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 12)
+ (uuid "8a5ca4de-e1c5-42e4-a113-c40136c16b7d")
+ )
+ (segment
+ (start 107.5 106.5)
+ (end 107.5 108.8266)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 12)
+ (uuid "96ec64bd-e09b-4acf-9d31-15da129c7e75")
+ )
+ (segment
+ (start 130.5268 112.5875)
+ (end 130.5268 120.5904)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 12)
+ (uuid "a84bcceb-f71a-4de1-96ce-166c6a8da224")
+ )
+ (segment
+ (start 131.6375 112.5875)
+ (end 130.5268 112.5875)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 12)
+ (uuid "b73500d0-513e-40f8-8b50-606f527de454")
+ )
+ (segment
+ (start 130.906 110.0475)
+ (end 130.5268 110.4267)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 12)
+ (uuid "d2c0bc64-48ab-4a86-9916-7175bfe29c67")
+ )
+ (segment
+ (start 135 108.88)
+ (end 134.97 108.91)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 12)
+ (uuid "f0c39e0f-2d3f-4212-a015-c540d4f3bb21")
+ )
+ (via
+ (at 130.1222 120.995)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 12)
+ (uuid "37b59001-0b2a-44bc-8d60-46ef2601a799")
+ )
+ (via
+ (at 107.3223 109.0043)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 12)
+ (uuid "f7f38c75-dce6-4b25-b80a-6d211c7610a6")
+ )
+ (segment
+ (start 106.9059 110.1936)
+ (end 107.3223 109.7772)
+ (width 0.2)
+ (layer "B.Cu")
+ (net 12)
+ (uuid "01372a9b-25dd-4bab-817a-13862eff32e4")
+ )
+ (segment
+ (start 130.1222 120.995)
+ (end 116.288 120.995)
+ (width 0.2)
+ (layer "B.Cu")
+ (net 12)
+ (uuid "0a7ce432-c13d-4c63-b626-8e98cc472447")
+ )
+ (segment
+ (start 107.3223 109.7772)
+ (end 107.3223 109.0043)
+ (width 0.2)
+ (layer "B.Cu")
+ (net 12)
+ (uuid "149f6f6f-0c2f-4bfd-9aab-392a86dcdff8")
+ )
+ (segment
+ (start 116.288 120.995)
+ (end 106.9059 111.6129)
+ (width 0.2)
+ (layer "B.Cu")
+ (net 12)
+ (uuid "d1da9a8e-fa66-49a4-b411-bf3e4a6ff3c8")
+ )
+ (segment
+ (start 106.9059 111.6129)
+ (end 106.9059 110.1936)
+ (width 0.2)
+ (layer "B.Cu")
+ (net 12)
+ (uuid "f2fa8d5a-55eb-4ea9-9f6a-0ad7f1a930b9")
+ )
+ (segment
+ (start 132.7375 108.3671)
+ (end 132.3271 108.7775)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 13)
+ (uuid "0c9874f9-33a0-41bb-a9f3-e23c6a2cea97")
+ )
+ (segment
+ (start 131.6375 108.7775)
+ (end 130.902 108.7775)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 13)
+ (uuid "200ce4eb-593c-4e81-87c6-efbcb6cf2cfa")
+ )
+ (segment
+ (start 129.0486 110.6309)
+ (end 129.0486 116.3731)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 13)
+ (uuid "2d79f1a0-b8cd-4ece-aa83-dc057db1894e")
+ )
+ (segment
+ (start 129.0486 116.3731)
+ (end 124.7099 120.7118)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 13)
+ (uuid "36d54769-496b-4a50-9d9b-d4444dc6a413")
+ )
+ (segment
+ (start 132.7375 106.7725)
+ (end 132.7375 108.3671)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 13)
+ (uuid "3808d42c-7ba7-405b-868c-024378ae6474")
+ )
+ (segment
+ (start 133.6 105.91)
+ (end 134.97 105.91)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 13)
+ (uuid "5423282c-712a-4d9b-bee1-49b2b4b8de1c")
+ )
+ (segment
+ (start 130.902 108.7775)
+ (end 129.0486 110.6309)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 13)
+ (uuid "76f32232-836a-43fd-83b9-9b24bbe806c9")
+ )
+ (segment
+ (start 124.7099 120.7118)
+ (end 112.7118 120.7118)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 13)
+ (uuid "8075d2f0-8b0d-449d-866a-1f49ee512ce9")
+ )
+ (segment
+ (start 134.97 105.91)
+ (end 135 105.88)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 13)
+ (uuid "e5bb99c9-7629-4bef-a1ec-b4ad889b90db")
+ )
+ (segment
+ (start 112.7118 120.7118)
+ (end 107.5 115.5)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 13)
+ (uuid "e973b235-9505-4eb7-9a1b-2745ff4126c4")
+ )
+ (segment
+ (start 132.3271 108.7775)
+ (end 131.6375 108.7775)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 13)
+ (uuid "f06fc332-87cf-4c4c-947a-a4d8300c8009")
+ )
+ (segment
+ (start 133.6 105.91)
+ (end 132.7375 106.7725)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 13)
+ (uuid "f832737a-b369-4516-983d-2a9f4ba3ed91")
+ )
+ (segment
+ (start 121.6 105.35)
+ (end 121.6 111.1)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "156e032a-40cd-4914-9ce4-c03785f4ce81")
+ )
+ (segment
+ (start 121.6 111.1)
+ (end 118.15 114.55)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "15898d54-a83d-4773-90bb-6b1c042ee91f")
+ )
+ (segment
+ (start 155.65 101.2104)
+ (end 155.65 102.8)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "1a847f3d-7f7c-4c82-8f58-885f307c1af0")
+ )
+ (segment
+ (start 124.55 102.4)
+ (end 124.488 102.4)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "248aca94-d3f2-437f-871e-18ce573ee797")
+ )
+ (segment
+ (start 155.8184 101.042)
+ (end 155.65 101.2104)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "2ae3d5a7-9573-482a-b5e5-710dd99a232e")
+ )
+ (segment
+ (start 157.5698 108.55)
+ (end 157.5683 108.55)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "38e77c21-9312-4961-a6c4-09c9b5d3710f")
+ )
+ (segment
+ (start 157.5683 108.55)
+ (end 157.5683 106.3009)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "634a49c0-3206-4e85-b260-38f01abb66be")
+ )
+ (segment
+ (start 157.7513 106.1179)
+ (end 157.7513 104.9013)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "655374d5-edcb-4c2b-b993-bafb469318b8")
+ )
+ (segment
+ (start 157.57 108.55)
+ (end 157.5698 108.55)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "75271015-b14a-4be5-b914-35d5b5b3cdbf")
+ )
+ (segment
+ (start 158.605 113.45)
+ (end 157.5683 113.45)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "81201d85-8a94-420e-a582-ccec8cd20a7f")
+ )
+ (segment
+ (start 133.79 102.4)
+ (end 124.55 102.4)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "95e543cb-08af-451b-8e15-1bc8163edc70")
+ )
+ (segment
+ (start 157.7513 104.9013)
+ (end 155.65 102.8)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "9dcf98f0-0931-40c6-8fe3-973bb05c7456")
+ )
+ (segment
+ (start 157.5683 113.45)
+ (end 155.65 111.5317)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "b37fa105-0f5e-456e-904f-0a744a098703")
+ )
+ (segment
+ (start 124.221 102.4)
+ (end 124.1132 102.2922)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "b580e9e9-44cc-4e6c-b400-2612dad69149")
+ )
+ (segment
+ (start 158.605 108.55)
+ (end 157.57 108.55)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "d6d4df6d-3f53-424e-9538-1940e3b36bc0")
+ )
+ (segment
+ (start 124.221 102.729)
+ (end 124.221 102.4)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "d6fad402-cb40-4376-8527-53da71035eba")
+ )
+ (segment
+ (start 155.65 111.5317)
+ (end 155.65 102.8)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "e32e8d44-92f8-43a9-bb09-f24b908d1db2")
+ )
+ (segment
+ (start 124.488 102.4)
+ (end 124.221 102.4)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "e3743f21-9cd0-49bf-9378-2d2ab038b2a0")
+ )
+ (segment
+ (start 121.6 105.35)
+ (end 124.221 102.729)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "f92a782a-76c9-4d8c-bed1-e9de95d3a92b")
+ )
+ (segment
+ (start 157.5683 106.3009)
+ (end 157.7513 106.1179)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 14)
+ (uuid "fded807e-c024-43d3-92a8-921405c230cb")
+ )
+ (via
+ (at 155.8184 101.042)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 14)
+ (uuid "43fb5a9e-8008-4dea-9bd8-3e953f56967c")
+ )
+ (via
+ (at 124.1132 102.2922)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 14)
+ (uuid "d266fb48-486a-47a5-af5b-8102dfe2d96a")
+ )
+ (segment
+ (start 154.5682 102.2922)
+ (end 155.8184 101.042)
+ (width 0.3)
+ (layer "B.Cu")
+ (net 14)
+ (uuid "228d1dba-a0df-4b54-b482-5d50e065a746")
+ )
+ (segment
+ (start 124.1132 102.2922)
+ (end 154.5682 102.2922)
+ (width 0.3)
+ (layer "B.Cu")
+ (net 14)
+ (uuid "be8cef63-62a7-49f3-9683-95ca25fbb8e2")
+ )
+ (segment
+ (start 102.5 107.4281)
+ (end 102.5 106.5)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "0b66bae3-fb22-4c9c-a49c-7a7c867ec723")
+ )
+ (segment
+ (start 143.5 107.1883)
+ (end 139.7046 103.3929)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "0dc57459-f715-4b87-90d6-00019035df77")
+ )
+ (segment
+ (start 104.2024 109.1305)
+ (end 102.5 107.4281)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "0ec5b28b-980f-4917-b862-387609396aa7")
+ )
+ (segment
+ (start 106.0354 109.1305)
+ (end 104.2024 109.1305)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "201c8769-9e77-417f-87a6-2259162bf2c9")
+ )
+ (segment
+ (start 137.5 109.98)
+ (end 135 112.48)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "2155f55c-f935-4389-bf99-69a742b9f9dd")
+ )
+ (segment
+ (start 102.5 115.5)
+ (end 102.5 114.1018)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "2876a6c6-3687-41d5-8f78-3ca88f576971")
+ )
+ (segment
+ (start 136.6835 106.3718)
+ (end 137.5 107.1883)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "36a716ba-7221-4f78-9191-382f68c3ae48")
+ )
+ (segment
+ (start 120.5082 101.6805)
+ (end 112.4886 109.7001)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "3ddde597-7aba-4528-85b8-9ec73376ebee")
+ )
+ (segment
+ (start 134.0905 101.6805)
+ (end 120.5082 101.6805)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "4c12d571-d2ea-496c-b72f-5b8ae1863559")
+ )
+ (segment
+ (start 143.5 107.875)
+ (end 143.5 107.1883)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "5844bcb5-f4f9-45f7-91d5-050a67b1edcf")
+ )
+ (segment
+ (start 106.605 109.7001)
+ (end 106.0354 109.1305)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "6a71acc1-311a-4113-9fda-8b1ecfb8a3cf")
+ )
+ (segment
+ (start 136.6835 103.496)
+ (end 136.6835 106.3718)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "6b22b801-1cd4-4c57-956c-9674daa8eece")
+ )
+ (segment
+ (start 136.7866 103.3929)
+ (end 136.6835 103.496)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "7f941ac0-4148-4dc9-b235-5f5da5ce838f")
+ )
+ (segment
+ (start 134.81 102.4)
+ (end 134.0905 101.6805)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "869d17a2-00f1-4821-bd2f-4de59eadebee")
+ )
+ (segment
+ (start 135.5875 102.4)
+ (end 134.81 102.4)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "97733273-0beb-4128-b012-c0aaca75b4c3")
+ )
+ (segment
+ (start 112.4886 109.7001)
+ (end 106.605 109.7001)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "978398a2-b25f-4b9c-996a-f09444bd5366")
+ )
+ (segment
+ (start 102.5 114.1018)
+ (end 103.2688 113.333)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "a2d73623-003b-48f9-9541-5d08d6caeb16")
+ )
+ (segment
+ (start 137.5 107.875)
+ (end 137.5 107.1883)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "a6c132f8-e7eb-46b7-8f5e-1b642178c6c6")
+ )
+ (segment
+ (start 136.6835 103.496)
+ (end 135.5875 102.4)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "bc7f50b0-ed7d-496f-90e3-09211b87501e")
+ )
+ (segment
+ (start 131.6375 111.9525)
+ (end 133.0725 111.9525)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "c07eab64-0a46-4eb9-bc18-41d2661dc1e1")
+ )
+ (segment
+ (start 137.5 107.875)
+ (end 137.5 109.98)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "c85baa3b-da19-4ab2-865d-dda0cdc5b152")
+ )
+ (segment
+ (start 133.6 112.48)
+ (end 135 112.48)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "d732728c-a8df-4ac0-8d9a-47234406bcb9")
+ )
+ (segment
+ (start 139.7046 103.3929)
+ (end 136.7866 103.3929)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "e321b9aa-419c-44a0-ab1c-eab9c38f77ec")
+ )
+ (segment
+ (start 133.0725 111.9525)
+ (end 133.6 112.48)
+ (width 0.3)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "f91428aa-44f3-4343-b6f6-637e71a128a1")
+ )
+ (via
+ (at 103.2688 113.333)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 15)
+ (uuid "89b4695a-db73-4597-8dc6-ea4fbee8ac20")
+ )
+ (via
+ (at 106.605 109.7001)
+ (size 0.6)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 15)
+ (uuid "eb357c97-ea4f-4540-9d63-2260962fe0d7")
+ )
+ (segment
+ (start 106.4447 109.8604)
+ (end 106.605 109.7001)
+ (width 0.3)
+ (layer "B.Cu")
+ (net 15)
+ (uuid "02d21174-9f5e-4bf3-a369-8be6c3eeedd8")
+ )
+ (segment
+ (start 103.2688 113.333)
+ (end 105.0134 113.333)
+ (width 0.3)
+ (layer "B.Cu")
+ (net 15)
+ (uuid "2015ffcb-3dd7-4f6e-8b3c-4bdafa5930e3")
+ )
+ (segment
+ (start 105.0134 113.333)
+ (end 106.4447 111.9017)
+ (width 0.3)
+ (layer "B.Cu")
+ (net 15)
+ (uuid "61678a2c-e599-4da0-8ae7-4fb242c86dc3")
+ )
+ (segment
+ (start 106.4447 111.9017)
+ (end 106.4447 109.8604)
+ (width 0.3)
+ (layer "B.Cu")
+ (net 15)
+ (uuid "ba9c0601-d731-4418-9585-24e7df2a6587")
+ )
+ (zone
+ (net 9)
+ (net_name "GND")
+ (layer "F.Cu")
+ (uuid "2e24fcce-d0f9-4f81-a436-8ad4a1719d48")
+ (hatch edge 0.5)
+ (connect_pads yes
+ (clearance 0.25)
+ )
+ (min_thickness 0.2)
+ (filled_areas_thickness no)
+ (fill yes
+ (thermal_gap 0.25)
+ (thermal_bridge_width 0.3)
+ )
+ (polygon
+ (pts
+ (xy 100.2 100.2) (xy 165.8 100.2) (xy 165.8 121.8) (xy 100.2 121.8)
+ )
+ )
+ (filled_polygon
+ (layer "F.Cu")
+ (pts
+ (xy 155.764958 100.319407) (xy 155.800922 100.368907) (xy 155.800922 100.430093) (xy 155.764958 100.479593)
+ (xy 155.732393 100.495125) (xy 155.605915 100.529016) (xy 155.605913 100.529016) (xy 155.605909 100.529018)
+ (xy 155.480389 100.601487) (xy 155.377887 100.703989) (xy 155.305417 100.82951) (xy 155.2679 100.969525)
+ (xy 155.2679 101.075967) (xy 155.264527 101.101589) (xy 155.2495 101.157673) (xy 155.2495 101.778215)
+ (xy 155.230593 101.836406) (xy 155.185098 101.870973) (xy 155.157666 101.881204) (xy 155.042458 101.96745)
+ (xy 155.04245 101.967458) (xy 154.956202 102.08267) (xy 154.90591 102.217511) (xy 154.905908 102.217522)
+ (xy 154.8995 102.277129) (xy 154.8995 103.322866) (xy 154.899501 103.32287) (xy 154.905908 103.38248)
+ (xy 154.905909 103.382485) (xy 154.956202 103.517329) (xy 155.04245 103.632541) (xy 155.042454 103.632546)
+ (xy 155.157669 103.718796) (xy 155.185093 103.729024) (xy 155.233009 103.767073) (xy 155.2495 103.821783)
+ (xy 155.2495 111.478973) (xy 155.2495 111.584427) (xy 155.251401 111.59152) (xy 155.276794 111.686292)
+ (xy 155.329516 111.777608) (xy 155.329518 111.77761) (xy 155.32952 111.777613) (xy 157.322387 113.77048)
+ (xy 157.322389 113.770481) (xy 157.322391 113.770483) (xy 157.413708 113.823205) (xy 157.413706 113.823205)
+ (xy 157.41371 113.823206) (xy 157.413712 113.823207) (xy 157.515573 113.8505) (xy 157.592961 113.8505)
+ (xy 157.651152 113.869407) (xy 157.675276 113.894498) (xy 157.687302 113.912496) (xy 157.699398 113.9306)
+ (xy 157.6994 113.930602) (xy 157.724261 113.947213) (xy 157.78226 113.985966) (xy 157.837808 113.997015)
+ (xy 157.855315 114.000498) (xy 157.85532 114.000498) (xy 157.855326 114.0005) (xy 157.855327 114.0005)
+ (xy 159.354673 114.0005) (xy 159.354674 114.0005) (xy 159.386328 113.994203) (xy 159.447088 114.001392)
+ (xy 159.492019 114.042923) (xy 159.501271 114.065677) (xy 159.51372 114.112139) (xy 159.589481 114.24336)
+ (xy 159.589483 114.243362) (xy 159.589485 114.243365) (xy 159.696635 114.350515) (xy 159.696637 114.350516)
+ (xy 159.696639 114.350518) (xy 159.827861 114.426279) (xy 159.827859 114.426279) (xy 159.827863 114.42628)
+ (xy 159.827865 114.426281) (xy 159.974234 114.4655) (xy 159.974236 114.4655) (xy 160.125764 114.4655)
+ (xy 160.125766 114.4655) (xy 160.272135 114.426281) (xy 160.391101 114.357595) (xy 160.450947 114.344874)
+ (xy 160.506843 114.36976) (xy 160.537436 114.422748) (xy 160.5396 114.443332) (xy 160.5396 115.42471)
+ (xy 160.520693 115.482901) (xy 160.510604 115.494714) (xy 160.249214 115.756104) (xy 160.194697 115.783881)
+ (xy 160.17921 115.7851) (xy 157.41179 115.7851) (xy 157.353599 115.766193) (xy 157.341786 115.756104)
+ (xy 157.199496 115.613814) (xy 157.171719 115.559297) (xy 157.1705 115.54381) (xy 157.1705 115.338421)
+ (xy 157.1705 115.338418) (xy 157.159582 115.263482) (xy 157.103076 115.147898) (xy 157.012102 115.056924)
+ (xy 156.896518 115.000418) (xy 156.821582 114.9895) (xy 156.378418 114.9895) (xy 156.303482 115.000418)
+ (xy 156.187899 115.056923) (xy 156.096923 115.147899) (xy 156.059063 115.225344) (xy 156.040418 115.263482)
+ (xy 156.0295 115.338418) (xy 156.0295 115.681582) (xy 156.040418 115.756518) (xy 156.096924 115.872102)
+ (xy 156.187898 115.963076) (xy 156.303482 116.019582) (xy 156.378418 116.0305) (xy 156.58381 116.0305)
+ (xy 156.642001 116.049407) (xy 156.653813 116.059496) (xy 157.010387 116.416069) (xy 157.010392 116.416073)
+ (xy 157.085973 116.45971) (xy 157.085974 116.45971) (xy 157.087487 116.460583) (xy 157.090312 116.462214)
+ (xy 157.179456 116.4861) (xy 157.179457 116.4861) (xy 160.411543 116.4861) (xy 160.411544 116.4861)
+ (xy 160.500688 116.462214) (xy 160.504109 116.460238) (xy 160.505026 116.45971) (xy 160.580607 116.416073)
+ (xy 160.580607 116.416072) (xy 160.580612 116.41607) (xy 161.17057 115.826112) (xy 161.216714 115.746188)
+ (xy 161.221615 115.727898) (xy 161.225015 115.715211) (xy 161.234026 115.681578) (xy 161.2406 115.657044)
+ (xy 161.2406 110.502256) (xy 161.216714 110.413112) (xy 161.207989 110.398) (xy 161.207173 110.396587)
+ (xy 161.189722 110.36636) (xy 161.17057 110.333188) (xy 159.806912 108.96953) (xy 159.726988 108.923386)
+ (xy 159.721794 108.921994) (xy 159.712108 108.919398) (xy 159.712108 108.919399) (xy 159.653877 108.903796)
+ (xy 159.65161 108.902324) (xy 159.648907 108.902324) (xy 159.62615 108.88579) (xy 159.602562 108.870472)
+ (xy 159.601593 108.867948) (xy 159.599407 108.86636) (xy 159.590714 108.839606) (xy 159.580636 108.81335)
+ (xy 159.5805 108.808169) (xy 159.5805 108.674937) (xy 159.599407 108.616746) (xy 159.648907 108.580782)
+ (xy 159.710093 108.580782) (xy 159.728996 108.589198) (xy 159.827865 108.646281) (xy 159.974234 108.6855)
+ (xy 159.974236 108.6855) (xy 160.125764 108.6855) (xy 160.125766 108.6855) (xy 160.272135 108.646281)
+ (xy 160.272137 108.646279) (xy 160.272139 108.646279) (xy 160.40336 108.570518) (xy 160.40336 108.570517)
+ (xy 160.403365 108.570515) (xy 160.510515 108.463365) (xy 160.514234 108.456923) (xy 160.586279 108.332139)
+ (xy 160.586279 108.332137) (xy 160.586281 108.332135) (xy 160.6255 108.185766) (xy 160.6255 108.034234)
+ (xy 160.586281 107.887865) (xy 160.586279 107.887861) (xy 160.586279 107.88786) (xy 160.510518 107.756639)
+ (xy 160.510516 107.756637) (xy 160.510515 107.756635) (xy 160.403365 107.649485) (xy 160.403362 107.649483)
+ (xy 160.40336 107.649481) (xy 160.272138 107.57372) (xy 160.27214 107.57372) (xy 160.203102 107.555222)
+ (xy 160.125766 107.5345) (xy 159.974234 107.5345) (xy 159.896898 107.555222) (xy 159.82786 107.57372)
+ (xy 159.696639 107.649481) (xy 159.589481 107.756639) (xy 159.51372 107.887861) (xy 159.513718 107.887865)
+ (xy 159.50127 107.934323) (xy 159.467946 107.985637) (xy 159.410825 108.007563) (xy 159.386331 108.005797)
+ (xy 159.354674 107.9995) (xy 158.0678 107.9995) (xy 158.009609 107.980593) (xy 157.973645 107.931093)
+ (xy 157.9688 107.9005) (xy 157.9688 106.5078) (xy 157.987707 106.449609) (xy 157.99779 106.437802)
+ (xy 158.07178 106.363813) (xy 158.072206 106.363076) (xy 158.124505 106.272492) (xy 158.124505 106.27249)
+ (xy 158.124507 106.272488) (xy 158.1518 106.170627) (xy 158.1518 106.065173) (xy 158.1518 104.848573)
+ (xy 158.124507 104.746713) (xy 158.124507 104.746712) (xy 158.124507 104.746711) (xy 158.071783 104.655391)
+ (xy 158.071782 104.65539) (xy 158.071781 104.655389) (xy 158.07178 104.655387) (xy 156.429495 103.013102)
+ (xy 156.401718 102.958585) (xy 156.400499 102.943098) (xy 156.400499 102.277133) (xy 156.400499 102.277128)
+ (xy 156.394091 102.217517) (xy 156.368688 102.149407) (xy 156.343797 102.08267) (xy 156.257549 101.967458)
+ (xy 156.257548 101.967457) (xy 156.257546 101.967454) (xy 156.248169 101.960434) (xy 156.142333 101.881204)
+ (xy 156.114902 101.870973) (xy 156.092532 101.853207) (xy 156.069407 101.836406) (xy 156.068722 101.834298)
+ (xy 156.066988 101.832921) (xy 156.0505 101.778215) (xy 156.0505 101.600816) (xy 156.069407 101.542625)
+ (xy 156.099996 101.515082) (xy 156.156415 101.482509) (xy 156.258909 101.380015) (xy 156.270453 101.36002)
+ (xy 156.331382 101.254489) (xy 156.331382 101.254487) (xy 156.331384 101.254485) (xy 156.3689 101.114475)
+ (xy 156.3689 100.969525) (xy 156.331384 100.829515) (xy 156.331382 100.829512) (xy 156.331382 100.82951)
+ (xy 156.258912 100.703989) (xy 156.25891 100.703987) (xy 156.258909 100.703985) (xy 156.156415 100.601491)
+ (xy 156.156412 100.601489) (xy 156.15641 100.601487) (xy 156.03089 100.529018) (xy 156.030887 100.529017)
+ (xy 156.030885 100.529016) (xy 155.904407 100.495126) (xy 155.853095 100.461802) (xy 155.831169 100.404681)
+ (xy 155.847005 100.34558) (xy 155.894555 100.307075) (xy 155.930033 100.3005) (xy 163.99645 100.3005)
+ (xy 164.003514 100.300752) (xy 164.024934 100.302284) (xy 164.234808 100.317299) (xy 164.248765 100.319307)
+ (xy 164.471873 100.367845) (xy 164.485425 100.371824) (xy 164.699358 100.451619) (xy 164.7122 100.457484)
+ (xy 164.912601 100.566914) (xy 164.924468 100.574541) (xy 165.097385 100.703985) (xy 165.10725 100.71137)
+ (xy 165.117925 100.720619) (xy 165.27938 100.882074) (xy 165.288629 100.892749) (xy 165.425456 101.075527)
+ (xy 165.433087 101.087402) (xy 165.44787 101.114474) (xy 165.542513 101.287796) (xy 165.548381 101.300644)
+ (xy 165.628175 101.514574) (xy 165.632154 101.528126) (xy 165.68069 101.751221) (xy 165.682701 101.765202)
+ (xy 165.699248 101.996484) (xy 165.6995 102.003549) (xy 165.6995 119.99645) (xy 165.699248 120.003515)
+ (xy 165.682701 120.234797) (xy 165.68069 120.248778) (xy 165.632154 120.471873) (xy 165.628175 120.485425)
+ (xy 165.548381 120.699355) (xy 165.542513 120.712203) (xy 165.43309 120.912593) (xy 165.425453 120.924476)
+ (xy 165.288629 121.10725) (xy 165.27938 121.117925) (xy 165.117925 121.27938) (xy 165.10725 121.288629)
+ (xy 164.924476 121.425453) (xy 164.912593 121.43309) (xy 164.712203 121.542513) (xy 164.699355 121.548381)
+ (xy 164.485425 121.628175) (xy 164.471873 121.632154) (xy 164.248778 121.68069) (xy 164.234797 121.682701)
+ (xy 164.003515 121.699248) (xy 163.99645 121.6995) (xy 130.370031 121.6995) (xy 130.31184 121.680593)
+ (xy 130.275876 121.631093) (xy 130.275876 121.569907) (xy 130.31184 121.520407) (xy 130.332148 121.509035)
+ (xy 130.334679 121.507985) (xy 130.334685 121.507984) (xy 130.460215 121.435509) (xy 130.562709 121.333015)
+ (xy 130.562712 121.33301) (xy 130.635182 121.207489) (xy 130.635182 121.207487) (xy 130.635184 121.207485)
+ (xy 130.6727 121.067475) (xy 130.6727 120.981189) (xy 130.691607 120.922998) (xy 130.70169 120.911191)
+ (xy 130.80727 120.805612) (xy 130.853414 120.725688) (xy 130.8773 120.636544) (xy 130.8773 120.544256)
+ (xy 130.8773 115.677) (xy 130.896207 115.618809) (xy 130.945707 115.582845) (xy 130.9763 115.578)
+ (xy 132.383257 115.578) (xy 132.38326 115.578) (xy 132.451393 115.568073) (xy 132.556483 115.516698)
+ (xy 132.639198 115.433983) (xy 132.690573 115.328893) (xy 132.7005 115.26076) (xy 132.7005 114.99424)
+ (xy 132.694968 114.956272) (xy 132.705288 114.895965) (xy 132.749086 114.85324) (xy 132.792934 114.843)
+ (xy 137.03691 114.843) (xy 137.095101 114.861907) (xy 137.106914 114.871996) (xy 138.354204 116.119286)
+ (xy 138.381981 116.173803) (xy 138.3832 116.18929) (xy 138.3832 116.275575) (xy 138.389349 116.298524)
+ (xy 138.420717 116.415589) (xy 138.493187 116.54111) (xy 138.493189 116.541112) (xy 138.493191 116.541115)
+ (xy 138.595685 116.643609) (xy 138.595687 116.64361) (xy 138.595689 116.643612) (xy 138.721211 116.716082)
+ (xy 138.721212 116.716082) (xy 138.721215 116.716084) (xy 138.861225 116.7536) (xy 138.861226 116.7536)
+ (xy 139.006174 116.7536) (xy 139.006175 116.7536) (xy 139.146185 116.716084) (xy 139.146187 116.716082)
+ (xy 139.146189 116.716082) (xy 139.27171 116.643612) (xy 139.27171 116.643611) (xy 139.271715 116.643609)
+ (xy 139.374209 116.541115) (xy 139.381521 116.528449) (xy 139.426989 116.487508) (xy 139.48784 116.481111)
+ (xy 139.537262 116.507944) (xy 139.900504 116.871186) (xy 139.928281 116.925703) (xy 139.9295 116.94119)
+ (xy 139.9295 117.281582) (xy 139.940418 117.356518) (xy 139.996924 117.472102) (xy 140.087898 117.563076)
+ (xy 140.203482 117.619582) (xy 140.278418 117.6305) (xy 140.278421 117.6305) (xy 140.721578 117.6305)
+ (xy 140.721582 117.6305) (xy 140.796518 117.619582) (xy 140.912102 117.563076) (xy 141.003076 117.472102)
+ (xy 141.059582 117.356518) (xy 141.0705 117.281582) (xy 141.0705 116.938418) (xy 141.059582 116.863482)
+ (xy 141.003076 116.747898) (xy 140.925179 116.670001) (xy 140.897404 116.615487) (xy 140.906975 116.555055)
+ (xy 140.925178 116.529999) (xy 141.003076 116.452102) (xy 141.059582 116.336518) (xy 141.0705 116.261582)
+ (xy 141.0705 115.918418) (xy 141.059582 115.843482) (xy 141.003076 115.727898) (xy 140.912102 115.636924)
+ (xy 140.906017 115.633949) (xy 140.862045 115.591406) (xy 140.8505 115.54501) (xy 140.8505 108.9629)
+ (xy 140.869407 108.904709) (xy 140.918907 108.868745) (xy 140.9495 108.8639) (xy 144.224042 108.8639)
+ (xy 144.224044 108.8639) (xy 144.313188 108.840014) (xy 144.323849 108.833858) (xy 144.323851 108.833858)
+ (xy 144.359371 108.81335) (xy 144.393112 108.79387) (xy 144.423546 108.763436) (xy 147.087066 108.763436)
+ (xy 147.087066 108.836563) (xy 147.095606 108.879495) (xy 147.106015 108.931825) (xy 147.106515 108.934336)
+ (xy 147.106515 108.934338) (xy 147.134496 109.001891) (xy 147.189347 109.083983) (xy 147.189883 109.084784)
+ (xy 147.241588 109.136489) (xy 147.324478 109.191874) (xy 147.324479 109.191874) (xy 147.32448 109.191875)
+ (xy 147.329521 109.193963) (xy 147.392035 109.219857) (xy 147.464767 109.238076) (xy 147.501328 109.241677)
+ (xy 147.526372 109.242907) (xy 147.526389 109.242907) (xy 148.350947 109.242907) (xy 148.350964 109.242907)
+ (xy 148.376008 109.241677) (xy 148.394288 109.239876) (xy 148.412561 109.238077) (xy 148.412562 109.238077)
+ (xy 148.412564 109.238076) (xy 148.412569 109.238076) (xy 148.485358 109.219833) (xy 148.486434 109.219387)
+ (xy 148.486414 109.21934) (xy 148.487948 109.218707) (xy 148.490413 109.218186) (xy 148.521491 109.204866)
+ (xy 148.552854 109.191876) (xy 148.553001 109.191815) (xy 148.553005 109.191811) (xy 148.553581 109.191504)
+ (xy 148.555165 109.190739) (xy 148.557614 109.189385) (xy 148.557625 109.189381) (xy 148.596263 109.162875)
+ (xy 148.597015 109.162366) (xy 148.635858 109.136379) (xy 148.635864 109.136372) (xy 148.636901 109.135521)
+ (xy 148.63916 109.133448) (xy 148.639833 109.132988) (xy 148.641275 109.13151) (xy 148.643283 109.129669)
+ (xy 148.668738 109.118054) (xy 148.693503 109.105048) (xy 148.696339 109.105461) (xy 148.698949 109.104271)
+ (xy 148.726373 109.109837) (xy 148.754049 109.113871) (xy 148.7561 109.115872) (xy 148.758911 109.116443)
+ (xy 148.77782 109.137061) (xy 148.797846 109.156597) (xy 148.799587 109.160794) (xy 148.800267 109.161536)
+ (xy 148.800408 109.162775) (xy 148.804692 109.173101) (xy 149.12761 110.206436) (xy 149.127618 110.206458)
+ (xy 149.127624 110.206477) (xy 149.136267 110.23001) (xy 149.139264 110.237078) (xy 149.139553 110.236955)
+ (xy 149.142436 110.244289) (xy 149.142339 110.244331) (xy 149.143893 110.247996) (xy 149.143907 110.248031)
+ (xy 149.150609 110.263837) (xy 149.189693 110.327823) (xy 149.189695 110.327825) (xy 149.193569 110.332466)
+ (xy 149.196769 110.337605) (xy 149.196775 110.337615) (xy 149.206739 110.348241) (xy 149.208564 110.350426)
+ (xy 149.208564 110.350428) (xy 149.20857 110.350434) (xy 149.234901 110.381979) (xy 149.236083 110.383473)
+ (xy 149.236555 110.383961) (xy 149.236559 110.383966) (xy 149.246337 110.391854) (xy 149.256387 110.401182)
+ (xy 149.264969 110.410334) (xy 149.275614 110.417952) (xy 149.300514 110.435772) (xy 149.300516 110.435773)
+ (xy 149.302846 110.43744) (xy 149.31415 110.44656) (xy 149.319506 110.449365) (xy 149.324418 110.452881)
+ (xy 149.324432 110.452891) (xy 149.335084 110.457709) (xy 149.340201 110.460204) (xy 149.367313 110.474406)
+ (xy 149.367313 110.474407) (xy 149.37891 110.480482) (xy 149.37892 110.480487) (xy 149.397567 110.485973)
+ (xy 149.415263 110.493978) (xy 149.428011 110.496942) (xy 149.428448 110.495059) (xy 149.474558 110.508626)
+ (xy 149.474556 110.508626) (xy 149.480582 110.509168) (xy 149.486467 110.510537) (xy 149.486485 110.510541)
+ (xy 149.501037 110.511008) (xy 149.503872 110.511263) (xy 149.503874 110.511264) (xy 149.503889 110.511265)
+ (xy 149.534329 110.514007) (xy 149.534329 110.514008) (xy 149.540543 110.514567) (xy 149.547336 110.51518)
+ (xy 149.547338 110.51518) (xy 149.54737 110.515183) (xy 149.547384 110.515184) (xy 149.566713 110.513116)
+ (xy 149.586125 110.51374) (xy 149.599036 110.5116) (xy 149.59872 110.509693) (xy 149.64651 110.504583)
+ (xy 149.646512 110.504582) (xy 149.646514 110.504582) (xy 149.648508 110.504168) (xy 149.656654 110.502231)
+ (xy 149.656631 110.502114) (xy 149.658238 110.501791) (xy 149.65825 110.50179) (xy 149.658265 110.501787)
+ (xy 149.669232 110.49765) (xy 149.674629 110.495792) (xy 149.703793 110.486679) (xy 149.703794 110.48668)
+ (xy 149.716289 110.482776) (xy 149.716305 110.482771) (xy 149.727335 110.476755) (xy 149.739795 110.471041)
+ (xy 149.751544 110.466612) (xy 149.762655 110.459693) (xy 149.762654 110.459692) (xy 149.788633 110.443516)
+ (xy 149.788645 110.443508) (xy 149.791048 110.442011) (xy 149.803828 110.435043) (xy 149.808469 110.431168)
+ (xy 149.8136 110.427974) (xy 149.81362 110.427961) (xy 149.822172 110.41994) (xy 149.826446 110.416158)
+ (xy 149.849894 110.396586) (xy 149.849895 110.396587) (xy 149.859946 110.388198) (xy 149.859967 110.38818)
+ (xy 149.872174 110.373048) (xy 149.886337 110.359766) (xy 149.893954 110.349122) (xy 149.892382 110.347997)
+ (xy 149.915218 110.319691) (xy 149.91522 110.319688) (xy 149.922561 110.310589) (xy 149.922569 110.310573)
+ (xy 149.923686 110.308872) (xy 149.927021 110.303454) (xy 149.926984 110.303432) (xy 149.928873 110.300333)
+ (xy 149.928881 110.300322) (xy 149.963107 110.233596) (xy 149.969906 110.213527) (xy 149.971611 110.208495)
+ (xy 149.971615 110.208482) (xy 149.972425 110.206093) (xy 149.974889 110.198822) (xy 149.974891 110.198814)
+ (xy 149.975258 110.197732) (xy 149.975296 110.197614) (xy 149.978575 110.187933) (xy 149.98088 110.177798)
+ (xy 149.981758 110.174716) (xy 149.981765 110.174693) (xy 150.069613 109.796941) (xy 150.101209 109.744549)
+ (xy 150.157569 109.720732) (xy 150.181556 109.722068) (xy 150.181618 109.721651) (xy 150.184023 109.722007)
+ (xy 150.184026 109.722008) (xy 150.190256 109.722621) (xy 150.233864 109.726917) (xy 150.233871 109.726917)
+ (xy 150.366136 109.726917) (xy 150.405563 109.723033) (xy 150.415974 109.722008) (xy 150.432483 109.718724)
+ (xy 150.493245 109.725914) (xy 150.538176 109.767445) (xy 150.548085 109.792796) (xy 150.693617 110.401381)
+ (xy 150.693829 110.402266) (xy 150.70085 110.426337) (xy 150.702658 110.431566) (xy 150.703569 110.43125)
+ (xy 150.705682 110.437592) (xy 150.704842 110.437883) (xy 150.712856 110.46106) (xy 150.747488 110.527556)
+ (xy 150.749046 110.529705) (xy 150.75026 110.532074) (xy 150.756251 110.539641) (xy 150.757815 110.541797)
+ (xy 150.757817 110.541804) (xy 150.757827 110.541818) (xy 150.790423 110.586763) (xy 150.790424 110.586764)
+ (xy 150.796589 110.592474) (xy 150.800277 110.596073) (xy 150.803803 110.599697) (xy 150.81214 110.610226)
+ (xy 150.823205 110.619636) (xy 150.825925 110.621949) (xy 150.825927 110.621951) (xy 150.854447 110.646205)
+ (xy 150.854445 110.646206) (xy 150.854456 110.646212) (xy 150.8549 110.646589) (xy 150.858001 110.649341)
+ (xy 150.863561 110.65449) (xy 150.865826 110.655881) (xy 150.867849 110.657601) (xy 150.867854 110.657605)
+ (xy 150.876277 110.662298) (xy 150.882628 110.666198) (xy 150.882628 110.666197) (xy 150.917618 110.687684)
+ (xy 150.91763 110.68769) (xy 150.925329 110.692418) (xy 150.925852 110.692743) (xy 150.925878 110.692756)
+ (xy 150.92588 110.692756) (xy 150.925882 110.692758) (xy 150.931984 110.695015) (xy 150.933774 110.695677)
+ (xy 150.947614 110.702047) (xy 150.950863 110.703857) (xy 150.954939 110.706128) (xy 150.965995 110.709694)
+ (xy 150.987042 110.716482) (xy 150.987055 110.716486) (xy 151.008374 110.723365) (xy 151.012315 110.724729)
+ (xy 151.019385 110.727344) (xy 151.022088 110.728051) (xy 151.024524 110.728575) (xy 151.02453 110.728577)
+ (xy 151.032063 110.729451) (xy 151.036206 110.730022) (xy 151.041477 110.730862) (xy 151.041477 110.730861)
+ (xy 151.077355 110.73658) (xy 151.077375 110.736581) (xy 151.091575 110.738844) (xy 151.091591 110.738846)
+ (xy 151.105027 110.738329) (xy 151.110041 110.738647) (xy 151.110779 110.738939) (xy 151.115211 110.73911)
+ (xy 151.123555 110.74008) (xy 151.13328 110.739293) (xy 151.133289 110.739295) (xy 151.174117 110.735992)
+ (xy 151.174118 110.735993) (xy 151.179592 110.73555) (xy 151.17971 110.735541) (xy 151.181689 110.735385)
+ (xy 151.191209 110.73502) (xy 151.193606 110.734445) (xy 151.19609 110.73425) (xy 151.196428 110.73419)
+ (xy 151.196434 110.73419) (xy 151.203712 110.732119) (xy 151.207735 110.731067) (xy 151.212969 110.729816)
+ (xy 151.212968 110.729815) (xy 151.248321 110.721363) (xy 151.248324 110.721361) (xy 151.262317 110.718016)
+ (xy 151.262326 110.718013) (xy 151.274527 110.7124) (xy 151.279282 110.710774) (xy 151.280078 110.710761)
+ (xy 151.284244 110.709221) (xy 151.292324 110.706925) (xy 151.300991 110.702485) (xy 151.301005 110.702483)
+ (xy 151.337482 110.683792) (xy 151.337483 110.683794) (xy 151.344154 110.680376) (xy 151.352897 110.676356)
+ (xy 151.35504 110.674801) (xy 151.357398 110.673594) (xy 151.357411 110.673587) (xy 151.363374 110.668864)
+ (xy 151.366637 110.66639) (xy 151.371009 110.663221) (xy 151.371008 110.66322) (xy 151.404202 110.63915)
+ (xy 151.404204 110.639147) (xy 151.412084 110.633434) (xy 151.412087 110.633432) (xy 151.412088 110.633432)
+ (xy 151.412091 110.633429) (xy 151.417796 110.627267) (xy 151.42898 110.616914) (xy 151.435567 110.6117)
+ (xy 151.441858 110.604301) (xy 151.441866 110.604296) (xy 151.468434 110.573048) (xy 151.468436 110.573049)
+ (xy 151.473292 110.567338) (xy 151.479826 110.560283) (xy 151.481211 110.558027) (xy 151.48293 110.556006)
+ (xy 151.522599 110.492377) (xy 151.53238 110.469886) (xy 151.535052 110.463743) (xy 151.535057 110.463732)
+ (xy 151.536591 110.460204) (xy 151.537242 110.458708) (xy 151.537244 110.4587) (xy 151.537696 110.457663)
+ (xy 151.537743 110.457551) (xy 151.542983 110.4455) (xy 151.542965 110.445191) (xy 151.545758 110.436396)
+ (xy 151.545737 110.43639) (xy 151.545748 110.436355) (xy 151.54572 110.436346) (xy 151.546098 110.435261)
+ (xy 151.54611 110.435232) (xy 151.937279 109.222604) (xy 151.95123 109.203315) (xy 151.962275 109.182223)
+ (xy 151.968841 109.178968) (xy 151.973137 109.17303) (xy 151.995764 109.165624) (xy 152.017096 109.155052)
+ (xy 152.024321 109.156278) (xy 152.031287 109.153999) (xy 152.077419 109.165294) (xy 152.083165 109.168302)
+ (xy 152.095423 109.174721) (xy 152.104495 109.180107) (xy 152.122099 109.19187) (xy 152.122101 109.191871)
+ (xy 152.122107 109.191875) (xy 152.131431 109.195737) (xy 152.131431 109.195736) (xy 152.147039 109.202201)
+ (xy 152.14704 109.202202) (xy 152.151147 109.203903) (xy 152.164965 109.211139) (xy 152.177551 109.21484)
+ (xy 152.189658 109.219855) (xy 152.189658 109.219856) (xy 152.18966 109.219856) (xy 152.189664 109.219858)
+ (xy 152.221094 109.22773) (xy 152.224954 109.228781) (xy 152.230499 109.230412) (xy 152.230499 109.230413)
+ (xy 152.235098 109.231766) (xy 152.235145 109.23178) (xy 152.235148 109.23178) (xy 152.235151 109.231781)
+ (xy 152.240014 109.232714) (xy 152.239969 109.232947) (xy 152.245956 109.233957) (xy 152.258598 109.237124)
+ (xy 152.259691 109.237808) (xy 152.262392 109.238074) (xy 152.2624 109.238076) (xy 152.277573 109.23957)
+ (xy 152.277573 109.239569) (xy 152.286533 109.240452) (xy 152.286533 109.240453) (xy 152.298946 109.241676)
+ (xy 152.323998 109.242907) (xy 152.324012 109.242907) (xy 153.07361 109.242907) (xy 153.073627 109.242907)
+ (xy 153.098671 109.241677) (xy 153.135232 109.238076) (xy 153.207964 109.219857) (xy 153.275521 109.191874)
+ (xy 153.358411 109.136489) (xy 153.410116 109.084784) (xy 153.465501 109.001894) (xy 153.493484 108.934337)
+ (xy 153.512933 108.836561) (xy 153.512933 108.763439) (xy 153.493484 108.665663) (xy 153.467414 108.602725)
+ (xy 153.465502 108.598108) (xy 153.453925 108.580782) (xy 153.410116 108.515216) (xy 153.358411 108.463511)
+ (xy 153.358192 108.463365) (xy 153.275518 108.408124) (xy 153.207967 108.380144) (xy 153.207965 108.380143)
+ (xy 153.207964 108.380143) (xy 153.135232 108.361924) (xy 153.135231 108.361923) (xy 153.135228 108.361923)
+ (xy 153.098679 108.358323) (xy 153.08436 108.35762) (xy 153.073627 108.357093) (xy 153.073621 108.357093)
+ (xy 152.645692 108.357093) (xy 152.587501 108.338186) (xy 152.55878 108.305499) (xy 152.46161 108.127354)
+ (xy 152.263047 107.763321) (xy 152.249974 107.741924) (xy 152.234673 107.71944) (xy 152.23467 107.719434)
+ (xy 152.227276 107.708567) (xy 152.227257 107.708541) (xy 152.220605 107.698766) (xy 152.214364 107.695339)
+ (xy 152.21371 107.694636) (xy 152.194077 107.673338) (xy 152.189247 107.667687) (xy 152.186688 107.664455)
+ (xy 152.186685 107.664451) (xy 152.18668 107.664446) (xy 152.185405 107.663126) (xy 152.178909 107.656884)
+ (xy 152.178489 107.656429) (xy 152.178484 107.656424) (xy 152.169876 107.649481) (xy 152.155458 107.637852)
+ (xy 152.1541 107.636722) (xy 152.153278 107.636041) (xy 152.141953 107.62641) (xy 152.130967 107.617067)
+ (xy 152.130959 107.617062) (xy 152.126968 107.614292) (xy 152.12711 107.614086) (xy 152.125648 107.6131)
+ (xy 152.125609 107.613161) (xy 152.12154 107.610493) (xy 152.121538 107.610492) (xy 152.121537 107.610491)
+ (xy 152.083717 107.590689) (xy 152.08144 107.589459) (xy 152.079979 107.588644) (xy 152.043951 107.568562)
+ (xy 152.043947 107.56856) (xy 152.043944 107.568559) (xy 152.037437 107.566458) (xy 152.033258 107.56427)
+ (xy 152.004047 107.555677) (xy 152.003229 107.555413) (xy 152.002405 107.555158) (xy 152.002309 107.555127)
+ (xy 152.002304 107.555123) (xy 152.00218 107.555085) (xy 151.974291 107.54609) (xy 151.969546 107.54506)
+ (xy 151.969598 107.544816) (xy 151.967834 107.544456) (xy 151.967821 107.544528) (xy 151.963054 107.543622)
+ (xy 151.920473 107.539795) (xy 151.917899 107.539529) (xy 151.875334 107.534578) (xy 151.868514 107.535127)
+ (xy 151.863823 107.534706) (xy 151.833569 107.537943) (xy 151.832566 107.538024) (xy 151.832012 107.538076)
+ (xy 151.832013 107.538078) (xy 151.831846 107.538092) (xy 151.831845 107.538091) (xy 151.831813 107.538095)
+ (xy 151.831638 107.538109) (xy 151.831637 107.538108) (xy 151.831559 107.538116) (xy 151.802374 107.540476)
+ (xy 151.797596 107.54134) (xy 151.797552 107.541097) (xy 151.7958 107.541437) (xy 151.795815 107.541505)
+ (xy 151.791058 107.542494) (xy 151.791052 107.542495) (xy 151.79105 107.542496) (xy 151.761096 107.551862)
+ (xy 151.750353 107.555222) (xy 151.747873 107.555962) (xy 151.725564 107.562302) (xy 151.706566 107.567701)
+ (xy 151.706563 107.567702) (xy 151.706561 107.567703) (xy 151.70655 107.567707) (xy 151.700449 107.570829)
+ (xy 151.695958 107.572234) (xy 151.669386 107.586726) (xy 151.668441 107.58721) (xy 151.668443 107.58721)
+ (xy 151.66829 107.587288) (xy 151.667294 107.587813) (xy 151.667212 107.587854) (xy 151.667139 107.587893)
+ (xy 151.641407 107.601074) (xy 151.637327 107.603698) (xy 151.637193 107.60349) (xy 151.635646 107.604514)
+ (xy 151.635683 107.604568) (xy 151.631661 107.607306) (xy 151.598845 107.634714) (xy 151.598846 107.634715)
+ (xy 151.597817 107.635573) (xy 151.563317 107.662882) (xy 151.561711 107.664769) (xy 151.562283 107.665255)
+ (xy 151.555242 107.671138) (xy 151.555241 107.671139) (xy 151.537018 107.693729) (xy 151.536855 107.693931)
+ (xy 151.536843 107.693938) (xy 151.536802 107.693997) (xy 151.536698 107.694126) (xy 151.535048 107.696119)
+ (xy 151.515879 107.718663) (xy 151.515875 107.718668) (xy 151.515595 107.719116) (xy 151.515527 107.719228)
+ (xy 151.515526 107.719229) (xy 151.515525 107.719228) (xy 151.510509 107.727269) (xy 151.51018 107.727005)
+ (xy 151.5092 107.728222) (xy 151.505467 107.735353) (xy 151.503487 107.738528) (xy 151.503482 107.738538)
+ (xy 151.488355 107.762794) (xy 151.482577 107.76765) (xy 151.475154 107.78472) (xy 151.47514 107.784751)
+ (xy 151.46099 107.817257) (xy 151.460532 107.818701) (xy 151.452705 107.839422) (xy 151.452703 107.839429)
+ (xy 151.296385 108.324012) (xy 151.260526 108.373587) (xy 151.202375 108.392618) (xy 151.144145 108.373834)
+ (xy 151.108076 108.32441) (xy 151.105886 108.316662) (xy 150.730762 106.747956) (xy 150.723743 106.72389)
+ (xy 150.721551 106.71755) (xy 150.716127 106.703262) (xy 150.660742 106.620372) (xy 150.577852 106.564987)
+ (xy 150.480076 106.545538) (xy 150.119996 106.545538) (xy 150.10987 106.545872) (xy 150.103118 106.546096)
+ (xy 150.006842 106.571961) (xy 150.006839 106.571962) (xy 149.927791 106.632699) (xy 149.878003 106.719065)
+ (xy 149.878 106.719073) (xy 149.875472 106.726536) (xy 149.868603 106.750645) (xy 149.765519 107.193906)
+ (xy 149.67859 107.567701) (xy 149.678577 107.567755) (xy 149.570052 108.034408) (xy 149.538455 108.086803)
+ (xy 149.482095 108.11062) (xy 149.4225 108.096761) (xy 149.382433 108.050519) (xy 149.379136 108.041526)
+ (xy 149.223487 107.543448) (xy 149.214842 107.519911) (xy 149.2005 107.486089) (xy 149.190416 107.469581)
+ (xy 149.190134 107.468922) (xy 149.190124 107.468897) (xy 149.188978 107.467227) (xy 149.181914 107.455663)
+ (xy 149.161405 107.422086) (xy 149.161403 107.422083) (xy 149.145381 107.402892) (xy 149.145375 107.402886)
+ (xy 149.142383 107.399302) (xy 149.133731 107.386689) (xy 149.123615 107.376817) (xy 149.11456 107.365969)
+ (xy 149.114554 107.365963) (xy 149.106293 107.359298) (xy 149.099307 107.353096) (xy 149.081859 107.336067)
+ (xy 149.081436 107.335649) (xy 149.08141 107.335628) (xy 149.081407 107.335626) (xy 149.081406 107.335625)
+ (xy 149.062592 107.323382) (xy 149.054434 107.31746) (xy 149.036969 107.30337) (xy 149.036967 107.303369)
+ (xy 149.036965 107.303367) (xy 149.033821 107.30172) (xy 149.014795 107.291754) (xy 149.010651 107.289583)
+ (xy 148.997848 107.281252) (xy 148.984727 107.276003) (xy 148.980252 107.273659) (xy 148.980246 107.273657)
+ (xy 148.978754 107.272875) (xy 148.972189 107.269437) (xy 148.967325 107.268006) (xy 148.96199 107.266436)
+ (xy 148.953169 107.263381) (xy 148.938921 107.257682) (xy 148.938922 107.257682) (xy 148.929958 107.254096)
+ (xy 148.929953 107.254094) (xy 148.92995 107.254093) (xy 148.929944 107.254091) (xy 148.907901 107.249985)
+ (xy 148.898092 107.247635) (xy 148.876556 107.241299) (xy 148.851624 107.239054) (xy 148.851624 107.239053)
+ (xy 148.846952 107.238632) (xy 148.831947 107.235837) (xy 148.817814 107.236008) (xy 148.812784 107.235556)
+ (xy 148.812777 107.235556) (xy 148.803723 107.234741) (xy 148.803714 107.234741) (xy 148.793168 107.235869)
+ (xy 148.783856 107.236423) (xy 148.758818 107.236729) (xy 148.758814 107.236729) (xy 148.736875 107.24137)
+ (xy 148.736876 107.241371) (xy 148.73193 107.242417) (xy 148.704611 107.24534) (xy 148.695394 107.24822)
+ (xy 148.695958 107.25003) (xy 148.692363 107.250792) (xy 148.671676 107.255169) (xy 148.671675 107.255169)
+ (xy 148.6613 107.257365) (xy 148.652927 107.260953) (xy 148.652926 107.260952) (xy 148.648284 107.262941)
+ (xy 148.634807 107.267154) (xy 148.62141 107.274459) (xy 148.617115 107.2763) (xy 148.6171 107.276308)
+ (xy 148.594082 107.286172) (xy 148.575585 107.298861) (xy 148.571412 107.301722) (xy 148.547289 107.314878)
+ (xy 148.539876 107.321066) (xy 148.54109 107.322521) (xy 148.520643 107.336547) (xy 148.520638 107.336552)
+ (xy 148.511877 107.342561) (xy 148.505528 107.349068) (xy 148.501999 107.352684) (xy 148.491149 107.361742)
+ (xy 148.481559 107.373627) (xy 148.47829 107.376977) (xy 148.478288 107.376977) (xy 148.460796 107.394904)
+ (xy 148.431327 107.435668) (xy 148.429811 107.437766) (xy 148.428558 107.439321) (xy 148.428216 107.439971)
+ (xy 148.425976 107.443071) (xy 148.416875 107.455661) (xy 148.416874 107.455663) (xy 148.399971 107.488234)
+ (xy 148.399951 107.488276) (xy 148.389515 107.511057) (xy 148.337634 107.64076) (xy 148.076324 108.294037)
+ (xy 148.075994 108.294861) (xy 148.036828 108.341867) (xy 147.984075 108.357093) (xy 147.526372 108.357093)
+ (xy 147.517427 108.357532) (xy 147.501319 108.358323) (xy 147.46477 108.361923) (xy 147.392038 108.380142)
+ (xy 147.392031 108.380144) (xy 147.32448 108.408124) (xy 147.241591 108.463508) (xy 147.18988 108.515219)
+ (xy 147.134496 108.598108) (xy 147.106515 108.665661) (xy 147.106515 108.665663) (xy 147.087066 108.763436)
+ (xy 144.423546 108.763436) (xy 144.54217 108.644812) (xy 144.588314 108.564888) (xy 144.589011 108.562288)
+ (xy 144.6122 108.475744) (xy 144.6122 105.477256) (xy 144.588314 105.388112) (xy 144.566021 105.3495)
+ (xy 144.542169 105.308187) (xy 144.326696 105.092714) (xy 144.106434 104.872451) (xy 144.078657 104.817935)
+ (xy 144.088228 104.757503) (xy 144.121438 104.720132) (xy 144.180597 104.680604) (xy 144.180597 104.680603)
+ (xy 144.180601 104.680601) (xy 144.235966 104.59774) (xy 144.2505 104.524674) (xy 144.2505 103.725326)
+ (xy 144.235966 103.65226) (xy 144.180601 103.569399) (xy 144.180599 103.569397) (xy 144.097742 103.514035)
+ (xy 144.09774 103.514034) (xy 144.097737 103.514033) (xy 144.097736 103.514033) (xy 144.024684 103.499501)
+ (xy 144.024674 103.4995) (xy 142.975326 103.4995) (xy 142.975325 103.4995) (xy 142.975315 103.499501)
+ (xy 142.902263 103.514033) (xy 142.902257 103.514035) (xy 142.8194 103.569397) (xy 142.819397 103.5694)
+ (xy 142.764035 103.652257) (xy 142.764033 103.652263) (xy 142.749501 103.725315) (xy 142.7495 103.725327)
+ (xy 142.7495 104.524672) (xy 142.749501 104.524684) (xy 142.764033 104.597736) (xy 142.764035 104.597742)
+ (xy 142.819397 104.680599) (xy 142.819399 104.680601) (xy 142.90226 104.735966) (xy 142.956278 104.746711)
+ (xy 142.975315 104.750498) (xy 142.97532 104.750498) (xy 142.975326 104.7505) (xy 143.058169 104.7505)
+ (xy 143.11636 104.769407) (xy 143.152324 104.818907) (xy 143.153794 104.823869) (xy 143.160413 104.848573)
+ (xy 143.164276 104.862987) (xy 143.164275 104.862987) (xy 143.173385 104.896985) (xy 143.173386 104.896988)
+ (xy 143.21953 104.976912) (xy 143.882205 105.639587) (xy 143.909981 105.694102) (xy 143.9112 105.709589)
+ (xy 143.9112 106.7941) (xy 143.892293 106.852291) (xy 143.842793 106.888255) (xy 143.781607 106.888255)
+ (xy 143.742198 106.864105) (xy 139.950513 103.07242) (xy 139.95051 103.072418) (xy 139.950508 103.072416)
+ (xy 139.859191 103.019694) (xy 139.859193 103.019694) (xy 139.81967 103.009104) (xy 139.757327 102.9924)
+ (xy 139.757325 102.9924) (xy 136.787301 102.9924) (xy 136.72911 102.973493) (xy 136.717297 102.963404)
+ (xy 136.369481 102.615588) (xy 135.833413 102.07952) (xy 135.83341 102.079518) (xy 135.833409 102.079517)
+ (xy 135.833408 102.079516) (xy 135.742091 102.026794) (xy 135.742093 102.026794) (xy 135.70257 102.016204)
+ (xy 135.640227 101.9995) (xy 135.640225 101.9995) (xy 135.315685 101.9995) (xy 135.257494 101.980593)
+ (xy 135.245687 101.970509) (xy 135.172102 101.896924) (xy 135.056518 101.840418) (xy 134.981582 101.8295)
+ (xy 134.981579 101.8295) (xy 134.846899 101.8295) (xy 134.788708 101.810593) (xy 134.776895 101.800503)
+ (xy 134.560955 101.584563) (xy 134.336413 101.36002) (xy 134.336408 101.360016) (xy 134.245091 101.307294)
+ (xy 134.245093 101.307294) (xy 134.195525 101.294013) (xy 134.143227 101.28) (xy 120.560927 101.28)
+ (xy 120.455473 101.28) (xy 120.403175 101.294013) (xy 120.353607 101.307294) (xy 120.262291 101.360016)
+ (xy 112.351703 109.270604) (xy 112.297186 109.298381) (xy 112.281699 109.2996) (xy 107.942113 109.2996)
+ (xy 107.883922 109.280693) (xy 107.847958 109.231193) (xy 107.846486 109.174978) (xy 107.8728 109.076775)
+ (xy 107.8728 108.931825) (xy 107.855684 108.867948) (xy 107.853873 108.861189) (xy 107.8505 108.835566)
+ (xy 107.8505 107.224499) (xy 107.869407 107.166308) (xy 107.918907 107.130344) (xy 107.9495 107.125499)
+ (xy 108.271943 107.125499) (xy 108.271948 107.125499) (xy 108.319542 107.118565) (xy 108.342504 107.115221)
+ (xy 108.342505 107.11522) (xy 108.342509 107.11522) (xy 108.342511 107.115218) (xy 108.342514 107.115218)
+ (xy 108.451343 107.062014) (xy 108.451343 107.062013) (xy 108.451347 107.062012) (xy 108.537012 106.976347)
+ (xy 108.59022 106.867509) (xy 108.6005 106.796949) (xy 108.600499 106.605963) (xy 109.6495 106.605963)
+ (xy 109.6495 108.294031) (xy 109.649501 108.294037) (xy 109.664826 108.410455) (xy 109.664827 108.410457)
+ (xy 109.678265 108.442899) (xy 109.724829 108.555317) (xy 109.72483 108.555319) (xy 109.724831 108.55532)
+ (xy 109.820284 108.679716) (xy 109.94468 108.775169) (xy 109.944681 108.775169) (xy 109.944682 108.77517)
+ (xy 110.024349 108.808169) (xy 110.089543 108.835173) (xy 110.205965 108.8505) (xy 111.894034 108.850499)
+ (xy 112.010457 108.835173) (xy 112.15532 108.775169) (xy 112.279716 108.679716) (xy 112.375169 108.55532)
+ (xy 112.435173 108.410457) (xy 112.4505 108.294035) (xy 112.450499 106.605966) (xy 112.435173 106.489543)
+ (xy 112.375169 106.34468) (xy 112.279716 106.220284) (xy 112.15532 106.124831) (xy 112.155319 106.12483)
+ (xy 112.155317 106.124829) (xy 112.010461 106.064828) (xy 112.010453 106.064826) (xy 111.894035 106.0495)
+ (xy 110.205968 106.0495) (xy 110.205962 106.049501) (xy 110.089544 106.064826) (xy 110.089543 106.064827)
+ (xy 109.944682 106.124829) (xy 109.820286 106.220282) (xy 109.820282 106.220286) (xy 109.724829 106.344682)
+ (xy 109.664828 106.489538) (xy 109.664826 106.489546) (xy 109.6495 106.605963) (xy 108.600499 106.605963)
+ (xy 108.600499 106.489546) (xy 108.600499 106.203056) (xy 108.600498 106.203051) (xy 108.594062 106.158864)
+ (xy 108.590221 106.132495) (xy 108.590218 106.132485) (xy 108.537014 106.023656) (xy 108.537012 106.023654)
+ (xy 108.537012 106.023653) (xy 108.451347 105.937988) (xy 108.342509 105.88478) (xy 108.271949 105.8745)
+ (xy 108.271945 105.8745) (xy 106.728056 105.8745) (xy 106.728048 105.874501) (xy 106.657495 105.884778)
+ (xy 106.657485 105.884781) (xy 106.548656 105.937985) (xy 106.548651 105.937989) (xy 106.46764 106.019)
+ (xy 106.413123 106.046777) (xy 106.352691 106.037205) (xy 106.309427 105.993941) (xy 106.303483 105.979589)
+ (xy 106.297899 105.962404) (xy 106.297896 105.962399) (xy 106.297895 105.962394) (xy 106.197815 105.765978)
+ (xy 106.068242 105.587635) (xy 105.912365 105.431758) (xy 105.734022 105.302185) (xy 105.734021 105.302184)
+ (xy 105.734019 105.302183) (xy 105.644825 105.256736) (xy 105.537606 105.202105) (xy 105.537602 105.202104)
+ (xy 105.537599 105.202102) (xy 105.327948 105.133984) (xy 105.110225 105.0995) (xy 105.110222 105.0995)
+ (xy 104.889778 105.0995) (xy 104.889775 105.0995) (xy 104.672051 105.133984) (xy 104.4624 105.202102)
+ (xy 104.26598 105.302183) (xy 104.200854 105.3495) (xy 104.087635 105.431758) (xy 103.931758 105.587635)
+ (xy 103.876652 105.663482) (xy 103.802183 105.76598) (xy 103.74689 105.8745) (xy 103.702105 105.962394)
+ (xy 103.702103 105.962397) (xy 103.702101 105.962403) (xy 103.696515 105.979593) (xy 103.660549 106.029092)
+ (xy 103.602357 106.047996) (xy 103.544167 106.029086) (xy 103.532364 106.019005) (xy 103.451347 105.937988)
+ (xy 103.342509 105.88478) (xy 103.271949 105.8745) (xy 103.271945 105.8745) (xy 101.728056 105.8745)
+ (xy 101.728048 105.874501) (xy 101.657495 105.884778) (xy 101.657485 105.884781) (xy 101.548656 105.937985)
+ (xy 101.462987 106.023654) (xy 101.44269 106.065173) (xy 101.40978 106.132491) (xy 101.399501 106.203048)
+ (xy 101.3995 106.203054) (xy 101.3995 106.796943) (xy 101.399501 106.796951) (xy 101.409778 106.867504)
+ (xy 101.409781 106.867514) (xy 101.462985 106.976343) (xy 101.462987 106.976345) (xy 101.462988 106.976347)
+ (xy 101.548653 107.062012) (xy 101.657491 107.11522) (xy 101.728051 107.1255) (xy 102.0005 107.125499)
+ (xy 102.05869 107.144406) (xy 102.094654 107.193906) (xy 102.0995 107.224499) (xy 102.0995 107.375373)
+ (xy 102.0995 107.480827) (xy 102.117094 107.546489) (xy 102.126794 107.582692) (xy 102.179516 107.674008)
+ (xy 102.179518 107.67401) (xy 102.17952 107.674013) (xy 103.956487 109.45098) (xy 103.956489 109.450981)
+ (xy 103.956491 109.450983) (xy 104.047808 109.503705) (xy 104.047806 109.503705) (xy 104.04781 109.503706)
+ (xy 104.047812 109.503707) (xy 104.149673 109.531) (xy 105.828499 109.531) (xy 105.836096 109.533468)
+ (xy 105.843986 109.532219) (xy 105.864641 109.542743) (xy 105.88669 109.549907) (xy 105.898503 109.559996)
+ (xy 106.025504 109.686997) (xy 106.053281 109.741514) (xy 106.0545 109.757001) (xy 106.0545 109.772575)
+ (xy 106.057241 109.782805) (xy 106.081912 109.874877) (xy 106.078709 109.935978) (xy 106.040204 109.983528)
+ (xy 105.986285 109.9995) (xy 105.821258 109.9995) (xy 105.75216 110.009567) (xy 105.645573 110.061674)
+ (xy 105.639708 110.067539) (xy 105.58519 110.095314) (xy 105.524758 110.08574) (xy 105.499704 110.067536)
+ (xy 105.460323 110.028156) (xy 105.460321 110.028154) (xy 105.329177 109.940541) (xy 105.234321 109.901269)
+ (xy 105.183457 109.88021) (xy 105.156613 109.874877) (xy 105.028764 109.849478) (xy 105.028763 109.849478)
+ (xy 104.989333 109.849489) (xy 104.949903 109.8495) (xy 103.850097 109.8495) (xy 103.771238 109.849478)
+ (xy 103.771232 109.849478) (xy 103.616547 109.880209) (xy 103.616543 109.88021) (xy 103.470822 109.940541)
+ (xy 103.339681 110.028152) (xy 103.228152 110.139681) (xy 103.140541 110.270822) (xy 103.08021 110.416543)
+ (xy 103.080209 110.416547) (xy 103.049478 110.571232) (xy 103.049478 110.571238) (xy 103.0495 110.649501)
+ (xy 103.0495 111.349903) (xy 103.049478 111.428761) (xy 103.049478 111.428767) (xy 103.079383 111.579293)
+ (xy 103.08021 111.583457) (xy 103.095793 111.621095) (xy 103.140541 111.729177) (xy 103.224216 111.854426)
+ (xy 103.228155 111.860322) (xy 103.339678 111.971845) (xy 103.470822 112.059458) (xy 103.616543 112.11979)
+ (xy 103.771237 112.150522) (xy 103.850075 112.1505) (xy 103.850097 112.1505) (xy 104.949903 112.1505)
+ (xy 104.949925 112.1505) (xy 105.028763 112.150522) (xy 105.183457 112.11979) (xy 105.329178 112.059458)
+ (xy 105.460322 111.971845) (xy 105.499705 111.932461) (xy 105.55422 111.904686) (xy 105.614652 111.914257)
+ (xy 105.639707 111.93246) (xy 105.645571 111.938324) (xy 105.75216 111.990433) (xy 105.821258 112.0005)
+ (xy 105.821261 112.0005) (xy 106.378738 112.0005) (xy 106.378742 112.0005) (xy 106.44784 111.990433)
+ (xy 106.554429 111.938324) (xy 106.638324 111.854429) (xy 106.690433 111.74784) (xy 106.7005 111.678742)
+ (xy 106.7005 111.4495) (xy 106.719407 111.391309) (xy 106.768907 111.355345) (xy 106.7995 111.3505)
+ (xy 107.0743 111.3505) (xy 107.132491 111.369407) (xy 107.168455 111.418907) (xy 107.1733 111.4495)
+ (xy 107.1733 111.525475) (xy 107.190997 111.591519) (xy 107.210817 111.665489) (xy 107.283287 111.79101)
+ (xy 107.283289 111.791012) (xy 107.283291 111.791015) (xy 107.385785 111.893509) (xy 107.385787 111.89351)
+ (xy 107.385789 111.893512) (xy 107.511311 111.965982) (xy 107.511312 111.965982) (xy 107.511315 111.965984)
+ (xy 107.651325 112.0035) (xy 107.651326 112.0035) (xy 107.796274 112.0035) (xy 107.796275 112.0035)
+ (xy 107.936285 111.965984) (xy 107.936287 111.965982) (xy 107.936289 111.965982) (xy 108.06181 111.893512)
+ (xy 108.06181 111.893511) (xy 108.061815 111.893509) (xy 108.164309 111.791015) (xy 108.17205 111.777608)
+ (xy 108.236782 111.665489) (xy 108.236782 111.665487) (xy 108.236784 111.665485) (xy 108.2743 111.525475)
+ (xy 108.2743 111.380525) (xy 108.236784 111.240515) (xy 108.236782 111.240512) (xy 108.236782 111.24051)
+ (xy 108.164312 111.114989) (xy 108.16431 111.114987) (xy 108.164309 111.114985) (xy 108.061815 111.012491)
+ (xy 108.061812 111.012489) (xy 108.06181 111.012487) (xy 107.936288 110.940017) (xy 107.936289 110.940017)
+ (xy 107.895207 110.929009) (xy 107.796275 110.9025) (xy 107.796274 110.9025) (xy 107.70999 110.9025)
+ (xy 107.651799 110.883593) (xy 107.639987 110.873504) (xy 107.486014 110.719532) (xy 107.486012 110.71953)
+ (xy 107.406088 110.673386) (xy 107.316944 110.6495) (xy 107.316942 110.6495) (xy 106.7995 110.6495)
+ (xy 106.741309 110.630593) (xy 106.705345 110.581093) (xy 106.7005 110.5505) (xy 106.7005 110.320395)
+ (xy 106.719407 110.262204) (xy 106.768907 110.22624) (xy 106.773857 110.224773) (xy 106.817485 110.213084)
+ (xy 106.817487 110.213082) (xy 106.817489 110.213082) (xy 106.94301 110.140612) (xy 106.94301 110.140611)
+ (xy 106.943015 110.140609) (xy 106.954029 110.129594) (xy 107.008544 110.101819) (xy 107.024031 110.1006)
+ (xy 112.541325 110.1006) (xy 112.541327 110.1006) (xy 112.643188 110.073307) (xy 112.64319 110.073305)
+ (xy 112.643192 110.073305) (xy 112.734508 110.020583) (xy 112.734508 110.020582) (xy 112.734513 110.02058)
+ (xy 120.645097 102.109996) (xy 120.699614 102.082219) (xy 120.715101 102.081) (xy 123.470852 102.081)
+ (xy 123.529043 102.099907) (xy 123.565007 102.149407) (xy 123.566478 102.205624) (xy 123.5627 102.219722)
+ (xy 123.5627 102.364674) (xy 123.600216 102.504686) (xy 123.664246 102.615588) (xy 123.676967 102.675436)
+ (xy 123.65208 102.731332) (xy 123.648513 102.735092) (xy 121.613101 104.770504) (xy 121.558584 104.798281)
+ (xy 121.543098 104.7995) (xy 121.453057 104.7995) (xy 121.453048 104.799501) (xy 121.382495 104.809778)
+ (xy 121.382485 104.809781) (xy 121.273656 104.862985) (xy 121.187987 104.948654) (xy 121.157809 105.010385)
+ (xy 121.13478 105.057491) (xy 121.129649 105.092714) (xy 121.1245 105.128054) (xy 121.1245 105.571943)
+ (xy 121.124501 105.571951) (xy 121.134778 105.642504) (xy 121.134781 105.642514) (xy 121.18944 105.754318)
+ (xy 121.1995 105.797799) (xy 121.1995 110.893099) (xy 121.180593 110.95129) (xy 121.170504 110.963103)
+ (xy 119.013102 113.120504) (xy 118.958585 113.148281) (xy 118.943098 113.1495) (xy 117.305968 113.1495)
+ (xy 117.30596 113.149501) (xy 117.19452 113.164171) (xy 117.13436 113.15302) (xy 117.092243 113.108637)
+ (xy 117.0826 113.066018) (xy 117.0826 109.124799) (xy 117.101507 109.066608) (xy 117.111585 109.054807)
+ (xy 117.286898 108.879493) (xy 117.341413 108.851718) (xy 117.3569 108.850499) (xy 118.994032 108.850499)
+ (xy 118.994034 108.850499) (xy 119.110457 108.835173) (xy 119.25532 108.775169) (xy 119.379716 108.679716)
+ (xy 119.475169 108.55532) (xy 119.535173 108.410457) (xy 119.5505 108.294035) (xy 119.550499 106.605966)
+ (xy 119.535173 106.489543) (xy 119.475169 106.34468) (xy 119.379716 106.220284) (xy 119.379711 106.22028)
+ (xy 119.37971 106.220279) (xy 119.365386 106.209288) (xy 119.33073 106.158864) (xy 119.332331 106.097699)
+ (xy 119.355647 106.060744) (xy 121.586896 103.829494) (xy 121.641413 103.801718) (xy 121.6569 103.800499)
+ (xy 121.746943 103.800499) (xy 121.746948 103.800499) (xy 121.79568 103.7934) (xy 121.817504 103.790221)
+ (xy 121.817505 103.79022) (xy 121.817509 103.79022) (xy 121.817511 103.790218) (xy 121.817514 103.790218)
+ (xy 121.926343 103.737014) (xy 121.926343 103.737013) (xy 121.926347 103.737012) (xy 122.012012 103.651347)
+ (xy 122.06522 103.542509) (xy 122.0755 103.471949) (xy 122.075499 103.028052) (xy 122.067115 102.9705)
+ (xy 122.065221 102.957495) (xy 122.065218 102.957485) (xy 122.012014 102.848656) (xy 122.012012 102.848654)
+ (xy 122.012012 102.848653) (xy 121.926347 102.762988) (xy 121.817509 102.70978) (xy 121.746949 102.6995)
+ (xy 121.746945 102.6995) (xy 121.453056 102.6995) (xy 121.453048 102.699501) (xy 121.382495 102.709778)
+ (xy 121.382485 102.709781) (xy 121.273656 102.762985) (xy 121.187987 102.848654) (xy 121.182895 102.85907)
+ (xy 121.13478 102.957491) (xy 121.124501 103.028048) (xy 121.1245 103.028054) (xy 121.1245 103.118098)
+ (xy 121.105593 103.176289) (xy 121.095504 103.188102) (xy 118.263101 106.020504) (xy 118.208584 106.048281)
+ (xy 118.193097 106.0495) (xy 117.305968 106.0495) (xy 117.305962 106.049501) (xy 117.189544 106.064826)
+ (xy 117.189543 106.064827) (xy 117.044682 106.124829) (xy 116.920286 106.220282) (xy 116.920282 106.220286)
+ (xy 116.824829 106.344682) (xy 116.764828 106.489538) (xy 116.764826 106.489546) (xy 116.7495 106.605963)
+ (xy 116.7495 108.243099) (xy 116.730593 108.30129) (xy 116.720504 108.313102) (xy 116.36162 108.671986)
+ (xy 116.361616 108.671991) (xy 116.308894 108.763307) (xy 116.303272 108.784291) (xy 116.285742 108.849713)
+ (xy 116.2816 108.865173) (xy 116.2816 115.630373) (xy 116.2816 115.735827) (xy 116.300452 115.806185)
+ (xy 116.308894 115.837692) (xy 116.361616 115.929008) (xy 116.361618 115.92901) (xy 116.36162 115.929013)
+ (xy 118.353087 117.92048) (xy 118.353089 117.920481) (xy 118.353091 117.920483) (xy 118.444408 117.973205)
+ (xy 118.444406 117.973205) (xy 118.44441 117.973206) (xy 118.444412 117.973207) (xy 118.546273 118.0005)
+ (xy 121.5931 118.0005) (xy 121.651291 118.019407) (xy 121.663103 118.029496) (xy 121.704503 118.070895)
+ (xy 121.711658 118.07805) (xy 121.824696 118.135646) (xy 121.918481 118.1505) (xy 123.156518 118.150499)
+ (xy 123.156521 118.150499) (xy 123.156522 118.150498) (xy 123.217135 118.140899) (xy 123.250299 118.135647)
+ (xy 123.250299 118.135646) (xy 123.250304 118.135646) (xy 123.363342 118.07805) (xy 123.370498 118.070893)
+ (xy 123.425013 118.043118) (xy 123.485445 118.052689) (xy 123.52871 118.095954) (xy 123.5395 118.140899)
+ (xy 123.5395 119.044315) (xy 123.520593 119.102506) (xy 123.510509 119.114312) (xy 123.436924 119.187898)
+ (xy 123.436923 119.187899) (xy 123.380418 119.303482) (xy 123.3695 119.378418) (xy 123.3695 119.821582)
+ (xy 123.380418 119.896518) (xy 123.436924 120.012102) (xy 123.527898 120.103076) (xy 123.643482 120.159582)
+ (xy 123.676101 120.164334) (xy 123.730957 120.191434) (xy 123.759409 120.245602) (xy 123.750587 120.306148)
+ (xy 123.707862 120.349946) (xy 123.661827 120.3613) (xy 112.897989 120.3613) (xy 112.839798 120.342393)
+ (xy 112.827985 120.332304) (xy 108.565656 116.069974) (xy 108.537879 116.015457) (xy 108.546718 115.956492)
+ (xy 108.59022 115.867509) (xy 108.6005 115.796949) (xy 108.600499 115.203052) (xy 108.592465 115.147899)
+ (xy 108.590221 115.132495) (xy 108.590218 115.132485) (xy 108.537014 115.023656) (xy 108.537012 115.023654)
+ (xy 108.537012 115.023653) (xy 108.451347 114.937988) (xy 108.342509 114.88478) (xy 108.271949 114.8745)
+ (xy 108.271945 114.8745) (xy 106.728056 114.8745) (xy 106.728048 114.874501) (xy 106.657495 114.884778)
+ (xy 106.657485 114.884781) (xy 106.548656 114.937985) (xy 106.548651 114.937989) (xy 106.46764 115.019)
+ (xy 106.413123 115.046777) (xy 106.352691 115.037205) (xy 106.309427 114.993941) (xy 106.303483 114.979589)
+ (xy 106.297899 114.962404) (xy 106.297896 114.962399) (xy 106.297895 114.962394) (xy 106.197815 114.765978)
+ (xy 106.068242 114.587635) (xy 105.912365 114.431758) (xy 105.734022 114.302185) (xy 105.734021 114.302184)
+ (xy 105.734019 114.302183) (xy 105.618582 114.243365) (xy 105.537606 114.202105) (xy 105.537602 114.202104)
+ (xy 105.537599 114.202102) (xy 105.327948 114.133984) (xy 105.110225 114.0995) (xy 105.110222 114.0995)
+ (xy 104.889778 114.0995) (xy 104.889775 114.0995) (xy 104.672051 114.133984) (xy 104.4624 114.202102)
+ (xy 104.26598 114.302183) (xy 104.207221 114.344874) (xy 104.087635 114.431758) (xy 103.931758 114.587635)
+ (xy 103.904062 114.625756) (xy 103.802183 114.76598) (xy 103.74689 114.8745) (xy 103.702105 114.962394)
+ (xy 103.702103 114.962397) (xy 103.702101 114.962403) (xy 103.696515 114.979593) (xy 103.660549 115.029092)
+ (xy 103.602357 115.047996) (xy 103.544167 115.029086) (xy 103.532364 115.019005) (xy 103.451347 114.937988)
+ (xy 103.342509 114.88478) (xy 103.271949 114.8745) (xy 103.271946 114.8745) (xy 102.9995 114.8745)
+ (xy 102.941309 114.855593) (xy 102.905345 114.806093) (xy 102.9005 114.7755) (xy 102.9005 114.308701)
+ (xy 102.919407 114.25051) (xy 102.929496 114.238697) (xy 103.255697 113.912496) (xy 103.310214 113.884719)
+ (xy 103.325701 113.8835) (xy 103.341274 113.8835) (xy 103.341275 113.8835) (xy 103.481285 113.845984)
+ (xy 103.481287 113.845982) (xy 103.481289 113.845982) (xy 103.60681 113.773512) (xy 103.60681 113.773511)
+ (xy 103.606815 113.773509) (xy 103.674361 113.705963) (xy 109.6495 113.705963) (xy 109.6495 115.394031)
+ (xy 109.649501 115.394037) (xy 109.664826 115.510455) (xy 109.664827 115.510457) (xy 109.667412 115.516698)
+ (xy 109.724829 115.655317) (xy 109.72483 115.655319) (xy 109.724831 115.65532) (xy 109.820284 115.779716)
+ (xy 109.94468 115.875169) (xy 109.944681 115.875169) (xy 109.944682 115.87517) (xy 110.0491 115.918421)
+ (xy 110.089543 115.935173) (xy 110.205965 115.9505) (xy 111.894034 115.950499) (xy 112.010457 115.935173)
+ (xy 112.15532 115.875169) (xy 112.279716 115.779716) (xy 112.375169 115.65532) (xy 112.435173 115.510457)
+ (xy 112.4505 115.394035) (xy 112.450499 113.705966) (xy 112.435173 113.589543) (xy 112.375169 113.44468)
+ (xy 112.279716 113.320284) (xy 112.15532 113.224831) (xy 112.155319 113.22483) (xy 112.155317 113.224829)
+ (xy 112.010461 113.164828) (xy 112.010453 113.164826) (xy 111.894035 113.1495) (xy 110.205968 113.1495)
+ (xy 110.205962 113.149501) (xy 110.089544 113.164826) (xy 110.089543 113.164827) (xy 109.944682 113.224829)
+ (xy 109.820286 113.320282) (xy 109.820282 113.320286) (xy 109.724829 113.444682) (xy 109.664828 113.589538)
+ (xy 109.664826 113.589546) (xy 109.6495 113.705963) (xy 103.674361 113.705963) (xy 103.709309 113.671015)
+ (xy 103.781784 113.545485) (xy 103.8193 113.405475) (xy 103.8193 113.260525) (xy 103.781784 113.120515)
+ (xy 103.781782 113.120512) (xy 103.781782 113.12051) (xy 103.709312 112.994989) (xy 103.70931 112.994987)
+ (xy 103.709309 112.994985) (xy 103.606815 112.892491) (xy 103.606812 112.892489) (xy 103.60681 112.892487)
+ (xy 103.481288 112.820017) (xy 103.481289 112.820017) (xy 103.451696 112.812087) (xy 103.341275 112.7825)
+ (xy 103.196325 112.7825) (xy 103.172463 112.788894) (xy 103.05631 112.820017) (xy 102.930789 112.892487)
+ (xy 102.828287 112.994989) (xy 102.755817 113.12051) (xy 102.7183 113.260525) (xy 102.7183 113.276099)
+ (xy 102.699393 113.33429) (xy 102.689304 113.346103) (xy 102.179516 113.855891) (xy 102.126793 113.947211)
+ (xy 102.126792 113.947211) (xy 102.126793 113.947212) (xy 102.0995 114.049073) (xy 102.0995 114.7755)
+ (xy 102.080593 114.833691) (xy 102.031093 114.869655) (xy 102.0005 114.8745) (xy 101.728056 114.8745)
+ (xy 101.728048 114.874501) (xy 101.657495 114.884778) (xy 101.657485 114.884781) (xy 101.548656 114.937985)
+ (xy 101.462987 115.023654) (xy 101.436977 115.076858) (xy 101.40978 115.132491) (xy 101.399501 115.203048)
+ (xy 101.3995 115.203054) (xy 101.3995 115.796943) (xy 101.399501 115.796951) (xy 101.409778 115.867504)
+ (xy 101.409781 115.867514) (xy 101.462985 115.976343) (xy 101.462987 115.976345) (xy 101.462988 115.976347)
+ (xy 101.548653 116.062012) (xy 101.657491 116.11522) (xy 101.728051 116.1255) (xy 103.271948 116.125499)
+ (xy 103.319542 116.118565) (xy 103.342504 116.115221) (xy 103.342505 116.11522) (xy 103.342509 116.11522)
+ (xy 103.342511 116.115218) (xy 103.342514 116.115218) (xy 103.451343 116.062014) (xy 103.451343 116.062013)
+ (xy 103.451347 116.062012) (xy 103.53236 115.980998) (xy 103.586874 115.953222) (xy 103.647307 115.962793)
+ (xy 103.690571 116.006057) (xy 103.696516 116.020407) (xy 103.699796 116.0305) (xy 103.702105 116.037606)
+ (xy 103.74689 116.1255) (xy 103.799074 116.227918) (xy 103.802185 116.234022) (xy 103.931758 116.412365)
+ (xy 104.087635 116.568242) (xy 104.265978 116.697815) (xy 104.462394 116.797895) (xy 104.672049 116.866015)
+ (xy 104.75914 116.879809) (xy 104.889775 116.9005) (xy 104.889778 116.9005) (xy 105.110225 116.9005)
+ (xy 105.219086 116.883257) (xy 105.327951 116.866015) (xy 105.537606 116.797895) (xy 105.734022 116.697815)
+ (xy 105.912365 116.568242) (xy 106.068242 116.412365) (xy 106.197815 116.234022) (xy 106.297895 116.037606)
+ (xy 106.303482 116.020411) (xy 106.339446 115.970911) (xy 106.397636 115.952003) (xy 106.455827 115.97091)
+ (xy 106.467634 115.980993) (xy 106.548653 116.062012) (xy 106.657491 116.11522) (xy 106.728051 116.1255)
+ (xy 107.588809 116.125499) (xy 107.647 116.144406) (xy 107.658813 116.154495) (xy 112.431331 120.927012)
+ (xy 112.43133 120.927012) (xy 112.496587 120.992268) (xy 112.496589 120.99227) (xy 112.545502 121.02051)
+ (xy 112.576512 121.038414) (xy 112.665656 121.0623) (xy 112.665658 121.0623) (xy 124.756042 121.0623)
+ (xy 124.756044 121.0623) (xy 124.845188 121.038414) (xy 124.925112 120.99227) (xy 129.329069 116.588312)
+ (xy 129.375214 116.508388) (xy 129.381186 116.4861) (xy 129.381865 116.483568) (xy 129.388257 116.45971)
+ (xy 129.3991 116.419244) (xy 129.3991 110.817088) (xy 129.418007 110.758897) (xy 129.42809 110.74709)
+ (xy 130.416987 109.758192) (xy 130.443774 109.744544) (xy 130.470319 109.730611) (xy 130.470942 109.730702)
+ (xy 130.471504 109.730416) (xy 130.50118 109.735116) (xy 130.530863 109.739449) (xy 130.531313 109.739888)
+ (xy 130.531936 109.739987) (xy 130.553194 109.761245) (xy 130.574649 109.782186) (xy 130.574754 109.782805)
+ (xy 130.575201 109.783252) (xy 130.584953 109.842497) (xy 130.584505 109.845566) (xy 130.55739 109.900415)
+ (xy 130.556547 109.901269) (xy 130.246332 110.211485) (xy 130.24633 110.211487) (xy 130.24633 110.211488)
+ (xy 130.200186 110.291412) (xy 130.176742 110.378909) (xy 130.1763 110.380557) (xy 130.1763 120.3455)
+ (xy 130.157393 120.403691) (xy 130.107893 120.439655) (xy 130.0773 120.4445) (xy 130.049725 120.4445)
+ (xy 129.98799 120.461041) (xy 129.90971 120.482017) (xy 129.784189 120.554487) (xy 129.681687 120.656989)
+ (xy 129.609217 120.78251) (xy 129.5717 120.922525) (xy 129.5717 121.067474) (xy 129.609217 121.207489)
+ (xy 129.681687 121.33301) (xy 129.681689 121.333012) (xy 129.681691 121.333015) (xy 129.784185 121.435509)
+ (xy 129.784187 121.43551) (xy 129.784189 121.435512) (xy 129.909711 121.507982) (xy 129.909712 121.507982)
+ (xy 129.909715 121.507984) (xy 129.909717 121.507984) (xy 129.912252 121.509035) (xy 129.91375 121.510314)
+ (xy 129.915334 121.511229) (xy 129.915164 121.511522) (xy 129.958779 121.54877) (xy 129.973064 121.608264)
+ (xy 129.949651 121.664793) (xy 129.897483 121.696764) (xy 129.874369 121.6995) (xy 102.00355 121.6995)
+ (xy 101.996485 121.699248) (xy 101.917222 121.693577) (xy 101.765201 121.6827) (xy 101.751222 121.68069)
+ (xy 101.716895 121.673222) (xy 101.528126 121.632154) (xy 101.514574 121.628175) (xy 101.300644 121.548381)
+ (xy 101.287796 121.542513) (xy 101.22049 121.505761) (xy 101.087402 121.433087) (xy 101.075527 121.425456)
+ (xy 100.892749 121.288629) (xy 100.882074 121.27938) (xy 100.720619 121.117925) (xy 100.71137 121.10725)
+ (xy 100.659839 121.038413) (xy 100.574541 120.924468) (xy 100.566914 120.912601) (xy 100.457484 120.7122)
+ (xy 100.451618 120.699355) (xy 100.446508 120.685656) (xy 100.371824 120.485425) (xy 100.367845 120.471873)
+ (xy 100.355567 120.415437) (xy 100.319307 120.248765) (xy 100.317299 120.234808) (xy 100.300752 120.003514)
+ (xy 100.3005 119.99645) (xy 100.3005 112.342523) (xy 100.319407 112.284332) (xy 100.367351 112.248889)
+ (xy 100.524195 112.195045) (xy 100.713744 112.092466) (xy 100.883823 111.960088) (xy 101.029794 111.801521)
+ (xy 101.147675 111.621091) (xy 101.234251 111.423719) (xy 101.287159 111.214789) (xy 101.304957 111)
+ (xy 101.287159 110.785211) (xy 101.234251 110.576281) (xy 101.147675 110.378909) (xy 101.143596 110.372665)
+ (xy 101.029797 110.198483) (xy 101.029795 110.198481) (xy 101.029794 110.198479) (xy 100.883823 110.039912)
+ (xy 100.831902 109.9995) (xy 100.713747 109.907536) (xy 100.713744 109.907534) (xy 100.524199 109.804957)
+ (xy 100.524198 109.804956) (xy 100.524195 109.804955) (xy 100.396873 109.761245) (xy 100.367354 109.751111)
+ (xy 100.318456 109.714333) (xy 100.3005 109.657475) (xy 100.3005 102.003549) (xy 100.300752 101.996485)
+ (xy 100.307875 101.896923) (xy 100.317299 101.765189) (xy 100.319306 101.751236) (xy 100.367846 101.528121)
+ (xy 100.371824 101.514574) (xy 100.383784 101.482509) (xy 100.451621 101.300635) (xy 100.457481 101.287805)
+ (xy 100.566918 101.087391) (xy 100.574536 101.075537) (xy 100.711377 100.89274) (xy 100.720612 100.882081)
+ (xy 100.882081 100.720612) (xy 100.89274 100.711377) (xy 101.075537 100.574536) (xy 101.087391 100.566918)
+ (xy 101.287805 100.457481) (xy 101.300635 100.451621) (xy 101.514577 100.371822) (xy 101.528121 100.367846)
+ (xy 101.751236 100.319306) (xy 101.765189 100.317299) (xy 101.976514 100.30218) (xy 101.996486 100.300752)
+ (xy 102.00355 100.3005) (xy 155.706767 100.3005)
+ )
+ )
+ (filled_polygon
+ (layer "F.Cu")
+ (pts
+ (xy 134.344945 102.806975) (xy 134.37 102.825178) (xy 134.447898 102.903076) (xy 134.563482 102.959582)
+ (xy 134.638418 102.9705) (xy 134.638421 102.9705) (xy 134.981578 102.9705) (xy 134.981582 102.9705)
+ (xy 135.056518 102.959582) (xy 135.172102 102.903076) (xy 135.245683 102.829494) (xy 135.252798 102.825869)
+ (xy 135.257494 102.819407) (xy 135.279542 102.812243) (xy 135.300198 102.801719) (xy 135.315685 102.8005)
+ (xy 135.380599 102.8005) (xy 135.43879 102.819407) (xy 135.450603 102.829496) (xy 136.254004 103.632897)
+ (xy 136.281781 103.687414) (xy 136.283 103.702901) (xy 136.283 106.319073) (xy 136.283 106.424527)
+ (xy 136.30707 106.514359) (xy 136.310294 106.526392) (xy 136.363016 106.617708) (xy 136.363017 106.617709)
+ (xy 136.363018 106.61771) (xy 136.36302 106.617713) (xy 136.633562 106.888255) (xy 136.88115 107.135843)
+ (xy 136.908927 107.19036) (xy 136.899356 107.250792) (xy 136.866147 107.288163) (xy 136.8194 107.319397)
+ (xy 136.819397 107.3194) (xy 136.764035 107.402257) (xy 136.764033 107.402263) (xy 136.749501 107.475315)
+ (xy 136.7495 107.475327) (xy 136.7495 108.274672) (xy 136.749501 108.274684) (xy 136.764033 108.347736)
+ (xy 136.764035 108.347742) (xy 136.819397 108.430599) (xy 136.8194 108.430602) (xy 136.868653 108.463511)
+ (xy 136.90226 108.485966) (xy 136.957635 108.496981) (xy 136.975315 108.500498) (xy 136.97532 108.500498)
+ (xy 136.975326 108.5005) (xy 137.0005 108.5005) (xy 137.058691 108.519407) (xy 137.094655 108.568907)
+ (xy 137.0995 108.5995) (xy 137.0995 109.773098) (xy 137.080593 109.831289) (xy 137.070504 109.843102)
+ (xy 134.993101 111.920504) (xy 134.938584 111.948281) (xy 134.923098 111.9495) (xy 134.799263 111.9495)
+ (xy 134.707825 111.963983) (xy 134.707821 111.963984) (xy 134.59761 112.02014) (xy 134.567245 112.050505)
+ (xy 134.512728 112.078281) (xy 134.497242 112.0795) (xy 134.102758 112.0795) (xy 134.044567 112.060593)
+ (xy 134.032755 112.050505) (xy 134.002391 112.020141) (xy 133.892175 111.963983) (xy 133.892176 111.963983)
+ (xy 133.800737 111.9495) (xy 133.800735 111.9495) (xy 133.676899 111.9495) (xy 133.618708 111.930593)
+ (xy 133.606895 111.920503) (xy 133.471258 111.784866) (xy 133.318413 111.63202) (xy 133.318408 111.632016)
+ (xy 133.227091 111.579294) (xy 133.227093 111.579294) (xy 133.18757 111.568704) (xy 133.125227 111.552)
+ (xy 133.125225 111.552) (xy 132.556268 111.552) (xy 132.512788 111.541941) (xy 132.479106 111.525475)
+ (xy 132.451393 111.511927) (xy 132.38326 111.502) (xy 130.9763 111.502) (xy 130.961388 111.497155)
+ (xy 130.945707 111.497155) (xy 130.933021 111.487938) (xy 130.918109 111.483093) (xy 130.908892 111.470407)
+ (xy 130.896207 111.461191) (xy 130.891361 111.446278) (xy 130.882145 111.433593) (xy 130.8773 111.403)
+ (xy 130.8773 111.232) (xy 130.896207 111.173809) (xy 130.945707 111.137845) (xy 130.9763 111.133)
+ (xy 132.383257 111.133) (xy 132.38326 111.133) (xy 132.451393 111.123073) (xy 132.556483 111.071698)
+ (xy 132.639198 110.988983) (xy 132.690573 110.883893) (xy 132.7005 110.81576) (xy 132.7005 110.54924)
+ (xy 132.690573 110.481107) (xy 132.69027 110.480488) (xy 132.679302 110.458052) (xy 132.667111 110.433115)
+ (xy 132.65854 110.372536) (xy 132.686047 110.319634) (xy 133.319163 109.686519) (xy 133.546187 109.459496)
+ (xy 133.600703 109.431719) (xy 133.61619 109.4305) (xy 133.821578 109.4305) (xy 133.821582 109.4305)
+ (xy 133.896518 109.419582) (xy 134.012102 109.363076) (xy 134.085683 109.289494) (xy 134.140198 109.261719)
+ (xy 134.155685 109.2605) (xy 134.477242 109.2605) (xy 134.535433 109.279407) (xy 134.547245 109.289496)
+ (xy 134.579365 109.321615) (xy 134.597609 109.339859) (xy 134.707825 109.396017) (xy 134.799265 109.4105)
+ (xy 135.200734 109.410499) (xy 135.200737 109.410499) (xy 135.227332 109.406286) (xy 135.292175 109.396017)
+ (xy 135.402391 109.339859) (xy 135.489859 109.252391) (xy 135.546017 109.142175) (xy 135.5605 109.050735)
+ (xy 135.560499 108.709266) (xy 135.560499 108.709262) (xy 135.554595 108.671986) (xy 135.546017 108.617825)
+ (xy 135.489859 108.507609) (xy 135.402391 108.420141) (xy 135.292175 108.363983) (xy 135.292176 108.363983)
+ (xy 135.200736 108.3495) (xy 134.799262 108.3495) (xy 134.707825 108.363983) (xy 134.707821 108.363984)
+ (xy 134.59761 108.42014) (xy 134.510139 108.507611) (xy 134.505561 108.513913) (xy 134.503947 108.51274)
+ (xy 134.467979 108.548709) (xy 134.423034 108.5595) (xy 134.155685 108.5595) (xy 134.097494 108.540593)
+ (xy 134.085687 108.530509) (xy 134.012102 108.456924) (xy 133.896518 108.400418) (xy 133.821582 108.3895)
+ (xy 133.378418 108.3895) (xy 133.303482 108.400418) (xy 133.241741 108.430602) (xy 133.23048 108.436107)
+ (xy 133.169898 108.444678) (xy 133.115848 108.416002) (xy 133.088976 108.361034) (xy 133.088 108.347166)
+ (xy 133.088 106.95869) (xy 133.106907 106.900499) (xy 133.116996 106.888686) (xy 133.546186 106.459496)
+ (xy 133.600703 106.431719) (xy 133.61619 106.4305) (xy 133.821578 106.4305) (xy 133.821582 106.4305)
+ (xy 133.896518 106.419582) (xy 134.012102 106.363076) (xy 134.085683 106.289494) (xy 134.140198 106.261719)
+ (xy 134.155685 106.2605) (xy 134.477242 106.2605) (xy 134.535433 106.279407) (xy 134.547245 106.289496)
+ (xy 134.576823 106.319073) (xy 134.597609 106.339859) (xy 134.707825 106.396017) (xy 134.799265 106.4105)
+ (xy 135.200734 106.410499) (xy 135.200737 106.410499) (xy 135.227332 106.406286) (xy 135.292175 106.396017)
+ (xy 135.402391 106.339859) (xy 135.489859 106.252391) (xy 135.546017 106.142175) (xy 135.5605 106.050735)
+ (xy 135.560499 105.709266) (xy 135.560499 105.709262) (xy 135.549926 105.642508) (xy 135.546017 105.617825)
+ (xy 135.489859 105.507609) (xy 135.402391 105.420141) (xy 135.292175 105.363983) (xy 135.292176 105.363983)
+ (xy 135.200736 105.3495) (xy 134.799262 105.3495) (xy 134.707825 105.363983) (xy 134.707821 105.363984)
+ (xy 134.59761 105.42014) (xy 134.510139 105.507611) (xy 134.505561 105.513913) (xy 134.503947 105.51274)
+ (xy 134.467979 105.548709) (xy 134.423034 105.5595) (xy 134.155685 105.5595) (xy 134.097494 105.540593)
+ (xy 134.085687 105.530509) (xy 134.012102 105.456924) (xy 133.896518 105.400418) (xy 133.821582 105.3895)
+ (xy 133.378418 105.3895) (xy 133.303482 105.400418) (xy 133.187899 105.456923) (xy 133.096923 105.547899)
+ (xy 133.052101 105.639585) (xy 133.040418 105.663482) (xy 133.033701 105.709589) (xy 133.0295 105.738421)
+ (xy 133.0295 105.94381) (xy 133.010593 106.002001) (xy 133.000503 106.013814) (xy 132.589358 106.424958)
+ (xy 132.534842 106.452735) (xy 132.475876 106.443895) (xy 132.451396 106.431928) (xy 132.451394 106.431927)
+ (xy 132.451393 106.431927) (xy 132.38326 106.422) (xy 130.89174 106.422) (xy 130.857673 106.426963)
+ (xy 130.823604 106.431927) (xy 130.718518 106.483301) (xy 130.635801 106.566018) (xy 130.584427 106.671104)
+ (xy 130.584427 106.671107) (xy 130.5745 106.73924) (xy 130.5745 107.00576) (xy 130.578573 107.033712)
+ (xy 130.584427 107.073895) (xy 130.619931 107.14652) (xy 130.628502 107.207102) (xy 130.619931 107.23348)
+ (xy 130.584427 107.306104) (xy 130.58249 107.319399) (xy 130.5745 107.37424) (xy 130.5745 107.64076)
+ (xy 130.579247 107.673338) (xy 130.584427 107.708895) (xy 130.619931 107.78152) (xy 130.628502 107.842102)
+ (xy 130.619931 107.86848) (xy 130.584427 107.941104) (xy 130.581624 107.960346) (xy 130.5745 108.00924)
+ (xy 130.5745 108.27576) (xy 130.575716 108.284106) (xy 130.584427 108.343895) (xy 130.619931 108.41652)
+ (xy 130.621703 108.429052) (xy 130.62796 108.440054) (xy 130.62574 108.457584) (xy 130.628502 108.477102)
+ (xy 130.621164 108.500861) (xy 130.620552 108.502211) (xy 130.584427 108.576107) (xy 130.583175 108.584697)
+ (xy 130.577399 108.597445) (xy 130.565734 108.610229) (xy 130.558062 108.625744) (xy 130.557229 108.626588)
+ (xy 128.768128 110.41569) (xy 128.7294 110.48277) (xy 128.722929 110.493978) (xy 128.721986 110.495612)
+ (xy 128.699082 110.581093) (xy 128.6981 110.584757) (xy 128.6981 116.18691) (xy 128.679193 116.245101)
+ (xy 128.669104 116.256914) (xy 124.593714 120.332304) (xy 124.539197 120.360081) (xy 124.52371 120.3613)
+ (xy 124.118173 120.3613) (xy 124.059982 120.342393) (xy 124.024018 120.292893) (xy 124.024018 120.231707)
+ (xy 124.059982 120.182207) (xy 124.103898 120.164334) (xy 124.136518 120.159582) (xy 124.252102 120.103076)
+ (xy 124.343076 120.012102) (xy 124.399582 119.896518) (xy 124.4105 119.821582) (xy 124.4105 119.378418)
+ (xy 124.399582 119.303482) (xy 124.343076 119.187898) (xy 124.269494 119.114316) (xy 124.241719 119.059802)
+ (xy 124.2405 119.044315) (xy 124.2405 117.0995) (xy 124.259407 117.041309) (xy 124.308907 117.005345)
+ (xy 124.3395 117.0005) (xy 124.637342 117.0005) (xy 124.637344 117.0005) (xy 124.726488 116.976614)
+ (xy 124.806412 116.93047) (xy 125.27717 116.459712) (xy 125.323314 116.379788) (xy 125.324679 116.374695)
+ (xy 125.338428 116.323385) (xy 125.344827 116.2995) (xy 125.3472 116.290644) (xy 125.3472 115.628206)
+ (xy 125.366107 115.570015) (xy 125.415607 115.534051) (xy 125.476793 115.534051) (xy 125.48968 115.539265)
+ (xy 125.548607 115.568073) (xy 125.61674 115.578) (xy 125.616743 115.578) (xy 127.108257 115.578)
+ (xy 127.10826 115.578) (xy 127.176393 115.568073) (xy 127.281483 115.516698) (xy 127.364198 115.433983)
+ (xy 127.415573 115.328893) (xy 127.4255 115.26076) (xy 127.4255 114.99424) (xy 127.415573 114.926107)
+ (xy 127.380067 114.853479) (xy 127.371497 114.792899) (xy 127.380068 114.76652) (xy 127.415573 114.693893)
+ (xy 127.4255 114.62576) (xy 127.4255 114.35924) (xy 127.415573 114.291107) (xy 127.380067 114.218479)
+ (xy 127.371497 114.157899) (xy 127.380068 114.13152) (xy 127.415573 114.058893) (xy 127.4255 113.99076)
+ (xy 127.4255 113.72424) (xy 127.415573 113.656107) (xy 127.380067 113.583479) (xy 127.371497 113.522899)
+ (xy 127.380068 113.49652) (xy 127.415573 113.423893) (xy 127.4255 113.35576) (xy 127.4255 113.08924)
+ (xy 127.415573 113.021107) (xy 127.380067 112.948479) (xy 127.371497 112.887899) (xy 127.380068 112.86152)
+ (xy 127.415573 112.788893) (xy 127.4255 112.72076) (xy 127.4255 112.45424) (xy 127.415573 112.386107)
+ (xy 127.380067 112.313479) (xy 127.371497 112.252899) (xy 127.380068 112.22652) (xy 127.415573 112.153893)
+ (xy 127.4255 112.08576) (xy 127.4255 111.81924) (xy 127.415573 111.751107) (xy 127.380067 111.678479)
+ (xy 127.371497 111.617899) (xy 127.380068 111.59152) (xy 127.415573 111.518893) (xy 127.4255 111.45076)
+ (xy 127.4255 111.18424) (xy 127.415573 111.116107) (xy 127.380067 111.043479) (xy 127.371497 110.982899)
+ (xy 127.380068 110.95652) (xy 127.415573 110.883893) (xy 127.4255 110.81576) (xy 127.4255 110.54924)
+ (xy 127.415573 110.481107) (xy 127.380067 110.408479) (xy 127.371497 110.347899) (xy 127.380068 110.32152)
+ (xy 127.415573 110.248893) (xy 127.4255 110.18076) (xy 127.4255 109.91424) (xy 127.415573 109.846107)
+ (xy 127.380067 109.773479) (xy 127.371497 109.712899) (xy 127.380068 109.68652) (xy 127.415573 109.613893)
+ (xy 127.4255 109.54576) (xy 127.4255 109.27924) (xy 127.415573 109.211107) (xy 127.380067 109.138479)
+ (xy 127.371497 109.077899) (xy 127.380068 109.05152) (xy 127.415573 108.978893) (xy 127.4255 108.91076)
+ (xy 127.4255 108.64424) (xy 127.415573 108.576107) (xy 127.380067 108.503479) (xy 127.371497 108.442899)
+ (xy 127.380068 108.41652) (xy 127.415573 108.343893) (xy 127.4255 108.27576) (xy 127.4255 108.00924)
+ (xy 127.415573 107.941107) (xy 127.380067 107.868479) (xy 127.371497 107.807899) (xy 127.380068 107.78152)
+ (xy 127.415573 107.708893) (xy 127.4255 107.64076) (xy 127.4255 107.37424) (xy 127.415573 107.306107)
+ (xy 127.380067 107.233479) (xy 127.371497 107.172899) (xy 127.380068 107.14652) (xy 127.415573 107.073893)
+ (xy 127.4255 107.00576) (xy 127.4255 106.73924) (xy 127.415573 106.671107) (xy 127.407715 106.655034)
+ (xy 127.367104 106.571962) (xy 127.364198 106.566017) (xy 127.281483 106.483302) (xy 127.264376 106.474939)
+ (xy 127.176395 106.431927) (xy 127.149139 106.427956) (xy 127.10826 106.422) (xy 125.61674 106.422)
+ (xy 125.582673 106.426963) (xy 125.548604 106.431927) (xy 125.443518 106.483301) (xy 125.3608 106.566019)
+ (xy 125.324538 106.640193) (xy 125.305602 106.666715) (xy 123.834028 108.13829) (xy 123.83202 108.141769)
+ (xy 123.78655 108.182709) (xy 123.7257 108.189103) (xy 123.694713 108.175167) (xy 123.694445 108.175675)
+ (xy 123.687883 108.172207) (xy 123.559703 108.127355) (xy 123.559694 108.127353) (xy 123.529274 108.1245)
+ (xy 123.529266 108.1245) (xy 122.870734 108.1245) (xy 122.870725 108.1245) (xy 122.840305 108.127353)
+ (xy 122.840296 108.127355) (xy 122.712116 108.172207) (xy 122.637477 108.227294) (xy 122.57943 108.246636)
+ (xy 122.529189 108.233375) (xy 122.449588 108.187417) (xy 122.449589 108.187417) (xy 122.405767 108.175675)
+ (xy 122.309575 108.1499) (xy 122.164625 108.1499) (xy 122.125122 108.160484) (xy 122.064022 108.157283)
+ (xy 122.016472 108.118778) (xy 122.0005 108.064858) (xy 122.0005 105.797799) (xy 122.010559 105.754319)
+ (xy 122.018331 105.738421) (xy 122.06522 105.642509) (xy 122.0755 105.571949) (xy 122.075499 105.4819)
+ (xy 122.094406 105.42371) (xy 122.104489 105.411902) (xy 124.46691 103.049481) (xy 124.466913 103.04948)
+ (xy 124.54148 102.974913) (xy 124.582955 102.903076) (xy 124.594207 102.883588) (xy 124.598848 102.866265)
+ (xy 124.602068 102.85907) (xy 124.617554 102.841932) (xy 124.630134 102.822562) (xy 124.637674 102.819667)
+ (xy 124.64309 102.813675) (xy 124.665692 102.808912) (xy 124.687256 102.800636) (xy 124.692436 102.8005)
+ (xy 133.284315 102.8005) (xy 133.342506 102.819407) (xy 133.354312 102.82949) (xy 133.427898 102.903076)
+ (xy 133.543482 102.959582) (xy 133.618418 102.9705) (xy 133.618421 102.9705) (xy 133.961578 102.9705)
+ (xy 133.961582 102.9705) (xy 134.036518 102.959582) (xy 134.152102 102.903076) (xy 134.229998 102.825179)
+ (xy 134.284513 102.797404)
+ )
+ )
+ (filled_polygon
+ (layer "F.Cu")
+ (pts
+ (xy 156.219504 103.935897) (xy 157.321804 105.038197) (xy 157.349581 105.092714) (xy 157.3508 105.108201)
+ (xy 157.3508 105.910999) (xy 157.331893 105.96919) (xy 157.321804 105.981002) (xy 157.24782 106.054986)
+ (xy 157.247816 106.054991) (xy 157.195095 106.146306) (xy 157.175273 106.220283) (xy 157.1678 106.248172)
+ (xy 157.1678 106.975761) (xy 157.148893 107.033952) (xy 157.099393 107.069916) (xy 157.038207 107.069916)
+ (xy 157.019495 107.060479) (xy 157.019472 107.060527) (xy 157.007019 107.054439) (xy 156.896518 107.000418)
+ (xy 156.821582 106.9895) (xy 156.378418 106.9895) (xy 156.303482 107.000418) (xy 156.19298 107.054439)
+ (xy 156.132398 107.06301) (xy 156.078348 107.034334) (xy 156.051476 106.979366) (xy 156.0505 106.965498)
+ (xy 156.0505 104.005901) (xy 156.069407 103.94771) (xy 156.118907 103.911746) (xy 156.180093 103.911746)
+ )
+ )
+ )
+ (zone
+ (net 0)
+ (net_name "")
+ (layer "F.Cu")
+ (uuid "676058b9-a184-40f4-a9f5-1e8efd6612e5")
+ (hatch edge 0.5)
+ (connect_pads
+ (clearance 0)
+ )
+ (min_thickness 0.25)
+ (filled_areas_thickness no)
+ (keepout
+ (tracks not_allowed)
+ (vias not_allowed)
+ (pads allowed)
+ (copperpour allowed)
+ (footprints allowed)
+ )
+ (placement
+ (enabled no)
+ (sheetname "")
+ )
+ (fill
+ (thermal_gap 0.5)
+ (thermal_bridge_width 0.5)
+ )
+ (polygon
+ (pts
+ (xy 145.3 103.8) (xy 155.3 103.8) (xy 155.3 113.8) (xy 145.3 113.8)
+ )
+ )
+ )
+ (zone
+ (net 0)
+ (net_name "")
+ (layers "F.Cu" "B.Cu")
+ (uuid "28712f8e-7f51-4b71-b183-d456ba0679eb")
+ (hatch edge 0.5)
+ (connect_pads
+ (clearance 0)
+ )
+ (min_thickness 0.25)
+ (filled_areas_thickness no)
+ (keepout
+ (tracks allowed)
+ (vias not_allowed)
+ (pads allowed)
+ (copperpour allowed)
+ (footprints allowed)
+ )
+ (placement
+ (enabled no)
+ (sheetname "")
+ )
+ (fill
+ (thermal_gap 0.5)
+ (thermal_bridge_width 0.5)
+ )
+ (polygon
+ (pts
+ (xy 140 102.675) (xy 156.65 102.675) (xy 156.65 119.325) (xy 140 119.325)
+ )
+ )
+ )
+ (zone
+ (net 0)
+ (net_name "")
+ (layers "F.Cu" "B.Cu")
+ (uuid "a5fa1c66-beb1-4b2f-8fc8-2342ede04f26")
+ (hatch edge 0.5)
+ (connect_pads
+ (clearance 0)
+ )
+ (min_thickness 0.25)
+ (filled_areas_thickness no)
+ (keepout
+ (tracks not_allowed)
+ (vias not_allowed)
+ (pads allowed)
+ (copperpour allowed)
+ (footprints allowed)
+ )
+ (placement
+ (enabled no)
+ (sheetname "")
+ )
+ (fill
+ (thermal_gap 0.5)
+ (thermal_bridge_width 0.5)
+ )
+ (polygon
+ (pts
+ (xy 103.55 114.05) (xy 106.45 114.05) (xy 106.45 116.95) (xy 103.55 116.95)
+ )
+ )
+ )
+ (zone
+ (net 0)
+ (net_name "")
+ (layers "F.Cu" "B.Cu")
+ (uuid "a68cb0a7-fb4c-4c56-8a61-446eaae9cb00")
+ (hatch edge 0.5)
+ (connect_pads
+ (clearance 0)
+ )
+ (min_thickness 0.25)
+ (filled_areas_thickness no)
+ (keepout
+ (tracks not_allowed)
+ (vias not_allowed)
+ (pads allowed)
+ (copperpour allowed)
+ (footprints allowed)
+ )
+ (placement
+ (enabled no)
+ (sheetname "")
+ )
+ (fill
+ (thermal_gap 0.5)
+ (thermal_bridge_width 0.5)
+ )
+ (polygon
+ (pts
+ (xy 103.55 105.05) (xy 106.45 105.05) (xy 106.45 107.95) (xy 103.55 107.95)
+ )
+ )
+ )
+ (zone
+ (net 0)
+ (net_name "")
+ (layers "F.Cu" "B.Cu")
+ (uuid "abdd2446-b79a-4606-a9ba-cfaf3d53a837")
+ (hatch edge 0.5)
+ (connect_pads
+ (clearance 0)
+ )
+ (min_thickness 0.25)
+ (filled_areas_thickness no)
+ (keepout
+ (tracks allowed)
+ (vias not_allowed)
+ (pads allowed)
+ (copperpour allowed)
+ (footprints allowed)
+ )
+ (placement
+ (enabled no)
+ (sheetname "")
+ )
+ (fill
+ (thermal_gap 0.5)
+ (thermal_bridge_width 0.5)
+ )
+ (polygon
+ (pts
+ (xy 144.8 103.3) (xy 155.8 103.3) (xy 155.8 119.3) (xy 144.8 119.3)
+ )
+ )
+ )
+ (zone
+ (net 0)
+ (net_name "")
+ (layers "F.Cu" "B.Cu")
+ (uuid "b61e9851-6a46-449f-a696-f2304af6e912")
+ (hatch edge 0.5)
+ (connect_pads
+ (clearance 0)
+ )
+ (min_thickness 0.25)
+ (filled_areas_thickness no)
+ (keepout
+ (tracks not_allowed)
+ (vias not_allowed)
+ (pads allowed)
+ (copperpour allowed)
+ (footprints allowed)
+ )
+ (placement
+ (enabled no)
+ (sheetname "")
+ )
+ (fill
+ (thermal_gap 0.5)
+ (thermal_bridge_width 0.5)
+ )
+ (polygon
+ (pts
+ (xy 103.05 109.85) (xy 105.75 109.85) (xy 105.75 112.15) (xy 103.05 112.15)
+ )
+ )
+ )
+ (zone
+ (net 0)
+ (net_name "")
+ (layers "F.Cu" "B.Cu")
+ (uuid "be175b56-7b94-4534-86c4-ef135d7bdd01")
+ (hatch edge 0.5)
+ (connect_pads
+ (clearance 0)
+ )
+ (min_thickness 0.25)
+ (filled_areas_thickness no)
+ (keepout
+ (tracks not_allowed)
+ (vias not_allowed)
+ (pads allowed)
+ (copperpour allowed)
+ (footprints allowed)
+ )
+ (placement
+ (enabled no)
+ (sheetname "")
+ )
+ (fill
+ (thermal_gap 0.5)
+ (thermal_bridge_width 0.5)
+ )
+ (polygon
+ (pts
+ (xy 100 109.1) (xy 102.3 109.1) (xy 102.3 112.9) (xy 100 112.9)
+ )
+ )
+ )
+ (zone
+ (net 0)
+ (net_name "")
+ (layers "F.Cu" "B.Cu")
+ (uuid "ef1a5be7-bc53-49c2-9b35-8b827f513a4a")
+ (hatch edge 0.5)
+ (connect_pads
+ (clearance 0)
+ )
+ (min_thickness 0.25)
+ (filled_areas_thickness no)
+ (keepout
+ (tracks allowed)
+ (vias not_allowed)
+ (pads allowed)
+ (copperpour allowed)
+ (footprints allowed)
+ )
+ (placement
+ (enabled no)
+ (sheetname "")
+ )
+ (fill
+ (thermal_gap 0.5)
+ (thermal_bridge_width 0.5)
+ )
+ (polygon
+ (pts
+ (xy 125.3 102.5) (xy 138.3 102.5) (xy 138.3 120) (xy 125.3 120)
+ )
+ )
+ )
+ (zone
+ (net 0)
+ (net_name "")
+ (layer "B.Cu")
+ (uuid "c809ac5c-3071-4fe3-ba80-0eae45537020")
+ (hatch edge 0.5)
+ (connect_pads
+ (clearance 0)
+ )
+ (min_thickness 0.25)
+ (filled_areas_thickness no)
+ (keepout
+ (tracks not_allowed)
+ (vias not_allowed)
+ (pads allowed)
+ (copperpour allowed)
+ (footprints allowed)
+ )
+ (placement
+ (enabled no)
+ (sheetname "")
+ )
+ (fill
+ (thermal_gap 0.5)
+ (thermal_bridge_width 0.5)
+ )
+ (polygon
+ (pts
+ (xy 125.8 103) (xy 137.8 103) (xy 137.8 115) (xy 125.8 115)
+ )
+ )
+ )
+ (zone
+ (net 9)
+ (net_name "GND")
+ (layer "B.Cu")
+ (uuid "d63e7876-839c-44e4-b5e6-f663d8c3c1df")
+ (hatch edge 0.5)
+ (connect_pads yes
+ (clearance 0.25)
+ )
+ (min_thickness 0.2)
+ (filled_areas_thickness no)
+ (fill yes
+ (thermal_gap 0.25)
+ (thermal_bridge_width 0.3)
+ )
+ (polygon
+ (pts
+ (xy 100.2 100.2) (xy 165.8 100.2) (xy 165.8 121.8) (xy 100.2 121.8)
+ )
+ )
+ (filled_polygon
+ (layer "B.Cu")
+ (pts
+ (xy 155.764958 100.319407) (xy 155.800922 100.368907) (xy 155.800922 100.430093) (xy 155.764958 100.479593)
+ (xy 155.732393 100.495125) (xy 155.605915 100.529016) (xy 155.605913 100.529016) (xy 155.605909 100.529018)
+ (xy 155.480389 100.601487) (xy 155.377887 100.703989) (xy 155.305417 100.82951) (xy 155.2679 100.969525)
+ (xy 155.2679 100.985099) (xy 155.248993 101.04329) (xy 155.238904 101.055103) (xy 154.431303 101.862704)
+ (xy 154.376786 101.890481) (xy 154.361299 101.8917) (xy 124.532231 101.8917) (xy 124.47404 101.872793)
+ (xy 124.462233 101.862709) (xy 124.451215 101.851691) (xy 124.451212 101.851689) (xy 124.45121 101.851687)
+ (xy 124.325688 101.779217) (xy 124.325689 101.779217) (xy 124.273388 101.765203) (xy 124.185675 101.7417)
+ (xy 124.040725 101.7417) (xy 124.005193 101.751221) (xy 123.90071 101.779217) (xy 123.775189 101.851687)
+ (xy 123.672687 101.954189) (xy 123.600217 102.07971) (xy 123.5627 102.219725) (xy 123.5627 102.364674)
+ (xy 123.600217 102.504689) (xy 123.672687 102.63021) (xy 123.672689 102.630212) (xy 123.672691 102.630215)
+ (xy 123.775185 102.732709) (xy 123.775187 102.73271) (xy 123.775189 102.732712) (xy 123.900711 102.805182)
+ (xy 123.900712 102.805182) (xy 123.900715 102.805184) (xy 124.040725 102.8427) (xy 124.040726 102.8427)
+ (xy 124.185674 102.8427) (xy 124.185675 102.8427) (xy 124.325685 102.805184) (xy 124.325687 102.805182)
+ (xy 124.325689 102.805182) (xy 124.45121 102.732712) (xy 124.45121 102.732711) (xy 124.451215 102.732709)
+ (xy 124.462229 102.721694) (xy 124.516744 102.693919) (xy 124.532231 102.6927) (xy 154.620925 102.6927)
+ (xy 154.620927 102.6927) (xy 154.722788 102.665407) (xy 154.72279 102.665405) (xy 154.722792 102.665405)
+ (xy 154.814108 102.612683) (xy 154.814108 102.612682) (xy 154.814113 102.61268) (xy 155.805297 101.621496)
+ (xy 155.859814 101.593719) (xy 155.875301 101.5925) (xy 155.890874 101.5925) (xy 155.890875 101.5925)
+ (xy 156.030885 101.554984) (xy 156.030887 101.554982) (xy 156.030889 101.554982) (xy 156.15641 101.482512)
+ (xy 156.15641 101.482511) (xy 156.156415 101.482509) (xy 156.258909 101.380015) (xy 156.258912 101.38001)
+ (xy 156.331382 101.254489) (xy 156.331382 101.254487) (xy 156.331384 101.254485) (xy 156.3689 101.114475)
+ (xy 156.3689 100.969525) (xy 156.331384 100.829515) (xy 156.331382 100.829512) (xy 156.331382 100.82951)
+ (xy 156.258912 100.703989) (xy 156.25891 100.703987) (xy 156.258909 100.703985) (xy 156.156415 100.601491)
+ (xy 156.156412 100.601489) (xy 156.15641 100.601487) (xy 156.03089 100.529018) (xy 156.030887 100.529017)
+ (xy 156.030885 100.529016) (xy 155.904407 100.495126) (xy 155.853095 100.461802) (xy 155.831169 100.404681)
+ (xy 155.847005 100.34558) (xy 155.894555 100.307075) (xy 155.930033 100.3005) (xy 163.99645 100.3005)
+ (xy 164.003514 100.300752) (xy 164.024934 100.302284) (xy 164.234808 100.317299) (xy 164.248765 100.319307)
+ (xy 164.471873 100.367845) (xy 164.485425 100.371824) (xy 164.699358 100.451619) (xy 164.7122 100.457484)
+ (xy 164.912601 100.566914) (xy 164.924468 100.574541) (xy 165.097385 100.703985) (xy 165.10725 100.71137)
+ (xy 165.117925 100.720619) (xy 165.27938 100.882074) (xy 165.288629 100.892749) (xy 165.425456 101.075527)
+ (xy 165.43309 101.087406) (xy 165.542513 101.287796) (xy 165.548381 101.300644) (xy 165.628175 101.514574)
+ (xy 165.632154 101.528126) (xy 165.68069 101.751221) (xy 165.6827 101.765201) (xy 165.688888 101.851687)
+ (xy 165.699248 101.996484) (xy 165.6995 102.003549) (xy 165.6995 119.99645) (xy 165.699248 120.003515)
+ (xy 165.682701 120.234797) (xy 165.68069 120.248778) (xy 165.632154 120.471873) (xy 165.628175 120.485425)
+ (xy 165.548381 120.699355) (xy 165.542513 120.712203) (xy 165.43309 120.912593) (xy 165.425453 120.924476)
+ (xy 165.288629 121.10725) (xy 165.27938 121.117925) (xy 165.117925 121.27938) (xy 165.10725 121.288629)
+ (xy 164.924476 121.425453) (xy 164.912593 121.43309) (xy 164.712203 121.542513) (xy 164.699355 121.548381)
+ (xy 164.485425 121.628175) (xy 164.471873 121.632154) (xy 164.248778 121.68069) (xy 164.234797 121.682701)
+ (xy 164.003515 121.699248) (xy 163.99645 121.6995) (xy 130.370031 121.6995) (xy 130.31184 121.680593)
+ (xy 130.275876 121.631093) (xy 130.275876 121.569907) (xy 130.31184 121.520407) (xy 130.332148 121.509035)
+ (xy 130.334679 121.507985) (xy 130.334685 121.507984) (xy 130.460215 121.435509) (xy 130.562709 121.333015)
+ (xy 130.562712 121.33301) (xy 130.635182 121.207489) (xy 130.635182 121.207487) (xy 130.635184 121.207485)
+ (xy 130.6727 121.067475) (xy 130.6727 120.922525) (xy 130.635184 120.782515) (xy 130.635182 120.782512)
+ (xy 130.635182 120.78251) (xy 130.562712 120.656989) (xy 130.56271 120.656987) (xy 130.562709 120.656985)
+ (xy 130.460215 120.554491) (xy 130.460212 120.554489) (xy 130.46021 120.554487) (xy 130.334688 120.482017)
+ (xy 130.334689 120.482017) (xy 130.296831 120.471873) (xy 130.194675 120.4445) (xy 130.049725 120.4445)
+ (xy 129.98799 120.461041) (xy 129.90971 120.482017) (xy 129.784189 120.554487) (xy 129.784184 120.554491)
+ (xy 129.723171 120.615504) (xy 129.668654 120.643281) (xy 129.653168 120.6445) (xy 116.47419 120.6445)
+ (xy 116.415999 120.625593) (xy 116.404186 120.615504) (xy 111.919307 116.130625) (xy 138.3832 116.130625)
+ (xy 138.3832 116.275574) (xy 138.420717 116.415589) (xy 138.493187 116.54111) (xy 138.493189 116.541112)
+ (xy 138.493191 116.541115) (xy 138.595685 116.643609) (xy 138.595687 116.64361) (xy 138.595689 116.643612)
+ (xy 138.721211 116.716082) (xy 138.721212 116.716082) (xy 138.721215 116.716084) (xy 138.861225 116.7536)
+ (xy 138.861226 116.7536) (xy 139.006174 116.7536) (xy 139.006175 116.7536) (xy 139.146185 116.716084)
+ (xy 139.146187 116.716082) (xy 139.146189 116.716082) (xy 139.27171 116.643612) (xy 139.27171 116.643611)
+ (xy 139.271715 116.643609) (xy 139.302222 116.613102) (xy 139.332729 116.582596) (xy 139.387246 116.554819)
+ (xy 139.402732 116.5536) (xy 155.481842 116.5536) (xy 155.481844 116.5536) (xy 155.570988 116.529714)
+ (xy 155.581612 116.52358) (xy 155.650912 116.48357) (xy 158.320248 113.814234) (xy 159.4745 113.814234)
+ (xy 159.4745 113.965766) (xy 159.509086 114.094847) (xy 159.51372 114.112139) (xy 159.589481 114.24336)
+ (xy 159.589483 114.243362) (xy 159.589485 114.243365) (xy 159.696635 114.350515) (xy 159.696637 114.350516)
+ (xy 159.696639 114.350518) (xy 159.827861 114.426279) (xy 159.827859 114.426279) (xy 159.827863 114.42628)
+ (xy 159.827865 114.426281) (xy 159.974234 114.4655) (xy 159.974236 114.4655) (xy 160.125764 114.4655)
+ (xy 160.125766 114.4655) (xy 160.272135 114.426281) (xy 160.272137 114.426279) (xy 160.272139 114.426279)
+ (xy 160.40336 114.350518) (xy 160.40336 114.350517) (xy 160.403365 114.350515) (xy 160.510515 114.243365)
+ (xy 160.573666 114.133985) (xy 160.586279 114.112139) (xy 160.586279 114.112137) (xy 160.586281 114.112135)
+ (xy 160.6255 113.965766) (xy 160.6255 113.814234) (xy 160.586281 113.667865) (xy 160.586279 113.667862)
+ (xy 160.586279 113.66786) (xy 160.510518 113.536639) (xy 160.510516 113.536637) (xy 160.510515 113.536635)
+ (xy 160.403365 113.429485) (xy 160.403362 113.429483) (xy 160.40336 113.429481) (xy 160.272138 113.35372)
+ (xy 160.27214 113.35372) (xy 160.215347 113.338503) (xy 160.125766 113.3145) (xy 159.974234 113.3145)
+ (xy 159.884652 113.338503) (xy 159.82786 113.35372) (xy 159.696639 113.429481) (xy 159.589481 113.536639)
+ (xy 159.51372 113.66786) (xy 159.513719 113.667865) (xy 159.4745 113.814234) (xy 158.320248 113.814234)
+ (xy 159.753386 112.381096) (xy 159.807903 112.353319) (xy 159.82339 112.3521) (xy 159.909674 112.3521)
+ (xy 159.909675 112.3521) (xy 160.049685 112.314584) (xy 160.049687 112.314582) (xy 160.049689 112.314582)
+ (xy 160.17521 112.242112) (xy 160.17521 112.242111) (xy 160.175215 112.242109) (xy 160.277709 112.139615)
+ (xy 160.350184 112.014085) (xy 160.3877 111.874075) (xy 160.3877 111.729125) (xy 160.350184 111.589115)
+ (xy 160.350182 111.589112) (xy 160.350182 111.58911) (xy 160.277712 111.463589) (xy 160.27771 111.463587)
+ (xy 160.277709 111.463585) (xy 160.175215 111.361091) (xy 160.175212 111.361089) (xy 160.17521 111.361087)
+ (xy 160.049688 111.288617) (xy 160.049689 111.288617) (xy 160.0043 111.276455) (xy 159.909675 111.2511)
+ (xy 159.764725 111.2511) (xy 159.706271 111.266763) (xy 159.62471 111.288617) (xy 159.499189 111.361087)
+ (xy 159.396687 111.463589) (xy 159.324217 111.58911) (xy 159.2867 111.729125) (xy 159.2867 111.81541)
+ (xy 159.267793 111.873601) (xy 159.257704 111.885414) (xy 155.319514 115.823604) (xy 155.264997 115.851381)
+ (xy 155.24951 115.8526) (xy 139.402732 115.8526) (xy 139.344541 115.833693) (xy 139.332729 115.823604)
+ (xy 139.271715 115.762591) (xy 139.27171 115.762587) (xy 139.146188 115.690117) (xy 139.146189 115.690117)
+ (xy 139.116596 115.682187) (xy 139.006175 115.6526) (xy 138.861225 115.6526) (xy 138.79949 115.669141)
+ (xy 138.72121 115.690117) (xy 138.595689 115.762587) (xy 138.493187 115.865089) (xy 138.420717 115.99061)
+ (xy 138.3832 116.130625) (xy 111.919307 116.130625) (xy 110.488007 114.699325) (xy 138.6563 114.699325)
+ (xy 138.6563 114.844274) (xy 138.693817 114.984289) (xy 138.766287 115.10981) (xy 138.766289 115.109812)
+ (xy 138.766291 115.109815) (xy 138.868785 115.212309) (xy 138.868787 115.21231) (xy 138.868789 115.212312)
+ (xy 138.994311 115.284782) (xy 138.994312 115.284782) (xy 138.994315 115.284784) (xy 139.134325 115.3223)
+ (xy 139.134326 115.3223) (xy 139.279274 115.3223) (xy 139.279275 115.3223) (xy 139.419285 115.284784)
+ (xy 139.419287 115.284782) (xy 139.419289 115.284782) (xy 139.54481 115.212312) (xy 139.54481 115.212311)
+ (xy 139.544815 115.212309) (xy 139.647309 115.109815) (xy 139.719784 114.984285) (xy 139.7573 114.844275)
+ (xy 139.7573 114.75799) (xy 139.776207 114.699799) (xy 139.786296 114.687986) (xy 143.606286 110.867996)
+ (xy 143.660803 110.840219) (xy 143.67629 110.839) (xy 159.379068 110.839) (xy 159.437259 110.857907)
+ (xy 159.449071 110.867996) (xy 159.510084 110.929008) (xy 159.510089 110.929012) (xy 159.635611 111.001482)
+ (xy 159.635612 111.001482) (xy 159.635615 111.001484) (xy 159.775625 111.039) (xy 159.775626 111.039)
+ (xy 159.920574 111.039) (xy 159.920575 111.039) (xy 160.060585 111.001484) (xy 160.060587 111.001482)
+ (xy 160.060589 111.001482) (xy 160.18611 110.929012) (xy 160.18611 110.929011) (xy 160.186115 110.929009)
+ (xy 160.288609 110.826515) (xy 160.361084 110.700985) (xy 160.3986 110.560975) (xy 160.3986 110.416025)
+ (xy 160.361084 110.276015) (xy 160.361082 110.276012) (xy 160.361082 110.27601) (xy 160.288612 110.150489)
+ (xy 160.28861 110.150487) (xy 160.288609 110.150485) (xy 160.186115 110.047991) (xy 160.186112 110.047989)
+ (xy 160.18611 110.047987) (xy 160.060588 109.975517) (xy 160.060589 109.975517) (xy 160.030996 109.967587)
+ (xy 159.920575 109.938) (xy 159.775625 109.938) (xy 159.71389 109.954541) (xy 159.63561 109.975517)
+ (xy 159.510089 110.047987) (xy 159.510084 110.047991) (xy 159.449071 110.109004) (xy 159.394554 110.136781)
+ (xy 159.379068 110.138) (xy 143.443956 110.138) (xy 143.354812 110.161886) (xy 143.274888 110.20803)
+ (xy 139.290614 114.192304) (xy 139.236097 114.220081) (xy 139.22061 114.2213) (xy 139.134325 114.2213)
+ (xy 139.07259 114.237841) (xy 138.99431 114.258817) (xy 138.868789 114.331287) (xy 138.766287 114.433789)
+ (xy 138.693817 114.55931) (xy 138.6563 114.699325) (xy 110.488007 114.699325) (xy 107.912373 112.123691)
+ (xy 107.884596 112.069174) (xy 107.894167 112.008742) (xy 107.932878 111.96795) (xy 107.936281 111.965984)
+ (xy 107.936285 111.965984) (xy 108.061815 111.893509) (xy 108.098906 111.856418) (xy 108.122829 111.832496)
+ (xy 108.177346 111.804719) (xy 108.192832 111.8035) (xy 119.530642 111.8035) (xy 119.530644 111.8035)
+ (xy 119.619788 111.779614) (xy 119.654557 111.75954) (xy 119.699712 111.73347) (xy 122.153285 109.279895)
+ (xy 122.207802 109.252119) (xy 122.223289 109.2509) (xy 122.309574 109.2509) (xy 122.309575 109.2509)
+ (xy 122.449585 109.213384) (xy 122.449587 109.213382) (xy 122.449589 109.213382) (xy 122.57511 109.140912)
+ (xy 122.57511 109.140911) (xy 122.575115 109.140909) (xy 122.677609 109.038415) (xy 122.725588 108.955314)
+ (xy 127.929858 108.955314) (xy 127.929858 109.044686) (xy 127.949307 109.142461) (xy 127.981648 109.22054)
+ (xy 127.982963 109.224214) (xy 127.983507 109.225029) (xy 127.983508 109.22503) (xy 127.983508 109.225031)
+ (xy 128.015574 109.273021) (xy 128.038313 109.307054) (xy 128.038893 109.307921) (xy 128.102089 109.371117)
+ (xy 128.10209 109.371117) (xy 128.104418 109.373445) (xy 128.110197 109.376534) (xy 128.18498 109.426502)
+ (xy 128.184981 109.426502) (xy 128.184982 109.426503) (xy 128.207464 109.435815) (xy 128.267549 109.460703)
+ (xy 128.340282 109.478922) (xy 128.384968 109.483323) (xy 128.41001 109.484553) (xy 128.410027 109.484553)
+ (xy 129.326211 109.484553) (xy 129.326224 109.484553) (xy 129.35127 109.483322) (xy 129.366437 109.481828)
+ (xy 129.366436 109.481827) (xy 129.3774 109.480746) (xy 129.377401 109.480748) (xy 129.395946 109.478922)
+ (xy 129.415046 109.474136) (xy 129.41809 109.473468) (xy 129.418268 109.473416) (xy 129.422153 109.472357)
+ (xy 129.468692 109.4607) (xy 129.481415 109.455428) (xy 129.491354 109.45192) (xy 129.503417 109.448372)
+ (xy 129.504445 109.448084) (xy 129.504585 109.44803) (xy 129.52072 109.439579) (xy 129.528766 109.435815)
+ (xy 129.539851 109.431223) (xy 129.539852 109.431225) (xy 129.551248 109.426505) (xy 129.55126 109.4265)
+ (xy 129.571425 109.413025) (xy 129.592898 109.40178) (xy 129.602497 109.394037) (xy 129.601567 109.392884)
+ (xy 129.626036 109.376534) (xy 129.634144 109.371117) (xy 129.634145 109.371115) (xy 129.634149 109.371113)
+ (xy 129.643898 109.361362) (xy 129.651731 109.354325) (xy 129.662183 109.345894) (xy 129.719348 109.324082)
+ (xy 129.778417 109.340035) (xy 129.816827 109.387662) (xy 129.818551 109.392563) (xy 130.331006 110.981172)
+ (xy 130.331007 110.981174) (xy 130.331011 110.981185) (xy 130.33986 111.004618) (xy 130.342556 111.010819)
+ (xy 130.357743 111.04575) (xy 130.357782 111.045824) (xy 130.397447 111.109445) (xy 130.39745 111.10945)
+ (xy 130.402386 111.115255) (xy 130.406375 111.121751) (xy 130.406377 111.121755) (xy 130.425185 111.142064)
+ (xy 130.426544 111.143662) (xy 130.448308 111.169254) (xy 130.455343 111.177526) (xy 130.459406 111.180743)
+ (xy 130.470588 111.191091) (xy 130.474114 111.194899) (xy 130.5101 111.220994) (xy 130.5101 111.220995)
+ (xy 130.511803 111.22223) (xy 130.533501 111.23941) (xy 130.540287 111.242885) (xy 130.542906 111.244784)
+ (xy 130.546463 111.247364) (xy 130.546466 111.247366) (xy 130.569742 111.25807) (xy 130.573464 111.259879)
+ (xy 130.604302 111.275675) (xy 130.613045 111.280153) (xy 130.61305 111.280155) (xy 130.618028 111.28157)
+ (xy 130.618042 111.281574) (xy 130.625393 111.283663) (xy 130.637038 111.28902) (xy 130.654302 111.293148)
+ (xy 130.654584 111.291963) (xy 130.684298 111.300411) (xy 130.684301 111.300412) (xy 130.708944 111.307419)
+ (xy 130.709004 111.307429) (xy 130.723582 111.309744) (xy 130.723588 111.30972) (xy 130.723861 111.309782)
+ (xy 130.723955 111.309805) (xy 130.723968 111.309808) (xy 130.749625 111.310791) (xy 130.753765 111.311038)
+ (xy 130.780316 111.313185) (xy 130.780316 111.313186) (xy 130.798011 111.314617) (xy 130.798025 111.314618)
+ (xy 130.810775 111.313135) (xy 130.823586 111.313627) (xy 130.841119 111.310833) (xy 130.840927 111.309631)
+ (xy 130.897049 111.303108) (xy 130.897052 111.303106) (xy 130.899351 111.302608) (xy 130.906536 111.300983)
+ (xy 130.906514 111.300891) (xy 130.911834 111.299569) (xy 130.911843 111.299568) (xy 130.935905 111.290665)
+ (xy 130.939855 111.289298) (xy 130.965195 111.281124) (xy 130.965196 111.281125) (xy 130.979714 111.276442)
+ (xy 130.9815 111.275916) (xy 130.982101 111.275673) (xy 130.982101 111.275672) (xy 130.982108 111.275671)
+ (xy 130.98665 111.273139) (xy 131.000488 111.266769) (xy 131.00534 111.264975) (xy 131.020468 111.255685)
+ (xy 131.020467 111.255684) (xy 131.043196 111.241727) (xy 131.043206 111.241721) (xy 131.044974 111.240635)
+ (xy 131.069189 111.227141) (xy 131.074992 111.222205) (xy 131.081488 111.218217) (xy 131.081504 111.218207)
+ (xy 131.100319 111.20078) (xy 131.103442 111.198008) (xy 131.123732 111.180754) (xy 131.123733 111.180755)
+ (xy 131.137258 111.169254) (xy 131.137268 111.169245) (xy 131.145236 111.15918) (xy 131.154645 111.150467)
+ (xy 131.165066 111.136095) (xy 131.16408 111.13538) (xy 131.199151 111.091086) (xy 131.199155 111.091076)
+ (xy 131.199224 111.090972) (xy 131.205195 111.081243) (xy 131.205182 111.081235) (xy 131.207096 111.078139)
+ (xy 131.20951 111.073504) (xy 131.24174 111.011619) (xy 131.251533 110.983293) (xy 131.251532 110.983292)
+ (xy 131.254189 110.975611) (xy 131.256399 110.969222) (xy 131.256409 110.969186) (xy 131.256801 110.968053)
+ (xy 131.256802 110.96805) (xy 131.256807 110.968038) (xy 131.260269 110.958022) (xy 131.260269 110.958017)
+ (xy 131.262705 110.947605) (xy 131.263431 110.94512) (xy 131.459192 110.126477) (xy 131.491113 110.074283)
+ (xy 131.54762 110.050817) (xy 131.574784 110.052406) (xy 131.669331 110.071213) (xy 131.684284 110.072685)
+ (xy 131.719169 110.076122) (xy 131.719176 110.076122) (xy 131.880831 110.076122) (xy 131.912543 110.072998)
+ (xy 131.930669 110.071213) (xy 132.003866 110.056653) (xy 132.064625 110.063845) (xy 132.109555 110.105377)
+ (xy 132.119605 110.131326) (xy 132.244253 110.667313) (xy 132.245897 110.673087) (xy 132.245911 110.673134)
+ (xy 132.251118 110.69141) (xy 132.254127 110.700294) (xy 132.254191 110.700272) (xy 132.254845 110.702415)
+ (xy 132.265513 110.733913) (xy 132.265538 110.733971) (xy 132.269518 110.74173) (xy 132.299752 110.800675)
+ (xy 132.299756 110.80068) (xy 132.299758 110.800684) (xy 132.302352 110.804308) (xy 132.309541 110.815984)
+ (xy 132.311185 110.819122) (xy 132.311568 110.819872) (xy 132.311617 110.819948) (xy 132.311619 110.819951)
+ (xy 132.316915 110.826515) (xy 132.326907 110.838898) (xy 132.330367 110.843449) (xy 132.351761 110.873344)
+ (xy 132.351764 110.873347) (xy 132.351773 110.873358) (xy 132.363841 110.884673) (xy 132.37422 110.897537)
+ (xy 132.3865 110.907787) (xy 132.387374 110.906739) (xy 132.424496 110.941547) (xy 132.43412 110.947539)
+ (xy 132.442817 110.954799) (xy 132.442823 110.954804) (xy 132.46669 110.967818) (xy 132.469097 110.969317)
+ (xy 132.46912 110.96933) (xy 132.486774 110.980322) (xy 132.486774 110.980323) (xy 132.500358 110.988781)
+ (xy 132.50036 110.988782) (xy 132.515833 110.994616) (xy 132.530347 111.00253) (xy 132.545615 111.007301)
+ (xy 132.546022 111.005997) (xy 132.593642 111.023952) (xy 132.598049 111.024682) (xy 132.611391 111.027856)
+ (xy 132.615645 111.029186) (xy 132.615662 111.029191) (xy 132.639917 111.031783) (xy 132.64557 111.032554)
+ (xy 132.681063 111.038437) (xy 132.681763 111.038558) (xy 132.681809 111.038561) (xy 132.681811 111.03856)
+ (xy 132.681818 111.038562) (xy 132.691488 111.03825) (xy 132.705188 111.038759) (xy 132.714789 111.039786)
+ (xy 132.730724 111.03835) (xy 132.730723 111.038349) (xy 132.751405 111.036486) (xy 132.751417 111.036485)
+ (xy 132.754254 111.036229) (xy 132.781458 111.035354) (xy 132.792485 111.032788) (xy 132.799336 111.032172)
+ (xy 132.799337 111.032172) (xy 132.799343 111.032171) (xy 132.803778 111.031772) (xy 132.8038 111.03177)
+ (xy 132.827201 111.024882) (xy 132.832707 111.023434) (xy 132.852904 111.018737) (xy 132.852905 111.018738)
+ (xy 132.868487 111.015115) (xy 132.868498 111.015112) (xy 132.877307 111.011126) (xy 132.890169 111.006351)
+ (xy 132.89267 111.005615) (xy 132.899436 111.003624) (xy 132.913609 110.996199) (xy 132.913608 110.996197)
+ (xy 132.93199 110.986568) (xy 132.932 110.986563) (xy 132.934516 110.985244) (xy 132.959327 110.974021)
+ (xy 132.968543 110.967424) (xy 132.978592 110.962161) (xy 132.978598 110.962157) (xy 132.997555 110.946861)
+ (xy 133.002098 110.943408) (xy 133.03198 110.922023) (xy 133.031981 110.922021) (xy 133.031998 110.92201)
+ (xy 133.032003 110.922006) (xy 133.043317 110.90994) (xy 133.056185 110.899558) (xy 133.066437 110.887276)
+ (xy 133.065389 110.886401) (xy 133.100193 110.849285) (xy 133.102548 110.845501) (xy 133.110603 110.834367)
+ (xy 133.113451 110.830956) (xy 133.113452 110.830955) (xy 133.152538 110.766962) (xy 133.152546 110.766944)
+ (xy 133.164821 110.737995) (xy 133.164825 110.737984) (xy 133.166394 110.734283) (xy 133.166395 110.734284)
+ (xy 133.170059 110.725645) (xy 133.170066 110.725625) (xy 133.170507 110.724586) (xy 133.17056 110.724457)
+ (xy 133.173793 110.716831) (xy 133.176333 110.708562) (xy 133.17871 110.702092) (xy 133.614658 109.307052)
+ (xy 133.623924 109.293991) (xy 133.628808 109.278738) (xy 133.641183 109.269665) (xy 133.650061 109.257152)
+ (xy 133.665235 109.252031) (xy 133.678153 109.242561) (xy 133.693496 109.242494) (xy 133.708035 109.237589)
+ (xy 133.723321 109.242366) (xy 133.739338 109.242297) (xy 133.751633 109.251213) (xy 133.766435 109.255839)
+ (xy 133.788992 109.278048) (xy 133.789276 109.278436) (xy 133.807266 109.303328) (xy 133.808258 109.304345)
+ (xy 133.808265 109.304337) (xy 133.80969 109.30628) (xy 133.811037 109.307921) (xy 133.84016 109.337045)
+ (xy 133.840161 109.337045) (xy 133.840565 109.337449) (xy 133.869731 109.367335) (xy 133.869747 109.367351)
+ (xy 133.872041 109.368924) (xy 133.873227 109.37011) (xy 133.873227 109.370111) (xy 133.874235 109.371119)
+ (xy 133.913266 109.397198) (xy 133.951961 109.423736) (xy 133.953268 109.424296) (xy 133.953391 109.424007)
+ (xy 133.957126 109.426503) (xy 133.958456 109.427054) (xy 133.958458 109.427055) (xy 133.995144 109.44225)
+ (xy 133.996196 109.442693) (xy 134.034082 109.458931) (xy 134.034144 109.458957) (xy 134.034153 109.458959)
+ (xy 134.038298 109.460254) (xy 134.039641 109.460686) (xy 134.039668 109.460692) (xy 134.039671 109.460694)
+ (xy 134.112426 109.478922) (xy 134.157112 109.483323) (xy 134.182154 109.484553) (xy 134.182171 109.484553)
+ (xy 135.189972 109.484553) (xy 135.189989 109.484553) (xy 135.215031 109.483323) (xy 135.259717 109.478922)
+ (xy 135.33245 109.460703) (xy 135.410547 109.428354) (xy 135.414206 109.427045) (xy 135.415019 109.426502)
+ (xy 135.41502 109.426502) (xy 135.49791 109.371117) (xy 135.561106 109.307921) (xy 135.561106 109.30792)
+ (xy 135.561108 109.307916) (xy 135.563434 109.305591) (xy 135.566524 109.299811) (xy 135.579831 109.279896)
+ (xy 135.616491 109.22503) (xy 135.650692 109.142461) (xy 135.670141 109.044686) (xy 135.670141 108.955314)
+ (xy 135.650692 108.857539) (xy 135.618345 108.779448) (xy 135.617034 108.775783) (xy 135.616491 108.77497)
+ (xy 135.616491 108.774969) (xy 135.561106 108.692079) (xy 135.49791 108.628883) (xy 135.497909 108.628883)
+ (xy 135.49558 108.626554) (xy 135.489801 108.623465) (xy 135.415016 108.573496) (xy 135.332451 108.539297)
+ (xy 135.332448 108.539296) (xy 135.259713 108.521077) (xy 135.215039 108.516677) (xy 135.201675 108.516021)
+ (xy 135.189989 108.515447) (xy 135.189982 108.515447) (xy 134.577238 108.515447) (xy 134.519047 108.49654)
+ (xy 134.485319 108.453215) (xy 134.317727 108.034234) (xy 159.4745 108.034234) (xy 159.4745 108.185766)
+ (xy 159.494362 108.259891) (xy 159.51372 108.332139) (xy 159.589481 108.46336) (xy 159.589483 108.463362)
+ (xy 159.589485 108.463365) (xy 159.696635 108.570515) (xy 159.696637 108.570516) (xy 159.696639 108.570518)
+ (xy 159.827861 108.646279) (xy 159.827859 108.646279) (xy 159.827863 108.64628) (xy 159.827865 108.646281)
+ (xy 159.974234 108.6855) (xy 159.974236 108.6855) (xy 160.125764 108.6855) (xy 160.125766 108.6855)
+ (xy 160.272135 108.646281) (xy 160.272137 108.646279) (xy 160.272139 108.646279) (xy 160.40336 108.570518)
+ (xy 160.40336 108.570517) (xy 160.403365 108.570515) (xy 160.510515 108.463365) (xy 160.510518 108.46336)
+ (xy 160.586279 108.332139) (xy 160.586279 108.332137) (xy 160.586281 108.332135) (xy 160.6255 108.185766)
+ (xy 160.6255 108.034234) (xy 160.586281 107.887865) (xy 160.586279 107.887862) (xy 160.586279 107.88786)
+ (xy 160.510518 107.756639) (xy 160.510516 107.756637) (xy 160.510515 107.756635) (xy 160.403365 107.649485)
+ (xy 160.403362 107.649483) (xy 160.40336 107.649481) (xy 160.272138 107.57372) (xy 160.27214 107.57372)
+ (xy 160.215347 107.558503) (xy 160.125766 107.5345) (xy 159.974234 107.5345) (xy 159.884652 107.558503)
+ (xy 159.82786 107.57372) (xy 159.696639 107.649481) (xy 159.589481 107.756639) (xy 159.51372 107.88786)
+ (xy 159.491793 107.969693) (xy 159.4745 108.034234) (xy 134.317727 108.034234) (xy 134.082322 107.445722)
+ (xy 134.07188 107.42293) (xy 134.066398 107.412365) (xy 134.051203 107.383083) (xy 134.051201 107.383079)
+ (xy 134.051198 107.383074) (xy 134.03734 107.363904) (xy 134.037024 107.3633) (xy 134.037024 107.363299)
+ (xy 134.035859 107.361856) (xy 134.007274 107.322312) (xy 133.999031 107.313865) (xy 133.99138 107.306025)
+ (xy 133.99138 107.306024) (xy 133.988116 107.302679) (xy 133.974426 107.285711) (xy 133.95894 107.272784)
+ (xy 133.94485 107.258346) (xy 133.944847 107.258343) (xy 133.930719 107.248652) (xy 133.923281 107.243017)
+ (xy 133.905818 107.22844) (xy 133.905817 107.228439) (xy 133.883557 107.2163) (xy 133.862648 107.201957)
+ (xy 133.851799 107.197307) (xy 133.851217 107.198664) (xy 133.833345 107.188918) (xy 133.818303 107.180716)
+ (xy 133.818299 107.180714) (xy 133.803863 107.176202) (xy 133.794418 107.172713) (xy 133.78049 107.166745)
+ (xy 133.780487 107.166744) (xy 133.780484 107.166743) (xy 133.763704 107.163192) (xy 133.754677 107.160832)
+ (xy 133.732996 107.154057) (xy 133.73299 107.154056) (xy 133.712795 107.151895) (xy 133.702837 107.150313)
+ (xy 133.692652 107.148158) (xy 133.682964 107.146108) (xy 133.682968 107.146108) (xy 133.679806 107.146069)
+ (xy 133.671159 107.145964) (xy 133.671158 107.145964) (xy 133.660231 107.145831) (xy 133.65556 107.145773)
+ (xy 133.633875 107.143455) (xy 133.613775 107.145263) (xy 133.608718 107.145202) (xy 133.608717 107.145201)
+ (xy 133.593587 107.145018) (xy 133.576729 107.148158) (xy 133.567491 107.149431) (xy 133.544843 107.151471)
+ (xy 133.52538 107.157198) (xy 133.51557 107.159548) (xy 133.495618 107.163264) (xy 133.495606 107.163268)
+ (xy 133.474473 107.17172) (xy 133.470139 107.173453) (xy 133.449221 107.179609) (xy 133.43136 107.188963)
+ (xy 133.42667 107.19084) (xy 133.426664 107.190844) (xy 133.412607 107.196467) (xy 133.412594 107.196474)
+ (xy 133.398235 107.205817) (xy 133.390188 107.210529) (xy 133.370039 107.221084) (xy 133.370039 107.221085)
+ (xy 133.354243 107.233828) (xy 133.346083 107.239751) (xy 133.329058 107.25083) (xy 133.312766 107.266728)
+ (xy 133.309424 107.269989) (xy 133.292461 107.283676) (xy 133.279533 107.299161) (xy 133.275916 107.302692)
+ (xy 133.26509 107.313257) (xy 133.255389 107.327398) (xy 133.249759 107.334828) (xy 133.235174 107.352301)
+ (xy 133.235168 107.35231) (xy 133.21111 107.391699) (xy 133.209739 107.393943) (xy 133.208706 107.39545)
+ (xy 133.208437 107.396074) (xy 133.206497 107.399252) (xy 133.206493 107.39926) (xy 133.196103 107.416273)
+ (xy 133.196101 107.416275) (xy 133.178575 107.457606) (xy 133.169925 107.48116) (xy 132.893346 108.36621)
+ (xy 132.857943 108.416113) (xy 132.799969 108.435675) (xy 132.741569 108.417425) (xy 132.705049 108.368333)
+ (xy 132.702426 108.359106) (xy 132.679352 108.259887) (xy 132.271958 106.508087) (xy 132.265088 106.483977)
+ (xy 132.257766 106.462365) (xy 132.257765 106.462365) (xy 132.250311 106.440364) (xy 132.244555 106.434748)
+ (xy 132.239363 106.42309) (xy 132.232543 106.404659) (xy 132.230911 106.402001) (xy 132.230235 106.4009)
+ (xy 132.230224 106.400884) (xy 132.193176 106.353937) (xy 132.193175 106.353936) (xy 132.110287 106.298552)
+ (xy 132.110286 106.298551) (xy 132.110285 106.298551) (xy 132.012509 106.279102) (xy 131.58719 106.279102)
+ (xy 131.587185 106.279102) (xy 131.587175 106.279103) (xy 131.529309 106.285744) (xy 131.529303 106.285745)
+ (xy 131.438482 106.326837) (xy 131.43848 106.326839) (xy 131.370292 106.399563) (xy 131.368774 106.402001)
+ (xy 131.361855 106.420348) (xy 131.352868 106.43158) (xy 131.335745 106.481108) (xy 131.328731 106.505159)
+ (xy 131.093543 107.488671) (xy 130.938381 108.137529) (xy 130.93838 108.137534) (xy 130.860949 108.461336)
+ (xy 130.85538 108.477954) (xy 130.853813 108.481538) (xy 130.836723 108.513514) (xy 130.780046 108.650343)
+ (xy 130.779651 108.651248) (xy 130.759947 108.673437) (xy 130.740662 108.696017) (xy 130.739688 108.69625)
+ (xy 130.739025 108.696998) (xy 130.710047 108.703366) (xy 130.681167 108.7103) (xy 130.680242 108.709917)
+ (xy 130.679265 108.710132) (xy 130.652068 108.698246) (xy 130.624639 108.686885) (xy 130.62405 108.686002)
+ (xy 130.6232 108.685631) (xy 130.618781 108.678098) (xy 130.594716 108.641998) (xy 130.471456 108.259891)
+ (xy 130.337106 107.843406) (xy 130.328246 107.81995) (xy 130.32824 107.819934) (xy 130.304776 107.765981)
+ (xy 130.299821 107.761896) (xy 130.299419 107.761259) (xy 130.282897 107.734758) (xy 130.27923 107.72835)
+ (xy 130.277736 107.725496) (xy 130.277734 107.725493) (xy 130.276204 107.723161) (xy 130.271861 107.717054)
+ (xy 130.270669 107.715142) (xy 130.270668 107.715141) (xy 130.24659 107.686829) (xy 130.246376 107.686577)
+ (xy 130.245655 107.685723) (xy 130.221628 107.655935) (xy 130.217772 107.652715) (xy 130.214475 107.648812)
+ (xy 130.212771 107.647062) (xy 130.195035 107.63302) (xy 130.179613 107.620809) (xy 130.177628 107.619195)
+ (xy 130.145116 107.592046) (xy 130.142458 107.590596) (xy 130.142457 107.590596) (xy 130.139237 107.58884)
+ (xy 130.134615 107.58518) (xy 130.100388 107.567649) (xy 130.099248 107.567027) (xy 130.066635 107.549238)
+ (xy 130.062167 107.547343) (xy 130.062226 107.547202) (xy 130.059602 107.54613) (xy 130.059572 107.546208)
+ (xy 130.055049 107.544427) (xy 130.055046 107.544426) (xy 130.049588 107.542874) (xy 130.014467 107.532889)
+ (xy 130.011997 107.532152) (xy 129.990157 107.525323) (xy 129.971549 107.519504) (xy 129.971545 107.519503)
+ (xy 129.971534 107.519501) (xy 129.96485 107.518785) (xy 129.959184 107.517175) (xy 129.920882 107.514077)
+ (xy 129.919631 107.513944) (xy 129.919588 107.51394) (xy 129.88262 107.509983) (xy 129.877771 107.509942)
+ (xy 129.877772 107.509792) (xy 129.874879 107.509805) (xy 129.874881 107.50988) (xy 129.870018 107.509966)
+ (xy 129.828105 107.514844) (xy 129.825514 107.515111) (xy 129.783434 107.518888) (xy 129.783425 107.51889)
+ (xy 129.782558 107.519144) (xy 129.780522 107.519743) (xy 129.776934 107.520798) (xy 129.771074 107.521481)
+ (xy 129.734526 107.533269) (xy 129.733257 107.533643) (xy 129.733253 107.533645) (xy 129.697596 107.544133)
+ (xy 129.693091 107.545955) (xy 129.693034 107.545814) (xy 129.690423 107.546909) (xy 129.690456 107.546984)
+ (xy 129.685986 107.548928) (xy 129.649054 107.569509) (xy 129.646788 107.570734) (xy 129.609307 107.590359)
+ (xy 129.604076 107.594578) (xy 129.598933 107.597445) (xy 129.569681 107.62232) (xy 129.568636 107.623164)
+ (xy 129.568617 107.623181) (xy 129.539725 107.646486) (xy 129.539707 107.646503) (xy 129.538183 107.648154)
+ (xy 129.538184 107.648155) (xy 129.532439 107.654384) (xy 129.532246 107.654157) (xy 129.53079 107.655396)
+ (xy 129.526436 107.660894) (xy 129.523901 107.663644) (xy 129.523897 107.66365) (xy 129.503016 107.686299)
+ (xy 129.497037 107.689657) (xy 129.488119 107.702764) (xy 129.488111 107.702776) (xy 129.463762 107.738546)
+ (xy 129.463646 107.738725) (xy 129.450568 107.76013) (xy 129.450558 107.760148) (xy 129.066719 108.463853)
+ (xy 129.022255 108.505885) (xy 128.979807 108.515447) (xy 128.41001 108.515447) (xy 128.399993 108.515939)
+ (xy 128.384959 108.516677) (xy 128.340286 108.521077) (xy 128.340283 108.521077) (xy 128.26755 108.539296)
+ (xy 128.267547 108.539297) (xy 128.189477 108.571635) (xy 128.185796 108.572951) (xy 128.102092 108.62888)
+ (xy 128.036562 108.69441) (xy 128.033475 108.700186) (xy 127.983508 108.774969) (xy 127.983507 108.774969)
+ (xy 127.949307 108.857537) (xy 127.938298 108.912885) (xy 127.929858 108.955314) (xy 122.725588 108.955314)
+ (xy 122.750084 108.912885) (xy 122.7876 108.772875) (xy 122.7876 108.627925) (xy 122.750084 108.487915)
+ (xy 122.750082 108.487912) (xy 122.750082 108.48791) (xy 122.677612 108.362389) (xy 122.67761 108.362387)
+ (xy 122.677609 108.362385) (xy 122.575115 108.259891) (xy 122.575112 108.259889) (xy 122.57511 108.259887)
+ (xy 122.449588 108.187417) (xy 122.449589 108.187417) (xy 122.419996 108.179487) (xy 122.309575 108.1499)
+ (xy 122.164625 108.1499) (xy 122.10289 108.166441) (xy 122.02461 108.187417) (xy 121.899089 108.259887)
+ (xy 121.796587 108.362389) (xy 121.724117 108.48791) (xy 121.6866 108.627925) (xy 121.6866 108.71421)
+ (xy 121.667693 108.772401) (xy 121.657604 108.784214) (xy 119.368314 111.073504) (xy 119.313797 111.101281)
+ (xy 119.29831 111.1025) (xy 108.192832 111.1025) (xy 108.134641 111.083593) (xy 108.122829 111.073504)
+ (xy 108.061815 111.012491) (xy 108.06181 111.012487) (xy 107.936288 110.940017) (xy 107.936289 110.940017)
+ (xy 107.869086 110.92201) (xy 107.796275 110.9025) (xy 107.651325 110.9025) (xy 107.58959 110.919041)
+ (xy 107.51131 110.940017) (xy 107.4049 111.001454) (xy 107.345052 111.014176) (xy 107.289156 110.989289)
+ (xy 107.258563 110.936301) (xy 107.2564 110.915718) (xy 107.2564 110.379789) (xy 107.275307 110.321598)
+ (xy 107.28539 110.309791) (xy 107.60277 109.992412) (xy 107.648914 109.912488) (xy 107.657563 109.88021)
+ (xy 107.664403 109.854686) (xy 107.672799 109.823346) (xy 107.6728 109.823343) (xy 107.6728 109.473331)
+ (xy 107.691707 109.41514) (xy 107.70179 109.403333) (xy 107.762809 109.342315) (xy 107.764125 109.340035)
+ (xy 107.835282 109.216789) (xy 107.835282 109.216787) (xy 107.835284 109.216785) (xy 107.8728 109.076775)
+ (xy 107.8728 108.931825) (xy 107.835284 108.791815) (xy 107.835282 108.791812) (xy 107.835282 108.79181)
+ (xy 107.762812 108.666289) (xy 107.76281 108.666287) (xy 107.762809 108.666285) (xy 107.660315 108.563791)
+ (xy 107.660312 108.563789) (xy 107.66031 108.563787) (xy 107.534788 108.491317) (xy 107.534789 108.491317)
+ (xy 107.452774 108.469341) (xy 107.394775 108.4538) (xy 107.249825 108.4538) (xy 107.191826 108.469341)
+ (xy 107.10981 108.491317) (xy 106.984289 108.563787) (xy 106.881787 108.666289) (xy 106.809317 108.79181)
+ (xy 106.7718 108.931825) (xy 106.7718 109.0506) (xy 106.752893 109.108791) (xy 106.703393 109.144755)
+ (xy 106.6728 109.1496) (xy 106.532525 109.1496) (xy 106.520165 109.152912) (xy 106.39251 109.187117)
+ (xy 106.266989 109.259587) (xy 106.164487 109.362089) (xy 106.092017 109.48761) (xy 106.0545 109.627625)
+ (xy 106.0545 109.756197) (xy 106.051127 109.781818) (xy 106.0442 109.80767) (xy 106.0442 111.694799)
+ (xy 106.025293 111.75299) (xy 106.015204 111.764803) (xy 104.876503 112.903504) (xy 104.821986 112.931281)
+ (xy 104.806499 112.9325) (xy 103.687831 112.9325) (xy 103.62964 112.913593) (xy 103.617833 112.903509)
+ (xy 103.606815 112.892491) (xy 103.606812 112.892489) (xy 103.60681 112.892487) (xy 103.481288 112.820017)
+ (xy 103.481289 112.820017) (xy 103.451696 112.812087) (xy 103.341275 112.7825) (xy 103.196325 112.7825)
+ (xy 103.13459 112.799041) (xy 103.05631 112.820017) (xy 102.930789 112.892487) (xy 102.828287 112.994989)
+ (xy 102.755817 113.12051) (xy 102.755816 113.120515) (xy 102.7183 113.260525) (xy 102.7183 113.405475)
+ (xy 102.724734 113.429485) (xy 102.755817 113.545489) (xy 102.828287 113.67101) (xy 102.828289 113.671012)
+ (xy 102.828291 113.671015) (xy 102.930785 113.773509) (xy 102.930787 113.77351) (xy 102.930789 113.773512)
+ (xy 103.056311 113.845982) (xy 103.056312 113.845982) (xy 103.056315 113.845984) (xy 103.196325 113.8835)
+ (xy 103.196326 113.8835) (xy 103.341274 113.8835) (xy 103.341275 113.8835) (xy 103.481285 113.845984)
+ (xy 103.481287 113.845982) (xy 103.481289 113.845982) (xy 103.60681 113.773512) (xy 103.60681 113.773511)
+ (xy 103.606815 113.773509) (xy 103.617829 113.762494) (xy 103.672344 113.734719) (xy 103.687831 113.7335)
+ (xy 105.066125 113.7335) (xy 105.066127 113.7335) (xy 105.167988 113.706207) (xy 105.16799 113.706205)
+ (xy 105.167992 113.706205) (xy 105.259308 113.653483) (xy 105.259308 113.653482) (xy 105.259313 113.65348)
+ (xy 106.76518 112.147613) (xy 106.766463 112.145391) (xy 106.767828 112.144161) (xy 106.769131 112.142464)
+ (xy 106.769445 112.142705) (xy 106.811932 112.10445) (xy 106.872782 112.098053) (xy 106.922204 112.124886)
+ (xy 116.072788 121.27547) (xy 116.07279 121.275471) (xy 116.142077 121.315475) (xy 116.142086 121.315478)
+ (xy 116.142088 121.31548) (xy 116.152712 121.321614) (xy 116.241856 121.3455) (xy 129.653168 121.3455)
+ (xy 129.711359 121.364407) (xy 129.723171 121.374496) (xy 129.784184 121.435508) (xy 129.784189 121.435512)
+ (xy 129.909711 121.507982) (xy 129.909712 121.507982) (xy 129.909715 121.507984) (xy 129.909717 121.507984)
+ (xy 129.912252 121.509035) (xy 129.91375 121.510314) (xy 129.915334 121.511229) (xy 129.915164 121.511522)
+ (xy 129.958779 121.54877) (xy 129.973064 121.608264) (xy 129.949651 121.664793) (xy 129.897483 121.696764)
+ (xy 129.874369 121.6995) (xy 102.00355 121.6995) (xy 101.996485 121.699248) (xy 101.917222 121.693577)
+ (xy 101.765201 121.6827) (xy 101.751222 121.68069) (xy 101.716895 121.673222) (xy 101.528126 121.632154)
+ (xy 101.514574 121.628175) (xy 101.300644 121.548381) (xy 101.287796 121.542513) (xy 101.22049 121.505761)
+ (xy 101.087402 121.433087) (xy 101.075527 121.425456) (xy 100.892749 121.288629) (xy 100.882074 121.27938)
+ (xy 100.720619 121.117925) (xy 100.71137 121.10725) (xy 100.681594 121.067474) (xy 100.574541 120.924468)
+ (xy 100.566914 120.912601) (xy 100.457484 120.7122) (xy 100.451618 120.699355) (xy 100.446508 120.685656)
+ (xy 100.371824 120.485425) (xy 100.367845 120.471873) (xy 100.355567 120.415437) (xy 100.319307 120.248765)
+ (xy 100.317299 120.234808) (xy 100.300752 120.003514) (xy 100.3005 119.99645) (xy 100.3005 115.389774)
+ (xy 103.5995 115.389774) (xy 103.5995 115.610225) (xy 103.633984 115.827948) (xy 103.702102 116.037599)
+ (xy 103.702104 116.037602) (xy 103.702105 116.037606) (xy 103.802185 116.234022) (xy 103.931758 116.412365)
+ (xy 104.087635 116.568242) (xy 104.265978 116.697815) (xy 104.462394 116.797895) (xy 104.672049 116.866015)
+ (xy 104.75914 116.879809) (xy 104.889775 116.9005) (xy 104.889778 116.9005) (xy 105.110225 116.9005)
+ (xy 105.219086 116.883257) (xy 105.327951 116.866015) (xy 105.537606 116.797895) (xy 105.734022 116.697815)
+ (xy 105.912365 116.568242) (xy 106.068242 116.412365) (xy 106.197815 116.234022) (xy 106.297895 116.037606)
+ (xy 106.366015 115.827951) (xy 106.4005 115.610222) (xy 106.4005 115.389778) (xy 106.4005 115.389774)
+ (xy 106.372392 115.212312) (xy 106.366015 115.172049) (xy 106.297895 114.962394) (xy 106.197815 114.765978)
+ (xy 106.068242 114.587635) (xy 105.912365 114.431758) (xy 105.734022 114.302185) (xy 105.734021 114.302184)
+ (xy 105.734019 114.302183) (xy 105.618582 114.243365) (xy 105.537606 114.202105) (xy 105.537602 114.202104)
+ (xy 105.537599 114.202102) (xy 105.327948 114.133984) (xy 105.110225 114.0995) (xy 105.110222 114.0995)
+ (xy 104.889778 114.0995) (xy 104.889775 114.0995) (xy 104.672051 114.133984) (xy 104.4624 114.202102)
+ (xy 104.26598 114.302183) (xy 104.199457 114.350515) (xy 104.087635 114.431758) (xy 103.931758 114.587635)
+ (xy 103.866971 114.676806) (xy 103.802183 114.76598) (xy 103.702102 114.9624) (xy 103.633984 115.172051)
+ (xy 103.5995 115.389774) (xy 100.3005 115.389774) (xy 100.3005 112.342523) (xy 100.319407 112.284332)
+ (xy 100.367351 112.248889) (xy 100.524195 112.195045) (xy 100.713744 112.092466) (xy 100.883823 111.960088)
+ (xy 101.029794 111.801521) (xy 101.147675 111.621091) (xy 101.234251 111.423719) (xy 101.287159 111.214789)
+ (xy 101.304957 111) (xy 101.287159 110.785211) (xy 101.234251 110.576281) (xy 101.232036 110.571232)
+ (xy 103.049478 110.571232) (xy 103.049478 110.571238) (xy 103.0495 110.649905) (xy 103.0495 111.349931)
+ (xy 103.049478 111.428761) (xy 103.049478 111.428767) (xy 103.073461 111.549485) (xy 103.08021 111.583457)
+ (xy 103.095793 111.621095) (xy 103.140541 111.729177) (xy 103.225547 111.856418) (xy 103.228155 111.860322)
+ (xy 103.339678 111.971845) (xy 103.470822 112.059458) (xy 103.616543 112.11979) (xy 103.771237 112.150522)
+ (xy 103.850075 112.1505) (xy 103.850097 112.1505) (xy 104.949903 112.1505) (xy 104.949925 112.1505)
+ (xy 105.028763 112.150522) (xy 105.183457 112.11979) (xy 105.329178 112.059458) (xy 105.460322 111.971845)
+ (xy 105.571845 111.860322) (xy 105.659458 111.729178) (xy 105.71979 111.583457) (xy 105.750522 111.428763)
+ (xy 105.7505 111.349904) (xy 105.7505 110.649904) (xy 105.750522 110.571237) (xy 105.71979 110.416543)
+ (xy 105.659458 110.270822) (xy 105.571845 110.139678) (xy 105.460322 110.028155) (xy 105.40682 109.992412)
+ (xy 105.329177 109.940541) (xy 105.243788 109.905188) (xy 105.183457 109.88021) (xy 105.183452 109.880209)
+ (xy 105.028764 109.849478) (xy 105.028763 109.849478) (xy 104.989333 109.849489) (xy 104.949903 109.8495)
+ (xy 103.850097 109.8495) (xy 103.771238 109.849478) (xy 103.771232 109.849478) (xy 103.616547 109.880209)
+ (xy 103.616543 109.88021) (xy 103.470822 109.940541) (xy 103.339681 110.028152) (xy 103.228152 110.139681)
+ (xy 103.140541 110.270822) (xy 103.08021 110.416543) (xy 103.080209 110.416547) (xy 103.049478 110.571232)
+ (xy 101.232036 110.571232) (xy 101.147675 110.378909) (xy 101.147672 110.378904) (xy 101.029797 110.198483)
+ (xy 101.029795 110.198481) (xy 101.029794 110.198479) (xy 100.883823 110.039912) (xy 100.822791 109.992409)
+ (xy 100.713747 109.907536) (xy 100.713744 109.907534) (xy 100.524199 109.804957) (xy 100.524198 109.804956)
+ (xy 100.524195 109.804955) (xy 100.410086 109.765781) (xy 100.367354 109.751111) (xy 100.318456 109.714333)
+ (xy 100.3005 109.657475) (xy 100.3005 106.389774) (xy 103.5995 106.389774) (xy 103.5995 106.610225)
+ (xy 103.633984 106.827948) (xy 103.702102 107.037599) (xy 103.702104 107.037602) (xy 103.702105 107.037606)
+ (xy 103.756038 107.143455) (xy 103.79934 107.22844) (xy 103.802185 107.234022) (xy 103.931758 107.412365)
+ (xy 104.087635 107.568242) (xy 104.265978 107.697815) (xy 104.462394 107.797895) (xy 104.672049 107.866015)
+ (xy 104.75914 107.879809) (xy 104.889775 107.9005) (xy 104.889778 107.9005) (xy 105.110225 107.9005)
+ (xy 105.219086 107.883257) (xy 105.327951 107.866015) (xy 105.537606 107.797895) (xy 105.734022 107.697815)
+ (xy 105.912365 107.568242) (xy 106.068242 107.412365) (xy 106.197815 107.234022) (xy 106.297895 107.037606)
+ (xy 106.366015 106.827951) (xy 106.4005 106.610222) (xy 106.4005 106.389778) (xy 106.4005 106.389774)
+ (xy 106.366015 106.172051) (xy 106.366015 106.172049) (xy 106.297895 105.962394) (xy 106.197815 105.765978)
+ (xy 106.068242 105.587635) (xy 105.912365 105.431758) (xy 105.734022 105.302185) (xy 105.734021 105.302184)
+ (xy 105.734019 105.302183) (xy 105.644825 105.256736) (xy 105.537606 105.202105) (xy 105.537602 105.202104)
+ (xy 105.537599 105.202102) (xy 105.327948 105.133984) (xy 105.110225 105.0995) (xy 105.110222 105.0995)
+ (xy 104.889778 105.0995) (xy 104.889775 105.0995) (xy 104.672051 105.133984) (xy 104.4624 105.202102)
+ (xy 104.26598 105.302183) (xy 104.176806 105.366971) (xy 104.087635 105.431758) (xy 103.931758 105.587635)
+ (xy 103.866971 105.676806) (xy 103.802183 105.76598) (xy 103.702102 105.9624) (xy 103.633984 106.172051)
+ (xy 103.5995 106.389774) (xy 100.3005 106.389774) (xy 100.3005 102.003549) (xy 100.300752 101.996485)
+ (xy 100.303778 101.954185) (xy 100.317299 101.765189) (xy 100.319306 101.751236) (xy 100.367846 101.528121)
+ (xy 100.371824 101.514574) (xy 100.383784 101.482509) (xy 100.451621 101.300635) (xy 100.457481 101.287805)
+ (xy 100.566918 101.087391) (xy 100.574536 101.075537) (xy 100.711377 100.89274) (xy 100.720612 100.882081)
+ (xy 100.882081 100.720612) (xy 100.89274 100.711377) (xy 101.075537 100.574536) (xy 101.087391 100.566918)
+ (xy 101.287805 100.457481) (xy 101.300635 100.451621) (xy 101.514577 100.371822) (xy 101.528121 100.367846)
+ (xy 101.751236 100.319306) (xy 101.765189 100.317299) (xy 101.976514 100.30218) (xy 101.996486 100.300752)
+ (xy 102.00355 100.3005) (xy 155.706767 100.3005)
+ )
+ )
+ )
+ (embedded_fonts no)
+)
diff --git a/hardware/calibrator/calibrator.kicad_pro b/hardware/calibrator/calibrator.kicad_pro
new file mode 100644
index 0000000..53dc51e
--- /dev/null
+++ b/hardware/calibrator/calibrator.kicad_pro
@@ -0,0 +1,329 @@
+{
+ "board": {
+ "3dviewports": [],
+ "design_settings": {
+ "defaults": {
+ "apply_defaults_to_fp_fields": false,
+ "apply_defaults_to_fp_shapes": false,
+ "apply_defaults_to_fp_text": false,
+ "board_outline_line_width": 0.05,
+ "copper_line_width": 0.2,
+ "copper_text_italic": false,
+ "copper_text_size_h": 1.5,
+ "copper_text_size_v": 1.5,
+ "copper_text_thickness": 0.3,
+ "copper_text_upright": false,
+ "courtyard_line_width": 0.05,
+ "dimension_precision": 4,
+ "dimension_units": 3,
+ "dimensions": {
+ "arrow_length": 1270000,
+ "extension_offset": 500000,
+ "keep_text_aligned": true,
+ "suppress_zeroes": true,
+ "text_position": 0,
+ "units_format": 0
+ },
+ "fab_line_width": 0.1,
+ "fab_text_italic": false,
+ "fab_text_size_h": 1.0,
+ "fab_text_size_v": 1.0,
+ "fab_text_thickness": 0.15,
+ "fab_text_upright": false,
+ "other_line_width": 0.1,
+ "other_text_italic": false,
+ "other_text_size_h": 1.0,
+ "other_text_size_v": 1.0,
+ "other_text_thickness": 0.15,
+ "other_text_upright": false,
+ "pads": {
+ "drill": 0.8,
+ "height": 1.27,
+ "width": 2.54
+ },
+ "silk_line_width": 0.12,
+ "silk_text_italic": false,
+ "silk_text_size_h": 0.8,
+ "silk_text_size_v": 0.8,
+ "silk_text_thickness": 0.12,
+ "silk_text_upright": false,
+ "zones": {
+ "min_clearance": 0.5
+ }
+ },
+ "diff_pair_dimensions": [],
+ "drc_exclusions": [],
+ "meta": {
+ "version": 2
+ },
+ "rule_severities": {
+ "annular_width": "error",
+ "clearance": "error",
+ "connection_width": "warning",
+ "copper_edge_clearance": "error",
+ "copper_sliver": "warning",
+ "courtyards_overlap": "error",
+ "creepage": "error",
+ "diff_pair_gap_out_of_range": "error",
+ "diff_pair_uncoupled_length_too_long": "error",
+ "drill_out_of_range": "error",
+ "duplicate_footprints": "warning",
+ "extra_footprint": "warning",
+ "footprint": "error",
+ "footprint_filters_mismatch": "ignore",
+ "footprint_symbol_mismatch": "warning",
+ "footprint_type_mismatch": "ignore",
+ "hole_clearance": "error",
+ "hole_to_hole": "warning",
+ "holes_co_located": "warning",
+ "invalid_outline": "error",
+ "isolated_copper": "warning",
+ "item_on_disabled_layer": "error",
+ "items_not_allowed": "error",
+ "length_out_of_range": "error",
+ "lib_footprint_issues": "ignore",
+ "lib_footprint_mismatch": "ignore",
+ "malformed_courtyard": "error",
+ "microvia_drill_out_of_range": "error",
+ "mirrored_text_on_front_layer": "warning",
+ "missing_courtyard": "ignore",
+ "missing_footprint": "warning",
+ "net_conflict": "warning",
+ "nonmirrored_text_on_back_layer": "warning",
+ "npth_inside_courtyard": "ignore",
+ "padstack": "warning",
+ "pth_inside_courtyard": "ignore",
+ "shorting_items": "error",
+ "silk_edge_clearance": "warning",
+ "silk_over_copper": "warning",
+ "silk_overlap": "ignore",
+ "skew_out_of_range": "error",
+ "solder_mask_bridge": "error",
+ "starved_thermal": "error",
+ "text_height": "warning",
+ "text_on_edge_cuts": "error",
+ "text_thickness": "warning",
+ "through_hole_pad_without_hole": "error",
+ "too_many_vias": "error",
+ "track_angle": "error",
+ "track_dangling": "warning",
+ "track_segment_length": "error",
+ "track_width": "error",
+ "tracks_crossing": "error",
+ "unconnected_items": "error",
+ "unresolved_variable": "error",
+ "via_dangling": "warning",
+ "zones_intersect": "error"
+ },
+ "rules": {
+ "allow_blind_buried_vias": false,
+ "allow_microvias": false,
+ "max_error": 0.005,
+ "min_clearance": 0.15,
+ "min_connection": 0.0,
+ "min_copper_edge_clearance": 0.3,
+ "min_groove_width": 0.0,
+ "min_hole_clearance": 0.25,
+ "min_hole_to_hole": 0.5,
+ "min_microvia_diameter": 0.2,
+ "min_microvia_drill": 0.1,
+ "min_resolved_spokes": 1,
+ "min_silk_clearance": 0.0,
+ "min_text_height": 0.6,
+ "min_text_thickness": 0.1,
+ "min_through_hole_diameter": 0.3,
+ "min_track_width": 0.15,
+ "min_via_annular_width": 0.15,
+ "min_via_diameter": 0.6,
+ "solder_mask_to_copper_clearance": 0.0,
+ "use_height_for_length_calcs": true
+ },
+ "teardrop_options": [
+ {
+ "td_onpthpad": true,
+ "td_onroundshapesonly": false,
+ "td_onsmdpad": true,
+ "td_ontrackend": false,
+ "td_onvia": true
+ }
+ ],
+ "teardrop_parameters": [
+ {
+ "td_allow_use_two_tracks": true,
+ "td_curve_segcount": 0,
+ "td_height_ratio": 1.0,
+ "td_length_ratio": 0.5,
+ "td_maxheight": 2.0,
+ "td_maxlen": 1.0,
+ "td_on_pad_in_zone": false,
+ "td_target_name": "td_round_shape",
+ "td_width_to_size_filter_ratio": 0.9
+ },
+ {
+ "td_allow_use_two_tracks": true,
+ "td_curve_segcount": 0,
+ "td_height_ratio": 1.0,
+ "td_length_ratio": 0.5,
+ "td_maxheight": 2.0,
+ "td_maxlen": 1.0,
+ "td_on_pad_in_zone": false,
+ "td_target_name": "td_rect_shape",
+ "td_width_to_size_filter_ratio": 0.9
+ },
+ {
+ "td_allow_use_two_tracks": true,
+ "td_curve_segcount": 0,
+ "td_height_ratio": 1.0,
+ "td_length_ratio": 0.5,
+ "td_maxheight": 2.0,
+ "td_maxlen": 1.0,
+ "td_on_pad_in_zone": false,
+ "td_target_name": "td_track_end",
+ "td_width_to_size_filter_ratio": 0.9
+ }
+ ],
+ "track_widths": [
+ 0.2,
+ 0.3,
+ 0.4
+ ],
+ "tuning_pattern_settings": {
+ "diff_pair_defaults": {
+ "corner_radius_percentage": 80,
+ "corner_style": 1,
+ "max_amplitude": 1.0,
+ "min_amplitude": 0.2,
+ "single_sided": false,
+ "spacing": 1.0
+ },
+ "diff_pair_skew_defaults": {
+ "corner_radius_percentage": 80,
+ "corner_style": 1,
+ "max_amplitude": 1.0,
+ "min_amplitude": 0.2,
+ "single_sided": false,
+ "spacing": 0.6
+ },
+ "single_track_defaults": {
+ "corner_radius_percentage": 80,
+ "corner_style": 1,
+ "max_amplitude": 1.0,
+ "min_amplitude": 0.2,
+ "single_sided": false,
+ "spacing": 0.6
+ }
+ },
+ "via_dimensions": [
+ {
+ "diameter": 0.6,
+ "drill": 0.3
+ }
+ ],
+ "zones_allow_external_fillets": false
+ },
+ "ipc2581": {
+ "dist": "",
+ "distpn": "",
+ "internal_id": "",
+ "mfg": "",
+ "mpn": ""
+ },
+ "layer_pairs": [],
+ "layer_presets": [],
+ "viewports": []
+ },
+ "boards": [],
+ "cvpcb": {
+ "equivalence_files": []
+ },
+ "libraries": {
+ "pinned_footprint_libs": [],
+ "pinned_symbol_libs": []
+ },
+ "meta": {
+ "filename": "calibrator.kicad_pro",
+ "version": 3
+ },
+ "net_settings": {
+ "classes": [
+ {
+ "bus_width": 12,
+ "clearance": 0.16,
+ "diff_pair_gap": 0.25,
+ "diff_pair_width": 0.2,
+ "line_style": 0,
+ "microvia_diameter": 0.3,
+ "microvia_drill": 0.1,
+ "name": "Default",
+ "pcb_color": "rgba(0, 0, 0, 0.000)",
+ "priority": 2147483647,
+ "schematic_color": "rgba(0, 0, 0, 0.000)",
+ "track_width": 0.2,
+ "via_diameter": 0.6,
+ "via_drill": 0.3,
+ "wire_width": 6
+ },
+ {
+ "bus_width": 12,
+ "clearance": 0.16,
+ "diff_pair_gap": 0.25,
+ "diff_pair_width": 0.2,
+ "line_style": 0,
+ "microvia_diameter": 0.3,
+ "microvia_drill": 0.1,
+ "name": "Power",
+ "pcb_color": "rgba(0, 0, 0, 0.000)",
+ "priority": 0,
+ "schematic_color": "rgba(0, 0, 0, 0.000)",
+ "track_width": 0.3,
+ "via_diameter": 0.6,
+ "via_drill": 0.3,
+ "wire_width": 6
+ }
+ ],
+ "meta": {
+ "version": 4
+ },
+ "net_colors": null,
+ "netclass_assignments": null,
+ "netclass_patterns": [
+ {
+ "netclass": "Power",
+ "pattern": "VBUS"
+ },
+ {
+ "netclass": "Power",
+ "pattern": "GND"
+ },
+ {
+ "netclass": "Power",
+ "pattern": "VDD"
+ },
+ {
+ "netclass": "Power",
+ "pattern": "BUZ_N"
+ }
+ ]
+ },
+ "pcbnew": {
+ "last_paths": {
+ "gencad": "",
+ "idf": "",
+ "netlist": "",
+ "plot": "",
+ "pos_files": "",
+ "specctra_dsn": "",
+ "step": "",
+ "svg": "",
+ "vrml": ""
+ },
+ "page_layout_descr_file": ""
+ },
+ "schematic": {
+ "legacy_lib_dir": "",
+ "legacy_lib_list": [],
+ "page_layout_descr_file": ""
+ },
+ "sheets": [],
+ "text_variables": {}
+}
\ No newline at end of file
diff --git a/hardware/calibrator/calibrator.kicad_sch b/hardware/calibrator/calibrator.kicad_sch
new file mode 100644
index 0000000..816f2f0
--- /dev/null
+++ b/hardware/calibrator/calibrator.kicad_sch
@@ -0,0 +1,3165 @@
+(kicad_sch (version 20250114) (generator "eeschema") (generator_version "9.0") (uuid "0d2859e4-133c-5efb-a230-be56cb52e344") (paper "A4")
+ (title_block (title "AVsync calibrator") (date "2026-11-08") (rev "0.3")
+ (comment 1 "v1 proposal - not built or tested yet")
+ (comment 2 "Generated by scripts/gen_sch.py from scripts/design.py")
+ (comment 3 "SPDX-License-Identifier: CERN-OHL-P-2.0"))
+ (lib_symbols
+(symbol "calibrator:CH32X035G8R6" (pin_names (offset 1.016)) (exclude_from_sim no) (in_bom yes) (on_board yes)
+ (property "Reference" "U" (at -10.16 16.51 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "CH32X035G8R6" (at 2.54 16.51 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "Package_SO:QSOP-28_3.9x9.9mm_P0.635mm" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "https://www.wch.cn/products/CH32X035.html" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "WCH CH32X035G8R6, RISC-V, 62 KB flash, USB FS, 3 comparators, QSOP-28; pins grouped by use" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (symbol "CH32X035G8R6_0_1" (rectangle (start -15.24 15.24) (end 15.24 -27.94) (stroke (width 0.254) (type default)) (fill (type background))))
+ (symbol "CH32X035G8R6_1_1"
+ (pin bidirectional line (at -17.78 12.7 0) (length 2.54) (name "PC16/UDM" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 10.16 0) (length 2.54) (name "PC17/UDP/BOOT" (effects (font (size 1.27 1.27)))) (number "3" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 2.54 0) (length 2.54) (name "PA13/CMP3+" (effects (font (size 1.27 1.27)))) (number "5" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 0.0 0) (length 2.54) (name "PA0/ADC0" (effects (font (size 1.27 1.27)))) (number "9" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -2.54 0) (length 2.54) (name "PA2/CMP3-/ADC2" (effects (font (size 1.27 1.27)))) (number "11" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -7.62 0) (length 2.54) (name "PC19/SWCLK" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -10.16 0) (length 2.54) (name "PC18/SWDIO" (effects (font (size 1.27 1.27)))) (number "28" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -12.7 0) (length 2.54) (name "PC14/PA12" (effects (font (size 1.27 1.27)))) (number "4" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -15.24 0) (length 2.54) (name "PC3" (effects (font (size 1.27 1.27)))) (number "8" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -17.78 0) (length 2.54) (name "PA1" (effects (font (size 1.27 1.27)))) (number "10" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -20.32 0) (length 2.54) (name "PA3" (effects (font (size 1.27 1.27)))) (number "12" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -22.86 0) (length 2.54) (name "PA6" (effects (font (size 1.27 1.27)))) (number "13" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -25.4 0) (length 2.54) (name "PB0" (effects (font (size 1.27 1.27)))) (number "14" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 12.7 180) (length 2.54) (name "PA4" (effects (font (size 1.27 1.27)))) (number "15" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 10.16 180) (length 2.54) (name "PA5" (effects (font (size 1.27 1.27)))) (number "16" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 5.08 180) (length 2.54) (name "PA7" (effects (font (size 1.27 1.27)))) (number "17" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 2.54 180) (length 2.54) (name "PB3/CMP3 out" (effects (font (size 1.27 1.27)))) (number "18" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 0.0 180) (length 2.54) (name "PB4" (effects (font (size 1.27 1.27)))) (number "19" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 -2.54 180) (length 2.54) (name "PB1/PB5" (effects (font (size 1.27 1.27)))) (number "20" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 -5.08 180) (length 2.54) (name "PB6" (effects (font (size 1.27 1.27)))) (number "21" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 -7.62 180) (length 2.54) (name "PB7" (effects (font (size 1.27 1.27)))) (number "22" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 -10.16 180) (length 2.54) (name "PB8" (effects (font (size 1.27 1.27)))) (number "23" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 -12.7 180) (length 2.54) (name "PB9" (effects (font (size 1.27 1.27)))) (number "24" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 -15.24 180) (length 2.54) (name "PB10" (effects (font (size 1.27 1.27)))) (number "25" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 -17.78 180) (length 2.54) (name "PB11" (effects (font (size 1.27 1.27)))) (number "26" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 -20.32 180) (length 2.54) (name "PB12" (effects (font (size 1.27 1.27)))) (number "27" (effects (font (size 1.27 1.27)))))
+ (pin power_in line (at 0.0 17.78 270) (length 2.54) (name "VDD" (effects (font (size 1.27 1.27)))) (number "6" (effects (font (size 1.27 1.27)))))
+ (pin power_in line (at 0.0 -30.48 90) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "7" (effects (font (size 1.27 1.27)))))
+ )
+ (embedded_fonts no)
+ )(symbol "Connector:USB_C_Receptacle_USB2.0_16P"
+ (pin_names
+ (offset 1.016)
+ )
+ (exclude_from_sim no)
+ (in_bom yes)
+ (on_board yes)
+ (property "Reference" "J"
+ (at 0 22.225 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (property "Value" "USB_C_Receptacle_USB2.0_16P"
+ (at 0 19.685 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 3.81 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Datasheet" "https://www.usb.org/sites/default/files/documents/usb_type-c.zip"
+ (at 3.81 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Description" "USB 2.0-only 16P Type-C Receptacle connector"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_keywords" "usb universal serial bus type-C USB2.0"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_fp_filters" "USB*C*Receptacle*"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (symbol "USB_C_Receptacle_USB2.0_16P_0_0"
+ (rectangle
+ (start -0.254 -17.78)
+ (end 0.254 -16.764)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (rectangle
+ (start 10.16 15.494)
+ (end 9.144 14.986)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (rectangle
+ (start 10.16 10.414)
+ (end 9.144 9.906)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (rectangle
+ (start 10.16 7.874)
+ (end 9.144 7.366)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (rectangle
+ (start 10.16 2.794)
+ (end 9.144 2.286)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (rectangle
+ (start 10.16 0.254)
+ (end 9.144 -0.254)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (rectangle
+ (start 10.16 -2.286)
+ (end 9.144 -2.794)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (rectangle
+ (start 10.16 -4.826)
+ (end 9.144 -5.334)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (rectangle
+ (start 10.16 -12.446)
+ (end 9.144 -12.954)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (rectangle
+ (start 10.16 -14.986)
+ (end 9.144 -15.494)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ )
+ (symbol "USB_C_Receptacle_USB2.0_16P_0_1"
+ (rectangle
+ (start -10.16 17.78)
+ (end 10.16 -17.78)
+ (stroke
+ (width 0.254)
+ (type default)
+ )
+ (fill
+ (type background)
+ )
+ )
+ (polyline
+ (pts
+ (xy -8.89 -3.81) (xy -8.89 3.81)
+ )
+ (stroke
+ (width 0.508)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (rectangle
+ (start -7.62 -3.81)
+ (end -6.35 3.81)
+ (stroke
+ (width 0.254)
+ (type default)
+ )
+ (fill
+ (type outline)
+ )
+ )
+ (arc
+ (start -7.62 3.81)
+ (mid -6.985 4.4423)
+ (end -6.35 3.81)
+ (stroke
+ (width 0.254)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (arc
+ (start -7.62 3.81)
+ (mid -6.985 4.4423)
+ (end -6.35 3.81)
+ (stroke
+ (width 0.254)
+ (type default)
+ )
+ (fill
+ (type outline)
+ )
+ )
+ (arc
+ (start -8.89 3.81)
+ (mid -6.985 5.7067)
+ (end -5.08 3.81)
+ (stroke
+ (width 0.508)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (arc
+ (start -5.08 -3.81)
+ (mid -6.985 -5.7067)
+ (end -8.89 -3.81)
+ (stroke
+ (width 0.508)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (arc
+ (start -6.35 -3.81)
+ (mid -6.985 -4.4423)
+ (end -7.62 -3.81)
+ (stroke
+ (width 0.254)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (arc
+ (start -6.35 -3.81)
+ (mid -6.985 -4.4423)
+ (end -7.62 -3.81)
+ (stroke
+ (width 0.254)
+ (type default)
+ )
+ (fill
+ (type outline)
+ )
+ )
+ (polyline
+ (pts
+ (xy -5.08 3.81) (xy -5.08 -3.81)
+ )
+ (stroke
+ (width 0.508)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (circle
+ (center -2.54 1.143)
+ (radius 0.635)
+ (stroke
+ (width 0.254)
+ (type default)
+ )
+ (fill
+ (type outline)
+ )
+ )
+ (polyline
+ (pts
+ (xy -1.27 4.318) (xy 0 6.858) (xy 1.27 4.318) (xy -1.27 4.318)
+ )
+ (stroke
+ (width 0.254)
+ (type default)
+ )
+ (fill
+ (type outline)
+ )
+ )
+ (polyline
+ (pts
+ (xy 0 -2.032) (xy 2.54 0.508) (xy 2.54 1.778)
+ )
+ (stroke
+ (width 0.508)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 0 -3.302) (xy -2.54 -0.762) (xy -2.54 0.508)
+ )
+ (stroke
+ (width 0.508)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 0 -5.842) (xy 0 4.318)
+ )
+ (stroke
+ (width 0.508)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (circle
+ (center 0 -5.842)
+ (radius 1.27)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type outline)
+ )
+ )
+ (rectangle
+ (start 1.905 1.778)
+ (end 3.175 3.048)
+ (stroke
+ (width 0.254)
+ (type default)
+ )
+ (fill
+ (type outline)
+ )
+ )
+ )
+ (symbol "USB_C_Receptacle_USB2.0_16P_1_1"
+ (pin passive line
+ (at -7.62 -22.86 90)
+ (length 5.08)
+ (name "SHIELD"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "S1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at 0 -22.86 90)
+ (length 5.08)
+ (name "GND"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "A1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at 0 -22.86 90)
+ (length 5.08)
+ (hide yes)
+ (name "GND"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "A12"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at 0 -22.86 90)
+ (length 5.08)
+ (hide yes)
+ (name "GND"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "B1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at 0 -22.86 90)
+ (length 5.08)
+ (hide yes)
+ (name "GND"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "B12"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at 15.24 15.24 180)
+ (length 5.08)
+ (name "VBUS"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "A4"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at 15.24 15.24 180)
+ (length 5.08)
+ (hide yes)
+ (name "VBUS"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "A9"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at 15.24 15.24 180)
+ (length 5.08)
+ (hide yes)
+ (name "VBUS"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "B4"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at 15.24 15.24 180)
+ (length 5.08)
+ (hide yes)
+ (name "VBUS"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "B9"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin bidirectional line
+ (at 15.24 10.16 180)
+ (length 5.08)
+ (name "CC1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "A5"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin bidirectional line
+ (at 15.24 7.62 180)
+ (length 5.08)
+ (name "CC2"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "B5"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin bidirectional line
+ (at 15.24 2.54 180)
+ (length 5.08)
+ (name "D-"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "A7"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin bidirectional line
+ (at 15.24 0 180)
+ (length 5.08)
+ (name "D-"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "B7"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin bidirectional line
+ (at 15.24 -2.54 180)
+ (length 5.08)
+ (name "D+"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "A6"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin bidirectional line
+ (at 15.24 -5.08 180)
+ (length 5.08)
+ (name "D+"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "B6"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin bidirectional line
+ (at 15.24 -12.7 180)
+ (length 5.08)
+ (name "SBU1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "A8"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin bidirectional line
+ (at 15.24 -15.24 180)
+ (length 5.08)
+ (name "SBU2"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "B8"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ )
+ (embedded_fonts no)
+ )(symbol "Switch:SW_Push"
+ (pin_numbers
+ (hide yes)
+ )
+ (pin_names
+ (offset 1.016)
+ (hide yes)
+ )
+ (exclude_from_sim no)
+ (in_bom yes)
+ (on_board yes)
+ (property "Reference" "SW"
+ (at 1.27 2.54 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (justify left)
+ )
+ )
+ (property "Value" "SW_Push"
+ (at 0 -1.524 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 5.08 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Datasheet" "~"
+ (at 0 5.08 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Description" "Push button switch, generic, two pins"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_keywords" "switch normally-open pushbutton push-button"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (symbol "SW_Push_0_1"
+ (circle
+ (center -2.032 0)
+ (radius 0.508)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 0 1.27) (xy 0 3.048)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (circle
+ (center 2.032 0)
+ (radius 0.508)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 2.54 1.27) (xy -2.54 1.27)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (pin passive line
+ (at -5.08 0 0)
+ (length 2.54)
+ (name "1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at 5.08 0 180)
+ (length 2.54)
+ (name "2"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "2"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ )
+ (embedded_fonts no)
+ )(symbol "Device:R"
+ (pin_numbers
+ (hide yes)
+ )
+ (pin_names
+ (offset 0)
+ )
+ (exclude_from_sim no)
+ (in_bom yes)
+ (on_board yes)
+ (property "Reference" "R"
+ (at 2.032 0 90)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (property "Value" "R"
+ (at 0 0 90)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at -1.778 0 90)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Datasheet" "~"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Description" "Resistor"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_keywords" "R res resistor"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_fp_filters" "R_*"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (symbol "R_0_1"
+ (rectangle
+ (start -1.016 -2.54)
+ (end 1.016 2.54)
+ (stroke
+ (width 0.254)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ )
+ (symbol "R_1_1"
+ (pin passive line
+ (at 0 3.81 270)
+ (length 1.27)
+ (name "~"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at 0 -3.81 90)
+ (length 1.27)
+ (name "~"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "2"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ )
+ (embedded_fonts no)
+ )(symbol "Device:C"
+ (pin_numbers
+ (hide yes)
+ )
+ (pin_names
+ (offset 0.254)
+ )
+ (exclude_from_sim no)
+ (in_bom yes)
+ (on_board yes)
+ (property "Reference" "C"
+ (at 0.635 2.54 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (justify left)
+ )
+ )
+ (property "Value" "C"
+ (at 0.635 -2.54 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (justify left)
+ )
+ )
+ (property "Footprint" ""
+ (at 0.9652 -3.81 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Datasheet" "~"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Description" "Unpolarized capacitor"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_keywords" "cap capacitor"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_fp_filters" "C_*"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (symbol "C_0_1"
+ (polyline
+ (pts
+ (xy -2.032 0.762) (xy 2.032 0.762)
+ )
+ (stroke
+ (width 0.508)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy -2.032 -0.762) (xy 2.032 -0.762)
+ )
+ (stroke
+ (width 0.508)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ )
+ (symbol "C_1_1"
+ (pin passive line
+ (at 0 3.81 270)
+ (length 2.794)
+ (name "~"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at 0 -3.81 90)
+ (length 2.794)
+ (name "~"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "2"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ )
+ (embedded_fonts no)
+ )(symbol "Device:Buzzer"
+ (pin_names
+ (offset 0.0254)
+ (hide yes)
+ )
+ (exclude_from_sim no)
+ (in_bom yes)
+ (on_board yes)
+ (property "Reference" "BZ"
+ (at 3.81 1.27 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (justify left)
+ )
+ )
+ (property "Value" "Buzzer"
+ (at 3.81 -1.27 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (justify left)
+ )
+ )
+ (property "Footprint" ""
+ (at -0.635 2.54 90)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Datasheet" "~"
+ (at -0.635 2.54 90)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Description" "Buzzer, polarized"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_keywords" "quartz resonator ceramic"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_fp_filters" "*Buzzer*"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (symbol "Buzzer_0_1"
+ (polyline
+ (pts
+ (xy -1.651 1.905) (xy -1.143 1.905)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy -1.397 2.159) (xy -1.397 1.651)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (arc
+ (start 0 3.175)
+ (mid 3.1612 0)
+ (end 0 -3.175)
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 0 3.175) (xy 0 -3.175)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ )
+ (symbol "Buzzer_1_1"
+ (pin passive line
+ (at -2.54 2.54 0)
+ (length 2.54)
+ (name "+"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at -2.54 -2.54 0)
+ (length 2.54)
+ (name "-"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "2"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ )
+ (embedded_fonts no)
+ )(symbol "Device:D"
+ (pin_numbers
+ (hide yes)
+ )
+ (pin_names
+ (offset 1.016)
+ (hide yes)
+ )
+ (exclude_from_sim no)
+ (in_bom yes)
+ (on_board yes)
+ (property "Reference" "D"
+ (at 0 2.54 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (property "Value" "D"
+ (at 0 -2.54 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Datasheet" "~"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Description" "Diode"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Sim.Device" "D"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Sim.Pins" "1=K 2=A"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_keywords" "diode"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_fp_filters" "TO-???* *_Diode_* *SingleDiode* D_*"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (symbol "D_0_1"
+ (polyline
+ (pts
+ (xy -1.27 1.27) (xy -1.27 -1.27)
+ )
+ (stroke
+ (width 0.254)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 1.27 1.27) (xy 1.27 -1.27) (xy -1.27 0) (xy 1.27 1.27)
+ )
+ (stroke
+ (width 0.254)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 1.27 0) (xy -1.27 0)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ )
+ (symbol "D_1_1"
+ (pin passive line
+ (at -3.81 0 0)
+ (length 2.54)
+ (name "K"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at 3.81 0 180)
+ (length 2.54)
+ (name "A"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "2"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ )
+ (embedded_fonts no)
+ )(symbol "Transistor_BJT:Q_NPN_BEC"
+ (pin_names
+ (offset 0)
+ (hide yes)
+ )
+ (exclude_from_sim no)
+ (in_bom yes)
+ (on_board yes)
+ (property "Reference" "Q"
+ (at 5.08 1.27 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (justify left)
+ )
+ )
+ (property "Value" "Q_NPN_BEC"
+ (at 5.08 -1.27 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (justify left)
+ )
+ )
+ (property "Footprint" ""
+ (at 5.08 2.54 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Datasheet" "~"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Description" "NPN transistor, base/emitter/collector"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Sim.Device" "NPN"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Sim.Pins" "1=B 2=E 3=C"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_keywords" "BJT"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (symbol "Q_NPN_BEC_0_1"
+ (polyline
+ (pts
+ (xy -2.54 0) (xy 0.635 0)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 0.635 1.905) (xy 0.635 -1.905)
+ )
+ (stroke
+ (width 0.508)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (circle
+ (center 1.27 0)
+ (radius 2.8194)
+ (stroke
+ (width 0.254)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ )
+ (symbol "Q_NPN_BEC_1_1"
+ (polyline
+ (pts
+ (xy 0.635 0.635) (xy 2.54 2.54)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 0.635 -0.635) (xy 2.54 -2.54)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 1.27 -1.778) (xy 1.778 -1.27) (xy 2.286 -2.286) (xy 1.27 -1.778)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type outline)
+ )
+ )
+ (pin input line
+ (at -5.08 0 0)
+ (length 2.54)
+ (name "B"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at 2.54 5.08 270)
+ (length 2.54)
+ (name "C"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "3"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at 2.54 -5.08 90)
+ (length 2.54)
+ (name "E"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "2"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ )
+ (embedded_fonts no)
+ )(symbol "Device:LED"
+ (pin_numbers
+ (hide yes)
+ )
+ (pin_names
+ (offset 1.016)
+ (hide yes)
+ )
+ (exclude_from_sim no)
+ (in_bom yes)
+ (on_board yes)
+ (property "Reference" "D"
+ (at 0 2.54 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (property "Value" "LED"
+ (at 0 -2.54 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Datasheet" "~"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Description" "Light emitting diode"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Sim.Pins" "1=K 2=A"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_keywords" "LED diode"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_fp_filters" "LED* LED_SMD:* LED_THT:*"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (symbol "LED_0_1"
+ (polyline
+ (pts
+ (xy -3.048 -0.762) (xy -4.572 -2.286) (xy -3.81 -2.286) (xy -4.572 -2.286) (xy -4.572 -1.524)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy -1.778 -0.762) (xy -3.302 -2.286) (xy -2.54 -2.286) (xy -3.302 -2.286) (xy -3.302 -1.524)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy -1.27 0) (xy 1.27 0)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy -1.27 -1.27) (xy -1.27 1.27)
+ )
+ (stroke
+ (width 0.254)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 1.27 -1.27) (xy 1.27 1.27) (xy -1.27 0) (xy 1.27 -1.27)
+ )
+ (stroke
+ (width 0.254)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ )
+ (symbol "LED_1_1"
+ (pin passive line
+ (at -3.81 0 0)
+ (length 2.54)
+ (name "K"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at 3.81 0 180)
+ (length 2.54)
+ (name "A"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "2"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ )
+ (embedded_fonts no)
+ )(symbol "Device:Q_Photo_NPN"
+ (pin_names
+ (offset 0)
+ (hide yes)
+ )
+ (exclude_from_sim no)
+ (in_bom yes)
+ (on_board yes)
+ (property "Reference" "Q"
+ (at 5.08 1.27 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (justify left)
+ )
+ )
+ (property "Value" "Q_Photo_NPN"
+ (at 5.08 -1.27 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (justify left)
+ )
+ )
+ (property "Footprint" ""
+ (at 5.08 2.54 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Datasheet" "~"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Description" "NPN phototransistor, collector/emitter"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_keywords" "phototransistor NPN"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (symbol "Q_Photo_NPN_0_1"
+ (polyline
+ (pts
+ (xy -3.81 3.175) (xy -1.905 1.27) (xy -1.905 1.905)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy -3.175 4.445) (xy -1.27 2.54) (xy -1.27 3.175)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy -1.905 1.27) (xy -2.54 1.27)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy -1.27 2.54) (xy -1.905 2.54)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 0.635 1.905) (xy 0.635 -1.905) (xy 0.635 -1.905)
+ )
+ (stroke
+ (width 0.508)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 0.635 0.635) (xy 2.54 2.54)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 0.635 -0.635) (xy 2.54 -2.54) (xy 2.54 -2.54)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (circle
+ (center 1.27 0)
+ (radius 2.8194)
+ (stroke
+ (width 0.254)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 1.27 -1.778) (xy 1.778 -1.27) (xy 2.286 -2.286) (xy 1.27 -1.778) (xy 1.27 -1.778)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type outline)
+ )
+ )
+ )
+ (symbol "Q_Photo_NPN_1_1"
+ (pin passive line
+ (at 2.54 5.08 270)
+ (length 2.54)
+ (name "C"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ (pin passive line
+ (at 2.54 -5.08 90)
+ (length 2.54)
+ (name "E"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "2"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ )
+ (embedded_fonts no)
+ )(symbol "power:PWR_FLAG"
+ (power)
+ (pin_numbers
+ (hide yes)
+ )
+ (pin_names
+ (offset 0)
+ (hide yes)
+ )
+ (exclude_from_sim no)
+ (in_bom yes)
+ (on_board yes)
+ (property "Reference" "#FLG"
+ (at 0 1.905 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Value" "PWR_FLAG"
+ (at 0 3.81 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Datasheet" "~"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Description" "Special symbol for telling ERC where power comes from"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_keywords" "flag power"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (symbol "PWR_FLAG_0_0"
+ (pin power_out line
+ (at 0 0 90)
+ (length 0)
+ (name "~"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ )
+ (symbol "PWR_FLAG_0_1"
+ (polyline
+ (pts
+ (xy 0 0) (xy 0 1.27) (xy -1.016 1.905) (xy 0 2.54) (xy 1.016 1.905) (xy 0 1.27)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ )
+ (embedded_fonts no)
+ )(symbol "power:GND"
+ (power)
+ (pin_numbers
+ (hide yes)
+ )
+ (pin_names
+ (offset 0)
+ (hide yes)
+ )
+ (exclude_from_sim no)
+ (in_bom yes)
+ (on_board yes)
+ (property "Reference" "#PWR"
+ (at 0 -6.35 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Value" "GND"
+ (at 0 -3.81 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Description" "Power symbol creates a global label with name \"GND\" , ground"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_keywords" "global power"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (symbol "GND_0_1"
+ (polyline
+ (pts
+ (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ )
+ (symbol "GND_1_1"
+ (pin power_in line
+ (at 0 0 270)
+ (length 0)
+ (name "~"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ )
+ (embedded_fonts no)
+ )(symbol "power:VDD"
+ (power)
+ (pin_numbers
+ (hide yes)
+ )
+ (pin_names
+ (offset 0)
+ (hide yes)
+ )
+ (exclude_from_sim no)
+ (in_bom yes)
+ (on_board yes)
+ (property "Reference" "#PWR"
+ (at 0 -3.81 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Value" "VDD"
+ (at 0 3.556 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Description" "Power symbol creates a global label with name \"VDD\""
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_keywords" "global power"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (symbol "VDD_0_1"
+ (polyline
+ (pts
+ (xy -0.762 1.27) (xy 0 2.54)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 0 2.54) (xy 0.762 1.27)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 0 0) (xy 0 2.54)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ )
+ (symbol "VDD_1_1"
+ (pin power_in line
+ (at 0 0 90)
+ (length 0)
+ (name "~"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ )
+ (embedded_fonts no)
+ )(symbol "power:VBUS"
+ (power)
+ (pin_numbers
+ (hide yes)
+ )
+ (pin_names
+ (offset 0)
+ (hide yes)
+ )
+ (exclude_from_sim no)
+ (in_bom yes)
+ (on_board yes)
+ (property "Reference" "#PWR"
+ (at 0 -3.81 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Value" "VBUS"
+ (at 0 3.556 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "Description" "Power symbol creates a global label with name \"VBUS\""
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (property "ki_keywords" "global power"
+ (at 0 0 0)
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ (hide yes)
+ )
+ )
+ (symbol "VBUS_0_1"
+ (polyline
+ (pts
+ (xy -0.762 1.27) (xy 0 2.54)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 0 2.54) (xy 0.762 1.27)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ (polyline
+ (pts
+ (xy 0 0) (xy 0 2.54)
+ )
+ (stroke
+ (width 0)
+ (type default)
+ )
+ (fill
+ (type none)
+ )
+ )
+ )
+ (symbol "VBUS_1_1"
+ (pin power_in line
+ (at 0 0 90)
+ (length 0)
+ (name "~"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ (number "1"
+ (effects
+ (font
+ (size 1.27 1.27)
+ )
+ )
+ )
+ )
+ )
+ (embedded_fonts no)
+ )
+ )
+ (rectangle (start 15.24 25.4) (end 101.6 104.14) (stroke (width 0.254) (type dash) (color 72 110 150 1)) (fill (type none)) (uuid "6fc7bc45-86c4-580f-82f0-bc8efcb9d5f5"))
+ (text "USB-C: power + update" (exclude_from_sim no) (at 16.51 29.209999999999997 0) (effects (font (size 1.8 1.8) (bold yes)) (justify left bottom)) (uuid "a615eac8-2286-5151-b682-cbfda6a422d2"))
+ (rectangle (start 101.6 71.12) (end 162.56 154.94) (stroke (width 0.254) (type dash) (color 72 110 150 1)) (fill (type none)) (uuid "4d37aabf-a28d-5ae8-b14c-340b613227cd"))
+ (text "Light sensors (display mode)" (exclude_from_sim no) (at 102.86999999999999 74.93 0) (effects (font (size 1.8 1.8) (bold yes)) (justify left bottom)) (uuid "da3d9840-93c3-591e-8437-d1ae3ef701be"))
+ (rectangle (start 162.56 25.4) (end 210.82 154.94) (stroke (width 0.254) (type dash) (color 72 110 150 1)) (fill (type none)) (uuid "e481ec6f-fd7c-5522-8fe7-9965497151cf"))
+ (text "MCU" (exclude_from_sim no) (at 163.83 29.209999999999997 0) (effects (font (size 1.8 1.8) (bold yes)) (justify left bottom)) (uuid "5844e9f0-15f4-53b7-9c3e-22596859fee5"))
+ (rectangle (start 210.82 25.4) (end 279.4 154.94) (stroke (width 0.254) (type dash) (color 72 110 150 1)) (fill (type none)) (uuid "c7274ec8-f631-5968-b2d1-68cd0fbc813e"))
+ (text "Flash + click (camera and display mode)" (exclude_from_sim no) (at 212.09 29.209999999999997 0) (effects (font (size 1.8 1.8) (bold yes)) (justify left bottom)) (uuid "771c5b8a-73f5-504a-a360-ad0f41415e6e"))
+ (text "5.1k on CC1/CC2 asks the phone for 5 V." (exclude_from_sim no) (at 17.78 107.95 0) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid "b864ee15-c4bc-59d2-8f8c-a95ced2f54b4"))
+ (text "D+/D- go only to the MCU. The firmware never turns USB on," (exclude_from_sim no) (at 17.78 110.49 0) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid "bd799cf5-9e03-5555-ab96-fe0917cd635c"))
+ (text "so a phone sees no device. R3 + C2/C3 filter spikes; C2/C3 sit at U1." (exclude_from_sim no) (at 17.78 113.03 0) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid "60e4abe4-9bf9-5241-a089-5d8e3a9e13c9"))
+ (text "Update: hold SW1 while plugging into a PC. The ROM bootloader starts" (exclude_from_sim no) (at 17.78 118.11 0) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid "94489469-456f-5509-878f-8e5997d2e6ca"))
+ (text "only at power-on with PC17 (D+) high; R9 limits the current into D+." (exclude_from_sim no) (at 17.78 120.65 0) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid "ed2d5539-e252-5024-ac0e-4369b9b93855"))
+ (text "Reverse-gullwing parts look down through holes. CMP3 (hysteresis)" (exclude_from_sim no) (at 104.14 158.75 0) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid "c58643cb-d473-5833-b57e-eaf4aaf5ad9d"))
+ (text "flips where A and B see the same light; ADC0/ADC2 read dark / light." (exclude_from_sim no) (at 104.14 161.29 0) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid "91b1a545-fad5-5cb7-82b8-c552aed05c32"))
+ (text "Reverse-mount white LED shines through a hole (~12 mA)." (exclude_from_sim no) (at 213.36 158.75 0) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid "20ff00a1-19ee-5a21-bf1d-ed73576784fd"))
+ (text "PA4 and PA5 are set by one register write." (exclude_from_sim no) (at 213.36 161.29 0) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid "45f2d268-f548-574e-a586-7c7b61f7843b"))
+ (text "D2 catches the coil kick; R6 keeps Q1 off during reset." (exclude_from_sim no) (at 213.36 163.83 0) (effects (font (size 1.27 1.27)) (justify left bottom)) (uuid "af96e05e-a2e2-5599-b316-4e20d52b3d39"))
+ (wire (pts (xy 50.8 50.8) (xy 55.88 50.8)) (stroke (width 0) (type default)) (uuid "afb6b126-86c4-5d27-bc4e-c797f5432228"))
+ (wire (pts (xy 55.88 50.8) (xy 55.88 35.56)) (stroke (width 0) (type default)) (uuid "f092d3d6-dab9-54e4-8ec8-3c7846652b45"))
+ (wire (pts (xy 55.88 35.56) (xy 63.5 35.56)) (stroke (width 0) (type default)) (uuid "b02aa2c9-6cc6-5496-9b82-c06c08b73250"))
+ (wire (pts (xy 63.5 35.56) (xy 68.58 35.56)) (stroke (width 0) (type default)) (uuid "ed7fa30c-df5f-5443-88e6-f7ceb934236f"))
+ (wire (pts (xy 63.5 35.56) (xy 63.5 39.370000000000005)) (stroke (width 0) (type default)) (uuid "1b9519c8-e430-5ed1-b741-d40d4869d571"))
+ (wire (pts (xy 76.2 35.56) (xy 83.82 35.56)) (stroke (width 0) (type default)) (uuid "a9b83d8c-4519-57fc-a01f-a2d0e9852ca8"))
+ (wire (pts (xy 83.82 35.56) (xy 91.44 35.56)) (stroke (width 0) (type default)) (uuid "42941b4a-aaca-59cc-beb3-dd662b634d59"))
+ (wire (pts (xy 91.44 35.56) (xy 99.06 35.56)) (stroke (width 0) (type default)) (uuid "522cf288-5006-59e8-8430-de70b907f183"))
+ (wire (pts (xy 83.82 35.56) (xy 83.82 39.370000000000005)) (stroke (width 0) (type default)) (uuid "e0553ba1-d20f-5a9d-a3d7-0274ab67eeb0"))
+ (wire (pts (xy 91.44 35.56) (xy 91.44 39.370000000000005)) (stroke (width 0) (type default)) (uuid "828c8937-c5c8-51ca-919d-0c1e3d506006"))
+ (wire (pts (xy 63.5 46.99) (xy 63.5 48.260000000000005)) (stroke (width 0) (type default)) (uuid "e7204b53-69c2-5433-9228-070f80c714f9"))
+ (wire (pts (xy 83.82 46.99) (xy 83.82 48.260000000000005)) (stroke (width 0) (type default)) (uuid "90bddc26-1caa-50bc-8f14-0b55f4dcc9c8"))
+ (wire (pts (xy 91.44 46.99) (xy 91.44 48.260000000000005)) (stroke (width 0) (type default)) (uuid "ae3e0452-c480-5329-8bb2-1dfa5977f8c6"))
+ (wire (pts (xy 50.8 55.88) (xy 57.15 55.88)) (stroke (width 0) (type default)) (uuid "b6a90dfd-59b3-58f5-b084-d67d47c2e7ed"))
+ (wire (pts (xy 50.8 58.42) (xy 67.31 58.42)) (stroke (width 0) (type default)) (uuid "d6063e2f-2796-59f2-ac82-1c19624e5ffc"))
+ (wire (pts (xy 64.77 55.88) (xy 78.74 55.88)) (stroke (width 0) (type default)) (uuid "cb14f832-f874-582c-9168-766db31ed429"))
+ (wire (pts (xy 78.74 55.88) (xy 78.74 58.42)) (stroke (width 0) (type default)) (uuid "d40bc6cc-6a4b-50a1-a2f7-36314a65b741"))
+ (wire (pts (xy 74.93 58.42) (xy 78.74 58.42)) (stroke (width 0) (type default)) (uuid "e9e568ea-804c-5a4b-bec9-0bfc5f0bce48"))
+ (wire (pts (xy 50.8 63.5) (xy 53.34 63.5)) (stroke (width 0) (type default)) (uuid "a71f73d3-2997-532f-b4a4-60916605602b"))
+ (wire (pts (xy 50.8 66.04) (xy 53.34 66.04)) (stroke (width 0) (type default)) (uuid "d811dbc3-5991-586a-bede-8be4882a9421"))
+ (wire (pts (xy 53.34 63.5) (xy 53.34 66.04)) (stroke (width 0) (type default)) (uuid "a3187fec-5820-53dc-83ee-4303cf004c1f"))
+ (wire (pts (xy 53.34 66.04) (xy 167.64 66.04)) (stroke (width 0) (type default)) (uuid "d9fc82bc-04b8-548e-80f7-79b8a789a64a"))
+ (wire (pts (xy 50.8 68.58) (xy 55.88 68.58)) (stroke (width 0) (type default)) (uuid "ecef6ab4-c364-5dd9-a0ee-ed4438e05dd7"))
+ (wire (pts (xy 50.8 71.12) (xy 55.88 71.12)) (stroke (width 0) (type default)) (uuid "4d8e000a-66b0-5920-abf6-2e357724db06"))
+ (wire (pts (xy 55.88 68.58) (xy 55.88 71.12)) (stroke (width 0) (type default)) (uuid "e9839765-3648-5769-a98d-28d22dbeffed"))
+ (wire (pts (xy 55.88 68.58) (xy 78.74 68.58)) (stroke (width 0) (type default)) (uuid "fb09f983-985e-5782-b47d-086a622d1fed"))
+ (wire (pts (xy 78.74 68.58) (xy 167.64 68.58)) (stroke (width 0) (type default)) (uuid "9afe7496-2358-56ba-92c9-34c08413f9a4"))
+ (wire (pts (xy 78.74 76.2) (xy 78.74 78.74)) (stroke (width 0) (type default)) (uuid "3c5c611d-5ce8-520a-a9b0-9c6feb2d87b7"))
+ (wire (pts (xy 78.74 88.9) (xy 78.74 91.44)) (stroke (width 0) (type default)) (uuid "0cd112e6-90b1-504d-8e2e-eea0e0570f29"))
+ (wire (pts (xy 35.56 88.9) (xy 35.56 93.98)) (stroke (width 0) (type default)) (uuid "ec7ce095-ef39-57ab-976a-ae19ee447e36"))
+ (wire (pts (xy 27.94 88.9) (xy 27.94 93.98)) (stroke (width 0) (type default)) (uuid "a43dde37-cd08-5cd3-bb48-e38b5986c486"))
+ (wire (pts (xy 27.94 93.98) (xy 35.56 93.98)) (stroke (width 0) (type default)) (uuid "efd71ab0-7d13-5b4d-95c4-4a5909691805"))
+ (wire (pts (xy 116.84 83.82) (xy 116.84 81.28)) (stroke (width 0) (type default)) (uuid "ea32426d-bf09-5d90-8f27-55cefe958877"))
+ (wire (pts (xy 116.84 116.84) (xy 116.84 114.3)) (stroke (width 0) (type default)) (uuid "d59155ef-7644-5dbd-98ad-7efcbd0233bd"))
+ (wire (pts (xy 116.84 93.98) (xy 116.84 99.06)) (stroke (width 0) (type default)) (uuid "ae01d6bd-28b8-5648-a688-8c4f9591a527"))
+ (wire (pts (xy 116.84 99.06) (xy 127.0 99.06)) (stroke (width 0) (type default)) (uuid "2c82e7c0-e3b4-516d-bcff-46e072649896"))
+ (wire (pts (xy 127.0 99.06) (xy 137.16 99.06)) (stroke (width 0) (type default)) (uuid "1619efbd-7966-5c5a-a7ec-b7e2f47bda73"))
+ (wire (pts (xy 137.16 99.06) (xy 152.4 99.06)) (stroke (width 0) (type default)) (uuid "f831f211-72a7-5337-914e-04a719312214"))
+ (wire (pts (xy 127.0 99.06) (xy 127.0 102.87)) (stroke (width 0) (type default)) (uuid "a8c5b547-1426-50db-8458-d6924c768f92"))
+ (wire (pts (xy 137.16 99.06) (xy 137.16 102.87)) (stroke (width 0) (type default)) (uuid "c61cf63f-558e-5a9c-92c1-666cc2b7a0e4"))
+ (wire (pts (xy 127.0 110.49) (xy 127.0 113.03)) (stroke (width 0) (type default)) (uuid "9f12c09e-8d4a-5fd8-86de-77bf05ad20f1"))
+ (wire (pts (xy 137.16 110.49) (xy 137.16 113.03)) (stroke (width 0) (type default)) (uuid "5bc69f77-d032-5cb2-a53c-4a245fd120ea"))
+ (wire (pts (xy 116.84 127.0) (xy 116.84 132.08)) (stroke (width 0) (type default)) (uuid "4baef166-9e1e-57cc-895c-8f1a362a656b"))
+ (wire (pts (xy 116.84 132.08) (xy 127.0 132.08)) (stroke (width 0) (type default)) (uuid "fbd81d66-19bf-56b6-9d2f-1347b1364fe9"))
+ (wire (pts (xy 127.0 132.08) (xy 137.16 132.08)) (stroke (width 0) (type default)) (uuid "d3ba46c7-0813-5d00-9633-86d14ec669cd"))
+ (wire (pts (xy 137.16 132.08) (xy 157.48 132.08)) (stroke (width 0) (type default)) (uuid "8cda498c-d8a8-59dd-935f-d3ec2c05fff4"))
+ (wire (pts (xy 127.0 132.08) (xy 127.0 135.89)) (stroke (width 0) (type default)) (uuid "c0dce371-fe9a-5a53-91b1-87729dc6b4c7"))
+ (wire (pts (xy 137.16 132.08) (xy 137.16 135.89)) (stroke (width 0) (type default)) (uuid "07eee06d-03fa-562a-a7e2-0bbb5b9a8148"))
+ (wire (pts (xy 127.0 143.51) (xy 127.0 146.05)) (stroke (width 0) (type default)) (uuid "0a6507fa-730b-51e5-8b12-8b79a6ba9669"))
+ (wire (pts (xy 137.16 143.51) (xy 137.16 146.05)) (stroke (width 0) (type default)) (uuid "bfaf27e7-535f-54a6-a13d-5d69022b9769"))
+ (wire (pts (xy 152.4 99.06) (xy 152.4 78.74)) (stroke (width 0) (type default)) (uuid "d6664fdb-2186-502a-8a82-9f861c8f6323"))
+ (wire (pts (xy 152.4 78.74) (xy 152.4 76.2)) (stroke (width 0) (type default)) (uuid "d1746ee4-c69f-5c28-b806-ece2807be340"))
+ (wire (pts (xy 152.4 76.2) (xy 167.64 76.2)) (stroke (width 0) (type default)) (uuid "d686c184-bcdb-53dc-947b-6d947f1834fa"))
+ (wire (pts (xy 152.4 78.74) (xy 167.64 78.74)) (stroke (width 0) (type default)) (uuid "22bc56d5-bbc6-5208-af20-120ed72ca062"))
+ (wire (pts (xy 157.48 132.08) (xy 157.48 81.28)) (stroke (width 0) (type default)) (uuid "44c5f78c-033e-5bfa-a841-5dd56171398c"))
+ (wire (pts (xy 157.48 81.28) (xy 167.64 81.28)) (stroke (width 0) (type default)) (uuid "11183657-c79f-5fa3-978c-aeb8e950fc34"))
+ (wire (pts (xy 185.42 60.96) (xy 185.42 58.42)) (stroke (width 0) (type default)) (uuid "39a820ee-b84c-59ea-b97d-cb85702329c1"))
+ (wire (pts (xy 185.42 109.22) (xy 185.42 111.76)) (stroke (width 0) (type default)) (uuid "25f4638a-ad1a-5ae6-aec0-adb185253e5f"))
+ (wire (pts (xy 203.2 66.04) (xy 219.71 66.04)) (stroke (width 0) (type default)) (uuid "d0d61f90-1048-5f7c-98af-7b174b1fe443"))
+ (wire (pts (xy 227.33 66.04) (xy 234.95 66.04)) (stroke (width 0) (type default)) (uuid "e9687db0-93a8-5f69-af1f-69fc6761f311"))
+ (wire (pts (xy 242.57 66.04) (xy 247.65 66.04)) (stroke (width 0) (type default)) (uuid "6c8191db-2226-513c-ae6a-a8141aa4d347"))
+ (wire (pts (xy 247.65 66.04) (xy 247.65 68.58)) (stroke (width 0) (type default)) (uuid "f3ffb5fc-80a5-5bbf-bc26-0f2b3af83e90"))
+ (wire (pts (xy 203.2 68.58) (xy 208.28 68.58)) (stroke (width 0) (type default)) (uuid "cc200038-cd83-50b9-89e0-e14307b06901"))
+ (wire (pts (xy 208.28 68.58) (xy 208.28 104.14)) (stroke (width 0) (type default)) (uuid "ceb8a4dd-6bce-55c6-8b6f-6024b46fca47"))
+ (wire (pts (xy 208.28 104.14) (xy 219.71 104.14)) (stroke (width 0) (type default)) (uuid "d3122d8f-b3dc-53ad-a862-126c9897601a"))
+ (wire (pts (xy 227.33 104.14) (xy 231.14 104.14)) (stroke (width 0) (type default)) (uuid "cbdc16ef-60b7-5629-8c6d-81bfd945f0bb"))
+ (wire (pts (xy 231.14 104.14) (xy 233.68 104.14)) (stroke (width 0) (type default)) (uuid "0b7035d4-574a-5e72-a883-ccf6c423b4e6"))
+ (wire (pts (xy 231.14 104.14) (xy 231.14 107.95)) (stroke (width 0) (type default)) (uuid "c808b231-2079-5c1b-8eb3-a8b9f091d0ff"))
+ (wire (pts (xy 231.14 115.57) (xy 231.14 118.11)) (stroke (width 0) (type default)) (uuid "9f8c00c8-e410-519b-a8a0-fba8062ee5d5"))
+ (wire (pts (xy 241.3 109.22) (xy 241.3 111.76)) (stroke (width 0) (type default)) (uuid "5ab2bc0a-6322-51b0-a9db-113e79d717ed"))
+ (wire (pts (xy 241.3 99.06) (xy 241.3 96.52)) (stroke (width 0) (type default)) (uuid "1e56b115-3318-5929-88bc-ff2bcf4db38e"))
+ (wire (pts (xy 241.3 96.52) (xy 241.3 92.71)) (stroke (width 0) (type default)) (uuid "abe3f6cd-bc14-5555-933d-31afdc5411cc"))
+ (wire (pts (xy 241.3 96.52) (xy 251.46 96.52)) (stroke (width 0) (type default)) (uuid "9ceb1de7-eaa4-58ef-9c0c-ffb0392bf554"))
+ (wire (pts (xy 241.3 85.09) (xy 241.3 81.28)) (stroke (width 0) (type default)) (uuid "399baa67-72d5-550b-bbbb-bdbadace7306"))
+ (wire (pts (xy 241.3 81.28) (xy 246.38 81.28)) (stroke (width 0) (type default)) (uuid "ee2d9348-02a9-5aa4-9d5b-31a96011cb00"))
+ (wire (pts (xy 246.38 81.28) (xy 246.38 91.44)) (stroke (width 0) (type default)) (uuid "5d66e0a0-ec9d-597f-b46f-53ee70382d66"))
+ (wire (pts (xy 246.38 91.44) (xy 251.46 91.44)) (stroke (width 0) (type default)) (uuid "ca531f97-606b-5256-9071-6a16a7211d45"))
+ (junction (at 55.88 35.56) (diameter 0) (color 0 0 0 0) (uuid "a7d92d34-363d-5bc9-bcf6-2b5f7ddcf199"))
+ (junction (at 63.5 35.56) (diameter 0) (color 0 0 0 0) (uuid "a7639261-9b96-561c-92a0-e67c7e6ca6f4"))
+ (junction (at 83.82 35.56) (diameter 0) (color 0 0 0 0) (uuid "c6cdfbca-67e3-51f0-b507-1ce8e762f4c3"))
+ (junction (at 91.44 35.56) (diameter 0) (color 0 0 0 0) (uuid "b73b8bfd-97b2-5a3c-b556-27c9903798c0"))
+ (junction (at 53.34 66.04) (diameter 0) (color 0 0 0 0) (uuid "b3f1540d-4be4-50c3-a6db-fb332a3955bb"))
+ (junction (at 55.88 68.58) (diameter 0) (color 0 0 0 0) (uuid "63f4ecb9-79df-5500-bd50-0a762941c3ce"))
+ (junction (at 78.74 68.58) (diameter 0) (color 0 0 0 0) (uuid "156a2151-9317-5d5d-ba58-30d4cefe8375"))
+ (junction (at 78.74 58.42) (diameter 0) (color 0 0 0 0) (uuid "114ac67b-6e77-5102-b52a-c0cb3efd8cf2"))
+ (junction (at 127.0 99.06) (diameter 0) (color 0 0 0 0) (uuid "673c167c-dba6-50e6-8673-0eb79cba4386"))
+ (junction (at 137.16 99.06) (diameter 0) (color 0 0 0 0) (uuid "b0cae851-136d-5b5e-a5ae-aab2ace50bae"))
+ (junction (at 152.4 78.74) (diameter 0) (color 0 0 0 0) (uuid "38be1fce-082a-5a3d-af57-25282cac44bf"))
+ (junction (at 127.0 132.08) (diameter 0) (color 0 0 0 0) (uuid "f51ae364-48aa-51eb-8846-c7ff2197013e"))
+ (junction (at 137.16 132.08) (diameter 0) (color 0 0 0 0) (uuid "6e49bee5-2033-5fdd-8faa-4265d1bffb24"))
+ (junction (at 231.14 104.14) (diameter 0) (color 0 0 0 0) (uuid "3bb7eccc-5190-5c93-96a8-54bf46649e78"))
+ (junction (at 241.29999999999998 96.52) (diameter 0) (color 0 0 0 0) (uuid "ff655053-c0a1-526e-9177-1fb5eff6cf93"))
+ (no_connect (at 167.64 86.36) (uuid "404b6ba2-0005-533e-b90f-cc8123bd442a"))
+ (no_connect (at 167.64 88.9) (uuid "ca8768b6-b0cd-5248-ac47-312bfc00eceb"))
+ (no_connect (at 167.64 91.44) (uuid "d75dc062-c6f6-597c-b8a1-3aa25618fecd"))
+ (no_connect (at 167.64 93.98) (uuid "db1618ab-60c6-5e10-ba35-0fef6687dd8a"))
+ (no_connect (at 167.64 96.52) (uuid "e203de01-0999-5fc7-8f55-c22d601ce6e0"))
+ (no_connect (at 167.64 99.06) (uuid "d7bcdc23-66f6-5179-a29a-4c0c6d430387"))
+ (no_connect (at 167.64 101.6) (uuid "39751de3-5ecf-5f6d-a27b-182a732d8521"))
+ (no_connect (at 167.64 104.14) (uuid "8936f6ac-1b68-55b0-a3ff-ae119e4e5a12"))
+ (no_connect (at 203.2 73.66) (uuid "a29fe15d-9da0-5c82-ac58-63b8e6970a0d"))
+ (no_connect (at 203.2 76.2) (uuid "1345c163-0c3f-5d88-8e5d-406771d90123"))
+ (no_connect (at 203.2 78.74) (uuid "1dbacd2e-8ee6-583b-b44d-b75b4a04e7a2"))
+ (no_connect (at 203.2 81.28) (uuid "9d0ffbac-bfd3-5873-a8c1-66d19afc0f70"))
+ (no_connect (at 203.2 83.82) (uuid "0fbdfcae-021e-5efa-be63-d0ccebec9295"))
+ (no_connect (at 203.2 86.36) (uuid "f39ea6a3-3d4c-57e9-b228-0624ddae754e"))
+ (no_connect (at 203.2 88.9) (uuid "f1a721f6-d1c0-5a3a-9bf4-6188652e2d69"))
+ (no_connect (at 203.2 91.44) (uuid "e728c296-6725-5778-8efe-625825862108"))
+ (no_connect (at 203.2 93.98) (uuid "1dd6e8c0-e998-50fc-bf05-009225122070"))
+ (no_connect (at 203.2 96.52) (uuid "01e44cbf-40d6-5340-bb0e-5b42605b19dd"))
+ (no_connect (at 203.2 99.06) (uuid "bca11af6-db99-51a3-8e15-8d77658d0365"))
+ (no_connect (at 50.8 78.74) (uuid "892ce38e-f2aa-5eac-ab0b-1dbe22604cef"))
+ (no_connect (at 50.8 81.28) (uuid "6384c51b-b000-51d1-9857-22ab7963b13b"))
+ (symbol (lib_id "calibrator:CH32X035G8R6") (at 185.42 78.74 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "4222ac06-04ac-52aa-aca0-41f2a2666abd")
+ (property "Reference" "U1" (at 170.17999999999998 118.10999999999999 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "CH32X035G8R6" (at 170.17999999999998 120.64999999999999 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "Package_SO:QSOP-28_3.9x9.9mm_P0.635mm" (at 185.42 78.74 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 185.42 78.74 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 185.42 78.74 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C49118551" (at 185.42 78.74 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "2" (uuid "7aefbe81-4b86-54e5-9047-ade20f4a1515"))
+ (pin "3" (uuid "85430bd6-7cfd-5163-a243-b11ac4a792f0"))
+ (pin "5" (uuid "b5bae18f-b4b2-5d6f-be62-a47cd281760f"))
+ (pin "9" (uuid "c841307b-494a-5c46-9c11-903e5fb45ca5"))
+ (pin "11" (uuid "c494acae-a1bc-535b-9534-f913ea975392"))
+ (pin "1" (uuid "a8e307bf-b0e4-5323-8b81-a20ceef8cad8"))
+ (pin "28" (uuid "e797c4c8-9372-551e-8fd3-e4c52b4f9ca7"))
+ (pin "4" (uuid "5acbda26-d559-5cb6-ae34-125e392b8fd1"))
+ (pin "8" (uuid "d4c26a90-a10d-5382-8ad0-fe6e45450545"))
+ (pin "10" (uuid "3a7710f2-1b9d-5eba-9569-9a857704f686"))
+ (pin "12" (uuid "c5fe7af6-d9f7-5c9a-baed-28e0bf3cab7e"))
+ (pin "13" (uuid "791324c0-bd80-52c2-b519-698bcf2e5e3f"))
+ (pin "14" (uuid "ca41f9f8-e717-5b13-a7e1-eaf6e8f79073"))
+ (pin "15" (uuid "223eb3a0-8d98-506e-9352-781a009dd413"))
+ (pin "16" (uuid "8f1cb4f3-cae5-520e-9806-9e14f4d2287a"))
+ (pin "17" (uuid "b7b65342-74a8-5a3f-a9bb-b3b13ce0608e"))
+ (pin "18" (uuid "787380d0-c143-5767-8377-d30636706acc"))
+ (pin "19" (uuid "1a577622-a4ce-55f3-b8cb-f69e02aed71e"))
+ (pin "20" (uuid "1935fe65-840f-58d1-aee2-5fa2f435b174"))
+ (pin "21" (uuid "44fd42f2-cbfe-5141-8b72-3b8677fcce68"))
+ (pin "22" (uuid "a9085eda-992a-5b06-955b-174420fdc218"))
+ (pin "23" (uuid "7e34cfbb-b3eb-5b2a-97c4-402220f7a680"))
+ (pin "24" (uuid "a2a23697-3eec-5207-9719-104a973dcbd8"))
+ (pin "25" (uuid "8e1a30b0-7654-5846-bac8-584937115171"))
+ (pin "26" (uuid "aa00d598-83ed-5018-8d15-c863ea447cac"))
+ (pin "27" (uuid "0be5d0c8-6dd5-57cf-a80c-3c951ea2e0a7"))
+ (pin "6" (uuid "80d88576-4fd5-5fe6-9a46-3ac593486a80"))
+ (pin "7" (uuid "83f83ba2-8906-51dd-b8cb-41442cb34e4d"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "U1") (unit 1))))
+ )
+ (symbol (lib_id "Connector:USB_C_Receptacle_USB2.0_16P") (at 35.56 66.04 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "1124327a-0935-5ec5-b378-84ab0296c0e4")
+ (property "Reference" "J1" (at 35.56 38.10000000000001 0) (effects (font (size 1.27 1.27))))
+ (property "Value" "TYPE-C 16P" (at 35.56 40.64000000000001 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12" (at 35.56 66.04 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 35.56 66.04 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 35.56 66.04 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C393939" (at 35.56 66.04 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "S1" (uuid "a1de6b70-1980-5e70-8a31-4b9ae5950cdc"))
+ (pin "A1" (uuid "ad203bfc-8039-5ead-a880-e6603b70d356"))
+ (pin "A12" (uuid "9f93992a-75c0-5795-9e4d-89365e99675d"))
+ (pin "B1" (uuid "89a33519-f300-5221-b134-148e25d49006"))
+ (pin "B12" (uuid "0b748116-6859-52cf-affd-51517c12089a"))
+ (pin "A4" (uuid "6a7b01a0-3683-54ae-8f8c-849215439dec"))
+ (pin "A9" (uuid "51b00f67-71f6-5be9-87d5-4d41049f0624"))
+ (pin "B4" (uuid "9c86d820-5301-5f07-98ec-3e7cf4e6c045"))
+ (pin "B9" (uuid "02f539d6-2953-5173-9756-ec6873e8010d"))
+ (pin "A5" (uuid "80b992c9-9db1-5322-8eff-e1278162ae5d"))
+ (pin "B5" (uuid "89485fde-36cc-55be-8541-2faf8f68ffa8"))
+ (pin "A7" (uuid "1ea8d4a0-8b97-5d66-b77b-5e768c24ebf5"))
+ (pin "B7" (uuid "b7682997-3a17-509a-a68c-686a93c1f041"))
+ (pin "A6" (uuid "ff4d185c-c212-5ec5-825b-da8166e36515"))
+ (pin "B6" (uuid "6d16f07b-115c-5cda-ae3f-cfa985e113a1"))
+ (pin "A8" (uuid "1da6fb2d-13f6-5252-b8f4-8d008d000619"))
+ (pin "B8" (uuid "9872484c-71ce-5768-b3a7-cfa109bc8299"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "J1") (unit 1))))
+ )
+ (symbol (lib_id "Switch:SW_Push") (at 78.74 83.82 270) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "cc9ce13b-2c33-57ef-aa92-51d54ee14419")
+ (property "Reference" "SW1" (at 76.19999999999999 82.55 270) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "TS-1187A (BOOT)" (at 76.19999999999999 85.08999999999999 270) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "Button_Switch_SMD:SW_Push_1P1T_XKB_TS-1187A" (at 78.74 83.82 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 78.74 83.82 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 78.74 83.82 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C318884" (at 78.74 83.82 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "538aa2d2-bc84-59ff-b509-b4a4d6d3df6d"))
+ (pin "2" (uuid "c8f4cddc-1c99-550e-b0d7-4252e69f2087"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "SW1") (unit 1))))
+ )
+ (symbol (lib_id "Device:R") (at 78.74 72.39 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "1ed47f11-8c6d-55cd-a6f7-1ea99411be78")
+ (property "Reference" "R9" (at 81.28 71.12 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "4.7k" (at 81.28 73.66 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "Resistor_SMD:R_0402_1005Metric" (at 78.74 72.39 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 78.74 72.39 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 78.74 72.39 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C25900" (at 78.74 72.39 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "42449452-d59b-583f-863f-c23f59d2e315"))
+ (pin "2" (uuid "38fd6dd0-6ff2-5192-bd5b-2b0cbbdb6675"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "R9") (unit 1))))
+ )
+ (symbol (lib_id "Device:R") (at 60.96 55.88 90) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "5c65a1d8-9e1b-5114-9020-2ddadf94851a")
+ (property "Reference" "R1" (at 58.42 53.975 90) (effects (font (size 1.27 1.27))))
+ (property "Value" "5.1k" (at 63.5 53.975 90) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "Resistor_SMD:R_0402_1005Metric" (at 60.96 55.88 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 60.96 55.88 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 60.96 55.88 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C25905" (at 60.96 55.88 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "52ba1824-639c-53f8-831a-9195258f6975"))
+ (pin "2" (uuid "276c20ac-026e-5779-8fe3-dcd5dec2c81b"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "R1") (unit 1))))
+ )
+ (symbol (lib_id "Device:R") (at 71.12 58.42 90) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "1491fe16-ca55-53ad-be4e-59be8e1cab04")
+ (property "Reference" "R2" (at 68.58 60.96 90) (effects (font (size 1.27 1.27))))
+ (property "Value" "5.1k" (at 73.66000000000001 60.96 90) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "Resistor_SMD:R_0402_1005Metric" (at 71.12 58.42 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 71.12 58.42 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 71.12 58.42 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C25905" (at 71.12 58.42 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "feb0aed9-43d5-5466-82a3-80a193fae221"))
+ (pin "2" (uuid "2bdb82c4-998d-5543-b584-498e073ef27e"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "R2") (unit 1))))
+ )
+ (symbol (lib_id "Device:C") (at 63.5 43.18 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "dd3f72af-8d1a-5366-8668-8ee5f6dd763f")
+ (property "Reference" "C1" (at 66.04 41.91 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "10u" (at 66.04 44.45 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 63.5 43.18 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 63.5 43.18 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 63.5 43.18 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C15850" (at 63.5 43.18 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "65165fb1-84ca-5dd3-90ad-6279cdeb45fa"))
+ (pin "2" (uuid "07d08b5f-df72-53c0-a219-1d2dc9353ac7"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "C1") (unit 1))))
+ )
+ (symbol (lib_id "Device:R") (at 72.39 35.56 90) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "36f4e2a4-4f94-578f-9e95-492d540d7427")
+ (property "Reference" "R3" (at 72.39 33.02 90) (effects (font (size 1.27 1.27))))
+ (property "Value" "10" (at 72.39 38.1 90) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "Resistor_SMD:R_0402_1005Metric" (at 72.39 35.56 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 72.39 35.56 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 72.39 35.56 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C25077" (at 72.39 35.56 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "4bbefd40-0ee2-52aa-a269-edd643d401df"))
+ (pin "2" (uuid "6b066a8c-af93-58ed-b65c-027f8e0e77d0"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "R3") (unit 1))))
+ )
+ (symbol (lib_id "Device:C") (at 83.82 43.18 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "6b8c0561-4ca7-54ed-997b-33d6cf817e70")
+ (property "Reference" "C2" (at 86.36 41.91 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "1u" (at 86.36 44.45 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "Capacitor_SMD:C_0402_1005Metric" (at 83.82 43.18 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 83.82 43.18 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 83.82 43.18 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C52923" (at 83.82 43.18 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "922bb6cf-ee37-56f9-bab6-5accff1c59d0"))
+ (pin "2" (uuid "8dae0ae5-9d28-5f08-85c8-46e7f31c3de1"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "C2") (unit 1))))
+ )
+ (symbol (lib_id "Device:C") (at 91.44 43.18 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "b6dd77ec-2530-5019-8ebf-82a63c3d4d68")
+ (property "Reference" "C3" (at 93.98 41.91 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "100n" (at 93.98 44.45 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "Capacitor_SMD:C_0402_1005Metric" (at 91.44 43.18 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 91.44 43.18 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 91.44 43.18 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C1525" (at 91.44 43.18 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "83d10f56-2ec2-5291-88ac-7bc6bf9af6db"))
+ (pin "2" (uuid "df4e1157-e953-5cee-a701-49238701dae1"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "C3") (unit 1))))
+ )
+ (symbol (lib_id "Device:Buzzer") (at 254.0 93.98 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "fb7fbca3-a358-5579-a36c-b58b156c5167")
+ (property "Reference" "BZ1" (at 256.54 88.9 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "MLT-8530" (at 256.54 99.06 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "calibrator:Buzzer_MLT-8530" (at 254.0 93.98 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 254.0 93.98 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 254.0 93.98 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C94599" (at 254.0 93.98 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "1c8de77a-1a85-5578-8251-23acabd9fdf9"))
+ (pin "2" (uuid "2a22bf31-eb0b-576b-bf54-72042952c33b"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "BZ1") (unit 1))))
+ )
+ (symbol (lib_id "Device:D") (at 241.29999999999998 88.9 270) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "808bdec2-a711-510e-a9f3-8b2c29f0eb89")
+ (property "Reference" "D2" (at 238.76 87.63000000000001 270) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "1N4148WS" (at 238.76 90.17 270) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "Diode_SMD:D_SOD-323" (at 241.29999999999998 88.9 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 241.29999999999998 88.9 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 241.29999999999998 88.9 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C2128" (at 241.29999999999998 88.9 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "f8fa2386-4124-5eba-9f56-7f1ac8b039e3"))
+ (pin "2" (uuid "c18ffb04-0702-517f-a521-c2a7212fe00d"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "D2") (unit 1))))
+ )
+ (symbol (lib_id "Transistor_BJT:Q_NPN_BEC") (at 238.76 104.14 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "b1451052-b7e6-5ad7-a23e-48c76ba5e66b")
+ (property "Reference" "Q1" (at 243.84 102.87 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "S8050" (at 243.84 105.41 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "Package_TO_SOT_SMD:SOT-23" (at 238.76 104.14 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 238.76 104.14 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 238.76 104.14 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C2146" (at 238.76 104.14 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "0382b400-966f-5358-9b66-3df15245feb2"))
+ (pin "3" (uuid "73a0668d-e34a-568a-aee8-a636085a7184"))
+ (pin "2" (uuid "6b6b74ab-20b2-52ba-8890-8f03b586fca5"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "Q1") (unit 1))))
+ )
+ (symbol (lib_id "Device:R") (at 223.52 104.14 90) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "125a660e-15f3-5fdd-a22b-ff5656cbb085")
+ (property "Reference" "R5" (at 223.52 101.6 90) (effects (font (size 1.27 1.27))))
+ (property "Value" "1k" (at 223.52 106.68 90) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "Resistor_SMD:R_0402_1005Metric" (at 223.52 104.14 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 223.52 104.14 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 223.52 104.14 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C11702" (at 223.52 104.14 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "9e4a73b3-e768-5dd0-8e15-7b9d63d160d3"))
+ (pin "2" (uuid "994498c2-c07e-51d9-aff4-11fd5f0712dd"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "R5") (unit 1))))
+ )
+ (symbol (lib_id "Device:R") (at 231.14 111.76 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "4d1fd7fe-d235-5769-928b-26097f2424fb")
+ (property "Reference" "R6" (at 233.67999999999998 110.49000000000001 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "100k" (at 233.67999999999998 113.03 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "Resistor_SMD:R_0402_1005Metric" (at 231.14 111.76 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 231.14 111.76 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 231.14 111.76 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C25741" (at 231.14 111.76 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "274b48a5-8a9c-5c79-b9a7-a27b1c5b0356"))
+ (pin "2" (uuid "0564fed1-0528-5904-8509-7ef185ea0ec1"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "R6") (unit 1))))
+ )
+ (symbol (lib_id "Device:R") (at 223.52 66.04 90) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "23dd1b7b-5183-5c52-a0b3-b129887282e2")
+ (property "Reference" "R4" (at 223.52 63.50000000000001 90) (effects (font (size 1.27 1.27))))
+ (property "Value" "150" (at 223.52 68.58000000000001 90) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "Resistor_SMD:R_0603_1608Metric" (at 223.52 66.04 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 223.52 66.04 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 223.52 66.04 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C22808" (at 223.52 66.04 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "4a959b02-3ee5-571d-a634-268e394eb8a9"))
+ (pin "2" (uuid "b30616cd-2404-545b-8540-2bda94ffaecc"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "R4") (unit 1))))
+ )
+ (symbol (lib_id "Device:LED") (at 238.76 66.04 180) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "afc5edbb-5c76-5319-a5e4-61bf316ff0d9")
+ (property "Reference" "D1" (at 238.76 59.690000000000005 0) (effects (font (size 1.27 1.27))))
+ (property "Value" "XL-3216UWC-FB white" (at 238.76 62.230000000000004 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "calibrator:LED_1206_ReverseMount_XL-3216UWC-FB" (at 238.76 66.04 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 238.76 66.04 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 238.76 66.04 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C3646935" (at 238.76 66.04 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "96b5248a-846e-5ba3-b398-269ce50f2405"))
+ (pin "2" (uuid "03c20750-5e7e-5f5f-86e8-58b05cb82228"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "D1") (unit 1))))
+ )
+ (symbol (lib_id "Device:Q_Photo_NPN") (at 114.3 88.89999999999999 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "44d8e85b-ae32-5906-b67a-ac6836e6635b")
+ (property "Reference" "Q2" (at 119.38 87.63 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "VEMT2500X01" (at 119.38 90.16999999999999 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "calibrator:Vishay_VEMT2500X01_ReverseGullwing" (at 114.3 88.89999999999999 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 114.3 88.89999999999999 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 114.3 88.89999999999999 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C3210911" (at 114.3 88.89999999999999 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "19bbe42e-3ad5-5974-afa8-fbc14a16dfed"))
+ (pin "2" (uuid "b0fb1808-bc67-5307-a0c5-b219610b162b"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "Q2") (unit 1))))
+ )
+ (symbol (lib_id "Device:R") (at 127.0 106.67999999999999 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "58b2044a-3284-55c4-b4bc-ab3bfe0a4838")
+ (property "Reference" "R7" (at 129.54 105.41 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "22k" (at 129.54 107.94999999999999 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "Resistor_SMD:R_0402_1005Metric" (at 127.0 106.67999999999999 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 127.0 106.67999999999999 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 127.0 106.67999999999999 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C25768" (at 127.0 106.67999999999999 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "e280e7b4-da28-58e8-b46a-e46c152e3d6f"))
+ (pin "2" (uuid "eaa675de-b0dd-5aaa-a735-f20a33e8a0db"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "R7") (unit 1))))
+ )
+ (symbol (lib_id "Device:C") (at 137.16 106.67999999999999 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "1c3c34bd-2c7e-5342-b666-947a8bf03312")
+ (property "Reference" "C4" (at 139.7 105.41 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "1n" (at 139.7 107.94999999999999 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "Capacitor_SMD:C_0402_1005Metric" (at 137.16 106.67999999999999 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 137.16 106.67999999999999 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 137.16 106.67999999999999 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C1523" (at 137.16 106.67999999999999 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "9e7d7a06-68cf-574f-9ede-c8c3e3bf3f38"))
+ (pin "2" (uuid "1a7e2f2b-66ed-5e78-a8a5-1d9190f5e6c5"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "C4") (unit 1))))
+ )
+ (symbol (lib_id "Device:Q_Photo_NPN") (at 114.3 121.92 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "d00e3618-154d-52c9-897e-eed845b8807a")
+ (property "Reference" "Q3" (at 119.38 120.65 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "VEMT2500X01" (at 119.38 123.19 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "calibrator:Vishay_VEMT2500X01_ReverseGullwing" (at 114.3 121.92 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 114.3 121.92 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 114.3 121.92 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C3210911" (at 114.3 121.92 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "d3424aea-5975-500f-b0e0-48003e7c0b4b"))
+ (pin "2" (uuid "db501aa6-e322-52f5-b1b8-d3da7a57fbbe"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "Q3") (unit 1))))
+ )
+ (symbol (lib_id "Device:R") (at 127.0 139.70000000000002 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "95e9233e-a082-59f2-86a3-6582479cab74")
+ (property "Reference" "R8" (at 129.54 138.43 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "22k" (at 129.54 140.97000000000003 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "Resistor_SMD:R_0402_1005Metric" (at 127.0 139.70000000000002 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 127.0 139.70000000000002 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 127.0 139.70000000000002 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C25768" (at 127.0 139.70000000000002 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "c3538d7c-cca6-5f0d-9857-3359c2b21c69"))
+ (pin "2" (uuid "8d7e2ef4-92c7-5d2b-853b-d5c58b172730"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "R8") (unit 1))))
+ )
+ (symbol (lib_id "Device:C") (at 137.16 139.70000000000002 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "86c2c6b3-663f-55f3-b398-c8f9014c8136")
+ (property "Reference" "C5" (at 139.7 138.43 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "1n" (at 139.7 140.97000000000003 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "Capacitor_SMD:C_0402_1005Metric" (at 137.16 139.70000000000002 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 137.16 139.70000000000002 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 137.16 139.70000000000002 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "LCSC" "C1523" (at 137.16 139.70000000000002 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "8c0d8a63-832d-5688-bdbc-ea5153355d2e"))
+ (pin "2" (uuid "ff1aa9fa-57f3-5dee-9895-77b7f922bf04"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "C5") (unit 1))))
+ )
+ (symbol (lib_id "power:VBUS") (at 55.88 35.56 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "35ce0985-9bd4-5906-beb4-5a1d08fd597c")
+ (property "Reference" "#PWR001" (at 55.88 31.750000000000004 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "VBUS" (at 55.88 31.750000000000004 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 55.88 35.56 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 55.88 35.56 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 55.88 35.56 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "b822f5be-006a-51d7-9963-99fb5a01e430"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR001") (unit 1))))
+ )
+ (symbol (lib_id "power:VDD") (at 99.06 35.56 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "3b22c133-e347-5b7e-869d-5b45d9f3e2b4")
+ (property "Reference" "#PWR002" (at 99.06 31.750000000000004 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "VDD" (at 99.06 31.750000000000004 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 99.06 35.56 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 99.06 35.56 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 99.06 35.56 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "75ce5947-54c7-549a-9860-9590c56cae56"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR002") (unit 1))))
+ )
+ (symbol (lib_id "power:GND") (at 35.56 93.98 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "9f594c13-e5c1-5c2c-ac1e-4038fead92db")
+ (property "Reference" "#PWR003" (at 35.56 97.79 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "GND" (at 35.56 97.79 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 35.56 93.98 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 35.56 93.98 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 35.56 93.98 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "5d30f6da-5251-5dbd-a853-159c88e79f14"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR003") (unit 1))))
+ )
+ (symbol (lib_id "power:GND") (at 63.5 48.260000000000005 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "d0ab301a-fe07-5b74-ac55-b8837ba8e3af")
+ (property "Reference" "#PWR004" (at 63.5 52.07000000000001 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "GND" (at 63.5 52.07000000000001 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 63.5 48.260000000000005 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 63.5 48.260000000000005 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 63.5 48.260000000000005 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "361efd77-4fb5-5f65-807d-587cb952cf1b"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR004") (unit 1))))
+ )
+ (symbol (lib_id "power:GND") (at 83.82 48.260000000000005 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "30ad7f23-a6c4-59e5-a58d-91ba3328824a")
+ (property "Reference" "#PWR005" (at 83.82 52.07000000000001 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "GND" (at 83.82 52.07000000000001 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 83.82 48.260000000000005 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 83.82 48.260000000000005 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 83.82 48.260000000000005 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "4799f0eb-7c81-5fbe-9330-cf52ee35eda5"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR005") (unit 1))))
+ )
+ (symbol (lib_id "power:GND") (at 91.44 48.260000000000005 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "7ed3fe26-0f6b-5380-af40-099cdcd8b90d")
+ (property "Reference" "#PWR006" (at 91.44 52.07000000000001 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "GND" (at 91.44 52.07000000000001 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 91.44 48.260000000000005 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 91.44 48.260000000000005 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 91.44 48.260000000000005 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "7ec43f84-225c-53b2-b6a1-926c81df9452"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR006") (unit 1))))
+ )
+ (symbol (lib_id "power:GND") (at 78.74 58.42 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "f5ea70dc-7aa3-513e-9aa5-fb0a84d29558")
+ (property "Reference" "#PWR007" (at 78.74 62.230000000000004 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "GND" (at 78.74 62.230000000000004 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 78.74 58.42 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 78.74 58.42 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 78.74 58.42 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "5f280c57-60e9-5e9c-ac51-3f347a549335"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR007") (unit 1))))
+ )
+ (symbol (lib_id "power:VDD") (at 78.74 91.44 180) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "5f908e78-ab6f-5f87-9ad6-a0a23dbd69bc")
+ (property "Reference" "#PWR008" (at 78.74 95.25 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "VDD" (at 78.74 95.25 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 78.74 91.44 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 78.74 91.44 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 78.74 91.44 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "499ead3e-a04a-5847-8718-a0ba3e914542"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR008") (unit 1))))
+ )
+ (symbol (lib_id "power:VDD") (at 116.84 81.28 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "ea7660e1-9c31-5243-a740-02cbe5fd809c")
+ (property "Reference" "#PWR009" (at 116.84 77.47 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "VDD" (at 116.84 77.47 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 116.84 81.28 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 116.84 81.28 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 116.84 81.28 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "44077a3a-5279-5955-8461-7b43a3930b66"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR009") (unit 1))))
+ )
+ (symbol (lib_id "power:VDD") (at 116.84 114.3 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "24af1ae1-de34-565e-a565-68e4cbcf781e")
+ (property "Reference" "#PWR010" (at 116.84 110.49 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "VDD" (at 116.84 110.49 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 116.84 114.3 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 116.84 114.3 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 116.84 114.3 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "2f57fd87-52a8-5220-8db6-988e650349fa"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR010") (unit 1))))
+ )
+ (symbol (lib_id "power:GND") (at 127.0 113.03 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "3a7e1f97-d549-5a76-8b33-0d40f9359bb8")
+ (property "Reference" "#PWR011" (at 127.0 116.84 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "GND" (at 127.0 116.84 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 127.0 113.03 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 127.0 113.03 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 127.0 113.03 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "1cce39f4-c7a5-542c-bdef-d5c5bd1d8b91"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR011") (unit 1))))
+ )
+ (symbol (lib_id "power:GND") (at 137.16 113.03 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "45bdcfdf-a354-52c0-8521-5f7876ec5a27")
+ (property "Reference" "#PWR012" (at 137.16 116.84 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "GND" (at 137.16 116.84 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 137.16 113.03 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 137.16 113.03 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 137.16 113.03 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "5bd2d7cd-93f6-52d7-ab5b-1b4ac0c39594"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR012") (unit 1))))
+ )
+ (symbol (lib_id "power:GND") (at 127.0 146.05 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "3608bb45-5b95-57bc-b7ac-957a1e6cd581")
+ (property "Reference" "#PWR013" (at 127.0 149.86 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "GND" (at 127.0 149.86 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 127.0 146.05 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 127.0 146.05 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 127.0 146.05 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "ae388825-c422-5917-b484-685fca05ddec"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR013") (unit 1))))
+ )
+ (symbol (lib_id "power:GND") (at 137.16 146.05 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "3d0755ed-3554-5057-a852-c1126f4fbb87")
+ (property "Reference" "#PWR014" (at 137.16 149.86 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "GND" (at 137.16 149.86 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 137.16 146.05 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 137.16 146.05 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 137.16 146.05 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "dfb29ffc-9b25-5425-9963-9661ce624371"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR014") (unit 1))))
+ )
+ (symbol (lib_id "power:VDD") (at 185.42 58.42 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "66caed7d-2098-5c06-a04e-a305b59179a4")
+ (property "Reference" "#PWR015" (at 185.42 54.61 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "VDD" (at 185.42 54.61 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 185.42 58.42 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 185.42 58.42 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 185.42 58.42 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "d1c6a2bb-85eb-5095-91c3-8d6c633592cd"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR015") (unit 1))))
+ )
+ (symbol (lib_id "power:GND") (at 185.42 111.76 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "55a48d37-3727-5115-baa6-c3544aa83da0")
+ (property "Reference" "#PWR016" (at 185.42 115.57000000000001 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "GND" (at 185.42 115.57000000000001 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 185.42 111.76 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 185.42 111.76 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 185.42 111.76 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "235c6828-4e0a-5df2-bf5c-feb5d86b5312"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR016") (unit 1))))
+ )
+ (symbol (lib_id "power:GND") (at 247.65 68.58 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "c733c395-4900-55be-b8f6-9af03c02810f")
+ (property "Reference" "#PWR017" (at 247.65 72.39 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "GND" (at 247.65 72.39 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 247.65 68.58 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 247.65 68.58 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 247.65 68.58 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "caf28636-8355-5632-ba4c-8fbc216dcdf4"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR017") (unit 1))))
+ )
+ (symbol (lib_id "power:GND") (at 231.14 118.11 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "0f67ad0b-4231-5844-a959-4db95d727209")
+ (property "Reference" "#PWR018" (at 231.14 121.92 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "GND" (at 231.14 121.92 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 231.14 118.11 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 231.14 118.11 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 231.14 118.11 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "db4fe632-bc03-5dc5-86e0-f93d9a195c25"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR018") (unit 1))))
+ )
+ (symbol (lib_id "power:GND") (at 241.29999999999998 111.76 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "73825071-1950-5d69-a199-c234065752ca")
+ (property "Reference" "#PWR019" (at 241.29999999999998 115.57000000000001 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "GND" (at 241.29999999999998 115.57000000000001 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 241.29999999999998 111.76 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 241.29999999999998 111.76 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 241.29999999999998 111.76 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "065a5088-f6a1-578b-85fa-496cda7e2742"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR019") (unit 1))))
+ )
+ (symbol (lib_id "power:VBUS") (at 241.29999999999998 81.28 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "e7e02b90-095e-56d9-83bd-578aefaa8909")
+ (property "Reference" "#PWR020" (at 241.29999999999998 77.47 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "VBUS" (at 241.29999999999998 77.47 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 241.29999999999998 81.28 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 241.29999999999998 81.28 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 241.29999999999998 81.28 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "00be4ac7-4dbe-5d1d-8d26-7aecc9092898"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#PWR020") (unit 1))))
+ )
+ (symbol (lib_id "power:PWR_FLAG") (at 55.88 50.8 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "d53a2823-cd2d-5fc1-aafa-e722fe76b92f")
+ (property "Reference" "#FLG01" (at 55.88 46.989999999999995 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "PWR_FLAG" (at 55.88 46.989999999999995 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 55.88 50.8 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 55.88 50.8 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 55.88 50.8 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "52180f13-ad63-50e8-8039-17522c862c6c"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#FLG01") (unit 1))))
+ )
+ (symbol (lib_id "power:PWR_FLAG") (at 27.94 93.98 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "3fdbc089-d41b-5412-99d7-9ff3a09a7e32")
+ (property "Reference" "#FLG02" (at 27.94 90.17 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "PWR_FLAG" (at 27.94 90.17 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 27.94 93.98 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 27.94 93.98 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 27.94 93.98 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "78d0c7b0-0f60-5829-8165-eda3085bd092"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#FLG02") (unit 1))))
+ )
+ (symbol (lib_id "power:PWR_FLAG") (at 83.82 35.56 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (uuid "927ad7fd-61d8-5f09-9851-96a3a653454c")
+ (property "Reference" "#FLG03" (at 83.82 31.750000000000004 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Value" "PWR_FLAG" (at 83.82 31.750000000000004 0) (effects (font (size 1.27 1.27))))
+ (property "Footprint" "" (at 83.82 35.56 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "~" (at 83.82 35.56 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "" (at 83.82 35.56 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (pin "1" (uuid "ddd14f1d-03e6-5e45-bc29-ce3e2c646fb3"))
+ (instances (project "calibrator" (path "/0d2859e4-133c-5efb-a230-be56cb52e344" (reference "#FLG03") (unit 1))))
+ )
+ (sheet_instances (path "/" (page "1")))
+ (embedded_fonts no)
+)
diff --git a/hardware/calibrator/calibrator.kicad_sym b/hardware/calibrator/calibrator.kicad_sym
new file mode 100644
index 0000000..a7fe495
--- /dev/null
+++ b/hardware/calibrator/calibrator.kicad_sym
@@ -0,0 +1,41 @@
+(kicad_symbol_lib (version 20241209) (generator "calibrator-gen") (generator_version "9.0")
+ (symbol "CH32X035G8R6" (pin_names (offset 1.016)) (exclude_from_sim no) (in_bom yes) (on_board yes)
+ (property "Reference" "U" (at -10.16 16.51 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Value" "CH32X035G8R6" (at 2.54 16.51 0) (effects (font (size 1.27 1.27)) (justify left)))
+ (property "Footprint" "Package_SO:QSOP-28_3.9x9.9mm_P0.635mm" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Datasheet" "https://www.wch.cn/products/CH32X035.html" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (property "Description" "WCH CH32X035G8R6, RISC-V, 62 KB flash, USB FS, 3 comparators, QSOP-28; pins grouped by use" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))
+ (symbol "CH32X035G8R6_0_1" (rectangle (start -15.24 15.24) (end 15.24 -27.94) (stroke (width 0.254) (type default)) (fill (type background))))
+ (symbol "CH32X035G8R6_1_1"
+ (pin bidirectional line (at -17.78 12.7 0) (length 2.54) (name "PC16/UDM" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 10.16 0) (length 2.54) (name "PC17/UDP/BOOT" (effects (font (size 1.27 1.27)))) (number "3" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 2.54 0) (length 2.54) (name "PA13/CMP3+" (effects (font (size 1.27 1.27)))) (number "5" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 0.0 0) (length 2.54) (name "PA0/ADC0" (effects (font (size 1.27 1.27)))) (number "9" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -2.54 0) (length 2.54) (name "PA2/CMP3-/ADC2" (effects (font (size 1.27 1.27)))) (number "11" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -7.62 0) (length 2.54) (name "PC19/SWCLK" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -10.16 0) (length 2.54) (name "PC18/SWDIO" (effects (font (size 1.27 1.27)))) (number "28" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -12.7 0) (length 2.54) (name "PC14/PA12" (effects (font (size 1.27 1.27)))) (number "4" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -15.24 0) (length 2.54) (name "PC3" (effects (font (size 1.27 1.27)))) (number "8" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -17.78 0) (length 2.54) (name "PA1" (effects (font (size 1.27 1.27)))) (number "10" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -20.32 0) (length 2.54) (name "PA3" (effects (font (size 1.27 1.27)))) (number "12" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -22.86 0) (length 2.54) (name "PA6" (effects (font (size 1.27 1.27)))) (number "13" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at -17.78 -25.4 0) (length 2.54) (name "PB0" (effects (font (size 1.27 1.27)))) (number "14" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 12.7 180) (length 2.54) (name "PA4" (effects (font (size 1.27 1.27)))) (number "15" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 10.16 180) (length 2.54) (name "PA5" (effects (font (size 1.27 1.27)))) (number "16" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 5.08 180) (length 2.54) (name "PA7" (effects (font (size 1.27 1.27)))) (number "17" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 2.54 180) (length 2.54) (name "PB3/CMP3 out" (effects (font (size 1.27 1.27)))) (number "18" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 0.0 180) (length 2.54) (name "PB4" (effects (font (size 1.27 1.27)))) (number "19" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 -2.54 180) (length 2.54) (name "PB1/PB5" (effects (font (size 1.27 1.27)))) (number "20" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 -5.08 180) (length 2.54) (name "PB6" (effects (font (size 1.27 1.27)))) (number "21" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 -7.62 180) (length 2.54) (name "PB7" (effects (font (size 1.27 1.27)))) (number "22" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 -10.16 180) (length 2.54) (name "PB8" (effects (font (size 1.27 1.27)))) (number "23" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 -12.7 180) (length 2.54) (name "PB9" (effects (font (size 1.27 1.27)))) (number "24" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 -15.24 180) (length 2.54) (name "PB10" (effects (font (size 1.27 1.27)))) (number "25" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 -17.78 180) (length 2.54) (name "PB11" (effects (font (size 1.27 1.27)))) (number "26" (effects (font (size 1.27 1.27)))))
+ (pin bidirectional line (at 17.78 -20.32 180) (length 2.54) (name "PB12" (effects (font (size 1.27 1.27)))) (number "27" (effects (font (size 1.27 1.27)))))
+ (pin power_in line (at 0.0 17.78 270) (length 2.54) (name "VDD" (effects (font (size 1.27 1.27)))) (number "6" (effects (font (size 1.27 1.27)))))
+ (pin power_in line (at 0.0 -30.48 90) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "7" (effects (font (size 1.27 1.27)))))
+ )
+ (embedded_fonts no)
+ )
+)
diff --git a/hardware/calibrator/calibrator.pretty/Buzzer_MLT-8530.kicad_mod b/hardware/calibrator/calibrator.pretty/Buzzer_MLT-8530.kicad_mod
new file mode 100644
index 0000000..874e7b9
--- /dev/null
+++ b/hardware/calibrator/calibrator.pretty/Buzzer_MLT-8530.kicad_mod
@@ -0,0 +1,34 @@
+(footprint "Buzzer_MLT-8530"
+ (version 20241229)
+ (generator "calibrator-gen")
+ (generator_version "9.0")
+ (layer "F.Cu")
+ (descr "Magnetic buzzer Huaneng MLT-8530 8.5x8.5x3mm SMD, sound port on +x side, datasheet LCSC C94599")
+ (property "Reference" "REF**" (at 0 -5.6 0) (layer "F.SilkS") (uuid "5ed8a1a8-43d8-5629-a3b0-17b97068fde5") (effects (font (size 0.8 0.8) (thickness 0.12))))
+ (property "Value" "Buzzer_MLT-8530" (at 0 5.6 0) (layer "F.Fab") (uuid "5a27c249-d2b9-50a8-a023-7f95049753a3") (effects (font (size 0.8 0.8) (thickness 0.12))))
+ (property "Datasheet" "" (at 0 0 0) (layer "F.Fab") (hide yes) (uuid "ab9c482c-fb0f-57b9-b24c-23b55a9caef2") (effects (font (size 0.8 0.8) (thickness 0.12))))
+ (property "Description" "" (at 0 0 0) (layer "F.Fab") (hide yes) (uuid "57a56042-b401-5880-9437-5a9d535b9dd6") (effects (font (size 0.8 0.8) (thickness 0.12))))
+ (attr smd)
+ (pad "1" smd roundrect (at -3.550 -3.550 0) (size 2.3 2.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.15) (uuid "584b68b8-d41f-5c0d-a1ab-5ff5887b4765"))
+ (pad "2" smd roundrect (at -3.550 3.550 0) (size 2.3 2.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.15) (uuid "f28dcd66-ab37-5cc5-a9b8-b00ecf441c52"))
+ (pad "" smd roundrect (at 3.550 -3.550 0) (size 2.3 2.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.15) (uuid "8ea5a9c0-6347-5f1d-9c94-35edeca38640"))
+ (pad "" smd roundrect (at 3.550 3.550 0) (size 2.3 2.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.15) (uuid "d4bfc07c-26e5-506d-b444-ec3b9179d5e6"))
+ (fp_line (start -4.250 -4.250) (end 4.250 -4.250) (stroke (width 0.1) (type solid)) (layer "F.Fab") (uuid "0b2e9760-3b52-5724-a89e-4b13279b513b"))
+ (fp_line (start 4.250 -4.250) (end 4.250 4.250) (stroke (width 0.1) (type solid)) (layer "F.Fab") (uuid "21dd30a6-b214-58de-b0e5-ac94b7803455"))
+ (fp_line (start 4.250 4.250) (end -4.250 4.250) (stroke (width 0.1) (type solid)) (layer "F.Fab") (uuid "774abf8f-f4dc-5c38-9138-720a4ffe56ca"))
+ (fp_line (start -4.250 4.250) (end -4.250 -4.250) (stroke (width 0.1) (type solid)) (layer "F.Fab") (uuid "d85e05c3-3ac1-56ce-9920-8cd443ddfc71"))
+ (fp_line (start -5.000 -5.000) (end 5.000 -5.000) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (uuid "2aacef1d-5b8c-5434-ac99-a4394f78cf1b"))
+ (fp_line (start 5.000 -5.000) (end 5.000 5.000) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (uuid "470c0a66-a440-512a-bee5-2f521f5d3142"))
+ (fp_line (start 5.000 5.000) (end -5.000 5.000) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (uuid "31a61962-bc81-5c7a-a60b-316ee1fb0e7c"))
+ (fp_line (start -5.000 5.000) (end -5.000 -5.000) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (uuid "9bb7e926-3010-5206-b335-2ecf120f2709"))
+ (fp_line (start -4.350 -2.200) (end -4.350 2.200) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (uuid "c69b93d7-bcea-5a17-9497-2c0910db8dde"))
+ (fp_line (start 4.350 -2.200) (end 4.350 2.200) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (uuid "99dc41c5-cca6-514f-9737-d6b81412db48"))
+ (fp_line (start -2.200 -4.350) (end 2.200 -4.350) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (uuid "1ab0d342-7b23-50dd-acaa-609af67e0a83"))
+ (fp_line (start -2.200 4.350) (end 2.200 4.350) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (uuid "2bde25aa-5def-5f57-9d74-f4525a3e964d"))
+ (fp_line (start -5.600 -3.550) (end -4.900 -3.550) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (uuid "6c80c8d6-05a3-5413-9280-6ac8abdcf829"))
+ (fp_line (start -5.250 -3.900) (end -5.250 -3.200) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (uuid "e829a112-568e-51cb-88b7-ddc19282b8c3"))
+ (fp_line (start 2.600 0.000) (end 3.600 0.000) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (uuid "3d4cb0a0-ae36-54f7-9089-e4e2a38e5b23"))
+ (fp_line (start 3.600 0.000) (end 3.100 -0.400) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (uuid "2c89aff9-5432-5646-8da7-2537c56cc10c"))
+ (fp_line (start 3.600 0.000) (end 3.100 0.400) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (uuid "8c97ecdc-c28a-5fb5-83f6-99ddf938b519"))
+ (model "${KIPRJMOD}/3d/MLT-8530.wrl" (offset (xyz 0 0 0.0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)))
+)
diff --git a/hardware/calibrator/calibrator.pretty/LED_1206_ReverseMount_XL-3216UWC-FB.kicad_mod b/hardware/calibrator/calibrator.pretty/LED_1206_ReverseMount_XL-3216UWC-FB.kicad_mod
new file mode 100644
index 0000000..f0b836f
--- /dev/null
+++ b/hardware/calibrator/calibrator.pretty/LED_1206_ReverseMount_XL-3216UWC-FB.kicad_mod
@@ -0,0 +1,32 @@
+(footprint "LED_1206_ReverseMount_XL-3216UWC-FB"
+ (version 20241229)
+ (generator "calibrator-gen")
+ (generator_version "9.0")
+ (layer "F.Cu")
+ (descr "Reverse mount 1206 LED shining through a board cut-out, XINGLIGHT XL-3216UWC-FB (LCSC C3646935); Lite-On LTW-C230DS fits the same footprint")
+ (property "Reference" "REF**" (at 0 -1.8 0) (layer "F.SilkS") (uuid "d8fee894-bbb0-562e-8b13-d0de2454b437") (effects (font (size 0.8 0.8) (thickness 0.12))))
+ (property "Value" "LED_1206_ReverseMount_XL-3216UWC-FB" (at 0 1.8 0) (layer "F.Fab") (uuid "c4277440-bb36-5f32-87e7-e61c8eac1cd7") (effects (font (size 0.8 0.8) (thickness 0.12))))
+ (property "Datasheet" "" (at 0 0 0) (layer "F.Fab") (hide yes) (uuid "4782df8f-f463-5b75-af18-fe60ff0945f1") (effects (font (size 0.8 0.8) (thickness 0.12))))
+ (property "Description" "" (at 0 0 0) (layer "F.Fab") (hide yes) (uuid "a2969006-da72-5e9e-a404-ca36b650990a") (effects (font (size 0.8 0.8) (thickness 0.12))))
+ (attr smd)
+ (pad "1" smd roundrect (at -1.700 0.000 0) (size 0.7 1.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.15) (uuid "50fbf83e-2c4a-5840-aaa6-b0f90b104782"))
+ (pad "2" smd roundrect (at 1.700 0.000 0) (size 0.7 1.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.15) (uuid "739fb73f-3e0d-5098-b2a4-eff537723231"))
+ (fp_line (start -0.550 -0.850) (end 0.550 -0.850) (stroke (width 0.05) (type solid)) (layer "Edge.Cuts") (uuid "06cc8e72-97e0-5f39-9e23-1df9cd8599e5"))
+ (fp_line (start 1.050 -0.350) (end 1.050 0.350) (stroke (width 0.05) (type solid)) (layer "Edge.Cuts") (uuid "e93852e8-fcfa-5c44-bd49-80fe36bf73ae"))
+ (fp_line (start 0.550 0.850) (end -0.550 0.850) (stroke (width 0.05) (type solid)) (layer "Edge.Cuts") (uuid "812b1f4f-9dff-5512-adfc-708203d78b77"))
+ (fp_line (start -1.050 0.350) (end -1.050 -0.350) (stroke (width 0.05) (type solid)) (layer "Edge.Cuts") (uuid "18f31989-210f-55ed-82a0-cb30e98b1f4f"))
+ (fp_arc (start 0.5500 -0.8500) (mid 0.9036 -0.7036) (end 1.0500 -0.3500) (stroke (width 0.05) (type solid)) (layer "Edge.Cuts") (uuid "0f38c114-48e6-5ee8-93c6-9fc21ca5f9cc"))
+ (fp_arc (start 1.0500 0.3500) (mid 0.9036 0.7036) (end 0.5500 0.8500) (stroke (width 0.05) (type solid)) (layer "Edge.Cuts") (uuid "8ec0d955-1622-5337-9370-e98ab7af7aa8"))
+ (fp_arc (start -0.5500 0.8500) (mid -0.9036 0.7036) (end -1.0500 0.3500) (stroke (width 0.05) (type solid)) (layer "Edge.Cuts") (uuid "4a28de63-5a3d-52a5-9fca-7490bb33ae25"))
+ (fp_arc (start -1.0500 -0.3500) (mid -0.9036 -0.7036) (end -0.5500 -0.8500) (stroke (width 0.05) (type solid)) (layer "Edge.Cuts") (uuid "943aa0d1-dbbf-5801-a3d8-9a05e5fccd10"))
+ (fp_line (start -1.600 -0.800) (end 1.600 -0.800) (stroke (width 0.1) (type solid)) (layer "F.Fab") (uuid "4a2372a3-081e-560f-b1f4-0a547363fc02"))
+ (fp_line (start 1.600 -0.800) (end 1.600 0.800) (stroke (width 0.1) (type solid)) (layer "F.Fab") (uuid "9a8b29db-1e00-5c82-99a7-ed6583ea93ee"))
+ (fp_line (start 1.600 0.800) (end -1.600 0.800) (stroke (width 0.1) (type solid)) (layer "F.Fab") (uuid "8fe06ccb-9256-5226-8bc7-28da5961e6d2"))
+ (fp_line (start -1.600 0.800) (end -1.600 -0.800) (stroke (width 0.1) (type solid)) (layer "F.Fab") (uuid "1ba282ac-5f1d-5e0d-b08f-110b4751cb0d"))
+ (fp_line (start -2.300 -1.100) (end 2.300 -1.100) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (uuid "eb97c25d-2719-5fed-8ccb-163bd30f84f9"))
+ (fp_line (start 2.300 -1.100) (end 2.300 1.100) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (uuid "984e8138-2fe1-5851-94ea-d56c30f74240"))
+ (fp_line (start 2.300 1.100) (end -2.300 1.100) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (uuid "0ec28024-5a23-5d6e-b90d-ed19dd0b950f"))
+ (fp_line (start -2.300 1.100) (end -2.300 -1.100) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (uuid "ec543e23-6bbd-5ed5-916d-38c814c5f3ee"))
+ (fp_line (start -2.450 -1.000) (end -2.450 1.000) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (uuid "8d778bd8-b821-5480-883e-5f5fa6a2e4e1"))
+ (model "${KIPRJMOD}/3d/LED_reverse_1206.wrl" (offset (xyz 0 0 0.0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)))
+)
diff --git a/hardware/calibrator/calibrator.pretty/Vishay_VEMT2500X01_ReverseGullwing.kicad_mod b/hardware/calibrator/calibrator.pretty/Vishay_VEMT2500X01_ReverseGullwing.kicad_mod
new file mode 100644
index 0000000..fbe31ac
--- /dev/null
+++ b/hardware/calibrator/calibrator.pretty/Vishay_VEMT2500X01_ReverseGullwing.kicad_mod
@@ -0,0 +1,27 @@
+(footprint "Vishay_VEMT2500X01_ReverseGullwing"
+ (version 20241229)
+ (generator "calibrator-gen")
+ (generator_version "9.0")
+ (layer "F.Cu")
+ (descr "Phototransistor Vishay VEMT2500X01 reverse gullwing, lens looks through a 2.3 mm hole; VEMT2000X01 is the same package")
+ (property "Reference" "REF**" (at 0 -2.0 0) (layer "F.SilkS") (uuid "93b72097-f54c-5997-99cf-6b37f64a2705") (effects (font (size 0.8 0.8) (thickness 0.12))))
+ (property "Value" "Vishay_VEMT2500X01_ReverseGullwing" (at 0 2.0 0) (layer "F.Fab") (uuid "dfc45deb-66d6-5f0a-8a3b-0b7e16c7c241") (effects (font (size 0.8 0.8) (thickness 0.12))))
+ (property "Datasheet" "" (at 0 0 0) (layer "F.Fab") (hide yes) (uuid "df1f2a35-fdda-5a8a-a62f-7e059aeddb36") (effects (font (size 0.8 0.8) (thickness 0.12))))
+ (property "Description" "" (at 0 0 0) (layer "F.Fab") (hide yes) (uuid "5595095e-7015-5cc6-9b7e-a026aad45826") (effects (font (size 0.8 0.8) (thickness 0.12))))
+ (attr smd)
+ (pad "1" smd roundrect (at -2.500 0.000 0) (size 1.7 0.75) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.15) (uuid "7a3f1345-4e20-57ca-a77e-952e72f5c911"))
+ (pad "2" smd roundrect (at 2.500 0.000 0) (size 1.7 0.75) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.15) (uuid "cb3c808d-2d3b-5546-a34d-f32610ea481a"))
+ (pad "" np_thru_hole circle (at 0 0) (size 2.3 2.3) (drill 2.3) (layers "*.Cu" "*.Mask") (uuid "cc2b6fd0-8452-5f10-b460-f6055e30d490"))
+ (fp_line (start -1.150 -1.150) (end 1.150 -1.150) (stroke (width 0.1) (type solid)) (layer "F.Fab") (uuid "c5cf1ebe-f6b9-5276-82bb-e0dc863ddf4a"))
+ (fp_line (start 1.150 -1.150) (end 1.150 1.150) (stroke (width 0.1) (type solid)) (layer "F.Fab") (uuid "bc457dea-e439-5349-9219-5a7e0e8680e0"))
+ (fp_line (start 1.150 1.150) (end -1.150 1.150) (stroke (width 0.1) (type solid)) (layer "F.Fab") (uuid "90a9d40e-aedd-5d74-9214-2252f011e298"))
+ (fp_line (start -1.150 1.150) (end -1.150 -1.150) (stroke (width 0.1) (type solid)) (layer "F.Fab") (uuid "52720ccf-84d9-5ed5-8e59-411cbd9ef65c"))
+ (fp_line (start -3.600 -1.600) (end 3.600 -1.600) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (uuid "70238595-43b2-502b-9e26-0d00bf52dd55"))
+ (fp_line (start 3.600 -1.600) (end 3.600 1.600) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (uuid "333408bc-c14e-57d6-a5be-d5bb0b688b04"))
+ (fp_line (start 3.600 1.600) (end -3.600 1.600) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (uuid "513f4bd9-746d-5f9c-afe0-e6f992b84785"))
+ (fp_line (start -3.600 1.600) (end -3.600 -1.600) (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (uuid "b1bb75a3-264c-5066-9967-81d8c1dd5c43"))
+ (fp_line (start -1.250 -1.250) (end 1.250 -1.250) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (uuid "d54fc043-a91a-5f26-8555-7b42fff7c6d0"))
+ (fp_line (start -1.250 1.250) (end 1.250 1.250) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (uuid "9e94c318-e682-5878-bbdd-5caa370e2fd0"))
+ (fp_line (start -1.250 -1.250) (end -1.250 -0.600) (stroke (width 0.12) (type solid)) (layer "F.SilkS") (uuid "c8d80374-9e37-5bcd-a788-f985a75d1ba7"))
+ (model "${KIPRJMOD}/3d/VEMT2500X01_RGW.wrl" (offset (xyz 0 0 0.0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)))
+)
diff --git a/hardware/calibrator/fab/calibrator-bom-jlc.csv b/hardware/calibrator/fab/calibrator-bom-jlc.csv
new file mode 100644
index 0000000..598a8c8
--- /dev/null
+++ b/hardware/calibrator/fab/calibrator-bom-jlc.csv
@@ -0,0 +1,20 @@
+Comment,Designator,Footprint,LCSC Part #
+MLT-8530,BZ1,Buzzer_MLT-8530,C94599
+10u,C1,C_0805_2012Metric,C15850
+1u,C2,C_0402_1005Metric,C52923
+100n,C3,C_0402_1005Metric,C1525
+1n,"C4,C5",C_0402_1005Metric,C1523
+XL-3216UWC-FB white,D1,LED_1206_ReverseMount_XL-3216UWC-FB,C3646935
+1N4148WS,D2,D_SOD-323,C2128
+TYPE-C 16P,J1,USB_C_Receptacle_HRO_TYPE-C-31-M-12,C393939
+S8050,Q1,SOT-23,C2146
+VEMT2500X01,"Q2,Q3",Vishay_VEMT2500X01_ReverseGullwing,C3210911
+5.1k,"R1,R2",R_0402_1005Metric,C25905
+10,R3,R_0402_1005Metric,C25077
+150,R4,R_0603_1608Metric,C22808
+1k,R5,R_0402_1005Metric,C11702
+100k,R6,R_0402_1005Metric,C25741
+22k,"R7,R8",R_0402_1005Metric,C25768
+4.7k,R9,R_0402_1005Metric,C25900
+TS-1187A (BOOT),SW1,SW_Push_1P1T_XKB_TS-1187A,C318884
+CH32X035G8R6,U1,QSOP-28_3.9x9.9mm_P0.635mm,C49118551
diff --git a/hardware/calibrator/fab/calibrator-cpl-jlc.csv b/hardware/calibrator/fab/calibrator-cpl-jlc.csv
new file mode 100644
index 0000000..363e5c7
--- /dev/null
+++ b/hardware/calibrator/fab/calibrator-cpl-jlc.csv
@@ -0,0 +1,24 @@
+Designator,Mid X,Mid Y,Layer,Rotation
+BZ1,114.6000mm,-111.0000mm,Top,180
+C1,156.6000mm,-102.8000mm,Top,0
+C2,133.6000mm,-112.0000mm,Top,90
+C3,135.0000mm,-112.0000mm,Top,90
+C4,135.0000mm,-108.4000mm,Top,90
+C5,135.0000mm,-105.4000mm,Top,90
+D1,104.4000mm,-111.0000mm,Top,0
+D2,121.6000mm,-104.3000mm,Top,90
+J1,162.6500mm,-111.0000mm,Top,270
+Q1,121.6000mm,-117.6000mm,Top,270
+Q2,105.0000mm,-106.5000mm,Top,0
+Q3,105.0000mm,-115.5000mm,Top,0
+R1,156.6000mm,-107.0000mm,Top,90
+R2,156.6000mm,-115.0000mm,Top,90
+R3,134.3000mm,-102.4000mm,Top,0
+R4,123.2000mm,-109.6000mm,Top,90
+R5,124.4000mm,-115.4000mm,Top,90
+R6,124.4000mm,-119.6000mm,Top,0
+R7,133.6000mm,-108.4000mm,Top,90
+R8,133.6000mm,-105.4000mm,Top,90
+R9,140.5000mm,-116.6000mm,Top,90
+SW1,140.5000mm,-106.0000mm,Top,0
+U1,129.0000mm,-111.0000mm,Top,90
diff --git a/hardware/calibrator/fab/calibrator-gerbers.zip b/hardware/calibrator/fab/calibrator-gerbers.zip
new file mode 100644
index 0000000..757a9e5
Binary files /dev/null and b/hardware/calibrator/fab/calibrator-gerbers.zip differ
diff --git a/hardware/calibrator/firmware/.gitignore b/hardware/calibrator/firmware/.gitignore
new file mode 100644
index 0000000..567609b
--- /dev/null
+++ b/hardware/calibrator/firmware/.gitignore
@@ -0,0 +1 @@
+build/
diff --git a/hardware/calibrator/firmware/Makefile b/hardware/calibrator/firmware/Makefile
new file mode 100644
index 0000000..75d80a8
--- /dev/null
+++ b/hardware/calibrator/firmware/Makefile
@@ -0,0 +1,54 @@
+# AV Sync calibrator firmware (WCH CH32X035G8R6, RISC-V). Needs a RISC-V GCC in PATH.
+# make xPack riscv-none-elf-gcc (default prefix)
+# make CROSS=riscv64-unknown-elf- Ubuntu/Debian gcc-riscv64-unknown-elf
+# make test host unit tests (plain cc)
+# make clean
+
+CROSS ?= riscv-none-elf-
+CC_RV := $(CROSS)gcc
+OBJCOPY := $(CROSS)objcopy
+SIZE := $(CROSS)size
+HOSTCC ?= cc
+
+BUILD := build
+SRCS := src/startup.c src/main.c src/cal_logic.c
+OBJS := $(SRCS:src/%.c=$(BUILD)/%.o)
+
+# Plain RV32IMAC (no WCH vendor extensions), no C library.
+ARCH := -march=rv32imac_zicsr -mabi=ilp32 -mcmodel=medlow
+CFLAGS := $(ARCH) -Os -std=c11 -g \
+ -ffunction-sections -fdata-sections -ffreestanding -fno-tree-loop-distribute-patterns \
+ -Wall -Wextra -Werror -Isrc -Ivendor $(EXTRA_CFLAGS)
+LDFLAGS := $(ARCH) -nostartfiles -nostdlib -Tsrc/ch32x035.ld \
+ -Wl,--gc-sections -Wl,-Map=$(BUILD)/calibrator.map
+
+HOST_CFLAGS := -std=c11 -O1 -g -Wall -Wextra -Werror
+
+.PHONY: all test clean
+
+all: $(BUILD)/calibrator.bin $(BUILD)/calibrator.hex
+ $(SIZE) $(BUILD)/calibrator.elf
+
+$(BUILD)/%.o: src/%.c $(wildcard src/*.h) vendor/ch32x035_regs.h | $(BUILD)
+ $(CC_RV) $(CFLAGS) -c $< -o $@
+
+$(BUILD)/calibrator.elf: $(OBJS) src/ch32x035.ld
+ $(CC_RV) $(OBJS) $(LDFLAGS) -o $@
+
+$(BUILD)/calibrator.bin: $(BUILD)/calibrator.elf
+ $(OBJCOPY) -O binary $< $@
+
+$(BUILD)/calibrator.hex: $(BUILD)/calibrator.elf
+ $(OBJCOPY) -O ihex $< $@
+
+$(BUILD)/test_cal_logic: tests/test_cal_logic.c src/cal_logic.c src/cal_logic.h | $(BUILD)
+ $(HOSTCC) $(HOST_CFLAGS) tests/test_cal_logic.c src/cal_logic.c -o $@
+
+test: $(BUILD)/test_cal_logic
+ ./$(BUILD)/test_cal_logic
+
+$(BUILD):
+ mkdir -p $(BUILD)
+
+clean:
+ rm -f $(BUILD)/*.o $(BUILD)/*.elf $(BUILD)/*.bin $(BUILD)/*.hex $(BUILD)/*.map $(BUILD)/test_cal_logic
diff --git a/hardware/calibrator/firmware/README.md b/hardware/calibrator/firmware/README.md
new file mode 100644
index 0000000..1dc641e
--- /dev/null
+++ b/hardware/calibrator/firmware/README.md
@@ -0,0 +1,110 @@
+# Calibrator firmware
+
+**Status: builds and passes host tests. Not tested on hardware yet.**
+
+Firmware for the AV Sync calibrator board (WCH CH32X035G8R6, QSOP-28, RISC-V,
+internal 48 MHz clock, no crystal). The signal contract (what the app sees and
+must do) is in [`docs/calibrator.md`](../../../docs/calibrator.md).
+
+## What it does
+
+The board picks its mode from what the two light sensors see. No mode button.
+
+| Mode | When | What the board does |
+| --- | --- | --- |
+| Idle | power-up, or sensors lit but no swaps | nothing |
+| Camera | both sensors dark for 1 s | pulse train: LED flash + buzzer click, started by one register write |
+| Display | the comparator sees a real swap between sensor A and B | clicks at once on every swap, then ignores the sensors for 200 ms |
+
+Camera train: 3 start pulses at 0, 125 and 250 ms, then 20 timing pulses every 500 ms
+(from 1000 ms), then 2 s pause, then it repeats. LED on 1.5 ms, click = 3 buzzer cycles at 2.7 kHz.
+All numbers are fields of `cal_cfg_t` in `src/cal_logic.c` (`cal_default_cfg`).
+
+A swap only counts when an ADC sample in the last 100 ms showed the two sensors clearly
+different (at least 80 mV and 25 % apart, not dark) and the comparator now flips the other way.
+This stops noise near zero (dark screen, OLED PWM off-phase) from making clicks.
+
+## USB stays off
+
+The board has USB data lines only for firmware updates. **This firmware never turns USB on**:
+the USB and USB-PD blocks get no clock, the D+/D− pull-ups stay off, and PC16/PC17 stay
+floating inputs. A phone therefore never sees a USB device (no pop-ups, no change of the
+audio route); it only gives 5 V, because of the 5.1 kΩ resistors on CC1/CC2.
+Only the chip's ROM bootloader uses USB, and only in update mode (below).
+
+## Pins
+
+| Pin | Name | Use |
+| --- | --- | --- |
+| 15 | PA4 | LED (high = on) |
+| 16 | PA5 | BUZ (high = transistor on) |
+| 5 | PA13 | sensor A → comparator 3 + input (C3P0); bonded to PC15 inside the package |
+| 9 | PA0 | sensor A (same net) → ADC channel 0 |
+| 11 | PA2 | sensor B → comparator 3 − input (C3N0) and ADC channel 2 |
+| 18 | PB3 | comparator 3 output (C3O). Read back for the edge interrupt (EXTI line 3, both edges). **Leave unconnected on the board.** |
+| 2, 3 | PC16, PC17 | USB D−, D+. PC17 + button to VDD = update mode at power-on |
+| 28, 1 | PC18, PC19 | SDI debug (SWDIO, SWCLK), left at reset default |
+
+Comparator 3 runs with hysteresis. Its output goes to PB3; the EXTI interrupt reads PB3 to know
+which sensor is brighter and clicks right away (comparator → pin → interrupt is well under 1 µs).
+All other pins are analog (off). A watchdog (about 250 ms) resets the chip if the code hangs, so
+the buzzer and LED cannot stay on.
+
+## Files
+
+- `src/cal_logic.c/.h` – all mode and timing logic, plain C, no hardware. Same code runs in the tests.
+- `src/main.c` – hardware: clock, GPIO, comparator + EXTI, ADC, SysTick timing, watchdog.
+- `src/startup.c`, `src/ch32x035.ld` – our own startup code, vector table and linker script.
+- `tests/test_cal_logic.c` – host unit tests.
+- `vendor/` – minimal CH32X035 register header from ch32fun (MIT), see `vendor/README.md`.
+
+## Build and test
+
+Needs a RISC-V GCC in `PATH` and a normal `cc` for the tests. Plain RV32IMAC, no C library,
+no WCH compiler extensions.
+
+```sh
+make # xPack riscv-none-elf-gcc (default)
+make CROSS=riscv64-unknown-elf- # Ubuntu: apt install gcc-riscv64-unknown-elf picolibc-riscv64-unknown-elf
+make test # host unit tests
+make clean
+```
+
+Output: `build/calibrator.bin` (flash this), `.hex`, `.elf`.
+
+## Update over USB (update mode)
+
+1. Unplug the board.
+2. Hold the BOOT button and plug the board into a PC with a USB-C to USB-C
+ or USB-A to USB-C cable.
+3. Release the button after about 1 s. The chip's ROM bootloader starts and shows up as a
+ WCH ISP device (USB ID `4348:55e0`, on some chips `1a86:55e0`).
+4. Flash with an open-source tool:
+
+ ```sh
+ wchisp flash build/calibrator.bin # https://github.com/ch32-rs/wchisp (GPL-2.0)
+ # or
+ python3 chprog.py build/calibrator.bin # wagiminator/MCU-Flash-Tools (MIT)
+ ```
+
+5. Unplug and plug in again (without the button): the new firmware runs.
+
+The bootloader is only checked at power-on (not on reset): the button must be held while
+power comes up. A blank chip (as delivered by JLCPCB) always starts the bootloader, so the
+first flash needs no button.
+
+On Linux, allow access to the bootloader without root, e.g. `/etc/udev/rules.d/50-wch-isp.rules`:
+
+```
+SUBSYSTEM=="usb", ATTRS{idVendor}=="4348", ATTRS{idProduct}=="55e0", MODE="0666"
+SUBSYSTEM=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55e0", MODE="0666"
+```
+
+then `sudo udevadm control --reload-rules` (or ask your admin). WCH's own WCHISPTool and
+WCH-LinkUtility (closed source) work too. A WCH-LinkE probe on PC18/PC19 can be used for
+debugging, but the board has no pads for it.
+
+## Licence
+
+MIT, like the rest of the repository (the board itself is CERN-OHL-P-2.0, see `../README.md`).
+Vendored header: see `vendor/README.md`.
diff --git a/hardware/calibrator/firmware/src/cal_logic.c b/hardware/calibrator/firmware/src/cal_logic.c
new file mode 100644
index 0000000..4e9a9dd
--- /dev/null
+++ b/hardware/calibrator/firmware/src/cal_logic.c
@@ -0,0 +1,185 @@
+/* AV Sync calibrator: mode and timing logic. See cal_logic.h and
+ * docs/calibrator.md for the signal contract. */
+#include "cal_logic.h"
+
+#include
+
+/* Wrap-safe "a - b" for a free-running 32-bit ms counter. */
+static int32_t since(uint32_t now, uint32_t then) { return (int32_t)(now - then); }
+
+void cal_default_cfg(cal_cfg_t *c)
+{
+ memset(c, 0, sizeof *c);
+ c->led_pulse_us = 1500;
+ c->click_cycles = 3;
+ c->click_half_period_us = 185;
+
+ c->marker_ms[0] = 0;
+ c->marker_ms[1] = 125;
+ c->marker_ms[2] = 250;
+ c->timing_first_ms = 1000;
+ c->timing_period_ms = 500;
+ c->timing_count = CAL_TIMING_PULSES;
+ c->train_pause_ms = 2000;
+ c->blank_after_pulse_ms = 5;
+
+ c->dark_mv = 150;
+ c->camera_enter_ms = 1000;
+ c->camera_exit_ms = 300;
+ c->display_exit_ms = 1500;
+
+ c->arm_min_diff_mv = 80;
+ c->arm_min_diff_pct = 25;
+ c->arm_hold_ms = 100;
+ c->lockout_ms = 200;
+}
+
+uint32_t cal_pulses_per_train(const cal_cfg_t *c)
+{
+ return CAL_MARKER_PULSES + c->timing_count;
+}
+
+uint32_t cal_pulse_offset(const cal_cfg_t *c, uint32_t idx)
+{
+ if (idx < CAL_MARKER_PULSES)
+ return c->marker_ms[idx];
+ return c->timing_first_ms + (idx - CAL_MARKER_PULSES) * c->timing_period_ms;
+}
+
+uint32_t cal_train_length(const cal_cfg_t *c)
+{
+ return cal_pulse_offset(c, cal_pulses_per_train(c) - 1) + c->train_pause_ms;
+}
+
+void cal_init(cal_state_t *s, const cal_cfg_t *cfg)
+{
+ memset(s, 0, sizeof *s);
+ s->cfg = *cfg;
+ s->mode = CAL_IDLE;
+}
+
+cal_mode_t cal_mode(const cal_state_t *s) { return s->mode; }
+
+static void enter(cal_state_t *s, cal_mode_t m, uint32_t now)
+{
+ s->mode = m;
+ s->dark_valid = false;
+ s->lit_valid = false;
+ if (m == CAL_CAMERA) {
+ s->train_start = now;
+ s->pulse_idx = 0;
+ }
+}
+
+/* True while a camera pulse runs or shortly after it (sensor data is unreliable). */
+static bool blanked(const cal_state_t *s, uint32_t now)
+{
+ if (s->pulse_active)
+ return true;
+ return s->blank_valid && since(now, s->blank_until) < 0;
+}
+
+void cal_on_sample(cal_state_t *s, uint32_t now, uint32_t a_mv, uint32_t b_mv)
+{
+ const cal_cfg_t *c = &s->cfg;
+ if (blanked(s, now))
+ return;
+
+ uint32_t hi = a_mv > b_mv ? a_mv : b_mv;
+ uint32_t diff = a_mv > b_mv ? a_mv - b_mv : b_mv - a_mv;
+ bool dark = hi < c->dark_mv;
+
+ /* Arm the edge check: the two sensors clearly see different light. */
+ uint32_t need = hi * c->arm_min_diff_pct / 100;
+ if (need < c->arm_min_diff_mv)
+ need = c->arm_min_diff_mv;
+ if (!dark && diff >= need) {
+ s->armed_sign = a_mv > b_mv ? 1 : -1;
+ s->armed_until = now + c->arm_hold_ms;
+ }
+
+ switch (s->mode) {
+ case CAL_IDLE:
+ if (!dark) {
+ s->dark_valid = false;
+ } else {
+ if (!s->dark_valid) {
+ s->dark_valid = true;
+ s->dark_since = now;
+ }
+ if (since(now, s->dark_since) >= (int32_t)c->camera_enter_ms)
+ enter(s, CAL_CAMERA, now);
+ }
+ break;
+ case CAL_CAMERA:
+ if (dark) {
+ s->lit_valid = false;
+ } else {
+ if (!s->lit_valid) {
+ s->lit_valid = true;
+ s->lit_since = now;
+ }
+ if (since(now, s->lit_since) >= (int32_t)c->camera_exit_ms)
+ enter(s, CAL_IDLE, now);
+ }
+ break;
+ case CAL_DISPLAY:
+ break;
+ }
+}
+
+bool cal_on_edge(cal_state_t *s, uint32_t now, int out)
+{
+ const cal_cfg_t *c = &s->cfg;
+ if (blanked(s, now))
+ return false;
+ if (s->clicked && since(now, s->last_click) < (int32_t)c->lockout_ms)
+ return false;
+ if (s->armed_sign == 0 || since(now, s->armed_until) > 0)
+ return false;
+ /* The comparator must have flipped away from the armed state. */
+ int new_sign = out ? 1 : -1;
+ if (new_sign == s->armed_sign)
+ return false;
+
+ s->armed_sign = 0;
+ if (s->mode != CAL_DISPLAY)
+ enter(s, CAL_DISPLAY, now);
+ s->last_edge = now;
+ s->clicked = true;
+ s->last_click = now;
+ return true;
+}
+
+cal_action_t cal_tick(cal_state_t *s, uint32_t now)
+{
+ const cal_cfg_t *c = &s->cfg;
+ if (s->mode == CAL_DISPLAY) {
+ if (since(now, s->last_edge) >= (int32_t)c->display_exit_ms)
+ enter(s, CAL_IDLE, now);
+ return CAL_NONE;
+ }
+ if (s->mode != CAL_CAMERA || s->pulse_active)
+ return CAL_NONE;
+
+ if (s->pulse_idx >= cal_pulses_per_train(c)) {
+ /* Pause is over when the next train starts. */
+ if (since(now, s->train_start) < (int32_t)cal_train_length(c))
+ return CAL_NONE;
+ s->train_start += cal_train_length(c);
+ s->pulse_idx = 0;
+ }
+ if (since(now, s->train_start) < (int32_t)cal_pulse_offset(c, s->pulse_idx))
+ return CAL_NONE;
+
+ s->pulse_idx++;
+ s->pulse_active = true;
+ return CAL_PULSE;
+}
+
+void cal_pulse_done(cal_state_t *s, uint32_t now)
+{
+ s->pulse_active = false;
+ s->blank_valid = true;
+ s->blank_until = now + s->cfg.blank_after_pulse_ms;
+}
diff --git a/hardware/calibrator/firmware/src/cal_logic.h b/hardware/calibrator/firmware/src/cal_logic.h
new file mode 100644
index 0000000..3e95426
--- /dev/null
+++ b/hardware/calibrator/firmware/src/cal_logic.h
@@ -0,0 +1,89 @@
+/* AV Sync calibrator: mode and timing logic.
+ *
+ * Plain C with no hardware headers, so it builds for the MCU and for the
+ * host unit tests. All times are milliseconds from a free-running counter
+ * (wrap-safe), unless the name ends in _us.
+ */
+#ifndef CAL_LOGIC_H
+#define CAL_LOGIC_H
+
+#include
+#include
+
+#define CAL_MARKER_PULSES 3
+#define CAL_TIMING_PULSES 20
+
+typedef enum { CAL_IDLE = 0, CAL_CAMERA = 1, CAL_DISPLAY = 2 } cal_mode_t;
+typedef enum { CAL_NONE = 0, CAL_PULSE = 1 } cal_action_t;
+
+typedef struct {
+ /* Pulse and click shape */
+ uint32_t led_pulse_us; /* LED on-time per camera pulse */
+ uint32_t click_cycles; /* buzzer cycles per click */
+ uint32_t click_half_period_us; /* 185 us = 2.7 kHz buzzer resonance */
+
+ /* Camera pulse train (times from the train start) */
+ uint32_t marker_ms[CAL_MARKER_PULSES]; /* start pattern */
+ uint32_t timing_first_ms; /* first timing pulse */
+ uint32_t timing_period_ms; /* gap between timing pulses */
+ uint32_t timing_count; /* number of timing pulses (<= CAL_TIMING_PULSES) */
+ uint32_t train_pause_ms; /* pause after the last pulse, then repeat */
+ uint32_t blank_after_pulse_ms; /* ignore sensors until pulse end + this */
+
+ /* Mode entry and exit */
+ uint32_t dark_mv; /* dark = both sensors below this */
+ uint32_t camera_enter_ms; /* dark this long (in IDLE) -> CAMERA */
+ uint32_t camera_exit_ms; /* not dark this long (in CAMERA) -> IDLE */
+ uint32_t display_exit_ms; /* no valid edge this long -> IDLE */
+
+ /* Edge checks */
+ uint32_t arm_min_diff_mv; /* |A-B| must be at least this ... */
+ uint32_t arm_min_diff_pct; /* ... and at least this % of max(A,B) */
+ uint32_t arm_hold_ms; /* an arming sample is valid this long */
+ uint32_t lockout_ms; /* ignore edges this long after a click */
+} cal_cfg_t;
+
+typedef struct {
+ cal_cfg_t cfg;
+ cal_mode_t mode;
+
+ bool dark_valid; uint32_t dark_since; /* start of the current dark run */
+ bool lit_valid; uint32_t lit_since; /* start of the current lit run (camera) */
+
+ int armed_sign; uint32_t armed_until; /* +1: A brighter, -1: B brighter, 0: none */
+
+ bool clicked; uint32_t last_click;
+ uint32_t last_edge; /* last valid edge (display) */
+
+ uint32_t train_start;
+ uint32_t pulse_idx; /* next pulse in the train */
+ bool pulse_active; /* pulse running: ignore sensors */
+ bool blank_valid; uint32_t blank_until;
+} cal_state_t;
+
+/* Defaults as documented in docs/calibrator.md */
+void cal_default_cfg(cal_cfg_t *cfg);
+
+void cal_init(cal_state_t *s, const cal_cfg_t *cfg);
+
+/* One ADC sample of both sensor nodes (mV, more light = higher). */
+void cal_on_sample(cal_state_t *s, uint32_t now, uint32_t a_mv, uint32_t b_mv);
+
+/* Comparator changed. out = 1 when A is brighter than B.
+ * Returns true when the board must click right now. */
+bool cal_on_edge(cal_state_t *s, uint32_t now, int out);
+
+/* Call often (every ms). Returns CAL_PULSE when a camera pulse is due. */
+cal_action_t cal_tick(cal_state_t *s, uint32_t now);
+
+/* Call when the pulse (LED + click) has finished. */
+void cal_pulse_done(cal_state_t *s, uint32_t now);
+
+cal_mode_t cal_mode(const cal_state_t *s);
+
+/* Time of pulse number idx inside one train (ms from the train start). */
+uint32_t cal_pulse_offset(const cal_cfg_t *cfg, uint32_t idx);
+uint32_t cal_pulses_per_train(const cal_cfg_t *cfg);
+uint32_t cal_train_length(const cal_cfg_t *cfg);
+
+#endif
diff --git a/hardware/calibrator/firmware/src/ch32x035.ld b/hardware/calibrator/firmware/src/ch32x035.ld
new file mode 100644
index 0000000..a7b3301
--- /dev/null
+++ b/hardware/calibrator/firmware/src/ch32x035.ld
@@ -0,0 +1,54 @@
+/* CH32X035G8R6: 62 KB code flash at 0x00000000, 20 KB SRAM at 0x20000000
+ * (same map as WCH's EVT Ld/Link.ld for the CH32X035). */
+ENTRY(_start)
+
+__stack_size = 1024;
+
+MEMORY
+{
+ FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 62K
+ RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
+}
+
+SECTIONS
+{
+ .init : {
+ KEEP(*(.init)) /* reset jump + vector table (startup.c) */
+ . = ALIGN(4);
+ } >FLASH
+
+ .text : {
+ . = ALIGN(4);
+ *(.text .text.*)
+ *(.rodata .rodata.*)
+ *(.srodata .srodata.*)
+ . = ALIGN(4);
+ } >FLASH
+
+ .data : {
+ . = ALIGN(4);
+ _data_vma = .;
+ *(.data .data.*)
+ . = ALIGN(8);
+ PROVIDE(__global_pointer$ = . + 0x800);
+ *(.sdata .sdata.*)
+ . = ALIGN(4);
+ _edata = .;
+ } >RAM AT>FLASH
+ _data_lma = LOADADDR(.data);
+
+ .bss (NOLOAD) : {
+ . = ALIGN(4);
+ _sbss = .;
+ *(.sbss .sbss.*)
+ *(.bss .bss.*)
+ *(COMMON)
+ . = ALIGN(4);
+ _ebss = .;
+ } >RAM
+
+ _eusrstack = ORIGIN(RAM) + LENGTH(RAM);
+ ASSERT(_ebss + __stack_size <= _eusrstack, "RAM full: no room for the stack")
+
+ /DISCARD/ : { *(.comment) *(.riscv.attributes) *(.note*) }
+}
diff --git a/hardware/calibrator/firmware/src/main.c b/hardware/calibrator/firmware/src/main.c
new file mode 100644
index 0000000..0691924
--- /dev/null
+++ b/hardware/calibrator/firmware/src/main.c
@@ -0,0 +1,242 @@
+/* AV Sync calibrator firmware for the WCH CH32X035G8R6 (QSOP-28).
+ *
+ * Pins (see hardware/calibrator schematic):
+ * PA4 (pin 15) LED high = white LED on
+ * PA5 (pin 16) BUZ high = NPN on = buzzer coil current
+ * PA13 (pin 5) SENS_A comparator 3 positive input (C3P0)
+ * PA0 (pin 9) SENS_A same net, ADC channel 0
+ * PA2 (pin 11) SENS_B comparator 3 negative input (C3N0), ADC channel 2
+ * PB3 (pin 18) CMP3 output (C3O). Driven by the comparator, read back
+ * for the edge interrupt. Must stay unconnected on the board.
+ * PC16/PC17 (pins 2/3) USB D-/D+ to the USB-C receptacle. Button PC17 -> VDD
+ * enters the WCH ROM bootloader at power-on (update mode).
+ * PC18/PC19 SDI debug (SWDIO/SWCLK), left at reset default.
+ *
+ * USB IS NEVER ENABLED BY THIS FIRMWARE. The USB and USB-PD blocks get no
+ * clock, AFIO->CTLR keeps the D+/D- pull-ups off, and PC16/PC17 (and PC10/PC11,
+ * bonded to them inside the package) stay floating inputs. With no pull-up on
+ * D+ or D-, a phone never sees a USB device: it only supplies 5 V (asked for
+ * by the 5.1 kohm resistors on CC1/CC2). Only the ROM bootloader, entered with
+ * the button held at power-on, talks USB.
+ *
+ * Package notes (datasheet V2.2, QSOP-28): PA13 is bonded to PC15 and PA12 to
+ * PC14, PB1 to PB5. Those twins are never outputs here.
+ *
+ * All decisions (modes, timing, lock-out) are in cal_logic.c. This file only
+ * talks to the hardware. NOT TESTED ON HARDWARE YET.
+ */
+#include "ch32x035_regs.h"
+#include "cal_logic.h"
+
+#define LED_PIN (1u << 4) /* PA4 */
+#define BUZ_PIN (1u << 5) /* PA5 */
+#define CMP_OUT_PIN 3u /* PB3 */
+
+#define HCLK_HZ 48000000u
+#define TICKS_PER_US (HCLK_HZ / 1000000u)
+#define TICKS_PER_MS (HCLK_HZ / 1000u)
+
+/* The ADC is ratiometric to VDD. VDD is USB VBUS minus a 10 ohm drop, so we
+ * assume 5000 mV. The thresholds are rough, so this is good enough. */
+#define VDD_MV 5000u
+
+static volatile uint32_t ms_now;
+static cal_state_t cal;
+
+static inline void irq_off(void) { __asm__ volatile("csrc mstatus, 8" ::: "memory"); }
+static inline void irq_on(void) { __asm__ volatile("csrs mstatus, 8" ::: "memory"); }
+
+/* ---- clock: HSI 48 MHz, no crystal --------------------------------------- */
+/* After reset the core runs from HSI 48 MHz divided by 6. Set 2 flash wait
+ * states first (WCH TRM / ch32fun SystemInit for CH32X03x), then HCLK = 48 MHz. */
+static void clock_init(void)
+{
+ FLASH->ACTLR = (FLASH->ACTLR & ~FLASH_ACTLR_LATENCY) | FLASH_ACTLR_LATENCY_2;
+ RCC->CFGR0 &= ~RCC_HPRE; /* AHB prescaler /1 */
+}
+
+/* ---- time: SysTick runs free at HCLK (64-bit counter, low word used) ----- */
+static void time_init(void)
+{
+ SysTick->CTLR = 0;
+ SysTick->CNTL = 0;
+ SysTick->CNTH = 0;
+ SysTick->CTLR = 5u; /* STE (enable) + STCLK (HCLK), no interrupt */
+}
+
+static inline uint32_t ticks(void) { return SysTick->CNTL; }
+
+/* Called from the main loop: advances ms_now from the free-running counter. */
+static void time_update(void)
+{
+ static uint32_t last;
+ while ((uint32_t)(ticks() - last) >= TICKS_PER_MS) {
+ last += TICKS_PER_MS;
+ ms_now++;
+ }
+}
+
+/* ---- watchdog: about 250 ms ---------------------------------------------- */
+/* IWDG clock = HSI / 1024 = ~46.9 kHz (datasheet clock tree). /32 -> ~1.46 kHz,
+ * reload 366 -> ~250 ms. */
+static void iwdg_init(void)
+{
+ IWDG->CTLR = 0x5555u; /* unlock PSCR/RLDR */
+ IWDG->PSCR = 3u; /* /32 */
+ IWDG->RLDR = 366u;
+ IWDG->CTLR = 0xAAAAu; /* reload */
+ IWDG->CTLR = 0xCCCCu; /* start */
+}
+
+static void iwdg_feed(void) { IWDG->CTLR = 0xAAAAu; }
+
+/* ---- GPIO ---------------------------------------------------------------- */
+static void set_mode(GPIO_TypeDef *g, uint32_t pin, uint32_t mode)
+{
+ volatile uint32_t *reg = pin < 8 ? &g->CFGLR : pin < 16 ? &g->CFGHR : &g->CFGXR;
+ uint32_t sh = (pin & 7u) * 4u;
+ *reg = (*reg & ~(0xFu << sh)) | (mode << sh);
+}
+
+static void gpio_init(void)
+{
+ RCC->APB2PCENR |= RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
+ RCC_APB2Periph_GPIOC;
+
+ /* USB stays off: no D+/D- pull-up, USB pin function off (reset values,
+ * written again on purpose). */
+ AFIO->CTLR &= ~(AFIO_CTLR_UDP_PUE | AFIO_CTLR_UDM_PUE | AFIO_CTLR_USB_IOEN | AFIO_CTLR_USB_PHY_V33);
+
+ /* Port A and B: everything analog (off) first. PC16/PC17 (USB/boot),
+ * PC18/PC19 (debug) and PC3 (reset pin option) keep their reset modes. */
+ GPIOA->BCR = LED_PIN | BUZ_PIN;
+ GPIOA->CFGLR = 0;
+ GPIOA->CFGHR = 0;
+ GPIOA->CFGXR = 0;
+ GPIOB->CFGLR = 0;
+ GPIOB->CFGHR = 0;
+ GPIOB->CFGXR = 0;
+ set_mode(GPIOC, 14, GPIO_MODE_ANALOG); /* PC14 = PA12 twin, unused */
+ set_mode(GPIOC, 15, GPIO_MODE_ANALOG); /* PC15 = PA13 twin (SENS_A) */
+
+ set_mode(GPIOA, 4, GPIO_MODE_OUT_PP_50M); /* LED */
+ set_mode(GPIOA, 5, GPIO_MODE_OUT_PP_50M); /* BUZ */
+ set_mode(GPIOB, CMP_OUT_PIN, GPIO_MODE_AF_PP_50M); /* CMP3 output */
+ /* PA0, PA2, PA13 stay analog (sensor inputs). */
+}
+
+/* ---- pulse and click ----------------------------------------------------- */
+/* LED (optional) and buzzer start with ONE store to BSHR, so they begin less
+ * than 1 us apart. Then the buzzer toggles every half period for `cycles`
+ * cycles and ends low. The LED goes off after led_us. Busy-waits; the whole
+ * thing is a few ms at most. */
+static void burst(int use_led, uint32_t led_us, uint32_t cycles, uint32_t half_us)
+{
+ uint32_t t0 = ticks();
+ GPIOA->BSHR = use_led ? (LED_PIN | BUZ_PIN) : BUZ_PIN;
+
+ uint32_t edges = cycles ? 2u * cycles - 1u : 0u; /* last edge turns BUZ off */
+ uint32_t i = 1;
+ int led_on = use_led;
+ while (i <= edges || led_on) {
+ uint32_t el = (ticks() - t0) / TICKS_PER_US;
+ if (i <= edges && el >= i * half_us) {
+ GPIOA->BSHR = (i & 1u) ? (BUZ_PIN << 16) : BUZ_PIN;
+ i++;
+ }
+ if (led_on && el >= led_us) {
+ GPIOA->BSHR = LED_PIN << 16;
+ led_on = 0;
+ }
+ }
+ GPIOA->BSHR = BUZ_PIN << 16; /* safety: buzzer always ends low */
+}
+
+/* ---- comparator 3: A (PA13, P0) vs B (PA2, N0), hysteresis on ------------ */
+/* The comparator output goes to its pin C3O = PB3 (MODE = IO). EXTI line 3
+ * watches PB3 on both edges; the interrupt reads the pin to know which sensor
+ * is now brighter. Comparator -> pin -> EXTI adds well under 1 us. */
+static void cmp_init(void)
+{
+ OPA->CMPKEY = OPA_KEY1; /* unlock the comparator control */
+ OPA->CMPKEY = OPA_KEY2;
+ OPA->CTLR2 = CMP_FIELD(2, CMP_EN) | CMP_FIELD(2, CMP_MODE_IO) | CMP_FIELD(2, CMP_HYEN);
+ /* NSEL = 0 (N0 = PA2), PSEL = 0 (P0 = PA13) */
+
+ AFIO->EXTICR1 = (AFIO->EXTICR1 & ~(3u << (CMP_OUT_PIN * 2))) | (1u << (CMP_OUT_PIN * 2)); /* port B */
+ EXTI->RTENR |= 1u << CMP_OUT_PIN;
+ EXTI->FTENR |= 1u << CMP_OUT_PIN;
+ EXTI->INTFR = 1u << CMP_OUT_PIN;
+ EXTI->INTENR |= 1u << CMP_OUT_PIN;
+ PFIC->IENR[EXTI7_0_IRQn / 32u] = 1u << (EXTI7_0_IRQn % 32u);
+}
+
+void EXTI7_0_IRQHandler(void) __attribute__((interrupt));
+void EXTI7_0_IRQHandler(void)
+{
+ int out = (GPIOB->INDR >> CMP_OUT_PIN) & 1u; /* 1 = A brighter */
+ EXTI->INTFR = 1u << CMP_OUT_PIN;
+ if (cal_on_edge(&cal, ms_now, out))
+ burst(0, 0, cal.cfg.click_cycles, cal.cfg.click_half_period_us); /* click now */
+}
+
+/* ---- ADC: one software-triggered conversion per channel ------------------ */
+static void adc_init(void)
+{
+ RCC->APB2PCENR |= RCC_APB2Periph_ADC1;
+ RCC->APB2PRSTR |= RCC_ADC1RST;
+ RCC->APB2PRSTR &= ~RCC_ADC1RST;
+ ADC1->CTLR3 = (ADC1->CTLR3 & ~ADC_CTLR3_CLK_DIV) | ADC_CTLR3_CLK_DIV_3; /* as ch32fun example */
+ ADC1->SAMPTR2 = 0x3FFFFFFFu; /* longest sample time on channels 0-9 (high-impedance nodes) */
+ ADC1->RSQR1 = 0; /* one conversion per sequence */
+ ADC1->CTLR2 = ADC_ADON | ADC_EXTSEL | ADC_EXTTRIG;
+}
+
+static uint32_t adc_read_mv(uint32_t ch)
+{
+ ADC1->RSQR3 = ch;
+ ADC1->CTLR2 |= ADC_SWSTART;
+ while (!(ADC1->STATR & ADC_EOC)) {
+ }
+ return (ADC1->RDATAR & 0xFFFu) * VDD_MV / 4095u;
+}
+
+int main(void)
+{
+ clock_init();
+ gpio_init();
+ iwdg_init();
+ time_init();
+
+ cal_cfg_t cfg;
+ cal_default_cfg(&cfg);
+ cal_init(&cal, &cfg);
+
+ adc_init();
+ cmp_init();
+
+ uint32_t last = ms_now;
+ for (;;) {
+ iwdg_feed();
+ do {
+ time_update();
+ } while (ms_now == last);
+ last = ms_now;
+
+ uint32_t a = adc_read_mv(0); /* PA0 = SENS_A */
+ uint32_t b = adc_read_mv(2); /* PA2 = SENS_B */
+
+ irq_off();
+ cal_on_sample(&cal, last, a, b);
+ cal_action_t act = cal_tick(&cal, last);
+ irq_on();
+
+ if (act == CAL_PULSE) {
+ burst(1, cal.cfg.led_pulse_us, cal.cfg.click_cycles, cal.cfg.click_half_period_us);
+ time_update();
+ irq_off();
+ cal_pulse_done(&cal, ms_now);
+ irq_on();
+ }
+ }
+}
diff --git a/hardware/calibrator/firmware/src/startup.c b/hardware/calibrator/firmware/src/startup.c
new file mode 100644
index 0000000..a8fc1e2
--- /dev/null
+++ b/hardware/calibrator/firmware/src/startup.c
@@ -0,0 +1,105 @@
+/* Startup for the CH32X035 (QingKe V4C RISC-V core), written for this project.
+ *
+ * Layout follows WCH's EVT startup and ch32fun (MIT): address 0 holds a jump
+ * to the reset code, then a table of handler addresses indexed by interrupt
+ * number. mtvec points to the table with mode 3 (vectored, absolute
+ * addresses). Handlers use GCC's standard `interrupt` attribute, so the
+ * hardware register stack (HPE) and nesting are switched off (CSR 0x804 = 0).
+ */
+#include
+
+#include "ch32x035_regs.h"
+
+extern uint32_t _data_lma, _data_vma, _edata, _sbss, _ebss;
+int main(void);
+
+void Default_Handler(void) __attribute__((interrupt));
+void EXTI7_0_IRQHandler(void) __attribute__((interrupt, weak, alias("Default_Handler")));
+
+/* Any unexpected interrupt: stop here, the watchdog then resets the chip with
+ * all pins back to inputs (LED and buzzer off). */
+void Default_Handler(void)
+{
+ for (;;) {
+ }
+}
+
+void handle_reset(void) __attribute__((naked, noreturn));
+void c_reset(void) __attribute__((noreturn, used));
+
+/* Reset jump (offset 0) followed by the vector table. Entry n = handler of
+ * interrupt n. Entry 0 is the reset entry itself, like in WCH's table. */
+__attribute__((naked, section(".init"))) void _start(void)
+{
+ __asm__ volatile(
+ ".option push\n"
+ ".option norvc\n"
+ "j handle_reset\n"
+ ".option pop\n"
+ ".balign 4\n"
+ ".global _vector_base\n"
+ "_vector_base:\n"
+ ".word _start\n" /* 0 */
+ ".word 0\n" /* 1 */
+ ".word Default_Handler\n" /* 2 NMI */
+ ".word Default_Handler\n" /* 3 HardFault / exception */
+ ".rept 16\n" /* 4-19 */
+ ".word Default_Handler\n"
+ ".endr\n"
+ ".word EXTI7_0_IRQHandler\n" /* 20 EXTI lines 0-7 (comparator output on PB3) */
+ ".rept 28\n" /* 21-48 */
+ ".word Default_Handler\n"
+ ".endr\n");
+}
+
+void handle_reset(void)
+{
+ __asm__ volatile(
+ ".option push\n"
+ ".option norelax\n"
+ "la gp, __global_pointer$\n"
+ ".option pop\n"
+ "la sp, _eusrstack\n"
+ "li t0, 0x1f\n"
+ "csrw 0xbc0, t0\n" /* pipeline + branch prediction on (as WCH EVT) */
+ "csrw 0x804, zero\n" /* INTSYSCR: no hardware stack, no nesting */
+ "li t0, 0x1880\n"
+ "csrw mstatus, t0\n" /* stay in machine mode, MPIE set */
+ "la t0, _vector_base\n"
+ "ori t0, t0, 3\n"
+ "csrw mtvec, t0\n"
+ "j c_reset\n");
+}
+
+/* Normal C (stack is set up now): copy .data, clear .bss, enter main. */
+void c_reset(void)
+{
+ uint32_t *src = &_data_lma;
+ for (uint32_t *dst = &_data_vma; dst < &_edata;)
+ *dst++ = *src++;
+ for (uint32_t *dst = &_sbss; dst < &_ebss;)
+ *dst++ = 0;
+
+ /* mret into main: interrupts become enabled (MIE = MPIE). */
+ __asm__ volatile("csrw mepc, %0\n mret\n" ::"r"(main));
+ for (;;) {
+ }
+}
+
+/* We link without a C library; GCC may still call these for struct copies. */
+void *memset(void *d, int c, unsigned int n)
+{
+ unsigned char *p = d;
+ while (n--)
+ *p++ = (unsigned char)c;
+ return d;
+}
+
+void *memcpy(void *d, const void *s, unsigned int n)
+{
+ unsigned char *p = d;
+ const unsigned char *q = s;
+ while (n--)
+ *p++ = *q++;
+ return d;
+}
diff --git a/hardware/calibrator/firmware/tests/test_cal_logic.c b/hardware/calibrator/firmware/tests/test_cal_logic.c
new file mode 100644
index 0000000..d334229
--- /dev/null
+++ b/hardware/calibrator/firmware/tests/test_cal_logic.c
@@ -0,0 +1,256 @@
+/* Host unit tests for cal_logic.c. Run with: make test */
+#include "../src/cal_logic.h"
+
+#include
+#include
+
+static int checks, failures;
+#define CHECK(cond) \
+ do { \
+ checks++; \
+ if (!(cond)) { \
+ failures++; \
+ printf("FAIL %s:%d: %s\n", __FILE__, __LINE__, #cond); \
+ } \
+ } while (0)
+
+static cal_cfg_t cfg;
+static cal_state_t st;
+
+static void reset(void)
+{
+ cal_default_cfg(&cfg);
+ cal_init(&st, &cfg);
+}
+
+/* Feed one sample per ms from t0 to t1 (inclusive), with ticks. Any due pulse
+ * is finished at once. Returns the number of pulses. */
+static int run(uint32_t t0, uint32_t t1, uint32_t a, uint32_t b)
+{
+ int pulses = 0;
+ for (uint32_t t = t0; t <= t1; t++) {
+ cal_on_sample(&st, t, a, b);
+ if (cal_tick(&st, t) == CAL_PULSE) {
+ pulses++;
+ cal_pulse_done(&st, t);
+ }
+ }
+ return pulses;
+}
+
+/* Bring the logic into DISPLAY: armed with A brighter, then edge to B brighter. */
+static uint32_t go_display(uint32_t t)
+{
+ cal_on_sample(&st, t, 3000, 100);
+ CHECK(cal_on_edge(&st, t + 1, 0));
+ CHECK(cal_mode(&st) == CAL_DISPLAY);
+ return t + 1;
+}
+
+static void test_power_up_idle(void)
+{
+ reset();
+ CHECK(cal_mode(&st) == CAL_IDLE);
+ CHECK(cal_tick(&st, 0) == CAL_NONE);
+ CHECK(run(0, 5000, 2000, 2000) == 0); /* lit, no edges: stays silent */
+ CHECK(cal_mode(&st) == CAL_IDLE);
+}
+
+static void test_camera_entry(void)
+{
+ reset();
+ run(0, 998, 10, 10);
+ cal_on_sample(&st, 999, 10, 10);
+ CHECK(cal_mode(&st) == CAL_IDLE); /* dark for 999 ms */
+ cal_on_sample(&st, 1000, 10, 10);
+ CHECK(cal_mode(&st) == CAL_CAMERA); /* dark for 1000 ms */
+
+ /* a lit sample in between restarts the dark run */
+ reset();
+ run(0, 500, 10, 10);
+ run(501, 501, 2000, 2000);
+ run(502, 1499, 10, 10);
+ CHECK(cal_mode(&st) == CAL_IDLE);
+ run(1500, 1502, 10, 10);
+ CHECK(cal_mode(&st) == CAL_CAMERA);
+}
+
+static void test_camera_schedule(void)
+{
+ reset();
+ run(0, 999, 10, 10);
+ cal_on_sample(&st, 1000, 10, 10);
+ CHECK(cal_mode(&st) == CAL_CAMERA);
+ const uint32_t start = 1000;
+
+ uint32_t times[64];
+ int n = 0;
+ for (uint32_t t = start; t < start + 2 * 12500 && n < 64; t++) {
+ cal_on_sample(&st, t, 10, 10);
+ if (cal_tick(&st, t) == CAL_PULSE) {
+ times[n++] = t - start;
+ cal_pulse_done(&st, t);
+ }
+ }
+ CHECK(n == 46);
+ CHECK(times[0] == 0 && times[1] == 125 && times[2] == 250);
+ for (int k = 0; k < 20; k++)
+ CHECK(times[3 + k] == 1000u + 500u * (uint32_t)k);
+ CHECK(times[22] == 10500);
+ CHECK(times[23] == 12500); /* 2000 ms pause, then the marker again */
+ CHECK(times[24] == 12625 && times[25] == 12750);
+ CHECK(cal_train_length(&cfg) == 12500);
+}
+
+static void test_blanking(void)
+{
+ reset();
+ run(0, 999, 10, 10);
+ cal_on_sample(&st, 1000, 10, 10);
+ CHECK(cal_tick(&st, 1000) == CAL_PULSE);
+ /* during the pulse: samples and edges are ignored */
+ cal_on_sample(&st, 1000, 3000, 100);
+ CHECK(!cal_on_edge(&st, 1001, 0));
+ CHECK(cal_tick(&st, 1001) == CAL_NONE); /* no second pulse while active */
+ cal_pulse_done(&st, 1002);
+ /* until pulse end + 5 ms */
+ cal_on_sample(&st, 1006, 3000, 100);
+ CHECK(!cal_on_edge(&st, 1006, 0));
+ CHECK(cal_mode(&st) == CAL_CAMERA);
+ /* after the blanking: arming works again */
+ cal_on_sample(&st, 1007, 3000, 100);
+ CHECK(cal_on_edge(&st, 1008, 0));
+ CHECK(cal_mode(&st) == CAL_DISPLAY);
+}
+
+static void test_valid_edge(void)
+{
+ reset();
+ run(0, 100, 3000, 100); /* lit, A brighter: armed, still idle */
+ CHECK(cal_mode(&st) == CAL_IDLE);
+ CHECK(cal_on_edge(&st, 101, 0)); /* flips to B brighter: click */
+ CHECK(cal_mode(&st) == CAL_DISPLAY);
+
+ /* B brighter armed, edge to A brighter */
+ reset();
+ run(0, 10, 100, 3000);
+ CHECK(cal_on_edge(&st, 11, 1));
+}
+
+static void test_chatter_rejected(void)
+{
+ reset();
+ /* both sensors see the same light: never armed */
+ run(0, 100, 2000, 1950);
+ CHECK(!cal_on_edge(&st, 101, 1));
+ CHECK(!cal_on_edge(&st, 102, 0));
+ /* dark: never armed, even with a large relative difference */
+ run(103, 200, 100, 0);
+ CHECK(!cal_on_edge(&st, 201, 0));
+ /* small absolute difference below 80 mV */
+ run(202, 300, 300, 230);
+ CHECK(!cal_on_edge(&st, 301, 0));
+ CHECK(cal_mode(&st) == CAL_IDLE);
+}
+
+static void test_same_sign_rejected(void)
+{
+ reset();
+ run(0, 10, 3000, 100); /* A brighter */
+ CHECK(!cal_on_edge(&st, 11, 1)); /* says A brighter again: not a swap */
+ CHECK(cal_on_edge(&st, 12, 0));
+}
+
+static void test_lockout(void)
+{
+ reset();
+ uint32_t t = go_display(0); /* click at t = 1 */
+ cal_on_sample(&st, t + 150, 100, 3000);
+ CHECK(!cal_on_edge(&st, t + 199, 1)); /* 199 ms: locked */
+ cal_on_sample(&st, t + 199, 100, 3000);
+ CHECK(cal_on_edge(&st, t + 200, 1)); /* 200 ms, re-armed: click */
+
+ /* edge after lockout without re-arming is rejected */
+ reset();
+ t = go_display(0);
+ CHECK(!cal_on_edge(&st, t + 300, 1));
+}
+
+static void test_arm_expiry(void)
+{
+ reset();
+ cal_on_sample(&st, 0, 3000, 100);
+ CHECK(cal_on_edge(&st, 100, 0)); /* exactly 100 ms: still armed */
+ reset();
+ cal_on_sample(&st, 0, 3000, 100);
+ CHECK(!cal_on_edge(&st, 101, 0)); /* 101 ms: expired */
+}
+
+static void test_display_exit(void)
+{
+ reset();
+ uint32_t t = go_display(0); /* last valid edge at 1 */
+ CHECK(run(t + 1, t + 1499, 3000, 3000) == 0);
+ CHECK(cal_mode(&st) == CAL_DISPLAY);
+ cal_tick(&st, t + 1500);
+ CHECK(cal_mode(&st) == CAL_IDLE);
+}
+
+static void test_camera_exit(void)
+{
+ reset();
+ run(0, 1000, 10, 10);
+ CHECK(cal_mode(&st) == CAL_CAMERA);
+ /* The pulse at 1000 blanks samples until 1005, so the lit run starts at
+ * 1005. Lit (no difference, so no arming) for 299 ms: stays. */
+ run(1001, 1303, 2000, 2000);
+ CHECK(cal_mode(&st) == CAL_CAMERA);
+ run(1304, 1304, 2000, 2000);
+ CHECK(cal_mode(&st) == CAL_CAMERA);
+ run(1305, 1305, 2000, 2000);
+ CHECK(cal_mode(&st) == CAL_IDLE);
+}
+
+static void test_edge_in_camera(void)
+{
+ reset();
+ run(0, 1000, 10, 10);
+ CHECK(cal_mode(&st) == CAL_CAMERA);
+ run(1001, 1100, 10, 10); /* after the marker pulse blanking */
+ cal_on_sample(&st, 1101, 3000, 100);
+ CHECK(cal_on_edge(&st, 1102, 0));
+ CHECK(cal_mode(&st) == CAL_DISPLAY);
+ /* no more camera pulses, even at the next scheduled time */
+ for (uint32_t t = 1103; t < 2500; t++)
+ CHECK(cal_tick(&st, t) == CAL_NONE);
+}
+
+static void test_wraparound(void)
+{
+ reset();
+ uint32_t t0 = 0xFFFFFF00u; /* counter wraps during the dark run */
+ for (uint32_t i = 0; i < 1000; i++)
+ cal_on_sample(&st, t0 + i, 10, 10);
+ CHECK(cal_mode(&st) == CAL_IDLE);
+ cal_on_sample(&st, t0 + 1000, 10, 10);
+ CHECK(cal_mode(&st) == CAL_CAMERA);
+}
+
+int main(void)
+{
+ test_power_up_idle();
+ test_camera_entry();
+ test_camera_schedule();
+ test_blanking();
+ test_valid_edge();
+ test_chatter_rejected();
+ test_same_sign_rejected();
+ test_lockout();
+ test_arm_expiry();
+ test_display_exit();
+ test_camera_exit();
+ test_edge_in_camera();
+ test_wraparound();
+ printf("%d checks, %d failures\n", checks, failures);
+ return failures ? EXIT_FAILURE : EXIT_SUCCESS;
+}
diff --git a/hardware/calibrator/firmware/vendor/LICENSE-MIT-ch32fun.txt b/hardware/calibrator/firmware/vendor/LICENSE-MIT-ch32fun.txt
new file mode 100644
index 0000000..551399c
--- /dev/null
+++ b/hardware/calibrator/firmware/vendor/LICENSE-MIT-ch32fun.txt
@@ -0,0 +1,26 @@
+MIT License
+
+Copyright (c) 2023-2024 CNLohr , et. al.
+Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
+Copyright (c) 2023-2024 E. Brombaugh
+Copyright (c) 2023-2024 A. Mandera
+Copyright (c) 2005-2020 Rich Felker, et al.
+Copyright (c) 2013,2014 Michal Ludvig
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/hardware/calibrator/firmware/vendor/README.md b/hardware/calibrator/firmware/vendor/README.md
new file mode 100644
index 0000000..1fb3e24
--- /dev/null
+++ b/hardware/calibrator/firmware/vendor/README.md
@@ -0,0 +1,9 @@
+# Vendored files
+
+| File | What | Source | Licence |
+| --- | --- | --- | --- |
+| `ch32x035_regs.h` | Minimal CH32X035 register map (only the registers this firmware uses) | Structs, base addresses and bit values taken from `ch32fun/ch32x03xhw.h` of [cnlohr/ch32fun](https://github.com/cnlohr/ch32fun), commit `b28d285460ce052a179dba8f4a22c6f73ff8e328` (2026-10-31), downloaded 2026-11-08. The comparator bit positions in `OPA->CTLR2` follow `OPA_CMP_Init()` in WCH's [openwch/ch32x035](https://github.com/openwch/ch32x035) EVT (`ch32x035_opa.c` V1.0.1); no WCH code is copied. | MIT, see `LICENSE-MIT-ch32fun.txt` |
+| `LICENSE-MIT-ch32fun.txt` | Licence text of ch32fun | same repository | MIT |
+
+The MIT licence fits this MIT firmware. Keep the licence notice with the header.
+No scripts or build files from those repositories are used.
diff --git a/hardware/calibrator/firmware/vendor/ch32x035_regs.h b/hardware/calibrator/firmware/vendor/ch32x035_regs.h
new file mode 100644
index 0000000..dc8c7ad
--- /dev/null
+++ b/hardware/calibrator/firmware/vendor/ch32x035_regs.h
@@ -0,0 +1,163 @@
+/* Minimal CH32X035 register map for the AV Sync calibrator.
+ *
+ * Extracted (structs, base addresses, bit values) from ch32fun's
+ * ch32fun/ch32x03xhw.h, https://github.com/cnlohr/ch32fun, commit
+ * b28d285460ce052a179dba8f4a22c6f73ff8e328 (2026-10-31). MIT licence, see
+ * LICENSE-MIT-ch32fun.txt (copyright CNLohr et al. and Nanjing Qinheng
+ * Microelectronics). Comparator bit layout of OPA->CTLR2 follows WCH's
+ * OPA_CMP_Init() in openwch/ch32x035 EVT (ch32x035_opa.c V1.0.1); only the
+ * bit positions were taken, no code.
+ *
+ * Only what the calibrator firmware uses is here.
+ */
+#ifndef CH32X035_REGS_H
+#define CH32X035_REGS_H
+
+#include
+
+#define __I volatile const
+#define __O volatile
+#define __IO volatile
+
+typedef struct {
+ __IO uint32_t CTLR, CFGR0, INTR, APB2PRSTR, APB1PRSTR, AHBPCENR, APB2PCENR, APB1PCENR;
+ __IO uint32_t RESERVED1, RSTSCKR, AHBRSTR;
+} RCC_TypeDef;
+
+typedef struct {
+ __IO uint32_t ACTLR, KEYR, OBKEYR, STATR, CTLR, ADDR, RESERVED, OBR, WPR, MODEKEYR, BOOT_MODEKEYR;
+} FLASH_TypeDef;
+
+typedef struct {
+ __IO uint32_t CFGLR; /* pins 0-7, 4 bits each */
+ __IO uint32_t CFGHR; /* pins 8-15 */
+ __I uint32_t INDR;
+ __IO uint32_t OUTDR;
+ __IO uint32_t BSHR; /* low half sets, high half resets */
+ __IO uint32_t BCR;
+ __IO uint32_t LCKR;
+ __IO uint32_t CFGXR; /* pins 16-23 */
+ __IO uint32_t BSXR;
+} GPIO_TypeDef;
+
+typedef struct {
+ uint32_t RESERVED0;
+ __IO uint32_t PCFR1, EXTICR1, EXTICR2;
+ uint32_t RESERVED1, RESERVED2;
+ __IO uint32_t CTLR; /* USB pin options (UDP pull-up, USB IO enable) */
+} AFIO_TypeDef;
+
+typedef struct {
+ __IO uint32_t INTENR, EVENR, RTENR, FTENR, SWIEVR, INTFR;
+} EXTI_TypeDef;
+
+typedef struct {
+ __IO uint32_t STATR, CTLR1, CTLR2, SAMPTR1, SAMPTR2, IOFR1, IOFR2, IOFR3, IOFR4;
+ __IO uint32_t WDHTR, WDLTR, RSQR1, RSQR2, RSQR3, ISQR, IDATAR1, IDATAR2, IDATAR3, IDATAR4;
+ __IO uint32_t RDATAR, CTLR3, WDTR1, WDTR2, WDTR3;
+} ADC_TypeDef;
+
+typedef struct {
+ __IO uint32_t CTLR, PSCR, RLDR, STATR;
+} IWDG_TypeDef;
+
+typedef struct {
+ __IO uint16_t CFGR1, CFGR2;
+ __IO uint32_t CTLR1, CTLR2, OPAKEY, CMPKEY, POLLKEY;
+} OPA_TypeDef;
+
+typedef struct {
+ __IO uint32_t CTLR, SR, CNTL, CNTH, CMPL, CMPH;
+} SysTick_Type;
+
+typedef struct {
+ __I uint32_t ISR[8];
+ __I uint32_t IPR[8];
+ __IO uint32_t ITHRESDR, RESERVED, CFGR;
+ __I uint32_t GISR;
+ __IO uint8_t VTFIDR[4];
+ uint8_t RESERVED0[12];
+ __IO uint32_t VTFADDR[4];
+ uint8_t RESERVED1[0x90];
+ __O uint32_t IENR[8];
+ uint8_t RESERVED2[0x60];
+ __O uint32_t IRER[8];
+ uint8_t RESERVED3[0x60];
+ __O uint32_t IPSR[8];
+ uint8_t RESERVED4[0x60];
+ __O uint32_t IPRR[8];
+ uint8_t RESERVED5[0x60];
+ __IO uint32_t IACTR[8];
+ uint8_t RESERVED6[0xE0];
+ __IO uint8_t IPRIOR[256];
+} PFIC_Type;
+
+#define PERIPH_BASE 0x40000000u
+#define APB1PERIPH_BASE (PERIPH_BASE)
+#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000u)
+#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000u)
+#define CORE_PERIPH_BASE 0xE0000000u
+
+#define IWDG ((IWDG_TypeDef *)(APB1PERIPH_BASE + 0x3000u))
+#define AFIO ((AFIO_TypeDef *)(APB2PERIPH_BASE + 0x0000u))
+#define EXTI ((EXTI_TypeDef *)(APB2PERIPH_BASE + 0x0400u))
+#define GPIOA ((GPIO_TypeDef *)(APB2PERIPH_BASE + 0x0800u))
+#define GPIOB ((GPIO_TypeDef *)(APB2PERIPH_BASE + 0x0C00u))
+#define GPIOC ((GPIO_TypeDef *)(APB2PERIPH_BASE + 0x1000u))
+#define ADC1 ((ADC_TypeDef *)(APB2PERIPH_BASE + 0x2400u))
+#define RCC ((RCC_TypeDef *)(AHBPERIPH_BASE + 0x1000u))
+#define FLASH ((FLASH_TypeDef *)(AHBPERIPH_BASE + 0x2000u))
+#define OPA ((OPA_TypeDef *)(AHBPERIPH_BASE + 0x6000u))
+#define PFIC ((PFIC_Type *)(CORE_PERIPH_BASE + 0xE000u))
+#define SysTick ((SysTick_Type *)(CORE_PERIPH_BASE + 0xF000u))
+
+/* RCC */
+#define RCC_HPRE 0x000000F0u /* AHB prescaler field (reset: /6) */
+#define RCC_APB2Periph_AFIO 0x00000001u
+#define RCC_APB2Periph_GPIOA 0x00000004u
+#define RCC_APB2Periph_GPIOB 0x00000008u
+#define RCC_APB2Periph_GPIOC 0x00000010u
+#define RCC_APB2Periph_ADC1 0x00000200u
+#define RCC_ADC1RST 0x00000200u
+
+/* FLASH */
+#define FLASH_ACTLR_LATENCY 0x00000003u
+#define FLASH_ACTLR_LATENCY_2 0x00000002u /* 2 wait states, needed at 48 MHz */
+
+/* GPIO 4-bit pin modes (CFGLR/CFGHR/CFGXR) */
+#define GPIO_MODE_ANALOG 0x0u
+#define GPIO_MODE_IN_FLOAT 0x4u
+#define GPIO_MODE_OUT_PP_50M 0x3u
+#define GPIO_MODE_AF_PP_50M 0xBu
+
+/* AFIO->CTLR USB pin options: must stay 0 (no pull-up on D+, USB pins off) */
+#define AFIO_CTLR_UDP_PUE 0x0000000Cu
+#define AFIO_CTLR_UDM_PUE 0x00000003u
+#define AFIO_CTLR_USB_PHY_V33 0x00000040u
+#define AFIO_CTLR_USB_IOEN 0x00000080u
+
+/* ADC */
+#define ADC_EOC 0x00000002u
+#define ADC_ADON 0x00000001u
+#define ADC_EXTSEL 0x000E0000u /* 111 = SWSTART */
+#define ADC_EXTTRIG 0x00100000u
+#define ADC_SWSTART 0x00400000u
+#define ADC_CTLR3_CLK_DIV 0x0000000Fu
+#define ADC_CTLR3_CLK_DIV_3 0x00000008u
+
+/* OPA->CTLR2 comparator fields, CMPn (n = 0, 1, 2) at bit 5n:
+ * +0 EN, +1 MODE (0 = output to TIM2, 1 = output to the CnO pin),
+ * +2 NSEL (0 = N0, 1 = N1), +3 PSEL (0 = P0, 1 = P1), +4 HYEN (hysteresis). */
+#define CMP_FIELD(n, bit) (1u << (5u * (n) + (bit)))
+#define CMP_EN 0u
+#define CMP_MODE_IO 1u
+#define CMP_NSEL 2u
+#define CMP_PSEL 3u
+#define CMP_HYEN 4u
+#define OPA_KEY1 0x45670123u
+#define OPA_KEY2 0xCDEF89ABu
+
+/* Interrupt numbers used here (PFIC) */
+#define EXTI7_0_IRQn 20u
+
+#endif
diff --git a/hardware/calibrator/fp-lib-table b/hardware/calibrator/fp-lib-table
new file mode 100644
index 0000000..f9440bb
--- /dev/null
+++ b/hardware/calibrator/fp-lib-table
@@ -0,0 +1,4 @@
+(fp_lib_table
+ (version 7)
+ (lib (name "calibrator")(type "KiCad")(uri "${KIPRJMOD}/calibrator.pretty")(options "")(descr "AVsync calibrator custom footprints"))
+)
diff --git a/hardware/calibrator/renders/calibrator-3d.png b/hardware/calibrator/renders/calibrator-3d.png
new file mode 100644
index 0000000..d940d7a
Binary files /dev/null and b/hardware/calibrator/renders/calibrator-3d.png differ
diff --git a/hardware/calibrator/renders/calibrator-bottom.png b/hardware/calibrator/renders/calibrator-bottom.png
new file mode 100644
index 0000000..a527e86
Binary files /dev/null and b/hardware/calibrator/renders/calibrator-bottom.png differ
diff --git a/hardware/calibrator/renders/calibrator-schematic.pdf b/hardware/calibrator/renders/calibrator-schematic.pdf
new file mode 100644
index 0000000..4b52eea
Binary files /dev/null and b/hardware/calibrator/renders/calibrator-schematic.pdf differ
diff --git a/hardware/calibrator/renders/calibrator-top.png b/hardware/calibrator/renders/calibrator-top.png
new file mode 100644
index 0000000..d8831e9
Binary files /dev/null and b/hardware/calibrator/renders/calibrator-top.png differ
diff --git a/hardware/calibrator/renders/calibrator.svg b/hardware/calibrator/renders/calibrator.svg
new file mode 100644
index 0000000..5fabaeb
--- /dev/null
+++ b/hardware/calibrator/renders/calibrator.svg
@@ -0,0 +1,55106 @@
+
+
+
diff --git a/hardware/calibrator/scripts/build.sh b/hardware/calibrator/scripts/build.sh
new file mode 100755
index 0000000..5ce7978
--- /dev/null
+++ b/hardware/calibrator/scripts/build.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+# Rebuild footprints, schematic, placed board, autorouted board, ERC and DRC.
+# Needs docker; KiCad 9.0.9 and Freerouting 2.1.0 images are pinned here.
+set -e
+cd "$(dirname "$0")/.."
+python3 scripts/gen_footprints.py
+scripts/kicad.sh sh -c 'cd scripts && python3 gen_sch.py && cd .. &&
+ kicad-cli sch export netlist --format kicadsexpr -o /tmp/cal.net calibrator.kicad_sch > /dev/null &&
+ python3 scripts/check_netlist.py /tmp/cal.net'
+# The autorouter is not deterministic; retry until the ground fill has no islands left.
+for try in 1 2 3 4 5; do
+ scripts/kicad.sh sh -c 'cd scripts && python3 gen_pcb.py place' > /dev/null
+ docker run --rm -u "$(id -u):$(id -g)" -e HOME=/tmp -v "$PWD:/work" -w /work --entrypoint java \
+ ghcr.io/freerouting/freerouting:2.1.0 -jar /app/freerouting-executable.jar \
+ -de /work/calibrator.dsn -do /work/calibrator.ses -mp 15 --gui.enabled=false > /dev/null
+ if scripts/kicad.sh sh -c 'cd scripts && python3 gen_pcb.py import && python3 gen_pcb.py finish' | tee /dev/stderr | grep -q "unconnected after fill: 0"; then
+ break
+ fi
+done
+rm -f calibrator.dsn calibrator.ses
+scripts/kicad.sh kicad-cli sch erc --severity-all -o /work/erc.rpt calibrator.kicad_sch
+scripts/kicad.sh kicad-cli pcb drc --severity-all -o /work/drc.rpt calibrator.kicad_pcb
diff --git a/hardware/calibrator/scripts/check_netlist.py b/hardware/calibrator/scripts/check_netlist.py
new file mode 100644
index 0000000..87a8d9d
--- /dev/null
+++ b/hardware/calibrator/scripts/check_netlist.py
@@ -0,0 +1,35 @@
+"""Checks that the drawn schematic has exactly the connections in design.py.
+
+Usage (inside the KiCad image, after gen_sch.py):
+ kicad-cli sch export netlist --format kicadsexpr -o /tmp/cal.net calibrator.kicad_sch
+ python3 scripts/check_netlist.py /tmp/cal.net
+"""
+import re
+import sys
+
+sys.path.insert(0, __file__.rsplit("/", 1)[0])
+import design as D # noqa: E402
+
+text = open(sys.argv[1]).read()
+drawn = set()
+for chunk in text.split("(net (code")[1:]:
+ name = re.search(r'\(name "([^"]*)"', chunk).group(1)
+ nodes = frozenset(n for n in re.findall(r'\(node \(ref "([^"]+)"\) \(pin "([^"]+)"\)', chunk)
+ if not n[0].startswith("#"))
+ if nodes and not name.startswith("unconnected"):
+ drawn.add(nodes)
+want = {}
+for ref, p in D.PARTS.items():
+ for pin, net in p[4].items():
+ if net:
+ want.setdefault(net, set()).add((ref, pin))
+want = {frozenset(v) for v in want.values()}
+drawn = {d for d in drawn if len(d) > 0}
+missing = want - drawn
+extra = drawn - want
+for s in missing:
+ print("in design.py but not drawn:", sorted(s))
+for s in extra:
+ print("drawn but not in design.py:", sorted(s))
+print("netlist check:", "OK" if not missing and not extra else "MISMATCH")
+sys.exit(1 if missing or extra else 0)
diff --git a/hardware/calibrator/scripts/design.py b/hardware/calibrator/scripts/design.py
new file mode 100644
index 0000000..3b60dbe
--- /dev/null
+++ b/hardware/calibrator/scripts/design.py
@@ -0,0 +1,73 @@
+"""AVsync calibrator: one place for parts, nets and placement.
+
+gen_sch.py (schematic) and gen_pcb.py (board) both read this file, so the
+schematic and the board always have the same parts and the same nets.
+Units: mm. Board origin is the top-left corner of the board outline.
+"""
+
+# Board outline (mm). End A (x = 0) carries the LED and the two sensors.
+# End B (x = BOARD_W) carries the USB-C receptacle.
+BOARD_W = 66.0
+BOARD_H = 22.0
+CORNER_R = 2.0
+SPLIT_Y = BOARD_H / 2 # sensor split line runs along the board at this y
+NOTCH_R = 1.0 # half-round notch in end A, on the split line
+PCB_THICKNESS = 1.2 # makes the reverse-gullwing sensor lenses flush with the bottom
+
+# KiCad shows the board at this offset on the page.
+ORIGIN = (100.0, 100.0)
+
+FP_R0402 = "Resistor_SMD:R_0402_1005Metric"
+FP_R0603 = "Resistor_SMD:R_0603_1608Metric"
+FP_C0402 = "Capacitor_SMD:C_0402_1005Metric"
+FP_C0805 = "Capacitor_SMD:C_0805_2012Metric"
+
+# ref: (lib_id, value, footprint, LCSC, {pin: net}, pcb (x, y, rot, side))
+# The schematic drawing (positions and wires) is in gen_sch.py.
+PARTS = {
+ "U1": ("calibrator:CH32X035G8R6", "CH32X035G8R6", "Package_SO:QSOP-28_3.9x9.9mm_P0.635mm", "C49118551",
+ {"6": "VDD", "7": "GND", "3": "DP", "2": "DM", "5": "SENS_A", "9": "SENS_A", "11": "SENS_B",
+ "15": "LED_DRV", "16": "BUZ_DRV",
+ "1": None, "4": None, "8": None, "10": None, "12": None, "13": None, "14": None, "17": None,
+ "18": None, "19": None, "20": None, "21": None, "22": None, "23": None, "24": None, "25": None,
+ "26": None, "27": None, "28": None},
+ (29.0, 11.0, 180, "F")),
+ "J1": ("Connector:USB_C_Receptacle_USB2.0_16P", "TYPE-C 16P",
+ "Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12", "C393939",
+ {"A4": "VBUS", "A9": "VBUS", "B4": "VBUS", "B9": "VBUS", "A1": "GND", "A12": "GND", "B1": "GND",
+ "B12": "GND", "S1": "GND", "A5": "CC1", "B5": "CC2", "A6": "DP", "B6": "DP", "A7": "DM", "B7": "DM",
+ "A8": None, "B8": None},
+ (BOARD_W - 3.35, SPLIT_Y, 90, "F")),
+ "SW1": ("Switch:SW_Push", "TS-1187A (BOOT)", "Button_Switch_SMD:SW_Push_1P1T_XKB_TS-1187A", "C318884",
+ {"1": "BOOT", "2": "VDD"}, (40.5, 6.0, 0, "F")),
+ "R9": ("Device:R", "4.7k", FP_R0402, "C25900", {"1": "DP", "2": "BOOT"}, (40.5, 16.6, 90, "F")),
+ "R1": ("Device:R", "5.1k", FP_R0402, "C25905", {"1": "CC1", "2": "GND"}, (56.6, 7.0, 90, "F")),
+ "R2": ("Device:R", "5.1k", FP_R0402, "C25905", {"1": "CC2", "2": "GND"}, (56.6, 15.0, 90, "F")),
+ "C1": ("Device:C", "10u", FP_C0805, "C15850", {"1": "VBUS", "2": "GND"}, (56.6, 2.8, 0, "F")),
+ "R3": ("Device:R", "10", FP_R0402, "C25077", {"1": "VBUS", "2": "VDD"}, (34.3, 2.4, 0, "F")),
+ "C2": ("Device:C", "1u", FP_C0402, "C52923", {"1": "VDD", "2": "GND"}, (33.6, 12.0, 90, "F")),
+ "C3": ("Device:C", "100n", FP_C0402, "C1525", {"1": "VDD", "2": "GND"}, (35.0, 12.0, 90, "F")),
+ "BZ1": ("Device:Buzzer", "MLT-8530", "calibrator:Buzzer_MLT-8530", "C94599",
+ {"1": "VBUS", "2": "BUZ_N"}, (14.6, SPLIT_Y, 180, "F")),
+ "D2": ("Device:D", "1N4148WS", "Diode_SMD:D_SOD-323", "C2128",
+ {"1": "VBUS", "2": "BUZ_N"}, (21.6, 4.3, 90, "F")),
+ "Q1": ("Transistor_BJT:Q_NPN_BEC", "S8050", "Package_TO_SOT_SMD:SOT-23", "C2146",
+ {"1": "BUZ_B", "2": "GND", "3": "BUZ_N"}, (21.6, 17.6, 0, "F")),
+ "R5": ("Device:R", "1k", FP_R0402, "C11702", {"1": "BUZ_DRV", "2": "BUZ_B"}, (24.4, 15.4, 90, "F")),
+ "R6": ("Device:R", "100k", FP_R0402, "C25741", {"1": "BUZ_B", "2": "GND"}, (24.4, 19.6, 0, "F")),
+ "R4": ("Device:R", "150", FP_R0603, "C22808", {"1": "LED_DRV", "2": "LED_A"}, (23.2, 9.6, 90, "F")),
+ "D1": ("Device:LED", "XL-3216UWC-FB white", "calibrator:LED_1206_ReverseMount_XL-3216UWC-FB",
+ "C3646935", {"1": "GND", "2": "LED_A"}, (4.4, SPLIT_Y, 0, "F")),
+ "Q2": ("Device:Q_Photo_NPN", "VEMT2500X01", "calibrator:Vishay_VEMT2500X01_ReverseGullwing", "C3210911",
+ {"1": "VDD", "2": "SENS_A"}, (5.0, SPLIT_Y - 4.5, 0, "F")),
+ "R7": ("Device:R", "22k", FP_R0402, "C25768", {"1": "SENS_A", "2": "GND"}, (33.6, 8.4, 90, "F")),
+ "C4": ("Device:C", "1n", FP_C0402, "C1523", {"1": "SENS_A", "2": "GND"}, (35.0, 8.4, 90, "F")),
+ "Q3": ("Device:Q_Photo_NPN", "VEMT2500X01", "calibrator:Vishay_VEMT2500X01_ReverseGullwing", "C3210911",
+ {"1": "VDD", "2": "SENS_B"}, (5.0, SPLIT_Y + 4.5, 0, "F")),
+ "R8": ("Device:R", "22k", FP_R0402, "C25768", {"1": "SENS_B", "2": "GND"}, (33.6, 5.4, 90, "F")),
+ "C5": ("Device:C", "1n", FP_C0402, "C1523", {"1": "SENS_B", "2": "GND"}, (35.0, 5.4, 90, "F")),
+}
+
+
+NETS = sorted({n for p in PARTS.values() for n in p[4].values() if n})
+POWER_NETS = ["VBUS", "GND", "VDD", "BUZ_N"]
diff --git a/hardware/calibrator/scripts/fab.sh b/hardware/calibrator/scripts/fab.sh
new file mode 100755
index 0000000..b892768
--- /dev/null
+++ b/hardware/calibrator/scripts/fab.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+# Export JLCPCB files: gerbers + drill (zipped), BOM and CPL (pick and place),
+# 3D renders and the schematic as PDF/SVG. Needs docker (pinned KiCad image).
+set -e
+cd "$(dirname "$0")/.."
+mkdir -p fab/gerbers renders
+rm -f fab/gerbers/* fab/calibrator-gerbers.zip
+scripts/kicad.sh sh -c '
+kicad-cli pcb export gerbers --layers F.Cu,B.Cu,F.Paste,F.SilkS,B.SilkS,F.Mask,B.Mask,Edge.Cuts \
+ --subtract-soldermask -o fab/gerbers/ calibrator.kicad_pcb &&
+kicad-cli pcb export drill --format excellon --excellon-units mm --excellon-oval-format alternate \
+ --excellon-separate-th -o fab/gerbers/ calibrator.kicad_pcb &&
+kicad-cli pcb export pos --side front --format csv --units mm --exclude-dnp -o fab/calibrator-pos.csv calibrator.kicad_pcb &&
+kicad-cli sch export pdf -o renders/calibrator-schematic.pdf calibrator.kicad_sch &&
+kicad-cli sch export svg -o renders/ calibrator.kicad_sch &&
+kicad-cli pcb render --side top --width 1600 --height 700 --background opaque --quality high --zoom 1.8 -o renders/calibrator-top.png calibrator.kicad_pcb &&
+kicad-cli pcb render --side bottom --width 1600 --height 700 --background opaque --quality high --zoom 1.8 -o renders/calibrator-bottom.png calibrator.kicad_pcb &&
+kicad-cli pcb render --side top --width 1600 --height 1000 --background opaque --quality high --perspective --rotate "-45,0,25" --zoom 1.3 -o renders/calibrator-3d.png calibrator.kicad_pcb
+' > /dev/null
+python3 scripts/jlc_files.py
+python3 -c '
+import os, zipfile
+d = "fab/gerbers"
+with zipfile.ZipFile("fab/calibrator-gerbers.zip", "w", zipfile.ZIP_DEFLATED) as z:
+ for n in sorted(os.listdir(d)):
+ z.write(os.path.join(d, n), n)
+'
+echo "fab files:"; ls fab
diff --git a/hardware/calibrator/scripts/gen_footprints.py b/hardware/calibrator/scripts/gen_footprints.py
new file mode 100644
index 0000000..e198268
--- /dev/null
+++ b/hardware/calibrator/scripts/gen_footprints.py
@@ -0,0 +1,235 @@
+"""Writes the four custom footprints and simple box 3D models.
+
+Run: python3 gen_footprints.py (plain Python, no KiCad needed)
+Sources of the dimensions are in each footprint's description.
+"""
+import math
+import os
+import uuid
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+LIB = os.path.join(HERE, "..", "calibrator.pretty")
+MODELS = os.path.join(HERE, "..", "3d")
+# KiCad resolves ${KIPRJMOD} to the project folder.
+MODEL_DIR = "${KIPRJMOD}/3d"
+
+
+def u():
+ return str(uuid.uuid5(uuid.NAMESPACE_URL, f"calibrator-{next(_n)}"))
+
+
+def _counter():
+ i = 0
+ while True:
+ i += 1
+ yield i
+
+
+_n = _counter()
+
+
+def stroke(w):
+ return f'(stroke (width {w}) (type solid))'
+
+
+def line(x1, y1, x2, y2, layer, w=0.12):
+ return f' (fp_line (start {x1:.3f} {y1:.3f}) (end {x2:.3f} {y2:.3f}) {stroke(w)} (layer "{layer}") (uuid "{u()}"))\n'
+
+
+def rect(x1, y1, x2, y2, layer, w=0.05):
+ return (line(x1, y1, x2, y1, layer, w) + line(x2, y1, x2, y2, layer, w)
+ + line(x2, y2, x1, y2, layer, w) + line(x1, y2, x1, y1, layer, w))
+
+
+def arc(cx, cy, r, a0, a1, layer, w=0.1):
+ """Arc from angle a0 to a1 (degrees, screen coordinates, y down)."""
+ def pt(a):
+ return cx + r * math.cos(math.radians(a)), cy + r * math.sin(math.radians(a))
+ s, m, e = pt(a0), pt((a0 + a1) / 2), pt(a1)
+ return (f' (fp_arc (start {s[0]:.4f} {s[1]:.4f}) (mid {m[0]:.4f} {m[1]:.4f}) (end {e[0]:.4f} {e[1]:.4f}) '
+ f'{stroke(w)} (layer "{layer}") (uuid "{u()}"))\n')
+
+
+def circle(cx, cy, r, layer, w=0.12):
+ return f' (fp_circle (center {cx} {cy}) (end {cx + r} {cy}) {stroke(w)} (fill no) (layer "{layer}") (uuid "{u()}"))\n'
+
+
+def rounded_cutout(w, h, r):
+ """Closed rounded rectangle on Edge.Cuts, centred on 0,0."""
+ x, y = w / 2, h / 2
+ s = ""
+ s += line(-x + r, -y, x - r, -y, "Edge.Cuts", 0.05)
+ s += line(x, -y + r, x, y - r, "Edge.Cuts", 0.05)
+ s += line(x - r, y, -x + r, y, "Edge.Cuts", 0.05)
+ s += line(-x, y - r, -x, -y + r, "Edge.Cuts", 0.05)
+ s += arc(x - r, -y + r, r, 270, 360, "Edge.Cuts", 0.05)
+ s += arc(x - r, y - r, r, 0, 90, "Edge.Cuts", 0.05)
+ s += arc(-x + r, y - r, r, 90, 180, "Edge.Cuts", 0.05)
+ s += arc(-x + r, -y + r, r, 180, 270, "Edge.Cuts", 0.05)
+ return s
+
+
+def smd(name, x, y, w, h, rot=0):
+ return (f' (pad "{name}" smd roundrect (at {x:.3f} {y:.3f} {rot}) (size {w} {h}) '
+ f'(layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.15) (uuid "{u()}"))\n')
+
+
+def text(kind, value, y, layer, hide=False):
+ h = " (hide yes)" if hide else ""
+ return (f' (property "{kind}" "{value}" (at 0 {y} 0) (layer "{layer}"){h} (uuid "{u()}") '
+ f'(effects (font (size 0.8 0.8) (thickness 0.12))))\n')
+
+
+def model(name, z=0.0, rot=0):
+ return (f' (model "{MODEL_DIR}/{name}.wrl" (offset (xyz 0 0 {z})) (scale (xyz 1 1 1)) '
+ f'(rotate (xyz 0 0 {rot})))\n')
+
+
+def footprint(name, descr, body, ref_y, val_y, attr="smd"):
+ s = (f'(footprint "{name}"\n (version 20241229)\n (generator "calibrator-gen")\n (generator_version "9.0")\n'
+ f' (layer "F.Cu")\n (descr "{descr}")\n')
+ s += text("Reference", "REF**", ref_y, "F.SilkS")
+ s += text("Value", name, val_y, "F.Fab")
+ s += text("Datasheet", "", 0, "F.Fab", hide=True)
+ s += text("Description", "", 0, "F.Fab", hide=True)
+ s += f' (attr {attr})\n'
+ s += body
+ s += ")\n"
+ with open(os.path.join(LIB, name + ".kicad_mod"), "w") as f:
+ f.write(s)
+
+
+def buzzer():
+ # Huaneng MLT-8530 datasheet (LCSC C94599): 8.5 x 8.5 x 3.0 mm, 4 pads 2.3 x 2.3,
+ # 4.8 mm gap -> pad centres at +-3.55. Pad 1 (+) top left, pad 2 (-) bottom left,
+ # two dummy pads on the right. The sound port is on the right side (+x).
+ b = ""
+ b += smd("1", -3.55, -3.55, 2.3, 2.3)
+ b += smd("2", -3.55, 3.55, 2.3, 2.3)
+ b += smd("", 3.55, -3.55, 2.3, 2.3)
+ b += smd("", 3.55, 3.55, 2.3, 2.3)
+ b += rect(-4.25, -4.25, 4.25, 4.25, "F.Fab", 0.1)
+ b += rect(-5.0, -5.0, 5.0, 5.0, "F.CrtYd", 0.05)
+ # silkscreen: body sides between the pads, "+" mark and an arrow for the sound port
+ b += line(-4.35, -2.2, -4.35, 2.2, "F.SilkS")
+ b += line(4.35, -2.2, 4.35, 2.2, "F.SilkS")
+ b += line(-2.2, -4.35, 2.2, -4.35, "F.SilkS")
+ b += line(-2.2, 4.35, 2.2, 4.35, "F.SilkS")
+ b += line(-5.6, -3.55, -4.9, -3.55, "F.SilkS")
+ b += line(-5.25, -3.9, -5.25, -3.2, "F.SilkS")
+ b += line(2.6, 0, 3.6, 0, "F.SilkS")
+ b += line(3.6, 0, 3.1, -0.4, "F.SilkS")
+ b += line(3.6, 0, 3.1, 0.4, "F.SilkS")
+ b += model("MLT-8530")
+ footprint("Buzzer_MLT-8530",
+ "Magnetic buzzer Huaneng MLT-8530 8.5x8.5x3mm SMD, sound port on +x side, datasheet LCSC C94599",
+ b, -5.6, 5.6)
+
+
+def led_reverse():
+ # XINGLIGHT XL-3216UWC-FB (LCSC C3646935): 3.2 x 1.6 mm substrate, lens 1.86 x 1.4 x 0.52 mm
+ # sits in a board cut-out and shines through the board. Pad 1 = cathode (-), pad 2 = anode (+).
+ # Cut-out 2.1 x 1.7 mm (r 0.5, router bit); pads 0.3 mm from the cut-out edge (JLC copper-to-edge).
+ b = ""
+ b += smd("1", -1.7, 0, 0.7, 1.5)
+ b += smd("2", 1.7, 0, 0.7, 1.5)
+ b += rounded_cutout(2.1, 1.7, 0.5)
+ b += rect(-1.6, -0.8, 1.6, 0.8, "F.Fab", 0.1)
+ b += rect(-2.3, -1.1, 2.3, 1.1, "F.CrtYd", 0.05)
+ b += line(-2.45, -1.0, -2.45, 1.0, "F.SilkS") # cathode side mark
+ b += model("LED_reverse_1206")
+ footprint("LED_1206_ReverseMount_XL-3216UWC-FB",
+ "Reverse mount 1206 LED shining through a board cut-out, XINGLIGHT XL-3216UWC-FB (LCSC C3646935); "
+ "Lite-On LTW-C230DS fits the same footprint",
+ b, -1.8, 1.8)
+
+
+def phototransistor_rgw():
+ # Vishay VEMT2500X01 (doc 81134), reverse gullwing: body above the board, dome lens (D 1.8 mm)
+ # looks down through a D 2.3 mm hole. Solder pad proposal 1.7 x 0.75 at 6.7 mm overall.
+ # Pad 1 = collector, pad 2 = emitter (tape drawing: lead I collector, lead II emitter).
+ b = ""
+ b += smd("1", -2.5, 0, 1.7, 0.75)
+ b += smd("2", 2.5, 0, 1.7, 0.75)
+ b += (f' (pad "" np_thru_hole circle (at 0 0) (size 2.3 2.3) (drill 2.3) '
+ f'(layers "*.Cu" "*.Mask") (uuid "{u()}"))\n')
+ b += rect(-1.15, -1.15, 1.15, 1.15, "F.Fab", 0.1)
+ b += rect(-3.6, -1.6, 3.6, 1.6, "F.CrtYd", 0.05)
+ b += line(-1.25, -1.25, 1.25, -1.25, "F.SilkS")
+ b += line(-1.25, 1.25, 1.25, 1.25, "F.SilkS")
+ b += line(-1.25, -1.25, -1.25, -0.6, "F.SilkS") # collector side mark
+ b += model("VEMT2500X01_RGW")
+ footprint("Vishay_VEMT2500X01_ReverseGullwing",
+ "Phototransistor Vishay VEMT2500X01 reverse gullwing, lens looks through a 2.3 mm hole; "
+ "VEMT2000X01 is the same package",
+ b, -2.0, 2.0)
+
+
+def usb_c_6p():
+ # SHOU HAN TYPE-C 6P (LCSC C456012) recommended layout: signal pads at +-0.5 (CC), +-1.5 (VBUS),
+ # +-2.7 (GND); shell slots 0.6 x 1.4 (pad 1.0 x 1.8) at +-4.32, 3.8 mm apart, front slots 2.6 mm
+ # behind the product edge. Origin = body centre, like KiCad's GCT USB4125 6P footprint (same family).
+ b = ""
+ py, pl = -3.35, 1.4
+ for name, x, w in [("A5", -0.5, 0.6), ("B5", 0.5, 0.6), ("B9", -1.5, 0.7), ("A9", 1.5, 0.7),
+ ("B12", -2.7, 0.8), ("A12", 2.7, 0.8)]:
+ b += smd(name, x, py, w, pl)
+ for x in (-4.32, 4.32):
+ for y in (-3.0, 0.8):
+ b += (f' (pad "S1" thru_hole oval (at {x} {y}) (size 1.0 1.8) (drill oval 0.6 1.4) '
+ f'(layers "*.Cu" "*.Mask") (remove_unused_layers no) (uuid "{u()}"))\n')
+ b += rect(-4.47, -3.4, 4.47, 3.4, "F.Fab", 0.1)
+ b += rect(-5.2, -4.4, 5.2, 3.9, "F.CrtYd", 0.05)
+ b += line(-4.6, -1.9, -4.6, -0.3, "F.SilkS")
+ b += line(4.6, -1.9, 4.6, -0.3, "F.SilkS")
+ b += line(-4.6, 1.9, -4.6, 2.7, "F.SilkS")
+ b += line(4.6, 1.9, 4.6, 2.7, "F.SilkS")
+ b += line(-5.0, 3.1, 5.0, 3.1, "Dwgs.User", 0.1) # board edge
+ b += (" (model \"${KICAD9_3DMODEL_DIR}/Connector_USB.3dshapes/"
+ "USB_C_Receptacle_GCT_USB4125-xx-x_6P_TopMnt_Horizontal.step\" (offset (xyz 0 0 0)) "
+ "(scale (xyz 1 1 1)) (rotate (xyz 0 0 0)))\n")
+ footprint("USB_C_Receptacle_ShouHan_TYPE-C-6P",
+ "USB-C receptacle 6 pin power only, SHOU HAN TYPE-C 6P (LCSC C456012), top mount horizontal; "
+ "board edge 3.1 mm in front of the body centre",
+ b, -5.0, 4.6)
+
+
+# ---- simple VRML box models (KiCad VRML unit = 0.1 inch) ----
+def vrml(name, boxes):
+ k = 1 / 2.54
+ s = "#VRML V2.0 utf8\n"
+ for (cx, cy, cz, sx, sy, sz, rgb) in boxes:
+ s += (f"Transform {{ translation {cx * k:.4f} {cy * k:.4f} {cz * k:.4f} children [ Shape {{ "
+ f"appearance Appearance {{ material Material {{ diffuseColor {rgb} }} }} "
+ f"geometry Box {{ size {sx * k:.4f} {sy * k:.4f} {sz * k:.4f} }} }} ] }}\n")
+ with open(os.path.join(MODELS, name + ".wrl"), "w") as f:
+ f.write(s)
+
+
+def models():
+ # VRML y is up on screen = -y in KiCad; boxes are symmetric so it does not matter here.
+ vrml("MLT-8530", [(0, 0, 1.5, 8.5, 8.5, 3.0, "0.08 0.08 0.08"), (-4.35, 0, 1.5, 0.3, 1.2, 1.0, "0.3 0.3 0.3")])
+ vrml("LED_reverse_1206", [(0, 0, 0.14, 3.2, 1.6, 0.28, "0.9 0.9 0.85"), (0, 0, -0.26, 1.86, 1.4, 0.52, "1 1 0.6")])
+ # KiCad QSOP-28 footprint: pin rows along y at x = +-2.64, pitch 0.635, pin 1 top left.
+ # (VRML y points the other way than KiCad's y.)
+ qsop = [(0, 0, 0.85, 3.9, 9.9, 1.5, "0.12 0.12 0.12"), (-1.15, 4.3, 1.62, 0.5, 0.5, 0.05, "0.6 0.6 0.6")]
+ for i in range(14):
+ y = 4.1275 - 0.635 * i
+ qsop += [(-2.45, y, 0.25, 1.1, 0.25, 0.2, "0.8 0.8 0.8"), (2.45, y, 0.25, 1.1, 0.25, 0.2, "0.8 0.8 0.8")]
+ vrml("QSOP-28", qsop)
+ # XKB TS-1187A: 5.1 x 5.1 body, pads at x = +-3, y = +-1.875
+ vrml("TS-1187A", [(0, 0, 0.75, 5.1, 5.1, 1.5, "0.85 0.85 0.85"), (0, 0, 1.6, 3.0, 3.0, 0.3, "0.15 0.15 0.15")] +
+ [(sx * 2.9, sy * 1.875, 0.1, 1.2, 0.7, 0.2, "0.8 0.8 0.8") for sx in (-1, 1) for sy in (-1, 1)])
+ vrml("VEMT2500X01_RGW", [(0, 0, 0.8, 2.3, 2.3, 1.6, "0.75 0.8 0.85"), (0, 0, -0.58, 1.8, 1.8, 1.17, "0.7 0.75 0.8"),
+ (-2.5, 0, 0.1, 1.2, 0.4, 0.2, "0.8 0.8 0.8"), (2.5, 0, 0.1, 1.2, 0.4, 0.2, "0.8 0.8 0.8")])
+
+
+if __name__ == "__main__":
+ os.makedirs(LIB, exist_ok=True)
+ os.makedirs(MODELS, exist_ok=True)
+ buzzer()
+ led_reverse()
+ phototransistor_rgw()
+
+ models()
+ print("footprints and models written")
diff --git a/hardware/calibrator/scripts/gen_pcb.py b/hardware/calibrator/scripts/gen_pcb.py
new file mode 100644
index 0000000..582a82f
--- /dev/null
+++ b/hardware/calibrator/scripts/gen_pcb.py
@@ -0,0 +1,606 @@
+"""Builds calibrator.kicad_pcb from design.py (placement, nets, outline, zones, silkscreen).
+
+Steps (all inside the KiCad image, see scripts/build.sh):
+ python3 gen_pcb.py place -> unrouted board + calibrator.dsn for Freerouting
+ python3 gen_pcb.py finish -> imports calibrator.ses, fills zones, saves the board
+"""
+import os
+import sys
+
+import faulthandler
+import pcbnew
+
+faulthandler.enable()
+
+import design as D
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+PRJ = os.path.abspath(os.path.join(HERE, ".."))
+PCB = os.path.join(PRJ, "calibrator.kicad_pcb")
+DSN = os.path.join(PRJ, "calibrator.dsn")
+SES = os.path.join(PRJ, "calibrator.ses")
+STOCK = "/usr/share/kicad/footprints"
+
+OX, OY = D.ORIGIN
+
+
+def mm(x, y):
+ return pcbnew.VECTOR2I(pcbnew.FromMM(OX + x), pcbnew.FromMM(OY + y))
+
+
+def seg(board, layer, x1, y1, x2, y2, w=0.12):
+ s = pcbnew.PCB_SHAPE(board, pcbnew.SHAPE_T_SEGMENT)
+ s.SetLayer(layer)
+ s.SetStart(mm(x1, y1))
+ s.SetEnd(mm(x2, y2))
+ s.SetWidth(pcbnew.FromMM(w))
+ board.Add(s)
+
+
+def arc(board, layer, a, m, b, w=0.12):
+ s = pcbnew.PCB_SHAPE(board, pcbnew.SHAPE_T_ARC)
+ s.SetLayer(layer)
+ s.SetArcGeometry(mm(*a), mm(*m), mm(*b))
+ s.SetWidth(pcbnew.FromMM(w))
+ board.Add(s)
+
+
+def circle(board, layer, cx, cy, r, w=0.15):
+ s = pcbnew.PCB_SHAPE(board, pcbnew.SHAPE_T_CIRCLE)
+ s.SetLayer(layer)
+ s.SetCenter(mm(cx, cy))
+ s.SetEnd(mm(cx + r, cy))
+ s.SetWidth(pcbnew.FromMM(w))
+ s.SetFilled(False)
+ board.Add(s)
+
+
+def text(board, layer, s, x, y, size=0.8, angle=0, bold=False):
+ t = pcbnew.PCB_TEXT(board)
+ t.SetText(s)
+ t.SetLayer(layer)
+ t.SetPosition(mm(x, y))
+ t.SetTextSize(pcbnew.VECTOR2I(pcbnew.FromMM(size), pcbnew.FromMM(size)))
+ t.SetTextThickness(pcbnew.FromMM(max(0.155, size * 0.15 * (1.4 if bold else 1.0))))
+ t.SetTextAngleDegrees(angle)
+ if layer == pcbnew.B_SilkS:
+ t.SetMirrored(True)
+ board.Add(t)
+
+
+def outline(board):
+ W, H, r, n, sy = D.BOARD_W, D.BOARD_H, D.CORNER_R, D.NOTCH_R, D.SPLIT_Y
+ e = pcbnew.Edge_Cuts
+ c = 0.7071 * r
+ seg(board, e, r, 0, W - r, 0, 0.05)
+ arc(board, e, (W - r, 0), (W - r + c, r - c), (W, r), 0.05)
+ seg(board, e, W, r, W, H - r, 0.05)
+ arc(board, e, (W, H - r), (W - r + c, H - r + c), (W - r, H), 0.05)
+ seg(board, e, W - r, H, r, H, 0.05)
+ arc(board, e, (r, H), (r - c, H - r + c), (0, H - r), 0.05)
+ seg(board, e, 0, H - r, 0, sy + n, 0.05)
+ arc(board, e, (0, sy + n), (n, sy), (0, sy - n), 0.05) # alignment notch on the split line
+ seg(board, e, 0, sy - n, 0, r, 0.05)
+ arc(board, e, (0, r), (r - c, r - c), (r, 0), 0.05)
+
+
+def zone(board, net, layer):
+ z = pcbnew.ZONE(board)
+ z.SetLayer(layer)
+ z.SetNet(net)
+ z.SetLocalClearance(pcbnew.FromMM(0.25))
+ z.SetMinThickness(pcbnew.FromMM(0.2))
+ z.SetPadConnection(pcbnew.ZONE_CONNECTION_FULL)
+ z.SetThermalReliefGap(pcbnew.FromMM(0.25))
+ z.SetThermalReliefSpokeWidth(pcbnew.FromMM(0.3))
+ z.SetAssignedPriority(0)
+ z.SetIslandRemovalMode(pcbnew.ISLAND_REMOVAL_MODE_ALWAYS)
+ pts = [(0.2, 0.2), (D.BOARD_W - 0.2, 0.2), (D.BOARD_W - 0.2, D.BOARD_H - 0.2), (0.2, D.BOARD_H - 0.2)]
+ poly = z.Outline()
+ poly.NewOutline()
+ for x, y in pts:
+ poly.Append(pcbnew.FromMM(OX + x), pcbnew.FromMM(OY + y))
+ board.Add(z)
+
+
+def keepout(board, x1, y1, x2, y2, layer=None, tracks=True):
+ """No tracks or vias here (optical holes, gold logo copper)."""
+ z = pcbnew.ZONE(board)
+ z.SetIsRuleArea(True)
+ if layer is None:
+ z.SetLayerSet(pcbnew.LSET.AllCuMask())
+ else:
+ z.SetLayer(layer)
+ z.SetDoNotAllowTracks(tracks)
+ z.SetDoNotAllowVias(True)
+ z.SetDoNotAllowPads(False)
+ z.SetDoNotAllowFootprints(False)
+ z.SetDoNotAllowCopperPour(False)
+ poly = z.Outline()
+ poly.NewOutline()
+ for x, y in [(x1, y1), (x2, y1), (x2, y2), (x1, y2)]:
+ poly.Append(pcbnew.FromMM(OX + x), pcbnew.FromMM(OY + y))
+ board.Add(z)
+
+
+# ---------------------------------------------------------------- artwork
+ICON_S = 1.2427184466 # scale of the artwork group in assets/app-icon.svg
+JLC_TEXT = 1.0 # JLC minimum silkscreen text height (mm)
+JLC_LINE = 0.153 # JLC minimum silkscreen line width (mm)
+
+
+def shape_poly(board, layer, pts, w):
+ for a, b in zip(pts, pts[1:]):
+ seg(board, layer, a[0], a[1], b[0], b[1], w)
+
+
+def disc(board, layer, cx, cy, r):
+ s = pcbnew.PCB_SHAPE(board, pcbnew.SHAPE_T_CIRCLE)
+ s.SetLayer(layer)
+ s.SetCenter(mm(cx, cy))
+ s.SetEnd(mm(cx + r, cy))
+ s.SetWidth(0)
+ s.SetFilled(True)
+ board.Add(s)
+
+
+def box(board, layer, x1, y1, x2, y2):
+ s = pcbnew.PCB_SHAPE(board, pcbnew.SHAPE_T_RECT)
+ s.SetLayer(layer)
+ s.SetStart(mm(x1, y1))
+ s.SetEnd(mm(x2, y2))
+ s.SetWidth(0)
+ s.SetFilled(True)
+ board.Add(s)
+
+
+def logo(board, cx, cy, size, side):
+ """AVsync mark from assets/app-icon.svg (CERN-OHL-P-2.0 on this board).
+
+ Cyan/white strokes -> silkscreen. Orange parts (waveform, ring of the centre dot) ->
+ bare copper with a solder-mask opening and no paste, so ENIG makes them gold.
+ The copper has no net and is kept clear of tracks by a keep-out. On the bottom the
+ mark is mirrored so it reads correctly from below."""
+ silk, cu, mask = ((pcbnew.F_SilkS, pcbnew.F_Cu, pcbnew.F_Mask) if side == "F"
+ else (pcbnew.B_SilkS, pcbnew.B_Cu, pcbnew.B_Mask))
+ k = size / 149.2 * ICON_S # mm per SVG unit (the artwork spans 149.2 scaled units)
+ sx = -1 if side == "B" else 1
+
+ def P(u, v):
+ return cx + sx * (u - 128) * k, cy + (v - 128) * k
+
+ def W(w):
+ return max(JLC_LINE, w * k)
+
+ for poly in ([(68, 91), (68, 68), (91, 68)], [(165, 68), (188, 68), (188, 91)],
+ [(68, 165), (68, 188), (91, 188)], [(165, 188), (188, 188), (188, 165)]):
+ shape_poly(board, silk, [P(*q) for q in poly], W(9))
+ # meter panel: rounded rectangle 84,88 - 172,168, r 9
+ x1, y1, x2, y2, r = 84, 88, 172, 168, 9
+ c = 0.7071 * r
+ shape_poly(board, silk, [P(x1 + r, y1), P(x2 - r, y1)], W(3))
+ shape_poly(board, silk, [P(x2, y1 + r), P(x2, y2 - r)], W(3))
+ shape_poly(board, silk, [P(x2 - r, y2), P(x1 + r, y2)], W(3))
+ shape_poly(board, silk, [P(x1, y2 - r), P(x1, y1 + r)], W(3))
+ for (ax, ay), (mx, my), (bx, by) in [((x2 - r, y1), (x2 - r + c, y1 + r - c), (x2, y1 + r)),
+ ((x2, y2 - r), (x2 - r + c, y2 - r + c), (x2 - r, y2)),
+ ((x1 + r, y2), (x1 + r - c, y2 - r + c), (x1, y2 - r)),
+ ((x1, y1 + r), (x1 + r - c, y1 + r - c), (x1 + r, y1))]:
+ arc(board, silk, P(ax, ay), P(mx, my), P(bx, by), W(3))
+ # Dashed centre line like the original (y 74..181, dasharray 4 7). In the SVG the
+ # centre dot is drawn on top, so dash parts under the dot/ring are hidden there too.
+ dashes = []
+ v = 74.0
+ while v < 181:
+ lo, hi = v, min(v + 4, 181)
+ if hi <= 128 - 9 - 1.5 or lo >= 128 + 9 + 1.5: # outside the ring (+ room for the round ends)
+ dashes.append((lo, hi))
+ v += 11
+ dw = W(2.5)
+ for lo, hi in dashes:
+ # dash drawn without its round caps going past lo/hi (SVG dashes are butt-ended)
+ cap = dw / 2 / k
+ shape_poly(board, silk, [P(128, lo + cap), P(128, max(lo + cap, hi - cap))], dw)
+ shape_poly(board, silk, [P(94, 199), P(162, 199)], W(4))
+
+ # Gold copper: waveform + ring as one polygon. White silkscreen (dashes, centre dot)
+ # sits on top in the original; JLC removes silk from bare copper, so the copper (and
+ # its mask opening) is cut away under every dash and inside the ring.
+ err = pcbnew.FromMM(0.005)
+ gold = pcbnew.SHAPE_POLY_SET()
+ pts = [(91, 128), (102, 128), (108, 113), (118, 145), (128, 102),
+ (139, 148), (149, 117), (155, 128), (165, 128)]
+ tmp = []
+ for (x1, y1), (x2, y2) in zip(pts, pts[1:]):
+ s = pcbnew.PCB_SHAPE(board, pcbnew.SHAPE_T_SEGMENT)
+ s.SetStart(mm(*P(x1, y1)))
+ s.SetEnd(mm(*P(x2, y2)))
+ s.SetWidth(pcbnew.FromMM(5 * k))
+ tmp.append(s)
+ ring = pcbnew.PCB_SHAPE(board, pcbnew.SHAPE_T_CIRCLE)
+ ring.SetCenter(mm(*P(128, 128)))
+ ring.SetEnd(mm(*P(128 + 7, 128)))
+ ring.SetWidth(pcbnew.FromMM(4 * k))
+ ring.SetFilled(False)
+ tmp.append(ring)
+ for s in tmp:
+ s.TransformShapeToPolygon(gold, cu, 0, err, pcbnew.ERROR_INSIDE)
+ gold.Simplify()
+ cut = pcbnew.SHAPE_POLY_SET()
+ clear = 0.1 # copper stays 0.1 mm from white silk (mask opening then 0.05 mm)
+ for lo, hi in dashes:
+ xa, ya = P(128, lo)
+ xb, yb = P(128, hi)
+ hw = dw / 2 + clear
+ o = cut.NewOutline()
+ for cx_, cy_ in ((xa - hw, ya - clear), (xa + hw, ya - clear), (xb + hw, yb + clear), (xb - hw, yb + clear)):
+ cut.Append(pcbnew.FromMM(OX + cx_), pcbnew.FromMM(OY + cy_), o)
+ inner = pcbnew.PCB_SHAPE(board, pcbnew.SHAPE_T_CIRCLE) # inside of the ring stays white
+ inner.SetCenter(mm(*P(128, 128)))
+ inner.SetEnd(mm(*P(128 + 5, 128)))
+ inner.SetFilled(True)
+ inner.SetWidth(0)
+ inner.TransformShapeToPolygon(cut, cu, 0, err, pcbnew.ERROR_OUTSIDE)
+ cut.Simplify()
+ gold.BooleanSubtract(cut)
+ gold.Fracture()
+ mask_poly = pcbnew.SHAPE_POLY_SET(gold)
+ mask_poly.Inflate(pcbnew.FromMM(0.05), pcbnew.CORNER_STRATEGY_ROUND_ALL_CORNERS, err)
+ mask_poly.Fracture()
+ for layer, poly in ((cu, gold), (mask, mask_poly)):
+ s = pcbnew.PCB_SHAPE(board, pcbnew.SHAPE_T_POLY)
+ s.SetLayer(layer)
+ s.SetPolyShape(poly)
+ s.SetFilled(True)
+ s.SetWidth(0)
+ board.Add(s)
+ # white centre dot: fills the inside of the gold ring, clear of the mask opening
+ disc(board, silk, *P(128, 128), 5 * k - 0.05 - 0.05)
+
+
+def clip_outside(x1, y1, x2, y2, r):
+ """Parts of the segment (x1,y1)-(x2,y2) that lie outside the circle of radius r at 0,0."""
+ dx, dy = x2 - x1, y2 - y1
+ a = dx * dx + dy * dy
+ b = 2 * (x1 * dx + y1 * dy)
+ c = x1 * x1 + y1 * y1 - r * r
+ disc_ = b * b - 4 * a * c
+ if disc_ <= 0:
+ return [(x1, y1, x2, y2)]
+ s = disc_ ** 0.5
+ t1, t2 = (-b - s) / (2 * a), (-b + s) / (2 * a)
+ out = []
+ if t1 > 0:
+ e = min(t1, 1)
+ out.append((x1, y1, x1 + dx * e, y1 + dy * e))
+ if t2 < 1:
+ st = max(t2, 0)
+ out.append((x1 + dx * st, y1 + dy * st, x2, y2))
+ return [o for o in out if (o[2] - o[0]) ** 2 + (o[3] - o[1]) ** 2 > 1e-6]
+
+
+def qr(board, x0, y0, module):
+ """QR code on the bottom silkscreen: white quiet zone + white light modules on the
+ dark mask, mirrored so it reads correctly when you look at the bottom."""
+ rows = [r for r in open(os.path.join(HERE, "qr_matrix.txt")).read().split() if r[0] in "01"]
+ n = len(rows)
+ q = 4 # quiet zone in modules
+ tot = n + 2 * q
+ for ry in range(tot):
+ run = None
+ for cxm in range(tot + 1):
+ r_, c_ = ry - q, cxm - q
+ light = cxm < tot and not (0 <= r_ < n and 0 <= c_ < n and rows[r_][c_] == "1")
+ if light and run is None:
+ run = cxm
+ if not light and run is not None:
+ # mirror in x: module column c is drawn at tot-1-c
+ xa = x0 + (tot - cxm) * module
+ xb = x0 + (tot - run) * module
+ box(board, pcbnew.B_SilkS, xa, y0 + ry * module, xb, y0 + (ry + 1) * module)
+ run = None
+ return tot * module
+
+
+def silk(board):
+ F, B = pcbnew.F_SilkS, pcbnew.B_SilkS
+ sy = D.SPLIT_Y
+ lx, ly = D.PARTS["D1"][5][0], D.PARTS["D1"][5][1]
+ q2 = D.PARTS["Q2"][5]
+ q3 = D.PARTS["Q3"][5]
+ for layer in (F, B):
+ circle(board, layer, lx, ly, 2.7, 0.2) # LED spot: put this on the camera lens
+ text(board, layer, "A", q2[0], q2[1] - 2.7, 1.3, bold=True)
+ text(board, layer, "B", q3[0], q3[1] + 2.7, 1.3, bold=True)
+ # split line: on top it stops at the LED pads and continues behind the buzzer
+ for x1, x2 in ((1.5, 2.05), (6.75, 9.3), (19.8, 22.4)):
+ seg(board, F, x1, sy, x2, sy, 0.25)
+ seg(board, F, 22.4, sy - 0.7, 22.4, sy + 0.7, 0.25)
+ for x1, x2 in ((1.5, 3.1), (5.7, 10.6)):
+ seg(board, B, x1, sy, x2, sy, 0.25)
+ seg(board, B, 10.6, sy - 0.7, 10.6, sy + 0.7, 0.25)
+
+ # Top: logo, name, licence, centred in the column between MCU and USB-C.
+ cx = TOP_LOGO[0]
+ logo(board, cx, TOP_LOGO[1], TOP_LOGO[2], "F")
+ ty = TOP_LOGO[1] + TOP_LOGO[2] / 2
+ text(board, F, "AVsync", cx, ty + 2.8, 2.0, bold=True)
+ text(board, F, "calibrator", cx, ty + 5.2, 1.2)
+ text(board, F, "CERN-OHL-P-2.0", 32.8, 20.7, JLC_TEXT) # small, below the MCU
+ # BOOT button label (top, centred under the button)
+ sx, sy_ = D.PARTS["SW1"][5][:2]
+ text(board, F, "BOOT", sx, sy_ + 4.5, 1.2, bold=True)
+
+ # Bottom (this side touches the phone or the screen).
+ # logo in the middle of the board, right beside the QR code
+ bx, by, bs = BOT_LOGO
+ logo(board, bx, by, bs, "B")
+ text(board, B, "AVsync", bx, by + bs / 2 + 2.2, 1.8, bold=True)
+ text(board, B, "calibrator v0.3", bx, by + bs / 2 + 4.3, JLC_TEXT)
+ # how to use it, next to the LED / sensor end
+ ix = 16.8
+ text(board, B, "CAMERA", ix, 4.0, 1.2, bold=True)
+ text(board, B, "LED on lens", ix, 5.8, JLC_TEXT)
+ text(board, B, "SCREEN", ix, 14.0, 1.2, bold=True)
+ text(board, B, "A|B on line", ix, 15.8, JLC_TEXT)
+ text(board, B, "not a toy", ix, 18.8, JLC_TEXT)
+ qr(board, QR[0], QR[1], QR[2])
+
+
+# Artwork places (board mm): logo (centre x, centre y, size), QR (left x, top y, module)
+TOP_LOGO = (50.3, 8.8, 9.0)
+BOT_LOGO = (31.8, 9.0, 11.0)
+QR = (40.0, 2.675, 0.45)
+QR_SIZE = (29 + 8) * QR[2]
+
+
+def stackup(path):
+ """1.2 mm board, black mask, white silk, ENIG (KiCad's Python API has no stackup calls)."""
+ s = open(path).read()
+ st = ('\t\t(stackup\n'
+ '\t\t\t(layer "F.SilkS" (type "Top Silk Screen") (color "White"))\n'
+ '\t\t\t(layer "F.Paste" (type "Top Solder Paste"))\n'
+ '\t\t\t(layer "F.Mask" (type "Top Solder Mask") (color "Black") (thickness 0.01))\n'
+ '\t\t\t(layer "F.Cu" (type "copper") (thickness 0.035))\n'
+ '\t\t\t(layer "dielectric 1" (type "core") (thickness 1.11) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02))\n'
+ '\t\t\t(layer "B.Cu" (type "copper") (thickness 0.035))\n'
+ '\t\t\t(layer "B.Mask" (type "Bottom Solder Mask") (color "Black") (thickness 0.01))\n'
+ '\t\t\t(layer "B.Paste" (type "Bottom Solder Paste"))\n'
+ '\t\t\t(layer "B.SilkS" (type "Bottom Silk Screen") (color "White"))\n'
+ '\t\t\t(copper_finish "ENIG")\n\t\t\t(dielectric_constraints no)\n\t\t)\n')
+ if "(stackup" not in s:
+ s = s.replace("\t(setup\n", "\t(setup\n" + st, 1)
+ open(path, "w").write(s)
+
+
+def place():
+ with open(PCB, "w") as f:
+ f.write('(kicad_pcb (version 20241229) (generator "pcbnew") (generator_version "9.0"))\n')
+ board = pcbnew.LoadBoard(PCB)
+ ds = board.GetDesignSettings()
+ ds.SetBoardThickness(pcbnew.FromMM(D.PCB_THICKNESS))
+
+ nets = {}
+ for n in D.NETS:
+ ni = pcbnew.NETINFO_ITEM(board, n)
+ board.Add(ni)
+ nets[n] = ni
+
+ for ref, (lib_id, value, fpid, lcsc, netmap, (x, y, rot, side)) in D.PARTS.items():
+ lib, name = fpid.split(":")
+ path = os.path.join(PRJ, "calibrator.pretty") if lib == "calibrator" else os.path.join(STOCK, lib + ".pretty")
+ fp = pcbnew.FootprintLoad(path, name)
+ fp.SetFPID(pcbnew.LIB_ID(lib, name))
+ fp.SetReference(ref)
+ fp.SetValue(value)
+ board.Add(fp)
+ fp.SetPosition(mm(x, y))
+ fp.SetOrientationDegrees(rot)
+ if side == "B":
+ fp.Flip(fp.GetPosition(), pcbnew.FLIP_DIRECTION_LEFT_RIGHT)
+ if ref.startswith("TP"):
+ fp.SetAttributes(fp.GetAttributes() | pcbnew.FP_EXCLUDE_FROM_POS_FILES | pcbnew.FP_EXCLUDE_FROM_BOM)
+ fp.Reference().SetVisible(False)
+ if lcsc:
+ f = pcbnew.PCB_FIELD(fp, fp.GetNextFieldId(), "LCSC")
+ f.SetText(lcsc)
+ f.SetVisible(False)
+ f.SetLayer(pcbnew.F_Fab)
+ fp.Add(f)
+ for pad in fp.Pads():
+ num = pad.GetNumber()
+ if num in netmap and netmap[num]:
+ pad.SetNet(nets[netmap[num]])
+ # small reference text, kept on the fab layer so the top stays clean for the logo
+ fp.Reference().SetLayer(pcbnew.F_Fab if side == "F" else pcbnew.B_Fab)
+ # The KiCad image ships no 3D model for these three; use stand-ins for the renders.
+ stand_in = {"J1": "${KICAD9_3DMODEL_DIR}/Connector_USB.3dshapes/"
+ "USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal.step",
+ "U1": "${KIPRJMOD}/3d/QSOP-28.wrl", "SW1": "${KIPRJMOD}/3d/TS-1187A.wrl"}
+ if ref in stand_in:
+ fp.Models().clear()
+ m = pcbnew.FP_3DMODEL()
+ m.m_Filename = stand_in[ref]
+ fp.Models().push_back(m)
+ if ref == "J1": # the stock USB-C footprint's silkscreen runs past the board edge
+ for item in list(fp.GraphicalItems()):
+ if item.GetLayer() == pcbnew.F_SilkS:
+ fp.Remove(item)
+
+ outline(board)
+ # keep tracks and vias off the optical holes (LED cut-out and sensor holes)
+ lx, ly = D.PARTS["D1"][5][:2]
+ keepout(board, lx - 1.35, ly - 1.15, lx + 1.35, ly + 1.15)
+ keepout(board, 0.0, D.SPLIT_Y - 1.9, 2.3, D.SPLIT_Y + 1.9) # alignment notch
+ keepout(board, QR[0], QR[1], QR[0] + QR_SIZE, QR[1] + QR_SIZE, tracks=False) # no via holes in the QR code
+ for q in ("Q2", "Q3"):
+ qx, qy = D.PARTS[q][5][:2]
+ keepout(board, qx - 1.45, qy - 1.45, qx + 1.45, qy + 1.45)
+ tx, ty, ts = TOP_LOGO
+ keepout(board, tx - ts / 2 - 0.5, ty - ts / 2 - 0.5, tx + ts / 2 + 0.5, ty + ts / 2 + 0.5, pcbnew.F_Cu)
+ keepout(board, tx - ts / 2 - 1.0, ty - ts / 2 - 1.0, tx + ts / 2 + 1.0, ty + ts / 2 + 6.0, tracks=False) # no via holes in the top logo or its text
+ bx, by, bs = BOT_LOGO
+ keepout(board, bx - bs / 2 - 0.5, by - bs / 2 - 0.5, bx + bs / 2 + 0.5, by + bs / 2 + 0.5, pcbnew.B_Cu)
+ keepout(board, bx - bs / 2 - 1.0, by - bs / 2 - 1.0, bx + bs / 2 + 1.0, by + bs / 2 + 5.5, tracks=False) # no via holes in the bottom logo or its text
+ silk(board)
+ pcbnew.SaveBoard(PCB, board)
+ stackup(PCB)
+ board = pcbnew.LoadBoard(PCB)
+ # Export for the router *before* the ground fills exist, so it also routes GND
+ # with real tracks (with fills it treats GND as a plane and leaves islands).
+ ok = pcbnew.ExportSpecctraDSN(board, DSN)
+ gnd = board.FindNet("GND")
+ zone(board, gnd, pcbnew.F_Cu)
+ zone(board, gnd, pcbnew.B_Cu)
+ pcbnew.SaveBoard(PCB, board)
+ print("placed, DSN export:", ok)
+
+
+def add_via(board, net, x, y):
+ v = pcbnew.PCB_VIA(board)
+ v.SetPosition(mm(x, y))
+ v.SetWidth(pcbnew.FromMM(0.6))
+ v.SetDrill(pcbnew.FromMM(0.3))
+ v.SetNet(net)
+ board.Add(v)
+
+
+# Areas kept free of stitching vias so the silkscreen text stays whole (x1, y1, x2, y2).
+NO_STITCH = [(43.5, 0.0, 57.0, 22.0), (36.5, 2.5, 44.5, 13.5), (25.0, 2.0, 39.6, 20.5), (11.0, 2.5, 25.0, 21.5),
+ (39.7, 2.4, 56.9, 19.6), (0.0, 9.8, 23.0, 12.2), (24.0, 19.6, 39.0, 21.9)]
+
+
+def stitch(board, net, step=2.5, margin=0.7):
+ """Put GND vias on a grid wherever both ground fills have room for one.
+
+ This ties every piece of the top fill to the bottom fill."""
+ fills = [z.GetFilledPolysList(z.GetLayer()) for z in board.Zones()
+ if not z.GetIsRuleArea() and z.GetNetname() == "GND"]
+ n = 0
+ y = 1.4
+ while y < D.BOARD_H - 1.2:
+ x = 10.5 # no vias on the optics end: open via holes could let light through
+ while x < D.BOARD_W - 1.2:
+ if any(a <= x <= c and b <= y <= d for a, b, c, d in NO_STITCH):
+ x += step
+ continue
+ pts = [(x, y)] + [(x + margin * dx, y + margin * dy) for dx, dy in
+ [(1, 0), (-1, 0), (0, 1), (0, -1), (0.7, 0.7), (-0.7, 0.7), (0.7, -0.7), (-0.7, -0.7)]]
+ if all(f.Contains(mm(px, py)) for f in fills for (px, py) in pts):
+ add_via(board, net, x, y)
+ n += 1
+ x += step
+ y += step
+ return n
+
+
+# Silkscreen art on the bottom: no vias at all here.
+ART = [(39.7, 2.4, 56.9, 19.6), (25.0, 2.0, 39.6, 20.5), (43.5, 0.0, 57.0, 22.0), (11.0, 2.5, 25.0, 21.5)]
+
+
+def fix_islands(board, net, margin=0.31):
+ """Give every top-fill island that has no via one via, at the first spot that fits."""
+ zs = {z.GetLayer(): z for z in board.Zones() if not z.GetIsRuleArea() and z.GetNetname() == "GND"}
+ top = zs[pcbnew.F_Cu].GetFilledPolysList(pcbnew.F_Cu)
+ bot = zs[pcbnew.B_Cu].GetFilledPolysList(pcbnew.B_Cu)
+ vias = [t.GetPosition() for t in board.GetTracks() if isinstance(t, pcbnew.PCB_VIA)]
+ added = 0
+ for i in range(top.OutlineCount()):
+ isl = top.Outline(i)
+ if any(isl.PointInside(v) for v in vias):
+ continue
+ bb = isl.BBox()
+ x0, y0 = pcbnew.ToMM(bb.GetX()) - OX, pcbnew.ToMM(bb.GetY()) - OY
+ found = None
+ steps = int(pcbnew.ToMM(bb.GetWidth()) / 0.1) + 1, int(pcbnew.ToMM(bb.GetHeight()) / 0.1) + 1
+ for iy in range(steps[1]):
+ for ix in range(steps[0]):
+ x, y = x0 + ix * 0.1, y0 + iy * 0.1
+ ring = [(x, y)] + [(x + margin * dx, y + margin * dy) for dx, dy in
+ [(1, 0), (-1, 0), (0, 1), (0, -1), (0.7, 0.7), (-0.7, 0.7), (0.7, -0.7), (-0.7, -0.7)]]
+ if any(a <= x <= c and b <= y <= d for a, b, c, d in ART):
+ continue
+ if all(isl.PointInside(mm(px, py)) and bot.Contains(mm(px, py)) for px, py in ring):
+ found = (x, y)
+ break
+ if found:
+ break
+ if found:
+ add_via(board, net, *found)
+ added += 1
+ else:
+ print("no room for a via in island at", round(x0, 2), round(y0, 2))
+ return added
+
+
+def remove_stubs(board):
+ """Delete duplicate segments and short dead-end pieces the router sometimes leaves behind."""
+ items = list(board.GetTracks()) # one snapshot; the board's list proxy breaks after Remove()
+ tracks = [t for t in items if t.GetClass() == "PCB_TRACK"]
+ vias = {(v.GetPosition().x, v.GetPosition().y) for v in items if v.GetClass() == "PCB_VIA"}
+ pads = list(board.GetPads())
+ dead = []
+ seen = set() # the same segment written twice (once each way)
+ for t in tracks:
+ a_, b_ = (t.GetStart().x, t.GetStart().y), (t.GetEnd().x, t.GetEnd().y)
+ key = (int(t.GetLayer()), int(t.GetNetCode())) + tuple(sorted([a_, b_]))
+ if key in seen:
+ dead.append(t)
+ seen.add(key)
+ tracks = [t for t in tracks if t not in dead]
+ while True:
+ ends = {}
+ for t in tracks:
+ for p in (t.GetStart(), t.GetEnd()):
+ ends.setdefault((p.x, p.y, int(t.GetLayer())), []).append(t)
+ new = []
+ for t in tracks:
+ for p in (t.GetStart(), t.GetEnd()):
+ if len(ends[(p.x, p.y, int(t.GetLayer()))]) > 1 or (p.x, p.y) in vias:
+ continue
+ if any(pad.HitTest(p) and pad.IsOnLayer(t.GetLayer()) for pad in pads):
+ continue
+ new.append(t)
+ break
+ if not new:
+ break
+ dead += new
+ tracks = [t for t in tracks if t not in new]
+ for t in dead:
+ board.Remove(t)
+ return len(dead)
+
+
+def unconnected(board):
+ board.BuildConnectivity()
+ return board.GetConnectivity().GetUnconnectedCount(False)
+
+
+def import_routes():
+ """Separate step (own process): the Python board object is unsafe after Remove()."""
+ board = pcbnew.LoadBoard(PCB)
+ ok = pcbnew.ImportSpecctraSES(board, SES)
+ print("SES import:", ok)
+ print("removed stubs:", remove_stubs(board))
+ pcbnew.SaveBoard(PCB, board)
+
+
+def finish():
+ board = pcbnew.LoadBoard(PCB)
+ gnd = board.FindNet("GND")
+ board.BuildConnectivity()
+ filler = pcbnew.ZONE_FILLER(board)
+ filler.Fill(board.Zones())
+ print("stitching vias:", stitch(board, gnd))
+ board.BuildConnectivity()
+ filler.Fill(board.Zones())
+ print("island vias:", fix_islands(board, gnd))
+ board.BuildConnectivity()
+ filler.Fill(board.Zones())
+ print("unconnected after fill:", unconnected(board))
+ pcbnew.SaveBoard(PCB, board)
+ print("finished")
+
+
+if __name__ == "__main__":
+ {"place": place, "import": import_routes, "finish": finish}[sys.argv[1]]()
diff --git a/hardware/calibrator/scripts/gen_qr.py b/hardware/calibrator/scripts/gen_qr.py
new file mode 100644
index 0000000..b63afac
--- /dev/null
+++ b/hardware/calibrator/scripts/gen_qr.py
@@ -0,0 +1,16 @@
+"""Writes qr_matrix.txt (1 = dark module) for the bottom-side QR code.
+
+Needs the 'segno' package (pip install segno); the matrix is committed, so the
+board build does not need it. URL: the project's GitHub Pages site.
+"""
+import os
+
+import segno
+
+URL = "https://leeo86.github.io/mxl-avsync/"
+q = segno.make(URL, error="m", micro=False)
+rows = ["".join("1" if c else "0" for c in row) for row in q.matrix]
+with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "qr_matrix.txt"), "w") as f:
+ f.write(f"# {URL} version {q.version}-{q.error}, {len(rows)}x{len(rows)}, no quiet zone\n")
+ f.write("\n".join(rows) + "\n")
+print(q.version, q.error, len(rows))
diff --git a/hardware/calibrator/scripts/gen_sch.py b/hardware/calibrator/scripts/gen_sch.py
new file mode 100644
index 0000000..3bc8fdb
--- /dev/null
+++ b/hardware/calibrator/scripts/gen_sch.py
@@ -0,0 +1,362 @@
+"""Writes calibrator.kicad_sch (and the custom MCU symbol calibrator.kicad_sym).
+
+Drawn for people: power symbols at the top, GND at the bottom, signals left to right,
+real wires inside each block, net labels only for the programming pads.
+Parts, values, footprints and LCSC numbers come from design.py; check_netlist.py
+compares the drawn connections with design.py.
+Run inside the KiCad image (needs /usr/share/kicad/symbols): python3 gen_sch.py
+"""
+import math
+import os
+import re
+import uuid
+
+import design as D
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+PRJ = os.path.join(HERE, "..")
+OUT = os.path.join(PRJ, "calibrator.kicad_sch")
+SYMLIB = os.path.join(PRJ, "calibrator.kicad_sym")
+SYMDIR = os.environ.get("KICAD_SYMBOL_DIR", "/usr/share/kicad/symbols")
+ROOT = str(uuid.uuid5(uuid.NAMESPACE_URL, "calibrator-root"))
+_n = [0]
+
+
+def u():
+ _n[0] += 1
+ return str(uuid.uuid5(uuid.NAMESPACE_URL, f"calibrator-sch-{_n[0]}"))
+
+
+# ---------------------------------------------------------------- custom MCU symbol
+# Pins grouped by job: inputs left, outputs right, power top, ground bottom.
+MCU_PINS = [ # (number, name, type, x, y, angle)
+ ("2", "PC16/UDM", "bidirectional", -17.78, 12.7, 0),
+ ("3", "PC17/UDP/BOOT", "bidirectional", -17.78, 10.16, 0),
+ ("5", "PA13/CMP3+", "bidirectional", -17.78, 2.54, 0),
+ ("9", "PA0/ADC0", "bidirectional", -17.78, 0.0, 0),
+ ("11", "PA2/CMP3-/ADC2", "bidirectional", -17.78, -2.54, 0),
+ ("1", "PC19/SWCLK", "bidirectional", -17.78, -7.62, 0),
+ ("28", "PC18/SWDIO", "bidirectional", -17.78, -10.16, 0),
+ ("4", "PC14/PA12", "bidirectional", -17.78, -12.7, 0),
+ ("8", "PC3", "bidirectional", -17.78, -15.24, 0),
+ ("10", "PA1", "bidirectional", -17.78, -17.78, 0),
+ ("12", "PA3", "bidirectional", -17.78, -20.32, 0),
+ ("13", "PA6", "bidirectional", -17.78, -22.86, 0),
+ ("14", "PB0", "bidirectional", -17.78, -25.4, 0),
+ ("15", "PA4", "bidirectional", 17.78, 12.7, 180),
+ ("16", "PA5", "bidirectional", 17.78, 10.16, 180),
+ ("17", "PA7", "bidirectional", 17.78, 5.08, 180),
+ ("18", "PB3/CMP3 out", "bidirectional", 17.78, 2.54, 180),
+ ("19", "PB4", "bidirectional", 17.78, 0.0, 180),
+ ("20", "PB1/PB5", "bidirectional", 17.78, -2.54, 180),
+ ("21", "PB6", "bidirectional", 17.78, -5.08, 180),
+ ("22", "PB7", "bidirectional", 17.78, -7.62, 180),
+ ("23", "PB8", "bidirectional", 17.78, -10.16, 180),
+ ("24", "PB9", "bidirectional", 17.78, -12.7, 180),
+ ("25", "PB10", "bidirectional", 17.78, -15.24, 180),
+ ("26", "PB11", "bidirectional", 17.78, -17.78, 180),
+ ("27", "PB12", "bidirectional", 17.78, -20.32, 180),
+ ("6", "VDD", "power_in", 0.0, 17.78, 270),
+ ("7", "GND", "power_in", 0.0, -30.48, 90),
+]
+
+
+def mcu_symbol(name):
+ s = (f' (symbol "{name}" (pin_names (offset 1.016)) (exclude_from_sim no) (in_bom yes) (on_board yes)\n'
+ f' (property "Reference" "U" (at -10.16 16.51 0) (effects (font (size 1.27 1.27)) (justify left)))\n'
+ f' (property "Value" "{name}" (at 2.54 16.51 0) (effects (font (size 1.27 1.27)) (justify left)))\n'
+ f' (property "Footprint" "Package_SO:QSOP-28_3.9x9.9mm_P0.635mm" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))\n'
+ f' (property "Datasheet" "https://www.wch.cn/products/CH32X035.html" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))\n'
+ f' (property "Description" "WCH CH32X035G8R6, RISC-V, 62 KB flash, USB FS, 3 comparators, QSOP-28; pins grouped by use" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))\n'
+ f' (symbol "{name}_0_1" (rectangle (start -15.24 15.24) (end 15.24 -27.94) '
+ f'(stroke (width 0.254) (type default)) (fill (type background))))\n'
+ f' (symbol "{name}_1_1"\n')
+ for num, pname, typ, x, y, a in MCU_PINS:
+ s += (f' (pin {typ} line (at {x} {y} {a}) (length 2.54) (name "{pname}" (effects (font (size 1.27 1.27)))) '
+ f'(number "{num}" (effects (font (size 1.27 1.27)))))\n')
+ s += ' )\n (embedded_fonts no)\n )\n'
+ return s
+
+
+def write_symlib():
+ with open(SYMLIB, "w") as f:
+ f.write('(kicad_symbol_lib (version 20241209) (generator "calibrator-gen") (generator_version "9.0")\n')
+ f.write(mcu_symbol("CH32X035G8R6"))
+ f.write(')\n')
+
+
+# ---------------------------------------------------------------- library helpers
+def block(text, start):
+ d = 0
+ for j in range(start, len(text)):
+ if text[j] == "(":
+ d += 1
+ elif text[j] == ")":
+ d -= 1
+ if d == 0:
+ return text[start:j + 1]
+ raise ValueError("unbalanced")
+
+
+def lib_symbol(lib_id):
+ lib, name = lib_id.split(":")
+ path = SYMLIB if lib == "calibrator" else os.path.join(SYMDIR, lib + ".kicad_sym")
+ t = open(path).read()
+ b = block(t, t.find(f'(symbol "{name}"'))
+ if "(extends" in b:
+ raise ValueError(f"{lib_id} uses extends; pick a base symbol")
+ return b.replace(f'(symbol "{name}"', f'(symbol "{lib_id}"', 1)
+
+
+def pins(sym):
+ out = {}
+ for m in re.finditer(r'\(pin \w+ \w+\s*\(at ([-\d.]+) ([-\d.]+) (\d+)\).*?\(number "([^"]*)"', sym, re.S):
+ out.setdefault(m.group(4), (float(m.group(1)), float(m.group(2)), int(m.group(3))))
+ return out
+
+
+def to_sheet(sx, sy, rot, px, py):
+ a = math.radians(rot)
+ x = px * math.cos(a) - py * math.sin(a)
+ y = px * math.sin(a) + py * math.cos(a)
+ return round(sx + x, 2), round(sy - y, 2)
+
+
+def eff(size=1.27, hide=False, justify=None, bold=False):
+ j = f" (justify {justify})" if justify else ""
+ h = " (hide yes)" if hide else ""
+ b = " (bold yes)" if bold else ""
+ return f"(effects (font (size {size} {size}){b}){j}{h})"
+
+
+def prop(name, value, x, y, hide=False, justify=None, angle=0):
+ return f' (property "{name}" "{value}" (at {x} {y} {angle}) {eff(hide=hide, justify=justify)})\n'
+
+
+# ---------------------------------------------------------------- drawing
+# Schematic position of every part: (x, y, rotation). Grid 1.27 mm.
+SCH = {
+ # USB-C: power + update
+ "J1": (35.56, 66.04, 0), "C1": (63.5, 43.18, 0), "R3": (72.39, 35.56, 90),
+ "C2": (83.82, 43.18, 0), "C3": (91.44, 43.18, 0), "R1": (60.96, 55.88, 90), "R2": (71.12, 58.42, 90),
+ "R9": (78.74, 72.39, 0), "SW1": (78.74, 83.82, 270),
+ # Light sensors
+ "Q2": (114.3, 88.89999999999999, 0), "R7": (127.0, 106.67999999999999, 0), "C4": (137.16, 106.67999999999999, 0),
+ "Q3": (114.3, 121.92, 0), "R8": (127.0, 139.70000000000002, 0), "C5": (137.16, 139.70000000000002, 0),
+ # MCU
+ "U1": (185.42, 78.74, 0),
+ # Flash + click
+ "R4": (223.52, 66.04, 90), "D1": (238.76, 66.04, 180),
+ "R5": (223.52, 104.14, 90), "R6": (231.14, 111.76, 0), "Q1": (238.76, 104.14, 0),
+ "D2": (241.29999999999998, 88.9, 270), "BZ1": (254.0, 93.98, 0),
+}
+
+# Reference / value text position per part: (dx, dy, justify) twice.
+FIELDS = {
+ "J1": ((0, -27.94, None), (0, -25.4, None)),
+ "U1": ((-15.24, 39.37, "left"), (-15.24, 41.91, "left")),
+ "D1": ((0, -6.35, None), (0, -3.81, None)),
+ "D2": ((-2.54, -1.27, "left"), (-2.54, 1.27, "left")),
+ "SW1": ((-2.54, -1.27, "left"), (-2.54, 1.27, "left")),
+ "Q1": ((5.08, -1.27, "left"), (5.08, 1.27, "left")),
+ "Q2": ((5.08, -1.27, "left"), (5.08, 1.27, "left")),
+ "Q3": ((5.08, -1.27, "left"), (5.08, 1.27, "left")),
+ "BZ1": ((2.54, -5.08, "left"), (2.54, 5.08, "left")),
+ "R1": ((-2.54, -1.905, None), (2.54, -1.905, None)),
+ "R2": ((-2.54, 2.54, None), (2.54, 2.54, None)),
+ "R3": ((0, -2.54, None), (0, 2.54, None)),
+ "R4": ((0, -2.54, None), (0, 2.54, None)),
+ "R5": ((0, -2.54, None), (0, 2.54, None)),
+}
+
+# Wires (polylines). Every T is drawn as segments meeting at one point.
+WIRES = [
+ # --- USB-C: power + update
+ [(50.8, 50.8), (55.88, 50.8)], [(55.88, 50.8), (55.88, 35.56)], # VBUS from J1
+ [(55.88, 35.56), (63.5, 35.56)], [(63.5, 35.56), (68.58, 35.56)], # VBUS rail
+ [(63.5, 35.56), (63.5, 39.370000000000005)], # C1
+ [(76.2, 35.56), (83.82, 35.56)], [(83.82, 35.56), (91.44, 35.56)], # VDD rail
+ [(91.44, 35.56), (99.06, 35.56)],
+ [(83.82, 35.56), (83.82, 39.370000000000005)], [(91.44, 35.56), (91.44, 39.370000000000005)],
+ [(63.5, 46.99), (63.5, 48.260000000000005)], [(83.82, 46.99), (83.82, 48.260000000000005)],
+ [(91.44, 46.99), (91.44, 48.260000000000005)],
+ [(50.8, 55.88), (57.15, 55.88)], [(50.8, 58.42), (67.31, 58.42)], # CC1 -> R1, CC2 -> R2
+ [(64.77, 55.88), (78.74, 55.88)], [(78.74, 55.88), (78.74, 58.42)], [(74.93, 58.42), (78.74, 58.42)],
+ [(50.8, 63.5), (53.34, 63.5)], [(50.8, 66.04), (53.34, 66.04)], # D- (A7, B7)
+ [(53.34, 63.5), (53.34, 66.04)], [(53.34, 66.04), (167.64, 66.04)],
+ [(50.8, 68.58), (55.88, 68.58)], [(50.8, 71.12), (55.88, 71.12)], # D+ (A6, B6)
+ [(55.88, 68.58), (55.88, 71.12)], [(55.88, 68.58), (78.74, 68.58)],
+ [(78.74, 68.58), (167.64, 68.58)],
+ [(78.74, 76.2), (78.74, 78.74)], [(78.74, 88.9), (78.74, 91.44)], # boot: D+ - R9 - SW1 - VDD
+ [(35.56, 88.9), (35.56, 93.98)], [(27.94, 88.9), (27.94, 93.98), (35.56, 93.98)], # GND + shield
+ # --- Light sensors
+ [(116.84, 83.82), (116.84, 81.28)],
+ [(116.84, 116.84), (116.84, 114.3)],
+ [(116.84, 93.98), (116.84, 99.06)],
+ [(116.84, 99.06), (127.0, 99.06)],
+ [(127.0, 99.06), (137.16, 99.06)],
+ [(137.16, 99.06), (152.4, 99.06)],
+ [(127.0, 99.06), (127.0, 102.87)],
+ [(137.16, 99.06), (137.16, 102.87)],
+ [(127.0, 110.49), (127.0, 113.03)],
+ [(137.16, 110.49), (137.16, 113.03)],
+ [(116.84, 127.0), (116.84, 132.08)],
+ [(116.84, 132.08), (127.0, 132.08)],
+ [(127.0, 132.08), (137.16, 132.08)],
+ [(137.16, 132.08), (157.48, 132.08)],
+ [(127.0, 132.08), (127.0, 135.89)],
+ [(137.16, 132.08), (137.16, 135.89)],
+ [(127.0, 143.51), (127.0, 146.05)],
+ [(137.16, 143.51), (137.16, 146.05)],
+ [(152.4, 99.06), (152.4, 78.74)],
+ [(152.4, 78.74), (152.4, 76.2)],
+ [(152.4, 76.2), (167.64, 76.2)],
+ [(152.4, 78.74), (167.64, 78.74)],
+ [(157.48, 132.08), (157.48, 81.28), (167.64, 81.28)],
+ # --- MCU
+ [(185.42, 60.96), (185.42, 58.42)], [(185.42, 109.22), (185.42, 111.76)],
+ # --- Flash + click
+ [(203.2, 66.04), (219.71, 66.04)],
+ [(227.33, 66.04), (234.95, 66.04)],
+ [(242.57, 66.04), (247.65, 66.04), (247.65, 68.58)],
+ [(203.2, 68.58), (208.28, 68.58), (208.28, 104.14), (219.71, 104.14)],
+ [(227.33, 104.14), (231.14, 104.14)],
+ [(231.14, 104.14), (233.68, 104.14)],
+ [(231.14, 104.14), (231.14, 107.95)],
+ [(231.14, 115.57), (231.14, 118.11)],
+ [(241.3, 109.22), (241.3, 111.76)],
+ [(241.3, 99.06), (241.3, 96.52)],
+ [(241.3, 96.52), (241.3, 92.71)],
+ [(241.3, 96.52), (251.46, 96.52)],
+ [(241.3, 85.09), (241.3, 81.28)],
+ [(241.3, 81.28), (246.38, 81.28)],
+ [(246.38, 81.28), (246.38, 91.44), (251.46, 91.44)],
+]
+
+JUNCTIONS = [(55.88, 35.56), (63.5, 35.56), (83.82, 35.56), (91.44, 35.56), (53.34, 66.04), (55.88, 68.58),
+ (78.74, 68.58), (78.74, 58.42), (127.0, 99.06), (137.16, 99.06), (152.4, 78.74),
+ (127.0, 132.08), (137.16, 132.08), (231.14, 104.14), (241.29999999999998, 96.52)]
+
+POWER = [ # (lib_id, x, y, rotation)
+ ("power:VBUS", 55.88, 35.56, 0), ("power:VDD", 99.06, 35.56, 0),
+ ("power:GND", 35.56, 93.98, 0), ("power:GND", 63.5, 48.260000000000005, 0), ("power:GND", 83.82, 48.260000000000005, 0),
+ ("power:GND", 91.44, 48.260000000000005, 0), ("power:GND", 78.74, 58.42, 0), ("power:VDD", 78.74, 91.44, 180),
+ ("power:VDD", 116.84, 81.28, 0), ("power:VDD", 116.84, 114.3, 0),
+ ("power:GND", 127.0, 113.03, 0), ("power:GND", 137.16, 113.03, 0),
+ ("power:GND", 127.0, 146.05, 0), ("power:GND", 137.16, 146.05, 0),
+ ("power:VDD", 185.42, 58.42, 0), ("power:GND", 185.42, 111.76, 0),
+ ("power:GND", 247.65, 68.58, 0), ("power:GND", 231.14, 118.11, 0), ("power:GND", 241.29999999999998, 111.76, 0),
+ ("power:VBUS", 241.29999999999998, 81.28, 0),
+]
+FLAGS = [(55.88, 50.8), (27.94, 93.98), (83.82, 35.56)] # VBUS, GND, VDD
+
+LABELS = [] # everything is wired
+
+BLOCKS = [ # (title, x1, y1, x2, y2)
+ ("USB-C: power + update", 15.24, 25.4, 101.6, 104.14),
+ ("Light sensors (display mode)", 101.6, 71.12, 162.56, 154.94),
+ ("MCU", 162.56, 25.4, 210.82, 154.94),
+ ("Flash + click (camera and display mode)", 210.82, 25.4, 279.4, 154.94),
+]
+
+NOTES = [
+ (17.78, 107.95, "5.1k on CC1/CC2 asks the phone for 5 V."),
+ (17.78, 110.49, "D+/D- go only to the MCU. The firmware never turns USB on,"),
+ (17.78, 113.03, "so a phone sees no device. R3 + C2/C3 filter spikes; C2/C3 sit at U1."),
+ (17.78, 118.11, "Update: hold SW1 while plugging into a PC. The ROM bootloader starts"),
+ (17.78, 120.65, "only at power-on with PC17 (D+) high; R9 limits the current into D+."),
+ (104.14, 158.75, "Reverse-gullwing parts look down through holes. CMP3 (hysteresis)"),
+ (104.14, 161.29, "flips where A and B see the same light; ADC0/ADC2 read dark / light."),
+ (213.36, 158.75, "Reverse-mount white LED shines through a hole (~12 mA)."),
+ (213.36, 161.29, "PA4 and PA5 are set by one register write."),
+ (213.36, 163.83, "D2 catches the coil kick; R6 keeps Q1 off during reset."),
+]
+
+
+def symbol_instance(lib_id, ref, value, fp, lcsc, x, y, rot, sym, in_bom=True, hide_ref=False, fields=None):
+ s = (f' (symbol (lib_id "{lib_id}") (at {x} {y} {rot}) (unit 1) (exclude_from_sim no) '
+ f'(in_bom {"yes" if in_bom else "no"}) (on_board yes) (dnp no) (uuid "{u()}")\n')
+ (rx, ry, rj), (vx, vy, vj) = fields or ((2.54, -1.27, "left"), (2.54, 1.27, "left"))
+ fa = rot if rot in (90, 270) else 0 # keep text horizontal on turned parts
+ s += prop("Reference", ref, x + rx, y + ry, hide=hide_ref, justify=rj, angle=fa)
+ s += prop("Value", value, x + vx, y + vy, justify=vj, angle=fa)
+ s += prop("Footprint", fp, x, y, hide=True)
+ s += prop("Datasheet", "~", x, y, hide=True)
+ s += prop("Description", "", x, y, hide=True)
+ if lcsc:
+ s += prop("LCSC", lcsc, x, y, hide=True)
+ for num in pins(sym):
+ s += f' (pin "{num}" (uuid "{u()}"))\n'
+ s += f' (instances (project "calibrator" (path "/{ROOT}" (reference "{ref}") (unit 1))))\n )\n'
+ return s
+
+
+def main():
+ write_symlib()
+ libs = {}
+ for ref, p in D.PARTS.items():
+ libs.setdefault(p[0], lib_symbol(p[0]))
+ for lib_id in ("power:PWR_FLAG", "power:GND", "power:VDD", "power:VBUS"):
+ libs[lib_id] = lib_symbol(lib_id)
+
+ body = ""
+ nc = ""
+ for ref, (lib_id, value, fp, lcsc, netmap, _pcb) in D.PARTS.items():
+ x, y, rot = SCH[ref]
+ sym = libs[lib_id]
+ body += symbol_instance(lib_id, ref, value, fp, lcsc, x, y, rot, sym,
+ in_bom=not ref.startswith("TP"), fields=FIELDS.get(ref, None) or (
+ ((2.54, -1.27, "left"), (2.54, 1.27, "left")) if lib_id in ("Device:R", "Device:C")
+ else None))
+ for num, (px, py, _a) in pins(sym).items():
+ if netmap.get(num, "x") is None:
+ nx, ny = to_sheet(x, y, rot, px, py)
+ nc += f' (no_connect (at {nx} {ny}) (uuid "{u()}"))\n'
+
+ for i, (lib_id, x, y, rot) in enumerate(POWER):
+ name = lib_id.split(":")[1]
+ body += symbol_instance(lib_id, f"#PWR0{i + 1:02d}", name, "", "", x, y, rot, libs[lib_id],
+ hide_ref=True, fields=((0, 3.81 if name == "GND" else -3.81, None),
+ (0, 3.81 if name == "GND" else -3.81, None)) if rot == 0 else
+ ((0, 3.81, None), (0, 3.81, None)))
+ for i, (x, y) in enumerate(FLAGS):
+ body += symbol_instance("power:PWR_FLAG", f"#FLG0{i + 1}", "PWR_FLAG", "", "", x, y, 0,
+ libs["power:PWR_FLAG"], hide_ref=True, fields=((0, -3.81, None), (0, -3.81, None)))
+
+ wires = ""
+ for poly in WIRES:
+ for a, b in zip(poly, poly[1:]):
+ wires += (f' (wire (pts (xy {a[0]} {a[1]}) (xy {b[0]} {b[1]})) (stroke (width 0) (type default)) '
+ f'(uuid "{u()}"))\n')
+ for x, y in JUNCTIONS:
+ wires += f' (junction (at {x} {y}) (diameter 0) (color 0 0 0 0) (uuid "{u()}"))\n'
+ for net, x, y, a in LABELS:
+ just = "right bottom" if a in (180, 270) else "left bottom"
+ wires += f' (label "{net}" (at {x} {y} {a}) {eff(justify=just)} (uuid "{u()}"))\n'
+
+ art = ""
+ for title, x1, y1, x2, y2 in BLOCKS:
+ art += (f' (rectangle (start {x1} {y1}) (end {x2} {y2}) (stroke (width 0.254) (type dash) '
+ f'(color 72 110 150 1)) (fill (type none)) (uuid "{u()}"))\n')
+ art += (f' (text "{title}" (exclude_from_sim no) (at {x1 + 1.27} {y1 + 3.81} 0) '
+ f'{eff(size=1.8, bold=True, justify="left bottom")} (uuid "{u()}"))\n')
+ for x, y, s in NOTES:
+ art += f' (text "{s}" (exclude_from_sim no) (at {x} {y} 0) {eff(justify="left bottom")} (uuid "{u()}"))\n'
+
+ out = (
+ f'(kicad_sch (version 20250114) (generator "eeschema") (generator_version "9.0") (uuid "{ROOT}") (paper "A4")\n'
+ ' (title_block (title "AVsync calibrator") (date "2026-11-08") (rev "0.3")\n'
+ ' (comment 1 "v1 proposal - not built or tested yet")\n'
+ ' (comment 2 "Generated by scripts/gen_sch.py from scripts/design.py")\n'
+ ' (comment 3 "SPDX-License-Identifier: CERN-OHL-P-2.0"))\n'
+ ' (lib_symbols\n' + "".join(libs.values()) + '\n )\n'
+ + art + wires + nc + body +
+ ' (sheet_instances (path "/" (page "1")))\n (embedded_fonts no)\n)\n'
+ )
+ with open(OUT, "w") as f:
+ f.write(out)
+ print("wrote", OUT)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/hardware/calibrator/scripts/jlc_files.py b/hardware/calibrator/scripts/jlc_files.py
new file mode 100644
index 0000000..a911ad9
--- /dev/null
+++ b/hardware/calibrator/scripts/jlc_files.py
@@ -0,0 +1,59 @@
+"""Writes the JLCPCB BOM and CPL files from design.py and the KiCad position file.
+
+fab/calibrator-bom-jlc.csv : Comment, Designator, Footprint, LCSC Part #
+fab/calibrator-cpl-jlc.csv : Designator, Mid X, Mid Y, Layer, Rotation
+JLC's 0° for a part is the orientation of its own (EasyEDA) footprint, which is not always
+KiCad's. ROTATION_OFFSET adds the known differences for the stock KiCad footprints used here
+(values as in the community list of JLC corrections, e.g. matthewlai/JLCKicadTools
+cpl_rotations_db.csv: SSOP/TSSOP/SOIC 270, SOT-23 -90, HRO TYPE-C-31-M-12 180).
+Still check every part in JLC's placement preview before ordering (or pay for
+"Confirm Parts Placement"); JLC also places by the pin-1 / polarity marks in the silkscreen.
+"""
+
+# footprint name prefix -> degrees added to KiCad's rotation for JLC
+ROTATION_OFFSET = {
+ "QSOP-28": 270,
+ "SOT-23": -90,
+ "USB_C_Receptacle_HRO_TYPE-C-31-M-12": 180,
+}
+import csv
+import os
+import sys
+
+sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
+import design as D # noqa: E402
+
+FAB = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "fab")
+
+
+def main():
+ groups = {}
+ for ref, p in D.PARTS.items():
+ lcsc = p[3]
+ if not lcsc:
+ continue # test pads are bare copper, nothing to assemble
+ key = (p[1], p[2].split(":")[1], lcsc)
+ groups.setdefault(key, []).append(ref)
+ with open(os.path.join(FAB, "calibrator-bom-jlc.csv"), "w", newline="") as f:
+ w = csv.writer(f)
+ w.writerow(["Comment", "Designator", "Footprint", "LCSC Part #"])
+ for (value, fp, lcsc), refs in sorted(groups.items(), key=lambda kv: kv[1][0]):
+ w.writerow([value, ",".join(sorted(refs)), fp, lcsc])
+
+ rows = list(csv.DictReader(open(os.path.join(FAB, "calibrator-pos.csv"))))
+ with open(os.path.join(FAB, "calibrator-cpl-jlc.csv"), "w", newline="") as f:
+ w = csv.writer(f)
+ w.writerow(["Designator", "Mid X", "Mid Y", "Layer", "Rotation"])
+ for r in rows:
+ if not D.PARTS.get(r["Ref"], ("",) * 4)[3]:
+ continue
+ side = "Top" if r["Side"].lower() == "top" else "Bottom"
+ fp = D.PARTS[r["Ref"]][2].split(":")[1]
+ off = next((v for k, v in ROTATION_OFFSET.items() if fp.startswith(k)), 0)
+ rot = (float(r["Rot"]) + off) % 360
+ w.writerow([r["Ref"], f'{float(r["PosX"]):.4f}mm', f'{float(r["PosY"]):.4f}mm', side, f"{rot:g}"])
+ print("wrote BOM and CPL")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/hardware/calibrator/scripts/kicad.sh b/hardware/calibrator/scripts/kicad.sh
new file mode 100755
index 0000000..5ed1b0c
--- /dev/null
+++ b/hardware/calibrator/scripts/kicad.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# Run a command inside the pinned KiCad image with this folder mounted at /work.
+# Usage: scripts/kicad.sh
+set -e
+HERE=$(cd "$(dirname "$0")/.." && pwd)
+exec docker run --rm -u "$(id -u):$(id -g)" -e HOME=/tmp -v "$HERE:/work" -w /work kicad/kicad:9.0.9-full \
+ sh -c 'mkdir -p "$HOME/.config/kicad/9.0" && cp /usr/share/kicad/template/sym-lib-table /usr/share/kicad/template/fp-lib-table "$HOME/.config/kicad/9.0/" && exec "$@"' sh "$@"
diff --git a/hardware/calibrator/scripts/qr_matrix.txt b/hardware/calibrator/scripts/qr_matrix.txt
new file mode 100644
index 0000000..ea1c914
--- /dev/null
+++ b/hardware/calibrator/scripts/qr_matrix.txt
@@ -0,0 +1,30 @@
+# https://leeo86.github.io/mxl-avsync/ version 3-M, 29x29, no quiet zone
+11111110111010010111101111111
+10000010111110101100101000001
+10111010001101010010101011101
+10111010101110000101001011101
+10111010010001110001101011101
+10000010010000100111001000001
+11111110101010101010101111111
+00000000110011110111100000000
+10110111011011101101001001011
+10111101111010001111101010001
+11000010110100100010001010110
+00011000111101110011101110001
+11001110110010000100110001100
+00000101000001011001011000111
+01110011110110100011011100111
+00000101101101010000011110010
+00000011000110011011100111010
+01111000000111010110100101110
+10111111111100011010001110100
+00111101001110010100001000100
+01101110011001000111111111100
+00000000111101101111100011111
+11111110110001000111101011010
+10000010100010010000100011001
+10111010000000111110111110100
+10111010101110111001110111001
+10111010101010000011100100101
+10000010011011010000100011010
+11111110100010100011111010010
diff --git a/hardware/calibrator/sym-lib-table b/hardware/calibrator/sym-lib-table
new file mode 100644
index 0000000..5706a6c
--- /dev/null
+++ b/hardware/calibrator/sym-lib-table
@@ -0,0 +1,4 @@
+(sym_lib_table
+ (version 7)
+ (lib (name "calibrator")(type "KiCad")(uri "${KIPRJMOD}/calibrator.kicad_sym")(options "")(descr "AVsync calibrator custom symbols"))
+)
diff --git a/mobile-app/calibration/README.md b/mobile-app/calibration/README.md
index 100b13a..907d178 100644
--- a/mobile-app/calibration/README.md
+++ b/mobile-app/calibration/README.md
@@ -1,5 +1,7 @@
# Calibration rig
+New (in development): a small USB-C powered calibrator board with camera and display modes, see [`hardware/calibrator/`](../../hardware/calibrator/README.md) and [`docs/calibrator.md`](../../docs/calibrator.md).
+
A phone's camera and microphone are not assumed to be in sync. The rig is the reference: one microcontroller pin drives an LED and a piezo at the same instant (well under 0.1 ms apart), pulsing at the event rate (default 2 Hz). The app measures that pulse, stores the capture offset per device model and OS version, and subtracts it from later measurements.
A measurement with no record, a record older than 90 days, or a record from another OS version is shown uncalibrated, in orange, with no grade colour.