From 65e6bbaf7d40940c0ff6466632a76cd3ebdfc42e Mon Sep 17 00:00:00 2001 From: Oliver King Date: Tue, 16 Jun 2026 07:02:36 -0400 Subject: [PATCH 01/25] Fixed frequency units by changing dHz to cHz --- code/src/BoardTest/TestDualClock/CLAUDE.md | 6 +- .../BoardTest/TestDualClock/TestDualClock.ino | 42 ++++----- code/src/PhoenixSketch/BuildInfo.h | 4 +- code/src/PhoenixSketch/HardwareSm.cpp | 8 +- .../PhoenixSketch/MainBoard_DisplayHome.cpp | 2 +- code/src/PhoenixSketch/RFBoard.cpp | 70 +++++++-------- code/src/PhoenixSketch/RFBoard.h | 18 ++-- code/src/PhoenixSketch/Tune.cpp | 6 +- code/src/PhoenixSketch/Tune.h | 4 +- code/test/Loop_test.cpp | 4 +- code/test/README.md | 2 +- code/test/RFBoard_test.cpp | 20 ++--- code/test/RFHardwareSM_test.cpp | 88 +++++++++---------- code/test/Radio_test.cpp | 14 +-- 14 files changed, 144 insertions(+), 144 deletions(-) diff --git a/code/src/BoardTest/TestDualClock/CLAUDE.md b/code/src/BoardTest/TestDualClock/CLAUDE.md index 06af87d..bbc8852 100644 --- a/code/src/BoardTest/TestDualClock/CLAUDE.md +++ b/code/src/BoardTest/TestDualClock/CLAUDE.md @@ -40,13 +40,13 @@ This validates the hardware configuration needed for full-duplex-capable VFO ope ## Key Functions -### `SetSSBRXVFOFrequency(int64_t frequency_dHz)` +### `SetSSBRXVFOFrequency(int64_t frequency_cHz)` Sets CLK0/CLK1 as quadrature outputs using PLLA. Uses phase offset method for frequencies above 3.2 MHz, and timed delay technique for lower frequencies. -### `SetSSBTXVFOFrequency(int64_t frequency_dHz)` +### `SetSSBTXVFOFrequency(int64_t frequency_cHz)` Sets CLK4/CLK5 as quadrature outputs using PLLB. Same quadrature generation techniques as RX. -### `SetCWTXVFOFrequency(int64_t frequency_dHz)` +### `SetCWTXVFOFrequency(int64_t frequency_cHz)` Sets CLK6 for CW transmission using standard Si5351 frequency setting. ### `EvenDivisor(int64_t freq2_Hz)` diff --git a/code/src/BoardTest/TestDualClock/TestDualClock.ino b/code/src/BoardTest/TestDualClock/TestDualClock.ino index 79ae241..f3edb23 100644 --- a/code/src/BoardTest/TestDualClock/TestDualClock.ino +++ b/code/src/BoardTest/TestDualClock/TestDualClock.ino @@ -41,9 +41,9 @@ Si5351 si5351; #define Si_5351_crystal 25000000L static int32_t txmultiple, oldtxMultiple; static int32_t rxmultiple, oldrxMultiple; -static int64_t SSBTXVFOFreq_dHz; -static int64_t SSBRXVFOFreq_dHz; -static int64_t CWTXVFOFreq_dHz; +static int64_t SSBTXVFOFreq_cHz; +static int64_t SSBRXVFOFreq_cHz; +static int64_t CWTXVFOFreq_cHz; void scanner(TwoWire *I2C) { byte error, address; @@ -160,15 +160,15 @@ int32_t EvenDivisor(int64_t freq2_Hz) { /** * Set the CLK0 and CLK1 outputs as quadrature outputs at the specified frequency. * - * @param frequency_dHz The desired clock frequency in (Hz * 100) + * @param frequency_cHz The desired clock frequency in (Hz * 100) */ -void SetSSBRXVFOFrequency(int64_t frequency_dHz){ +void SetSSBRXVFOFrequency(int64_t frequency_cHz){ // No need to change if it's already at this setting - if (frequency_dHz == SSBRXVFOFreq_dHz) return; + if (frequency_cHz == SSBRXVFOFreq_cHz) return; Serial.print("Setting RX to: "); - Serial.println(frequency_dHz/100); - SSBRXVFOFreq_dHz = frequency_dHz; - int64_t Clk1SetFreq = frequency_dHz; + Serial.println(frequency_cHz/100); + SSBRXVFOFreq_cHz = frequency_cHz; + int64_t Clk1SetFreq = frequency_cHz; rxmultiple = EvenDivisor(Clk1SetFreq / SI5351_FREQ_MULT); uint64_t pll_freq = Clk1SetFreq * rxmultiple; uint64_t freq = pll_freq / rxmultiple; @@ -214,15 +214,15 @@ void SetSSBRXVFOFrequency(int64_t frequency_dHz){ /** * Set the CLK4 and CLK5 outputs as quadrature outputs at the specified frequency. * - * @param frequency_dHz The desired clock frequency in (Hz * 100) + * @param frequency_cHz The desired clock frequency in (Hz * 100) */ -void SetSSBTXVFOFrequency(int64_t frequency_dHz){ +void SetSSBTXVFOFrequency(int64_t frequency_cHz){ // No need to change if it's already at this setting - if (frequency_dHz == SSBTXVFOFreq_dHz) return; + if (frequency_cHz == SSBTXVFOFreq_cHz) return; Serial.print("Setting TX to: "); - Serial.println(frequency_dHz/100); - SSBTXVFOFreq_dHz = frequency_dHz; - int64_t Clk5SetFreq = frequency_dHz; + Serial.println(frequency_cHz/100); + SSBTXVFOFreq_cHz = frequency_cHz; + int64_t Clk5SetFreq = frequency_cHz; txmultiple = EvenDivisor(Clk5SetFreq / SI5351_FREQ_MULT); uint64_t pll_freq = Clk5SetFreq * txmultiple; uint64_t freq = pll_freq / txmultiple; @@ -280,19 +280,19 @@ void SetSSBTXVFOFrequency(int64_t frequency_dHz){ * (e.g., centerFreq + 700Hz for a 700Hz tone). The tune state machine handles * this offset calculation. * - * @param frequency_dHz Desired CW VFO frequency in deca-Hertz (Hz × 100) + * @param frequency_cHz Desired CW VFO frequency in deca-Hertz (Hz × 100) * * @see GetCWVFOFrequency() to read current frequency * @see EnableCWVFOOutput() to enable CLK6 output * @see Tune.cpp for CW frequency offset handling */ -void SetCWTXVFOFrequency(int64_t frequency_dHz){ +void SetCWTXVFOFrequency(int64_t frequency_cHz){ // No need to change if it's already at this setting - if (frequency_dHz == CWTXVFOFreq_dHz) return; + if (frequency_cHz == CWTXVFOFreq_cHz) return; Serial.print("Setting CW to: "); - Serial.println(frequency_dHz/100); - CWTXVFOFreq_dHz = frequency_dHz; - si5351.set_freq(CWTXVFOFreq_dHz, SI5351_CLK6); + Serial.println(frequency_cHz/100); + CWTXVFOFreq_cHz = frequency_cHz; + si5351.set_freq(CWTXVFOFreq_cHz, SI5351_CLK6); } /** diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index c5d7d69..93009f0 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -9,7 +9,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "024095a" -#define BUILD_TIMESTAMP "2026-06-06 11:12:26" +#define GIT_COMMIT_HASH "4367075" +#define BUILD_TIMESTAMP "2026-06-06 11:14:53" #endif // BUILDINFO_H diff --git a/code/src/PhoenixSketch/HardwareSm.cpp b/code/src/PhoenixSketch/HardwareSm.cpp index dce3953..63fccec 100644 --- a/code/src/PhoenixSketch/HardwareSm.cpp +++ b/code/src/PhoenixSketch/HardwareSm.cpp @@ -434,7 +434,7 @@ void HandleRFHardwareStateChange(RFHardwareState newState){ DisableRXVFOOutput(); DisableTXVFOOutput(); // Set frequencyCW_Hz to appropriate value - //SetCWVFOFrequency( GetCWTXFreq_dHz() ); + //SetCWVFOFrequency( GetCWTXFreq_cHz() ); UpdateTuneState(); // Set driveCurrentCW_mA to appropriate value // > This does not change after initialization, so do nothing @@ -656,7 +656,7 @@ void HandleTuneState(TuneState tuneState){ } case TuneSSBTX:{ // SSB Transmit: TXfreq = centerFreq_Hz - int64_t newFreq = GetTXRXFreq_dHz(); + int64_t newFreq = GetTXRXFreq_cHz(); // Set transmit to the TXRX frequency SetTXVFOFrequency( newFreq ); if (HasDualVFOs()){ @@ -668,7 +668,7 @@ void HandleTuneState(TuneState tuneState){ } case TuneCWTX:{ // CW Transmit: TXfreq = centerFreq_Hz - fineTuneFreq_Hz - SampleRate/4 -/+ CWToneOffset - int64_t newFreq = GetCWTXFreq_dHz(); + int64_t newFreq = GetCWTXFreq_cHz(); SetCWVFOFrequency( newFreq ); break; } @@ -684,7 +684,7 @@ void HandleTuneState(TuneState tuneState){ // away from DC in the receive spectrum SetTXVFOFrequency( (ED.centerFreq_Hz[ED.activeVFO] - SR[SampleRate].rate/4)*100 ); } else { - SetTXVFOFrequency( GetTXRXFreq_dHz() ); + SetTXVFOFrequency( GetTXRXFreq_cHz() ); } break; } diff --git a/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp b/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp index 9b2251b..86046cf 100644 --- a/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp +++ b/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp @@ -224,7 +224,7 @@ static uint8_t activeVFO_old = 10; * Render both VFO A and VFO B frequency displays. */ void DrawVFOPanes(void) { - int64_t TxRxFreq = GetTXRXFreq_dHz()/100; + int64_t TxRxFreq = GetTXRXFreq_cHz()/100; if ((TxRxFreq == TxRxFreq_old) && (ED.activeVFO == activeVFO_old) && (!PaneVFOA.stale) && (!PaneVFOB.stale)) return; diff --git a/code/src/PhoenixSketch/RFBoard.cpp b/code/src/PhoenixSketch/RFBoard.cpp index 9160fec..292224a 100644 --- a/code/src/PhoenixSketch/RFBoard.cpp +++ b/code/src/PhoenixSketch/RFBoard.cpp @@ -38,18 +38,18 @@ bool dualVFO = true; /** Set to true if we have separate RX and TX VFOs */ // There are three VFOs: RX, TX, and CW. They are controlled separately. #define SI5351_DRIVE_CURRENT_RX SI5351_DRIVE_8MA static int32_t rxmultiple, oldrxMultiple; -static int64_t RXVFOFreq_dHz; +static int64_t RXVFOFreq_cHz; si5351_clock CLK0RX = SI5351_CLK0; si5351_clock CLK90RX = SI5351_CLK1; #define SI5351_DRIVE_CURRENT_TX SI5351_DRIVE_2MA static int32_t txmultiple, oldtxMultiple; -static int64_t TXVFOFreq_dHz; +static int64_t TXVFOFreq_cHz; si5351_clock CLK0TX = SI5351_CLK4; si5351_clock CLK90TX = SI5351_CLK5; #define SI5351_DRIVE_CURRENT_CW SI5351_DRIVE_2MA -static int64_t CWVFOFreq_dHz; +static int64_t CWVFOFreq_cHz; si5351_clock CLKCW = SI5351_CLK6; #define CLKCWSINGLEVFO SI5351_CLK2 @@ -306,7 +306,7 @@ errno_t SetTXAttenuation(float32_t txAttenuation_dB){ void SetFrequencyCorrectionFactor(int32_t corr){ int64_t freq = GetRXVFOFrequency(); - RXVFOFreq_dHz = 0; + RXVFOFreq_cHz = 0; si5351.reset(); si5351.init(SI5351_LOAD_CAPACITANCE, Si_5351_crystal, corr); @@ -322,35 +322,35 @@ void SetFrequencyCorrectionFactor(int32_t corr){ * Get the current RX VFO frequency setting. * * Returns the frequency of the RX VFO (CLK0RX & CLK90RX quadrature outputs) - * used for reception. The internal frequency is stored in deci-Hertz (Hz × 10) + * used for reception. The internal frequency is stored in centi-Hertz (Hz × 100) * but this function returns the value in Hertz. * * @return Current RX VFO frequency in Hz * * @see SetRXVFOFrequency() to change the frequency - * @see RXVFOFreq_dHz internal storage variable + * @see RXVFOFreq_cHz internal storage variable */ int64_t GetRXVFOFrequency(void){ - return RXVFOFreq_dHz/100; + return RXVFOFreq_cHz/100; } /** * Get the current TX VFO frequency setting. * * Returns the frequency of the TX VFO (CLK0TX & CLK90TX quadrature outputs) - * used for SSB transmission. The internal frequency is stored in deci-Hertz - * (Hz × 10) but this function returns the value in Hertz. + * used for SSB transmission. The internal frequency is stored in centi-Hertz + * (Hz × 100) but this function returns the value in Hertz. * * @return Current TX VFO frequency in Hz * * @see SetTXVFOFrequency() to change the frequency - * @see TXVFOFreq_dHz internal storage variable + * @see TXVFOFreq_cHz internal storage variable */ int64_t GetTXVFOFrequency(void){ if (!dualVFO){ return GetRXVFOFrequency(); } - return TXVFOFreq_dHz/100; + return TXVFOFreq_cHz/100; } /** @@ -478,13 +478,13 @@ int32_t EvenDivisor(int64_t freq2_Hz) { /** * Set the CLK0RX and CLK90RX outputs as quadrature outputs at the specified frequency. * - * @param frequency_dHz The desired clock frequency in (Hz * 100) + * @param frequency_cHz The desired clock frequency in (Hz * 100) */ -void SetRXVFOFrequency(int64_t frequency_dHz){ +void SetRXVFOFrequency(int64_t frequency_cHz){ // No need to change if it's already at this setting - if (frequency_dHz == RXVFOFreq_dHz) return; - RXVFOFreq_dHz = frequency_dHz; - int64_t ClkSetFreq = frequency_dHz; + if (frequency_cHz == RXVFOFreq_cHz) return; + RXVFOFreq_cHz = frequency_cHz; + int64_t ClkSetFreq = frequency_cHz; rxmultiple = EvenDivisor(ClkSetFreq / SI5351_FREQ_MULT); uint64_t pll_freq = ClkSetFreq * rxmultiple; uint64_t freq = pll_freq / rxmultiple; @@ -529,17 +529,17 @@ void SetRXVFOFrequency(int64_t frequency_dHz){ /** * Set the CLK0TX and CLK90TX outputs as quadrature outputs at the specified frequency. * - * @param frequency_dHz The desired clock frequency in (Hz * 100) + * @param frequency_cHz The desired clock frequency in (Hz * 100) */ -void SetTXVFOFrequency(int64_t frequency_dHz){ +void SetTXVFOFrequency(int64_t frequency_cHz){ if (!dualVFO){ - SetRXVFOFrequency(frequency_dHz); + SetRXVFOFrequency(frequency_cHz); return; } // No need to change if it's already at this setting - if (frequency_dHz == TXVFOFreq_dHz) return; - TXVFOFreq_dHz = frequency_dHz; - int64_t ClkSetFreq = frequency_dHz; + if (frequency_cHz == TXVFOFreq_cHz) return; + TXVFOFreq_cHz = frequency_cHz; + int64_t ClkSetFreq = frequency_cHz; txmultiple = EvenDivisor(ClkSetFreq / SI5351_FREQ_MULT); uint64_t pll_freq = ClkSetFreq * txmultiple; uint64_t freq = pll_freq / txmultiple; @@ -631,7 +631,7 @@ void DisableTXVFOOutput(void){ * Set the CW VFO frequency for Morse code transmission. * * Configures the Si5351 CLKCW output frequency used for CW (Morse code) operation. - * The frequency is stored and set in deci-Hertz units (Hz × 10) for high precision. + * The frequency is stored and set in centi-Hertz units (Hz × 100) for high precision. * * Optimization: Skips the Si5351 write if the requested frequency matches the * current setting, preventing unnecessary I2C transactions. @@ -640,36 +640,36 @@ void DisableTXVFOOutput(void){ * (e.g., centerFreq + 700Hz for a 700Hz tone). The tune state machine handles * this offset calculation. * - * @param frequency_dHz Desired CW VFO frequency in deci-Hertz (Hz × 10) + * @param frequency_cHz Desired CW VFO frequency in centi-Hertz (Hz × 100) * * @see GetCWVFOFrequency() to read current frequency * @see EnableCWVFOOutput() to enable CLK2 output * @see Tune.cpp for CW frequency offset handling */ -void SetCWVFOFrequency(int64_t frequency_dHz){ +void SetCWVFOFrequency(int64_t frequency_cHz){ // No need to change if it's already at this setting - if (frequency_dHz == CWVFOFreq_dHz) return; - CWVFOFreq_dHz = frequency_dHz; + if (frequency_cHz == CWVFOFreq_cHz) return; + CWVFOFreq_cHz = frequency_cHz; if (dualVFO) - si5351.set_freq(CWVFOFreq_dHz, CLKCW); + si5351.set_freq(CWVFOFreq_cHz, CLKCW); else - si5351.set_freq(CWVFOFreq_dHz, CLKCWSINGLEVFO); + si5351.set_freq(CWVFOFreq_cHz, CLKCWSINGLEVFO); } /** * Get the current CW VFO frequency setting. * * Returns the frequency of the CW VFO (CLK2 output) used for CW transmission. - * The internal frequency is stored in deci-Hertz (Hz × 10) but this function + * The internal frequency is stored in centi-Hertz (Hz × 100) but this function * returns the value in Hertz. * * @return Current CW VFO frequency in Hz * * @see SetCWVFOFrequency() to change the frequency - * @see CWVFOFreq_dHz internal storage variable + * @see CWVFOFreq_cHz internal storage variable */ int64_t GetCWVFOFrequency(void){ - return CWVFOFreq_dHz/100; + return CWVFOFreq_cHz/100; } /** @@ -1000,7 +1000,7 @@ uint16_t GetRFMCPRegisters(void){ void ResetVFOState(void){ oldrxMultiple = 0; oldtxMultiple = 0; - RXVFOFreq_dHz = 0; - TXVFOFreq_dHz = 0; - CWVFOFreq_dHz = 0; + RXVFOFreq_cHz = 0; + TXVFOFreq_cHz = 0; + CWVFOFreq_cHz = 0; } \ No newline at end of file diff --git a/code/src/PhoenixSketch/RFBoard.h b/code/src/PhoenixSketch/RFBoard.h index 2dc2984..0188450 100644 --- a/code/src/PhoenixSketch/RFBoard.h +++ b/code/src/PhoenixSketch/RFBoard.h @@ -88,27 +88,27 @@ void SetFrequencyCorrectionFactor(int32_t corr); /** * @brief Get the current RX VFO frequency setting - * @return Frequency in decihertz (Hz × 10) + * @return Frequency in centihertz (Hz × 100) */ int64_t GetRXVFOFrequency(void); /** * @brief Get the current TX VFO frequency setting - * @return Frequency in decihertz (Hz × 10) + * @return Frequency in centihertz (Hz × 100) */ int64_t GetTXVFOFrequency(void); /** * @brief Set the RX VFO frequency - * @param frequency_dHz Desired frequency in decihertz (Hz × 10) + * @param frequency_cHz Desired frequency in centihertz (Hz × 100) */ -void SetRXVFOFrequency(int64_t frequency_dHz); +void SetRXVFOFrequency(int64_t frequency_cHz); /** * @brief Set the TX VFO frequency - * @param frequency_dHz Desired frequency in decihertz (Hz × 10) + * @param frequency_cHz Desired frequency in centihertz (Hz × 100) */ -void SetTXVFOFrequency(int64_t frequency_dHz); +void SetTXVFOFrequency(int64_t frequency_cHz); /** * @brief Set the RX VFO output power level @@ -162,16 +162,16 @@ errno_t InitTXVFO(void); /** * @brief Get the current CW VFO frequency setting - * @return Frequency in decihertz (Hz × 10) + * @return Frequency in centihertz (Hz × 100) */ int64_t GetCWVFOFrequency(void); /** * @brief Set the CW VFO frequency - * @param frequency_dHz Desired frequency in decihertz (Hz × 10) + * @param frequency_cHz Desired frequency in centihertz (Hz × 100) * @note Frequency is applied to Si5351 CLK1 output */ -void SetCWVFOFrequency(int64_t frequency_dHz); +void SetCWVFOFrequency(int64_t frequency_cHz); /** * @brief Set the CW VFO output power level diff --git a/code/src/PhoenixSketch/Tune.cpp b/code/src/PhoenixSketch/Tune.cpp index dec0b19..71aebb1 100644 --- a/code/src/PhoenixSketch/Tune.cpp +++ b/code/src/PhoenixSketch/Tune.cpp @@ -107,7 +107,7 @@ void AdjustFineTune(int32_t filter_change){ * * @return The effective transmit/receive frequency in units of Hz * 100 */ -int64_t GetTXRXFreq_dHz(void){ +int64_t GetTXRXFreq_cHz(void){ int64_t val = 100*(ED.centerFreq_Hz[ED.activeVFO] - ED.fineTuneFreq_Hz[ED.activeVFO] - SR[SampleRate].rate/4); return val; } @@ -129,8 +129,8 @@ int64_t GetTXRXFreq(uint8_t vfo){ * * @return The CW tone transmit frequency in units of Hz * 100 */ -int64_t GetCWTXFreq_dHz(void){ - int64_t txrx = GetTXRXFreq_dHz(); +int64_t GetCWTXFreq_cHz(void){ + int64_t txrx = GetTXRXFreq_cHz(); int64_t offset = (int64_t)(100*CWToneOffsetsHz[ED.CWToneIndex]); if (bands[ED.currentBand[ED.activeVFO]].mode == LSB) { return txrx - offset; diff --git a/code/src/PhoenixSketch/Tune.h b/code/src/PhoenixSketch/Tune.h index 46e4e90..af60259 100644 --- a/code/src/PhoenixSketch/Tune.h +++ b/code/src/PhoenixSketch/Tune.h @@ -24,7 +24,7 @@ If not, see . * @note Combines center frequency, fine tune offset, and sample rate quarter-shift * @note Formula: (centerFreq - fineTune - sampleRate/4) × 100 */ -int64_t GetTXRXFreq_dHz(void); +int64_t GetTXRXFreq_cHz(void); /** * @brief Get effective TX/RX frequency for specified VFO @@ -41,7 +41,7 @@ int64_t GetTXRXFreq(uint8_t vfo); * @note Adds/subtracts CW tone offset from TX/RX frequency * @note Offset direction depends on sideband (LSB subtracts, USB adds) */ -int64_t GetCWTXFreq_dHz(void); +int64_t GetCWTXFreq_cHz(void); /** * @brief Determine amateur radio band containing given frequency diff --git a/code/test/Loop_test.cpp b/code/test/Loop_test.cpp index 985ff3c..4c4cc08 100644 --- a/code/test/Loop_test.cpp +++ b/code/test/Loop_test.cpp @@ -1265,7 +1265,7 @@ TEST(Loop, ResetTuningButtonCallsResetFunction) { // Set up initial state with non-zero fine tune ED.fineTuneFreq_Hz[ED.activeVFO] = 1500L; ED.centerFreq_Hz[ED.activeVFO] = 14200000L; - int64_t oldRXTX = GetTXRXFreq_dHz(); + int64_t oldRXTX = GetTXRXFreq_cHz(); // Call reset tuning button handler SetButton(RESET_TUNING); @@ -1279,7 +1279,7 @@ TEST(Loop, ResetTuningButtonCallsResetFunction) { EXPECT_EQ(ED.centerFreq_Hz[ED.activeVFO], 14198500L); // 14200000 - 1500 // RXTX frequency should remain the same - EXPECT_EQ(GetTXRXFreq_dHz(), oldRXTX); + EXPECT_EQ(GetTXRXFreq_cHz(), oldRXTX); } TEST(Loop, ResetTuningButtonViaInterruptHandling) { diff --git a/code/test/README.md b/code/test/README.md index 546d711..1208aca 100644 --- a/code/test/README.md +++ b/code/test/README.md @@ -251,7 +251,7 @@ Mock objects simulate hardware behavior: ```cpp TEST(RFBoard, SetFrequency) { // Mock will record VFO commands - SetFrequency_dHz(145000000); // 14.500 MHz + SetFrequency_cHz(145000000); // 14.500 MHz // Verify mock received correct commands EXPECT_EQ(GetLastVFOFrequency(), 145000000); diff --git a/code/test/RFBoard_test.cpp b/code/test/RFBoard_test.cpp index a1f5ecb..3bb4a14 100644 --- a/code/test/RFBoard_test.cpp +++ b/code/test/RFBoard_test.cpp @@ -6,8 +6,8 @@ //} extern int32_t EvenDivisor(int64_t freq2_Hz); -extern int64_t GetTXRXFreq_dHz(void); -extern int64_t GetCWTXFreq_dHz(void); +extern int64_t GetTXRXFreq_cHz(void); +extern int64_t GetCWTXFreq_cHz(void); // Mock control function for Si5351 address simulation extern void Si5351_Mock_SetDeviceAddress(uint8_t addr); @@ -213,32 +213,32 @@ TEST(RFBoard, EvenDivisorTest) { EXPECT_EQ(EvenDivisor(220000000), 2); } -TEST(RFBoard, GetTXRXFreq_dHz_Test) { +TEST(RFBoard, GetTXRXFreq_cHz_Test) { ED.centerFreq_Hz[ED.activeVFO] = 7074000L; ED.fineTuneFreq_Hz[ED.activeVFO] = 100L; SampleRate = SAMPLE_RATE_48K; // Calculation is: 100 * (7074000 - 100 - 48000/4) = 100 * (7073900 - 12000) = 100 * 7061900 = 706190000 - EXPECT_EQ(GetTXRXFreq_dHz(), 706190000); + EXPECT_EQ(GetTXRXFreq_cHz(), 706190000); } -TEST(RFBoard, GetCWTXFreq_dHz_LSB_Test) { +TEST(RFBoard, GetCWTXFreq_cHz_LSB_Test) { ED.centerFreq_Hz[ED.activeVFO] = 7074000L; ED.fineTuneFreq_Hz[ED.activeVFO] = 100L; SampleRate = SAMPLE_RATE_192K; ED.currentBand[ED.activeVFO] = BAND_40M; // LSB ED.CWToneIndex = 3; // 750 Hz // Calculation is: 100 * (7074000 - 100 - 192000/4 - 750) - EXPECT_EQ(GetCWTXFreq_dHz(), 702515000); + EXPECT_EQ(GetCWTXFreq_cHz(), 702515000); } -TEST(RFBoard, GetCWTXFreq_dHz_USB_Test) { +TEST(RFBoard, GetCWTXFreq_cHz_USB_Test) { ED.centerFreq_Hz[ED.activeVFO] = 14074000L; ED.fineTuneFreq_Hz[ED.activeVFO] = 100L; SampleRate = SAMPLE_RATE_192K; ED.currentBand[ED.activeVFO] = BAND_20M; // USB ED.CWToneIndex = 3; // 750 Hz // Calculation is: 100 * (14074000 - 100 - 48000 + 750) - EXPECT_EQ(GetCWTXFreq_dHz(), 1402665000); + EXPECT_EQ(GetCWTXFreq_cHz(), 1402665000); } TEST(RFBoard, SetFreq_Test) { @@ -303,7 +303,7 @@ TEST(RFBoard, SetCWVFOFrequency_Test) { SampleRate = SAMPLE_RATE_192K; ED.currentBand[ED.activeVFO] = BAND_40M; // LSB ED.CWToneIndex = 3; // 750 Hz - SetCWVFOFrequency(GetCWTXFreq_dHz()); + SetCWVFOFrequency(GetCWTXFreq_cHz()); // Calculation is: 100 * (7074000 - 100 - 192000/4 - 750) EXPECT_EQ(si5351.clk_freq[SI5351_CLK6], 702515000); @@ -314,7 +314,7 @@ TEST(RFBoard, SetCWVFOFrequency_Test) { SampleRate = SAMPLE_RATE_192K; ED.currentBand[ED.activeVFO] = BAND_40M; // LSB ED.CWToneIndex = 3; // 750 Hz - int64_t a = GetCWTXFreq_dHz(); + int64_t a = GetCWTXFreq_cHz(); SetCWVFOFrequency(a); // Calculation is: 100 * (7075000 - 100 - 192000/4 - 750) EXPECT_EQ(si5351.clk_freq[SI5351_CLK2], 702615000); diff --git a/code/test/RFHardwareSM_test.cpp b/code/test/RFHardwareSM_test.cpp index 305dea6..66a00eb 100644 --- a/code/test/RFHardwareSM_test.cpp +++ b/code/test/RFHardwareSM_test.cpp @@ -131,7 +131,7 @@ and between SSB receive and SSB transmit mode? it changes from state to state. UpdateRFHardwareState(); EXPECT_EQ(GetRXVFOFrequency(), 7100000L); EXPECT_EQ(ED.fineTuneFreq_Hz[ED.activeVFO], 500L); - EXPECT_EQ(GetTXRXFreq_dHz(),rxtx*100); + EXPECT_EQ(GetTXRXFreq_cHz(),rxtx*100); } @@ -180,7 +180,7 @@ TEST(RFHardwareState, TuneStateMachine_UpdateTuneStateFromSSBTransmit) { modeSM.state_id = ModeSm_StateId_SSB_TRANSMIT; UpdateTuneState(); - // Should set TX VFO frequency to GetTXRXFreq_dHz() + // Should set TX VFO frequency to GetTXRXFreq_cHz() // Calculation: 7074000 - 100 - 48000/4 = 7061900 Hz * 100 = 706190000 (see Tune.cpp:98) EXPECT_EQ(si5351.clk_freq[SI5351_CLK4], 706190000); EXPECT_EQ(si5351.clk_freq[SI5351_CLK5], 706190000); @@ -198,9 +198,9 @@ TEST(RFHardwareState, TuneStateMachine_UpdateTuneStateFromCWTransmitMark) { modeSM.state_id = ModeSm_StateId_CW_TRANSMIT_MARK; UpdateTuneState(); - // Should set CW VFO frequency to GetCWTXFreq_dHz() - // GetTXRXFreq_dHz() = (7074000 - 100 - 12000) * 100 = 706190000 (see Tune.cpp:98) - // GetCWTXFreq_dHz() = 706190000 - 75000 = 706115000 (LSB) + // Should set CW VFO frequency to GetCWTXFreq_cHz() + // GetTXRXFreq_cHz() = (7074000 - 100 - 12000) * 100 = 706190000 (see Tune.cpp:98) + // GetCWTXFreq_cHz() = 706190000 - 75000 = 706115000 (LSB) EXPECT_EQ(si5351.clk_freq[SI5351_CLK6], 706115000); } @@ -216,9 +216,9 @@ TEST(RFHardwareState, TuneStateMachine_UpdateTuneStateFromCWTransmitSpace) { modeSM.state_id = ModeSm_StateId_CW_TRANSMIT_SPACE; UpdateTuneState(); - // Should set CW VFO frequency to GetCWTXFreq_dHz() - // GetTXRXFreq_dHz() = (14074000 - 100 - 12000) * 100 = 1406190000 (see Tune.cpp:98) - // GetCWTXFreq_dHz() = 1406190000 + 75000 = 1406265000 (USB) + // Should set CW VFO frequency to GetCWTXFreq_cHz() + // GetTXRXFreq_cHz() = (14074000 - 100 - 12000) * 100 = 1406190000 (see Tune.cpp:98) + // GetCWTXFreq_cHz() = 1406190000 + 75000 = 1406265000 (USB) EXPECT_EQ(si5351.clk_freq[SI5351_CLK6], 1406265000); } @@ -234,9 +234,9 @@ TEST(RFHardwareState, TuneStateMachine_UpdateTuneStateFromCWTransmitDitMark) { modeSM.state_id = ModeSm_StateId_CW_TRANSMIT_DIT_MARK; UpdateTuneState(); - // Should set CW VFO frequency to GetCWTXFreq_dHz() - // GetTXRXFreq_dHz() = (7074000 - 100 - 12000) * 100 = 706190000 (see Tune.cpp:98) - // GetCWTXFreq_dHz() = 706190000 - 65650 = 706124350 (LSB) + // Should set CW VFO frequency to GetCWTXFreq_cHz() + // GetTXRXFreq_cHz() = (7074000 - 100 - 12000) * 100 = 706190000 (see Tune.cpp:98) + // GetCWTXFreq_cHz() = 706190000 - 65650 = 706124350 (LSB) EXPECT_EQ(si5351.clk_freq[SI5351_CLK6], 706124350); } @@ -252,9 +252,9 @@ TEST(RFHardwareState, TuneStateMachine_UpdateTuneStateFromCWTransmitDahMark) { modeSM.state_id = ModeSm_StateId_CW_TRANSMIT_DAH_MARK; UpdateTuneState(); - // Should set CW VFO frequency to GetCWTXFreq_dHz() - // GetTXRXFreq_dHz() = (14074000 - 200 - 12000) * 100 = 1406180000 (see Tune.cpp:98) - // GetCWTXFreq_dHz() = 1406180000 + 56250 = 1406236250 (USB) + // Should set CW VFO frequency to GetCWTXFreq_cHz() + // GetTXRXFreq_cHz() = (14074000 - 200 - 12000) * 100 = 1406180000 (see Tune.cpp:98) + // GetCWTXFreq_cHz() = 1406180000 + 56250 = 1406236250 (USB) EXPECT_EQ(si5351.clk_freq[SI5351_CLK6], 1406236250); } @@ -270,9 +270,9 @@ TEST(RFHardwareState, TuneStateMachine_UpdateTuneStateFromCWTransmitKeyerSpace) modeSM.state_id = ModeSm_StateId_CW_TRANSMIT_KEYER_SPACE; UpdateTuneState(); - // Should set CW VFO frequency to GetCWTXFreq_dHz() - // GetTXRXFreq_dHz() = (3574000 - 50 - 12000) * 100 = 356195000 (see Tune.cpp:98) - // GetCWTXFreq_dHz() = 356195000 - 40000 = 356155000 (LSB) + // Should set CW VFO frequency to GetCWTXFreq_cHz() + // GetTXRXFreq_cHz() = (3574000 - 50 - 12000) * 100 = 356195000 (see Tune.cpp:98) + // GetCWTXFreq_cHz() = 356195000 - 40000 = 356155000 (LSB) EXPECT_EQ(si5351.clk_freq[SI5351_CLK6], 356155000); } @@ -288,9 +288,9 @@ TEST(RFHardwareState, TuneStateMachine_UpdateTuneStateFromCWTransmitKeyerWait) { modeSM.state_id = ModeSm_StateId_CW_TRANSMIT_KEYER_WAIT; UpdateTuneState(); - // Should set CW VFO frequency to GetCWTXFreq_dHz() - // GetTXRXFreq_dHz() = (21074000 - (-50) - 12000) * 100 = 2106205000 (see Tune.cpp:98) - // GetCWTXFreq_dHz() = 2106205000 + 84375 = 2106289375 (USB) + // Should set CW VFO frequency to GetCWTXFreq_cHz() + // GetTXRXFreq_cHz() = (21074000 - (-50) - 12000) * 100 = 2106205000 (see Tune.cpp:98) + // GetCWTXFreq_cHz() = 2106205000 + 84375 = 2106289375 (USB) EXPECT_EQ(si5351.clk_freq[SI5351_CLK6], 2106289375); } @@ -309,7 +309,7 @@ TEST(RFHardwareState, TuneStateMachine_StateTransitionSequenceSSBToReceive) { // Transition to SSB transmit modeSM.state_id = ModeSm_StateId_SSB_TRANSMIT; UpdateTuneState(); - // GetTXRXFreq_dHz() = (14230000 - 100 - 12000) * 100 = 1421790000 (see Tune.cpp:98) + // GetTXRXFreq_cHz() = (14230000 - 100 - 12000) * 100 = 1421790000 (see Tune.cpp:98) EXPECT_EQ(GetTXVFOFrequency(), 14217900); // Back to SSB receive @@ -336,8 +336,8 @@ TEST(RFHardwareState, TuneStateMachine_StateTransitionSequenceCWReceiveToTransmi // Transition to CW transmit mark modeSM.state_id = ModeSm_StateId_CW_TRANSMIT_MARK; UpdateTuneState(); - // GetTXRXFreq_dHz() = (7030000 - 200 - 12000) * 100 = 701780000 (see Tune.cpp:98) - // GetCWTXFreq_dHz() = 701780000 - 75000 = 701705000 (LSB) + // GetTXRXFreq_cHz() = (7030000 - 200 - 12000) * 100 = 701780000 (see Tune.cpp:98) + // GetCWTXFreq_cHz() = 701780000 - 75000 = 701705000 (LSB) EXPECT_EQ(si5351.clk_freq[SI5351_CLK6], 701705000); // Transition to CW transmit space @@ -362,19 +362,19 @@ TEST(RFHardwareState, TuneStateMachine_DifferentSampleRates) { SampleRate = SAMPLE_RATE_192K; modeSM.state_id = ModeSm_StateId_SSB_TRANSMIT; UpdateTuneState(); - // GetTXRXFreq_dHz() = (14074000 - 100 - 192000/4) * 100 = (14073900 - 48000) * 100 = 1402590000 (see Tune.cpp:98) + // GetTXRXFreq_cHz() = (14074000 - 100 - 192000/4) * 100 = (14073900 - 48000) * 100 = 1402590000 (see Tune.cpp:98) EXPECT_EQ(GetTXVFOFrequency(), 14025900); // Test with 96kHz sample rate SampleRate = SAMPLE_RATE_96K; UpdateTuneState(); - // GetTXRXFreq_dHz() = (14074000 - 100 - 96000/4) * 100 = (14073900 - 24000) * 100 = 1404990000 (see Tune.cpp:98) + // GetTXRXFreq_cHz() = (14074000 - 100 - 96000/4) * 100 = (14073900 - 24000) * 100 = 1404990000 (see Tune.cpp:98) EXPECT_EQ(GetTXVFOFrequency(), 14049900); // Test with 48kHz sample rate SampleRate = SAMPLE_RATE_48K; UpdateTuneState(); - // GetTXRXFreq_dHz() = (14074000 - 100 - 48000/4) * 100 = (14073900 - 12000) * 100 = 1406190000 (see Tune.cpp:98) + // GetTXRXFreq_cHz() = (14074000 - 100 - 48000/4) * 100 = (14073900 - 12000) * 100 = 1406190000 (see Tune.cpp:98) EXPECT_EQ(GetTXVFOFrequency(), 14061900); } @@ -665,8 +665,8 @@ TEST(RFHardwareState, SingleVFO_TuneStateMachine_CWTransmitMark) { UpdateTuneState(); // In single VFO mode, CW uses CLK2 instead of CLK6 - // GetTXRXFreq_dHz() = (7074000 - 100 - 12000) * 100 = 706190000 - // GetCWTXFreq_dHz() = 706190000 - 75000 = 706115000 (LSB) + // GetTXRXFreq_cHz() = (7074000 - 100 - 12000) * 100 = 706190000 + // GetCWTXFreq_cHz() = 706190000 - 75000 = 706115000 (LSB) EXPECT_EQ(si5351.clk_freq[SI5351_CLK2], 706115000); } @@ -684,8 +684,8 @@ TEST(RFHardwareState, SingleVFO_TuneStateMachine_CWTransmitSpace) { UpdateTuneState(); // In single VFO mode, CW uses CLK2 instead of CLK6 - // GetTXRXFreq_dHz() = (14074000 - 100 - 12000) * 100 = 1406190000 - // GetCWTXFreq_dHz() = 1406190000 + 75000 = 1406265000 (USB) + // GetTXRXFreq_cHz() = (14074000 - 100 - 12000) * 100 = 1406190000 + // GetCWTXFreq_cHz() = 1406190000 + 75000 = 1406265000 (USB) EXPECT_EQ(si5351.clk_freq[SI5351_CLK2], 1406265000); } @@ -703,8 +703,8 @@ TEST(RFHardwareState, SingleVFO_TuneStateMachine_CWTransmitDitMark) { UpdateTuneState(); // In single VFO mode, CW uses CLK2 instead of CLK6 - // GetTXRXFreq_dHz() = (7074000 - 100 - 12000) * 100 = 706190000 - // GetCWTXFreq_dHz() = 706190000 - 65650 = 706124350 (LSB) + // GetTXRXFreq_cHz() = (7074000 - 100 - 12000) * 100 = 706190000 + // GetCWTXFreq_cHz() = 706190000 - 65650 = 706124350 (LSB) EXPECT_EQ(si5351.clk_freq[SI5351_CLK2], 706124350); } @@ -722,8 +722,8 @@ TEST(RFHardwareState, SingleVFO_TuneStateMachine_CWTransmitDahMark) { UpdateTuneState(); // In single VFO mode, CW uses CLK2 instead of CLK6 - // GetTXRXFreq_dHz() = (14074000 - 200 - 12000) * 100 = 1406180000 - // GetCWTXFreq_dHz() = 1406180000 + 56250 = 1406236250 (USB) + // GetTXRXFreq_cHz() = (14074000 - 200 - 12000) * 100 = 1406180000 + // GetCWTXFreq_cHz() = 1406180000 + 56250 = 1406236250 (USB) EXPECT_EQ(si5351.clk_freq[SI5351_CLK2], 1406236250); } @@ -741,8 +741,8 @@ TEST(RFHardwareState, SingleVFO_TuneStateMachine_CWTransmitKeyerSpace) { UpdateTuneState(); // In single VFO mode, CW uses CLK2 instead of CLK6 - // GetTXRXFreq_dHz() = (3574000 - 50 - 12000) * 100 = 356195000 - // GetCWTXFreq_dHz() = 356195000 - 40000 = 356155000 (LSB) + // GetTXRXFreq_cHz() = (3574000 - 50 - 12000) * 100 = 356195000 + // GetCWTXFreq_cHz() = 356195000 - 40000 = 356155000 (LSB) EXPECT_EQ(si5351.clk_freq[SI5351_CLK2], 356155000); } @@ -760,8 +760,8 @@ TEST(RFHardwareState, SingleVFO_TuneStateMachine_CWTransmitKeyerWait) { UpdateTuneState(); // In single VFO mode, CW uses CLK2 instead of CLK6 - // GetTXRXFreq_dHz() = (21074000 - (-50) - 12000) * 100 = 2106205000 - // GetCWTXFreq_dHz() = 2106205000 + 84375 = 2106289375 (USB) + // GetTXRXFreq_cHz() = (21074000 - (-50) - 12000) * 100 = 2106205000 + // GetCWTXFreq_cHz() = 2106205000 + 84375 = 2106289375 (USB) EXPECT_EQ(si5351.clk_freq[SI5351_CLK2], 2106289375); } @@ -781,7 +781,7 @@ TEST(RFHardwareState, SingleVFO_StateTransitionSequenceSSBToReceive) { // Transition to SSB transmit - in single VFO mode, RX VFO is used for TX modeSM.state_id = ModeSm_StateId_SSB_TRANSMIT; UpdateTuneState(); - // GetTXRXFreq_dHz() = (14230000 - 100 - 12000) * 100 = 1421790000 + // GetTXRXFreq_cHz() = (14230000 - 100 - 12000) * 100 = 1421790000 // In single VFO mode, GetTXVFOFrequency returns RX VFO frequency EXPECT_EQ(GetRXVFOFrequency(), 14217900); @@ -810,8 +810,8 @@ TEST(RFHardwareState, SingleVFO_StateTransitionSequenceCWReceiveToTransmit) { // Transition to CW transmit mark - uses CLK2 in single VFO mode modeSM.state_id = ModeSm_StateId_CW_TRANSMIT_MARK; UpdateTuneState(); - // GetTXRXFreq_dHz() = (7030000 - 200 - 12000) * 100 = 701780000 - // GetCWTXFreq_dHz() = 701780000 - 75000 = 701705000 (LSB) + // GetTXRXFreq_cHz() = (7030000 - 200 - 12000) * 100 = 701780000 + // GetCWTXFreq_cHz() = 701780000 - 75000 = 701705000 (LSB) EXPECT_EQ(si5351.clk_freq[SI5351_CLK2], 701705000); // Transition to CW transmit space @@ -837,20 +837,20 @@ TEST(RFHardwareState, SingleVFO_DifferentSampleRates) { SampleRate = SAMPLE_RATE_192K; modeSM.state_id = ModeSm_StateId_SSB_TRANSMIT; UpdateTuneState(); - // GetTXRXFreq_dHz() = (14074000 - 100 - 192000/4) * 100 = (14073900 - 48000) * 100 = 1402590000 + // GetTXRXFreq_cHz() = (14074000 - 100 - 192000/4) * 100 = (14073900 - 48000) * 100 = 1402590000 // In single VFO mode, this is on RX VFO EXPECT_EQ(GetRXVFOFrequency(), 14025900); // Test with 96kHz sample rate SampleRate = SAMPLE_RATE_96K; UpdateTuneState(); - // GetTXRXFreq_dHz() = (14074000 - 100 - 96000/4) * 100 = (14073900 - 24000) * 100 = 1404990000 + // GetTXRXFreq_cHz() = (14074000 - 100 - 96000/4) * 100 = (14073900 - 24000) * 100 = 1404990000 EXPECT_EQ(GetRXVFOFrequency(), 14049900); // Test with 48kHz sample rate SampleRate = SAMPLE_RATE_48K; UpdateTuneState(); - // GetTXRXFreq_dHz() = (14074000 - 100 - 48000/4) * 100 = (14073900 - 12000) * 100 = 1406190000 + // GetTXRXFreq_cHz() = (14074000 - 100 - 48000/4) * 100 = (14073900 - 12000) * 100 = 1406190000 EXPECT_EQ(GetRXVFOFrequency(), 14061900); } diff --git a/code/test/Radio_test.cpp b/code/test/Radio_test.cpp index 990ad13..abe1b7c 100644 --- a/code/test/Radio_test.cpp +++ b/code/test/Radio_test.cpp @@ -197,7 +197,7 @@ void print_frequency_state(void){ line += String(ED.fineTuneFreq_Hz[ED.activeVFO]); while (line.length() < 32) line += " "; line += " | "; - line += String(GetTXRXFreq_dHz()/100); + line += String(GetTXRXFreq_cHz()/100); while (line.length() < 49) line += " "; line += " | "; line += String(GetRXVFOFrequency()); @@ -282,7 +282,7 @@ TEST(Radio, RadioStateRunThrough) { Debug("Before fine tune change:");print_frequency_state(); SetInterrupt(iFINETUNE_INCREASE); loop(); MyDelay(10); - int64_t oldrxtx = GetTXRXFreq_dHz(); + int64_t oldrxtx = GetTXRXFreq_cHz(); Debug("After fine tune change:");print_frequency_state(); // Change the zoom level @@ -304,7 +304,7 @@ TEST(Radio, RadioStateRunThrough) { MyDelay(10); } CheckThatStateIsSSBTransmit(); - EXPECT_EQ(oldrxtx, GetTXRXFreq_dHz()); + EXPECT_EQ(oldrxtx, GetTXRXFreq_cHz()); EXPECT_EQ(oldrxtx, GetTXVFOFrequency()*100); Debug("In TX mode:");print_frequency_state(); @@ -314,7 +314,7 @@ TEST(Radio, RadioStateRunThrough) { loop(); MyDelay(10); CheckThatStateIsSSBTransmit(); EXPECT_EQ(ED.centerFreq_Hz[ED.activeVFO], oldfreq+ED.freqIncrement); - EXPECT_EQ(oldrxtx+100*ED.freqIncrement, GetTXRXFreq_dHz()); + EXPECT_EQ(oldrxtx+100*ED.freqIncrement, GetTXRXFreq_cHz()); int64_t txcentfreq = ED.centerFreq_Hz[ED.activeVFO]; Debug("After center change:");print_frequency_state(); @@ -323,7 +323,7 @@ TEST(Radio, RadioStateRunThrough) { loop(); MyDelay(10); EXPECT_EQ(modeSM.state_id, ModeSm_StateId_SSB_RECEIVE); CheckThatStateIsReceive(); - EXPECT_EQ(oldrxtx+100*ED.freqIncrement, GetTXRXFreq_dHz()); // rxtx should stay the same + EXPECT_EQ(oldrxtx+100*ED.freqIncrement, GetTXRXFreq_cHz()); // rxtx should stay the same Debug("Back to SSB receive mode:");print_frequency_state(); // Switch to CW receive mode @@ -332,7 +332,7 @@ TEST(Radio, RadioStateRunThrough) { loop(); MyDelay(10); EXPECT_EQ(modeSM.state_id, ModeSm_StateId_CW_RECEIVE); CheckThatStateIsReceive(); - EXPECT_EQ(oldrxtx+100*ED.freqIncrement, GetTXRXFreq_dHz()); // rxtx should stay the same + EXPECT_EQ(oldrxtx+100*ED.freqIncrement, GetTXRXFreq_cHz()); // rxtx should stay the same Debug("Change to CW receive mode:");print_frequency_state(); // Press the key to start transmitting @@ -342,7 +342,7 @@ TEST(Radio, RadioStateRunThrough) { EXPECT_EQ(modeSM.state_id, ModeSm_StateId_CW_TRANSMIT_MARK); CheckThatStateIsCWTransmitMark(); Debug("Change to CW transmit mark mode:");print_frequency_state(); - EXPECT_EQ(GetCWVFOFrequency()*100, GetCWTXFreq_dHz()); + EXPECT_EQ(GetCWVFOFrequency()*100, GetCWTXFreq_cHz()); for (size_t i = 0; i < 50; i++){ loop(); MyDelay(10); From e568d917387f3de5774766c82f3e30051d0dda66 Mon Sep 17 00:00:00 2001 From: Oliver King Date: Mon, 8 Jun 2026 06:50:00 -0400 Subject: [PATCH 02/25] Speed up encoder handling and fix spectrum tuning artifacts Improve the maximum rate at which the front-panel encoders can be turned without losing counts, and fix the display artifacts that the faster event rate exposed. Encoder servicing: - Raise the front-panel I2C bus (Wire1) from the 100 kHz default to 400 kHz. The two front-panel MCP23017s are the only devices on this bus, so every encoder/button register read is ~4x faster. - Drain the MCP23017s from a 1 ms IntervalTimer instead of polling once per main loop, decoupling encoder servicing from the display/DSP cadence so fast edges are no longer collapsed between polls. The MCP INT lines now drive flag-setting ISRs (no I2C in the ISR); the timer does the deferred I2C drain. - Run the front-panel drain below the audio update ISR (priority 208). All IntervalTimers share IRQ_PIT at the highest requested priority, so timer1ms is also lowered to 240; both now yield to audio, keeping encoder I2C bursts from delaying audio servicing. Display: - Defer the spectrum static-overlay refresh (frequency labels + tuning bar) until a chunked sweep is at a frame boundary (x1 == 0). DrawBandWidthIndicatorBar()'s fillRect clears the L2 back-buffer; with the frequency now changing every loop during a fast spin it was firing mid-sweep, wiping already-drawn chunks (blank spectrum regions) and publishing a stale/duplicated tuning bar. Also bump version to Phx V1.3.1 and add setClock()/IntervalTimer::priority() to the host test mocks. Co-Authored-By: Claude Opus 4.8 --- code/src/PhoenixSketch/FrontPanel.cpp | 64 ++++++++++++++++++- code/src/PhoenixSketch/Globals.cpp | 7 +- code/src/PhoenixSketch/Loop.cpp | 3 +- .../PhoenixSketch/MainBoard_DisplayHome.cpp | 13 ++++ code/src/PhoenixSketch/SDT.h | 2 +- code/test/Arduino.h | 2 + code/test/Wire.h | 1 + 7 files changed, 88 insertions(+), 4 deletions(-) diff --git a/code/src/PhoenixSketch/FrontPanel.cpp b/code/src/PhoenixSketch/FrontPanel.cpp index b4d7a2c..b5b3dc1 100644 --- a/code/src/PhoenixSketch/FrontPanel.cpp +++ b/code/src/PhoenixSketch/FrontPanel.cpp @@ -37,6 +37,12 @@ static volatile bool interrupted1 = false; static Adafruit_MCP23X17 mcp2; static volatile bool interrupted2 = false; +// Drains the front-panel MCP23017s on a fixed 1 ms tick, decoupled from the main +// loop's display/DSP cadence. Runs at NVIC priority 240 (see InitializeFrontPanel), +// i.e. BELOW the OpenAudio update ISR (priority 208), so encoder/button I2C work +// can never delay audio servicing. +static IntervalTimer fpServiceTimer; + static int32_t button_press_ms; static int32_t ButtonPressed = -1; @@ -223,6 +229,45 @@ static void interrupt2() { mcp2.clearInterrupts(); } +/** + * Hardware ISR for the MCP23017 #1 INT line (pin 14, open-drain active-LOW). + * Deliberately minimal: it only records that an interrupt is pending. The actual + * I2C servicing happens later in ServiceFrontPanel() at a lower priority, so we + * never perform a blocking I2C transfer inside a high-priority GPIO ISR. + */ +FASTRUN +static void fpInterrupt1ISR(void) { + interrupted1 = true; +} + +/** + * Hardware ISR for the MCP23017 #2 INT line (pin 15, open-drain active-LOW). + * See fpInterrupt1ISR() - flag only, no I2C here. + */ +FASTRUN +static void fpInterrupt2ISR(void) { + interrupted2 = true; +} + +/** + * Timer-driven front-panel service routine (1 ms tick, NVIC priority 240). + * Performs the deferred I2C drain for whichever MCP23017 has signalled. The pin + * level is checked as well as the flag: the MCP INT line stays asserted (LOW) + * until its GPIO is read, so testing the level recovers any edge the ISR could + * have missed while the line was already low. + */ +FASTRUN +static void ServiceFrontPanel(void) { + if (interrupted1 || digitalRead(INT_PIN_1) == 0) { + interrupted1 = false; + interrupt1(); + } + if (interrupted2 || digitalRead(INT_PIN_2) == 0) { + interrupted2 = false; + interrupt2(); + } +} + /** * Initialize the front panel hardware. * Configures two MCP23017 I2C GPIO expanders for: @@ -249,6 +294,11 @@ void InitializeFrontPanel(void) { if(failed) return; + // The front-panel MCP23017s are the only devices on Wire1, so raise the bus + // clock from the 100 kHz default to 400 kHz (Fast-mode). This shortens every + // encoder/button register read, letting fast encoder edges be drained quicker. + Wire1.setClock(400000); + // setup the mcp23017 devices mcp1.setupInterrupts(true, true, LOW); mcp2.setupInterrupts(true, true, LOW); @@ -279,7 +329,19 @@ void InitializeFrontPanel(void) { // Configure pins to check for button press interrupts pinMode(INT_PIN_1, INPUT_PULLUP); - pinMode(INT_PIN_2, INPUT_PULLUP); + pinMode(INT_PIN_2, INPUT_PULLUP); + + // Flag-setting ISRs on the MCP INT lines so an encoder edge is noticed + // immediately, instead of waiting for the next main-loop poll. + attachInterrupt(digitalPinToInterrupt(INT_PIN_1), fpInterrupt1ISR, FALLING); + attachInterrupt(digitalPinToInterrupt(INT_PIN_2), fpInterrupt2ISR, FALLING); + + // Drain the front panel every 1 ms at a priority below the audio update ISR. + // NOTE: all IntervalTimers share IRQ_PIT, whose priority is forced to the + // highest (lowest-numbered) requester, so timer1ms is also lowered to 240 in + // setup() (Globals.cpp) - otherwise this drain would run at 128, above audio. + fpServiceTimer.begin(ServiceFrontPanel, 1000); // microseconds -> 1 ms + fpServiceTimer.priority(240); } /** diff --git a/code/src/PhoenixSketch/Globals.cpp b/code/src/PhoenixSketch/Globals.cpp index 0e425b7..a913c5a 100644 --- a/code/src/PhoenixSketch/Globals.cpp +++ b/code/src/PhoenixSketch/Globals.cpp @@ -556,6 +556,11 @@ void setup(void){ SetupCWKeyInterrupts(); timer1ms.begin(tick1ms, 1000); // run tick1ms every 1ms - + // Run the 1 ms state-machine tick below the audio update ISR (priority 208). + // All IntervalTimers share IRQ_PIT at the highest requested priority, so this + // also governs the front-panel service timer (FrontPanel.cpp); keeping both at + // 240 ensures neither can delay audio servicing. + timer1ms.priority(240); + Serial.println("...Setup done!"); } diff --git a/code/src/PhoenixSketch/Loop.cpp b/code/src/PhoenixSketch/Loop.cpp index 207eead..ddeddec 100644 --- a/code/src/PhoenixSketch/Loop.cpp +++ b/code/src/PhoenixSketch/Loop.cpp @@ -1501,7 +1501,8 @@ FASTRUN void loop(void){ // Step 1: Check for new events and handle them ProcessKey1Debounce(); ProcessPTTDebounce(); - CheckForFrontPanelInterrupts(); + // Front-panel encoders/buttons are now drained by fpServiceTimer (1 ms, below + // audio priority) instead of being polled here once per loop iteration. CheckForCATSerialEvents(); CheckForSerialTimeSync(); ConsumeInterrupt(); diff --git a/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp b/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp index 86046cf..cf6fbdf 100644 --- a/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp +++ b/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp @@ -804,6 +804,19 @@ void DrawSpectrumPane(void) { tft.writeTo(L1); return; } + + // The static spectrum overlay (frequency labels + bandwidth/tuning bar) is + // redrawn on the L2 back-buffer, and DrawBandWidthIndicatorBar()'s opening + // fillRect clears the entire L2 spectrum body. If that runs mid-sweep it wipes + // the chunks ShowSpectrum() has already drawn for the current frame, leaving + // large blank regions (and a stale/duplicated tuning bar) when tuning rapidly. + // x1 != 0 means a chunked sweep is in progress, so defer the refresh - leaving + // PaneSpectrum.stale set - until the sweep is at a frame boundary (x1 == 0). + if (x1 != 0) { + tft.writeTo(L1); + return; + } + oz = ED.spectrum_zoom; ocf = ED.centerFreq_Hz[ED.activeVFO]; oft = ED.fineTuneFreq_Hz[ED.activeVFO]; diff --git a/code/src/PhoenixSketch/SDT.h b/code/src/PhoenixSketch/SDT.h index 827f554..ff50140 100644 --- a/code/src/PhoenixSketch/SDT.h +++ b/code/src/PhoenixSketch/SDT.h @@ -23,7 +23,7 @@ If not, see . #include "Config.h" #define RIGNAME "T41-EP SDT" -#define VERSION "Phx V1.3" +#define VERSION "Phx V1.3.1" #include "BuildInfo.h" diff --git a/code/test/Arduino.h b/code/test/Arduino.h index 3769cf8..c29ea94 100644 --- a/code/test/Arduino.h +++ b/code/test/Arduino.h @@ -92,6 +92,8 @@ class IntervalTimer { _interval_us = 0; } + void priority(uint8_t n) { (void)n; } + private: voidFuncPtr _callback; uint32_t _interval_us; diff --git a/code/test/Wire.h b/code/test/Wire.h index ee79deb..e4dd288 100644 --- a/code/test/Wire.h +++ b/code/test/Wire.h @@ -12,6 +12,7 @@ class TwoWire { ~TwoWire() {} void begin() {} + void setClock(uint32_t clock) {} void beginTransmission(uint8_t address) {} size_t write(uint8_t data) { return 1; } uint8_t endTransmission(void) { return 0; } From 99e4e19514a074fd633c24bbd97b842060737c02 Mon Sep 17 00:00:00 2001 From: Oliver King Date: Tue, 16 Jun 2026 07:07:46 -0400 Subject: [PATCH 03/25] Add LLM-maintained Phoenix wiki Introduce the wiki/ knowledge base (firmware / theory / hardware / roadmap) with its maintenance schema, index, and append-only log, plus the ingested T41-EP KiCad schematics under raw/. Includes this session's work: - rf-board: pre-V12.8 single-Si5351 shared-quadrature VFO history; dHz->cHz unit correction; attenuator GPIO = atten_dB x 2 fix. - Split board *electronics* out of the firmware module pages into hardware/rf-board-electronics and hardware/filter-board-electronics; the firmware pages now describe the code/API and link across. - Lint pass (no broken links/orphans/dup basenames); flagged + noted the _dHz->_cHz rename not yet present on this branch. - Ignore Obsidian per-vault editor state (.obsidian/). Co-Authored-By: Claude Opus 4.8 --- code/src/PhoenixSketch/BuildInfo.h | 4 +- wiki/.gitignore | 2 + wiki/CLAUDE.md | 139 + wiki/firmware/.gitkeep | 1 + wiki/firmware/audio-io.md | 111 + wiki/firmware/built-in-test.md | 53 + wiki/firmware/calibration-state-machines.md | 83 + wiki/firmware/cat-control.md | 85 + wiki/firmware/code-heritage.md | 65 + wiki/firmware/cw-processing.md | 101 + wiki/firmware/display-subsystem.md | 91 + wiki/firmware/dsp-chain.md | 55 + wiki/firmware/filter-boards.md | 139 + wiki/firmware/front-panel.md | 91 + wiki/firmware/hardware-state-machine.md | 108 + wiki/firmware/main-loop.md | 71 + wiki/firmware/mode-state-machine.md | 132 + wiki/firmware/overview.md | 129 + wiki/firmware/persistent-config.md | 86 + wiki/firmware/real-time-constraints.md | 38 + wiki/firmware/rf-board.md | 119 + wiki/firmware/spectrum-refresh-floor.md | 66 + wiki/firmware/state-machine-architecture.md | 51 + wiki/firmware/tune-frequency-control.md | 116 + wiki/firmware/ui-state-machine.md | 102 + wiki/hardware/filter-board-electronics.md | 83 + wiki/hardware/hardware-platform.md | 162 + wiki/hardware/i2c-bus-map.md | 61 + wiki/hardware/rf-board-electronics.md | 87 + wiki/index.md | 98 + wiki/llm-wiki.md | 75 + wiki/log.md | 668 + wiki/raw/.gitkeep | 1 + wiki/raw/DualClockLO.kicad_sch | 7407 +++ .../K9HZ_100W_11band_LPF-Control.kicad_sch | 38380 +++++++++++++++ .../raw/K9HZ_100W_11band_LPF-Filter.kicad_sch | 12182 +++++ ...F-board-Attenuator-daughterboard.kicad_sch | 3776 ++ wiki/raw/T41-RF-board-V012.kicad_sch | 40577 ++++++++++++++++ wiki/raw/T41-exciter-filter-board.kicad_sch | 39127 +++++++++++++++ wiki/raw/T41-main-board-V012.kicad_sch | 29581 +++++++++++ wiki/raw/log.md | 11 + wiki/roadmap/.gitkeep | 1 + wiki/roadmap/development-backlog.md | 41 + wiki/roadmap/documentation-todos.md | 213 + wiki/roadmap/manual-notch.md | 60 + wiki/roadmap/openaudio-library.md | 48 + wiki/roadmap/transmit-spectrum.md | 58 + wiki/roadmap/usb-audio.md | 48 + wiki/sources/.gitkeep | 1 + wiki/sources/t41-ep-schematics.md | 134 + wiki/theory/.gitkeep | 1 + wiki/theory/agc-design.md | 130 + wiki/theory/audio-equalizer.md | 64 + wiki/theory/fast-convolution-filtering.md | 72 + wiki/theory/iq-imbalance-correction.md | 136 + wiki/theory/iq-quadrature-sampling.md | 69 + wiki/theory/multirate-decimation.md | 119 + wiki/theory/noise-reduction.md | 122 + wiki/theory/ssb-phasing-method.md | 89 + wiki/theory/synchronous-am-detection.md | 72 + wiki/theory/theory-overview.md | 71 + wiki/theory/tx-carrier-null.md | 58 + wiki/theory/zoom-fft.md | 90 + 63 files changed, 176009 insertions(+), 2 deletions(-) create mode 100644 wiki/.gitignore create mode 100644 wiki/CLAUDE.md create mode 100644 wiki/firmware/.gitkeep create mode 100644 wiki/firmware/audio-io.md create mode 100644 wiki/firmware/built-in-test.md create mode 100644 wiki/firmware/calibration-state-machines.md create mode 100644 wiki/firmware/cat-control.md create mode 100644 wiki/firmware/code-heritage.md create mode 100644 wiki/firmware/cw-processing.md create mode 100644 wiki/firmware/display-subsystem.md create mode 100644 wiki/firmware/dsp-chain.md create mode 100644 wiki/firmware/filter-boards.md create mode 100644 wiki/firmware/front-panel.md create mode 100644 wiki/firmware/hardware-state-machine.md create mode 100644 wiki/firmware/main-loop.md create mode 100644 wiki/firmware/mode-state-machine.md create mode 100644 wiki/firmware/overview.md create mode 100644 wiki/firmware/persistent-config.md create mode 100644 wiki/firmware/real-time-constraints.md create mode 100644 wiki/firmware/rf-board.md create mode 100644 wiki/firmware/spectrum-refresh-floor.md create mode 100644 wiki/firmware/state-machine-architecture.md create mode 100644 wiki/firmware/tune-frequency-control.md create mode 100644 wiki/firmware/ui-state-machine.md create mode 100644 wiki/hardware/filter-board-electronics.md create mode 100644 wiki/hardware/hardware-platform.md create mode 100644 wiki/hardware/i2c-bus-map.md create mode 100644 wiki/hardware/rf-board-electronics.md create mode 100644 wiki/index.md create mode 100644 wiki/llm-wiki.md create mode 100644 wiki/log.md create mode 100644 wiki/raw/.gitkeep create mode 100644 wiki/raw/DualClockLO.kicad_sch create mode 100644 wiki/raw/K9HZ_100W_11band_LPF-Control.kicad_sch create mode 100644 wiki/raw/K9HZ_100W_11band_LPF-Filter.kicad_sch create mode 100644 wiki/raw/T41-RF-board-Attenuator-daughterboard.kicad_sch create mode 100644 wiki/raw/T41-RF-board-V012.kicad_sch create mode 100644 wiki/raw/T41-exciter-filter-board.kicad_sch create mode 100644 wiki/raw/T41-main-board-V012.kicad_sch create mode 100644 wiki/raw/log.md create mode 100644 wiki/roadmap/.gitkeep create mode 100644 wiki/roadmap/development-backlog.md create mode 100644 wiki/roadmap/documentation-todos.md create mode 100644 wiki/roadmap/manual-notch.md create mode 100644 wiki/roadmap/openaudio-library.md create mode 100644 wiki/roadmap/transmit-spectrum.md create mode 100644 wiki/roadmap/usb-audio.md create mode 100644 wiki/sources/.gitkeep create mode 100644 wiki/sources/t41-ep-schematics.md create mode 100644 wiki/theory/.gitkeep create mode 100644 wiki/theory/agc-design.md create mode 100644 wiki/theory/audio-equalizer.md create mode 100644 wiki/theory/fast-convolution-filtering.md create mode 100644 wiki/theory/iq-imbalance-correction.md create mode 100644 wiki/theory/iq-quadrature-sampling.md create mode 100644 wiki/theory/multirate-decimation.md create mode 100644 wiki/theory/noise-reduction.md create mode 100644 wiki/theory/ssb-phasing-method.md create mode 100644 wiki/theory/synchronous-am-detection.md create mode 100644 wiki/theory/theory-overview.md create mode 100644 wiki/theory/tx-carrier-null.md create mode 100644 wiki/theory/zoom-fft.md diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index 93009f0..96680d9 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -9,7 +9,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "4367075" -#define BUILD_TIMESTAMP "2026-06-06 11:14:53" +#define GIT_COMMIT_HASH "7026228" +#define BUILD_TIMESTAMP "2026-06-16 07:11:17" #endif // BUILDINFO_H diff --git a/wiki/.gitignore b/wiki/.gitignore new file mode 100644 index 0000000..7c6f5b0 --- /dev/null +++ b/wiki/.gitignore @@ -0,0 +1,2 @@ +# Obsidian per-vault editor state (UI layout, plugin config) — not wiki content +.obsidian/ diff --git a/wiki/CLAUDE.md b/wiki/CLAUDE.md new file mode 100644 index 0000000..8502787 --- /dev/null +++ b/wiki/CLAUDE.md @@ -0,0 +1,139 @@ +# Phoenix Wiki — Maintenance Schema + +This directory is an **LLM-maintained knowledge wiki** for the Phoenix SDR firmware +(T41-EP transceiver). It follows the "LLM Wiki" pattern: a persistent, interlinked +set of markdown pages that the LLM builds and keeps current as sources are ingested +and questions are asked. See `llm-wiki.md` for the originating idea. + +**Roles.** The human curates sources, directs analysis, and asks questions. The LLM +owns this `wiki/` directory entirely — it writes and maintains every page here, the +index, and the log. The human rarely edits wiki pages by hand. + +**Scope.** Four subject areas: +1. **firmware/** — the Phoenix codebase: modules, architecture, state machines, DSP + chains, design decisions, and the multi-author code heritage. +2. **theory/** — domain knowledge independent of any code version: DSP/SDR concepts, + the Al Peter & Jack Purdum book, calibration theory, signal-processing "why". +3. **hardware/** — the physical T41-EP platform the firmware drives: the Teensy 4.1, the + board stack, the audio codecs/converters, the I²C bus topology, chips, connectors, power, + and board revisions. This is the *electronics* the code talks to — distinct from the + firmware/ module pages, which describe the *code* that drives it. +4. **roadmap/** — plans for future development: proposals, design sketches, open + questions, things to try. + +This wiki is both a **reference** and a **planning surface**. + +--- + +## Directory layout + +``` +wiki/ + CLAUDE.md # this file — the maintenance contract + index.md # content catalog: every page, one-line summary, grouped by category + log.md # append-only chronological record of ingests/queries/lints/decisions + raw/ # immutable source documents — read from, NEVER modify + sources/ # one summary page per ingested source + firmware/ # entity/concept pages about the code + theory/ # DSP/SDR/domain concept pages + hardware/ # physical-platform pages: boards, chips, buses, connectors, power + roadmap/ # future-development plans and proposals +``` + +--- + +## Page conventions + +**Filenames.** `kebab-case.md`, descriptive, no dates in the name (dates live in +frontmatter). One concept/entity per page. + +**Frontmatter.** Every page starts with YAML: + +```yaml +--- +title: Human Readable Title +type: source | module | concept | hardware | decision | roadmap | overview | index +status: stub | draft | stable | superseded +created: YYYY-MM-DD +updated: YYYY-MM-DD +tags: [dsp, ssb, calibration] +source_refs: [sources/some-source] # which ingested sources back this page +related: ["[[other-page]]"] # cross-links (also link inline in the body) +--- +``` + +`type` values: +- `source` — a summary of one raw source (lives in `sources/`) +- `module` — a firmware module/subsystem (lives in `firmware/`) +- `concept` — a theory/domain idea (lives in `theory/`) +- `hardware` — a physical board/chip/bus/platform page (lives in `hardware/`) +- `decision` — a recorded design decision / rationale (firmware/ or roadmap/) +- `roadmap` — a future-development plan (lives in `roadmap/`) +- `overview` / `index` — top-level navigation pages + +**Cross-references.** Link liberally with Obsidian-style wikilinks: `[[page-name]]` +(basename, no extension). A link to a page that doesn't exist yet is fine — it marks +a page worth writing. When you write a new page, add inbound links from related pages +so nothing is orphaned. + +**Contradictions.** When a new source contradicts an existing claim, do not silently +overwrite. Note both, cite the sources, and flag which is more recent/authoritative. +Mark superseded claims with `status: superseded` and link to what replaced them. + +--- + +## Operations + +### Ingest +When the human drops a source into `raw/` and asks to process it: +1. Read the source. Discuss key takeaways with the human before writing. +2. Write a summary page in `sources/` (`type: source`) capturing the essentials and + citing the raw file. +3. Update or create relevant pages in `firmware/`, `theory/`, `roadmap/` — integrate + the new knowledge, don't just append. A single source may touch 5–15 pages. +4. Add/refresh cross-references across affected pages. +5. Update `index.md`. +6. Append a `log.md` entry: `## [YYYY-MM-DD] ingest | `. + +### Query +When the human asks a question: +1. Read `index.md` first to locate relevant pages, then drill in. +2. Synthesize an answer with citations to wiki pages (and underlying sources). +3. **Offer to file good answers back into the wiki** — a comparison, analysis, or + newly-discovered connection is a candidate for a new page so explorations compound. +4. If a page was created/updated, append a `log.md` entry. + +### Lint +When asked to health-check the wiki, look for: +- Contradictions between pages; stale claims newer sources superseded. +- Orphan pages (no inbound links); important concepts mentioned but lacking a page. +- Missing cross-references; data gaps fillable by a source or web search. +- Suggest new questions to investigate and new sources to find. +Append a `log.md` entry: `## [YYYY-MM-DD] lint | `. + +--- + +## index.md and log.md + +**index.md** is content-oriented — a catalog of every page with a link and one-line +summary, grouped by category (firmware / theory / roadmap / sources). Updated on +every ingest and whenever pages are created/renamed. + +**log.md** is chronological and append-only. Each entry starts with a consistent +prefix so it's greppable: + +``` +## [YYYY-MM-DD] | +``` + +where `` ∈ `ingest | query | lint | decision`. Quick history: +`grep "^## \[" log.md | tail -5`. + +--- + +## House rules +- Never modify anything in `raw/`. It is the source of truth. +- Prefer integrating knowledge into existing pages over creating near-duplicates. +- Keep pages focused; split when a page tries to cover two distinct things. +- Cite sources on factual claims so the human can trace provenance. +- This schema co-evolves — when a convention proves awkward, propose updating this file. diff --git a/wiki/firmware/.gitkeep b/wiki/firmware/.gitkeep new file mode 100644 index 0000000..926e96c --- /dev/null +++ b/wiki/firmware/.gitkeep @@ -0,0 +1 @@ +# Firmware pages: modules, architecture, state machines, DSP, design decisions, heritage. diff --git a/wiki/firmware/audio-io.md b/wiki/firmware/audio-io.md new file mode 100644 index 0000000..0fe45c5 --- /dev/null +++ b/wiki/firmware/audio-io.md @@ -0,0 +1,111 @@ +--- +title: Audio I/O (MainBoard_AudioIO — OpenAudio quad-I2S graph) +type: module +status: draft +created: 2026-06-15 +updated: 2026-06-15 +tags: [audio, i2s, openaudio, codec, queues, mixers, sidetone, mode-routing] +source_refs: [sources/t41-ep-schematics] +related: ["[[overview]]", "[[hardware-platform]]", "[[dsp-chain]]", "[[mode-state-machine]]", "[[main-loop]]", "[[cw-processing]]", "[[real-time-constraints]]", "[[iq-imbalance-correction]]"] +--- + +# Audio I/O (MainBoard_AudioIO) + +**Files:** `MainBoard_AudioIO.cpp` / `.h`. This module is the **bridge between the physical +audio converters and the DSP chain**: it owns the OpenAudio (chipaudette's float-capable fork +of the Teensy Audio library) graph, routes the four audio streams by radio mode, and exposes +the converted samples to [[dsp-chain]] through ring-buffer queues. The *hardware* behind it +(the SGTL5000, PCM1808, PCM5102 and the I²S pin routing) is documented in [[hardware-platform]]; +this page is the *software* graph that drives it. + +## Four streams over quad I²S + +Audio is a **4-channel I²S in / 4-channel I²S out** interface (`AudioInputI2SQuad i2s_quadIn`, +`AudioOutputI2SQuad i2s_quadOut`, `MainBoard_AudioIO.cpp:121,140`). The channel map +(`:78-115`): + +| | ch 0 / 1 | ch 2 / 3 | +|---|---|---| +| **`i2s_quadIn`** | mic L/R (SGTL5000 / Audio Board) | **RX I/Q** (PCM1808) | +| **`i2s_quadOut`** | **TX I/Q** → exciter (SGTL5000) | speaker L/R (PCM5102) | + +Throughout the module the **`*_Ex` suffix = the exciter / transmit path** (mic-in and TX-I/Q-out +on the SGTL5000); the un-suffixed names are the **receive path** (RX-I/Q-in and speaker-out). + +## The graph + +``` +i2s_quadIn ─0/1─► modeSelectInEx{L,R} ─► Q_in_{L,R}_Ex (mic / TX-cal in) + ─2/3─► modeSelectIn{L,R} ─► Q_in_{L,R} (RX I/Q in) +transmitIQcal_oscillator ─► modeSelectInEx ch1 (TX I/Q cal tone) + +Q_out_{L,R}_Ex ─► modeSelectOutEx{L,R} ─► i2s_quadOut 0/1 (TX I/Q out) +Q_out_{L,R} ─► modeSelectOut{L,R} ─► i2s_quadOut 2/3 (speaker out) +sidetone_oscillator ─► modeSelectOut ch2 (CW sidetone) +``` +(`patchCord1…22`, `:141-162`.) The building blocks: +- **4 input mixers** + **4 `AudioRecordQueue`** (`Q_in_*`) capture samples for the DSP. +- **4 `AudioPlayQueue`** (`Q_out_*`) + **4 output mixers** play DSP results back out. +- **`sidetone_oscillator`** (CW monitor) and **`transmitIQcal_oscillator`** (calibration tone, + [[iq-imbalance-correction]]). + +### Mixers are routing switches +The `AudioMixer4`s aren't for mixing levels — they're **on/off selectors**: `SelectMixerChannel` +sets the chosen channel to gain 1 and the rest to 0; `MuteMixerChannels` zeroes all +(`:198-220`). Channel assignments: + +| Mixer | ch0 | ch1 | ch2 | +|---|---|---|---| +| `modeSelectIn{L,R}` (RX in) | RX I/Q | — | — | +| `modeSelectInEx{L,R}` (TX in) | microphone | TX-I/Q **cal** oscillator | — | +| `modeSelectOut{L,R}` (speaker) | RX DSP audio | TX-I/Q monitor | **sidetone** | +| `modeSelectOutEx{L,R}` (TX out) | TX I/Q | — | — | + +## Mode-based routing — `UpdateAudioIOState()` (`:280`) + +Called on mode transitions (from the [[hardware-state-machine]] / `UpdateRFHardwareState` +path); it reconfigures the graph on the **current [[mode-state-machine]] state** and +**short-circuits if the state is unchanged** (`previousAudioIOState`, `:281`) to avoid audio +glitches: + +| ModeSm state(s) | Input queues | Routing | +|---|---|---| +| **SSB/CW receive** (+ several CAL states) | RX I/Q on, mic off | in→RX I/Q (ch0); speaker→RX DSP audio (ch0); TX paths muted | +| **SSB_TRANSMIT** | mic + RX I/Q on | in→mic; out→TX I/Q; speaker muted | +| **CALIBRATE_OFFSET/TX_IQ_MARK** | cal-osc + RX I/Q on | in→cal oscillator (ch1); out→TX I/Q; speaker muted | +| **CW_TRANSMIT_\*_MARK** | RX I/Q + mic off | speaker→**sidetone** (ch2) only; all I/Q paths muted | + +Note CW transmit carries **no RF I/Q through the audio path** — the CW carrier is keyed in +hardware (`CWon`/`CWoff`, [[rf-board]]); the audio side only generates the **sidetone** for +operator monitoring ([[cw-processing]]). + +## Hand-off to the DSP chain + +The record/play queues are the **ISR ↔ main-loop boundary**: the I²S interrupt fills/drains +them, and [[dsp-chain]] reads/writes them from the main loop ([[real-time-constraints]]): +- **RX in:** `Q_in_{L,R}.readBuffer()/freeBuffer()` (`DSP.cpp:134-145`); `available()` gates a + full block, `clear()` drops backlog on overrun (`DSP.cpp:164-165`). +- **Mic in:** `Q_in_{L,R}_Ex` (`DSP.cpp:988-1005`). +- **Speaker out:** `Q_out_{L,R}.getBuffer()` (`DSP.cpp:730`); **TX I/Q out:** `Q_out_{L,R}_Ex` + (`DSP.cpp:1061`). + +## Initialization & rate + +`InitializeAudio()` (`:446`): `SetI2SFreq(SR[SampleRate].rate)`, allocate +`AudioMemory(500)` + `AudioMemory_F32(10)`, configure the codecs, and set the sidetone +oscillator amplitude/frequency (`:452-475`). `SetI2SFreq()` (`:488`) reprograms the Teensy I²S +PLL for **48 / 96 / 192 kHz** — Phoenix runs **192 kHz** raw ([[multirate-decimation]]). +`WarmUpAudioIO()` clears the I²S/codec power-on glitch that otherwise corrupts the first PTT. + +## Codec control objects +- **`sgtl5000_teensy`** (`AudioControlSGTL5000_Extended`) — the **real SGTL5000** on the Teensy + Audio Board: `inputSelect(MIC)`, `micGain(ED.currentMicGain)` (`:320`, + `UpdateTransmitAudioGain`), line levels. +- **`pcm5102_mainBoard`** (`AudioControlSGTL5000`) — *named* for the **PCM5102 speaker DAC** but + **mistyped**: the PCM5102 is a control-less I²S part with no I²C, so its `.enable()/ + .inputSelect()` calls are **no-ops**. See the discrepancy note in [[hardware-platform]] — a + code-clarity fix, not a bug. + +## Open questions +- Whether the `transmitIQcal_oscillator` amplitude/frequency are set per-calibration or fixed. +- Exact `AudioMemory` headroom vs. the worst-case quad-stream block backlog. diff --git a/wiki/firmware/built-in-test.md b/wiki/firmware/built-in-test.md new file mode 100644 index 0000000..dae5c4a --- /dev/null +++ b/wiki/firmware/built-in-test.md @@ -0,0 +1,53 @@ +--- +title: Built-In Test (BIT) — I²C hardware presence +type: module +status: draft +created: 2026-06-09 +updated: 2026-06-09 +tags: [bit, self-test, i2c, diagnostics, startup, hardware] +source_refs: [] +related: ["[[overview]]", "[[rf-board]]", "[[filter-boards]]", "[[front-panel]]", "[[ui-state-machine]]", "[[main-loop]]", "[[persistent-config]]", "[[i2c-bus-map]]", "[[hardware-platform]]"] +--- + +# Built-In Test (BIT) — I²C hardware presence + +Phoenix runs a lightweight **built-in self-test** at startup that probes each expected I²C +device and records whether it responded. It's a *presence/connectivity* check — "is each board +actually there and talking?" — surfaced on a diagnostic screen so a missing ribbon cable or +dead board is obvious. + +## What it records — `struct BIT` (`SDT.h:334`) +One global `bit_results` (`Globals.cpp:69`) of booleans, one per I²C subsystem: + +| Field | Device | +|---|---| +| `RF_I2C_present` | RF board MCP23017 ([[rf-board]]) | +| `RF_Si5351_present` | Si5351 VFO clock generator | +| `BPF_I2C_present` | BPF board MCP23017 ([[filter-boards]]) | +| `V12_LPF_I2C_present` | LPF board MCP23017 | +| `V12_LPF_AD7991_present` | LPF board AD7991 power ADC | +| `FRONT_PANEL_I2C_present` | front-panel MCP23017(s) ([[front-panel]]) | +| `AD7991_I2C_ADDR` | detected AD7991 address (uint8) | + +## How it's populated +Not a separate test pass — each board's **`Initialize*` routine sets its flag** as a side +effect of trying to bring up its I²C device, e.g. `BPFBoard.cpp:30/41` set +`BPF_I2C_present` true/false on success/failure, `LPFBoard.cpp:251/734-748` set the LPF MCP and +AD7991 flags, `FrontPanel.cpp:282-292` the front-panel flag. So BIT reflects the result of the +normal hardware bring-up (the same `ENOI2C` failures the init functions return). + +## How it's shown — `DrawBIT()` (`MainBoard_Display.cpp:77`) +The **"I2C Status Report"** screen (the UISm `BIT` state, [[ui-state-machine]], +[[display-subsystem]]) lists each subsystem present/absent, including the detected AD7991 +address. Reached via the `BIT` menu action, which dispatches `iBITDISPLAY` from [[main-loop]] → +`UISm_EventId_BIT` (`Loop.cpp:1354`). + +## Scope / limits +- It's a **connectivity** test (does the device ACK on I²C), not a functional/parametric test — + it doesn't verify the Si5351 actually produces the right frequency or that relays switch. +- Runs once at startup; the screen reflects that snapshot. + +## Open questions +- Is BIT re-runnable on demand, or only the startup snapshot? +- Could it be extended to functional checks (VFO lock, relay readback, power-sensor sanity)? + — a possible roadmap item. diff --git a/wiki/firmware/calibration-state-machines.md b/wiki/firmware/calibration-state-machines.md new file mode 100644 index 0000000..ea48cf8 --- /dev/null +++ b/wiki/firmware/calibration-state-machines.md @@ -0,0 +1,83 @@ +--- +title: Calibration Sub-State-Machines (the 4 generated cal SMs) +type: module +status: draft +created: 2026-06-09 +updated: 2026-06-09 +tags: [state-machine, calibration, statesmith, iq, carrier, power, sweep] +source_refs: [] +related: ["[[overview]]", "[[hardware-state-machine]]", "[[state-machine-architecture]]", "[[iq-imbalance-correction]]", "[[tx-carrier-null]]", "[[tune-frequency-control]]", "[[persistent-config]]"] +--- + +# Calibration Sub-State-Machines (the 4 generated cal SMs) + +The four **StateSmith-generated** calibration machines, each wrapped by a hand-written partial +in [[hardware-state-machine]] and entered from ModeSm's `CALIBRATION_STATES`: + +| SM | File | Optimizes | `ED` output | +|---|---|---|---| +| `ReceiveIQCalSm` | `ReceiveIQCalSm.cpp` | RX sideband separation | `IQAmp/PhaseCorrectionFactor` | +| `TransmitIQCalSm` | `TransmitIQCalSm.cpp` | TX sideband separation | `IQXAmp/XPhaseCorrectionFactor` | +| `TransmitCarrierCalSm` | `TransmitCarrierCalSm.cpp` | carrier suppression (dBc) | `DCOffsetI/Q` | +| `PowerCalSm` | `PowerCalSm.cpp` | PA power curve fit | `PowerCal_*` | + +All persist per-band results to [[persistent-config]] and auto-advance through the bands. The +underlying theory: [[iq-imbalance-correction]] (the two I/Q ones), [[tx-carrier-null]], +[[tune-frequency-control]] (the power tanh model). + +## Three of them are the *same* machine + +`ReceiveIQCalSm`, `TransmitIQCalSm`, and `TransmitCarrierCalSm` have **identical** state and +event sets — they are one "step-a-parameter, measure, keep-the-best" sweep instantiated for +three different metrics/parameters. + +**States:** `STANDBY · BAND_ADJUST · FIND_MINIMUM · ADJUST · WAIT · READ` (+ `ROOT`). +**Events:** `DO · AUTO · AUTO_COMPLETE · FIND_MINIMUM · MIN_EXIT · NEXT_POINT · READ_DELTA`. + +Flow (cross-referenced with the partial code in [[iq-imbalance-correction]]): +``` +STANDBY ──AUTO──▶ BAND_ADJUST // set up the current band's hardware + ▲ │ FIND_MINIMUM + │ AUTO_COMPLETE ▼ + │ FIND_MINIMUM ──▶ ADJUST ──READ_DELTA──▶ WAIT ──(settle)──▶ READ + │ ▲ │ + │ └──────────── NEXT_POINT ────────────────┘ + └──────────────── MIN_EXIT ◀── (band done) ───────────────────────────────── +``` +- **ADJUST** sets the next parameter value (amplitude/phase or DC-offset step). +- **WAIT** lets the signal settle (`acquisitionDuration_ms`, ~60 ms) before measuring. +- **READ** reads the metric (sideband separation / dBc) from the RX PSD and keeps the value if + it beats the running best (`maxSBS`/`maxDBC`). `NEXT_POINT` loops to the next step; when the + multi-pass coarse→medium→fine sweep is exhausted the band's optimum is written to `ED`. +- **BAND_ADJUST** ↔ `MIN_EXIT` advances to the next band; `AUTO_COMPLETE` ends the run. + +This is the narrowing **coordinate-descent sweep** documented in detail (the amp/phase passes) +in [[iq-imbalance-correction]]; the carrier version sweeps `DCOffsetI`/`DCOffsetQ` instead. + +## PowerCalSm is different — curve fitting, not minimum-finding + +Power calibration **records multiple (attenuation, power) data points** and fits the saturating +tanh PA model ([[tune-frequency-control]]), so its states reflect data-point collection rather +than a single-minimum sweep: + +**States:** `POWERPOINT1 · POWERPOINT2 · POWERPOINT3 · SSBPOINT · ACQUISITION · +MEASUREMENTCOMPLETE · READ_AND_ADJUST · POWERCOMPLETE` (+ `ROOT`). +**Events:** `DO · AUTO · RECORD_DATA_POINT · NEXT_POINT · CURVE_COMPLETE · RESET`. + +- The `POWERPOINT1/2/3` (and `SSBPOINT`) states drive the PA to set attenuations and + `RECORD_DATA_POINT` captures the measured output power at each. +- `ACQUISITION` → `MEASUREMENTCOMPLETE` gate the settle/measure. +- `READ_AND_ADJUST` / `POWERCOMPLETE` finish a band; `CURVE_COMPLETE` triggers the + Gauss-Newton tanh fit (`FitPowerCurve` in [[tune-frequency-control]]) yielding the per-band + `Psat`/`k`. + +## Generated-code rule +All four are StateSmith output — edit the `.drawio` and regenerate, never the `.cpp` +([[state-machine-architecture]]). Diagrams: `PowerCalSm.drawio`, `ReceiveIQCalSm.drawio`, +`TransmitCarrierCalSm.drawio`, `TransmitIQCalSm.drawio`. + +## Open questions +- The exact `Vars` each SM carries (acquisition duration, counters) — only partially traced. +- Whether the three identical SMs are generated from one shared diagram or three copies (DRY + opportunity if the latter). +- `PowerCalSm` SSB vs CW point handling (`SSBPOINT` vs the three `POWERPOINT`s). diff --git a/wiki/firmware/cat-control.md b/wiki/firmware/cat-control.md new file mode 100644 index 0000000..84a9dc3 --- /dev/null +++ b/wiki/firmware/cat-control.md @@ -0,0 +1,85 @@ +--- +title: CAT Control (Kenwood emulation) +type: module +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [cat, kenwood, ts-480, ts-2000, serial, rig-control, usb] +source_refs: [] +related: ["[[overview]]", "[[main-loop]]", "[[mode-state-machine]]", "[[tune-frequency-control]]", "[[persistent-config]]"] +--- + +# CAT Control (Kenwood emulation) + +**Files:** `CAT.cpp` (~28 KB), `CAT.h`. Computer-Aided Transceiver control so standard +logging/contest/digital software (WSJT-X, fldigi, hamlib, N1MM…) can drive the radio. + +## Transport +- **Port:** `SerialUSB1` — the *second* USB serial interface (requires Arduino "USB Type = + Dual Serial"). The first port is the debug/console serial. +- **Baud:** 38400. +- **Framing:** ASCII commands terminated by `;`. Polled each pass by `CheckForCATSerialEvents()` + from [[main-loop]], which buffers until the terminator then parses. + +## Protocol ⚠️ TS-480 vs TS-2000 +The implemented dialect is the **Kenwood** 2-letter command set. The two source docs +**disagree on which radio**: `CAT.cpp:21` says *"Kenwood TS-480 CAT Interface (partial)"* (and +`code/docs/ts_480_pc.pdf` is the reference), but `CAT.h` says *"Kenwood TS-2000 protocol"*. The +two share most commands so it works either way, but the docs should be reconciled — logged in +[[documentation-todos]]. + +## Architecture: a command-dispatch table + +The core is a static table of `valid_command` entries (`NUM_SUPPORTED_COMMANDS = 25`): +```c +typedef struct { + char name[3]; // 2-letter command + NUL + int set_len, read_len; // expected payload lengths + char* (*write_function)(char*); // "set" handler + char* (*read_function)(char*); // "query" handler +} valid_command; +``` +`command_parser()` matches the incoming 2-letter code against the table and dispatches to the +**write** (set) or **read** (query) handler based on the command length — a query is just the +bare command (e.g. `FA;`), a set carries a payload (`FA00014200000;`). Read handlers format +`ED`/hardware state into a Kenwood response string; write handlers apply the change. + +## Implemented commands (25) + +| Group | Commands | +|---|---| +| Frequency / VFO | `FA`/`FB` (VFO A/B freq), `FR`/`FT` (RX/TX VFO select), `FW` (filter width) | +| Mode / status | `MD` (mode), `IF` (transceiver status string), `ID` (radio id) | +| Band | `BU`/`BD` (band up/down) | +| Gain / audio | `AG` (AF gain), `MG` (mic gain), `PC` (power control) | +| DSP | `NR` (noise reduction), `NT` (notch), `VX` (VOX) | +| Keyer | `KS` (keyer speed / WPM) | +| PTT | `TX` (transmit), `RX` (receive) | +| Misc | `AI` (auto-info), `PS` (power on/off), `PD`, `DB` | +| **Custom (non-Kenwood)** | `ED` (dump the `ED` config), `PR` (dump the `hardwareRegister`) | + +`ED` and `PR` are Phoenix extensions explicitly marked "NOT a Kenwood keyword" +(`CAT.cpp:119-120`) — handy debug dumps of [[persistent-config]] and the +[[filter-boards]] `hardwareRegister`. + +## How commands apply +CAT does **not** have a private path to the hardware — it feeds the **same channels as the +front panel**: +- **Event dispatch:** writes enqueue `InterruptType` events into the [[main-loop]] FIFO — e.g. + a frequency set raises `iUPDATE_TUNE` (`CAT.cpp:221`), band up/down raise `iBUTTON_PRESSED` + (`CAT.cpp:174,183`). So CAT tuning flows through [[tune-frequency-control]] exactly like the + encoder. +- **Direct `ED` writes:** simple settings write straight to [[persistent-config]] (e.g. + `KS_write` → `ED.currentWPM`, `CAT.cpp:475`). +- **PTT:** `TX_write` dispatches into [[mode-state-machine]] (switches on `modeSM.state_id`), + so CAT PTT obeys the same TX interlocks/keying as physical PTT. + +Read handlers serialize state back: `IF_read` builds the long TS-480 status string (VFO freq, +mode, RX/TX, etc.); `FA_read`/`MD_read`/`KS_read`/… each return one field. + +## Open questions +- Reconcile TS-480 (`CAT.cpp`) vs TS-2000 (`CAT.h`) and verify the `IF` status-string field + layout against `code/docs/ts_480_pc.pdf`. +- Which `unsupported_cmd` stubs exist and how the radio replies to unknown commands (the `?` + error response?). +- Whether `AI` (auto-information) actually pushes unsolicited updates or is a no-op. diff --git a/wiki/firmware/code-heritage.md b/wiki/firmware/code-heritage.md new file mode 100644 index 0000000..975c314 --- /dev/null +++ b/wiki/firmware/code-heritage.md @@ -0,0 +1,65 @@ +--- +title: Code Heritage & Multi-Author History +type: decision +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [history, heritage, licensing, contributors] +source_refs: [] +related: ["[[overview]]"] +--- + +# Code Heritage & Multi-Author History + +Phoenix is not a from-scratch codebase — it is the latest fork in a long amateur-radio +lineage. Understanding the heritage explains stylistic inconsistencies, duplicated idioms, +and the mix of generated and hand-written code. + +## Lineage + +> "This code base is originally derived from the **Teensy Convolution SDR**, copyright +> Frank Dziock DD4WH, substantially modified by the contributors listed below." +> — `code/src/PhoenixSketch/Contributors.txt` + +Origin: + +The "Convolution SDR" name reflects the original DSP approach: filtering by FFT +convolution. Much of the spectrum/FFT machinery in [[dsp-chain]] traces back to this root. + +The intermediate ancestor is the **T41-EP** ("Experimenter's Platform") SDR, documented in +the Al Peter (AC8GY) & Jack Purdum (W8TEE) book — a theory source worth ingesting into the +`theory/` area when available (see [[theory-overview]]; no e-copy currently exists, so the +theory pages are reconstructed from code + DSP fundamentals). + +## Known contributors + +From `Contributors.txt`: + +- Oliver King, KI3P *(current Phoenix maintainer)* +- Jack Purdum, W8TEE *(T41-EP book co-author)* +- Al Peter, AC8GY *(T41-EP book co-author)* +- Greg Raven, KF5N +- John Melton, G0ORX +- Jerry Kaidor, KF6VB +- WMXZ +- Frank Dziock, DD4WH *(original Teensy Convolution SDR author)* +- Michael Wild +- David Martin, VK3KQT +- Joerg Uthoff, DB2OO +- Harry Brash, GM3RVL +- Tom Metty, AJ8X + +## Licensing + +Phoenix is **GPL v3** (or later). Every source file carries the standard GPLv3 header +referencing `Contributors.txt`. + +## Implications for the wiki + +- **Style heterogeneity** is expected — code reflects many hands across many years. +- The **Phoenix** rework (KI3P-led) introduced the StateSmith-generated state machines and + the board-abstraction layer ([[rf-board]], [[filter-boards]]), which are newer than the + DSP core. +- When a design decision looks idiosyncratic, check whether it is inherited from the + Convolution SDR / T41-EP era versus a deliberate Phoenix choice. Record such findings as + `decision` pages. diff --git a/wiki/firmware/cw-processing.md b/wiki/firmware/cw-processing.md new file mode 100644 index 0000000..8cf8351 --- /dev/null +++ b/wiki/firmware/cw-processing.md @@ -0,0 +1,101 @@ +--- +title: CW Processing (audio filter + Morse decoder) +type: module +status: draft +created: 2026-06-09 +updated: 2026-06-09 +tags: [cw, morse, decoder, goertzel, sidetone, audio-filter, adaptive] +source_refs: [] +related: ["[[overview]]", "[[dsp-chain]]", "[[mode-state-machine]]", "[[tune-frequency-control]]", "[[rf-board]]", "[[display-subsystem]]", "[[persistent-config]]", "[[audio-io]]"] +--- + +# CW Processing (audio filter + Morse decoder) + +**Files:** `DSP_CWProcessing.cpp` (~24 KB), `DSP_CWProcessing.h`. + +## Where this fits in the CW path +CW (Morse) spans the whole radio; this module is the **receive-side audio** half: + +- **Transmit** — the iambic/straight keyer is in [[mode-state-machine]]; it keys the CW VFO via + `CWon`/`CWoff` on the [[rf-board]] at the tone-offset frequency from [[tune-frequency-control]] + (`GetCWTXFreq`). Sidetone is generated here (below). +- **Receive** — *this module*: a narrow **CW audio filter** for SNR, plus an **adaptive Morse + decoder** that turns the received tone into text. Invoked from `ReceiveProcessing` only in the + `CW_RECEIVE` state (`DSP.cpp:935`, [[dsp-chain]]): `DoCWReceiveProcessing()` then + `CWAudioFilter()`. + +## CW audio filter — `CWAudioFilter()` + +A narrow bandpass on the demodulated audio, selected by `ED.CWFilterIndex` +([[persistent-config]]) from five precomputed biquad cascades (`arm_biquad_cascade_df2T_f32` +over `S1_CW_AudioFilter1..5`, the cascades defined in `ReceiveFilterConfig`): + +| `CWFilterIndex` | 0 | 1 | 2 | 3 | 4 | 5 | +|---|---|---|---|---|---|---| +| width (code label) | 0.8 kHz | 1.0 kHz | 1.3 kHz | 1.8 kHz | 2.0 kHz | Off | + +Narrowing the audio passband around the CW tone dramatically improves SNR against adjacent +signals — the receive counterpart to picking a CW filter on an analog rig. + +## Tone detection — `DoCWReceiveProcessing()` + +Decides mark (tone present) vs. space using a **hybrid** of two detectors and feeds the +envelope to the decoder: +- **Correlation** against an internally generated reference sine (`aveCorrResult`). +- **Goertzel magnitude** at the configured CW tone `CWToneOffsetsHz[ED.CWToneIndex]` + (`goertzel_mag`). +- Combined: `combinedCoeff = 10 * aveCorrResult * 100 * goertzelMagnitude` (`DSP_CWProcessing.cpp:109`), + thresholded into the 0/1 audio value passed to `DoCWDecoding`. + +### Goertzel algorithm *(general DSP)* +`goertzel_mag(N, f, fs, data)` computes the energy at a **single** frequency far more cheaply +than a full FFT — an IIR recurrence tuned to bin `f`, ideal for "is the CW tone present?" +detection. + +## Adaptive Morse decoder — `DoCWDecoding()` + +A timing state machine (`MorseStates`) that converts the mark/space envelope into characters, +**adapting to the operator's sending speed** rather than assuming a fixed WPM. + +### Standard Morse timing *(general DSP, also in the code comments)* +`dit = 1 unit, dah = 3, inter-element = 1, inter-letter = 3, inter-word = 7`; +`ditLength = 1200 / WPM` via `SetDitLength()`. dah-vs-dit and letter/word boundaries are +distinguished by comparing measured durations against (adaptive) multiples of `ditLength` +(e.g. inter-element gap > `1.95·ditLength` ends a character, > `4.5·ditLength` is a word gap). + +### Adaptive timing +Rather than trust a fixed threshold, the decoder builds **histograms** of observed mark +durations (`DoSignalHistogram`) and gap durations (`DoGapHistogram`, `HISTOGRAM_ELEMENTS = 750` +ms-resolution bins), and uses `JackClusteredArrayMax` to find the dominant dit/dah/space +clusters. A running `thresholdGeometricMean` separates dit from dah and tracks speed changes; +`ADAPTIVE_SCALE_FACTOR = 0.8` ages old observations. `IsCWDecodeLocked()` reports whether the +timing statistics have converged. Fastest supported speed: `LOWEST_ATOM_TIME = 20 ms` (≈60 WPM). + +### Decoding via a flat Morse tree +Characters are looked up by walking a **binary tree stored as a flat string** +(`bigMorseCodeTree`, `DSP_CWProcessing.cpp:49` — `"-EISH5--4--V…"`, the classic pre-order Morse +layout). Starting at index 0 with a jump of `DECODER_BUFFER_SIZE = 128`, each element halves the +jump and branches (`DSP_CWProcessing.cpp:289-307`): +``` +dit: currentDecoderIndex += 1; // left child +dah: currentDecoderIndex += currentDashJump; // right child +both: currentDashJump >>= 1; // (applied per element) +``` +At the end of a character it emits `bigMorseCodeTree[currentDecoderIndex]` and resets. Decoded +text accumulates in a buffer; `GetMorseCharacterBuffer()` / `IsMorseCharacterBufferUpdated()` +let the [[display-subsystem]] refresh only when new characters arrive. Decoding is gated by +`ED.decoderFlag`. + +## Sidetone (transmit) +`InitializeCWProcessing()` also precomputes the **CW sidetone** phase +(`phs = 2π·freqSideTone / 24000`, into `sinBuffer`) so the operator hears their own keying; +volume is `ED.sidetoneVolume`. + +## Open questions / discrepancies +- **Filter-width mismatch:** the header doc says "very narrow filter (50–500 Hz typical)" but + the code labels the five filters **0.8–2.0 kHz**. Reconcile (audio passband vs. RF bandwidth?). + → [[documentation-todos]] +- The empirical scaling in `combinedCoeff` (`10 × … × 100 ×`) and the correlation-vs-Goertzel + weighting — document the tuning rationale. +- Confirm the sample rate the decoder/Goertzel operate at (24 kHz RX path vs the 12 kHz the + sidetone phase implies). diff --git a/wiki/firmware/display-subsystem.md b/wiki/firmware/display-subsystem.md new file mode 100644 index 0000000..285b79b --- /dev/null +++ b/wiki/firmware/display-subsystem.md @@ -0,0 +1,91 @@ +--- +title: Display Subsystem (RA8875, panes, menus, calibration screens) +type: module +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [display, ra8875, ui, spectrum, waterfall, menus, panes, stale-flags] +source_refs: [] +related: ["[[overview]]", "[[ui-state-machine]]", "[[dsp-chain]]", "[[zoom-fft]]", "[[hardware-state-machine]]", "[[persistent-config]]"] +--- + +# Display Subsystem (RA8875) + +The largest UI area by code volume. Renders to an **RA8875**-driven TFT (800×480). **Read-only** +w.r.t. global state by design — it draws what other modules compute, never mutating `ED` or DSP +state. + +## Files +- `MainBoard_Display.cpp` / `.h` — core: the `Pane` model, `DrawDisplay()` router, the + `VariableParameter` editor, menu structures +- `MainBoard_DisplayHome.cpp` (~66 KB) — the home screen and its panes +- `MainBoard_DisplayMenus.cpp` — main/secondary menu rendering +- `MainBoard_DisplayDFE.cpp` — Direct Frequency Entry pad ([[ui-state-machine]]) +- `MainBoard_DisplayEqualizer.cpp` — 14-band TX/RX equalizer screen ([[audio-equalizer]]) +- Calibration screens: `MainBoard_DisplayCalibration_Frequency/Power/RXIQ/TXIQ.cpp` +- Fonts: `FreeSansBold18pt7b.h`, `FreeSansBold24pt7b.h` + +## The pane model — dirty-flag rendering + +The efficiency mechanism that keeps drawing inside the ~10 ms loop budget +([[real-time-constraints]]). Each screen region is a `Pane` (`MainBoard_Display.h:32`): +```c +struct Pane { int x,y,w,h; void (*DrawFunction)(void); bool stale; }; +``` +A pane redraws **only when its `stale` flag is set**; modules flip `stale = true` when the +underlying data changes (e.g. `PaneVFOA.stale = 1` on a VFO switch). The home screen iterates +its `WindowPanes[NUMBER_OF_PANES]` array and redraws just the dirty panes, then clears the flags. + +### The home screen panes (`MainBoard_DisplayHome.cpp:80-92`) +13 panes (the `.ino`'s "12-pane layout" is approximate): + +| Pane | Rect (x,y,w,h) | Shows | +|---|---|---| +| VFO A | 5,5,280,50 | active VFO A frequency | +| VFO B | 300,5,220,40 | VFO B frequency | +| Freq/Band/Mod | 5,60,310,30 | band + modulation | +| **Spectrum** | 5,95,520,345 | main spectrum + waterfall | +| State of Health | 5,445,260,30 | status indicators | +| Time | 270,445,260,30 | RTC clock | +| SWR | 535,15,150,40 | SWR (TX) | +| TX/RX Status | 710,20,60,30 | T/R indicator | +| S-meter | 515,60,260,50 | signal strength | +| Audio Spectrum | 535,115,260,150 | demod audio spectrum | +| Settings | 535,270,260,170 | live settings summary | +| Name Badge | 535,445,260,30 | callsign/name | +| SAM Offset | 320,60,180,30 | synchronous-AM carrier offset ([[synchronous-am-detection]]) | + +## Screen routing — `DrawDisplay()` (`MainBoard_Display.cpp:244`) + +The top-level render dispatch is a `switch` on **`uiSM.state_id`** — i.e. [[ui-state-machine]] +chooses the screen, the display draws it: + +``` +SPLASH→DrawSplash · HOME→DrawHome · MAIN_MENU→DrawMainMenu · SECONDARY_MENU→DrawSecondaryMenu +UPDATE→DrawHome + DrawParameter (variable edit overlay) +EQUALIZER→DrawEqualizerAdjustment · FREQ_ENTRY→DrawFrequencyEntryPad · BIT→DrawBIT +CALIBRATE_{FREQUENCY,RX_IQ,TX_IQ,POWER}→DrawCalibrate* +``` +Each non-home screen defines **its own pane set** (e.g. the frequency-cal screen has freq-plot / +factor / error / instructions panes). So "panes" is a per-screen concept; the table above is the +home screen specifically. + +## Spectrum / waterfall +The main spectrum pane is fed by the **zoom FFT** display path ([[zoom-fft]], `psdnew` → pixel +columns); the audio-spectrum pane by the channel-filter FFT in [[dsp-chain]] (`audioYPixel`). +Refresh period is `≈ NCHUNKS × T_loop` — see [[spectrum-refresh-floor]] (governed by `NCHUNKS` +and per-frame draw cost, not `SPECTRUM_REFRESH_MS`; shipped at 18.8 fps) and +[[real-time-constraints]]. + +## Parameter editing & menus +- **`VariableParameter`** (`MainBoard_Display.h:103`) — a type-safe editor (union over i8/i16/ + i32/i64/f32/bool/KeyTypeId with per-type min/max/step). Drives the `UPDATE` state: the encoder + adjusts a bounded `ED` field, `DrawParameter()` overlays the value on the home screen. +- **Menus** — `PrimaryMenuOption primaryMenu[8]` and nested `SecondaryMenuOption`s. A secondary + option is either a `variableOption` (→ UPDATE editor) or a function pointer (→ runs an action, + e.g. start a calibration). This is the data model behind the [[ui-state-machine]] menu stack. + +## Open questions +- Waterfall scroll/colour-map implementation and how `psdnew` bins map to pixel columns. +- Touch input: does the RA8875 touchscreen drive any UI, or is navigation encoder/button-only? +- The full `primaryMenu[8]` contents (top-level menu items). diff --git a/wiki/firmware/dsp-chain.md b/wiki/firmware/dsp-chain.md new file mode 100644 index 0000000..6edfadc --- /dev/null +++ b/wiki/firmware/dsp-chain.md @@ -0,0 +1,55 @@ +--- +title: DSP Chain (Audio, FFT, FIR, Noise, CW) +type: module +status: draft +created: 2026-06-08 +updated: 2026-06-09 +tags: [dsp, fft, fir, agc, noise-reduction, cw, openaudio] +source_refs: [] +related: ["[[overview]]", "[[real-time-constraints]]", "[[mode-state-machine]]", "[[display-subsystem]]", "[[code-heritage]]", "[[audio-io]]"] +--- + +# DSP Chain (Audio, FFT, FIR, Noise, CW) + +The signal-processing core, built on the **OpenAudio_ArduinoLibrary** for real-time +48/96/192 kHz audio. This is the part of the codebase with the deepest lineage back to the +Teensy Convolution SDR ([[code-heritage]]). + +## Files +- `DSP.cpp` (~40 KB) / `DSP.h` — top-level audio routing, AGC, filter coordination +- `DSP_FFT.cpp` (~45 KB) / `DSP_FFT.h` — spectrum analysis (feeds the display waterfall); + `DSP_FFT_stub.cpp` for host-side test builds +- `DSP_FIR.cpp` (~51 KB) — FIR filter coefficient management (bandpass/decimation) +- `DSP_Noise.cpp` (~31 KB) / `DSP_Noise.h` — noise reduction +- `DSP_CWProcessing.cpp` (~24 KB) / `DSP_CWProcessing.h` — CW audio filtering / Morse decode → [[cw-processing]] +- `MainBoard_AudioIO.cpp` / `.h` — audio codec interface (I²S in/out) + +## Role +- **RX** (`ReceiveProcessing`, exact order `DSP.cpp:784-952`): read I/Q → RF gain → + [[iq-imbalance-correction|I/Q correction]] → fine-tune freq shift → **decimate ÷8** → + volume-scale → **convolution channel filter** ([[fast-convolution-filtering]]) → **AGC** + ([[agc-design]]) → **demodulate** ([[ssb-phasing-method]]) → band EQ → **noise reduction** + ([[noise-reduction]]) → optional auto-notch → CW processing (if CW) → **interpolate ×8** → + volume → play. Note AGC precedes demod (acts on the complex envelope); NR follows it. + The [[zoom-fft]] taps the raw I/Q separately for the band display. +- **TX**: mic/key → decimate → **Hilbert ±45° pair** (SSB I/Q gen) / CW tone → sideband + select → interpolate → codec → quadrature mixer. See [[ssb-phasing-method]]. +- Mode routing is directed by [[mode-state-machine]]. + +Filter configuration structs (`ReceiveFilterConfig`, `TransmitFilterConfig`, +`DecimationFilter`, `AGCConfig`) live in `SDT.h` → see [[persistent-config]]. + +## Related theory +- [[iq-quadrature-sampling]] — complex baseband, the foundation +- [[ssb-phasing-method]] — Hilbert ±45° TX pair + frequency-domain RX sideband selection +- [[fast-convolution-filtering]] — the FFT overlap-save channel filter (Convolution-SDR core) +- [[multirate-decimation]] — ÷8 RX / ÷16 TX rate changes +- [[iq-imbalance-correction]], [[agc-design]], [[noise-reduction]], [[zoom-fft]] +- [[synchronous-am-detection]] — SAM (PLL carrier recovery) vs envelope AM +- [[audio-equalizer]] — 14-band parallel filterbank (RX + TX) + +## To flesh out +- [ ] Block diagram of the actual RX and TX chains with sample rates per stage. +- [ ] Which NR algorithm(s) are implemented (spectral subtraction? LMS?). +- [ ] FFT size, windowing, and the [[spectrum-refresh-floor]] timing relationship. +- [ ] AGC attack/decay design. diff --git a/wiki/firmware/filter-boards.md b/wiki/firmware/filter-boards.md new file mode 100644 index 0000000..8372b91 --- /dev/null +++ b/wiki/firmware/filter-boards.md @@ -0,0 +1,139 @@ +--- +title: Filter Boards (BPF / LPF), RF Back-End & Power Sensing +type: module +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [filters, bpf, lpf, relays, ad7991, swr, power-sensing, mcp23017, antenna, pa] +source_refs: [sources/t41-ep-schematics] +related: ["[[overview]]", "[[filter-board-electronics]]", "[[rf-board]]", "[[hardware-state-machine]]", "[[tune-frequency-control]]", "[[persistent-config]]", "[[hardware-platform]]", "[[i2c-bus-map]]", "[[t41-ep-schematics]]"] +--- + +# Filter Boards (BPF / LPF), RF Back-End & Power Sensing + +**Files:** +- `BPFBoard.cpp` / `BPFBoard.h` — receive **band-pass filter** bank (front-end selectivity) +- `LPFBoard.cpp` / `LPFBoard.h` — the RF **back-end board**: low-pass filters *plus* BPF path + routing, transverter, 100 W PA, antenna switching, and SWR/power metering +- `LPFBoard_AD7991.cpp` / `.h` — driver for the AD7991 4-channel I²C ADC (power sensing) + +Despite the name, the **LPF board is the main RF back-end** — it does far more than low-pass +filtering. Both boards are clean hardware-abstraction modules (mockable, like [[rf-board]]), +driven by `HandleTuneState()`/`HandleRFHardwareStateChange()` in [[hardware-state-machine]]. + +## The shared `hardwareRegister` model + +All three RF boards write into **one global 64-bit `hardwareRegister`** (`Globals.cpp:112`), +each owning a bitfield (`SDT.h:69-83`): + +| Bits | Field | Board | +|---|---|---| +| LPFBAND0..3 | LPF band (BCD) | LPF | +| ANT0..1 | antenna select | LPF | +| XVTR | transverter enable | LPF | +| PA100W | 100 W PA select | LPF | +| TXBPF / RXBPF | BPF in TX / RX path | LPF | +| RXTX | T/R state | — | +| CW / MODE / CAL | keying / mode / cal feedback | RF | +| CWVFO / RXVFO | VFO enables | RF | +| BPFBAND0..3 (bit 28+) | BPF band | BPF | + +Setting a field calls `buffer_add()` (`Globals.cpp:246`), which queues the register to be +flushed to the **MCP23017 I²C GPIO expanders** that drive the relays. `UpdateMCPRegisters()` +writes the cached GPIOA/GPIOB bytes out. Each board exposes `Get*MCPRegisters()` test hooks. + +## BPF — band-pass (RX selectivity) + +`SelectBPFBand(band)` narrows the receive front end to the active band. Bands **0–10 plus +15 = BYPASS**. The band→relay control word uses a **byte-swap encoding** (`BPF_WORD` macro, +`BPFBoard.h:48`): compute `1 << band`, swap the two bytes, with a special case folding the +bypass pattern `0x0080 → 0x0008`. The header carries the full band↔word table +(`BPFBoard.h:29-41`) — worth keeping as the canonical reference. + +## LPF — harmonic suppression + back-end routing + +- `SelectLPFBand(band)` (bands 0–10) switches the TX harmonic-suppression low-pass via + `BandToBCD(band)` — the relay driver wants a **4-bit BCD** band code. +- **BPF path routing:** `TXSelectBPF`/`TXBypassBPF`, `RXSelectBPF`/`RXBypassBPF` route the + TX/RX signal through or around the BPF bank. +- **Transverter:** `SelectXVTR`/`BypassXVTR` route to an external VHF/UHF transverter (also + used during calibration to send the signal away from the T/R switch, `HardwareSm.cpp:355`). +- **100 W PA:** `Select100WPA`/`Bypass100WPA` (driven by `ED.PA100Wactive`). +- **Antenna:** `SelectAntenna(0–3)` relay matrix; per-band choice in `ED.antennaSelection` + ([[persistent-config]]). + +### Band-code → relay decode (what the firmware writes) +The firmware never addresses relays directly — it writes the encoded `hardwareRegister` bits to +the MCP23017 (U15, 0x25) and dedicated decoder logic on the control board does the rest +(`LPFBoard.cpp:78-84`, [[i2c-bus-map]]). The bit assignments the code drives: + +- **LPF band** — **GPIOB[0:3]** = 4-bit BCD (`SDT.h:95-106`): 60 m=0000, 160 m=0001, 80 m=0010, + 40 m=0011, 30 m=0100, 20 m=0101, 17 m=0110, 15 m=0111, 12 m=1000, 10 m=1001, 6 m=1010, NF=1111. +- **Antenna** — **GPIOB[4:5]** (2-bit). +- **100 W PA route** — **GPIOB[7]**. +- **BPF path routing** — **GPIOA[0:1]** (TXBPF/RXBPF). + +How those bits are physically decoded (CD74HC4514 / 74HC237 decoders, ULN2803 inverting +drivers, the on-board HF41F relays, and the external per-band 7-element LPF board with its +inductor values) is documented in **[[filter-board-electronics]]**. + +## SWR & power sensing — `PerformSWRBridgeReading()` (`LPFBoard.cpp:589`) + +Reads a directional coupler to compute **forward power, reflected power, and SWR**. There are +**two `#ifdef`-selected front ends with *different* detector hardware and therefore different +math** — a distinction worth getting right: + +**Digital (default, `#else` branch, `LPFBoard.cpp:625-648`).** The coupler feeds **two AD8307 +*log* power detectors** (U14 forward, U19 reflected) whose outputs go to the **AD7991** 12-bit +I²C ADC (**CH0 = forward, CH1 = reflected**), referenced by the on-board **REF3440 4.096 V** +on the ADC's Vin3/Vref pin (schematic-confirmed, [[t41-ep-schematics]]). Because an AD8307 is +**logarithmic**, the code converts mV → dBm → W with the **AD8307 transfer law** (≈25 mV/dB +slope, −84 dBm intercept), plus per-band cal and fixed coupler/pad offsets: +``` +mV = counts · VREF_MV / 4096 +P_dBm = mV / (25 + SWR_*_SlopeAdj[band]) − 84 + SWR_*_Offset[band] + PAD_ATTEN + COUPLER_ATTEN +P_W = 10^(P_dBm/10) / 1000 +|Γ| = sqrt(Pr/Pf); SWR = (1+|Γ|)/(1−|Γ|) +``` + +**Analog (`#ifdef USE_ANALOG_SWR`, `LPFBoard.cpp:591-621`).** A *different* board option: **linear +diode detectors** on Teensy ADC pins 26 (FWD) / 27 (REV). Being linear, this path uses the +square-law `P = (V·10)² / 50` (20 dB coupler ⇒ ×10 V; P = V²/50 Ω). This is **not** used with +the AD8307 hardware and is disabled by default (`USE_ANALOG_SWR` commented out in `Config.h`). + +Guard rails (both): no forward power ⇒ SWR = 1; `|Γ|` clamped < 0.999. Forward/reflected use +**different smoothing constants**. Results cached and read via +`ReadSWR()`/`ReadForwardPower()`/`ReadReflectedPower()`; `ReadSWRLastUpdateMs()` lets the +display detect TX activity. + +## How it ties together +- **Band changes:** `HandleTuneState()` calls `SelectLPFBand` + `SelectBPFBand` + + `SelectAntenna` + the PA select **before** reprogramming the VFO ([[rf-board]]) — so filters + settle before RF appears. See [[hardware-state-machine]]. +- **Power metering** feeds the front-panel power/SWR display and the **power calibration** + routine (`PowerCalSm`), which fits the tanh PA model in [[tune-frequency-control]]. + +## Physical hardware +The three boards this module drives — the BPF/exciter-filter board (MASWSS0179 switches, +MCP23017 U35 0x24), the LPF/100 W PA control board (decoders, ULN2803s, HF41F relays, PA/XVTR +control), the external per-band LPF filter board, and the AD8307/AD7991/REF3440 SWR-sensing +front end — are documented in **[[filter-board-electronics]]** (schematic-traced, +[[t41-ep-schematics]]). See also the platform-level [[hardware-platform]]. + +## Open questions +- ~~Full LPF band↔BCD table and the band-code → CD74HC4514/74HC237 → relay mapping.~~ + **Resolved (2026-06-15, owner net trace):** BCD table (above) + full decode chain in + [[filter-board-electronics]] (GPIOB[0:3]→U12 4514→U9/U10 ULN2803→external relays via J24/J25; + antenna GPIOB[4:5]→U2 74HC237→U4→K4-K7; PA GPIOB[7]→U4→K2/K3; BPF routing GPIOA[0:1]→U5/U6). + The external filter board is ingested too: **one dedicated 7-element LPF per band** (2 relays + each, band-named control nets, Yn = band BCD n). *Remaining (minor):* tabulate the exact + per-band L/C → cutoff frequency. +- ~~⚠ AD8307 (log) vs linear power math.~~ — **RESOLVED, not a bug (2026-06-14, net trace + + schematic owner confirmation).** The **default digital path correctly applies the AD8307 log + law** (mV/25 − 84 → dBm → W, `LPFBoard.cpp:640-643`). The linear `(V·10)²/50` is the *other* + branch (`USE_ANALOG_SWR`), which targets linear **diode** detectors on Teensy pins 26/27 and + is off by default. The earlier flag came from a **wiki error** that attributed the analog-path + formula to the digital path; now corrected. AD8307 OUT (U14 fwd / U19 rev) → AD7991 CH0/CH1; + REF3440 → Vin3/Vref reference (see [[filter-board-electronics]]). → [[t41-ep-schematics]] +- The AD7991 `REGISTER_SETUP` channel-select bits vs. the "CH0+CH1" comment (the setup byte + has the channel nibble = 0; confirm how per-channel reads are configured). diff --git a/wiki/firmware/front-panel.md b/wiki/firmware/front-panel.md new file mode 100644 index 0000000..cd7dee4 --- /dev/null +++ b/wiki/firmware/front-panel.md @@ -0,0 +1,91 @@ +--- +title: Front Panel (encoders, buttons, LEDs) +type: module +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [front-panel, encoders, buttons, leds, mcp23017, i2c, interrupts, real-time, rotary] +source_refs: [] +related: ["[[overview]]", "[[main-loop]]", "[[ui-state-machine]]", "[[mode-state-machine]]", "[[tune-frequency-control]]", "[[real-time-constraints]]", "[[hardware-platform]]", "[[i2c-bus-map]]"] +--- + +# Front Panel (encoders, buttons, LEDs) + +**Files:** `FrontPanel.cpp` / `.h`, `FrontPanel_Rotary.cpp` / `.h`. + +Reads the physical controls and turns them into the `InterruptType` events that the +[[main-loop]] FIFO dispatches to [[mode-state-machine]] / [[ui-state-machine]]. This page also +documents the **`encoder-i2c-speed`** branch's two-tier servicing design (the reason this +module was reworked). + +## Hardware: two MCP23017 expanders on I²C (`Wire1`) + +| Device | Inputs/outputs | INT pin | +|---|---|---| +| `mcp1` | 16 front-panel switches (pins 0–15) → buttons 0–15 | `INT_PIN_1` | +| `mcp2` | 6 switches (buttons 16–21), the 4 rotary encoders, 2 LEDs | `INT_PIN_2` | + +Both MCP23017 INT lines are open-drain, active-LOW, wired to Teensy GPIO interrupts (FALLING). + +## The four encoders + +Quadrature encoders handled by **`Rotary_V12`** (`FrontPanel_Rotary.h`), a Ben Buxton-style +state machine adapted for MCP23017 pins, with per-encoder direction reversal and a `BOURN_ENCODERS` +build flag (Bourns parts have A/B swapped). `process()` returns accumulated steps +(interrupt-safe, resets on read). + +| Encoder | Events emitted | Consumer | +|---|---|---| +| volume | `iVOLUME_INCREASE/DECREASE` | AGC/volume | +| filter | `iFILTER_INCREASE/DECREASE` | filter bandwidth | +| centre tune | `iCENTERTUNE_INCREASE/DECREASE` | coarse VFO ([[tune-frequency-control]]) | +| fine tune | `iFINETUNE_INCREASE/DECREASE` | fine software-mixer tune | + +Buttons set `iBUTTON_PRESSED` (with debounce); `GetButton()` returns the id (0–21) for +`HandleButtonPress` in [[main-loop]], routed per UI state ([[ui-state-machine]]). LEDs are +driven by `FrontPanelSetLed(led, state)` → `mcp2.digitalWrite`. + +## Two-tier servicing (the `encoder-i2c-speed` design) + +The problem: MCP23017 reads are **blocking I²C** transfers. Doing them in a high-priority GPIO +ISR would stall audio; doing them only in the main loop ties encoder responsiveness to the +display/DSP cadence (10 ms+ when busy) — so fast tuning felt laggy and dropped steps. The fix +splits the work across two priority levels: + +1. **GPIO ISR — flag only.** `fpInterrupt1ISR`/`fpInterrupt2ISR` (`FrontPanel.cpp:238-250`) + are deliberately minimal: they set `interrupted1`/`interrupted2 = true` and return. **No + I²C in the ISR.** +2. **1 ms timer — deferred I²C drain.** An `IntervalTimer fpServiceTimer` runs + `ServiceFrontPanel()` every 1 ms at **NVIC priority 240** — *below* the OpenAudio update ISR + at **208** (higher number = lower priority on Cortex-M), so encoder/button I²C **can never + delay audio servicing** (`FrontPanel.cpp:340-344`). It performs the actual `interrupt1()` / + `interrupt2()` reads when a flag is set **or the INT pin still reads LOW**. + +Two robustness details: +- **Level recovery:** the MCP INT line stays asserted (LOW) until its GPIO is read, so + `ServiceFrontPanel` also checks `digitalRead(INT_PIN) == 0` — recovering any edge the ISR + missed while the line was already low (`FrontPanel.cpp:261-267`). +- **Single-read optimization:** `interrupt2()` calls `readGPIOAB()` once to grab both ports in + one I²C transaction ("save an I2C instruction for speed", `FrontPanel.cpp:133`) before + decoding all four encoders. + +> Caveat in the code: all Teensy `IntervalTimer`s share the `IRQ_PIT` vector, so the +> `priority(240)` applies to every IntervalTimer, not just this one (`FrontPanel.cpp:340-342`). + +`CheckForFrontPanelInterrupts()` (`FrontPanel.cpp:353`) is the **legacy main-loop poll** — it +polls the INT pins and calls the same `interrupt1()/interrupt2()` drains. It still runs from +[[main-loop]] as a backstop; the level-check makes the two paths idempotent (whoever reads the +GPIO first clears the INT line). + +## Why it matters +This decoupling is the whole point of the `encoder-i2c-speed` branch (commit *"Speed up +encoder handling…"*): tuning latency/step-loss is now bounded by the 1 ms tick rather than the +main-loop budget, while audio integrity is preserved by the priority ordering. Relates to +[[real-time-constraints]] and the [[spectrum-refresh-floor]] finding (both about not coupling +responsiveness to the slow display path). + +## Open questions +- Per-button id → physical-label map (0–21 across the two expanders). +- Debounce timing constants and whether long-press is detected here or in [[main-loop]]. +- Whether the legacy `CheckForFrontPanelInterrupts()` main-loop call is now redundant given the + timer, and any measured latency improvement from the branch. diff --git a/wiki/firmware/hardware-state-machine.md b/wiki/firmware/hardware-state-machine.md new file mode 100644 index 0000000..1c1c918 --- /dev/null +++ b/wiki/firmware/hardware-state-machine.md @@ -0,0 +1,108 @@ +--- +title: Hardware & Calibration Coordinator (HardwareSm) +type: module +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [hardware, coordinator, relays, tr-switching, calibration, vfo, statesmith] +source_refs: [] +related: ["[[overview]]", "[[state-machine-architecture]]", "[[mode-state-machine]]", "[[tune-frequency-control]]", "[[rf-board]]", "[[filter-boards]]", "[[iq-imbalance-correction]]", "[[persistent-config]]"] +--- + +# Hardware & Calibration Coordinator (HardwareSm) + +**Files:** `HardwareSm.cpp` (~30 KB) + `HardwareSm.h`, with four calibration partials: +`HardwareSm_PowerCalibration.cpp`, `_ReceiveIQCalibration.cpp`, +`_TransmitCarrierCalibration.cpp`, `_TransmitIQCalibration.cpp`. + +> ⚠️ **Not StateSmith-generated.** Unlike ModeSm/UISm, `HardwareSm.cpp` is **hand-written** +> (no `HardwareSm.drawio`, no generated banner). It is a coordinator built around two +> hand-coded state enums, not a StateSmith machine. The four *calibration sub-machines* it +> drives **are** generated (see below). + +HardwareSm is the **bridge between logical mode and physical hardware**. [[mode-state-machine]] +decides *what* mode the radio is in; HardwareSm translates that into *which relays, signal +paths, filters, and VFO frequencies* — a deliberately **many-to-one** mapping. + +## Two state variables + +```c +enum RFHardwareState { RFCWMark, RFCWSpace, RFReceive, RFTransmit, + RFCalReceiveIQ, RFCalTransmitIQ, RFCalTransmitIQSingleVFO, RFInvalid }; +enum TuneState { TuneReceive, TuneSSBTX, TuneCWTX, + TuneCalReceiveIQ, TuneCalTransmitIQ, TuneInvalid }; +``` + +Both are derived from `modeSM.state_id` by a `switch`. (These `TuneState` values are the real +home of the "TuneReceive/SSBTX/CWTX" that `CLAUDE.md`/`.ino` wrongly attribute to a +"TuneSm" — see [[tune-frequency-control]].) + +## 1. RF hardware state — `UpdateRFHardwareState()` (`HardwareSm.cpp:531`) + +Maps mode → RF board state, then `HandleRFHardwareStateChange()` does the physical switching +(relays, TX/RX path, PA select) with **settling delays** (relay ~6 ms, PIN-diode switching). + +| RFHardwareState | ModeSm states that map to it | +|---|---| +| `RFReceive` | SSB_RECEIVE, CW_RECEIVE, CALIBRATE_FREQUENCY, CALIBRATE_OFFSET_SPACE, CALIBRATE_TX_IQ_SPACE | +| `RFTransmit` | SSB_TRANSMIT, CALIBRATE_OFFSET_MARK | +| `RFCWMark` (key down) | CW_TRANSMIT_MARK/DIT_MARK/DAH_MARK, CALIBRATE_POWER_MARK | +| `RFCWSpace` (key up) | CW_TRANSMIT_SPACE/KEYER_SPACE/KEYER_WAIT, CALIBRATE_POWER_SPACE | +| `RFCalReceiveIQ` | CALIBRATE_RX_IQ | +| `RFCalTransmitIQ` / `…SingleVFO` | CALIBRATE_TX_IQ_MARK (dual-VFO vs. external-analyzer) | + +Key points: +- **CW QSK** uses the distinct `RFCWMark`/`RFCWSpace` pair so key-down/key-up toggles the TX + path quickly without a full T/R relay cycle. +- **Calibration reuses the normal TX/RX hardware** — the cal MARK/SPACE mode states fold onto + the same RFReceive/RFTransmit/RFCWMark states. +- A `previousRadioState` guard skips the (slow) relay work when the RF state is unchanged but + still calls `UpdateTuneState()` (frequency may have moved). `ForceUpdateRFHardwareState()` + bypasses the guard when a non-mode parameter (e.g. PA selection) changes + (`HardwareSm.cpp:598`). + +## 2. Tune state — `UpdateTuneState()` → `HandleTuneState()` (`HardwareSm.cpp:639,715`) + +Maps mode → `TuneState`, then `HandleTuneState()` programs **band-dependent hardware** in +order — PA (100 W vs bypass), `SelectLPFBand`, `SelectBPFBand`, `SelectAntenna`, +`UpdateFIRFilterMask` — and finally the **VFO frequency** via the [[rf-board]], using the math +in [[tune-frequency-control]]. The per-state frequency formulas and the SSB-TX 3rd-harmonic +monitor trick are documented there. Calibration tune states place the VFOs specially (e.g. +`TuneForReceiveIQCalibration` puts the test tone Fs/4 from the LO, `HardwareSm.cpp:605`). + +## 3. Calibration orchestration + +Four routines, each a hand-written **partial that wraps a StateSmith-generated sub-machine** +(state maps documented in [[calibration-state-machines]]): + +| Partial file | Sub-machine (generated) | Calibrates | Theory | +|---|---|---|---| +| `HardwareSm_PowerCalibration.cpp` | `PowerCalSm` | PA output power curve | tanh fit, [[tune-frequency-control]] | +| `HardwareSm_ReceiveIQCalibration.cpp` | `ReceiveIQCalSm` | RX I/Q balance | [[iq-imbalance-correction]] | +| `HardwareSm_TransmitIQCalibration.cpp` | `TransmitIQCalSm` | TX I/Q balance | [[iq-imbalance-correction]] | +| `HardwareSm_TransmitCarrierCalibration.cpp` | `TransmitCarrierCalSm` | TX carrier null (LO leakage) | (distinct from image) | + +Each partial: starts its sub-SM (`PowerCalSm_start`, …), dispatches events to step it +(`…_EventId_AUTO`, `NEXT_POINT`, `RECORD_DATA_POINT`, `RESET`, …), and bridges results back +into the RF/tune state and the `ED` calibration arrays ([[persistent-config]]). The +**power-cal** routine records (attenuation, power) points and fits the tanh PA model +(`CalculatePowerCurveFit` → `FitPowerCurve` in `Tune.cpp`); the **IQ** routines run the +sideband-separation sweep documented in [[iq-imbalance-correction]]. + +Calibration is **entered** when [[mode-state-machine]] takes a `CALIBRATE_*` event into its +`CALIBRATION_STATES` branch; the sub-SMs are **driven** from [[main-loop]] (front-panel cal +actions, `Loop.cpp:720-795`) and from these partials. + +## Invocation +`UpdateRFHardwareState()` is called by `UpdateHardwareState()` (`Mode.cpp:24`) on every ModeSm +state entry, and directly from [[main-loop]] on frequency/band/mode changes +(`Loop.cpp:438-578`). This is the single funnel through which all hardware reconfiguration +flows. + +## Open questions +- ~~Full state map of each generated cal sub-SM~~ → done in [[calibration-state-machines]] + (`PowerCalSm` POWERPOINT1/READ_AND_ADJUST/ + POWERCOMPLETE, etc.) — only partially traced. +- `RFCalTransmitIQSingleVFO` external-analyzer flow vs. the dual-VFO self-cal path. +- Exact relay/PIN-diode settling delays and their T/R timing budget vs. [[real-time-constraints]]. +- Whether a `TX carrier-null` theory page should be split out of [[iq-imbalance-correction]]. diff --git a/wiki/firmware/main-loop.md b/wiki/firmware/main-loop.md new file mode 100644 index 0000000..fe3c394 --- /dev/null +++ b/wiki/firmware/main-loop.md @@ -0,0 +1,71 @@ +--- +title: Main Loop & Event Dispatch (Loop.cpp) +type: module +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [loop, events, interrupts, real-time, cw-keyer] +source_refs: [] +related: ["[[overview]]", "[[mode-state-machine]]", "[[ui-state-machine]]", "[[front-panel]]", "[[real-time-constraints]]", "[[cat-control]]"] +--- + +# Main Loop & Event Dispatch (Loop.cpp) + +**Files:** `Loop.cpp` (~62 KB), `Loop.h`. The heart of the firmware's control flow: it +owns `loop()`, the interrupt event FIFO, and the CW-key/PTT input plumbing. + +## `loop()` execution sequence + +`loop()` is marked `FASTRUN` (placed in RAM for speed) and must complete each pass in +**~10 ms** to avoid audio buffer overflow ([[real-time-constraints]]). Per-iteration order +(from `Loop.h`): + +1. Shutdown check (power-off request → [[persistent-config]] save, then `ShutdownTeensy()`) +2. CW key debounce +3. Poll front panel (encoders + buttons) → [[front-panel]] +4. Poll CAT serial → [[cat-control]] +5. Consume queued interrupt events → dispatch to [[mode-state-machine]] / [[ui-state-machine]] +6. Update hardware (VFO, filters, attenuators) +7. Run DSP → [[dsp-chain]] +8. Refresh display (spectrum rate-limited) → [[display-subsystem]] + +## Event-driven input: the interrupt FIFO + +Interrupt handlers don't act directly — they **enqueue** an `InterruptType` into a 16-slot +FIFO that the main loop drains. This decouples ISR timing from processing. + +API (in `Loop.h`): +- `SetInterrupt(i)` — append event (drops oldest if full) +- `PrependInterrupt(i)` — push to front; used by the **iambic keyer paddle-memory** feature +- `GetInterrupt()` — peek head without consuming +- `ConsumeInterrupt()` — pop + dispatch +- `GetInterruptFifoSize()` — depth, for overflow diagnostics + +### `InterruptType` events +PTT (`iPTT_PRESSED/RELEASED`), CW keys (`iKEY1_PRESSED/RELEASED`, `iKEY2_PRESSED`), +encoders (volume / filter / center-tune / fine-tune ± ), buttons (`iBUTTON_PRESSED`), +VFO/mode/power changes, tune update requests, equalizer, BIT display, and the five +calibration triggers (`iCALIBRATE_POWER/FREQUENCY/RX_IQ/TX_IQ`, `iCALIBRATE_EXIT`) that +drive the [[hardware-state-machine]]. + +## CW key / PTT handling + +`SetupCWKeyInterrupts()` configures KEY1, KEY2, PTT with pull-ups and attaches handlers +(KEY1 on CHANGE, KEY2 on FALLING, PTT on CHANGE). Keyer behavior is configurable: +- `SetKeyType(KeyTypeId_Straight | KeyTypeId_Keyer)` — straight key vs. iambic keyer +- `SetKey1Dit()` / `SetKey1Dah()` — paddle assignment (`ED.keyerFlip`) for handedness + +Precise dit/dah timing comes from the **1 ms `tick1ms()` timer** (in `PhoenixSketch.ino`), +which feeds DO events to ModeSm. + +## Other responsibilities + +- `CheckForSerialTimeSync()` — accepts a PJRC `T` packet on USB serial to set the + Teensy RTC + TimeLib clock. +- `ShutdownTeensy()` — graceful power-off: persists state to LittleFS + SD, signals the + ATTiny power-management circuit, then lets power be cut. + +## Open questions / TODO +- Document the exact hardware-update step (what gets pushed each pass vs. only on change). +- Confirm the exact hardware-update step; spectrum-refresh timing is documented in + [[spectrum-refresh-floor]] (redraw ≈ `NCHUNKS × T_loop`). diff --git a/wiki/firmware/mode-state-machine.md b/wiki/firmware/mode-state-machine.md new file mode 100644 index 0000000..645f49c --- /dev/null +++ b/wiki/firmware/mode-state-machine.md @@ -0,0 +1,132 @@ +--- +title: Mode State Machine (ModeSm) +type: module +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [state-machine, ssb, cw, transmit, keyer, iambic, calibration, statesmith] +source_refs: [] +related: ["[[overview]]", "[[state-machine-architecture]]", "[[tune-frequency-control]]", "[[main-loop]]", "[[hardware-state-machine]]", "[[ssb-phasing-method]]", "[[rf-board]]", "[[audio-io]]"] +--- + +# Mode State Machine (ModeSm) + +**Files:** `ModeSm.cpp` (~69 KB, **generated**), `ModeSm.h`, source diagram +`ModeSm.drawio`; hand-written actions/guards in `Mode.cpp` / `Mode.h`. The largest state +machine in the project. StateSmith algorithm: *Balanced2*. Do **not** hand-edit the `.cpp` — +edit `ModeSm.drawio` and regenerate ([[state-machine-architecture]]). + +> ⚠️ The `PhoenixSketch.ino` header lists ModeSm's states as "SSB_RECEIVE, SSB_TRANSMIT, +> CW_RECEIVE, CW_TRANSMIT, TUNE". That is **out of date**: there is **no `TUNE` state**, and +> CW transmit is actually six sub-states. The authoritative list is `ModeSm.h` (below). + +## Role +Owns the radio's **operating mode and TX/RX switching**, the **CW keyer**, and the entry +into **calibration**. State entry/exit actions reconfigure hardware via +`UpdateHardwareState()` → `UpdateRFHardwareState()` + `UpdateAudioIOState()` (`Mode.cpp:23`), +so every mode change deterministically reprograms the [[rf-board]] and audio I/O. + +## State hierarchy (`ModeSm.h:43-65`) + +``` +ROOT +├── NORMAL_STATES +│ ├── SSB_RECEIVE ← default operating state +│ ├── SSB_TRANSMIT +│ ├── CW_RECEIVE +│ ├── CW_TRANSMIT_MARK ┐ straight key (carrier on/off) +│ ├── CW_TRANSMIT_SPACE ┘ +│ ├── CW_TRANSMIT_DIT_MARK ┐ +│ ├── CW_TRANSMIT_DAH_MARK │ iambic keyer +│ ├── CW_TRANSMIT_KEYER_SPACE │ (auto-timed elements) +│ └── CW_TRANSMIT_KEYER_WAIT ┘ +└── CALIBRATION_STATES + ├── CALIBRATE_FREQUENCY + ├── CALIBRATE_OFFSET_MARK / CALIBRATE_OFFSET_SPACE + ├── CALIBRATE_POWER_MARK / CALIBRATE_POWER_SPACE + ├── CALIBRATE_RX_IQ + └── CALIBRATE_TX_IQ_MARK / CALIBRATE_TX_IQ_SPACE +``` + +`MARK` = transmitter/carrier keyed on, `SPACE` = off — the calibration MARK/SPACE pairs let +the routine toggle a TX tone for measurement. + +## Events (`ModeSm.h:18-36`) and where they originate + +All dispatched from [[main-loop]] (`ModeSm_dispatch_event(&modeSM, …)`): + +| Event | Source | Meaning | +|---|---|---| +| `DO` | **1 ms timer** `TimerInterrupt()` (`Loop.cpp:355`) | keyer/timeout tick | +| `PTT_PRESSED` / `PTT_RELEASED` | PTT handler (`Loop.cpp:1318/1322`) | SSB TX key | +| `KEY_PRESSED` / `KEY_RELEASED` | straight-key handler (`Loop.cpp:1332/1340`) | straight-key | +| `DIT_PRESSED` / `DAH_PRESSED` | paddle decode (`Loop.cpp:920-930`) | iambic paddles | +| `TO_SSB_MODE` / `TO_CW_MODE` | mode toggle (`Loop.cpp:479/484`) | SSB↔CW | +| `CALIBRATE_FREQUENCY/RX_IQ/TX_IQ/POWER` | cal triggers (`Loop.cpp:1359-1379`) | enter cal | +| `CALIBRATE_EXIT` | (`Loop.cpp:1388`) | leave cal | +| `OFFSET_START` / `OFFSET_END` | freq-cal offset (`Loop.cpp:857/872`) | offset measurement | + +## Normal-mode transition map (`ModeSm.cpp:330-458`) + +- **SSB_RECEIVE** → `PTT_PRESSED` ⇒ SSB_TRANSMIT; `TO_CW_MODE` ⇒ CW_RECEIVE. +- **SSB_TRANSMIT** → `PTT_RELEASED` ⇒ SSB_RECEIVE. +- **CW_RECEIVE** → `KEY_PRESSED` ⇒ CW_TRANSMIT_MARK (straight key); `DIT_PRESSED` ⇒ + CW_TRANSMIT_DIT_MARK; `DAH_PRESSED` ⇒ CW_TRANSMIT_DAH_MARK (keyer); `TO_SSB_MODE` ⇒ + SSB_RECEIVE. +- Transmit transitions are guarded by **`IsTxAllowed()`** = current band is a `HAM_BAND` + (`Mode.cpp:39`) — the safety interlock that blocks TX out of band. + +### Straight-key CW (semi-break-in) +`CW_TRANSMIT_MARK` (carrier on) →`KEY_RELEASED`→ `CW_TRANSMIT_SPACE` (carrier off). SPACE +runs a `DO` countdown against `waitDuration_ms` (= `CW_TRANSMIT_SPACE_TIMEOUT_MS`, +`Globals.cpp:547`); a new `KEY_PRESSED` returns to MARK, otherwise it times out back to +CW_RECEIVE. On entering SPACE, `ModeCWTransmitSpaceEnter()` re-checks the key lines and +re-queues a press if still held (`Mode.cpp:28`). + +### Iambic keyer (auto-timed) +Driven by the `DO` tick incrementing `markCount_ms` / `spaceCount_ms` (`ModeSm_Vars`): + +| State | `DO` action | Transition | +|---|---|---| +| `CW_TRANSMIT_DIT_MARK` | `markCount_ms++` | `≥ ditDuration_ms` ⇒ KEYER_SPACE | +| `CW_TRANSMIT_DAH_MARK` | `markCount_ms++` | `≥ 3·ditDuration_ms` ⇒ KEYER_SPACE | +| `CW_TRANSMIT_KEYER_SPACE` | `spaceCount_ms++` | `≥ ditDuration_ms` ⇒ KEYER_WAIT | +| `CW_TRANSMIT_KEYER_WAIT` | timeout | `DIT_PRESSED`⇒DIT_MARK, `DAH_PRESSED`⇒DAH_MARK | + +This is standard Morse timing — **dit = 1 unit, dah = 3 units, inter-element space = 1 unit** +— with `ditDuration_ms = 60000/(50·WPM) = 1200/WPM` (`Globals.cpp:131`, the PARIS formula), +`WPM = ED.currentWPM` (also settable over CAT, `CAT.cpp:475`). + +### Iambic paddle memory +Because element timing runs to completion, a paddle squeezed *during* an element must be +remembered. [[main-loop]] handles this (`Loop.cpp:914-947`): in CW_RECEIVE / KEYER_WAIT a +paddle press is dispatched immediately; in DIT_MARK / DAH_MARK / KEYER_SPACE it is +**re-queued to the front of the FIFO** (`PrependInterrupt`) so it fires the instant the keyer +reaches KEYER_WAIT — classic iambic dot/dash memory. `ED.keyerFlip` swaps which physical +paddle (KEY1/KEY2) is dit vs. dah (`Loop.cpp:919-930`). + +## Calibration branch +The four `CALIBRATE_*` events are handled by the `NORMAL_STATES` ancestor from **any** normal +state (`ModeSm.cpp:339-342` etc.), transitioning into `CALIBRATION_STATES`; `CALIBRATE_EXIT` +returns. ModeSm here owns the **TX keying/sequencing** for calibration (the MARK/SPACE +toggling, `PTT_PRESSED` advancing within e.g. `CALIBRATE_POWER_SPACE`), while the actual +measurement/optimization algorithms run in the dedicated sub-machines — +[[hardware-state-machine]] (PowerCalSm, ReceiveIQCalSm, TransmitCarrierCalSm, +TransmitIQCalSm) and the IRR sweep documented in [[iq-imbalance-correction]]. + +## Interactions +- **Button lockout:** `HandleButtonPress()` ignores all front-panel buttons while ModeSm is + in any TX/keyed state or `CALIBRATE_*_MARK` (`Loop.cpp:395-403`). +- **RX CW decode:** in `CW_RECEIVE` the RX chain runs the CW audio filter + adaptive Morse + decoder — see [[cw-processing]]. +- **RX DSP:** the RX chain checks `modeSM.state_id == CW_RECEIVE` to switch in CW audio + processing (`DSP.cpp:935`, see [[dsp-chain]]). +- **VFO setup** for each mode is delegated to `HandleTuneState()` in + [[hardware-state-machine]] (which uses [[tune-frequency-control]] math) via the hardware + update. + +## Open questions +- Exact `OFFSET_START`/`OFFSET_END` flow in frequency calibration (only partially traced). +- Whether `CW_TRANSMIT_KEYER_WAIT` timing out to CW_RECEIVE uses `waitDuration_ms` too. +- Update the stale `PhoenixSketch.ino` state list (TUNE/CW_TRANSMIT) — tracked in + [[documentation-todos]]. diff --git a/wiki/firmware/overview.md b/wiki/firmware/overview.md new file mode 100644 index 0000000..94b1c7d --- /dev/null +++ b/wiki/firmware/overview.md @@ -0,0 +1,129 @@ +--- +title: Firmware Architecture Overview +type: overview +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [architecture, state-machines, dsp, teensy] +source_refs: [] +related: ["[[main-loop]]", "[[mode-state-machine]]", "[[ui-state-machine]]", "[[tune-frequency-control]]", "[[hardware-state-machine]]", "[[rf-board]]", "[[filter-boards]]", "[[dsp-chain]]", "[[display-subsystem]]", "[[front-panel]]", "[[cat-control]]", "[[persistent-config]]", "[[code-heritage]]", "[[hardware-platform]]", "[[i2c-bus-map]]"] +--- + +# Firmware Architecture Overview + +Phoenix is the firmware for a **Teensy 4.1-based amateur radio transceiver** (the T41-EP +SDR). It is a complete software-defined radio: RF hardware control, real-time DSP, a +touchscreen UI, and CAT computer control, all running on a single ARM Cortex-M7. + +The canonical hand-written architecture note lives in the source at +`code/src/PhoenixSketch/PhoenixSketch.ino` (header comment). This page is the wiki's +navigable summary; module pages drill into each subsystem. + +## Design philosophy + +The codebase is organized around five recurring principles (stated in the `.ino` header): + +1. **Separation of concerns** — hardware control, signal processing, UI, and display are + isolated modules with clear interfaces. +2. **State-machine control** — all hardware state changes flow through state machines, so + behavior is deterministic and predictable. See [[state-machine-architecture]]. +3. **Real-time constraints** — the main loop must complete within ~10 ms to avoid audio + buffer overflows; display work is rate-limited. See [[real-time-constraints]]. +4. **Read-only display** — display code reads global state but never mutates it. +5. **Hardware abstraction** — board interfaces (RF/LPF/BPF/Main) present clean APIs so + hardware can be mocked in unit tests. + +## Layered structure + +``` + Front panel (encoders, buttons, PTT, CW key) CAT (USB serial) + │ │ + interrupt events (FIFO) command parser + │ │ + ┌────────────────▼────────────────────────────────────▼──────────┐ + │ Main Loop (Loop.cpp) │ + │ poll input · dispatch events · update HW · run DSP · draw │ + └───┬───────────────┬───────────────┬───────────────┬────────────┘ + │ │ │ │ + State machines RF / filter DSP chain Display + ModeSm UISm hardware (OpenAudio) (RA8875) + HardwareSm(+cal) RFBoard/si5351 DSP_FFT/FIR/ MainBoard_Display* + LPFBoard BPFBoard Noise/CW + │ + Persistent config (ED struct in SDT.h · Storage · ParamSave) + Tuning math: Tune.cpp (frequency/power functions, not a state machine) +``` + +## State machines + +Phoenix is unusually state-machine-heavy: **six StateSmith-generated** machines (each with a +`.drawio` source) plus a **hand-written** hardware coordinator. + +| Machine | File | Generated? | Role | +|---|---|---|---| +| ModeSm | `ModeSm.cpp/h` | ✔ StateSmith | Operating mode: SSB/CW × RX/TX, iambic keyer, calibration entry | +| UISm | `UISm.cpp/h` | ✔ StateSmith | Screen/menu navigation (SPLASH→HOME→menus) | +| PowerCalSm | `PowerCalSm.cpp/h` | ✔ StateSmith | Power-amplifier calibration sub-routine | +| ReceiveIQCalSm | `ReceiveIQCalSm.cpp/h` | ✔ StateSmith | RX I/Q balance calibration | +| TransmitCarrierCalSm | `TransmitCarrierCalSm.cpp/h` | ✔ StateSmith | TX carrier-null calibration | +| TransmitIQCalSm | `TransmitIQCalSm.cpp/h` | ✔ StateSmith | TX I/Q balance calibration | +| **HardwareSm** | `HardwareSm.cpp/h` | ✘ hand-written | Maps mode→RF/tune hardware state; drives the 4 cal sub-machines | + +> Two `CLAUDE.md`/`.ino` myths corrected here: there is **no "TuneSm"** (`Tune.cpp` is a +> function library, [[tune-frequency-control]]; the `TuneReceive/SSBTX/CWTX` states live in +> the hand-written HardwareSm), and **HardwareSm itself is not StateSmith-generated**. + +See [[mode-state-machine]], [[ui-state-machine]], [[tune-frequency-control]], +[[hardware-state-machine]]. + +## Execution flow + +- **`setup()`** (in `Globals.cpp`) — initialize display, audio, RF/filter boards, and + front panel; load settings from persistent storage; start the state machines; arm a + 1 ms timer for state-machine DO events. +- **`loop()`** (in [[main-loop]], `Loop.cpp`) — runs continuously, ~10 ms/iteration: + shutdown check → CW key debounce → poll front panel → poll CAT → consume queued events → + update hardware → run DSP → refresh display (spectrum rate-limited). +- **`tick1ms()`** (in `PhoenixSketch.ino`) — 1 ms interrupt dispatching DO events to + ModeSm (CW keyer timing) and UISm (menu timeouts). + +Input is **event-driven**: interrupt handlers enqueue `InterruptType` events into a 16-slot +FIFO that the main loop drains via `ConsumeInterrupt()`. See [[main-loop]] for the event +list and queue semantics. + +## Module map + +**Hardware control** — [[rf-board]] (Si5351 VFO, TX/RX switching, attenuators), +[[filter-boards]] (LPF/BPF relay banks, AD7991 power sensing), [[front-panel]] +(encoders/buttons). + +**Signal processing** — [[dsp-chain]] (DSP.cpp routing/AGC, DSP_FFT spectrum, DSP_FIR +filters, DSP_Noise NR, DSP_CWProcessing), plus MainBoard_AudioIO codec interface. + +**User interface** — [[display-subsystem]] (RA8875 12-pane layout, home/menus/calibration +screens), [[ui-state-machine]]. + +**Radio control** — [[mode-state-machine]], [[tune-frequency-control]], [[cat-control]] +(Kenwood TS-480-style emulation). + +**Configuration & persistence** — [[persistent-config]] (the `ED` EEPROM-data struct in +`SDT.h`, `Storage.cpp`, `ParamSave.cpp`, `Config.h`). + +## Hardware target + +- **MCU**: Teensy 4.1 (ARM Cortex-M7, 600 MHz) +- **RF**: Si5351 clock generator for quadrature VFO; relay-switched BPF/LPF banks +- **Audio**: real-time 48/96/192 kHz via the OpenAudio_ArduinoLibrary +- **Display**: RA8875-driven TFT +- **Front panel I/O**: MCP23017 I²C GPIO expanders; rotary encoders + +## Heritage + +Phoenix descends from Frank Dziock DD4WH's **Teensy Convolution SDR**, heavily reworked by +the T41-EP community. See [[code-heritage]] for the lineage and the multi-author history. + +## Testing + +Unit tests use **Google Test + CMake** under `code/test/`, with Arduino, Si5351, GPIO, and +audio interfaces mocked so logic and state transitions run on a host machine. See +`wiki/CLAUDE.md` for how the wiki tracks design decisions discovered while testing. diff --git a/wiki/firmware/persistent-config.md b/wiki/firmware/persistent-config.md new file mode 100644 index 0000000..5878e65 --- /dev/null +++ b/wiki/firmware/persistent-config.md @@ -0,0 +1,86 @@ +--- +title: Persistent Configuration (ED struct, Storage, ParamSave) +type: module +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [config, ed-struct, littlefs, sdcard, json, persistence, globals, bands] +source_refs: [] +related: ["[[overview]]", "[[main-loop]]", "[[tune-frequency-control]]", "[[hardware-state-machine]]", "[[iq-imbalance-correction]]", "[[dsp-chain]]"] +--- + +# Persistent Configuration + +How the radio's operating state and calibration survive power cycles. The data backbone every +other module reads from. + +## `ED` — the single source of truth + +`ED` is one global instance of `struct config_t` (`SDT.h:264-331`). It holds **all runtime +operating configuration and calibration**, with sensible inline defaults. Field groups: + +| Group | Fields (selected) | +|---|---| +| Audio / DSP | `agc`, `audioVolume`, `rfGainAllBands_dB`, `nrOptionSelect`, `ANR_notchOn`, `currentMicGain` | +| Tuning | `activeVFO`, `currentBand[2]`, `centerFreq_Hz[2]`, `fineTuneFreq_Hz[2]`, `stepFineTune`, `freqIncrement`, `freqCorrectionFactor`, `lastFrequencies[band][3]` | +| Modulation/CW | `modulation[2]`, `keyType`, `currentWPM`, `keyerFlip`, `CWToneIndex`, `CWFilterIndex`, `sidetoneVolume`, `decoderFlag` | +| Spectrum/display | `spectrum_zoom`, `spectrumScale`, `spectrumNoiseFloor[band]`, `spectrumFloorAuto`, `dbm_calibration[band]` (S-meter) | +| Equalizer | `equalizerRec[14]`, `equalizerXmt[14]` | +| Power / PA | `powerOutCW[band]`, `powerOutSSB[band]`, `PA100Wactive`, `PowerCal_20W/100W_Psat_mW[band]`, `…_kindex[band]`, `…_threshold_W`, `…_DSP_Gain_correction_dB` | +| Calibration | `IQAmp/PhaseCorrectionFactor[band]` (RX), `IQXAmp/XPhaseCorrectionFactor[band]` (TX), `DCOffsetI/Q[band]` (carrier null), `XAttenCW[band]`, `RAtten[band]`, `SWR_F/R_SlopeAdj/Offset[band]` | +| Routing | `antennaSelection[band]` | + +Many fields are **per-band arrays** (`NUMBER_OF_BANDS = 13`). The calibration arrays are +written by the routines in [[hardware-state-machine]] / [[iq-imbalance-correction]] and the +power-cal tanh fit in [[tune-frequency-control]]; the tuning fields by +[[tune-frequency-control]]; the DSP fields by [[dsp-chain]]. + +> **Naming gotcha:** `ED` stands for "EEPROM Data" and the `.ino` says settings are saved to +> "EEPROM" — but the Teensy 4.1 has no true EEPROM and the implementation actually uses +> **LittleFS + SD card JSON** (below). The name is historical. Logged in [[documentation-todos]]. + +## Supporting definitions +- **`Config.h`** — compile-time constants: pin assignments, `NUMBER_OF_BANDS`, default WPM / + band / frequencies, feature flags. (Compile-time config vs. `ED`'s runtime config.) +- **`Globals.cpp`** — definitions of everything declared `extern` in `SDT.h`: `ED` itself, + `SampleRate`, the `hardwareRegister`, the state-machine instances (`modeSM`, `uiSM`, …), the + `SR[]` sample-rate table, and the `bands[]` table. Also `ComputeDitDuration` etc. +- **`bands[]`** — per-band static data (edges `fBandLow/High_Hz`, filter cuts + `FLoCut/FHiCut_Hz`, type `HAM_BAND`/etc., name). Read constantly by tuning, filtering, and + the TX interlock (`IsTxAllowed`). + +## Persistence — `Storage.cpp` (LittleFS + SD, JSON) + +Not a raw struct dump — `ED` is serialized **field-by-field as JSON** via **ArduinoJson** +(`doc["agc"] = ED.agc; …`, `Storage.cpp:56+`), which is robust to struct-layout changes (fields +are matched by name, not offset). Backends: +- **`LittleFS_Program myfs`** — ~1 MB of the Teensy **program flash** (primary store). +- **`SD` card** (`BUILTIN_SDCARD`) — optional secondary/portable copy. + +Public API (`Storage.h`): +- `InitializeStorage()` — mount LittleFS + (if present) SD. +- `SaveDataToStorage(bool savetosd)` — serialize `ED` → LittleFS, and to SD when `savetosd`. +- `RestoreDataFromStorage()` / `RestoreDataFromSDCard()` — deserialize back into `ED`. +- `PrintEDToSerial()` — dump for debugging. + +`ED` is restored at startup and saved on graceful shutdown (`ShutdownTeensy()` in +[[main-loop]]) and on demand (e.g. after calibration). + +## `ParamSave.cpp` — calibration scratch (not the main store) + +A small **RAM** backup area, distinct from `Storage`: 5 variable slots + 3 array slots +(≤256 bytes each, `ParamSave.h:26-28`). `SaveVariable`/`RestoreVariable`, +`SaveArray`/`RestoreArray`. Used to **stash an `ED` field before twiddling it during +calibration** so it can be rolled back if the user cancels — a transient undo buffer, not +persistent storage. + +## Built-In Test +`struct BIT` (`SDT.h:334`) holds built-in-test results, surfaced by the `iBITDISPLAY` event +([[main-loop]]) and the UISm `BIT` screen ([[ui-state-machine]]). + +## Open questions +- Full JSON schema vs. struct (is every `ED` field persisted, or a subset?). +- Versioning/migration: what happens when the JSON on flash predates a new `ED` field + (ArduinoJson leaves it at the default — confirm and document). +- LittleFS-vs-SD precedence on restore, and corruption/again handling. +- Rename note: should `ED`/"EEPROM" terminology be updated in source to reflect LittleFS. diff --git a/wiki/firmware/real-time-constraints.md b/wiki/firmware/real-time-constraints.md new file mode 100644 index 0000000..96875d5 --- /dev/null +++ b/wiki/firmware/real-time-constraints.md @@ -0,0 +1,38 @@ +--- +title: Real-Time Constraints & Timing Budget +type: concept +status: draft +created: 2026-06-08 +updated: 2026-06-09 +tags: [real-time, timing, audio-buffers, loop-budget, spectrum] +source_refs: [] +related: ["[[overview]]", "[[main-loop]]", "[[dsp-chain]]", "[[display-subsystem]]"] +--- + +# Real-Time Constraints & Timing Budget + +Phoenix is a soft-real-time system: missing the audio deadline produces audible glitches. +The timing rules (from the `.ino` header) that constrain the whole design: + +- **Main loop**: each `loop()` pass must complete in **~10 ms** or the audio buffers + overflow. `loop()` is `FASTRUN` (RAM-resident) for speed. See [[main-loop]]. +- **Spectrum refresh**: the redraw period is `≈ NCHUNKS × T_loop` (the trace is drawn one + chunk per `loop()`), so `SPECTRUM_REFRESH_MS` is a weak lever and can even *backfire* via + beating. Cutting the per-frame draw cost let `NCHUNKS` drop from 8 → 5 (11.7 → 18.8 fps, + shipped 2026-05-30). Full analysis: [[spectrum-refresh-floor]]. +- **Display updates**: pane-based with **stale flags** so only changed regions redraw + ([[display-subsystem]]). +- **CW keyer**: the **1 ms `tick1ms()`** timer guarantees precise dit/dah timing + independent of loop jitter ([[mode-state-machine]]). +- **State-machine transitions**: deterministic and low-latency by construction + ([[state-machine-architecture]]). + +## Why it matters for changes +Any new work in the loop path (DSP, display, CAT, front-panel polling) spends part of the +10 ms budget. The `encoder-i2c-speed` branch exists because I²C polling of the front panel +can eat into this budget — see [[front-panel]] (the encoder-i2c-speed servicing design). + +## To flesh out +- [ ] Measure the actual per-stage time budget (there is a `timing-measurement` skill). +- [ ] Document audio buffer depth and the exact overflow threshold. +- [ ] Reconcile the 200 ms `.ino` figure with the measured spectrum floor. diff --git a/wiki/firmware/rf-board.md b/wiki/firmware/rf-board.md new file mode 100644 index 0000000..2ae6550 --- /dev/null +++ b/wiki/firmware/rf-board.md @@ -0,0 +1,119 @@ +--- +title: RF Board & Si5351 Quadrature VFO (RFBoard) +type: module +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [rf, si5351, vfo, quadrature, attenuator, tr-switch, hardware-abstraction] +source_refs: [sources/t41-ep-schematics] +related: ["[[overview]]", "[[rf-board-electronics]]", "[[tune-frequency-control]]", "[[hardware-state-machine]]", "[[filter-boards]]", "[[ssb-phasing-method]]", "[[iq-quadrature-sampling]]", "[[iq-imbalance-correction]]", "[[hardware-platform]]", "[[i2c-bus-map]]", "[[t41-ep-schematics]]"] +--- + +# RF Board & Si5351 Quadrature VFO (RFBoard) + +**Files:** `RFBoard.cpp` (~36 KB), `RFBoard.h`, plus a vendored/modified Etherkit Si5351 +driver `RFBoard_si5351.cpp` (~49 KB) / `.h`. + +The hardware-abstraction layer for the RF board: a clean, mockable API (used heavily in the +unit tests) over the **Si5351 clock generator** (the quadrature LO), **step attenuators**, +**TX/RX switching**, **modulation routing**, and the **calibration loopback**. All hardware +reconfiguration is funneled through here by `HandleTuneState()`/`HandleRFHardwareStateChange()` +in [[hardware-state-machine]], using the frequency math from [[tune-frequency-control]]. + +## Three VFOs on one Si5351 + +| VFO | Si5351 outputs | PLL | Purpose | +|---|---|---|---| +| **RX** | CLK0 + CLK1 (`CLK0RX`/`CLK90RX`) | PLLA | quadrature LO for RX I/Q | +| **TX** | CLK4 + CLK5 (`CLK0TX`/`CLK90TX`) | PLLB | quadrature LO for SSB TX | +| **CW** | CLK6 (`CLKCW`); CLK2 single-VFO | — | single-output CW carrier | + +RX on **PLLA** and TX on **PLLB** lets the two run at independent frequencies simultaneously +(`RFBoard.cpp:388,403`) — needed for the dual-VFO TX-spectrum monitor trick +([[tune-frequency-control]]). On single-VFO boards `SetTXVFOFrequency` just falls back to +`SetRXVFOFrequency` (`RFBoard.cpp:535`), gated by `HasDualVFOs()`. + +The `HasDualVFOs()` fallback is the firmware accommodation for **older (pre-V12.8) single-Si5351 +boards**, where one shared quadrature pair (CLK0/CLK1) served both RX and TX mixers (CW still on +CLK2). The chip-level board-revision detail lives in [[rf-board-electronics]]. + +## Quadrature generation — the heart of it + +SSB by the phasing method ([[ssb-phasing-method]]) needs an LO in **two copies 90° apart**. +Phoenix produces them from two Si5351 clocks on the **same PLL**, by two different techniques +depending on frequency (`SetRXVFOFrequency`, `RFBoard.cpp:483`): + +- **≥ ~3.2 MHz (multisynth divider ≤ 126):** set both clocks to the same frequency, then write + the **phase-offset register** of CLK90 equal to the multisynth divider value. The phase + register counts in VCO half-periods, so "phase = divider" is a quarter-cycle = **90°** + (`set_phase(CLK90RX, rxmultiple)`, `RFBoard.cpp:501`). A `pll_reset` aligns the outputs. +- **< 3.2 MHz (divider > 126):** the phase register can't reach 90°, so Phoenix uses the + **TJ-Labs timed-delay technique** (`RFBoard.cpp:506-523`): set both clocks **4 Hz low**, + align them, set CLK0 to the target, wait a precise delay (~58.5 ms — a quarter of the 4 Hz + beat period), then set CLK90 to the target. The accumulated beat is exactly 90°. Interrupts + are disabled (`cli()/sei()`) so the delay is accurate; source: + (cited in code). + +Two important implementation details: +- **`EvenDivisor()`** forces an even integer multisynth divider — required for clean, + glitch-free phase alignment. +- **PLL-only retune optimization:** while a frequency change stays within the same divider + ("multiple") range, only the PLL is re-programmed, not the multisynth/phase — minimizing I²C + traffic per encoder detent (`RFBoard.cpp:492-495`). The expensive full re-setup only happens + when crossing a divider boundary. + +## Frequency units +The VFO frequency is carried in **Hz × 100 (centi-Hz, 0.01 Hz resolution)**: +`SetRXVFOFrequency` takes `frequency_cHz` documented in the `.cpp` as "(Hz × 100)" +(`RFBoard.cpp:481`), matching the Etherkit `SI5351_FREQ_MULT = 100` and `HandleTuneState`'s +`centerFreq*100`. The `_cHz` suffix names this correctly — these are centi-Hz. (Earlier code +used a `_dHz`/"decihertz" naming, which was a misnomer; all uses have since been renamed to +`cHz`.) + +> Branch note (2026-06-16): the `_dHz`→`_cHz` symbol rename is **not yet present on +> `encoder-i2c-speed`** — that working tree still shows `_dHz` identifiers (docstrings already +> flag the misnomer). This page reflects the intended/renamed state; expect it to match once the +> rename branch merges. + +`SetFrequencyCorrectionFactor()` applies the crystal ppb correction (from frequency +calibration, [[hardware-state-machine]]) via the Si5351 `set_correction`. + +## Other hardware controls +- **Step attenuators** — independent TX and RX, **0–31.5 dB in 0.5 dB steps**, clamped/rounded + (`SetRXAttenuation`/`SetTXAttenuation`). `SetAttenuator` writes `round(2·atten_dB) & 0x3F` + (the GPIO value is the **attenuation in dB × 2**) to `writeGPIOA` (RX) / `writeGPIOB` (TX) + (`RFBoard.cpp:276,67-68,102-103`) on an **MCP23017** GPIO expander; `GetRFMCPRegisters` exposes + the register for tests. Used for RX gain and TX power setting ([[tune-frequency-control]] power + cal). The GPIO-bit → PE4312 wiring and per-revision designators are in [[rf-board-electronics]]. +- **VFO output power / enable** — `SetRXVFOPower` etc. select Si5351 drive (2/4/6/8 mA); + `Enable/DisableRXVFOOutput` toggle the CLK outputs. +- **TX/RX switching** — `SelectTXMode`/`SelectRXMode` drive the T/R relays. +- **Modulation routing** — `SelectTXSSBModulation`/`SelectTXCWModulation`. +- **CW keying** — `CWon`/`CWoff` key the CW carrier between Morse elements (driven by + [[mode-state-machine]]'s keyer states via [[hardware-state-machine]]). +- **Calibration loopback** — `EnableCalFeedback` routes TX output back into the RX input for + I/Q calibration ([[iq-imbalance-correction]]); `DisableCalFeedback` restores normal routing. + +## Physical hardware +The chip-level electronics this module drives — the dual-Si5351 LO (and the single-Si5351 board +revisions), the PE4312 attenuators with their GPIO-bit → pin table and per-revision designators, +the ADT/PSA/MAR/MASWSS mixer front end, and the I/Q baseband op-amps — are documented in +**[[rf-board-electronics]]** (schematic-traced against `T41-RF-board-V012`, +[[t41-ep-schematics]]). See also the platform-level [[hardware-platform]]. + +## Testability +The header exposes `getRXTXState`, `getCWState`, `getCalFeedbackState`, `getModulationState`, +`GetRFMCPRegisters`, `ResetVFOState`, `SetDualVFOs` — explicit hooks so the unit tests can +assert hardware state without a physical board (the abstraction pattern CLAUDE.md cites as the +template for new hardware modules). + +## Open questions +- The Si5351 driver is a modified Etherkit library — document the local modifications vs. + upstream (the `set_freq_manual` + manual phase path). +- Exact `EvenDivisor` policy and the divider-boundary frequencies where full re-setup occurs. +- ~~Which physical attenuator part sits behind the MCP23017.~~ **Resolved:** PE4312 digital + step attenuators on the T41_Attenuator_Daughter board ([[t41-ep-schematics]], 2026-06-14). +- ~~Which MCP23017 (U21) port bits map to the PE4312 parallel inputs.~~ **Resolved (2026-06-14/15):** + GPIOA→RX attenuator, GPIOB→TX attenuator, low 6 bits = attenuation word (0.5 dB LSB); table + + per-revision designators above. The **upper bits GPA6/7 and GPB6/7 are unused / not connected** + (owner-confirmed 2026-06-15) — each bank carries only the 6-bit attenuation word. diff --git a/wiki/firmware/spectrum-refresh-floor.md b/wiki/firmware/spectrum-refresh-floor.md new file mode 100644 index 0000000..55b77d9 --- /dev/null +++ b/wiki/firmware/spectrum-refresh-floor.md @@ -0,0 +1,66 @@ +--- +title: Spectrum Refresh Rate Floor & Optimization +type: decision +status: draft +created: 2026-06-09 +updated: 2026-06-09 +tags: [spectrum, waterfall, display, refresh-rate, nchunks, real-time, performance] +source_refs: [] +related: ["[[real-time-constraints]]", "[[zoom-fft]]", "[[display-subsystem]]", "[[dsp-chain]]", "[[main-loop]]"] +--- + +# Spectrum Refresh Rate Floor & Optimization + +A recorded investigation (2026-05) into why the spectrum/waterfall couldn't be sped up by +tweaking `SPECTRUM_REFRESH_MS`, and what actually moved the frame rate. Source: the full study +in `code/docs/refresh_rate_study/` (`Spectrum_Refresh_Rate_Study.md`, +`Frame_Rate_Optimization_Plan.md`). + +## The floor — why `SPECTRUM_REFRESH_MS` is a weak lever +`ShowSpectrum()` draws the trace in `NCHUNKS` column-groups, **one chunk per `loop()`**, and +each `loop()` is paced by the audio/DSP block rate (`T_loop ≈ 10.67 ms`, +[[real-time-constraints]]). So the realized redraw period is always +**`≈ NCHUNKS × T_loop`** — an integer multiple of the loop period. + +- At the original `NCHUNKS = 8`: floor ≈ `8 × 10.67 ≈ 85 ms` (**11.7 fps**). +- `SPECTRUM_REFRESH_MS` only re-arms the redraw on a free-running grid; **below the floor it + can't help**, and the realized rate is **non-monotonic** — beating between that grid and the + loop cadence made 65–72 ms collapse to ~149 ms (6.7 fps), *worse* than 100 ms. (Pre-ship sweet + spot was 75–90 ms; 80 ms was used.) + +## What actually moved it — cut the fixed per-frame draw cost +`NCHUNKS` only *spreads* a **fixed ~57 ms/frame draw cost** across loops; you can't safely lower +it until that cost is cut, because each `loop()` must still finish its audio block in 10.67 ms. +Lowering `NCHUNKS` below 8 on the original code **broke the receiver** (IQ-queue overflow, SNR +negative). The dominant costs were the full-frame BTE completion blit (~13.8 ms busy-wait), the +bandwidth-bar `fillRect`, the 512 `drawLine`s, and Pass-2 (audio-spectrum bars + S-meter). + +## SHIPPED outcome (2026-05-30): 11.7 → 18.8 fps +On branch `refresh_rate_update`, final config in `MainBoard_DisplayHome.cpp`: +`NCHUNKS = 5`, `SPECTRUM_REFRESH_MS = 50`, `AUDIO_SPECTRUM_DECIMATE = 2`, `WATERFALL_DECIMATE = 2`. +Three changes made `NCHUNKS = 5` safe: +1. **Generalized chunk arithmetic** to rounded boundaries so any `NCHUNKS` (incl. non-divisors of + 512 like 5/6/7) sums to 512. +2. **Throttled Pass-2** (audio-spectrum bars + S-meter, ~13 ms) to every 2nd frame. +3. **Throttled the waterfall scroll BTE** to every 2nd frame (phase-offset from the audio pass). + +Trade-off: audio-spectrum, S-meter, and waterfall update at ~9.4 fps (half the trace rate), and +trace cadence is jittery (~43–63 ms). Reviewed live and approved. (Smoother 15.6 fps alternative: +`NCHUNKS = 6`, `WATERFALL_DECIMATE = 1`. Full revert: `NCHUNKS = 8`, both decimates = 1.) + +## Ruled out / remaining headroom +- **Teensy framebuffer + `writeRect`** — ruled out: the RA8875 is on **SPI**, so a full-frame + push is ~40 ms (*slower* than the current chip-accelerated `drawLine` path). A test froze the + panel. +- **`NCHUNKS < 5`** — not reachable without a faster display bus or drawing *less* (e.g. 256 + bins). +- **Real next unlock:** make the BTE blits async (drop the `while(tft.readStatus())` busy-wait) + — but PJRC `RA8875::BTE_move` busy-waits internally, so this needs library surgery (high risk). + Hardware vertical-scroll registers for the waterfall would enable `NCHUNKS ≈ 4` (~23 fps). + +## Rule of thumb +> When asked to speed up the spectrum/waterfall, target **`NCHUNKS` and the per-frame draw +> cost**, not `SPECTRUM_REFRESH_MS` — and warn that lowering the refresh define can *backfire* +> via beating, and that lowering `NCHUNKS` without first cutting draw cost breaks the receiver. + +See [[real-time-constraints]] for the loop budget and [[zoom-fft]] for how the PSD is produced. diff --git a/wiki/firmware/state-machine-architecture.md b/wiki/firmware/state-machine-architecture.md new file mode 100644 index 0000000..f8590f1 --- /dev/null +++ b/wiki/firmware/state-machine-architecture.md @@ -0,0 +1,51 @@ +--- +title: State-Machine Architecture (StateSmith) +type: concept +status: draft +created: 2026-06-08 +updated: 2026-06-09 +tags: [state-machine, statesmith, drawio, codegen, architecture] +source_refs: [] +related: ["[[overview]]", "[[mode-state-machine]]", "[[ui-state-machine]]", "[[tune-frequency-control]]", "[[hardware-state-machine]]"] +--- + +# State-Machine Architecture (StateSmith) + +Phoenix routes **all hardware state changes through state machines** so behavior is +deterministic and testable. This page is the shared "how the SM layer works" reference; the +individual machines have their own pages. + +## Generation pipeline +Most machines are **generated by StateSmith** from `.drawio` UML state diagrams: + +``` +edit *.drawio ──StateSmith──▶ Sm.cpp / Sm.h (do NOT hand-edit the .cpp) +``` + +**Rule:** to change generated behavior, edit the diagram and regenerate — never patch the +generated `.cpp`. (CLAUDE.md: "Modifying state machines: update `.drawio` diagrams and +regenerate with StateSmith.") + +**Six** machines are StateSmith-generated (each has a `.drawio`); **HardwareSm is +hand-written** (no diagram). There is **no separate "TuneSm"** (a `CLAUDE.md`/`.ino` myth) — +per-mode VFO selection is the hand-written `HandleTuneState()` *inside* HardwareSm, using the +math in [[tune-frequency-control]]. + +## The machines +| Page | File | Generated | +|---|---|---| +| [[mode-state-machine]] | `ModeSm` | ✔ | +| [[ui-state-machine]] | `UISm` | ✔ | +| [[hardware-state-machine]] — PowerCalSm, ReceiveIQCalSm, TransmitCarrierCalSm, TransmitIQCalSm | (4 sub-SMs) | ✔ | +| [[hardware-state-machine]] — HardwareSm coordinator | `HardwareSm` | ✘ hand-written | + +## Event model +States advance on two kinds of input: +- **Discrete events** — `InterruptType` values dispatched by [[main-loop]] from the FIFO. +- **DO events** — periodic ticks from the 1 ms timer (`tick1ms()`), used for keyer timing + (ModeSm) and menu timeouts (UISm). + +## To flesh out +- [ ] Where the `.drawio` sources live and the exact StateSmith invocation/version. +- [ ] The generated-code conventions (event enums, dispatch function shape). +- [ ] How SM unit tests are structured in `code/test/`. diff --git a/wiki/firmware/tune-frequency-control.md b/wiki/firmware/tune-frequency-control.md new file mode 100644 index 0000000..ea1af4f --- /dev/null +++ b/wiki/firmware/tune-frequency-control.md @@ -0,0 +1,116 @@ +--- +title: Frequency Control & Tuning Math (Tune.cpp) +type: module +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [tuning, vfo, frequency, fs-over-4, cw-offset, fast-tune, power-calibration] +source_refs: [] +related: ["[[overview]]", "[[hardware-state-machine]]", "[[rf-board]]", "[[mode-state-machine]]", "[[iq-quadrature-sampling]]", "[[dsp-chain]]"] +--- + +# Frequency Control & Tuning Math (Tune.cpp) + +**Files:** `Tune.cpp` (~15 KB), `Tune.h`. + +> ⚠️ **Myth-buster.** `CLAUDE.md` and `PhoenixSketch.ino` describe a "TuneSm" frequency-control +> **state machine** in `Tune.cpp` with states `TuneReceive / TuneSSBTX / TuneCWTX`. That is +> wrong on both counts: **`Tune.cpp` contains no state machine** — it is a library of pure +> functions — and the `TuneState` enum that *does* have those values lives in **`HardwareSm.cpp`** +> (`static TuneState tuneState`, dispatched by `HandleTuneState()`), see +> [[hardware-state-machine]]. This page documents the real `Tune.cpp`. (Logged in +> [[documentation-todos]].) + +`Tune.cpp` does two unrelated jobs: **frequency/tuning math** and **PA power-calibration +math**. They share a file but not a concept. + +## Two-stage tuning architecture + +Phoenix tunes in two stages — a coarse **hardware** step and a fine **software** step: + +1. **Coarse:** the Si5351 hardware VFO ([[rf-board]]) is parked at the band-center frequency. + `HandleTuneState(TuneReceive)` sets the RX VFO to `centerFreq_Hz` (`HardwareSm.cpp:651-654`). +2. **Fine:** a digital software mixer shifts within the captured passband. The displayed/operating + frequency is + + ``` + RXTX_freq = centerFreq_Hz − fineTuneFreq_Hz − SampleRate/4 (GetTXRXFreq, Tune.cpp:121) + ``` + + The fine-tune and the **−SampleRate/4** term are applied in the DSP, not the Si5351 — the + hardware LO stays put while you tune across the spectrum. `FreqShiftF()` in [[dsp-chain]] + performs the digital shift. + +### Why the −Fs/4 quarter-shift *(general DSP)* +Direct-conversion receivers have a **DC hole**: LO leakage, 1/f noise, and ADC DC offset all +pile up at 0 Hz, right where the signal of interest would sit. Phoenix offsets the digital +spectrum by **Fs/4** so the operating frequency lands a quarter-band away from DC, clear of +that junk, then shifts it back in software. The complex baseband ([[iq-quadrature-sampling]]) +makes the negative-frequency placement meaningful. (Fs/4 is also the cheapest possible +digital mix — multiplies are just ±1, ±j.) + +## The frequency functions + +| Function | Returns | Notes | +|---|---|---| +| `GetTXRXFreq(vfo)` | Hz | `centerFreq − fineTune − Fs/4` for a VFO (`Tune.cpp:121`) | +| `GetTXRXFreq_dHz()` | **centi-Hz** (×100) | same, active VFO, in Si5351 resolution units (`Tune.cpp:110`) | +| `GetCWTXFreq_dHz()` | centi-Hz | TXRX ± CW tone offset; **LSB subtracts, USB adds** (`Tune.cpp:132`) | +| `ResetTuning()` | — | fold `fineTune` into `centerFreq`, zero `fineTune` (recenter, same freq) (`Tune.cpp:146`) | +| `GetBand(freq)` | band idx or −1 | linear search of `bands[]` (`Tune.cpp:159`) | + +Frequencies are carried in **centi-Hz (Hz×100)** internally for Si5351 tuning resolution. (The +`_dHz` suffix and the source docstrings say "deci-Hz", but ×100 is **centi**-Hz — a historical +misnomer; see [[rf-board]] and [[documentation-todos]].) + +## Fine-tune control & limits — `AdjustFineTune()` (`Tune.cpp:37`) + +Each tuning-encoder detent adds `ED.stepFineTune × filter_change` to `fineTuneFreq_Hz`. Then it +clamps the result so you can't tune outside what's usable: +- **Visible-window limit:** fine tune must stay within the on-screen span, which shrinks with + zoom — `±SampleRate/2` at zoom 0, `±(SampleRate / 2^zoom)/2` otherwise (`Tune.cpp:64-74`). + See [[zoom-fft]]. +- **Band-edge margin:** keeps the passband a filter-bandwidth away from the band edge, using + the mode's `FLoCut_Hz`/`FHiCut_Hz` (`Tune.cpp:77-94`). +- **Fast tune** (`#ifdef FAST_TUNE`): if the encoder is spun quickly (`FT_trig = 4` steps each + under `FT_on_ms = 100` ms apart) the step jumps to `FT_step = 1000` Hz for rapid QSY, and + reverts after a `FT_cancel_ms = 500` ms pause (`Tune.cpp:20-57`). + +`AdjustBand()` in [[main-loop]] re-derives the band from the new frequency, keeping the last +valid band if you tune outside the ham bands (so demod keeps working). + +## Per-mode VFO selection lives in HardwareSm +The actual "which formula → which VFO register" dispatch is `HandleTuneState()` +(`HardwareSm.cpp:639`), which also selects LPF/BPF band, antenna, PA, and refreshes the FIR +mask before programming the VFO. Highlights: +- `TuneReceive` → RX VFO = `centerFreq` (fine tune done in DSP). +- `TuneSSBTX` → TX VFO = `GetTXRXFreq_dHz()`; on dual-VFO radios the RX VFO is set to + **freq/3** to watch the 3rd harmonic for the TX spectrum display (fundamental too strong) + (`HardwareSm.cpp:662-666`). +- `TuneCWTX` → CW VFO = `GetCWTXFreq_dHz()` (tone offset applied). +- `TuneCalReceiveIQ` / `TuneCalTransmitIQ` → calibration-specific VFO placement (TX-IQ offsets + the TX VFO from RX so the image sits far from DC). See [[hardware-state-machine]], + [[iq-imbalance-correction]]. + +## PA power-calibration math (also in this file) +Unrelated to tuning but physically co-located. The PA output is modeled as a saturating +**tanh** curve (`Tune.cpp:168-204`): + +``` +Pout = Psat · tanh( k · 10^(−A/10) ) A = attenuation in dB +``` + +- `attenToPower_mW` / `powerToAtten_dB` — forward/inverse of the model. +- `CalculateCWAttenuation(P)` / `CalculateSSBTXGain(P)` — pick attenuation (CW) or gain (SSB) + for a requested power, and select the 20 W vs 100 W PA at `PowerCal_20W_to_100W_threshold_W`. +- `FitPowerCurve` / `fitTanhModel` — a **Gauss-Newton least-squares** fit of `(Psat, k)` from + measured (attenuation, power) points, used by the power-calibration routine. + +These back `PowerCalSm` in [[hardware-state-machine]]; the per-band `Psat`/`k` coefficients +live in the `ED` struct ([[persistent-config]]). *(Candidate for its own +power-calibration theory page.)* + +## Open questions +- Confirm the exact DSP site of the fine-tune software mix (`FreqShiftF`) and how `−Fs/4` + composes with it. +- The SSB-TX 3rd-harmonic-monitor trick — document the dual-VFO display path that consumes it. diff --git a/wiki/firmware/ui-state-machine.md b/wiki/firmware/ui-state-machine.md new file mode 100644 index 0000000..b15ec09 --- /dev/null +++ b/wiki/firmware/ui-state-machine.md @@ -0,0 +1,102 @@ +--- +title: UI State Machine (UISm) +type: module +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [state-machine, ui, menus, screens, splash, statesmith] +source_refs: [] +related: ["[[overview]]", "[[state-machine-architecture]]", "[[display-subsystem]]", "[[front-panel]]", "[[main-loop]]", "[[mode-state-machine]]"] +--- + +# UI State Machine (UISm) + +**Files:** `UISm.cpp` (~33 KB, **generated**), `UISm.h`, source diagram `UISm.drawio`. +StateSmith algorithm *Balanced2*. Do **not** hand-edit the `.cpp` — edit `UISm.drawio` and +regenerate ([[state-machine-architecture]]). + +## Role +UISm owns **which screen is shown and how menus navigate**. It decides *what* to display; the +[[display-subsystem]] (`MainBoard_Display*`) owns *how* to draw it, reading global state +read-only. UISm and [[mode-state-machine]] are siblings driven from the same [[main-loop]] +event stream — notably both receive the `CALIBRATE_*` events (UISm shows the cal screen, +ModeSm sequences the cal hardware). + +## States (`UISm.h:35-50`) + +13 states under `ROOT`: + +| State | Screen | Renderer | +|---|---|---| +| `SPLASH` | startup splash (timed) | — | +| `HOME` | main operating screen (spectrum, S-meter, VFO) | `MainBoard_DisplayHome` | +| `MAIN_MENU` | top-level menu | `MainBoard_DisplayMenus` | +| `SECONDARY_MENU` | sub-menu | `MainBoard_DisplayMenus` | +| `UPDATE` | parameter-adjust editor | (per-parameter) | +| `FREQ_ENTRY` | **Direct Frequency Entry (DFE)** | `MainBoard_DisplayDFE` | +| `EQUALIZER` | 14-band TX/RX EQ editor | `MainBoard_DisplayEqualizer` | +| `BIT` | Built-In Test results | — | +| `CALIBRATE_FREQUENCY` | frequency cal screen | `MainBoard_DisplayCalibration_Frequency` | +| `CALIBRATE_POWER` | power cal screen | `…_Power` | +| `CALIBRATE_RX_IQ` | RX I/Q cal screen | `…_RXIQ` | +| `CALIBRATE_TX_IQ` | TX I/Q cal screen | `…_TXIQ` | + +> Resolves the [[display-subsystem]] open question: **DFE = Direct Frequency Entry** (the +> `UISm_EventId_DFE` → `FREQ_ENTRY` state, `MainBoard_DisplayDFE`). + +## Events (`UISm.h:15-28`) and sources +All dispatched from [[main-loop]] (`UISm_dispatch_event(&uiSM, …)`): + +| Event | Source | +|---|---| +| `DO` | 1 ms `TimerInterrupt()` (`Loop.cpp:356`) — splash timeout | +| `MENU` / `SELECT` / `HOME` | button presses in `HandleButtonPress` (`Loop.cpp:419/413/425…`) | +| `DFE` | button (`Loop.cpp:564`) | +| `EQUALIZER`, `BIT`, `CALIBRATE_FREQUENCY/POWER/RX_IQ/TX_IQ` | menu actions (`Loop.cpp:1350-1386`) | + +## Transition map (verified from `UISm.cpp`) + +``` +SPLASH ──[DO: splashCount_ms ≥ splashDuration_ms]──▶ HOME + +HOME ──MENU──▶ MAIN_MENU ──SELECT──▶ SECONDARY_MENU ──SELECT──▶ UPDATE ──SELECT──▶ HOME + │ (HOME event from MAIN_MENU / SECONDARY_MENU / UPDATE returns to HOME) + │ + ├─DFE───────────▶ FREQ_ENTRY ─┐ + ├─EQUALIZER─────▶ EQUALIZER ─┤ + ├─BIT───────────▶ BIT ─┼─ each returns to HOME on the HOME event + ├─CALIBRATE_FREQUENCY ▶ … ────┤ + ├─CALIBRATE_POWER ▶ … ────┤ + ├─CALIBRATE_RX_IQ ▶ … ────┤ + └─CALIBRATE_TX_IQ ▶ … ────┘ +``` + +Two distinct shapes: +- **Menu drill-down** — a 3-level stack `HOME → MAIN_MENU → SECONDARY_MENU → UPDATE`, each + level entered by `SELECT`; `UPDATE`'s `SELECT` commits and returns to `HOME`. `HOME` event + pops straight back to `HOME` from any level. +- **Tool screens** — DFE, EQUALIZER, BIT and the four CALIBRATE screens hang directly off + `HOME` and are leaf states that only respond to `HOME` (return). They take no part in the + menu stack. + +## State variables (`UISm.h:63-73`) +- `splashDuration_ms` / `splashCount_ms` — splash timing (the `DO` tick counts up to the + duration, then → HOME). +- `mainMenuSelection` / `mainMenuLength`, `secondMenuSelection` / `secondMenuLength` — menu + cursor position and item count (the encoder moves the selection; `SELECT` descends). +- `clearScreen` — set true on `UPDATE` entry to force a full redraw. +- `uiUp` — opaque pointer to the current UI context (back-navigation target). + +## Interactions +- **Button routing** is state-aware: `HandleButtonPress` switches on `uiSM.state_id` + (`Loop.cpp:406,1003`) so the same physical button means different things per screen, and is + ignored entirely while [[mode-state-machine]] is transmitting (`Loop.cpp:395-403`). +- **Calibration** is dual-dispatched: the `CALIBRATE_*` event drives UISm (screen) **and** + ModeSm (into `CALIBRATION_STATES`, hardware) — see [[mode-state-machine]], + [[hardware-state-machine]]. + +## Open questions +- How encoder rotation maps to `mainMenuSelection`/`secondMenuSelection` movement (selection + is updated outside UISm, in the front-panel/menu code). +- What `uiUp` actually points at and how deep back-navigation works. +- The menu *content* model (where the menu item lists live) vs. UISm's structural states. diff --git a/wiki/hardware/filter-board-electronics.md b/wiki/hardware/filter-board-electronics.md new file mode 100644 index 0000000..d4d8a6c --- /dev/null +++ b/wiki/hardware/filter-board-electronics.md @@ -0,0 +1,83 @@ +--- +title: Filter Boards — Electronics (BPF / LPF / PA back-end, decoders, SWR sensing) +type: hardware +status: draft +created: 2026-06-16 +updated: 2026-06-16 +tags: [hardware, bpf, lpf, relays, decoders, ad8307, ad7991, swr, mcp23017, pa, antenna] +source_refs: [sources/t41-ep-schematics] +related: ["[[hardware-platform]]", "[[i2c-bus-map]]", "[[filter-boards]]", "[[rf-board-electronics]]", "[[t41-ep-schematics]]"] +--- + +# Filter Boards — Electronics + +The *physical* RF back-end boards that the [[filter-boards]] firmware module (`BPFBoard.cpp`, +`LPFBoard.cpp`, `LPFBoard_AD7991.cpp`) drives. This page owns the **electronics** — chips, +decoders, relays, and the schematic-traced decode chain; the firmware page owns the **code** +(the shared `hardwareRegister` model, the band-encoding macros, the SWR/power math). Three +separate physical boards back this one module ([[t41-ep-schematics]]). + +## BPF / exciter-filter board (`T41-exciter-filter-board`) +- **~22× MASWSS0179** RF switches + **SN74LVC1G04** inverters select the per-band band-pass + **L-C filter banks** (RX/TX image rejection). +- Band select via **MCP23017 (U35, 0x24)** ([[i2c-bus-map]]). +- Sits between exciter/receiver and the PA (J2 FROM EXCITE, J1 TO PA, J5 TO RECEIVE, J6 FROM LPF). + +## LPF / 100 W PA control board (`K9HZ_100W_11band_LPF-Control`) +**MCP23017 (U15, 0x25)** GPIO bits are decoded by dedicated logic — the firmware never +addresses relays directly, it just writes the encoded `hardwareRegister` bits ([[filter-boards]]): + +- **LPF band select** — **GPIOB[0:3]** (4-bit BCD) → **U12 CD74HC4514** 4→16 decoder (inputs + A0–A3 = pins 2,3,21,22): one of Y0–Y15 goes **HIGH**. Those 16 lines pass through the + **inverting** relay drivers **U9 + U10 (2× ULN2803)**, so every output is **HIGH except the + selected band's, which is pulled LOW**. The band-LPF relays are on an **external board** + reached via **J24 (LPF CTRL HI) / J25 (LPF CTRL LOW)**; a relay engages when its control pin + is driven **LOW**. **NF = 0b1111** (Y15) is the *No-Filter* bypass. The BCD codes + (`SDT.h:95-106`): 60 m=0000, 160 m=0001, 80 m=0010, 40 m=0011, 30 m=0100, 20 m=0101, + 17 m=0110, 15 m=0111, 12 m=1000, 10 m=1001, 6 m=1010, NF=1111. +- **Antenna select** — **GPIOB[4:5]** (2-bit) → **U2 74HC237** 3→8 decoder → **U4 ULN2803** → + **relays K4–K7** (on-board) → antenna ports ANT-1…4. +- **100 W PA route** — **GPIOB[7]** drives a spare **U4** channel directly → **relays K2/K3**, + switching the optional 100 W amplifier into the TX path. +- **BPF path routing** — **GPIOA[0:1]** (TXBPF/RXBPF) → **U5/U6** route the RX vs TX signal + through the external band-pass filter (between J15 and J18). + +So the on-board **HF41F relays K2–K7 are *not* the band LPFs** — K2/K3 = 100 W PA, K4–K7 = +antenna. The per-band LPF relays live on a separate external filter board (below). Also on this +board: 20 W and 100 W PA paths, transverter out, **KEY OUT**; PA control via +**IRF630 / L7808 / TC4428**. + +## External LPF filter board (`K9HZ_100W_11band_LPF-Filter`) +Receives the decoded band lines on **J26/J27** (LPF CTRL LOW/HI ← the control board's J24/J25) +as **band-named control nets** `B160M, B80M, B60M, B40M, B30M, B20M, B17M, B15M, B12M, B10M, +B6M` and `BNF`. Each net drives **2 of the 24 HF41F relays** (input + output switch), so there +is **one dedicated low-pass filter per band** — *not* shared band-groups. Each filter is a +**7th-order** LC ladder: **3 series inductors** (symmetric, outer pair equal + distinct middle) +plus shunt capacitors; **33 inductors total** (3 × 11 filtered bands; **BNF** has no inductors — +a straight-through bypass). Inductances descend with frequency, **5.21 µH / 4.73 µH** (160 m) +down to **0.188 µH / 0.170 µH** (6 m). + +The full band-select path therefore closes as: +``` +band BCD (GPIOB[0:3]) → U12 CD74HC4514 Yn (n = BCD) → U9/U10 ULN2803 (invert) + → J24/J25 → J27/J26 → B net → 2× HF41F relays → that band's 7-element LPF +``` +i.e. **decoder output Yn directly selects the band whose BCD = n** (Y0=60 m … Y10=6 m, Y15=NF). +*(Per-band exact L/C → cutoff table not yet tabulated; assignment by descending inductance vs. +band frequency.)* + +## Power / SWR sensing hardware +A directional-coupler transformer feeds **2× AD8307** *log* power detectors (**U14 = forward, +U19 = reflected**), read by **1× AD7991** 12-bit I²C ADC (**U20, 0x28/0x29**; **CH0 = forward, +CH1 = reflected**) against a **REF3440 4.096 V** reference on the ADC's Vin3/Vref pin +(schematic-confirmed, net-traced 2026-06-14). Because the AD8307 is **logarithmic**, the +default firmware applies the AD8307 transfer law (≈25 mV/dB, −84 dBm intercept) — the +conversion math lives in [[filter-boards]]. + +An optional **`USE_ANALOG_SWR`** build instead uses **linear diode detectors** on Teensy ADC +pins 26 (FWD) / 27 (REV) — different hardware, different (square-law) math, off by default. + +## Open questions +- Per-band exact L/C → cutoff frequency table for the external LPF board. +- AD7991 `REGISTER_SETUP` channel-select bits vs. the "CH0+CH1" comment (a firmware detail — + see [[filter-boards]]). diff --git a/wiki/hardware/hardware-platform.md b/wiki/hardware/hardware-platform.md new file mode 100644 index 0000000..0abe96c --- /dev/null +++ b/wiki/hardware/hardware-platform.md @@ -0,0 +1,162 @@ +--- +title: Hardware Platform (T41-EP) +type: hardware +status: stable +created: 2026-06-14 +updated: 2026-06-16 +tags: [hardware, teensy, t41-ep, board-stack, codec, i2c, platform] +source_refs: [sources/t41-ep-schematics] +related: ["[[overview]]", "[[i2c-bus-map]]", "[[rf-board-electronics]]", "[[filter-board-electronics]]", "[[rf-board]]", "[[filter-boards]]", "[[front-panel]]", "[[display-subsystem]]", "[[hardware-state-machine]]", "[[audio-io]]"] +--- + +# Hardware Platform (T41-EP) + +The physical radio Phoenix runs on: a **Teensy 4.1**-based **T41-EP** software-defined HF +transceiver built as a stack of interconnected boards. This page is the entry point for the +`hardware/` area — the *electronics the firmware drives*. For the **code** that drives each +board, follow the firmware module links; this page describes the silicon and how it is wired. + +> Source note: confirmed against the **KiCad schematics** ([[t41-ep-schematics]], V012-era) +> as of 2026-06-14, plus the firmware hardware-abstraction code (`Config.h`, board drivers, +> `MainBoard_AudioIO.cpp`). Chip part numbers and connectors are schematic-confirmed; a few +> pin-level wiring claims remain *(infer)* until nets are fully traced. + +## Compute core — Teensy 4.1 +- **MCU:** NXP i.MX RT1062, **ARM Cortex-M7 @ 600 MHz**, single-precision hardware FPU + DSP + extensions (used heavily by the CMSIS-DSP FIR/FFT routines — see [[multirate-decimation]], + [[fast-convolution-filtering]]). +- **Memory used by Phoenix:** tightly-coupled RAM for DSP buffers; `DMAMEM` region for audio + DMA buffers (the cold-boot uninitialized-`DMAMEM` class of bug is noted in + [[fast-convolution-filtering]] and [[noise-reduction]]). +- **Storage:** on-chip program flash hosts a **LittleFS** filesystem (~1 MB) for the JSON + config; an optional **SD card** (Teensy 4.1 built-in socket) mirrors it. See + [[persistent-config]] — there is **no true EEPROM** despite the historical `EEPROMData` name. +- **USB:** dual serial (Arduino "Dual Serial"): one port for debug, `SerialUSB1` for + **CAT control** ([[cat-control]]). +- **Three I²C buses** (Wire/Wire1/Wire2) fan out to the peripheral boards — see [[i2c-bus-map]]. + +## The board stack +(Reference designators from the [[t41-ep-schematics]].) + +| Board | Key chips | Role | Firmware | +|---|---|---|---| +| **Main board** (`V012`) | Teensy 4.1 (U8), PCM1808 ADC (U6), PCM5102 DAC (U5), ATtiny85 (U4) + SUP90P06 P-FETs (soft power) | Compute, RX I/Q digitizing, speaker audio, all I/O fan-out, off-board RA8875 drive | [[display-subsystem]], audio (below) | +| **Teensy Audio Board** | **SGTL5000** codec (U7) | Mic input + TX I/Q output path (the *only* SGTL5000) | audio (below) | +| **RF board** (`V012`) | Dual-Si5351 + PE4312 daughterboards, ADT1-1/ADT2-1T mixer xfmrs, PSA-8A+/MAR-3SM+ MMICs, AD8599/OPA2209/MC33078 I/Q amps, MCP23017 (U21, 0x27) | Quadrature LO + mixer, T/R switching, RX/TX attenuators, cal loopback | [[rf-board]] | +| **BPF / exciter-filter board** | ~22× MASWSS0179 RF switches, MCP23017 (U35, 0x24) | Switched per-band band-pass filter banks (RX/TX image rejection) | [[filter-boards]] | +| **LPF / 100 W PA control board** | HF41F relays + ULN2803, CD74HC4514/74HC237 decoders, 2× AD8307 + AD7991 (U20, 0x28/0x29), MCP23017 (U15, 0x25) | Band-LPF decode + PA/XVTR/antenna routing (4 ANT ports), SWR/power sensing (filters on a separate board) | [[filter-boards]] | +| **Front panel** | 2× MCP23017 (0x20/0x21) | Encoders, buttons, LEDs | [[front-panel]] | + +The firmware treats each board through a clean driver module (the "hardware abstraction" +principle, [[overview]]), which is what lets the unit tests mock the hardware. + +## Audio front/back end +Audio I/O is a **4-channel (quad) I²S** interface via the OpenAudio (Teensy Audio fork) +graph (`MainBoard_AudioIO.cpp` — the software side is [[audio-io]]). There is **one physical SGTL5000** (on the Teensy Audio Board, +U7); the main board does its own conversion with a **PCM1808** ADC (U6) and **PCM5102** DAC +(U5). Three converters, three jobs (schematic-confirmed, [[t41-ep-schematics]]): +- **SGTL5000** (Audio Board, `sgtl5000_teensy`, I²C addr **LOW**) — **double-duty**: microphone + **in** (SSB voice) *and* exciter **TX I/Q out** (`MainBoard_AudioIO.cpp:450-457`). +- **PCM1808** (U6, main board) — **RX I/Q in** (ADC). +- **PCM5102** (U5, main board) — **speaker audio out** (DAC). + +> ⚠ **Code-naming quirk (not a missing chip).** `MainBoard_AudioIO.cpp` declares a control +> object **`pcm5102_mainBoard` typed `AudioControlSGTL5000`** (addr HIGH) and the header says +> "two SGTL5000 codecs." In fact that object represents the **PCM5102 speaker DAC**, *not* a +> second SGTL5000 — there is only one SGTL5000 on the whole radio. The PCM5102 (and PCM1808) +> are **control-less I²S parts** with no I²C, so the `AudioControlSGTL5000` `.enable()/ +> .inputSelect()` calls on this object are effectively **no-ops**; the I²S *data* path is what +> carries speaker audio. So: harmless mistype/comment, worth a code clarity fix, not a bug. +> → [[t41-ep-schematics]] + +The quad-channel map: + +``` +i2s_quadIn ch0/1 = mic L/R (Audio Board) ch2/3 = RX I/Q (PCM1808) +i2s_quadOut ch0/1 = TX I/Q (Audio Board) ch2/3 = speaker L/R (PCM5102) +``` + +I²S sample rate is PLL-configured for **48 / 96 / 192 kHz** (`SetI2SFreq`); Phoenix runs at +**192 kHz** raw ([[multirate-decimation]], [[zoom-fft]]). Mode-based mixer routing in +`UpdateAudioIOState()` connects mic→DSP→TX-I/Q on transmit and RX-I/Q→DSP→speaker on receive. + +**I²S pin routing (Teensy quad-I2S, schematic-confirmed 2026-06-15).** The three clocks are +**shared** by all three converters (U5 PCM5102, U6 PCM1808, U7 SGTL5000 adapter): + +| Signal | Teensy pin | Net | To | +|---|---|---|---| +| MCLK (master clock) | GPIO23 | `CLK` | U5, U6, U7 | +| LRCLK (word clock) | GPIO20 | `LRCK` | U5, U6, U7 | +| BCLK (bit clock) | GPIO21 | `BCK` | U5, U6, U7 | +| Data out → speaker DAC | GPIO32 | `DAUDIO_OUT` | U5 (PCM5102) | +| Data in ← RX-I/Q ADC | (Teensy I²S in) | `ADC_IN` | from U6 (PCM1808) | + +`DAUDIO_OUT` (GPIO32) is the Teensy quad-I2S **OUT1B** feeding the PCM5102; `ADC_IN` carries the +PCM1808's RX I/Q into the Teensy. The **SGTL5000 adapter (U7)** uses the standard Teensy +audio-shield data pins — **OUT1A (GPIO7)** for TX I/Q and the mic data-in line — sharing the +same three clocks *(inferred from the Teensy quad-I2S assignment; not separately net-labelled)*. + +## RF signal chain (physical) +Antenna → **LPF (harmonic) + BPF (image) filter banks** → **RF board**: the Si5351 supplies a +**quadrature LO** that, with the codec, forms the I/Q mixer; T/R relays and attenuators set +direction and level. On TX the path adds the **PA / XVTR / antenna** back-end with **AD7991** +SWR/forward-power sensing. The [[hardware-state-machine]] sequences all of this (RX components +disabled before TX enabled, with relay/PIN-diode settling delays). Detailed per-board behaviour +lives in [[rf-board]] and [[filter-boards]] (the firmware modules) with the chip-level +schematic detail in [[rf-board-electronics]] and [[filter-board-electronics]]; the DSP side is +[[iq-quadrature-sampling]] / [[ssb-phasing-method]]. + +## Power control & graceful shutdown (ATtiny85, U4) +The main board's **ATtiny85 (U4)** is a dedicated **soft-power controller** — it gates the +main power **FET** (the SUP90P06 P-MOSFETs) and runs a 3-state machine so the Teensy can save +state before power is cut. It is *not* an I²C device or sensor; it talks to the Teensy over a +**two-wire handshake**. Firmware: `code/src/ATTiny85_On_Off/ATTiny85_On_Off.ino` (separate +sketch from PhoenixSketch); Teensy side in `Loop.cpp`. + +| ATtiny pin | Dir | Net | Function | +|---|---|---|---| +| PB3 (pin 2) | in (ext. pulldown) | PANEL_SWITCH | front-panel ON/OFF button (HIGH = pressed) | +| PB4 (pin 3) | out | FET_SWITCH | power FET gate: **HIGH = radio on**, LOW = off | +| PB1 (pin 6) | out → Teensy | START_SHUTDOWN | tells Teensy to run shutdown code (`BEGIN_TEENSY_SHUTDOWN` on the Teensy) | +| PB2 (pin 7) | in ← Teensy | SHUTDOWN_COMPLETE | Teensy raises this when shutdown is finished | + +**Sequence:** *OFF* → button press turns the FET on (boots Teensy), 3 s debounce → *ON* → +button press asserts START_SHUTDOWN → *SHUTDOWN* (power still on) while the Teensy saves +parameters, then the Teensy asserts SHUTDOWN_COMPLETE → ATtiny drops the FET → *OFF*. The +Teensy polls the request each loop (`Loop.cpp:1499 if (digitalRead(BEGIN_TEENSY_SHUTDOWN)) +ShutdownTeensy()`); `ShutdownTeensy()` (`Loop.cpp:1414`) saves state then +`digitalWrite(SHUTDOWN_COMPLETE,1)`. The CAT **PS** command (`CAT.cpp:670`) invokes the same +graceful shutdown in software. So the firmware **depends** on the ATtiny for orderly power-down +(it is what makes "save settings on power-off" work — see [[persistent-config]], [[main-loop]]). + +## Power & options (from `Config.h`) +- Optional **100 W PA** (`PA100Wactive`) vs barefoot; optional **transverter (XVTR)** path. +- Optional **analog SWR** on Teensy ADC pins 26 (FWD) / 27 (REV) instead of the default + AD7991 digital SWR (`USE_ANALOG_SWR`, `Config.h`). +- Single- vs **dual-VFO** Si5351 hardware (`SI5351_DUAL_VFO_ADDR 0x61`) — see [[rf-board]]. + +## Open questions +- Power rails/current budget and PA bias details (IRF630/L7808/TC4428 on the LPF board). + +_(The PE4312↔MCP23017 mapping, the LPF band-code→relay decode, the U21 upper bits, and the +I²S/MCLK routing have all been traced — see Resolved below and the module pages.)_ + +## Resolved by the schematic ([[t41-ep-schematics]], 2026-06-14/15) +- **I²S routing** — shared clocks MCLK=GPIO23 (`CLK`), LRCLK=GPIO20 (`LRCK`), BCLK=GPIO21 + (`BCK`) to all three converters; `DAUDIO_OUT`=GPIO32 → PCM5102; `ADC_IN` ← PCM1808; SGTL5000 + on the standard audio-shield data pins. See the audio section. +- **RF attenuators** — MCP23017 U21 GPIOA→RX / GPIOB→TX PE4312s, low 6 bits = 0.5 dB-LSB word; + **upper bits GPA6/7, GPB6/7 unused/NC**. Designators are revision-dependent. → [[rf-board-electronics]] +- **LPF band select** — GPIOB[0:3] BCD → U12 CD74HC4514 (Yn = BCD) → ULN2803 → external filter + board: **one dedicated 7-element LPF per band** + NF bypass. → [[filter-board-electronics]] +- **ATtiny85 (U4) = soft-power controller** with a Teensy graceful-shutdown handshake (not an + I²C/sensor device) — see the dedicated section above. +- **One SGTL5000, not two** — RX path is PCM1808 + PCM5102; the code's second "SGTL5000" is a + naming artifact (see discrepancy box above). +- **RA8875 is off-board** — main-board J7 "Display" + J8 "Display Voltage" feed an external + display module, which is why no RA8875 symbol appears. +- **Attenuators = 2× PE4312** digital step attenuators (31.5 dB / 0.5 dB) → the 31.5 in + `Set{RX,TX}Attenuation`. **Dual Si5351** confirmed. → [[rf-board-electronics]] +- **Power/SWR = 2 AD8307 log detectors (U14 fwd, U19 rev) → AD7991 CH0/CH1**, ref = REF3440 on + Vin3/Vref. Net-traced 2026-06-14; the default firmware log conversion is **correct** (no bug + — the linear formula belongs to the unused analog-diode path). → [[filter-board-electronics]] diff --git a/wiki/hardware/i2c-bus-map.md b/wiki/hardware/i2c-bus-map.md new file mode 100644 index 0000000..a7534cb --- /dev/null +++ b/wiki/hardware/i2c-bus-map.md @@ -0,0 +1,61 @@ +--- +title: I²C Bus Map & Addresses +type: hardware +status: stable +created: 2026-06-14 +updated: 2026-06-15 +tags: [hardware, i2c, wire, mcp23017, si5351, ad7991, addresses, bus-topology] +source_refs: [sources/t41-ep-schematics] +related: ["[[hardware-platform]]", "[[rf-board]]", "[[filter-boards]]", "[[front-panel]]", "[[built-in-test]]", "[[hardware-state-machine]]"] +--- + +# I²C Bus Map & Addresses + +The Teensy 4.1 exposes **three independent I²C buses** (`Wire`, `Wire1`, `Wire2`). Phoenix +deliberately spreads its peripherals across all three to isolate timing-critical traffic and +to keep the front-panel bus fast. Addresses are defined in `Config.h:62-72`; bus assignments +are made where each driver calls `begin_I2C(...)`. The three buses are confirmed on the main +board schematic as the net pairs **`SDA/SCL` (Wire), `SDA1/SCL1` (Wire1), `SDA2/SCL2` +(Wire2)** leaving the Teensy ([[t41-ep-schematics]]). + +## Bus topology + +| Bus | Devices | Addr | Purpose | Driver (`begin_I2C`) | +|---|---|---|---|---| +| **Wire** (Wire0, "main") | Si5351 (VFO) | `0x60` | Quadrature LO clock generator | `RFBoard_si5351.cpp:80` (`Wire.begin()`) | +| | Si5351 #2 (dual-VFO HW) | `0x61` | 2nd clock gen on split-VFO boards | `RFBoard_si5351.cpp` | +| | RF-board MCP23017 | `0x27` | RX/TX attenuators + switching | `RFBoard.cpp:88` (default `Wire`) | +| | SGTL5000 (Audio Board) | LOW | The radio's *only* SGTL5000: mic-in + TX-I/Q codec control | `MainBoard_AudioIO.cpp:450` | +| **Wire1** | Front-panel MCP23017 #1 | `0x20` | Encoders / buttons / LEDs | `FrontPanel.cpp:285` | +| | Front-panel MCP23017 #2 | `0x21` | Encoders / buttons / LEDs | `FrontPanel.cpp:290` | +| **Wire2** | BPF-board MCP23017 | `0x24` | Band-pass filter relay bank | `BPFBoard.cpp:29` | +| | LPF-board MCP23017 | `0x25` | Low-pass filter + back-end relays | `LPFBoard.cpp:238` | +| | AD7991 4-ch ADC | `0x28` or `0x29` | SWR / forward & reverse power | `LPFBoard.cpp:747,754` | + +## Why three buses + +- **Wire1 is front-panel-only, run at 400 kHz.** Because the two panel MCP23017s are the + *only* devices on `Wire1`, the driver raises the clock to **400 kHz** (`FrontPanel.cpp:300`) + with no contention. This is central to the `encoder-i2c-speed` work — fast, dedicated bus + + a two-tier ISR/1 ms-timer servicing model keeps encoder reads snappy. See [[front-panel]]. +- **Wire2 carries the RF back-end** (BPF/LPF/AD7991) — band-switching relay writes and + SWR/power reads that happen on tune/T-R changes, kept off the audio-codec/VFO bus. +- **Wire (Wire0) is the "main" bus** shared by the VFO clock gen, the RF-board attenuators, and + both audio codecs. + +## Address quirks +- **AD7991 dual address.** The part ships with one of two fixed addresses depending on the + ordering code, so the driver **probes `0x28` then `0x29`** (`LPFBoard.cpp:747-754`, + `Config.h:70-72`). Not user-configurable. +- **Only one SGTL5000.** There is a single SGTL5000 (Audio Board, addr LOW). The firmware also + declares a `pcm5102_mainBoard` codec object at addr **HIGH** (`MainBoard_AudioIO.cpp:163`), + but **no SGTL5000 is populated there** — the main-board RX/speaker path is PCM1808/PCM5102, + which are control-less I²S parts (not on any I²C bus). Those `setAddress(HIGH)/.enable()` calls + are no-ops. See [[hardware-platform]] (audio) / [[t41-ep-schematics]]. +- **Dual-VFO Si5351.** `SI5351_DUAL_VFO_ADDR 0x61` is only populated on split-VFO hardware + (`HasDualVFOs()`), enabling independent RX/TX clock generation — see [[rf-board]]. + +## Startup presence check +The **built-in test** ([[built-in-test]]) probes the expected I²C devices at boot and flags +any that fail to ACK, surfacing a missing/misaddressed board on the status screen. This bus +map is the reference for what *should* be present on each bus. diff --git a/wiki/hardware/rf-board-electronics.md b/wiki/hardware/rf-board-electronics.md new file mode 100644 index 0000000..3d652ec --- /dev/null +++ b/wiki/hardware/rf-board-electronics.md @@ -0,0 +1,87 @@ +--- +title: RF Board — Electronics (Si5351 LO, PE4312 attenuators, mixer front end) +type: hardware +status: draft +created: 2026-06-16 +updated: 2026-06-16 +tags: [hardware, rf, si5351, pe4312, attenuator, mixer, mcp23017, board-revisions] +source_refs: [sources/t41-ep-schematics] +related: ["[[hardware-platform]]", "[[i2c-bus-map]]", "[[rf-board]]", "[[filter-board-electronics]]", "[[t41-ep-schematics]]"] +--- + +# RF Board — Electronics + +The *physical* RF board: the silicon, part numbers, and schematic-traced wiring that the +[[rf-board]] firmware module (`RFBoard.cpp`) drives. This page owns the **electronics**; the +firmware page owns the **API and algorithms** (quadrature generation, the PLL-only retune +optimization, the unit-test hooks). Confirmed against `T41-RF-board-V012` + daughterboards +([[t41-ep-schematics]]). + +## Local oscillator — Si5351 quadrature VFO +- The **T41_DualClock_Daughter** board carries **2× Si5351A-B-GM** off a shared **25 MHz** + reference (TCXO). On these newer (V12.8-era) boards the two chips provide **independent RX and + TX quadrature LOs** plus a CW carrier — the "three VFOs" the firmware addresses: + + | VFO | Si5351 outputs | PLL | Purpose | + |---|---|---|---| + | **RX** | CLK0 + CLK1 (`CLK0RX`/`CLK90RX`) | PLLA | quadrature LO for RX I/Q | + | **TX** | CLK4 + CLK5 (`CLK0TX`/`CLK90TX`) | PLLB | quadrature LO for SSB TX | + | **CW** | CLK6 (`CLKCW`); CLK2 single-VFO | — | single-output CW carrier | + + RX on **PLLA** and TX on **PLLB** lets the two run at independent frequencies simultaneously + (needed for the dual-VFO TX-spectrum monitor trick). Dual-VFO hardware is selected in firmware + by `SI5351_DUAL_VFO_ADDR 0x61` / `HasDualVFOs()`. + +### Board-revision history ⚠️ +RF board revisions **prior to 12.8** carried a **single** Si5351 with only **one** set of +quadrature VFO outputs. On those boards the single quadrature pair (**CLK0/CLK1**) was +**shared** between the RX and TX mixers — the RX and TX LO could **not** run at independent +frequencies. They still provided the separate **CW carrier on CLK2**. The firmware's +`HasDualVFOs()` fallback (`SetTXVFOFrequency → SetRXVFOFrequency`) exists precisely to +accommodate these single-VFO boards. The dual-Si5351 arrangement above is V12.8-and-later only. + +## Step attenuators — 2× PE4312 +Two **PE4312** 6-bit digital step attenuators (**31.5 dB in 0.5 dB steps**), one per chain, +driven in parallel by the **MCP23017 (U21, 0x27)** ([[i2c-bus-map]]). The **electrical mapping +is revision-independent and matches the (unchanged) firmware**: **GPIOA → RX attenuator**, +**GPIOB → TX attenuator**; the low 6 bits = the attenuation word wired to the PE4312 control +pins: + +| GPIO bit | Weight | PE4312 pin | Ctrl | +|---|---|---|---| +| 0 | 0.5 dB | 20 | C0.5 | +| 1 | 1 dB | 19 | C1 | +| 2 | 2 dB | 17 | C2 | +| 3 | 4 dB | 16 | C4 | +| 4 | 8 dB | 15 | C8 | +| 5 | 16 dB | 1 | C16 | + +(PE4312 pin 18 = GND, hence the gap.) The GPIO value is the **attenuation in dB × 2** — the +firmware writes `round(2·atten_dB) & 0x3F` (`SetAttenuator`, [[rf-board]]). The **upper bits +GPA6/7 and GPB6/7 are unused / not connected** (owner-confirmed 2026-06-15) — each bank carries +only the 6-bit attenuation word. + +### Reference designators differ by board revision +(Wiring/firmware unchanged — a packaging-convenience change. A bare "U3" is ambiguous across +revisions — always state the revision. Owner-clarified 2026-06-14.) + +| Revision | RX atten | TX atten | Packaging | +|---|---|---|---| +| **V12.8** (current; the `raw/` schematic) | **U11** | **U3** | PE4312 on removable daughterboards (chip = `U1` in the daughter sheet; U12 = dual-clock LO daughter) | +| **prior revisions** | **U3** | **U12** | PE4312 placed directly on the RF board | + +## Mixer / RF front end +- **Mixer transformers:** **ADT1-1 / ADT2-1T**. +- **Gain blocks:** **PSA-8A+** and **MAR-3SM+** MMICs. +- **RF switches:** **MASWSS0179** (T/R + cal loopback). +- **I/Q routing:** **74CBTLV3253** analog muxes. + +## I/Q baseband amplifiers +**AD8599, OPA2209, MC33078, LM358B** op-amps buffer/scale the I and Q channels to/from the +main-board converters: **J1 IQ_Out → PCM1808** (RX I/Q in), **J5 IQ_In ← SGTL5000 TX I/Q** +(see [[hardware-platform]] for the converter map). + +## Open questions +- PA bias / supply rails feeding the front-end gain blocks. +- Exact divider-boundary frequencies where the firmware does a full multisynth/phase re-setup + vs. PLL-only retune (a firmware concern — see [[rf-board]]). diff --git a/wiki/index.md b/wiki/index.md new file mode 100644 index 0000000..73f6a8e --- /dev/null +++ b/wiki/index.md @@ -0,0 +1,98 @@ +--- +title: Phoenix Wiki Index +type: index +status: stub +created: 2026-06-08 +updated: 2026-06-16 +--- + + + + +# Phoenix Wiki — Index + +Catalog of every page in the wiki, grouped by category. The LLM updates this on every +ingest. To answer a query, read this first to locate relevant pages, then drill in. + +See [[CLAUDE]] for the maintenance schema and [[log]] for the chronological record. + +## Firmware +_Modules, architecture, state machines, DSP chains, design decisions, code heritage._ + +**Architecture** +- [[overview]] — top-level firmware architecture: layers, execution flow, module map. +- [[state-machine-architecture]] — how the StateSmith-generated SM layer works. +- [[real-time-constraints]] — the ~10 ms loop budget and timing rules. +- [[spectrum-refresh-floor]] — why refresh ≈ NCHUNKS×T_loop; the 11.7→18.8 fps optimization. *(draft)* +- [[code-heritage]] — lineage from DD4WH Teensy Convolution SDR; contributor list; GPLv3. + +**State machines** +- [[mode-state-machine]] — ModeSm: SSB/CW × RX/TX, iambic keyer, calibration entry (generated). *(draft)* +- [[ui-state-machine]] — UISm: splash→home→menu stack + tool screens (DFE/EQ/BIT/cal) (generated). *(draft)* +- [[tune-frequency-control]] — Tune.cpp: frequency math (Fs/4 shift, fine tune, CW offset) + PA power-cal math. Not a state machine. *(draft)* +- [[hardware-state-machine]] — HardwareSm (hand-written) maps mode→RF/tune hardware; drives 4 cal sub-machines. *(draft)* +- [[calibration-state-machines]] — the 4 generated cal SMs: 3 identical minimize-sweeps + PowerCalSm curve-fit. *(draft)* +- [[built-in-test]] — startup I²C presence self-test (BIT struct → status screen). *(draft)* + +**Hardware-abstraction modules** _(the code; physical electronics live under Hardware below)_ +- [[rf-board]] — `RFBoard.cpp` API: Si5351 3-VFO quadrature LO (phase-reg vs <3.2 MHz timed-delay), attenuators, T/R, cal loopback → electronics in [[rf-board-electronics]]. *(draft)* +- [[filter-boards]] — `BPFBoard`/`LPFBoard` API: BPF + LPF/RF-back-end relays via shared hardwareRegister; AD7991 SWR/power math → electronics in [[filter-board-electronics]]. *(draft)* +- [[front-panel]] — 2×MCP23017 encoders/buttons/LEDs; two-tier ISR+1ms-timer I²C servicing (encoder-i2c-speed branch). *(draft)* + +**Signal processing & UI** +- [[dsp-chain]] — DSP.cpp/FFT/FIR/Noise/CW on OpenAudio; the Convolution-SDR core. +- [[audio-io]] — MainBoard_AudioIO: OpenAudio quad-I²S graph, mode-based mixer routing, RX/TX/mic/speaker queues, sidetone. *(draft)* +- [[cw-processing]] — CW audio filter + adaptive Morse decoder (Goertzel + timing histograms + Morse tree). *(draft)* +- [[display-subsystem]] — RA8875 dirty-flag pane model (13 home panes), DrawDisplay router on UISm state. *(draft)* + +**Control flow & config** +- [[main-loop]] — Loop.cpp: `loop()` sequence + interrupt FIFO + CW key/PTT handling. +- [[cat-control]] — CAT.cpp: Kenwood (TS-480/2000) emulation, 25-command dispatch table on SerialUSB1; +custom ED/PR dumps. *(draft)* +- [[persistent-config]] — the `ED` struct (single source of truth) → JSON on LittleFS+SD; Config.h/Globals/ParamSave. *(draft)* + +## Theory +_DSP/SDR concepts, calibration, domain "why it works". Constructed from code + DSP +fundamentals (no copy of the Purdum & Peter book). Code claims cited `file:line`._ + +- [[theory-overview]] — the DSP/SDR theory spine; signal path end to end, key numbers. +- [[iq-quadrature-sampling]] — complex baseband; sign-of-frequency; image problem. *(draft)* +- [[ssb-phasing-method]] — SSB by phasing: ±45° Hilbert TX pair + freq-domain RX. *(draft)* +- [[fast-convolution-filtering]] — FFT overlap-save channel filter; the Convolution-SDR core. *(draft)* +- [[multirate-decimation]] — ÷8 RX / ÷16 TX polyphase rate changes; tap-count tradeoff. *(draft)* +- [[iq-imbalance-correction]] — per-band amp/phase correction & 3-pass calibration sweep. *(draft)* +- [[agc-design]] — wdsp look-ahead AGC: ring-buffer attack, hang state machine. *(draft)* +- [[noise-reduction]] — Kim / MMSE-spectral / LMS-notch NR. *(draft)* +- [[synchronous-am-detection]] — SAM: PLL carrier recovery for fade-robust AM. *(draft)* +- [[audio-equalizer]] — 14-band parallel filterbank (RX + TX audio). *(draft)* +- [[tx-carrier-null]] — LO-leakage suppression via per-band DC offset (distinct from image). *(draft)* +- [[zoom-fft]] — spectrum-display zoom via IIR decimation (raw 192 kHz, 375 Hz base bin). *(draft)* + +## Hardware +_The physical T41-EP platform the firmware drives: boards, chips, buses, power. Distinct from +the firmware/ module pages (which describe the code). Derived from `Config.h` + board drivers._ + +- [[hardware-platform]] — T41-EP platform overview: Teensy 4.1, board stack, single-SGTL5000 + + PCM1808/PCM5102 audio, RF chain, power/PA/XVTR options. *(stable)* +- [[i2c-bus-map]] — the three I²C buses (Wire/Wire1/Wire2), every device + address, and why + the front panel gets its own 400 kHz bus. *(stable)* +- [[rf-board-electronics]] — RF board silicon: dual/single Si5351 LO + revisions, PE4312 + attenuators (GPIO-bit→pin table, designators), ADT/PSA/MAR mixer front end, I/Q amps. *(draft)* +- [[filter-board-electronics]] — BPF/LPF/PA back-end chips: MASWSS switches, CD74HC4514/74HC237 + decoders + ULN2803/HF41F relays, external per-band LPF board, AD8307/AD7991 SWR sensing. *(draft)* + +## Roadmap +_Plans for future development, proposals, open questions._ + +- [[documentation-todos]] — running list of wiki pages to write + code/comment discrepancies + and possible bugs found while documenting (incl. a ⚠ possible NR channel-routing bug). +- [[development-backlog]] — software-dev tasks mirroring the open GitHub issues (index). + - [[transmit-spectrum]] (#10) — see the TX spectrum; largely built, needs verify. + - [[manual-notch]] (#11) — 3-way notch (off/auto/manual); manual mode is new work. + - [[usb-audio]] (#13) — bi-directional USB audio; in active debugging. + - [[openaudio-library]] (#14) — change OpenAudio for audio quality; foundational. + +## Sources +_One summary page per ingested raw source._ + +- [[t41-ep-schematics]] — the seven KiCad board schematics (main/RF/attenuator/dual-clock/BPF/ + LPF-control/LPF-filter); the first physical-hardware source. *(draft)* diff --git a/wiki/llm-wiki.md b/wiki/llm-wiki.md new file mode 100644 index 0000000..6b0cef3 --- /dev/null +++ b/wiki/llm-wiki.md @@ -0,0 +1,75 @@ +# LLM Wiki + +A pattern for building personal knowledge bases using LLMs. + +This is an idea file, it is designed to be copy pasted to your own LLM Agent (e.g. OpenAI Codex, Claude Code, OpenCode / Pi, or etc.). Its goal is to communicate the high level idea, but your agent will build out the specifics in collaboration with you. + +## The core idea + +Most people's experience with LLMs and documents looks like RAG: you upload a collection of files, the LLM retrieves relevant chunks at query time, and generates an answer. This works, but the LLM is rediscovering knowledge from scratch on every question. There's no accumulation. Ask a subtle question that requires synthesizing five documents, and the LLM has to find and piece together the relevant fragments every time. Nothing is built up. NotebookLM, ChatGPT file uploads, and most RAG systems work this way. + +The idea here is different. Instead of just retrieving from raw documents at query time, the LLM **incrementally builds and maintains a persistent wiki** — a structured, interlinked collection of markdown files that sits between you and the raw sources. When you add a new source, the LLM doesn't just index it for later retrieval. It reads it, extracts the key information, and integrates it into the existing wiki — updating entity pages, revising topic summaries, noting where new data contradicts old claims, strengthening or challenging the evolving synthesis. The knowledge is compiled once and then *kept current*, not re-derived on every query. + +This is the key difference: **the wiki is a persistent, compounding artifact.** The cross-references are already there. The contradictions have already been flagged. The synthesis already reflects everything you've read. The wiki keeps getting richer with every source you add and every question you ask. + +You never (or rarely) write the wiki yourself — the LLM writes and maintains all of it. You're in charge of sourcing, exploration, and asking the right questions. The LLM does all the grunt work — the summarizing, cross-referencing, filing, and bookkeeping that makes a knowledge base actually useful over time. In practice, I have the LLM agent open on one side and Obsidian open on the other. The LLM makes edits based on our conversation, and I browse the results in real time — following links, checking the graph view, reading the updated pages. Obsidian is the IDE; the LLM is the programmer; the wiki is the codebase. + +This can apply to a lot of different contexts. A few examples: + +- **Personal**: tracking your own goals, health, psychology, self-improvement — filing journal entries, articles, podcast notes, and building up a structured picture of yourself over time. +- **Research**: going deep on a topic over weeks or months — reading papers, articles, reports, and incrementally building a comprehensive wiki with an evolving thesis. +- **Reading a book**: filing each chapter as you go, building out pages for characters, themes, plot threads, and how they connect. By the end you have a rich companion wiki. Think of fan wikis like [Tolkien Gateway](https://tolkiengateway.net/wiki/Main_Page) — thousands of interlinked pages covering characters, places, events, languages, built by a community of volunteers over years. You could build something like that personally as you read, with the LLM doing all the cross-referencing and maintenance. +- **Business/team**: an internal wiki maintained by LLMs, fed by Slack threads, meeting transcripts, project documents, customer calls. Possibly with humans in the loop reviewing updates. The wiki stays current because the LLM does the maintenance that no one on the team wants to do. +- **Competitive analysis, due diligence, trip planning, course notes, hobby deep-dives** — anything where you're accumulating knowledge over time and want it organized rather than scattered. + +## Architecture + +There are three layers: + +**Raw sources** — your curated collection of source documents. Articles, papers, images, data files. These are immutable — the LLM reads from them but never modifies them. This is your source of truth. + +**The wiki** — a directory of LLM-generated markdown files. Summaries, entity pages, concept pages, comparisons, an overview, a synthesis. The LLM owns this layer entirely. It creates pages, updates them when new sources arrive, maintains cross-references, and keeps everything consistent. You read it; the LLM writes it. + +**The schema** — a document (e.g. CLAUDE.md for Claude Code or AGENTS.md for Codex) that tells the LLM how the wiki is structured, what the conventions are, and what workflows to follow when ingesting sources, answering questions, or maintaining the wiki. This is the key configuration file — it's what makes the LLM a disciplined wiki maintainer rather than a generic chatbot. You and the LLM co-evolve this over time as you figure out what works for your domain. + +## Operations + +**Ingest.** You drop a new source into the raw collection and tell the LLM to process it. An example flow: the LLM reads the source, discusses key takeaways with you, writes a summary page in the wiki, updates the index, updates relevant entity and concept pages across the wiki, and appends an entry to the log. A single source might touch 10-15 wiki pages. Personally I prefer to ingest sources one at a time and stay involved — I read the summaries, check the updates, and guide the LLM on what to emphasize. But you could also batch-ingest many sources at once with less supervision. It's up to you to develop the workflow that fits your style and document it in the schema for future sessions. + +**Query.** You ask questions against the wiki. The LLM searches for relevant pages, reads them, and synthesizes an answer with citations. Answers can take different forms depending on the question — a markdown page, a comparison table, a slide deck (Marp), a chart (matplotlib), a canvas. The important insight: **good answers can be filed back into the wiki as new pages.** A comparison you asked for, an analysis, a connection you discovered — these are valuable and shouldn't disappear into chat history. This way your explorations compound in the knowledge base just like ingested sources do. + +**Lint.** Periodically, ask the LLM to health-check the wiki. Look for: contradictions between pages, stale claims that newer sources have superseded, orphan pages with no inbound links, important concepts mentioned but lacking their own page, missing cross-references, data gaps that could be filled with a web search. The LLM is good at suggesting new questions to investigate and new sources to look for. This keeps the wiki healthy as it grows. + +## Indexing and logging + +Two special files help the LLM (and you) navigate the wiki as it grows. They serve different purposes: + +**index.md** is content-oriented. It's a catalog of everything in the wiki — each page listed with a link, a one-line summary, and optionally metadata like date or source count. Organized by category (entities, concepts, sources, etc.). The LLM updates it on every ingest. When answering a query, the LLM reads the index first to find relevant pages, then drills into them. This works surprisingly well at moderate scale (~100 sources, ~hundreds of pages) and avoids the need for embedding-based RAG infrastructure. + +**log.md** is chronological. It's an append-only record of what happened and when — ingests, queries, lint passes. A useful tip: if each entry starts with a consistent prefix (e.g. `## [2026-04-02] ingest | Article Title`), the log becomes parseable with simple unix tools — `grep "^## \[" log.md | tail -5` gives you the last 5 entries. The log gives you a timeline of the wiki's evolution and helps the LLM understand what's been done recently. + +## Optional: CLI tools + +At some point you may want to build small tools that help the LLM operate on the wiki more efficiently. A search engine over the wiki pages is the most obvious one — at small scale the index file is enough, but as the wiki grows you want proper search. [qmd](https://github.com/tobi/qmd) is a good option: it's a local search engine for markdown files with hybrid BM25/vector search and LLM re-ranking, all on-device. It has both a CLI (so the LLM can shell out to it) and an MCP server (so the LLM can use it as a native tool). You could also build something simpler yourself — the LLM can help you vibe-code a naive search script as the need arises. + +## Tips and tricks + +- **Obsidian Web Clipper** is a browser extension that converts web articles to markdown. Very useful for quickly getting sources into your raw collection. +- **Download images locally.** In Obsidian Settings → Files and links, set "Attachment folder path" to a fixed directory (e.g. `raw/assets/`). Then in Settings → Hotkeys, search for "Download" to find "Download attachments for current file" and bind it to a hotkey (e.g. Ctrl+Shift+D). After clipping an article, hit the hotkey and all images get downloaded to local disk. This is optional but useful — it lets the LLM view and reference images directly instead of relying on URLs that may break. Note that LLMs can't natively read markdown with inline images in one pass — the workaround is to have the LLM read the text first, then view some or all of the referenced images separately to gain additional context. It's a bit clunky but works well enough. +- **Obsidian's graph view** is the best way to see the shape of your wiki — what's connected to what, which pages are hubs, which are orphans. +- **Marp** is a markdown-based slide deck format. Obsidian has a plugin for it. Useful for generating presentations directly from wiki content. +- **Dataview** is an Obsidian plugin that runs queries over page frontmatter. If your LLM adds YAML frontmatter to wiki pages (tags, dates, source counts), Dataview can generate dynamic tables and lists. +- The wiki is just a git repo of markdown files. You get version history, branching, and collaboration for free. + +## Why this works + +The tedious part of maintaining a knowledge base is not the reading or the thinking — it's the bookkeeping. Updating cross-references, keeping summaries current, noting when new data contradicts old claims, maintaining consistency across dozens of pages. Humans abandon wikis because the maintenance burden grows faster than the value. LLMs don't get bored, don't forget to update a cross-reference, and can touch 15 files in one pass. The wiki stays maintained because the cost of maintenance is near zero. + +The human's job is to curate sources, direct the analysis, ask good questions, and think about what it all means. The LLM's job is everything else. + +The idea is related in spirit to Vannevar Bush's Memex (1945) — a personal, curated knowledge store with associative trails between documents. Bush's vision was closer to this than to what the web became: private, actively curated, with the connections between documents as valuable as the documents themselves. The part he couldn't solve was who does the maintenance. The LLM handles that. + + +## Note + +This document is intentionally abstract. It describes the idea, not a specific implementation. The exact directory structure, the schema conventions, the page formats, the tooling — all of that will depend on your domain, your preferences, and your LLM of choice. Everything mentioned above is optional and modular — pick what's useful, ignore what isn't. For example: your sources might be text-only, so you don't need image handling at all. Your wiki might be small enough that the index file is all you need, no search engine required. You might not care about slide decks and just want markdown pages. You might want a completely different set of output formats. The right way to use this is to share it with your LLM agent and work together to instantiate a version that fits your needs. The document's only job is to communicate the pattern. Your LLM can figure out the rest. diff --git a/wiki/log.md b/wiki/log.md new file mode 100644 index 0000000..c9f8fba --- /dev/null +++ b/wiki/log.md @@ -0,0 +1,668 @@ +# Phoenix Wiki — Log + +Append-only chronological record. Each entry: `## [YYYY-MM-DD] | ` +where `` ∈ `ingest | query | lint | decision`. + +Last 5 entries: `grep "^## \[" log.md | tail -5` + +## [2026-06-08] decision | Wiki initialized +Created the Phoenix wiki skeleton (schema, index, log, and empty category folders: +firmware/, theory/, roadmap/, sources/, raw/). No sources ingested yet — schema-first +setup per the LLM Wiki pattern. Categories chosen: firmware, theory, roadmap. + +## [2026-06-08] decision | Seeded firmware architecture map +Built out the firmware/ category from a survey of code/src/PhoenixSketch/ (source tree + +the PhoenixSketch.ino architecture header, Loop.h, SDT.h struct list, Contributors.txt). +Created 14 pages: +- overview (draft) — layered architecture, execution flow, full module map, SM table. +- code-heritage (draft) — DD4WH Teensy Convolution SDR lineage, 13-person contributor list, + GPLv3. +- main-loop (draft) — loop() sequence, the 16-slot InterruptType FIFO, CW key/PTT plumbing. +- state-machine-architecture, real-time-constraints (concept stubs). +- Module stubs: mode/ui/tune/hardware state machines, rf-board, filter-boards, dsp-chain, + display-subsystem, front-panel, cat-control, persistent-config. +All cross-linked; index.md firmware section populated. Discovered the real architecture is +much richer than CLAUDE.md states: 7 StateSmith machines (not 3), board-abstraction layer +(RF/BPF/LPF/Main), large display subsystem, AD7991 power sensing. Linked the existing +[[spectrum-refresh-floor]] memory finding into real-time-constraints + dsp-chain. +Stubs carry explicit "To flesh out" checklists; theory pages (ssb-generation, +fft-convolution-filtering, agc-design, noise-reduction-algorithms) referenced but not yet +written. No raw source ingested — this is a code-survey seeding, not an ingest. + +## [2026-06-08] decision | Seeded DSP/SDR theory spine +Built the theory/ category from a code survey of DSP.cpp, DSP_FFT.cpp, and the SDT.h filter +structs. Confirmed and grounded (with file:line citations) the radio's defining DSP choices: +- I/O at 192 kHz, 2048-sample blocks; RX decimates ÷8 → 24 kHz, TX ÷16 → 12 kHz. +- SSB by the **phasing method**: TX uses a ±45° 100-tap Hilbert FIR pair + (FIR_Hilbert_coeffs_45/_neg_45, DSP_FFT.cpp:851) + 1-line SidebandSelection sign flip; RX + does sideband selection in the **frequency-domain convolution mask**, so Demodulate() just + copies the real part for USB/LSB (DSP.cpp:629). NOT Weaver, NOT filter method. +- Channel filter = **FFT overlap-save fast convolution** (ConvolutionFilter, DSP_FFT.cpp:685; + m_NumTaps = FFT_LENGTH/2+1 = 257) — the "Convolution SDR" namesake. Captured the + static-DMAMEM cold-boot NaN hazard in the overlap buffers. +- Three NR algorithms (Kim / spectral / LMS-Xanr); wdsp-derived AGC (tau_attack 1ms / decay 250ms). +Created 9 pages: theory/overview + draft pages iq-quadrature-sampling, ssb-phasing-method, +fast-convolution-filtering; stubs multirate-decimation, iq-imbalance-correction, agc-design, +noise-reduction, zoom-fft. Convention adopted: code facts cited file:line, general DSP marked +"(general DSP)". Updated firmware/dsp-chain related-theory links and index.md theory section. +Established for the record: no electronic copy of the Purdum & Peter T41 book exists for this +project — theory is reconstructed from code + DSP fundamentals, not sourced from the book. + +## [2026-06-08] decision | Promoted 3 theory stubs to drafts (IQ cal, multirate, NR) +Took iq-imbalance-correction, multirate-decimation, noise-reduction from stub → draft by +reading the implementations: +- IQ imbalance: ApplyIQCorrection (DSP.cpp:206) is a simplified single-axis model — scale I + only, then IQPhaseCorrection (DSP.cpp:186) cross-mixes a fraction of one channel into the + other (small-angle shear). Per-band factors in ED (SDT.h:302-305). Calibration + (HardwareSm_ReceiveIQCalibration.cpp) injects a CW tone, measures sideband separation + = psdnew[384]-psdnew[128], and runs a 3-pass coarse/medium/fine coordinate sweep + (amp on even iters, phase on odd), re-centering each pass on the prior optimum. Added IRR + vs amp/phase-error table. Carrier-null flagged as a distinct problem. +- Multirate: InitializeDecimationFilter (DSP_FIR.cpp:1284) sizes taps by the harris formula + N≈A_stop/(22·Δf). Added worked single-÷8 (~132 taps) vs two-stage (~27+~33 taps) cost + comparison showing why staging wins. Noted TX uses fixed 48-tap coeff sets while RX + designs taps at runtime. +- NR: three families — Kim1_NR (256-pt FFT spectral subtraction, Hann, VAD-limited bins, + ×30 post-scale), SpectralNoiseReduction (decision-directed MMSE / Ephraim-Malah; code + cites Romanin 2009, Schmitt 2002, Gerkmann-Hendriks 2002), and Xanr (64-tap leaky-NLMS ALE + that is both NR and auto-notch via prediction-vs-residual). Tied the NaN-latch / DMAMEM + cold-boot robustness back to [[fast-convolution-filtering]]. +Each page logs open questions (e.g. the "48 kHz" tone-offset comment vs the 6 kHz bins; the +DSP.cpp:687 Q→I 2× scale; NR sample-rate comment discrepancy). agc-design and zoom-fft remain +stubs. Updated index.md status markers. + +## [2026-06-08] decision | Added roadmap/documentation-todos +Created roadmap/documentation-todos.md as the central planning surface for doc gaps and +code/comment discrepancies found while writing the wiki. Seeded it with the open questions +from the three theory drafts, the firmware/theory stub backlog, and pages-referenced-but-not- +written. Flagged one ⚠ possible bug: DSP.cpp:687 `arm_scale_f32(data->Q, 2, data->I, …)` after +the LMS NR call may be a Q/I channel mix-up. Linked from index.md roadmap section. + +## [2026-06-08] decision | Completed theory spine (agc-design, zoom-fft drafts) +Promoted the last two theory stubs to drafts: +- agc-design: confirmed it's the wdsp (NR0V) look-ahead AGC ported via DD4WH — variable names + match exactly. Documented the ring-buffer delay-line that lets attack clamp peaks with zero + overshoot, complex-envelope magnitude (pmode=1), fast/hang/normal-decay state machine + (DSP.cpp:368+), pop_ratio transient handling, and the 5 user modes (Off/Long/Slow/Med/Fast) + with their hangtime/tau_decay (DSP.cpp:243-270). max_gain from per-band AGC_thresh. +- zoom-fft: corrected the earlier stub's error — the band-spectrum zoom FFT (ZoomFFTExe → + psdnew) runs on the RAW 192 kHz I/Q, not the 24 kHz baseband; base bin width is 375 Hz, not + 46.875 Hz (that's the separate audio-passband FFT in ConvolutionFilter). Documented the + IIR-biquad-then-decimate path (IIR chosen because phase doesn't matter for a magnitude PSD), + zoomMultiplierCoeff amplitude compensation, and the ring-buffer accumulation for zoom>=8 that + slows effective refresh — tying back to [[spectrum-refresh-floor]]. +All 9 theory spine pages are now drafts. Added new discrepancies to roadmap/documentation-todos: +Config.h ZOOM 3 vs ED.spectrum_zoom=1 default; AGC soft-knee curve; n_tau vs MAX_N_TAU. + +## [2026-06-08] decision | Investigated suspected NR bug (DSP.cpp:687) — false alarm, fixed wiki errors +Ran down the ⚠ possible bug flagged in roadmap/documentation-todos: the +`arm_scale_f32(data->Q, 2, data->I, …)` after the LMS NR call. VERDICT: not a bug. +- Xanr (DSP_Noise.cpp:302) reads data->I, writes its result to data->Q, never modifies I. +- Downstream InterpolateReceiveData (DSP.cpp:700) reads data->I as source. +- So line 687 correctly propagates the denoised Q back into I (with a 2× makeup gain, cf the + ×30 for Kim). The commented-out `//arm_scale_f32(data->I,1.5,data->I,…)` is the abandoned + buggy in-place variant. The notch block (DSP.cpp:930-933) uses the same Xanr→copy(Q,I) + pattern. Downgraded to a clarity nit (document the "Xanr outputs to Q" gotcha). +Investigation also exposed errors in MY earlier theory drafts, now fixed: +- Real RX order is ConvolutionFilter → AGC → Demodulate → BandEQ → NoiseReduction + (DSP.cpp:911-927). I had written "NR runs before AGC" in agc-design and noise-reduction — + WRONG. AGC actually runs BEFORE demodulation, on the complex SSB-filtered baseband, using + sqrt(I²+Q²) envelope; NR runs AFTER demod+EQ on the audio. Corrected both pages + the + dsp-chain RX sketch (which was also mis-ordered). +- Resolved two open questions in noise-reduction: the Q→I scale (not a typo) and auto-notch + location (Xanr(&data,1) at DSP.cpp:930, gated by ED.ANR_notchOn). Marked resolved in roadmap. +Lesson: verify chain ORDER against ReceiveProcessing directly, not the DSP.h header doc +(whose summary listing "AGC → filter → demodulate → noise reduction" is itself loosely +ordered). + +## [2026-06-08] decision | Promoted mode-state-machine to full draft +Read ModeSm.h (state/event enums), Mode.cpp (actions/guards), and the dispatch sites + keyer +handling in Loop.cpp to document ModeSm accurately. Key facts: +- 20 states under ROOT split into NORMAL_STATES (SSB RX/TX, CW_RECEIVE, straight-key + MARK/SPACE, iambic DIT_MARK/DAH_MARK/KEYER_SPACE/KEYER_WAIT) and CALIBRATION_STATES + (frequency, offset MARK/SPACE, power MARK/SPACE, RX_IQ, TX_IQ MARK/SPACE). 16 events. +- Keyer timing: DO event from the 1 ms TimerInterrupt (Loop.cpp:355) increments + markCount/spaceCount; dit=ditDuration_ms, dah=3×, inter-element space=1×; + ditDuration_ms = 1200/WPM (Globals.cpp:131). Standard PARIS timing. +- Iambic paddle memory implemented in Loop.cpp:914-947 by PrependInterrupt-ing a paddle press + to the FIFO head during an active element; keyerFlip swaps dit/dah. +- TX guarded by IsTxAllowed() = HAM_BAND only (Mode.cpp:39). Buttons locked out during TX + (Loop.cpp:395-403). Mode changes run UpdateHardwareState → RF + audio reconfigure. +Found a stale-source-comment discrepancy: PhoenixSketch.ino lists ModeSm states as +"...CW_TRANSMIT, TUNE" — there is no TUNE state and CW transmit is six sub-states. Logged to +roadmap/documentation-todos. Located the StateSmith source diagrams (ModeSm.drawio et al.). +First firmware state-machine stub fully promoted; ui/tune/hardware SM stubs remain. + +## [2026-06-08] decision | Retired "tune-state-machine" myth → tune-frequency-control +Reading Tune.cpp/Tune.h revealed there is NO TuneSm state machine: Tune.cpp is a pure-function +library (frequency math + PA power-cal math). The TuneReceive/TuneSSBTX/TuneCWTX "states" the +CLAUDE.md/.ino describe actually live in HardwareSm.cpp as a TuneState enum dispatched by +HandleTuneState(). Renamed the stub firmware/tune-state-machine.md → tune-frequency-control.md +and rewrote it as a module page: +- Two-stage tuning: hardware Si5351 VFO = coarse band-center; digital software mixer = fine + tune; effective freq = centerFreq − fineTune − Fs/4 (GetTXRXFreq, Tune.cpp:121). Documented + the −Fs/4 quarter-shift rationale (dodge the DC hole / 1-f / LO leakage; cheapest mix). +- Functions: GetTXRXFreq(_dHz), GetCWTXFreq_dHz (LSB−/USB+ tone offset), ResetTuning, GetBand; + deci-Hertz units for Si5351 resolution. AdjustFineTune limits (zoom window, band edge) + + FAST_TUNE acceleration (4 quick steps → 1000 Hz step). +- HandleTuneState (HardwareSm.cpp:639) is the real per-mode VFO dispatcher: sets PA/LPF/BPF/ + antenna/FIR mask then programs the VFO; SSB-TX dual-VFO sets RX to freq/3 to watch the 3rd + harmonic for the TX spectrum display. +- PA power-cal math (also in Tune.cpp): tanh model Pout=Psat·tanh(k·10^(−A/10)), + attenToPower/powerToAtten, CalculateCWAttenuation/CalculateSSBTXGain, Gauss-Newton + fitTanhModel/FitPowerCurve — backs PowerCalSm. +Updated ALL inbound links (overview, state-machine-architecture, rf-board, filter-boards, +mode-state-machine, index) — overview SM table now correctly says SEVEN generated machines, no +TuneSm. Logged the TuneSm myth to roadmap stale-source-comments. Verified no dangling +[[tune-state-machine]] links remain. + +## [2026-06-08] decision | Promoted hardware-state-machine to draft; corrected SM count +Read HardwareSm.h/.cpp + the 4 cal partials. Two structural corrections to the wiki: +- HardwareSm is HAND-WRITTEN, not StateSmith-generated (no HardwareSm.drawio, no banner). + Only SIX machines are generated: ModeSm, UISm, PowerCalSm, ReceiveIQCalSm, + TransmitCarrierCalSm, TransmitIQCalSm. Fixed the overview SM table ("6 generated + 1 + hand-written coordinator") and state-machine-architecture accordingly. +- HardwareSm is the mode→hardware bridge built on two hand-coded enums: + RFHardwareState (RFReceive/RFTransmit/RFCWMark/RFCWSpace/RFCalReceiveIQ/RFCalTransmitIQ[ + SingleVFO]) and TuneState. UpdateRFHardwareState (HardwareSm.cpp:531) maps modeSM.state_id + → RF state (many-to-one) then HandleRFHardwareStateChange does relay/path switching w/ + ~6 ms settling; UpdateTuneState → HandleTuneState programs PA/LPF/BPF/antenna/FIR + VFO. + CW QSK uses the RFCWMark/RFCWSpace pair to avoid full T/R cycling; calibration reuses the + normal TX/RX hardware states. previousRadioState guard + ForceUpdateRFHardwareState. +- Calibration orchestration: 4 hand-written partials each wrap a generated sub-SM, dispatching + events (PowerCalSm_EventId_AUTO/NEXT_POINT/RECORD_DATA_POINT…) and bridging results into ED. + Power-cal fits the tanh PA model (Tune.cpp); IQ uses the sideband-sep sweep. +Single funnel: UpdateRFHardwareState called from Mode.cpp:24 (every ModeSm entry) + Loop.cpp +on freq/band/mode changes. Logged the "HardwareSm is generated" myth to roadmap. Firmware SM +pages now all drafts except ui-state-machine. + +## [2026-06-08] decision | Promoted ui-state-machine to draft (SM set complete) +Read UISm.h + the UISm.cpp dispatch/transitions + Loop.cpp dispatch sites. UISm = 13-state +screen/menu navigator (generated, UISm.drawio): +- SPLASH →[DO, splashCount≥splashDuration]→ HOME. +- Menu drill-down stack: HOME →MENU→ MAIN_MENU →SELECT→ SECONDARY_MENU →SELECT→ UPDATE + →SELECT→ HOME; HOME event pops to HOME from any level. +- Tool screens hanging off HOME (leaf, return on HOME): FREQ_ENTRY, EQUALIZER, BIT, and the 4 + CALIBRATE_* screens. +- Events DO/MENU/SELECT/HOME/DFE/EQUALIZER/BIT/CALIBRATE_* all from Loop.cpp; button routing + is state-aware (HandleButtonPress switches on uiSM.state_id) and locked out during TX. +- CALIBRATE_* is dual-dispatched to UISm (screen) AND ModeSm (hardware) — the sibling SMs. +Resolved the display-subsystem "what is DFE?" question: DFE = Direct Frequency Entry +(FREQ_ENTRY state, MainBoard_DisplayDFE). Updated display-subsystem + index + roadmap. +All 7 firmware state-machine pages (Mode, UI, Hardware coordinator, + the architecture/tune +pages) are now drafts; remaining firmware stubs are the board/IO modules (rf-board, +filter-boards, front-panel, cat-control, persistent-config, display-subsystem) and the 4 +generated cal sub-SM internal state maps. + +## [2026-06-08] decision | Promoted rf-board to draft (Si5351 quadrature VFO) +Read RFBoard.h (API) + RFBoard.cpp/RFBoard_si5351.cpp (impl). Documented the RF hardware- +abstraction layer: +- Three VFOs on one Si5351: RX = CLK0/CLK1 on PLLA, TX = CLK4/CLK5 on PLLB (independent freqs), + CW = CLK6 (or CLK2 single-VFO). Single-VFO boards fall back SetTXVFO→SetRXVFO. +- Quadrature 90° generation, two regimes (SetRXVFOFrequency, RFBoard.cpp:483): ≥3.2 MHz uses + the phase-offset register = multisynth divider ("multiple") for a digital 90° delay; <3.2 MHz + uses the TJ-Labs timed-delay trick (set clocks 4 Hz low, wait ~58.5 ms = quarter beat, cli/sei + for timing). EvenDivisor forces even dividers; PLL-only retune within a multiple range + minimizes I2C per encoder step. +- Attenuators (TX/RX, 0-31.5 dB / 0.5 dB via MCP23017 I2C), VFO drive/enable, T/R relays, + SSB/CW modulation routing, CW keying (CWon/CWoff), and EnableCalFeedback loopback for IQ cal. +- Frequency correction (ppb) from freq calibration. +Found a units discrepancy: RFBoard.h docstrings say VFO freq is "decihertz (Hz×10)" but the +real unit is Hz×100 (centi-Hz) per RFBoard.cpp:481 + SI5351_FREQ_MULT=100 + HandleTuneState +*100; the _dHz suffix is itself a centi-/deci- misnomer. Logged to roadmap units section. +Updated index/roadmap. Remaining firmware module stubs: filter-boards, front-panel, cat-control, +persistent-config, display-subsystem panes. + +## [2026-06-08] decision | Promoted filter-boards to draft (BPF/LPF/back-end + SWR) +Read BPFBoard.h, LPFBoard.h, LPFBoard_AD7991.h + the SWR math in LPFBoard.cpp. Key findings: +- The "LPF board" is really the RF BACK-END: LPF harmonic suppression + BPF path routing + + transverter (XVTR) + 100W PA select + antenna matrix (0-3) + SWR/power metering. BPF board + is just RX front-end selectivity. +- Documented the shared 64-bit `hardwareRegister` model (Globals.cpp:112, bit map SDT.h:69-83): + all three RF boards write bitfields into one register, flushed to MCP23017 GPIO expanders via + buffer_add()/UpdateMCPRegisters(). This is a cross-cutting architectural detail. +- BPF band→relay uses a byte-swap encoding (BPF_WORD macro, full table in BPFBoard.h); bands + 0-10 + 15=BYPASS. LPF uses BandToBCD (4-bit BCD), bands 0-10. +- SWR/power (PerformSWRBridgeReading): AD7991 CH0=fwd/CH1=refl (4.096V ref) or analog pins + 26/27. Math: counts→V, P=(V·10)²/50 (20 dB coupler), |Γ|=√(Pr/Pf), SWR=(1+|Γ|)/(1−|Γ|), with + guard rails. Feeds the display meter + PowerCalSm. +Open Qs logged: full LPF band↔BCD table, coupler 20 dB assumption / per-band power cal, and the +AD7991 REGISTER_SETUP channel-nibble=0 vs the CH0+CH1 comment. Updated index/roadmap. +Remaining firmware module stubs: front-panel, cat-control, persistent-config, display panes. + +## [2026-06-08] decision | Promoted front-panel to draft (documents encoder-i2c-speed design) +Read FrontPanel.h/.cpp + FrontPanel_Rotary.h. Front panel = 2×MCP23017 on Wire1: mcp1 = 16 +button switches, mcp2 = 6 switches + 4 rotary encoders + 2 LEDs. Encoders are Rotary_V12 (Ben +Buxton state machine adapted for MCP23017, per-encoder reversal, BOURN A/B-swap flag) → emit +iVOLUME/iFILTER/iCENTERTUNE/iFINETUNE ± events; buttons → iBUTTON_PRESSED + GetButton(). +Documented the encoder-i2c-speed two-tier design (commit 6977fa7): +- GPIO ISR (fpInterrupt1/2ISR) sets a flag only — NO blocking I2C in the high-priority ISR. +- 1 ms IntervalTimer fpServiceTimer runs ServiceFrontPanel at NVIC priority 240, BELOW the + OpenAudio update ISR (208), so encoder/button I2C can never delay audio. It does the deferred + interrupt1()/interrupt2() I2C drain when a flag is set OR the INT pin still reads LOW (level + recovery for missed edges). interrupt2 uses readGPIOAB() single-read optimization. +- Legacy CheckForFrontPanelInterrupts() (main-loop poll) remains as an idempotent backstop. +Rationale: decouples tuning responsiveness from the slow main-loop display/DSP cadence while +preserving audio via priority ordering — ties to real-time-constraints + spectrum-refresh-floor. +Caveat noted: all IntervalTimers share IRQ_PIT so priority(240) is global. Updated index/roadmap. +Remaining firmware module stubs: cat-control, persistent-config, display panes. + +## [2026-06-08] decision | Promoted persistent-config to draft (ED struct + JSON storage) +Read SDT.h config_t/ED (264-331), ParamSave.h, Storage.h/.cpp. ED is one global config_t = the +single source of truth: ~50 fields (many per-band, NUMBER_OF_BANDS=13) spanning audio/DSP, +tuning, modulation/CW, spectrum/display, equalizer, power/PA, calibration (RX/TX IQ, carrier- +null DCOffset, atten, SWR cal), antenna. Documented field groups + which module owns each. +Persistence (Storage.cpp): NOT a raw struct dump — ED is serialized field-by-field as +ArduinoJson and written to LittleFS_Program (~1 MB Teensy program flash) + optional SD +(BUILTIN_SDCARD). API: InitializeStorage / SaveDataToStorage(savetosd) / RestoreDataFromStorage +/ RestoreDataFromSDCard / PrintEDToSerial. Field-named JSON = robust to struct-layout changes. +ParamSave.cpp is a separate small RAM scratch (5 var + 3 array slots ≤256B) = transient undo +buffer for calibration twiddling, not persistence. Config.h = compile-time constants; Globals.cpp +defines the externs (ED, SampleRate, hardwareRegister, SMs, SR[], bands[]). +Discrepancy logged: ED="EEPROM Data" / .ino says "EEPROM" but it's really LittleFS+SD JSON +(Teensy 4.1 has no true EEPROM) — added to roadmap stale-comments. Updated index/roadmap. +Remaining firmware stubs: cat-control, display panes. + +## [2026-06-08] decision | Promoted cat-control to draft (Kenwood CAT command table) +Read CAT.h + CAT.cpp. CAT = Kenwood 2-letter command emulation over SerialUSB1 (2nd USB serial, +Dual Serial USB type) @ 38400 baud, ';'-terminated, polled by CheckForCATSerialEvents from the +main loop. Architecture = a 25-entry valid_command[] dispatch table {name, set_len, read_len, +write_fn, read_fn}; command_parser matches the 2-letter code and dispatches to write (set) vs +read (query) by length. Commands: FA/FB/FR/FT/FW (freq/VFO), MD/IF/ID (mode/status/id), BU/BD +(band), AG/MG/PC (gains/power), NR/NT/VX (DSP), KS (keyer WPM), TX/RX (PTT), AI/PS/PD/DB, plus +two CUSTOM non-Kenwood: ED (dump config) and PR (dump hardwareRegister). Apply paths: CAT feeds +the SAME channels as the front panel — writes enqueue InterruptType events (iUPDATE_TUNE on +freq, iBUTTON_PRESSED on band) AND/OR write ED directly (KS→ED.currentWPM); TX_write dispatches +to ModeSm. Reads serialize ED/hardware state back (IF = full status string). +Discrepancy logged: CAT.cpp says TS-480 but CAT.h says TS-2000 (docs has ts_480_pc.pdf) — added +to roadmap stale-comments. Updated index/roadmap. This was the last self-contained firmware +module stub; only display-pane internals remain. + +## [2026-06-08] decision | Promoted display-subsystem to draft — firmware modules COMPLETE +Read MainBoard_Display.h + DisplayHome.cpp + the DrawDisplay router. Documented: +- Pane model: struct Pane {x,y,w,h, DrawFunction, stale}; dirty-flag rendering — a pane redraws + only when stale=true (set by modules on data change), the efficiency mechanism for the 10ms + budget. Home screen = WindowPanes[NUMBER_OF_PANES] = 13 panes (VFO A/B, Freq/Band/Mod, + Spectrum, StateOfHealth, Time, SWR, TXRXStatus, SMeter, AudioSpectrum, Settings, NameBadge, + SAMOffset) — enumerated with rects. (The .ino "12-pane" is approximate; actually 13.) +- DrawDisplay() (MainBoard_Display.cpp:244) = top-level render router switching on uiSM.state_id + → per-screen draw fns. Confirms the UISm↔display mapping. Each non-home screen has its own + pane set. +- VariableParameter type-safe editor (union i8..f32/bool/KeyTypeId + min/max/step) drives the + UPDATE state; menus = primaryMenu[8] + SecondaryMenuOption (variableOption→editor or func ptr→ + action). Spectrum pane fed by zoom-fft psdnew; audio-spectrum by convolution-filter audioYPixel. +Resolved the "enumerate the 12 panes" open question. Updated index/roadmap. +MILESTONE: all self-contained firmware MODULE stubs are now drafts. Remaining wiki work is +deeper-dive content (4 cal sub-SM state maps) + unwritten theory/feature pages (CW processing, +equalizer, SAM detection, TX carrier-null). + +## [2026-06-09] decision | Consolidated undone doc-work + seeded development backlog from GitHub issues +Two parts. +(1) Recorded remaining documentation work in roadmap/documentation-todos: added a status header +(all firmware module + 9 theory pages are drafts) and a consolidated "Not yet written" list — +CW processing, equalizer, SAM detection, TX carrier-null, BIT, and the 4 generated cal sub-SM +state maps (PowerCalSm/ReceiveIQCalSm/TransmitCarrierCalSm/TransmitIQCalSm) — plus a per-page +"Remaining gaps" list. Removed the now-duplicate "referenced but not yet created" section. +(2) Pulled the 4 open GitHub issues (KI3P/Phoenix, via REST API since gh not installed) and +created the roadmap development backlog: one scoping page per issue + an index. IMPORTANT framing +per the human: these document WHAT NEEDS DOING and current state, NOT solution designs. +- development-backlog.md (index: status/effort/links, two tracks). +- transmit-spectrum.md (#10): found it's LARGELY BUILT — TransmitReceiveProcessing() runs during + SSB_TRANSMIT on dual-VFO (DSP.cpp:55) computing the PSD via ZoomFFTExe, and HandleTuneState + tunes RX VFO to freq/3 to watch the 3rd harmonic. Gaps: verify rendering, CW-TX, single-VFO, UX. +- manual-notch.md (#11): auto-notch scaffolding exists (notch button toggles ANR_notchOn 0↔1, + Xanr engine, display hook, CAT NT) but NO manual mode-2 path. Remaining: 3-way cycle, fixed-freq + notch DSP, spectrum line, filter-knob binding, ED storage/migration. +- usb-audio.md (#13): no USB-audio endpoints wired in MainBoard_AudioIO yet; lots of in-tree + USB_Audio_*.md debug docs = the starting material. Couples to #14. +- openaudio-library.md (#14): foundational OpenAudio change for audio quality; highest blast + radius; sequence with #13. +Two tracks identified: DSP/UI features (#10,#11 — extend partial backends, lower risk) vs +audio-plumbing (#14→#13 — foundational, coupled). Updated index.md roadmap section. + +## [2026-06-09] decision | Wrote cw-processing page (biggest remaining gap) +Read DSP_CWProcessing.h/.cpp. Created firmware/cw-processing.md documenting the RX-side CW: +- CW audio filter (CWAudioFilter): 5 selectable biquad cascades S1_CW_AudioFilter1..5 by + ED.CWFilterIndex (0.8/1.0/1.3/1.8/2.0 kHz) + off. +- Tone detection (DoCWReceiveProcessing): hybrid correlation (reference sine) × Goertzel mag at + CWToneOffsetsHz[CWToneIndex]; combinedCoeff thresholded → mark/space envelope. +- Adaptive Morse decoder (DoCWDecoding): MorseStates timing SM; standard dit/dah/space timing + (ditLength=1200/WPM); adaptive via signal+gap histograms (HISTOGRAM_ELEMENTS=750, + ADAPTIVE_SCALE_FACTOR=0.8) + JackClusteredArrayMax + thresholdGeometricMean; IsCWDecodeLocked. + Decode via flat-array Morse tree (bigMorseCodeTree): dit→index++, dah→index+=jump, jump>>=1; + emit at char end. Output buffer → display (decoderFlag). +- Sidetone (TX) phase precomputed in InitializeCWProcessing. +Contextualized within full CW path (TX keyer=ModeSm, CW VFO=rf-board/tune). Added inbound links +from dsp-chain + mode-state-machine (no longer orphaned). Logged a discrepancy: header says +"50–500 Hz typical" filter but code labels are 0.8–2.0 kHz. Updated index + documentation-todos. +Firmware page count now 17; CW was the largest "not yet written" gap. Remaining new pages: +equalizer, SAM detection, TX carrier-null, BIT, 4 cal sub-SM state maps. + +## [2026-06-09] decision | Wrote audio-equalizer + synchronous-am-detection pages +Two theory/ concept pages from DSP_FFT.cpp (EQ) and DSP.cpp (SAM): +- theory/audio-equalizer.md: 14-band graphic EQ = parallel filterbank. BandEQ/ApplyEQBandFilter + (DSP_FFT.cpp:787): 14 fixed biquad-cascade bands (EQ_Coeffs[14], 4 stages each), separate + RX/TX filter instances (S_Rec/S_Xmt) sharing coeffs, per-band gains ED.equalizerRec/Xmt + (/100, 100=flat); each band filtered→scaled by sign×gain→accumulated into eqSumBuffer→copied + back. Alternating sign (even bands negated) gives flat reconstruction of overlapping bands. + RX after demod (DSP.cpp:924); TX on mic audio. Edited via MainBoard_DisplayEqualizer (UISm + EQUALIZER). Open Qs: band freq/Q table, gain range. +- theory/synchronous-am-detection.md: SAM = DD4WH/wdsp synchronous AM (AMDecodeSAM, DSP.cpp:567). + 2nd-order PLL (phase det atan2 → loop filter g1/g2 from omegaN=200/zeta → NCO phzerror; freq + est omega2 clamped ±pll_fmax=4000Hz) recovers a clean carrier → fade-robust coherent demod, + vs envelope AM (AlphaBetaMag). Fade leveler (tauR/tauI). Carrier offset → GetSAMCarrierOffset + → home-screen SAM-offset pane. Open Qs: zeta/tau values, the ×10 scaling. +Added backlinks (dsp-chain related-theory, display-subsystem panes/files, theory/overview +concept list 8-10, index). documentation-todos: both marked done. Theory now 11 pages. +Remaining new pages: TX carrier-null, BIT, 4 cal sub-SM state maps. + +## [2026-06-09] decision | Wrote tx-carrier-null, built-in-test, calibration-state-machines +Three pages, clearing the last "not yet written" backlog. +- theory/tx-carrier-null.md: per-band DC offset added to TX I/Q before the DAC + (arm_offset_q15, DSP.cpp:1065-1067) cancels LO leakage (DC on baseband → carrier tone after + mixer). TransmitCarrierCalSm sweeps DCOffsetI/Q to maximize dBc. Contrasted the 3 TX cals + (image vs carrier vs power). Distinct from iq-imbalance (image). +- firmware/built-in-test.md: BIT struct (bit_results, Globals.cpp:69) = boolean I2C-presence + flags per subsystem (RF MCP/Si5351, BPF, LPF MCP/AD7991, front panel) set as a side effect of + each board's Initialize* (e.g. BPFBoard.cpp:30/41). DrawBIT "I2C Status Report" screen (UISm + BIT state), reached via iBITDISPLAY (Loop.cpp:1354). Connectivity test only, startup snapshot. +- firmware/calibration-state-machines.md: consolidated the 4 generated cal SMs. KEY FINDING: + ReceiveIQCalSm/TransmitIQCalSm/TransmitCarrierCalSm are STRUCTURALLY IDENTICAL (7 states: + STANDBY/BAND_ADJUST/FIND_MINIMUM/ADJUST/WAIT/READ; 7 events) — one minimize-sweep machine for + three metrics. PowerCalSm differs (POWERPOINT1/2/3, SSBPOINT, ACQUISITION, READ_AND_ADJUST, + POWERCOMPLETE; RECORD_DATA_POINT/CURVE_COMPLETE) because it's curve-fitting, not minimum-finding. + Mapped the WAIT→READ→ADJUST/NEXT_POINT loop + BAND_ADJUST/MIN_EXIT/AUTO_COMPLETE band stepping. +Added backlinks (hardware-state-machine, tx-carrier-null, iq-imbalance-correction; resolved the +HSM "full cal sub-SM state map" open Q). Updated index + documentation-todos. MILESTONE: every +previously-unwritten page is now a draft. Totals ~firmware 19, theory 13, roadmap 6. + +## [2026-06-09] lint | full wiki health-check (38 pages) +First formal lint. Built a link graph (Python) over all pages. Findings + fixes: +- BROKEN LINKS (10 instances): [[spectrum-refresh-floor]] was referenced from 6 pages but had + NO wiki page (only a memory note) → CREATED firmware/spectrum-refresh-floor.md (type:decision). + [[roadmap]] (real-time-constraints) and [[theory]] (code-heritage) pointed at directories, not + pages → re-pointed to [[front-panel]] and [[theory-overview]] respectively. [[tune-state-machine]] + in log.md left as-is (historical record). +- STALENESS (contradiction): the new spectrum page revealed the refresh work SHIPPED 2026-05-30 + (11.7→18.8 fps, NCHUNKS 8→5, REFRESH 80→50) but 4 pages (real-time-constraints, zoom-fft, + display-subsystem, main-loop) still asserted the OLD "~80 ms floor / NCHUNKS=8" framing → + reconciled all 4 to "redraw ≈ NCHUNKS×T_loop, cut draw cost" and defer to the page. +- AMBIGUOUS WIKILINKS: two overview.md files (firmware/ + theory/) made [[overview]] ambiguous + (basename-resolved per schema) → renamed theory/overview.md → theory-overview.md, updated all + 11 theory pages + index (sed). Now 0 duplicate basenames; firmware [[overview]] unambiguous. +- STALE STATUS: dsp-chain, real-time-constraints, state-machine-architecture were status:stub but + had draft-level content → promoted to draft (updated 2026-06-09). +- ORPHANS: none (llm-wiki.md is the meta originating-idea doc, referenced by CLAUDE.md; not a + catalog page). INDEX COVERAGE: complete after adding spectrum-refresh-floor. +RESULT: lint clean — 0 orphans, 0 broken links (excl. log history), 0 missing-from-index, 0 dup +basenames. Totals: firmware 20, theory 12, roadmap 6 = 38 content pages, all draft. + +## [2026-06-14] query | Resolved RX I/Q calibration tone-offset question +Traced the RXIQ cal signal path. CW tone is programmed to `band_center + SR[SampleRate].rate/4` +(`HardwareSm.cpp:613`) = 48 kHz at the default 192 kHz raw rate — the code comment is correct. +The "±6 kHz at 24 kHz" premise was wrong: the measured PSD is the 192 kHz raw, 1×-zoom 512-bin +display FFT (cal forces `spectrum_zoom = 0`, `HardwareSm.cpp:498`) → 375 Hz/bin, bin 256 = LO, +so ±Fs/4 = bins 128/384. Wanted = bin 384, image = bin 128. Also resolved the `×10` metric: +`psdnew` is log10 magnitude (`DSP_FFT.cpp:144,186`), so ×10 = dB. Updated +[[iq-imbalance-correction]] (calibration section + Resolved block) and struck two items from +[[documentation-todos]]. Remaining IQ open question: single-axis vs 2×2 residual / achieved IRR +(needs hardware measurement). + +## [2026-06-14] query | Resolved NR sample-rate comment question +`Kim1_NR` runs at the 24 kHz decimated RX rate (raw 192 kHz ÷ DF1·DF2 = 4·2 = 8, +`SDT.h:409-410`) → 24000/256 = 93.75 Hz/bin. The `46.9Hz [12000Hz/256] @96kHz` comment +(`DSP_Noise.cpp:141,155`) is stale DD4WH heritage text (old 96 kHz input / 12 kHz NR rate); +the code is rate-agnostic — it divides by the live `data->sampleRate_Hz / NR_FFT_L`, so it is +correct despite the comment. Updated [[noise-reduction]] (Kim1_NR section + Resolved note) and +struck the item from [[documentation-todos]]. + +## [2026-06-14] query | Resolved zoom default "mismatch" (false alarm) +`Config.h:78 #define ZOOM 3` is a front-panel **button-ID** macro (the "Front panel button +functions" block, `Config.h:74-96`), dispatched as `case ZOOM:` in `Loop.cpp:457,818` where it +does `ED.spectrum_zoom++`. It is unrelated to the zoom *level*. Power-on zoom is governed solely +by `ED.spectrum_zoom` (default 1 = 2×, `SDT.h:274`; or a restored JSON value, `Storage.cpp`). +No real discrepancy. Updated [[zoom-fft]] (Defaults + Resolved) and struck the item from +[[documentation-todos]]. + +## [2026-06-14] query | Resolved TX fixed-taps vs RX runtime-harris design question +Conclusion: primarily heritage, not a deliberate determinism/latency choice. The fixed 48-tap +TX tables are legacy DD4WH coefficient sets — the arrays are named/commented "RXfilters Dec and +Interpolation" (`DSP_FIR.cpp:174-175`) yet consumed by the TX chain (`DSP_FFT.cpp:425-442`). +RX *decimation* was refactored into the parametrized harris-formula design +(`InitializeDecimationFilter`, `DSP_FIR.cpp:1284-1300`, malloc). The runtime path's only +structural advantage — sample-rate independence via `SR[SampleRate].rate` — is dormant because +`SampleRate` is fixed at SAMPLE_RATE_192K (`Globals.cpp:106`) and never reassigned, so RX +recomputes identical coeffs every boot. Nuance: RX is itself a hybrid — decimation runtime-sized, +interpolation fixed 48/32 taps with runtime coeffs (`DSP_FFT.cpp:401-403`). Updated +[[multirate-decimation]] (new "Why RX designs taps at runtime" subsection + Resolved) and struck +the item from [[documentation-todos]]. + +## [2026-06-14] query | Resolved AGC soft-knee curve + n_tau/MAX_N_TAU questions +Soft-knee: the per-sample gain `mult = (out_target - slope_constant*fmin(0, log10(volts/max_input)))/volts` +(`DSP.cpp:454`) yields a 3-region transfer curve — flat limiting at out_target (volts≥max_input); +linear-in-log soft knee falling slope_constant/decade (min_volts..max_input); constant max_gain +below min_volts. var_gain is the wdsp slope knob: total output rise = out_target·(1−1/var_gain) +≈ +3.5 dB at the default 1.5. n_tau/MAX_N_TAU: MAX_N_TAU=8 is a commented-out worst-case constant +(`SDT.h:615-617`) used only to hand-size the static ring_buffsize=24000·8·0.01+1=1921; operating +n_tau=4 → 96-sample (~4 ms) look-ahead at 24 kHz. Added a "gain law / soft-knee transfer curve" +section + look-ahead/n_tau detail + Resolved block to [[agc-design]]; struck both items from +[[documentation-todos]]. + +## [2026-06-14] decision | Fixed stale source comments to match the wiki (6 findings) +Comment-only edits on branch encoder-i2c-speed (not committed). Corrected the long-standing +code/comment discrepancies the wiki had documented: +- VFO unit: RFBoard.h/Tune.h docstrings "decihertz/deci-Hertz" → "centi-Hz (Hz × 100; _dHz + suffix is a historical misnomer)". Symbol names left unchanged (invasive refactor). +- CAT: CAT.h:25 "TS-2000" → "TS-480" (consistent with CAT.cpp + ts_480_pc.pdf; ID020=TS-480). +- EEPROM myth: PhoenixSketch.ino header + Storage.cpp:675 now say flash/SD (LittleFS+SD JSON), + ED blurb notes "EEPROMData" is a historical name. +- TuneSm myth: PhoenixSketch.ino (philosophy bullet, ASCII diagram, SM list, module list) and + CLAUDE.md ("Frequency Control State" section + lines) → HardwareSm owns the tune state; + Tune.cpp is a pure-function library. +- HardwareSm hand-written: made explicit in PhoenixSketch.ino + HardwareSm.cpp header. +- ModeSm state list: .ino "…CW_TRANSMIT, TUNE" → real states (no TUNE; six CW_TRANSMIT_* + + CALIBRATE_*). +Struck all six from [[documentation-todos]]. Wiki was already correct; this aligns the source. + +## [2026-06-14] decision | Added hardware/ as a 4th wiki subject area +Physical-hardware documentation had no natural home (firmware/ = code, theory/ = DSP why). +Amended wiki/CLAUDE.md: added hardware/ to Scope (4 areas), directory layout, and a `hardware` +type value. Created hardware/hardware-platform.md (T41-EP overview: Teensy 4.1, board stack, +dual-SGTL5000 + PCM1808/PCM5102 audio, RF chain, power/PA/XVTR options) and hardware/i2c-bus-map.md +(Wire/Wire1/Wire2 topology, every device+address from Config.h, why the front panel gets its own +400 kHz bus). Facts derived from Config.h + board drivers (no schematic ingested yet; flagged). +Updated index.md (new Hardware section, count 38→40) and added inbound [[hardware-platform]]/ +[[i2c-bus-map]] links from overview, rf-board, filter-boards, front-panel, built-in-test. + +## [2026-06-14] ingest | T41-EP KiCad schematics (6 boards) +First physical-hardware source. Wrote sources/t41-ep-schematics.md summarizing all six files +(main / RF / attenuator-daughter / dual-clock-LO / BPF-exciter / LPF-100W-PA). Integrated +confirmed facts into [[hardware-platform]], [[i2c-bus-map]], [[rf-board]], [[filter-boards]]. +Key resolutions: ONE physical SGTL5000 (RX path is PCM1808 ADC + PCM5102 DAC) — flagged the +code's vestigial second-"SGTL5000" object as a discrepancy; RA8875 is off-board (J7); RX/TX +attenuators = PE4312 digital step attenuators (31.5dB/0.5dB) on a daughterboard; dual Si5351 +(25 MHz ref) confirmed; three I2C buses confirmed by SDA/SCL, SDA1/SCL1, SDA2/SCL2 nets. +New discrepancy flagged: LPF board uses AD8307 *log* power detectors, but PerformSWRBridgeReading +computes linear P=(V*10)^2/50 — needs reconciling (which detector feeds AD7991). Updated index +(Sources section populated; count 40 pages + 1 source). + +=== orphan/link check === + +## [2026-06-14] decision | Centralized schematic-ingest discrepancies in the tracker +The two new findings from the schematics (AD8307-log-vs-linear power math; phantom second +SGTL5000) and the net-tracing leads were recorded on their pages + log.md during ingest but not +in roadmap/documentation-todos.md (the central tracker). Added a "Hardware (from T41-EP +schematics)" subsection there so they're discoverable from the start-here hub. + +## [2026-06-14] decision | Net-traced AD8307 power chain — resolved the log-vs-linear question (NOT a bug) +Traced the LPF/PA board (K9HZ_100W_11band_LPF-Control) via union-find over wires/pins/labels, +confirmed with the schematic owner: coupler → 2× AD8307 log detectors (U14 forward, U19 +reflected) → AD7991 CH0/CH1; net REF = REF3440 4.096V reference on AD7991 Vin3/Vref (not +"reflected"); only 2 AD8307 placed. Read LPFBoard.cpp:589-649: the DEFAULT digital path already +does the correct AD8307 log conversion (mV/25 − 84 → dBm → W). The linear (V·10)²/50 formula is +the separate USE_ANALOG_SWR branch (linear diode detectors on Teensy pins 26/27, off by default). +So the earlier "possible bug" was a WIKI mis-attribution, now corrected. Updated [[filter-boards]] +(rewrote SWR section into two correct branches + Resolved), [[t41-ep-schematics]], +[[hardware-platform]], and struck the item in [[documentation-todos]]. + +## [2026-06-14] decision | Resolved the "phantom second SGTL5000" (schematic owner) +Audio architecture confirmed: ONE SGTL5000 (Teensy hat, sgtl5000_teensy) doing double-duty +(mic in + TX I/Q out); PCM1808 (U6) = RX I/Q in; PCM5102 (U5) = speaker out. The firmware's +pcm5102_mainBoard object corresponds to the PCM5102 DAC but is mistyped AudioControlSGTL5000 — +harmless because PCM5102/PCM1808 are control-less I2S parts (its .enable()/.inputSelect() calls +are no-ops; the I2S data path carries audio). So it's a code clarity fix (retype/rename, drop +"two SGTL5000s" comment), not a functional bug. Updated [[hardware-platform]], [[t41-ep-schematics]], +and struck the item in [[documentation-todos]]. + +## [2026-06-14] decision | Documented ATtiny85 (U4) soft-power controller — open question resolved +The main-board ATtiny85 is a dedicated power controller (separate sketch +code/src/ATTiny85_On_Off/ATTiny85_On_Off.ino, K9HZ/KI3P). 3-state machine: OFF → button → +FET on (boot Teensy) → ON → button → assert START_SHUTDOWN → SHUTDOWN (power held) while Teensy +saves params → Teensy raises SHUTDOWN_COMPLETE → FET off. Two-wire handshake (not I2C/sensor). +Teensy side: Loop.cpp:1499 polls BEGIN_TEENSY_SHUTDOWN → ShutdownTeensy() (Loop.cpp:1414) saves +state then digitalWrite(SHUTDOWN_COMPLETE,1); CAT 'PS' triggers same path. Firmware depends on +it for orderly power-down (enables save-on-power-off). Added a "Power control & graceful shutdown" +section to [[hardware-platform]], struck the ATtiny item from [[documentation-todos]]. + +## [2026-06-14] decision | Corrected PE4312 designators for board-revision differences +Owner clarified the U3/U12 confusion stems from RF-board revisions: V12.8 puts the PE4312s on +removable daughterboards (RX=U11, TX=U3; U12=dual-clock daughter); PRIOR revisions placed PE4312 +directly on the board (RX=U3, TX=U12). Wiring + firmware unchanged across revisions. Reworked +[[rf-board]] and [[t41-ep-schematics]] to lead with the revision-independent ELECTRICAL mapping +(GPIOA→RX, GPIOB→TX; bit→pin→dB table) and added a per-revision designator table; added a +"multiple revisions" caveat to the source preamble. The raw/ files are the V12.8/"V012" gen. + +## [2026-06-15] decision | Traced LPF/control board band-code → decoder → relay chain (owner) +Full decode chain documented in [[filter-boards]] + [[t41-ep-schematics]]: +- Band LPF: MCP23017 U15(0x25) GPIOB[0:3] (4-bit BCD) → U12 CD74HC4514 4→16 (A0-A3 pins 2,3,21,22) + → inverting U9/U10 ULN2803 → EXTERNAL band-LPF relays via J24/J25 (selected line LOW; NF=Y15 + bypass). BCD table per SDT.h:95-106. +- Antenna: GPIOB[4:5] → U2 74HC237 3→8 → U4 ULN2803 → on-board relays K4-K7 → ANT-1..4. +- 100W PA: GPIOB[7] → spare U4 channel → K2/K3. +- BPF RX/TX routing: GPIOA[0:1] (TXBPF/RXBPF) → U5/U6 → external BPF between J15-J18. +CORRECTION: earlier wiki said on-board K2-K7 were the band-LPF relays; actually K2/K3=PA route, +K4-K7=antenna, and the band-LPF relays are on a separate EXTERNAL board. Fixed in filter-boards +physical-hw bullet + source page. Struck the LPF band-code lead in documentation-todos. (Minor: +owner wrote "CD74HC4515" but schematic value field + active-high behavior = CD74HC4514; used 4514.) + +## [2026-06-15] ingest | LPF filter board (K9HZ_100W_11band_LPF-Filter) — band-LPF loop closed +Added the 7th schematic. 24× HF41F relays = 2 per band; ONE dedicated 7th-order LPF per band +(11 bands) + BNF straight-through bypass (NOT band-groups). Band-named control nets +B160M…B6M,BNF arrive on J26/J27 (←control board J24/J25); each net = 2 relay coils + 1 conn pin. +33 inductors (3/band, symmetric ladder), 5.21/4.73µH (160m) → 0.188/0.170µH (6m); caps 27-2200pF. +Full select loop: GPIOB[0:3] BCD → U12 CD74HC4514 Yn(=BCD) → U9/U10 ULN2803 → J24/J25→J27/J26 → +B → 2 relays → band LPF. Updated [[filter-boards]] (decode chain + resolved open Q), +[[t41-ep-schematics]] (file table + new section, 6→7 files), index.md. Only LPF item left: +tabulate per-band L/C→cutoff (values present in schematic, not yet tabulated). + +## [2026-06-15] decision | U21 upper bits unused; per-band L/C table out of scope +Owner-confirmed: RF-board MCP23017 (U21) upper bits GPA6/7 and GPB6/7 are unused / not connected +— each bank carries only the 6-bit attenuator word. Resolved in [[rf-board]]. Also: per-band LPF +L/C→cutoff tabulation is intentionally out of scope (more detail than the wiki needs) — removed +from the leads list, not a gap. Only remaining hardware net-tracing lead: I²S/MCLK routing. + +## [2026-06-15] decision | Traced I²S routing — last hardware net-trace closed +Owner + main-board schematic: shared I²S clocks MCLK=Teensy GPIO23 (net CLK), LRCLK=GPIO20 (LRCK), +BCLK=GPIO21 (BCK) to U5 PCM5102, U6 PCM1808, U7 SGTL5000 adapter. DAUDIO_OUT=GPIO32 (quad-I2S +OUT1B) → PCM5102 speaker DAC; ADC_IN ← PCM1808 RX I/Q. SGTL5000 uses standard audio-shield data +pins (OUT1A=GPIO7 TX I/Q + mic in), inferred. Documented in [[hardware-platform]] audio section + +Resolved list; cleaned the stale open-questions bullet (PE4312/band-code already resolved). All +schematic net-tracing leads now closed; struck the leads line in [[documentation-todos]]. Only +non-schematic hardware items remain (PA bias/rails; per-band SWR cal = bench). + +## [2026-06-15] lint | full wiki health-check (41 content pages incl. 1 source) +Structural: no duplicate basenames; no orphan content pages; frontmatter complete on all; every +content page linked from index.md. Broken wikilinks only in CLAUDE.md (schema examples +[[page-name]]/[[other-page]]) and log.md (historical [[tune-state-machine]] + stray [[roadmap]]/ +[[theory]] in old entries) — left as-is (doc/history, not navigational). + +Fixed contradictions/stale claims superseded by the schematic ingest: +- "3× AD8307" → "2× AD8307" (U14 fwd/U19 rev) in filter-boards + hardware-platform table; AD7991 + count corrected to 1 (U20 only placed). +- i2c-bus-map listed a phantom 2nd SGTL5000 (main board @ HIGH) + "two codecs" note — removed the + bogus bus row and rewrote the note (one SGTL5000; PCM1808/PCM5102 are control-less, not on I2C). +- tune-frequency-control called the ×100 unit "deci-Hz/deci-Hertz" — corrected to centi-Hz with a + misnomer note, consistent with rf-board. + +Recommendation (not yet actioned): no firmware **module** page exists for MainBoard_AudioIO.cpp +(the OpenAudio quad-I2S graph, mixers/queues, UpdateAudioIOState mode routing, sidetone). The +audio *hardware* is in [[hardware-platform]] but the audio *firmware module* is a content gap — +candidate new page firmware/audio-io. Also: hardware/ pages are now schematic-grounded and +candidates for draft→stable. + +## [2026-06-15] decision | Wrote firmware/audio-io (closed the lint-flagged content gap) +New module page for MainBoard_AudioIO.cpp: OpenAudio quad-I2S graph (i2s_quadIn/Out channel map), +the 4 input mixers + 4 record queues / 4 play queues + 4 output mixers (mixers as on/off +selectors), sidetone + TX-IQ-cal oscillators, UpdateAudioIOState() per-ModeSm-state routing table, +the queue ISR↔main-loop hand-off to DSP (Q_in_*/Q_out_* with DSP.cpp citations), init/AudioMemory/ +SetI2SFreq (48/96/192k), and the codec objects (sgtl5000_teensy real; pcm5102_mainBoard = PCM5102 +DAC, mistyped AudioControlSGTL5000, no-op control — cross-ref hardware-platform). Linked from index ++ inbound from dsp-chain, mode-state-machine, cw-processing, hardware-platform. firmware 20→21. + +## [2026-06-15] decision | Promoted hardware/ pages draft→stable +[[hardware-platform]] and [[i2c-bus-map]] are now schematic-grounded (sourced from +[[t41-ep-schematics]]) and lint-clean, with all open hardware net-traces resolved → promoted to +status: stable (updated 2026-06-15). Index draft markers updated; also corrected a stale index +blurb ("dual-SGTL5000" → single SGTL5000 + PCM1808/PCM5102). The backing source page +[[t41-ep-schematics]] and the firmware module pages [[rf-board]]/[[filter-boards]] remain draft +(other unrelated sections in those still maturing). + +## [2026-06-15] lint | verification pass before human correctness review +Cross-page consistency: AD8307=2 everywhere, AD7991=1×(U20), no stray "two SGTL5000" (only the +quoted code-comment inside the discrepancy box), no stale "deci-" outside misnomer-flagging +context, attenuator designators all revision-qualified. Citation spot-check (all exact): +MainBoard_AudioIO.cpp:121/140/198/280/446/452/488; DSP.cpp:134/730/988/1061; +LPFBoard.cpp:640-642 (AD8307 log→dBm); RFBoard.cpp:276/67/102 (attenuator word→GPIOA). No edits +needed. Flagged for human verification: inferred (non-net-labelled) claims — SGTL5000 data-pin +assignment (OUT1A=GPIO7 + mic-in) and the 74CBTLV3253 I/Q-mux role; and the raw/ schematic = the +"V12.8/V012" revision assumption behind the attenuator designator table. + +## [2026-06-16] decision | rf-board.md owner corrections +Owner proofreading corrections applied to `firmware/rf-board.md`: +1. VFO/LO discussion — added board-revision note that RF boards prior to V12.8 had a single + Si5351 with one quadrature pair (CLK0/CLK1) **shared** between RX and TX mixers (no + independent RX/TX LO), while still providing the CW carrier on CLK2. +2. Frequency units — renamed `_dHz`/decihertz → `_cHz`/centi-Hz throughout the section to match + the firmware rename; dropped the now-resolved "RFBoard.h says decihertz" wrong-unit flag. +3. Attenuators — corrected "GPIO value is simply attenuation ÷ 0.5 dB" to "the attenuation in + dB × 2" (matches `round(2·atten_dB) & 0x3F`). + +## [2026-06-16] decision | split board electronics firmware/ → hardware/ +Owner question surfaced that `firmware/rf-board.md` and `firmware/filter-boards.md` carried +substantial *electronics* content (part numbers, pinout tables, schematic-traced decode chains) +that the wiki schema assigns to `hardware/` (code-vs-electronics split). Resolution: moved that +content into two new pages — +- `hardware/rf-board-electronics.md` (type: hardware): dual/single Si5351 LO + board-revision + history, PE4312 attenuators (GPIO-bit→pin table + per-revision designators), ADT/PSA/MAR/MASWSS + mixer front end, I/Q baseband op-amps. +- `hardware/filter-board-electronics.md` (type: hardware): BPF/exciter board, LPF/PA control + board decode chain (CD74HC4514/74HC237 + ULN2803 + HF41F relays), external per-band 7-element + LPF board with inductor values, AD8307/AD7991/REF3440 SWR-sensing front end. +The two `firmware/` module pages now describe the **code/API** only (functions, the +`hardwareRegister` model, the SWR math, the band-BCD encoding the firmware writes, test hooks) +and point to the electronics pages. Cross-links added both ways; `hardware-platform.md` and +`index.md` updated (hardware page count 2→4, 41→43 content pages). No content lost — moved, not +duplicated. + +## [2026-06-16] lint | full wiki health-check +Structural: 44 content pages (43 + 1 source). **No broken inter-page links** (only schema-example +`[[page-name]]`/`[[other-page]]` in CLAUDE.md and historical entries in log.md, which are +expected/immutable). **No orphans.** **No duplicate basenames** among content pages (`raw/log.md` +shares the `log` basename but is an immutable source, out of namespace). New pages +rf-board-electronics / filter-board-electronics are reciprocally linked and indexed. +Stale-claim scan clean for: 3×AD8307 (correctly 2×), phantom 2nd SGTL5000 (only in the +discrepancy note), attenuator ÷0.5 phrasing (gone). +⚠ **CONTRADICTION FOUND (open):** wiki now says the VFO-frequency symbols were renamed `_dHz`→ +`_cHz` (rf-board.md "Frequency units"; documentation-todos "FULLY RESOLVED"), but the working-tree +source on branch `encoder-i2c-speed` still has **51 `_dHz` occurrences and zero `_cHz`** (RFBoard +.cpp/.h, Tune.cpp/.h, HardwareSm.cpp, MainBoard_DisplayHome.cpp). The docstrings note the misnomer +("centi-Hz … the _dHz suffix is a historical misnomer") but the identifiers are unchanged. Flagged +to owner: either the rename is uncommitted/on another branch, or the wiki overstated it. Awaiting +clarification before reconciling the two pages. tune-frequency-control.md still uses `_dHz`, which +currently *matches* source. + +## [2026-06-16] decision | dHz/cHz contradiction — owner ruling +Owner: the `_dHz`→`_cHz` rename is real but **not on `encoder-i2c-speed`** (uncommitted / other +branch). Resolution: **keep the wiki at `_cHz`** and add a branch-caveat note to rf-board.md +"Frequency units" and the documentation-todos entry, flagging that this working tree still shows +`_dHz` and the pages will reconcile once the rename merges. Lint contradiction closed. diff --git a/wiki/raw/.gitkeep b/wiki/raw/.gitkeep new file mode 100644 index 0000000..82d22f6 --- /dev/null +++ b/wiki/raw/.gitkeep @@ -0,0 +1 @@ +# Drop immutable source documents here. The LLM reads from raw/ but never edits it. diff --git a/wiki/raw/DualClockLO.kicad_sch b/wiki/raw/DualClockLO.kicad_sch new file mode 100644 index 0000000..9ddcc95 --- /dev/null +++ b/wiki/raw/DualClockLO.kicad_sch @@ -0,0 +1,7407 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "19e7ad66-8f4f-49d3-ad58-95c831b9d6b3") + (paper "A4") + (title_block + (title "Si5351A-B-GM Breakout Board") + (date "2025-12-27") + (rev "2") + (company "Oliver King, KI3P") + ) + (lib_symbols + (symbol "+3V3_1" + (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" "+3V3" + (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 \"+3V3\"" + (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 "+3V3_1_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 "+3V3_1_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 "Connector:Conn_01x03_Pin" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x03_Pin" + (at 0 -5.08 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" "Generic connector, single row, 01x03, script generated" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_locked" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_1x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_01x03_Pin_1_1" + (rectangle + (start 0.8636 2.667) + (end 0 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type outline) + ) + ) + (rectangle + (start 0.8636 0.127) + (end 0 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type outline) + ) + ) + (rectangle + (start 0.8636 -2.413) + (end 0 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 1.27 2.54) (xy 0.8636 2.54) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.27 0) (xy 0.8636 0) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.27 -2.54) (xy 0.8636 -2.54) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at 5.08 2.54 180) + (length 3.81) + (name "Pin_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 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -2.54 180) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Connector:Conn_01x04_Socket" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x04_Socket" + (at 0 -7.62 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" "Generic connector, single row, 01x04, script generated" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_locked" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_1x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_01x04_Socket_1_1" + (polyline + (pts + (xy -1.27 2.54) (xy -0.508 2.54) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 0) (xy -0.508 0) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 -2.54) (xy -0.508 -2.54) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 -5.08) (xy -0.508 -5.08) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 2.032) + (mid -0.5058 2.54) + (end 0 3.048) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -0.508) + (mid -0.5058 0) + (end 0 0.508) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -3.048) + (mid -0.5058 -2.54) + (end 0 -2.032) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -5.588) + (mid -0.5058 -5.08) + (end 0 -4.572) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -5.08 0) + (length 3.81) + (name "Pin_4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Connector:Conn_01x06_Socket" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x06_Socket" + (at 0 -10.16 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" "Generic connector, single row, 01x06, script generated" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_locked" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_1x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_01x06_Socket_1_1" + (polyline + (pts + (xy -1.27 5.08) (xy -0.508 5.08) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 2.54) (xy -0.508 2.54) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 0) (xy -0.508 0) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 -2.54) (xy -0.508 -2.54) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 -5.08) (xy -0.508 -5.08) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 -7.62) (xy -0.508 -7.62) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 4.572) + (mid -0.5058 5.08) + (end 0 5.588) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 2.032) + (mid -0.5058 2.54) + (end 0 3.048) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -0.508) + (mid -0.5058 0) + (end 0 0.508) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -3.048) + (mid -0.5058 -2.54) + (end 0 -2.032) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -5.588) + (mid -0.5058 -5.08) + (end 0 -4.572) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -8.128) + (mid -0.5058 -7.62) + (end 0 -7.112) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 5.08 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -5.08 0) + (length 3.81) + (name "Pin_5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -7.62 0) + (length 3.81) + (name "Pin_6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (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:Crystal" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "Y" + (at 0 3.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Crystal" + (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" "Two pin crystal" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "quartz ceramic resonator oscillator" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Crystal*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Crystal_0_1" + (polyline + (pts + (xy -2.54 0) (xy -1.905 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.905 -1.27) (xy -1.905 1.27) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.143 2.54) + (end 1.143 -2.54) + (stroke + (width 0.3048) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.905 -1.27) (xy 1.905 1.27) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 0) (xy 1.905 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Crystal_1_1" + (pin passive line + (at -3.81 0 0) + (length 1.27) + (name "1" + (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 1.27) + (name "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Device:L" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "L" + (at -1.27 0 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "L" + (at 1.905 0 90) + (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" "Inductor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "inductor choke coil reactor magnetic" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Choke_* *Coil* Inductor_* L_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "L_0_1" + (arc + (start 0 2.54) + (mid 0.6323 1.905) + (end 0 1.27) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 1.27) + (mid 0.6323 0.635) + (end 0 0) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 0) + (mid 0.6323 -0.635) + (end 0 -1.27) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -1.27) + (mid 0.6323 -1.905) + (end 0 -2.54) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "L_1_1" + (pin passive line + (at 0 3.81 270) + (length 1.27) + (name "1" + (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 "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 "Jumper:SolderJumper_2_Bridged" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 0) + (hide yes) + ) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (property "Reference" "JP" + (at 0 2.032 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SolderJumper_2_Bridged" + (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" "Solder Jumper, 2-pole, closed/bridged" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "solder jumper SPST" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SolderJumper*Bridged*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "SolderJumper_2_Bridged_0_1" + (rectangle + (start -0.508 0.508) + (end 0.508 -0.508) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy -0.254 1.016) (xy -0.254 -1.016) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -0.254 -1.016) + (mid -1.2656 0) + (end -0.254 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -0.254 -1.016) + (mid -1.2656 0) + (end -0.254 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (arc + (start 0.254 1.016) + (mid 1.2656 0) + (end 0.254 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0.254 1.016) + (mid 1.2656 0) + (end 0.254 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 0.254 1.016) (xy 0.254 -1.016) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "SolderJumper_2_Bridged_1_1" + (pin passive line + (at -3.81 0 0) + (length 2.54) + (name "A" + (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 "B" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Jumper:SolderJumper_2_Open" + (pin_names + (offset 0) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "JP" + (at 0 2.032 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SolderJumper_2_Open" + (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" "Solder Jumper, 2-pole, open" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "solder jumper SPST" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SolderJumper*Open*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "SolderJumper_2_Open_0_1" + (polyline + (pts + (xy -0.254 1.016) (xy -0.254 -1.016) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -0.254 -1.016) + (mid -1.2656 0) + (end -0.254 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -0.254 -1.016) + (mid -1.2656 0) + (end -0.254 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (arc + (start 0.254 1.016) + (mid 1.2656 0) + (end 0.254 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0.254 1.016) + (mid 1.2656 0) + (end 0.254 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 0.254 1.016) (xy 0.254 -1.016) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "SolderJumper_2_Open_1_1" + (pin passive line + (at -3.81 0 0) + (length 2.54) + (name "A" + (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 "B" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Mechanical:MountingHole" + (pin_names + (offset 1.016) + ) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (property "Reference" "H" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MountingHole" + (at 0 3.175 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" "Mounting Hole without connection" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "mounting hole" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "MountingHole*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MountingHole_0_1" + (circle + (center 0 0) + (radius 1.27) + (stroke + (width 1.27) + (type default) + ) + (fill + (type none) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Oscillator:Si5351A-B-GM" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "Y" + (at -12.7 21.59 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Si5351A-B-GM" + (at -13.97 -22.86 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_DFN_QFN:QFN-20-1EP_4x4mm_P0.5mm_EP2.7x2.7mm" + (at 0 -30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.silabs.com/documents/public/data-sheets/Si5351-B.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "I2C Programmable Any-Frequency CMOS Clock Generator, QFN-20" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "CMOS Synth Oscillator I2C" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "QFN*1EP*4x4mm*P0.5mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Si5351A-B-GM_1_1" + (rectangle + (start -12.7 20.32) + (end 12.7 -20.32) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (pin input line + (at -15.24 17.78 0) + (length 2.54) + (name "XA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -15.24 12.7 0) + (length 2.54) + (name "XB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -15.24 -2.54 0) + (length 2.54) + (name "A0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -15.24 -5.08 0) + (length 2.54) + (name "SDA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -15.24 -7.62 0) + (length 2.54) + (name "SCL" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -15.24 -15.24 0) + (length 2.54) + (name "OEB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -15.24 -17.78 0) + (length 2.54) + (name "SSEN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -5.08 22.86 270) + (length 2.54) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "20" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -2.54 22.86 270) + (length 2.54) + (name "VDDOA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 22.86 270) + (length 2.54) + (name "VDDOB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -22.86 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "21" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 2.54 22.86 270) + (length 2.54) + (name "VDDOC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 5.08 22.86 270) + (length 2.54) + (name "VDDOD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 15.24 17.78 180) + (length 2.54) + (name "CLK0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 15.24 12.7 180) + (length 2.54) + (name "CLK1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 15.24 7.62 180) + (length 2.54) + (name "CLK2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 15.24 2.54 180) + (length 2.54) + (name "CLK3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 15.24 -2.54 180) + (length 2.54) + (name "CLK4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "19" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 15.24 -7.62 180) + (length 2.54) + (name "CLK5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 15.24 -12.7 180) + (length 2.54) + (name "CLK6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 15.24 -17.78 180) + (length 2.54) + (name "CLK7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "SparkFun-Qwiic:qwiic_Logo" + (pin_names + (offset 1.016) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board no) + (property "Reference" "G" + (at 0 3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "qwiic_Logo" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "" + (at 0 -6.35 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" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "SparkFun Qwiic I2C" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "qwiic_Logo_0_0" + (polyline + (pts + (xy -5.4327 -0.8446) (xy -5.2808 -0.8039) (xy -5.1544 -0.733) (xy -5.0492 -0.629) (xy -4.9612 -0.4891) + (xy -4.9388 -0.4442) (xy -4.9077 -0.3735) (xy -4.8888 -0.3096) (xy -4.878 -0.2364) (xy -4.8713 -0.1381) + (xy -4.8691 -0.0268) (xy -4.8861 0.154) (xy -4.9313 0.3092) (xy -5.006 0.4432) (xy -5.1118 0.5598) + (xy -5.1427 0.5863) (xy -5.261 0.6623) (xy -5.3915 0.7052) (xy -5.544 0.7187) (xy -5.5765 0.7181) + (xy -5.7259 0.6986) (xy -5.8545 0.6485) (xy -5.9707 0.5648) (xy -6.0239 0.5125) (xy -6.1186 0.3839) + (xy -6.1815 0.2359) (xy -6.2139 0.0648) (xy -6.2171 -0.1327) (xy -6.208 -0.2303) (xy -6.1669 -0.4073) + (xy -6.0959 -0.5571) (xy -5.9957 -0.6791) (xy -5.8667 -0.7722) (xy -5.7097 -0.8355) (xy -5.6837 -0.8418) + (xy -5.5963 -0.8532) (xy -5.5114 -0.8538) (xy -5.4327 -0.8446) + ) + (stroke + (width 0.01) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 1.114 -2.7667) (xy 6.0472 -2.7606) (xy 6.2463 -2.7148) (xy 6.337 -2.6928) (xy 6.6505 -2.5964) + (xy 6.9363 -2.4737) (xy 7.1992 -2.3218) (xy 7.4443 -2.1381) (xy 7.6763 -1.9197) (xy 7.765 -1.8236) + (xy 7.9726 -1.5605) (xy 8.1416 -1.2836) (xy 8.2724 -0.992) (xy 8.3654 -0.6847) (xy 8.4209 -0.3609) + (xy 8.4393 -0.0196) (xy 8.4383 0.0655) (xy 8.4145 0.3752) (xy 8.3579 0.6676) (xy 8.2664 0.9511) + (xy 8.138 1.234) (xy 8.0972 1.3103) (xy 7.9176 1.5925) (xy 7.7084 1.847) (xy 7.4711 2.0726) (xy 7.2073 2.2681) + (xy 6.9187 2.4323) (xy 6.6067 2.5639) (xy 6.273 2.6617) (xy 6.2589 2.6648) (xy 6.2405 2.6684) + (xy 6.2191 2.6716) (xy 6.1933 2.6747) (xy 6.1617 2.6775) (xy 6.1229 2.6801) (xy 6.0753 2.6825) + (xy 6.0178 2.6847) (xy 5.9488 2.6867) (xy 5.8669 2.6886) (xy 5.7707 2.6902) (xy 5.6588 2.6917) + (xy 5.5298 2.693) (xy 5.3823 2.6942) (xy 5.2149 2.6953) (xy 5.0261 2.6962) (xy 4.8146 2.697) (xy 4.579 2.6977) + (xy 4.3178 2.6982) (xy 4.0296 2.6987) (xy 3.7131 2.6991) (xy 3.3667 2.6994) (xy 2.9892 2.6997) + (xy 2.579 2.6999) (xy 2.1348 2.7) (xy 1.6552 2.7001) (xy 1.1388 2.7001) (xy 0.5841 2.7001) (xy -0.0102 2.7001) + (xy -6.1292 2.7001) (xy -6.3505 2.644) (xy -6.4841 2.607) (xy -6.7964 2.4938) (xy -7.0847 2.3484) + (xy -7.3523 2.1691) (xy -7.6022 1.9541) (xy -7.8228 1.7179) (xy -8.0199 1.4516) (xy -8.1801 1.1677) + (xy -8.3036 0.8654) (xy -8.3907 0.5442) (xy -8.4419 0.2033) (xy -8.4512 -0.0999) (xy -8.4229 -0.4124) + (xy -8.358 -0.7268) (xy -8.2573 -1.037) (xy -8.2016 -1.1697) (xy -8.0521 -1.4517) (xy -7.87 -1.7127) + (xy -7.6584 -1.9504) (xy -7.4205 -2.1625) (xy -7.1593 -2.3467) (xy -6.878 -2.5006) (xy -6.5797 -2.6219) + (xy -6.2674 -2.7084) (xy -5.9444 -2.7576) (xy -5.922 -2.759) (xy -5.8567 -2.7613) (xy -5.7613 -2.7635) + (xy -5.6429 -2.7656) (xy -5.5083 -2.7673) (xy -5.3644 -2.7686) (xy -4.8664 -2.772) (xy -4.8664 -2.0042) + (xy -4.8664 -1.2363) (xy -4.988 -1.3553) (xy -5.0139 -1.3798) (xy -5.1784 -1.503) (xy -5.3644 -1.5917) + (xy -5.5706 -1.6453) (xy -5.7956 -1.6632) (xy -6.0087 -1.6503) (xy -6.2442 -1.6015) (xy -6.468 -1.5153) + (xy -6.6423 -1.4122) (xy -6.8101 -1.2696) (xy -6.9545 -1.0983) (xy -7.0706 -0.9035) (xy -7.1159 -0.8066) + (xy -7.1662 -0.6802) (xy -7.2032 -0.5549) (xy -7.2309 -0.4168) (xy -7.2531 -0.2517) (xy -7.2645 -0.0773) + (xy -7.2559 0.1553) (xy -7.2228 0.3848) (xy -7.1667 0.6002) (xy -7.0895 0.7905) (xy -6.9738 0.984) + (xy -6.8224 1.164) (xy -6.645 1.3131) (xy -6.4435 1.4296) (xy -6.2198 1.512) (xy -6.2168 1.5128) + (xy -6.0991 1.5354) (xy -5.9587 1.5479) (xy -5.8081 1.5506) (xy -5.6599 1.5435) (xy -5.5266 1.5269) + (xy -5.4208 1.5009) (xy -5.3121 1.4578) (xy -5.1345 1.3582) (xy -4.9742 1.2256) (xy -4.8664 1.1205) + (xy -4.8664 1.32) (xy -4.8664 1.5195) (xy -4.3428 1.5195) (xy -3.8192 1.5195) (xy -3.8192 1.5092) + (xy -3.651 1.5092) (xy -3.1359 1.5147) (xy -3.0732 1.5153) (xy -2.9054 1.5158) (xy -2.7765 1.5144) + (xy -2.6848 1.5109) (xy -2.6289 1.5054) (xy -2.607 1.4977) (xy -2.6049 1.4928) (xy -2.5923 1.4545) + (xy -2.5697 1.3821) (xy -2.5383 1.2793) (xy -2.4992 1.1497) (xy -2.4535 0.9973) (xy -2.4024 0.8257) + (xy -2.3469 0.6386) (xy -2.2883 0.4399) (xy -2.2626 0.353) (xy -2.2055 0.1609) (xy -2.152 -0.0169) + (xy -2.1032 -0.1766) (xy -2.0604 -0.3147) (xy -2.0246 -0.4277) (xy -1.9968 -0.512) (xy -1.9783 -0.564) + (xy -1.9702 -0.5801) (xy -1.9654 -0.5681) (xy -1.9499 -0.5201) (xy -1.9252 -0.4397) (xy -1.8924 -0.3308) + (xy -1.8529 -0.1975) (xy -1.8079 -0.0439) (xy -1.7584 0.1259) (xy -1.7059 0.308) (xy -1.6754 0.4138) + (xy -1.6217 0.6001) (xy -1.5705 0.7774) (xy -1.5233 0.9405) (xy -1.4815 1.0844) (xy -1.4467 1.2041) + (xy -1.4202 1.2945) (xy -1.4037 1.3504) (xy -1.3525 1.5202) (xy -0.8571 1.5147) (xy -0.3617 1.5092) + (xy -0.2632 1.1704) (xy -0.2457 1.1103) (xy -0.1592 0.8126) (xy -0.0832 0.5516) (xy -0.017 0.325) + (xy 0.04 0.1304) (xy 0.0886 -0.0344) (xy 0.1296 -0.1717) (xy 0.1636 -0.2838) (xy 0.1915 -0.3731) + (xy 0.2138 -0.4419) (xy 0.2315 -0.4925) (xy 0.2451 -0.5272) (xy 0.2555 -0.5482) (xy 0.2633 -0.558) + (xy 0.2693 -0.5588) (xy 0.2742 -0.5529) (xy 0.2787 -0.5426) (xy 0.2801 -0.5389) (xy 0.2928 -0.4995) + (xy 0.3157 -0.4255) (xy 0.3473 -0.3211) (xy 0.3867 -0.1902) (xy 0.4325 -0.0368) (xy 0.4835 0.1352) + (xy 0.5386 0.3216) (xy 0.5966 0.5185) (xy 0.8908 1.5195) (xy 1.3899 1.5195) (xy 1.4919 1.5192) + (xy 1.6201 1.518) (xy 1.7294 1.5159) (xy 1.8144 1.5132) (xy 1.8695 1.5099) (xy 1.8891 1.5062) + (xy 1.8878 1.5017) (xy 1.8751 1.465) (xy 1.8498 1.3939) (xy 1.8129 1.2913) (xy 1.7656 1.1601) + (xy 1.7087 1.0033) (xy 1.6435 0.8236) (xy 1.5709 0.6241) (xy 1.4919 0.4076) (xy 1.4078 0.1771) + (xy 1.3194 -0.0646) (xy 0.7498 -1.6222) (xy 2.0329 -1.6222) (xy 2.0329 -0.0513) (xy 2.0329 1.5195) + (xy 2.5462 1.5195) (xy 3.0595 1.5195) (xy 3.0595 -0.0513) (xy 3.0595 -1.6222) (xy 3.2649 -1.6222) + (xy 3.2649 -0.0513) (xy 3.2649 1.5195) (xy 3.7782 1.5195) (xy 4.2916 1.5195) (xy 4.2916 -0.0513) + (xy 4.2916 -0.0616) (xy 4.5072 -0.0616) (xy 4.51 0.109) (xy 4.5206 0.2597) (xy 4.5412 0.3904) + (xy 4.5742 0.5118) (xy 4.6219 0.6344) (xy 4.6865 0.7688) (xy 4.7189 0.8272) (xy 4.8331 0.9884) + (xy 4.9744 1.1395) (xy 5.1327 1.2705) (xy 5.2977 1.3713) (xy 5.3343 1.3892) (xy 5.5052 1.4608) + (xy 5.6736 1.5089) (xy 5.8531 1.5366) (xy 6.0574 1.547) (xy 6.3141 1.5503) (xy 6.3197 1.1242) + (xy 6.3252 0.6981) (xy 6.1657 0.6977) (xy 6.0758 0.6938) (xy 5.9577 0.6711) (xy 5.8554 0.6239) + (xy 5.7556 0.5473) (xy 5.6613 0.4359) (xy 5.592 0.2991) (xy 5.5481 0.1445) (xy 5.53 -0.0204) (xy 5.5379 -0.188) + (xy 5.572 -0.3512) (xy 5.6325 -0.5023) (xy 5.7197 -0.634) (xy 5.7811 -0.6969) (xy 5.8788 -0.7612) + (xy 5.9969 -0.8003) (xy 6.1437 -0.8177) (xy 6.3252 -0.8264) (xy 6.3197 -1.2397) (xy 6.3141 -1.653) + (xy 6.119 -1.6559) (xy 6.0236 -1.6559) (xy 5.821 -1.6423) (xy 5.6365 -1.6074) (xy 5.4566 -1.5482) + (xy 5.2677 -1.4615) (xy 5.1266 -1.3784) (xy 4.9456 -1.2329) (xy 4.7938 -1.0591) (xy 4.6732 -0.8591) + (xy 4.6423 -0.7948) (xy 4.5921 -0.6805) (xy 4.5558 -0.5768) (xy 4.5314 -0.4734) (xy 4.5165 -0.3599) + (xy 4.5092 -0.2261) (xy 4.5072 -0.0616) (xy 4.2916 -0.0616) (xy 4.2916 -1.6222) (xy 3.7782 -1.6222) + (xy 3.2649 -1.6222) (xy 3.0595 -1.6222) (xy 2.5462 -1.6222) (xy 2.0329 -1.6222) (xy 0.7498 -1.6222) + (xy 0.2363 -1.6221) (xy -0.2772 -1.6221) (xy -0.5736 -0.6568) (xy -0.583 -0.626) (xy -0.6413 -0.4378) + (xy -0.696 -0.2633) (xy -0.746 -0.106) (xy -0.7901 0.0304) (xy -0.8272 0.1421) (xy -0.8559 0.2255) + (xy -0.8751 0.277) (xy -0.8836 0.2929) (xy -0.8838 0.2926) (xy -0.8932 0.2679) (xy -0.9134 0.208) + (xy -0.9431 0.1169) (xy -0.9811 -0.0016) (xy -1.0262 -0.1436) (xy -1.0771 -0.3054) (xy -1.1326 -0.483) + (xy -1.1916 -0.6725) (xy -1.4859 -1.6222) (xy -2.0006 -1.6218) (xy -2.5153 -1.6215) (xy -3.0831 -0.0561) + (xy -3.651 1.5092) (xy -3.8192 1.5092) (xy -3.8192 -0.6267) (xy -3.8192 -2.7729) (xy 1.114 -2.7667) + ) + (stroke + (width 0.01) + (type default) + ) + (fill + (type outline) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "T41_Library:ECS-TX053-S3" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 1.27 11.43 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "ECS-TX053-S3" + (at 2.54 8.89 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 -16.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ecsxtal.com/store/pdf/ECS-TXO53-S3.pdf" + (at 1.27 -19.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "HCMOS temperature compensated oscillator" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "TXCO" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Oscillator*SMD*Fox*FT5H*5.0x3.2mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "ECS-TX053-S3_0_1" + (rectangle + (start -5.08 5.08) + (end 5.08 -5.08) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (polyline + (pts + (xy 0.635 2.54) (xy 1.27 2.54) (xy 1.27 3.81) (xy 1.905 3.81) (xy 1.905 2.54) (xy 2.54 2.54) (xy 2.54 3.81) + (xy 3.175 3.81) (xy 3.175 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "ECS-TX053-S3_1_1" + (pin power_in line + (at -2.54 7.62 270) + (length 2.54) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -2.54 -7.62 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 3.81 -7.62 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 7.62 0 180) + (length 2.54) + (name "OUT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:+3V3" + (power) + (pin_names + (offset 0) + ) + (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" "+3V3" + (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 \"+3V3\"" + (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 "+3V3_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 "+3V3_1_1" + (pin power_in line + (at 0 0 90) + (length 0) + (hide yes) + (name "+3V3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:GND" + (power) + (pin_names + (offset 0) + ) + (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) + (hide yes) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + ) + (text_box "Optional: TCXO upgrade" + (exclude_from_sim no) + (at 127 44.45 0) + (size 26.67 48.26) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "0f9d4e2e-7e7b-4d50-af6d-ddc3115bbf6d") + ) + (junction + (at 213.36 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "17e20bc6-d548-4285-9cde-8a0192198dba") + ) + (junction + (at 233.68 130.81) + (diameter 0) + (color 0 0 0 0) + (uuid "3df4e8c5-8593-4e2b-b882-1a69eeb97673") + ) + (junction + (at 163.83 90.17) + (diameter 0) + (color 0 0 0 0) + (uuid "5216df29-b1c8-4010-a229-e80db6d9cf3b") + ) + (junction + (at 217.17 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "679c6fc6-7afa-445a-9d3f-1cea30b37a5f") + ) + (junction + (at 236.22 125.73) + (diameter 0) + (color 0 0 0 0) + (uuid "7da5093a-7697-4886-a820-d5f11f31395b") + ) + (junction + (at 234.95 128.27) + (diameter 0) + (color 0 0 0 0) + (uuid "869f7270-e36e-4297-b33c-a23beaf060e2") + ) + (junction + (at 171.45 90.17) + (diameter 0) + (color 0 0 0 0) + (uuid "9b11f462-b577-46ac-98c0-e5a1bcca0eee") + ) + (junction + (at 137.16 80.01) + (diameter 0) + (color 0 0 0 0) + (uuid "a0883646-6a07-4fea-afc5-91c558b77c9d") + ) + (junction + (at 237.49 123.19) + (diameter 0) + (color 0 0 0 0) + (uuid "abcd5381-baf8-4154-b0ff-7d446a5c3fb8") + ) + (junction + (at 162.56 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "af8859fe-7d4d-4272-9fe0-f977b8055e29") + ) + (junction + (at 201.93 50.8) + (diameter 0) + (color 0 0 0 0) + (uuid "b65fe484-8bb7-409c-8ed4-03f7fa5dda16") + ) + (junction + (at 207.01 64.77) + (diameter 0) + (color 0 0 0 0) + (uuid "bacfcee0-3846-4961-a5d0-8315d12a8bab") + ) + (junction + (at 133.35 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "db54e23b-4aa4-4276-a115-6a25f27b2ef2") + ) + (junction + (at 181.61 90.17) + (diameter 0) + (color 0 0 0 0) + (uuid "e553f287-d5ce-46dc-b3c6-ca4113d82c3c") + ) + (wire + (pts + (xy 234.95 128.27) (xy 241.3 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "00c4cd26-984b-40fd-9491-209058b72b75") + ) + (wire + (pts + (xy 227.33 128.27) (xy 234.95 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0151e5b8-b1bc-447c-9089-d925fb0583d5") + ) + (wire + (pts + (xy 222.25 80.01) (xy 241.3 80.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "023db356-cdcd-431a-81d4-9917190225be") + ) + (wire + (pts + (xy 222.25 90.17) (xy 243.84 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0503e07b-8bf8-4a43-b59d-e688a59aec88") + ) + (wire + (pts + (xy 173.99 110.49) (xy 191.77 110.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0b780d59-f317-425e-8540-443c793f5333") + ) + (wire + (pts + (xy 243.84 85.09) (xy 246.38 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "10857c87-e547-4b7d-b0a3-a42f853f9062") + ) + (wire + (pts + (xy 171.45 90.17) (xy 172.72 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "10ce371c-74d3-44c1-beb9-6c106e5d8522") + ) + (wire + (pts + (xy 198.12 54.61) (xy 198.12 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1ca897fa-d13e-4f53-a473-821a4addb8bc") + ) + (wire + (pts + (xy 223.52 66.04) (xy 220.98 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1e45f013-6404-40c5-8780-3fe72d17a8ac") + ) + (wire + (pts + (xy 242.57 85.09) (xy 242.57 82.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1f05286b-5e63-4602-852f-464ad3a68363") + ) + (wire + (pts + (xy 175.26 72.39) (xy 175.26 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "23375962-c3b0-4203-8769-455c49d69459") + ) + (wire + (pts + (xy 243.84 78.74) (xy 246.38 78.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2ac3e12a-14b6-421a-9c8f-bfd80f989eb3") + ) + (wire + (pts + (xy 232.41 123.19) (xy 237.49 123.19) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2d114cf7-fa9f-4275-9c58-60b17e4f5f09") + ) + (wire + (pts + (xy 237.49 143.51) (xy 236.22 143.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "30f2361f-b4b4-4125-822e-fa102f1987ff") + ) + (wire + (pts + (xy 242.57 82.55) (xy 246.38 82.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "330640a0-ed37-4ac4-83de-9dcdef00712b") + ) + (wire + (pts + (xy 190.5 90.17) (xy 190.5 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "36285f63-8c1b-4a63-92fe-d8fcadff8327") + ) + (wire + (pts + (xy 201.93 50.8) (xy 201.93 69.85) + ) + (stroke + (width 0) + (type default) + ) + (uuid "38c951c7-b2df-45c9-ad23-711d9654686c") + ) + (wire + (pts + (xy 232.41 125.73) (xy 236.22 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3d5f2b8c-e224-45c6-82c7-a2c9463138fb") + ) + (wire + (pts + (xy 180.34 90.17) (xy 181.61 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "406ca6d4-adc8-4dcd-970d-52d1fbc43f33") + ) + (wire + (pts + (xy 212.09 66.04) (xy 213.36 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "44f469cd-1d07-420a-917b-75de760da225") + ) + (wire + (pts + (xy 245.11 99.06) (xy 245.11 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "45d590d2-cb46-45ed-bd9b-40051439c2d3") + ) + (wire + (pts + (xy 207.01 53.34) (xy 207.01 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "49ea8b93-e04e-4371-a1ff-76b76285ee8a") + ) + (wire + (pts + (xy 198.12 50.8) (xy 201.93 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "59434862-f4f3-4b12-bf6a-f6c2567cebc9") + ) + (wire + (pts + (xy 254 104.14) (xy 261.62 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "59bd5697-50fc-4854-bb71-f2eaa0e3a231") + ) + (wire + (pts + (xy 209.55 50.8) (xy 201.93 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5e081206-9f63-4ac6-b503-532e4fe4cd23") + ) + (wire + (pts + (xy 252.73 106.68) (xy 261.62 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5fd573af-fe32-438c-bbe2-9ba9ec1bd764") + ) + (wire + (pts + (xy 181.61 95.25) (xy 181.61 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5fe30b13-9ad1-4be1-9831-9c3366548484") + ) + (wire + (pts + (xy 162.56 72.39) (xy 175.26 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "609a6ad8-f75d-42f9-9bb5-0c95d4e72b91") + ) + (wire + (pts + (xy 156.21 100.33) (xy 191.77 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "62f1a2df-da57-419a-ac5f-e2c6bc352e8f") + ) + (wire + (pts + (xy 233.68 148.59) (xy 233.68 130.81) + ) + (stroke + (width 0) + (type default) + ) + (uuid "63d7968e-39b7-4847-b683-5f70def71eed") + ) + (wire + (pts + (xy 135.89 58.42) (xy 133.35 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "69498b2c-797f-44a8-8b4c-892bb4800e44") + ) + (wire + (pts + (xy 245.11 99.06) (xy 261.62 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6a2fd90b-a7e7-4cc7-98f5-56764512eff0") + ) + (wire + (pts + (xy 137.16 80.01) (xy 137.16 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6aa780f1-f923-4ed2-9618-1c60e91127fd") + ) + (wire + (pts + (xy 147.32 58.42) (xy 147.32 62.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6e462e5e-b021-4aea-96ea-5d23fad6e666") + ) + (wire + (pts + (xy 162.56 80.01) (xy 191.77 80.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6e967797-6ed4-4dad-b6b9-52b25d3cc5c9") + ) + (wire + (pts + (xy 250.19 90.17) (xy 261.62 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6fd651e0-d1d5-4923-9433-e91ebe50e54a") + ) + (wire + (pts + (xy 156.21 97.79) (xy 156.21 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "71d66149-8ca4-4a37-b1c7-892889704963") + ) + (wire + (pts + (xy 256.54 101.6) (xy 261.62 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "73db7e7f-46de-42db-a278-9287b7659c1e") + ) + (wire + (pts + (xy 163.83 97.79) (xy 191.77 97.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "78d52bcb-4382-49c1-a45d-73ac927c9196") + ) + (wire + (pts + (xy 222.25 74.93) (xy 246.38 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7d1d4688-644b-48d1-b674-89d847268457") + ) + (wire + (pts + (xy 237.49 146.05) (xy 234.95 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7e8978c3-7d60-4d0a-a1d0-cfb2f9b41568") + ) + (wire + (pts + (xy 207.01 121.92) (xy 207.01 115.57) + ) + (stroke + (width 0) + (type default) + ) + (uuid "81ebc64b-df11-44ab-a6f0-cc0cd9b83942") + ) + (wire + (pts + (xy 147.32 58.42) (xy 143.51 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "856d1300-44b3-44f4-bc06-bad0e2e73faf") + ) + (wire + (pts + (xy 182.88 90.17) (xy 181.61 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8594ee71-d03b-4900-b9cd-11c9fe6a320a") + ) + (wire + (pts + (xy 248.92 96.52) (xy 248.92 110.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "869249c6-1de9-4aaa-bb8e-a64e6c88e43d") + ) + (wire + (pts + (xy 234.95 128.27) (xy 234.95 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "88648de4-cfbb-44f9-9d2a-59767947e5c1") + ) + (wire + (pts + (xy 173.99 107.95) (xy 191.77 107.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8990ea9d-8387-4616-beb1-9deb88f6a0ed") + ) + (wire + (pts + (xy 252.73 95.25) (xy 252.73 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "89d878a6-ed67-4137-8ae2-48f39013277f") + ) + (wire + (pts + (xy 191.77 95.25) (xy 181.61 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8a68065d-f04b-4c22-8703-5d5e1e659d56") + ) + (wire + (pts + (xy 222.25 100.33) (xy 254 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8b275aa8-3dde-481c-ac15-ecac1fc39b41") + ) + (wire + (pts + (xy 243.84 90.17) (xy 243.84 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8c9cef12-bff9-4412-86b5-05fd4e7f5a86") + ) + (wire + (pts + (xy 248.92 96.52) (xy 261.62 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8e70e43d-e8e1-4067-8799-6f91c299f45b") + ) + (wire + (pts + (xy 237.49 123.19) (xy 237.49 140.97) + ) + (stroke + (width 0) + (type default) + ) + (uuid "923b6d1a-9622-4db8-ac0d-70247a7fcd59") + ) + (wire + (pts + (xy 212.09 69.85) (xy 212.09 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "961eb9e8-6774-4167-85b6-67aa6c544d49") + ) + (wire + (pts + (xy 209.55 69.85) (xy 209.55 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "979e9fdc-2b31-4f2e-9ddc-85c698424e8b") + ) + (wire + (pts + (xy 227.33 130.81) (xy 233.68 130.81) + ) + (stroke + (width 0) + (type default) + ) + (uuid "993e0c95-1cbc-4e11-9805-ff8faf1a4682") + ) + (wire + (pts + (xy 139.7 80.01) (xy 137.16 80.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9a70304c-79f3-4eeb-81ec-ce5a67e0645b") + ) + (wire + (pts + (xy 222.25 110.49) (xy 248.92 110.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9af0b5b8-afad-4ac3-a520-d49d3485c979") + ) + (wire + (pts + (xy 175.26 74.93) (xy 191.77 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9b6ce8e3-ebeb-4012-8ee1-6520ad4b20a9") + ) + (wire + (pts + (xy 254 100.33) (xy 254 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9c022d39-275e-49dc-8700-e054f9022bd0") + ) + (wire + (pts + (xy 204.47 64.77) (xy 207.01 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a2282c2e-4e4c-4743-a52e-84ff789ee553") + ) + (wire + (pts + (xy 137.16 80.01) (xy 133.35 80.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ad939f9d-03ee-4aeb-a487-e4c5fa4e4388") + ) + (wire + (pts + (xy 246.38 78.74) (xy 246.38 80.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b18c530b-e297-4976-ad5f-eda4e635684e") + ) + (wire + (pts + (xy 222.25 85.09) (xy 242.57 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b19d0b63-ac34-4fb7-9581-a54bdc74f5f6") + ) + (wire + (pts + (xy 236.22 125.73) (xy 241.3 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b7072125-9a74-4792-95a8-9a9a3ef7d958") + ) + (wire + (pts + (xy 246.38 87.63) (xy 246.38 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b9ee2751-f9a9-49e1-8240-108e70057419") + ) + (wire + (pts + (xy 237.49 123.19) (xy 241.3 123.19) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bae9875c-77c5-4a41-8360-ca173414cde7") + ) + (wire + (pts + (xy 233.68 130.81) (xy 241.3 130.81) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bbbb1a9d-fdcc-441b-af6a-4033a7b62a29") + ) + (wire + (pts + (xy 236.22 125.73) (xy 236.22 143.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bd06f778-fedd-4255-8432-2ef3ab5ea7f9") + ) + (wire + (pts + (xy 252.73 95.25) (xy 222.25 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bf4a1250-b4e2-431c-812b-8781b2db8189") + ) + (wire + (pts + (xy 241.3 77.47) (xy 246.38 77.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c66dde7f-d88e-498a-bd2e-8f57c7bc0b7d") + ) + (wire + (pts + (xy 133.35 58.42) (xy 133.35 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c735ea03-cffe-45c5-9d68-120d003e995e") + ) + (wire + (pts + (xy 207.01 64.77) (xy 207.01 69.85) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ca53ba41-8134-4f82-bc63-80a22ccf1664") + ) + (wire + (pts + (xy 156.21 90.17) (xy 163.83 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d0953656-2266-40ef-a20b-534e013c7b1b") + ) + (wire + (pts + (xy 222.25 105.41) (xy 245.11 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d33e1975-05d3-4c07-af07-11b554692745") + ) + (wire + (pts + (xy 163.83 90.17) (xy 171.45 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d80c1bc4-2f3b-4bb2-ab6e-b0804e0cc8c4") + ) + (wire + (pts + (xy 151.13 72.39) (xy 162.56 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dc95ea74-9047-49c5-88c6-56d8d8bce950") + ) + (wire + (pts + (xy 171.45 86.36) (xy 171.45 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "df0002e5-47fd-42ff-87de-28e102337eab") + ) + (wire + (pts + (xy 261.62 90.17) (xy 261.62 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e3fd611f-a6cf-4929-ad12-4d1b03b7d721") + ) + (wire + (pts + (xy 204.47 64.77) (xy 204.47 69.85) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e54e8d97-3030-4a04-8bf8-ce9a990f2870") + ) + (wire + (pts + (xy 227.33 53.34) (xy 224.79 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e85ce047-7d99-4e34-9553-8a5ed2b3d95f") + ) + (wire + (pts + (xy 237.49 148.59) (xy 233.68 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ed314070-11a2-4540-b76e-b048963babff") + ) + (wire + (pts + (xy 241.3 80.01) (xy 241.3 77.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f64025d6-a983-4e42-9d9e-2678a491781f") + ) + (wire + (pts + (xy 207.01 53.34) (xy 217.17 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fa52877e-a377-4597-aed7-e8a54d13f377") + ) + (label "6{slash}CW" + (at 236.22 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "1f52284d-59cd-40cb-9b9f-49a438728250") + ) + (label "SDA" + (at 186.69 97.79 180) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify right bottom) + ) + (uuid "52b00868-b714-45fa-8a3b-58a7f78f423a") + ) + (label "SCL" + (at 186.69 100.33 180) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify right bottom) + ) + (uuid "610c6f0f-a457-405d-b21c-c639cb621928") + ) + (label "CLK7" + (at 236.22 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "61395719-fd85-44a7-b506-422e12036a42") + ) + (label "CLK3" + (at 236.22 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "63adc0f0-122b-42f3-8432-2e1fcc5d4344") + ) + (label "1{slash}RX90" + (at 236.22 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "68c89c88-b3c0-4ada-bc75-deeca6c07d03") + ) + (label "SCL" + (at 232.41 123.19 180) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify right bottom) + ) + (uuid "a11478d3-398b-416a-ae8d-049ecd5e7181") + ) + (label "4{slash}TX90" + (at 236.22 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "b687e55d-fb17-4445-9103-5ef0b7ebc318") + ) + (label "SDA" + (at 232.41 125.73 180) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify right bottom) + ) + (uuid "c47be903-605f-42c7-9e44-cee5bdfa23f0") + ) + (label "0{slash}RX0" + (at 236.22 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "c87cd84f-236b-4eb3-892a-cb593694b1e6") + ) + (label "CLK2" + (at 236.22 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "e68ee8ea-97df-4d20-b18b-e8eb17647e6f") + ) + (label "5{slash}TX0" + (at 236.22 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "ee931b26-6761-454f-8f1e-8ed8205538c3") + ) + (symbol + (lib_id "Connector:Conn_01x03_Pin") + (at 168.91 110.49 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "00a67419-9b03-41e0-9c86-950ab86c0248") + (property "Reference" "J5" + (at 169.545 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "OEBSSEN" + (at 169.545 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" + (at 168.91 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 168.91 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Generic connector, single row, 01x03, script generated" + (at 168.91 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 168.91 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "9d6933bd-a6e1-45f7-beb2-acf055c4d754") + ) + (pin "2" + (uuid "f3926fa7-bf7e-4ee1-8bb5-b3d219c115e6") + ) + (pin "1" + (uuid "6d8c9e83-e975-418b-871a-7c5623d109e5") + ) + (instances + (project "" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "J5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 198.12 62.23 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0e202de0-097a-4724-852d-71529d84aa6b") + (property "Reference" "#PWR09" + (at 198.12 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 197.612 65.786 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 198.12 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 198.12 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 198.12 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "63d01126-3b62-40de-8570-77a149b2a0d9") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR09") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 217.17 49.53 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "127c2012-f3d2-4773-ac00-a2bfb7640d64") + (property "Reference" "L3" + (at 215.9 52.07 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "FB" + (at 220.472 48.514 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_0603_1608Metric" + (at 217.17 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 217.17 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 217.17 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "BMC-Q1JY0500H" + (at 217.17 49.53 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1002" + (at 217.17 49.53 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fabb9c8d-c451-45cc-bddc-cf10f10254fc") + ) + (pin "2" + (uuid "5411dad1-d319-4cdc-97b8-5612259624b9") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "L3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 147.32 62.23 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2110d63b-aafd-4f65-9e11-2b8db7c2be38") + (property "Reference" "#PWR03" + (at 147.32 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 150.622 63.5 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 147.32 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 147.32 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 147.32 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1a4aa641-d308-4c06-b33f-7748d7946678") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR03") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_01x06_Socket") + (at 251.46 80.01 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "2f49b0b9-acf5-41bb-9b12-535a2ddb2be8") + (property "Reference" "J3" + (at 252.1712 80.0678 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "pin header" + (at 252.1712 82.4921 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical" + (at 251.46 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 251.46 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Generic connector, single row, 01x06, script generated" + (at 251.46 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 251.46 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "06afaeb9-0af4-4198-9ca6-a7b370db2f2f") + ) + (pin "2" + (uuid "94307d88-b808-40b0-85ca-30316b3efb86") + ) + (pin "4" + (uuid "e8197cef-e4ec-40fb-863e-3e0f1ddd5a7d") + ) + (pin "1" + (uuid "1cfa852e-a6ec-4421-937a-35459a129bdf") + ) + (pin "5" + (uuid "f1f34091-a07c-4040-ad39-2f73bfb32061") + ) + (pin "6" + (uuid "d331c513-5a87-4901-95de-e4fc2372b300") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "J3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_01x04_Socket") + (at 246.38 128.27 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (uuid "2f4b0cb2-c792-4eb4-8753-b8fdc80b3d9a") + (property "Reference" "J1" + (at 247.65 128.2701 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "qwiic" + (at 247.65 125.7301 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_JST:JST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_Horizontal" + (at 246.38 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 246.38 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Generic connector, single row, 01x04, script generated" + (at 246.38 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "SM04B-SRSS-TB(LF)(SN)" + (at 246.38 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C160404" + (at 246.38 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "7a4d43f6-6b04-4332-99e7-b457cd59c86d") + ) + (pin "2" + (uuid "a6bf3976-da78-4c6a-ba0d-5dc103ac23ea") + ) + (pin "1" + (uuid "583a0915-835f-434c-b76b-6412789d3c84") + ) + (pin "4" + (uuid "ffb6fb46-9a87-42d6-8be2-4056fce90a32") + ) + (instances + (project "" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "J1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_01x06_Socket") + (at 266.7 99.06 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "3090fb91-eabc-4e6f-9aca-bdeda3bb7944") + (property "Reference" "J4" + (at 267.4112 99.1178 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "pin header" + (at 267.4112 101.5421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical" + (at 266.7 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 266.7 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Generic connector, single row, 01x06, script generated" + (at 266.7 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 266.7 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "72accef9-4cb4-4b8e-a652-b1f5d984fce4") + ) + (pin "2" + (uuid "c7b6d4ce-6c53-4b32-a968-72baf3031ca0") + ) + (pin "4" + (uuid "9858335a-298c-4bf7-9c5f-2956390c42b4") + ) + (pin "1" + (uuid "539ba32c-3105-4192-9e09-989111bcfd67") + ) + (pin "5" + (uuid "0bbe397c-01b1-4627-b6dd-b7dcc2701247") + ) + (pin "6" + (uuid "0ce93399-ab10-47d2-905f-0b163feb1fb6") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "J4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 133.35 50.8 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "33f8b809-490c-4e54-b455-2f8889b87e09") + (property "Reference" "#PWR01" + (at 133.35 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 132.08 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 133.35 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 133.35 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 133.35 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ba656479-06c8-41d3-bfb3-5b6122af23b9") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR01") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "SparkFun-Qwiic:qwiic_Logo") + (at 262.89 127 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "37148de2-dabd-43b9-88ce-59b4eed6ae04") + (property "Reference" "G1" + (at 262.89 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "qwiic_Logo" + (at 262.89 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "SparkFun-Qwiic:qwiic_4mm" + (at 262.89 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 262.89 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 262.89 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 262.89 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "G1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:ECS-TX053-S3") + (at 135.89 72.39 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "37631619-0402-40b0-bc09-6bec8f1e9ba1") + (property "Reference" "Y1" + (at 130.0481 71.1779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "ECS-TX053-S3" + (at 142.24 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "T41_Library:Oscillator_ECS_TXO53_S3" + (at 135.89 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ecsxtal.com/store/pdf/ECS-TXO53-S3.pdf" + (at 137.16 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 135.89 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "ECS-TXO53-S3-33-250-BN-TR " + (at 135.89 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C18457614" + (at 135.89 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "9" + (uuid "84dc0b68-a667-42ff-becd-37013e34b337") + ) + (pin "6" + (uuid "a6e08c8b-9fe4-4540-9aa6-07b423e3c8b6") + ) + (pin "4" + (uuid "974c53c7-3fcb-47ec-8bb1-abec5e2081d3") + ) + (pin "1" + (uuid "94cc80fe-eee5-47c2-a050-d8bd90a6097a") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "Y1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_name "+3V3_1") + (lib_id "power:+3V3") + (at 201.93 43.18 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3797f140-f1dc-4425-9b7c-16a7c32240ab") + (property "Reference" "#PWR012" + (at 201.93 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 200.66 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 201.93 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 201.93 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"+3V3\"" + (at 201.93 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "008e598b-a2a2-4bc3-9461-325b4c5afe25") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR012") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 213.36 62.23 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "44c02379-2f1b-4932-a068-35c0992cd458") + (property "Reference" "L4" + (at 212.09 64.77 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "FB" + (at 216.662 61.214 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_0603_1608Metric" + (at 213.36 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 213.36 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 213.36 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "BMC-Q1JY0500H" + (at 213.36 62.23 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1002" + (at 213.36 62.23 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "56906309-38aa-4df3-bd89-2af27d5e203a") + ) + (pin "2" + (uuid "49371860-6db7-44aa-a57c-b85b06ca30a7") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "L4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 198.12 58.42 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "44c483ca-501a-4f25-8f0f-294b4dbebc86") + (property "Reference" "C4" + (at 200.152 60.198 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 195.58 53.086 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_0603_1608Metric" + (at 197.1548 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 198.12 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 198.12 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CC0603KRX7R9BB104" + (at 198.12 58.42 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C14663" + (at 198.12 58.42 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1342bbb7-3a84-4615-b7c1-50ca8d8a16ac") + ) + (pin "1" + (uuid "334aae2f-a346-4105-9658-cb0b22d4bdea") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "C4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:Crystal") + (at 162.56 76.2 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "4557afa9-8e8b-4f9f-ae3d-00d6dc75b77d") + (property "Reference" "Y2" + (at 160.02 81.3958 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "25MHz" + (at 160.02 83.82 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Crystal:Crystal_SMD_HC49-SD_HandSoldering" + (at 162.56 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 162.56 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 162.56 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 162.56 76.2 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "38ad646a-25ed-4dbc-8e21-ae268e2cba90") + ) + (pin "1" + (uuid "c22892e1-1251-4991-b09a-bbb683bd618b") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "Y2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 173.99 113.03 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "45f1d082-e6c6-494a-9fd0-39f7a5e1b0fd") + (property "Reference" "#PWR019" + (at 173.99 119.38 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 173.99 117.348 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 173.99 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 173.99 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 173.99 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1b191770-2e30-4382-8c3a-4ba74f3abee8") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR019") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 171.45 86.36 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4d94fd05-327b-4b06-834a-cd12fbc1b914") + (property "Reference" "#PWR016" + (at 171.45 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 170.18 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 171.45 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 171.45 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 171.45 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0c65c691-dbe3-4a77-abc2-4fa170f1810c") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR016") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 139.7 58.42 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "50c11615-2854-4218-8b4c-a5683716f1ca") + (property "Reference" "C1" + (at 140.97 60.96 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 142.24 57.15 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_0603_1608Metric" + (at 143.51 57.4548 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 139.7 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 139.7 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CC0603KRX7R9BB104" + (at 139.7 58.42 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C14663" + (at 139.7 58.42 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "52f05744-a1f2-4c63-a6dc-05501cf4a655") + ) + (pin "1" + (uuid "c3269aa4-e7f8-457a-a889-d5e78f71e426") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "C1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 207.01 121.92 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "541cc438-fc98-4610-93d3-642026da5eff") + (property "Reference" "#PWR011" + (at 207.01 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 207.01 125.984 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 207.01 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 207.01 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 207.01 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "830aac35-630e-4a1b-b1ae-344abfbdb86a") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR011") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 147.32 72.39 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "568903b7-fe1e-44b4-bedf-04c827fc34c8") + (property "Reference" "C2" + (at 152.4 71.12 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 151.13 68.58 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_0603_1608Metric" + (at 143.51 71.4248 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 147.32 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 147.32 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CC0603KRX7R9BB104" + (at 147.32 72.39 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C14663" + (at 147.32 72.39 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c16d0241-bfe1-44f1-91ac-e2350c055427") + ) + (pin "1" + (uuid "91c353dc-ce2c-48ba-b061-ea1dd0afc6ad") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "C2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Oscillator:Si5351A-B-GM") + (at 207.01 92.71 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5a31cbf9-cc57-466b-80d5-194db3ffd271") + (property "Reference" "Y3" + (at 209.1533 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Si5351A-B-GM" + (at 209.1533 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_DFN_QFN:QFN-20-1EP_4x4mm_P0.5mm_EP2.7x2.7mm" + (at 207.01 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.silabs.com/documents/public/data-sheets/Si5351-B.pdf" + (at 207.01 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "I2C Programmable Any-Frequency CMOS Clock Generator, QFN-20" + (at 207.01 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "SI5351A-B-GM" + (at 207.01 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C22413806" + (at 207.01 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "9" + (uuid "2fdbc577-6404-4ce1-b8cd-cdbaa32ef948") + ) + (pin "17" + (uuid "8a4adcd4-b41f-4ae8-8776-257c52027fac") + ) + (pin "15" + (uuid "7e06e70d-24db-4de0-ba75-08ad7a4954ad") + ) + (pin "4" + (uuid "6ae224f2-487d-4c7c-b191-c71d7d388f8e") + ) + (pin "13" + (uuid "25c769b3-0ec3-4f38-9a61-38ab41070ca9") + ) + (pin "14" + (uuid "39e6fbf1-060a-43d4-b9d3-49c4b88ca935") + ) + (pin "10" + (uuid "ddaa480e-a0e4-4471-bf28-368f71685611") + ) + (pin "12" + (uuid "3b50b02b-fe0d-4520-959d-5d081c2a7b11") + ) + (pin "8" + (uuid "ba307d9f-5fa0-4809-938c-e52980372902") + ) + (pin "19" + (uuid "fc80dec2-3853-4f24-9014-c1e422ff78bb") + ) + (pin "5" + (uuid "972f5f4c-420c-4c84-ab06-e987565d49db") + ) + (pin "3" + (uuid "39ec5620-815e-4fe2-b963-b01716345eb1") + ) + (pin "2" + (uuid "678e8dea-0e31-4b99-a763-a4905ba6ffde") + ) + (pin "1" + (uuid "5fafe6ff-c9d7-4142-9f33-ab555d61496c") + ) + (pin "11" + (uuid "245a9aec-14ae-42b0-a751-3a3d66e541fd") + ) + (pin "16" + (uuid "2e5269fb-959c-4e71-afce-050fdd554730") + ) + (pin "20" + (uuid "267ddee4-1657-4ca0-8e69-313cf60e483f") + ) + (pin "18" + (uuid "9ee5f592-b479-4aa2-94a6-817f392e049a") + ) + (pin "7" + (uuid "2330229e-511f-4751-800e-729d6a5e42f9") + ) + (pin "6" + (uuid "a7cd8228-e4bd-410f-a1fc-0986d18b23f3") + ) + (pin "21" + (uuid "fb675f27-a42a-49d8-aef6-b58ae5fd3a21") + ) + (instances + (project "" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "Y3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 227.33 130.81 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7b498988-e194-4672-8deb-d567ff5679e5") + (property "Reference" "#PWR018" + (at 227.33 137.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 227.584 134.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 227.33 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 227.33 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 227.33 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6b8723df-1486-43f8-b60d-3b9bbf8b466e") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR018") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 250.19 90.17 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "81093c07-c1fb-41a6-9d6a-b4ec627ab9fb") + (property "Reference" "#PWR014" + (at 250.19 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 249.682 93.726 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 250.19 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 250.19 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 250.19 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f8a13bcd-0265-4c5e-bf1e-94a2f2cbd85f") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR014") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 163.83 93.98 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "81981280-7d2b-4556-8fe7-05c7571e8a9a") + (property "Reference" "R1" + (at 165.608 92.7678 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "2k2" + (at 165.608 95.1921 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_0603_1608Metric" + (at 162.052 93.98 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 163.83 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Resistor" + (at 163.83 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C4190" + (at 163.83 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CRGP0603F2K2" + (at 163.83 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "8ffb8d54-c279-458c-b860-e0433ec5b1b2") + ) + (pin "1" + (uuid "90428c18-4c0e-435b-8ae9-9e05026aa71f") + ) + (instances + (project "" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "R1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 220.98 53.34 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8b5f14b0-6cf5-4e36-8142-e4f696ff4147") + (property "Reference" "C3" + (at 222.758 51.308 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 215.646 55.88 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_0603_1608Metric" + (at 224.79 54.3052 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 220.98 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 220.98 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CC0603KRX7R9BB104" + (at 220.98 53.34 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C14663" + (at 220.98 53.34 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "39db63ca-04bc-4178-b28d-bf413605539f") + ) + (pin "1" + (uuid "567193eb-4df0-4d35-b929-186a9554e2ba") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "C3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 217.17 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9300d262-9b6b-4c0a-b896-85e4dffbf311") + (property "Reference" "#PWR04" + (at 217.17 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 215.9 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 217.17 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 217.17 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 217.17 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c76bd4b2-5c4d-42ca-891d-0d7b44097990") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR04") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Jumper:SolderJumper_2_Bridged") + (at 176.53 90.17 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "9555e490-beb1-46dd-b1d1-98c2cfd2b8b4") + (property "Reference" "JP1" + (at 176.784 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "GND select" + (at 176.53 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mm" + (at 176.53 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 176.53 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Solder Jumper, 2-pole, closed/bridged" + (at 176.53 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 176.53 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "22443693-2bd3-4c58-81d8-2d9d6bfb4c08") + ) + (pin "1" + (uuid "67af122f-6c32-4cf2-b971-c1d93376a9bb") + ) + (instances + (project "" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "JP1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Jumper:SolderJumper_2_Open") + (at 186.69 90.17 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "a5a3cfdb-a813-4d3e-81ea-3159bde6dc6c") + (property "Reference" "JP2" + (at 186.69 87.884 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SolderJumper_2_Open" + (at 186.69 87.5609 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm" + (at 186.69 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 186.69 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 186.69 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 186.69 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a8bea2cd-7dc6-4153-b708-ad35dab6544e") + ) + (pin "1" + (uuid "b4366125-df1d-4fa7-9de9-d88f936df0d4") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "JP2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole") + (at 140.97 143.51 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "a8364ac0-144a-4502-8b34-9a3ba33aa94e") + (property "Reference" "H1" + (at 143.51 142.2399 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MountingHole" + (at 143.51 144.7799 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "MountingHole:MountingHole_2.2mm_M2_DIN965" + (at 140.97 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 140.97 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 140.97 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 140.97 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "H1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_01x04_Socket") + (at 242.57 143.51 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "ad865a42-2b12-4cd4-a403-674392f12114") + (property "Reference" "J2" + (at 243.84 143.5099 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "pin header" + (at 243.84 146.0499 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical" + (at 242.57 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 242.57 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Generic connector, single row, 01x04, script generated" + (at 242.57 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 242.57 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "9730a17f-f925-4c09-9a9b-1827d88ab4de") + ) + (pin "2" + (uuid "ac7c2f02-79ea-45a1-9a59-c90d0d912cdc") + ) + (pin "4" + (uuid "008b748d-dab7-4818-9327-ca783a2f1c1a") + ) + (pin "1" + (uuid "5051b9a7-ce43-4c46-ae62-736660e53037") + ) + (instances + (project "" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "J2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 223.52 66.04 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ae38f728-6e75-4b53-9a3e-1443e82c5f0e") + (property "Reference" "#PWR06" + (at 223.52 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 223.012 69.596 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (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) + ) + ) + (pin "1" + (uuid "d31cf47c-5489-4f8a-b39e-8c7d602d268a") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR06") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 227.33 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b3a87475-ec5c-4bbf-b029-6870e1caa4bc") + (property "Reference" "#PWR017" + (at 227.33 132.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 226.06 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 227.33 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 227.33 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 227.33 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "bdebc789-4cd4-4b2e-b3b9-d176c922ff60") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR017") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 190.5 91.44 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "bcc18e01-d4e7-4cce-ad6b-49221c80082d") + (property "Reference" "#PWR08" + (at 190.5 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 193.04 92.71 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "" + (at 190.5 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 190.5 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 190.5 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "80b9a61a-9ad3-4c2a-898e-31d9fa9b78e4") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR08") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 243.84 78.74 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "be34bfd1-e30d-4c99-bed1-0fbcd5392009") + (property "Reference" "#PWR07" + (at 243.84 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 243.332 82.296 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 243.84 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 243.84 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 243.84 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "12aa67eb-bd30-4bd0-bf83-78a026095539") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR07") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 256.54 101.6 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "bfee5028-7ef8-4ddf-922c-d926fccf81b1") + (property "Reference" "#PWR015" + (at 256.54 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 256.032 105.156 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 256.54 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 256.54 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 256.54 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "2cc40e9a-50a2-48f7-a54c-1dcca13d2f38") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR015") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 137.16 81.28 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c6a6f1b5-afc6-4f81-b691-3aaafd04bb4c") + (property "Reference" "#PWR02" + (at 137.16 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 134.62 82.55 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 137.16 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 137.16 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 137.16 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1c67ea37-35a1-4038-bafb-09b2d39729ec") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR02") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 201.93 46.99 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c98bbaf2-95f8-42a9-b52d-97c8709ec2bf") + (property "Reference" "L2" + (at 200.66 49.53 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "FB" + (at 204.47 49.53 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_0603_1608Metric" + (at 201.93 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 201.93 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 201.93 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "BMC-Q1JY0500H" + (at 201.93 46.99 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1002" + (at 201.93 46.99 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "a9beecc5-2ab8-41a2-8b63-ff1960bfa090") + ) + (pin "2" + (uuid "ea2b6393-b131-4e69-83b7-0ddc311997c0") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "L2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 133.35 54.61 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "cd07894c-45b1-49aa-9251-17f3c93b252b") + (property "Reference" "L1" + (at 134.62 53.34 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "FB" + (at 130.81 52.07 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_0603_1608Metric" + (at 133.35 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 133.35 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 133.35 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "BMC-Q1JY0500H" + (at 133.35 54.61 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1002" + (at 133.35 54.61 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8323743c-40a3-4af2-8bec-6b7cc62cb45d") + ) + (pin "2" + (uuid "8a2e65f7-22c4-46a6-830f-df15b43b2c85") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "L1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 227.33 53.34 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "dbab8ddd-c63f-4d09-a911-68dd42f704a2") + (property "Reference" "#PWR010" + (at 227.33 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 226.822 56.896 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 227.33 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 227.33 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 227.33 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b5265ff8-bb44-4904-9563-e2316dea4bf7") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR010") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 213.36 58.42 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e93546d0-2c1c-4bc3-a9fe-8e9bf4fde275") + (property "Reference" "#PWR05" + (at 213.36 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 212.09 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 213.36 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 213.36 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 213.36 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "706d3404-9c45-414c-8fee-ddbd87fa727d") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR05") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 246.38 90.17 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "efc6eaa5-c33b-4b5e-9363-a19015b13a82") + (property "Reference" "#PWR013" + (at 246.38 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 245.872 93.726 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 246.38 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 246.38 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 246.38 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b7a05d9a-912f-4637-822e-d8f45b3d382c") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "#PWR013") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 217.17 66.04 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f1e40c34-40b2-4d6f-9a55-3510feaa516f") + (property "Reference" "C5" + (at 218.948 64.008 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 211.836 68.58 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_0603_1608Metric" + (at 220.98 67.0052 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 217.17 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 217.17 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CC0603KRX7R9BB104" + (at 217.17 66.04 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C14663" + (at 217.17 66.04 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "4c0b82e8-fc0c-4e99-a108-7b5fd0ed7652") + ) + (pin "1" + (uuid "94f6076f-aed7-4a80-b5b8-bd3583e0d665") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "C5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole") + (at 140.97 149.86 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "f5d3a6f4-199e-43bd-accc-3fdee8434027") + (property "Reference" "H2" + (at 143.51 148.5899 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MountingHole" + (at 143.51 151.1299 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "MountingHole:MountingHole_2.2mm_M2_DIN965" + (at 140.97 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 140.97 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 140.97 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 140.97 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "H2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 156.21 93.98 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "fbf86804-66f1-49f0-b484-375fced4ed00") + (property "Reference" "R2" + (at 157.988 92.7678 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "2k2" + (at 157.988 95.1921 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_0603_1608Metric" + (at 154.432 93.98 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 156.21 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Resistor" + (at 156.21 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C4190" + (at 156.21 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CRGP0603F2K2" + (at 156.21 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "14454623-bab1-43d1-b15a-b998c2e0df90") + ) + (pin "1" + (uuid "3b06cda5-6974-4a23-9938-87d6825d714c") + ) + (instances + (project "DualClockLO" + (path "/19e7ad66-8f4f-49d3-ad58-95c831b9d6b3" + (reference "R2") + (unit 1) + ) + ) + ) + ) + (sheet_instances + (path "/" + (page "1") + ) + ) + (embedded_fonts no) +) diff --git a/wiki/raw/K9HZ_100W_11band_LPF-Control.kicad_sch b/wiki/raw/K9HZ_100W_11band_LPF-Control.kicad_sch new file mode 100644 index 0000000..9b25c08 --- /dev/null +++ b/wiki/raw/K9HZ_100W_11band_LPF-Control.kicad_sch @@ -0,0 +1,38380 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "3c4b9d3b-a516-4fd7-b325-b74c836dee65") + (paper "A3") + (title_block + (title "K9HZ 100W 11 Band LPF: Control board") + (date "2025-07-28") + (rev "V1.2") + (comment 1 "Layout by OG King-KI3P") + (comment 2 "Designed by WJ Schmidt-K9HZ") + ) + (lib_symbols + (symbol "74xGxx:74LVC1G04" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 0 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "74LVC1G04" + (at 5.08 -7.62 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" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Single NOT Gate, Low-Voltage CMOS" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Single Gate NOT LVC CMOS" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOT?23* Texas?R-PDSO-G5?DCK* Texas?R-PDSO-N5?DRL* Texas?X2SON*0.8x0.8mm*P0.48mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "74LVC1G04_0_1" + (polyline + (pts + (xy -7.62 6.35) (xy -7.62 -6.35) (xy 5.08 0) (xy -7.62 6.35) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "74LVC1G04_1_1" + (pin input line + (at -15.24 0 0) + (length 7.62) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -5.08 10.16 270) + (length 5.08) + (name "VCC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -5.08 -10.16 90) + (length 5.08) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output inverted + (at 12.7 0 180) + (length 7.62) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "74xx:74HC237" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -7.62 13.97 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + ) + (property "Value" "74HC237" + (at 2.54 -11.43 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/symlink/cd74hc237.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "3-to-8 line decoder/multiplexer with address latches, DIP-16/SOIC-16/SSOP-16" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "demux" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* SSOP*5.3x6.2mm*P0.65mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "74HC237_0_1" + (rectangle + (start -7.62 12.7) + (end 7.62 -10.16) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "74HC237_1_1" + (pin input line + (at -10.16 10.16 0) + (length 2.54) + (name "A0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 7.62 0) + (length 2.54) + (name "A1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 5.08 0) + (length 2.54) + (name "A2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 0 0) + (length 2.54) + (name "~{LE}" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -5.08 0) + (length 2.54) + (name "~{E1}" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -7.62 0) + (length 2.54) + (name "E2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 15.24 270) + (length 2.54) + (name "VCC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -12.7 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 10.16 10.16 180) + (length 2.54) + (name "Y0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 10.16 7.62 180) + (length 2.54) + (name "Y1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 10.16 5.08 180) + (length 2.54) + (name "Y2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 10.16 2.54 180) + (length 2.54) + (name "Y3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 10.16 0 180) + (length 2.54) + (name "Y4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 10.16 -2.54 180) + (length 2.54) + (name "Y5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 10.16 -5.08 180) + (length 2.54) + (name "Y6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 10.16 -7.62 180) + (length 2.54) + (name "Y7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Connector:Conn_01x05_Socket" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x05_Socket" + (at 0 -7.62 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" "Generic connector, single row, 01x05, script generated" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_locked" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_1x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_01x05_Socket_1_1" + (polyline + (pts + (xy -1.27 5.08) (xy -0.508 5.08) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 2.54) (xy -0.508 2.54) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 0) (xy -0.508 0) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 -2.54) (xy -0.508 -2.54) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 -5.08) (xy -0.508 -5.08) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 4.572) + (mid -0.5058 5.08) + (end 0 5.588) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 2.032) + (mid -0.5058 2.54) + (end 0 3.048) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -0.508) + (mid -0.5058 0) + (end 0 0.508) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -3.048) + (mid -0.5058 -2.54) + (end 0 -2.032) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -5.588) + (mid -0.5058 -5.08) + (end 0 -4.572) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 5.08 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -5.08 0) + (length 3.81) + (name "Pin_5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Connector:Conn_Coaxial" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0.254 3.048 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_Coaxial" + (at 2.921 0 90) + (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" "coaxial connector (BNC, SMA, SMB, SMC, Cinch/RCA, LEMO, ...)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "BNC SMA SMB SMC LEMO coaxial connector CINCH RCA MCX MMCX U.FL UMRF" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "*BNC* *SMA* *SMB* *SMC* *Cinch* *LEMO* *UMRF* *MCX* *U.FL*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_Coaxial_0_1" + (polyline + (pts + (xy -2.54 0) (xy -0.508 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 1.778 0) + (mid 0.222 -1.8079) + (end -1.778 -0.508) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -1.778 0.508) + (mid 0.2221 1.8084) + (end 1.778 0) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 0 0) + (radius 0.508) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -2.54) (xy 0 -1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Conn_Coaxial_1_1" + (pin passive line + (at -5.08 0 0) + (length 2.54) + (name "In" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -5.08 90) + (length 2.54) + (name "Ext" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Connector:Screw_Terminal_01x02" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Screw_Terminal_01x02" + (at 0 -5.08 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" "Generic screw terminal, single row, 01x02, script generated (kicad-library-utils/schlib/autogen/connector/)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "screw terminal" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TerminalBlock*:*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Screw_Terminal_01x02_1_1" + (rectangle + (start -1.27 1.27) + (end 1.27 -3.81) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (polyline + (pts + (xy -0.5334 0.3302) (xy 0.3302 -0.508) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.5334 -2.2098) (xy 0.3302 -3.048) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.3556 0.508) (xy 0.508 -0.3302) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.3556 -2.032) (xy 0.508 -2.8702) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 0 0) + (radius 0.635) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 0 -2.54) + (radius 0.635) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Connector_Audio:AudioJack3_SwitchTR" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 8.89 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "AudioJack3_SwitchTR" + (at 0 6.35 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" "Audio Jack, 3 Poles (Stereo / TRS), Switched TR Poles (Normalling)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "audio jack receptacle stereo headphones phones TRS connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Jack*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "AudioJack3_SwitchTR_0_1" + (rectangle + (start -5.08 -5.08) + (end -6.35 -7.62) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy -1.905 -5.08) (xy -1.27 -5.715) (xy -0.635 -5.08) (xy -0.635 0) (xy 2.54 0) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -5.08) (xy 0.635 -5.715) (xy 1.27 -5.08) (xy 2.54 -5.08) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.508 -0.254) (xy 0.762 -0.762) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.778 -5.334) (xy 2.032 -5.842) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 2.54 3.81) + (end -5.08 -10.16) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (polyline + (pts + (xy 2.54 2.54) (xy -2.54 2.54) (xy -2.54 -5.08) (xy -3.175 -5.715) (xy -3.81 -5.08) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 -2.54) (xy 0.508 -2.54) (xy 0.508 -0.254) (xy 0.254 -0.762) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 -7.62) (xy 1.778 -7.62) (xy 1.778 -5.334) (xy 1.524 -5.842) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "AudioJack3_SwitchTR_1_1" + (pin passive line + (at 5.08 2.54 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "S" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 0 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "R" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -2.54 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "RN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -5.08 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "T" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -7.62 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "TN" + (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:C_Polarized" + (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_Polarized" + (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" "Polarized 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" "CP_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "C_Polarized_0_1" + (rectangle + (start -2.286 0.508) + (end 2.286 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.778 2.286) (xy -0.762 2.286) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 2.794) (xy -1.27 1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 2.286 -0.508) + (end -2.286 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + ) + (symbol "C_Polarized_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:D_Zener" + (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_Zener" + (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" "Zener diode" + (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_Zener_0_1" + (polyline + (pts + (xy -1.27 -1.27) (xy -1.27 1.27) (xy -0.762 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) + ) + ) + (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 "D_Zener_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:L" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "L" + (at -1.27 0 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "L" + (at 1.905 0 90) + (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" "Inductor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "inductor choke coil reactor magnetic" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Choke_* *Coil* Inductor_* L_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "L_0_1" + (arc + (start 0 2.54) + (mid 0.6323 1.905) + (end 0 1.27) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 1.27) + (mid 0.6323 0.635) + (end 0 0) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 0) + (mid 0.6323 -0.635) + (end 0 -1.27) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -1.27) + (mid 0.6323 -1.905) + (end 0 -2.54) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "L_1_1" + (pin passive line + (at 0 3.81 270) + (length 1.27) + (name "1" + (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 "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:R_Potentiometer" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "RV" + (at -4.445 0 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "R_Potentiometer" + (at -2.54 0 90) + (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" "Potentiometer" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "resistor variable" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Potentiometer*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "R_Potentiometer_0_1" + (rectangle + (start 1.016 2.54) + (end -1.016 -2.54) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.143 0) (xy 2.286 0.508) (xy 2.286 -0.508) (xy 1.143 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 2.54 0) (xy 1.524 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "R_Potentiometer_1_1" + (pin passive line + (at 0 3.81 270) + (length 1.27) + (name "1" + (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 "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 3.81 0 180) + (length 1.27) + (name "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Interface_Expansion:MCP23017_SO" + (pin_names + (offset 1.016) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -11.43 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MCP23017_SO" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-28W_7.5x17.9mm_P1.27mm" + (at 5.08 -25.4 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "http://ww1.microchip.com/downloads/en/DeviceDoc/20001952C.pdf" + (at 5.08 -27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "16-bit I/O expander, I2C, interrupts, w pull-ups, SOIC-28" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "I2C parallel port expander" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOIC*7.5x17.9mm*P1.27mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MCP23017_SO_0_1" + (rectangle + (start -12.7 22.86) + (end 12.7 -22.86) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "MCP23017_SO_1_1" + (pin bidirectional line + (at -17.78 20.32 0) + (length 5.08) + (name "SDA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -17.78 17.78 0) + (length 5.08) + (name "SCK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin tri_state line + (at -17.78 5.08 0) + (length 5.08) + (name "INTB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "19" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin tri_state line + (at -17.78 2.54 0) + (length 5.08) + (name "INTA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "20" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -17.78 -2.54 0) + (length 5.08) + (name "~{RESET}" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -17.78 -15.24 0) + (length 5.08) + (name "A2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -17.78 -17.78 0) + (length 5.08) + (name "A1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -17.78 -20.32 0) + (length 5.08) + (name "A0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at -12.7 15.24 0) + (length 5.08) + (hide yes) + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at -12.7 12.7 0) + (length 5.08) + (hide yes) + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 27.94 270) + (length 5.08) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -27.94 90) + (length 5.08) + (name "VSS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 20.32 180) + (length 5.08) + (name "GPB0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 17.78 180) + (length 5.08) + (name "GPB1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 15.24 180) + (length 5.08) + (name "GPB2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 12.7 180) + (length 5.08) + (name "GPB3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 10.16 180) + (length 5.08) + (name "GPB4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 7.62 180) + (length 5.08) + (name "GPB5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 5.08 180) + (length 5.08) + (name "GPB6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 2.54 180) + (length 5.08) + (name "GPB7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -2.54 180) + (length 5.08) + (name "GPA0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "21" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -5.08 180) + (length 5.08) + (name "GPA1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "22" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -7.62 180) + (length 5.08) + (name "GPA2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "23" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -10.16 180) + (length 5.08) + (name "GPA3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "24" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -12.7 180) + (length 5.08) + (name "GPA4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "25" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -15.24 180) + (length 5.08) + (name "GPA5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "26" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -17.78 180) + (length 5.08) + (name "GPA6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "27" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -20.32 180) + (length 5.08) + (name "GPA7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "28" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Jumper:SolderJumper_2_Open" + (pin_names + (offset 0) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "JP" + (at 0 2.032 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SolderJumper_2_Open" + (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" "Solder Jumper, 2-pole, open" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "solder jumper SPST" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SolderJumper*Open*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "SolderJumper_2_Open_0_1" + (polyline + (pts + (xy -0.254 1.016) (xy -0.254 -1.016) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -0.254 -1.016) + (mid -1.2656 0) + (end -0.254 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -0.254 -1.016) + (mid -1.2656 0) + (end -0.254 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (arc + (start 0.254 1.016) + (mid 1.2656 0) + (end 0.254 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0.254 1.016) + (mid 1.2656 0) + (end 0.254 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 0.254 1.016) (xy 0.254 -1.016) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "SolderJumper_2_Open_1_1" + (pin passive line + (at -3.81 0 0) + (length 2.54) + (name "A" + (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 "B" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Mechanical:MountingHole_Pad" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "H" + (at 0 6.35 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MountingHole_Pad" + (at 0 4.445 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" "Mounting Hole with connection" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "mounting hole" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "MountingHole*Pad*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MountingHole_Pad_0_1" + (circle + (center 0 1.27) + (radius 1.27) + (stroke + (width 1.27) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "MountingHole_Pad_1_1" + (pin input line + (at 0 -2.54 90) + (length 2.54) + (name "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "RF_Switch:MASWSS0179" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -7.62 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 3.81 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_SMD:SOT-23-6" + (at 0 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 0 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Macom GaAs RF SPDT switch, DC-2GHz, 0.6/22dB loss/isolation, SOT-26 (SOT-23-6)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "RF SWITCH SPDT" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOT?23*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MASWSS0179_0_1" + (polyline + (pts + (xy -3.175 -3.81) (xy -2.54 -3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center -3.048 2.54) + (radius 0.2794) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -2.794 2.54) (xy 2.921 5.207) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.905 -3.81) (xy -1.27 -3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.635 -3.81) (xy 0 -3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 3.175) (xy 0 3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 1.905) (xy 0 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 0.635) (xy 0 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -0.635) (xy 0 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -1.905) (xy 0 -1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -3.175) (xy 0 -2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 3.048 0) + (radius 0.2794) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 3.175 5.207) + (radius 0.2794) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 7.62 -7.62) + (end -7.62 6.35) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "MASWSS0179_1_1" + (pin passive line + (at -10.16 2.54 0) + (length 2.54) + (name "RFC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -2.54 0) + (length 2.54) + (name "V1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -5.08 0) + (length 2.54) + (name "V2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 2.54 -10.16 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 10.16 5.08 180) + (length 2.54) + (name "RF1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 10.16 0 180) + (length 2.54) + (name "RF2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Regulator_Linear:L7808" + (pin_names + (offset 0.254) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -3.81 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "L7808" + (at 0 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at 0.635 -3.81 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "http://www.st.com/content/ccc/resource/technical/document/datasheet/41/4f/b3/b0/12/d4/47/88/CD00000444.pdf/files/CD00000444.pdf/jcr:content/translations/en.CD00000444.pdf" + (at 0 -1.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Positive 1.5A 35V Linear Regulator, Fixed Output 8V, TO-220/TO-263/TO-252" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Voltage Regulator 1.5A Positive" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO?252* TO?263* TO?220*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "L7808_0_1" + (rectangle + (start -5.08 1.905) + (end 5.08 -5.08) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "L7808_1_1" + (pin power_in line + (at -7.62 0 0) + (length 2.54) + (name "IN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -7.62 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_out line + (at 7.62 0 180) + (length 2.54) + (name "OUT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Regulator_Linear:LM1117T-3.3" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -3.81 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM1117T-3.3" + (at 0 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Horizontal_TabDown" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/symlink/lm1117.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "800mA Low-Dropout Linear Regulator, 3.3V fixed output, TO-220" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "linear regulator ldo fixed positive" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO?220*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "LM1117T-3.3_0_1" + (rectangle + (start -5.08 -5.08) + (end 5.08 1.905) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "LM1117T-3.3_1_1" + (pin power_in line + (at -7.62 0 0) + (length 2.54) + (name "VI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -7.62 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_out line + (at 7.62 0 180) + (length 2.54) + (name "VO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Regulator_Linear:LM7805_TO220" + (pin_names + (offset 0.254) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -3.81 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM7805_TO220" + (at 0 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 0 5.715 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.cn/PowerSolutions/document/MC7800-D.PDF" + (at 0 -1.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Positive 1A 35V Linear Regulator, Fixed Output 5V, TO-220" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Voltage Regulator 1A Positive" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO?220*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "LM7805_TO220_0_1" + (rectangle + (start -5.08 1.905) + (end 5.08 -5.08) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "LM7805_TO220_1_1" + (pin power_in line + (at -7.62 0 0) + (length 2.54) + (name "VI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -7.62 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_out line + (at 7.62 0 180) + (length 2.54) + (name "VO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Relay:Relay_SPDT" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "K" + (at 11.43 3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Relay_SPDT" + (at 11.43 1.27 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at 11.43 -1.27 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Monostable Relay SPDT, EN50005" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Single Pole Relay SPDT" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Relay?SPDT*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Relay_SPDT_0_0" + (polyline + (pts + (xy 7.62 5.08) (xy 7.62 2.54) (xy 6.985 3.175) (xy 7.62 3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Relay_SPDT_0_1" + (rectangle + (start -10.16 5.08) + (end 10.16 -5.08) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (rectangle + (start -8.255 1.905) + (end -1.905 -1.905) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -7.62 -1.905) (xy -2.54 1.905) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -5.08 5.08) (xy -5.08 1.905) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -5.08 -5.08) (xy -5.08 -1.905) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.905 0) (xy -1.27 0) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.635 0) (xy 0 0) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.635 0) (xy 1.27 0) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.905 0) (xy 2.54 0) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 5.08) (xy 2.54 2.54) (xy 3.175 3.175) (xy 2.54 3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 3.175 0) (xy 3.81 0) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 5.08 -2.54) (xy 3.175 3.81) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 5.08 -2.54) (xy 5.08 -5.08) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Relay_SPDT_1_1" + (pin passive line + (at -5.08 7.62 270) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "A1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -7.62 90) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "A2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 2.54 7.62 270) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -7.62 90) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 7.62 270) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "T41_Library:6_pin_transformer" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "L" + (at 0 10.795 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "6_pin_transformer" + (at 0.635 -5.715 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" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Transformer*Coilcraft*CST2010*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "6_pin_transformer_0_1" + (arc + (start -5.08 7.6255) + (mid -3.81 8.89) + (end -2.54 7.6255) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center -3.81 7.62) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (circle + (center -3.81 0) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (arc + (start -2.54 -0.0055) + (mid -3.81 -1.27) + (end -5.08 -0.0055) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -2.54 5.715) + (end 2.54 1.905) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -2.54 5.08) (xy -5.08 7.62) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -2.54 2.54) (xy -5.08 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -2.54 7.6255) + (mid -1.27 8.89) + (end 0 7.6255) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -0.0055) + (mid -1.27 -1.27) + (end -2.54 -0.0055) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 7.6255) + (mid 1.27 8.89) + (end 2.54 7.6255) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 2.54 -0.0055) + (mid 1.27 -1.27) + (end 0 -0.0055) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 2.54 7.6255) + (mid 3.81 8.89) + (end 5.08 7.6255) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 5.08 -0.0055) + (mid 3.81 -1.27) + (end 2.54 -0.0055) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 5.08 3.81) (xy 2.54 3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "6_pin_transformer_1_1" + (pin passive line + (at -7.62 7.62 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 -7.62 3.81 0) + (length 2.54) + (name "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -7.62 0 0) + (length 2.54) + (name "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 7.62 180) + (length 2.54) + (name "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 3.81 180) + (length 2.54) + (name "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 0 180) + (length 2.54) + (name "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "T41_Library:AD7991YRJZ" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -0.635 10.795 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "AD7991YRJZ" + (at 0 8.255 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_SMD:SOT-23-8" + (at 3.175 -24.765 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.analog.com/media/en/technical-documentation/data-sheets/AD7991_7995_7999.pdf" + (at 1.27 -6.985 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "I2C-Compatible, 4-input, 12-Bit Analog-to-Digital Converter, SOT-23" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "ADC I2C 8-bit Alert" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "MSOP*3x3mm*P0.65mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "AD7991YRJZ_0_1" + (rectangle + (start -7.62 6.35) + (end 7.62 -3.81) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "AD7991YRJZ_1_1" + (pin open_collector line + (at -10.16 5.08 0) + (length 2.54) + (name "Vin0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 2.54 0) + (length 2.54) + (name "Vin1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 0 0) + (length 2.54) + (name "Vin2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -2.54 0) + (length 2.54) + (name "Vin3/Vref" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 10.16 5.08 180) + (length 2.54) + (name "Vdd" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 10.16 2.54 180) + (length 2.54) + (name "SCL" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 10.16 0 180) + (length 2.54) + (name "SDA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 10.16 -2.54 180) + (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 "T41_Library:AD8307" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 8.89 0.635 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "AD8307" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 3.175 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 3.81 -6.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "DC to 500 MHz, 95 dB Logarithmic Amplifier, SOIC-8" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "RF LOG POWER DETECTOR" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "MSOP*3x3mm*P0.65mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "AD8307_0_1" + (rectangle + (start -6.35 6.35) + (end 6.985 -7.62) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "AD8307_1_1" + (pin input line + (at -3.81 8.89 270) + (length 2.54) + (name "INP" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -3.81 -10.16 90) + (length 2.54) + (name "INM" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -1.27 8.89 270) + (length 2.54) + (name "VPS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -1.27 -10.16 90) + (length 2.54) + (name "COM" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 1.27 8.89 270) + (length 2.54) + (name "ENB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 1.27 -10.16 90) + (length 2.54) + (name "OFS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 3.81 8.89 270) + (length 2.54) + (name "INT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 3.81 -10.16 90) + (length 2.54) + (name "OUT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "T41_Library:CD74HC4514M96" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -8.89 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "CD74HC4514M96" + (at 1.27 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_SO:SOIC-24W_7.5x15.4mm_P1.27mm" + (at 22.86 -25.4 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/cd74hc4514.pdf" + (at -2.54 37.465 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "High-Speed CMOS Logic 16-Channel Analog Multiplexer/Demultiplexer, SOIC-24" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "multiplexer demultiplexer mux demux" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOIC*W*7.5x15.4mm*P1.27mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "CD74HC4514M96_0_1" + (rectangle + (start -8.89 21.59) + (end 8.89 -24.13) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "CD74HC4514M96_1_1" + (pin passive line + (at -12.7 12.7 0) + (length 3.81) + (name "~{LE}" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 2.54 0) + (length 3.81) + (name "A0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 0 0) + (length 3.81) + (name "A1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 -2.54 0) + (length 3.81) + (name "A2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "21" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 -5.08 0) + (length 3.81) + (name "A3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "22" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 -15.24 0) + (length 3.81) + (name "~{E}" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "23" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 25.4 270) + (length 3.81) + (name "VCC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "24" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -27.94 90) + (length 3.81) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 17.78 180) + (length 3.81) + (name "Y0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 15.24 180) + (length 3.81) + (name "Y1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 12.7 180) + (length 3.81) + (name "Y2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 10.16 180) + (length 3.81) + (name "Y3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 7.62 180) + (length 3.81) + (name "Y4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 5.08 180) + (length 3.81) + (name "Y5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 2.54 180) + (length 3.81) + (name "Y6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 0 180) + (length 3.81) + (name "Y7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 -2.54 180) + (length 3.81) + (name "Y8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 -5.08 180) + (length 3.81) + (name "Y9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 -7.62 180) + (length 3.81) + (name "Y10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "20" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 -10.16 180) + (length 3.81) + (name "Y11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "19" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 -12.7 180) + (length 3.81) + (name "Y12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 -15.24 180) + (length 3.81) + (name "Y13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 -17.78 180) + (length 3.81) + (name "Y14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 -20.32 180) + (length 3.81) + (name "Y15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "T41_Library:IDC_2x5" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 1.27 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "IDC_2x5" + (at 1.27 -7.62 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" "Generic connector, double row, 02x05, top/bottom pin numbering scheme (row 1: 1...pins_per_row, row2: pins_per_row+1 ... num_pins), script generated (kicad-library-utils/schlib/autogen/connector/)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_2x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "IDC_2x5_1_1" + (rectangle + (start -1.27 6.35) + (end 3.81 -6.35) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (rectangle + (start -1.27 5.207) + (end 0 4.953) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 2.667) + (end 0 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 1.27) + (end 0 -1.27) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -2.413) + (end 0 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -4.953) + (end 0 -5.207) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 5.207) + (end 2.54 4.953) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 2.667) + (end 2.54 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 0.127) + (end 2.54 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 -2.413) + (end 2.54 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 -4.953) + (end 2.54 -5.207) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 5.08 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -5.08 0) + (length 3.81) + (name "Pin_9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 5.08 180) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 2.54 180) + (length 3.81) + (name "Pin_4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 0 180) + (length 3.81) + (name "Pin_6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 -2.54 180) + (length 3.81) + (name "Pin_8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 -5.08 180) + (length 3.81) + (name "Pin_10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "T41_Library:IRF630" + (pin_names + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "Q" + (at 5.08 1.905 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "IRF630" + (at 5.08 0 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 5.08 -1.905 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.st.com/resource/en/datasheet/cd00000701.pdf" + (at 5.08 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "150A Id, 40V Vds, 3.4mOhm Rds, N-Channel MOSFET, DirectFET MT" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "N-Channel MOSFET" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "DirectFET*MT*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "IRF630_0_1" + (polyline + (pts + (xy 0.254 1.905) (xy 0.254 -1.905) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.254 0) (xy -2.54 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 2.286) (xy 0.762 1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 0.508) (xy 0.762 -0.508) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 -1.27) (xy 0.762 -2.286) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 -1.778) (xy 3.302 -1.778) (xy 3.302 1.778) (xy 0.762 1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.016 0) (xy 2.032 0.381) (xy 2.032 -0.381) (xy 1.016 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (circle + (center 1.651 0) + (radius 2.794) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 2.54) (xy 2.54 1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 2.54 1.778) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (circle + (center 2.54 -1.778) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 2.54 -2.54) (xy 2.54 0) (xy 0.762 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.794 0.508) (xy 2.921 0.381) (xy 3.683 0.381) (xy 3.81 0.254) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 3.302 0.381) (xy 2.921 -0.254) (xy 3.683 -0.254) (xy 3.302 0.381) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "IRF630_1_1" + (pin input line + (at -5.08 0 0) + (length 2.54) + (name "G" + (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 "D" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 2.54 -5.08 90) + (length 2.54) + (name "S" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "T41_Library:REF3440IDBVR" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 1.27 8.89 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "REF3440IDBVR" + (at 1.27 6.35 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_SMD:SOT-23-6" + (at -5.715 -21.59 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/ref3440.pdf" + (at 10.795 -24.765 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Description" "Voltage Reference, SOT-23-6" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOT?23*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "REF3440IDBVR_0_1" + (rectangle + (start -7.62 5.08) + (end 7.62 -7.62) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "REF3440IDBVR_1_1" + (pin input line + (at -10.16 0 0) + (length 2.54) + (name "ENABLE" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -2.54 -10.16 90) + (length 2.54) + (name "GNDS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 7.62 270) + (length 2.54) + (name "VIN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -10.16 90) + (length 2.54) + (name "GNDF" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 10.16 0 180) + (length 2.54) + (name "OUT_F" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 10.16 -2.54 180) + (length 2.54) + (name "OUT_S" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "T41_Library:TC4428" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -8.89 6.35 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "TC4428" + (at 6.35 6.35 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 0 -20.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://ww1.microchip.com/downloads/en/DeviceDoc/20001422G.pdf" + (at 0 -22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "1.5A Dual High-Speed Power MOSFET Drivers" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "MOSFET IGBT driver" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "DIP*W7.62mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "TC4428_0_1" + (rectangle + (start -10.16 5.08) + (end 10.16 -5.08) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "TC4428_1_1" + (pin input line + (at -12.7 0 0) + (length 2.54) + (name "IN_A" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 -2.54 0) + (length 2.54) + (name "IN_B" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.715 7.62 270) + (length 2.54) + (hide yes) + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.715 -7.62 90) + (length 2.54) + (hide yes) + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 7.62 270) + (length 2.54) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 0 -7.62 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 12.7 0 180) + (length 2.54) + (name "~{OUT_A}" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 -2.54 180) + (length 2.54) + (name "OUT_B" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "T41_Library:ULN2803C" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 0 13.335 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "ULN2803C" + (at 0 11.43 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-20W_7.5x12.8mm_P1.27mm" + (at 1.27 -16.51 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/uln2803c.pdf" + (at 3.81 -21.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Darlington Transistor Arrays, SOIC18/DIP18" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Darlington transistor array" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "DIP*W7.62mm* SOIC*7.5x11.6mm*P1.27mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "ULN2803C_0_1" + (rectangle + (start -7.62 10.16) + (end 7.62 -17.78) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (polyline + (pts + (xy -4.572 5.08) (xy -3.556 5.08) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -3.556 6.096) (xy -3.556 4.064) (xy -2.032 5.08) (xy -3.556 6.096) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center -1.778 5.08) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.524 5.08) (xy 4.064 5.08) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center -1.27 2.54) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (circle + (center -1.27 0) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (circle + (center -1.27 -2.286) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (circle + (center -0.508 5.08) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy -0.508 5.08) (xy -0.508 7.62) (xy 2.286 7.62) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 6.731) (xy -1.016 6.731) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 5.969) (xy -1.016 5.969) (xy -0.508 6.731) (xy 0 5.969) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "ULN2803C_1_1" + (pin input line + (at -10.16 5.08 0) + (length 2.54) + (name "I1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 2.54 0) + (length 2.54) + (name "I2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 0 0) + (length 2.54) + (name "I3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -2.54 0) + (length 2.54) + (name "I4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -5.08 0) + (length 2.54) + (name "I5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -7.62 0) + (length 2.54) + (name "I6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -10.16 0) + (length 2.54) + (name "I7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -12.7 0) + (length 2.54) + (name "I8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -10.16 -15.24 0) + (length 2.54) + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -20.32 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 10.16 7.62 180) + (length 2.54) + (name "COM" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin open_collector line + (at 10.16 5.08 180) + (length 2.54) + (name "O1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "20" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin open_collector line + (at 10.16 2.54 180) + (length 2.54) + (name "O2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "19" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin open_collector line + (at 10.16 0 180) + (length 2.54) + (name "O3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin open_collector line + (at 10.16 -2.54 180) + (length 2.54) + (name "O4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin open_collector line + (at 10.16 -5.08 180) + (length 2.54) + (name "O5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin open_collector line + (at 10.16 -7.62 180) + (length 2.54) + (name "O6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin open_collector line + (at 10.16 -10.16 180) + (length 2.54) + (name "O7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin open_collector line + (at 10.16 -12.7 180) + (length 2.54) + (name "O8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 10.16 -15.24 180) + (length 2.54) + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Transistor_FET:2N7000" + (pin_names + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "Q" + (at 5.08 1.905 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "2N7000" + (at 5.08 0 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-92_Inline" + (at 5.08 -1.905 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.vishay.com/docs/70226/70226.pdf" + (at 5.08 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "0.2A Id, 200V Vds, N-Channel MOSFET, 2.6V Logic Level, TO-92" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "N-Channel MOSFET Logic-Level" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO?92*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "2N7000_0_1" + (polyline + (pts + (xy 0.254 1.905) (xy 0.254 -1.905) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.254 0) (xy -2.54 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 2.286) (xy 0.762 1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 0.508) (xy 0.762 -0.508) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 -1.27) (xy 0.762 -2.286) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 -1.778) (xy 3.302 -1.778) (xy 3.302 1.778) (xy 0.762 1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.016 0) (xy 2.032 0.381) (xy 2.032 -0.381) (xy 1.016 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (circle + (center 1.651 0) + (radius 2.794) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 2.54) (xy 2.54 1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 2.54 1.778) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (circle + (center 2.54 -1.778) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 2.54 -2.54) (xy 2.54 0) (xy 0.762 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.794 0.508) (xy 2.921 0.381) (xy 3.683 0.381) (xy 3.81 0.254) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 3.302 0.381) (xy 2.921 -0.254) (xy 3.683 -0.254) (xy 3.302 0.381) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "2N7000_1_1" + (pin input line + (at -5.08 0 0) + (length 2.54) + (name "G" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 2.54 5.08 270) + (length 2.54) + (name "D" + (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 "S" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:+12P" + (power) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR01" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12P" + (at 0 4.1331 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 \"+12P\"" + (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 "+12P_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 "+12P_1_1" + (pin power_out line + (at 0 0 90) + (length 0) + (hide yes) + (name "+12P" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:+12V" + (power) + (pin_names + (offset 0) + ) + (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" "+12V" + (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 \"+12V\"" + (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 "+12V_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 "+12V_1_1" + (pin power_in line + (at 0 0 90) + (length 0) + (hide yes) + (name "+12V" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:+3V3" + (power) + (pin_names + (offset 0) + ) + (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" "+3V3" + (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 \"+3V3\"" + (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 "+3V3_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 "+3V3_1_1" + (pin power_in line + (at 0 0 90) + (length 0) + (hide yes) + (name "+3V3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:+5V" + (power) + (pin_names + (offset 0) + ) + (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" "+5V" + (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 \"+5V\"" + (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 "+5V_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 "+5V_1_1" + (pin power_in line + (at 0 0 90) + (length 0) + (hide yes) + (name "+5V" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:+8V" + (power) + (pin_names + (offset 0) + ) + (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" "+8V" + (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 \"+8V\"" + (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 "+8V_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 "+8V_1_1" + (pin power_in line + (at 0 0 90) + (length 0) + (hide yes) + (name "+8V" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:GND" + (power) + (pin_names + (offset 0) + ) + (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) + (hide yes) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + ) + (rectangle + (start 175.26 137.16) + (end 182.88 142.24) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid 03ddcc05-a15f-41f0-9156-6ea51b7cb51e) + ) + (circle + (center 355.6 156.21) + (radius 2.8398) + (stroke + (width 0) + (type default) + (color 255 0 0 1) + ) + (fill + (type color) + (color 255 0 0 1) + ) + (uuid 0bd32620-05f3-4a6c-8a18-2c97890d1d26) + ) + (circle + (center 63.5 208.28) + (radius 4.5791) + (stroke + (width 0) + (type dash) + ) + (fill + (type none) + ) + (uuid 0dc2056e-c919-4c32-81fc-9f3e4c6660b5) + ) + (rectangle + (start 283.21 152.4) + (end 323.85 171.45) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid 0f12da5c-4cbc-4bc7-a836-2345474f6691) + ) + (circle + (center 398.78 156.21) + (radius 2.8398) + (stroke + (width 0) + (type default) + (color 255 0 0 1) + ) + (fill + (type color) + (color 255 0 0 1) + ) + (uuid 1295542d-ed6d-4ff5-bf0a-21fc6a0cd5dc) + ) + (arc + (start 367.03 151.13) + (mid 370.84 147.4555) + (end 374.65 151.13) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid 1d69cc14-213e-4816-b23d-22d1b2310a83) + ) + (circle + (center 398.78 163.83) + (radius 2.8398) + (stroke + (width 0) + (type default) + (color 255 0 0 1) + ) + (fill + (type color) + (color 255 0 0 1) + ) + (uuid 272d2899-bac6-4da2-93d4-4e97236de730) + ) + (arc + (start 386.08 147.32) + (mid 388.7838 148.4262) + (end 389.89 151.13) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid 325dc2b8-7d3f-48e3-b7cc-60e36539016a) + ) + (circle + (center 355.6 148.59) + (radius 2.8398) + (stroke + (width 0) + (type default) + (color 255 0 0 1) + ) + (fill + (type color) + (color 255 0 0 1) + ) + (uuid 3acc870f-71fe-40ae-a07e-964a59549ce0) + ) + (circle + (center 398.78 148.59) + (radius 2.8398) + (stroke + (width 0) + (type default) + (color 255 0 0 1) + ) + (fill + (type color) + (color 255 0 0 1) + ) + (uuid 3cddf0e9-806d-4912-a712-a311541de65c) + ) + (rectangle + (start 124.46 36.83) + (end 129.54 44.45) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid 44fd1739-639c-4a9b-aae3-720eda0725ab) + ) + (rectangle + (start 217.17 135.89) + (end 280.67 158.75) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid 600708f3-c4e5-4f61-9035-7798d7362aab) + ) + (rectangle + (start 217.17 160.02) + (end 270.51 248.92) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid 79502eb0-d11d-42c1-85a0-70c64f1ed742) + ) + (rectangle + (start 54.61 62.23) + (end 59.69 69.85) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid 8782288d-d492-434c-9f7b-f09ac8da21e5) + ) + (circle + (center 370.84 160.02) + (radius 1.7961) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid 87ba7071-fda6-41a8-b31f-66a076e0867a) + ) + (circle + (center 60.96 240.03) + (radius 5.08) + (stroke + (width 0) + (type dash) + ) + (fill + (type none) + ) + (uuid a5e29514-9291-4469-bc73-7e1ed1f5c047) + ) + (circle + (center 78.74 232.41) + (radius 2.8398) + (stroke + (width 0) + (type dash) + ) + (fill + (type none) + ) + (uuid aa6fe243-ed39-47b7-aa9e-e6e80a276d16) + ) + (circle + (center 370.84 152.4) + (radius 1.7961) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid c5e201e5-a780-4589-b621-8f3a3d2a0551) + ) + (rectangle + (start 283.21 182.88) + (end 323.85 252.73) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid d0045844-b449-476d-b610-30bc174f2ace) + ) + (circle + (center 355.6 163.83) + (radius 2.8398) + (stroke + (width 0) + (type default) + (color 255 0 0 1) + ) + (fill + (type color) + (color 255 0 0 1) + ) + (uuid d52d1ab3-a70f-460c-a526-85e9fa7bb1e3) + ) + (arc + (start 389.89 161.29) + (mid 388.7829 163.9929) + (end 386.08 165.1) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid de993dbb-38b6-44d0-9404-3163f83e3b63) + ) + (rectangle + (start 217.17 250.19) + (end 280.67 274.32) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid e1a9c544-56d7-4ca1-8ab4-5dffbd66ec9f) + ) + (rectangle + (start 344.17 138.43) + (end 407.67 181.61) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid e654ede3-43bc-4cbc-a51f-89ce2166a201) + ) + (arc + (start 374.65 161.29) + (mid 370.84 164.9645) + (end 367.03 161.29) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid e682989c-9cea-4aaf-921d-159ca8159ad3) + ) + (text "Choose a readout method:\nA) Digitize and read via I2C\nB) Analog voltages out through J21" + (exclude_from_sim no) + (at 285.75 180.34 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "087add68-49fe-40f7-9096-41209797a3e6") + ) + (text "Transmit/\nReceive \nSwitch" + (exclude_from_sim no) + (at 308.61 93.98 0) + (effects + (font + (size 3 3) + (bold yes) + ) + (justify left bottom) + ) + (uuid "0e9dcc61-4ea0-4e9f-8a71-8c4011365361") + ) + (text "REF" + (exclude_from_sim no) + (at 397.51 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "14c79130-51c6-48ff-95e0-39799614499c") + ) + (text "20W: N = 10\n100W: N = 20\n26 dB attenuation:\n R17,R22 = 498 Ohms\n R16,R18,R24,R25 = 55.2 Ohms" + (exclude_from_sim no) + (at 365.76 180.34 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "14de90df-eae9-43ec-8b57-2eccc8428541") + ) + (text "LPF" + (exclude_from_sim no) + (at 180.34 140.97 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify right bottom) + ) + (uuid "1559a6fd-60c8-423c-8c45-3ea43339fe1e") + ) + (text "6" + (exclude_from_sim no) + (at 354.33 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "16f1c975-a505-4215-bc8b-f3fc38d601a2") + ) + (text "Choose a power detection option.\n1) Logarithmic-amplifier based detection\n2) Diode based detection" + (exclude_from_sim no) + (at 219.71 281.94 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "1829357b-0e0a-4b2d-8cfc-c320f4bc1cc4") + ) + (text "FWD" + (exclude_from_sim no) + (at 353.06 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "1c2f3ec0-eba5-4e1e-aadd-8bb70ae151a9") + ) + (text "↓" + (exclude_from_sim no) + (at 63.5 21.59 0) + (effects + (font + (size 8 8) + (thickness 1.6) + (bold yes) + (color 255 0 0 1) + ) + (justify left bottom) + ) + (uuid "23442aad-4d22-4f77-9a55-62c4ea2ed44a") + ) + (text "1" + (exclude_from_sim no) + (at 354.33 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "25049519-59c7-4527-97cb-66aaab110cab") + ) + (text "Option B: Detected power analog out" + (exclude_from_sim no) + (at 284.48 154.94 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "2593ba1c-0007-4827-a874-75eedf852667") + ) + (text "→" + (exclude_from_sim no) + (at 203.2 24.13 90) + (effects + (font + (size 8 8) + (thickness 1.6) + (bold yes) + (color 0 255 0 1) + ) + (justify left bottom) + ) + (uuid "26fce53f-3e6d-423b-a98a-6928f2ad1c30") + ) + (text "I2C address\nselect" + (exclude_from_sim no) + (at 34.29 278.13 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "3736a516-c72e-4715-8093-c616cd678f02") + ) + (text "4" + (exclude_from_sim no) + (at 398.78 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "3c7d5e97-0812-447f-b3ed-40b9692c2860") + ) + (text "RX SIGNAL \nPATH" + (exclude_from_sim no) + (at 189.23 72.39 0) + (effects + (font + (size 4 4) + (bold yes) + (color 0 255 0 1) + ) + (justify left bottom) + ) + (uuid "3d9ea206-35e4-4bfc-a418-863fd098cd15") + ) + (text "TX SIGNAL\nPATH" + (exclude_from_sim no) + (at 76.2 137.16 0) + (effects + (font + (size 4 4) + (bold yes) + (color 255 0 0 1) + ) + (justify left bottom) + ) + (uuid "418fd642-a301-40ba-9fcf-4eec3ca806b9") + ) + (text "RF out" + (exclude_from_sim no) + (at 396.24 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "48e77abf-3337-4c7e-bb43-1cecd8a82046") + ) + (text "3" + (exclude_from_sim no) + (at 354.33 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "4d2d3a1e-1acd-4e2b-98ed-accec8612987") + ) + (text "XVTR RF OUT" + (exclude_from_sim no) + (at 92.71 80.01 0) + (effects + (font + (size 4 4) + (bold yes) + ) + (justify left bottom) + ) + (uuid "4d35a2fb-9d46-4cf1-8882-c1235adb944e") + ) + (text "→" + (exclude_from_sim no) + (at 64.77 85.09 0) + (effects + (font + (size 8 8) + (thickness 1.6) + (bold yes) + (color 255 0 0 1) + ) + (justify left bottom) + ) + (uuid "4e620c9c-29a6-4a2c-9a0b-0cbeaa0db6c4") + ) + (text "LFP band\nselect" + (exclude_from_sim no) + (at 49.53 207.01 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "50633e4b-a2fd-42c6-be1e-0c7576bb5c93") + ) + (text "BN43-202" + (exclude_from_sim no) + (at 200.66 217.17 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "52c68944-c118-4990-b9a1-95cac35e5798") + ) + (text "TX RF IN" + (exclude_from_sim no) + (at 33.02 20.32 0) + (effects + (font + (size 4 4) + (bold yes) + ) + (justify left bottom) + ) + (uuid "57848370-7115-4b63-a62d-dbdc405017e6") + ) + (text "↑\nor↓" + (exclude_from_sim no) + (at 154.94 120.65 0) + (effects + (font + (size 4 4) + (thickness 0.6) + (bold yes) + (color 255 0 0 1) + ) + (justify left bottom) + ) + (uuid "60ab5b84-403d-470b-a541-b0199dca2987") + ) + (text "GND" + (exclude_from_sim no) + (at 402.59 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "632ce9c6-294d-482f-a6e1-2c67193f59fe") + ) + (text "SWR measurement" + (exclude_from_sim no) + (at 219.71 134.62 0) + (effects + (font + (size 3 3) + (thickness 0.6) + (bold yes) + ) + (justify left bottom) + ) + (uuid "633212ec-9b19-4ab3-bd74-81758a539a63") + ) + (text "→" + (exclude_from_sim no) + (at 311.15 72.39 90) + (effects + (font + (size 8 8) + (thickness 2.4) + (bold yes) + (color 255 0 0 1) + ) + (justify left bottom) + ) + (uuid "6ac290ed-1a58-43cf-a39b-9707c4fdd7c6") + ) + (text "ANTENNAS" + (exclude_from_sim no) + (at 344.17 21.59 0) + (effects + (font + (size 4 4) + (bold yes) + ) + (justify left bottom) + ) + (uuid "71de9df8-9b3f-427a-a392-3e5a10c490af") + ) + (text "↑or↑" + (exclude_from_sim no) + (at 133.35 43.18 0) + (effects + (font + (size 4 4) + (thickness 0.6) + (bold yes) + (color 0 255 0 1) + ) + (justify left bottom) + ) + (uuid "7261d763-27eb-4fb3-9b5b-3dff0f0493f6") + ) + (text "←" + (exclude_from_sim no) + (at 184.15 63.5 0) + (effects + (font + (size 8 8) + (thickness 1.6) + (bold yes) + (color 0 255 0 1) + ) + (justify left bottom) + ) + (uuid "733c0c34-c7bc-41cb-bcc1-7a3685bdc8ce") + ) + (text "↓" + (exclude_from_sim no) + (at 196.85 182.88 0) + (effects + (font + (size 8 8) + (thickness 1.6) + (bold yes) + (color 255 0 0 1) + ) + (justify left bottom) + ) + (uuid "75cc0b3d-77f4-4097-89f5-cbaec41d388f") + ) + (text "N turns" + (exclude_from_sim no) + (at 386.08 149.86 0) + (effects + (font + (size 1.27 1.27) + (color 255 153 0 1) + ) + (justify right bottom) + ) + (uuid "7744e593-68bc-42f2-8372-cd7e41f287de") + ) + (text "↓or↓" + (exclude_from_sim no) + (at 109.22 50.8 0) + (effects + (font + (size 4 4) + (thickness 0.6) + (bold yes) + (color 255 0 0 1) + ) + (justify left bottom) + ) + (uuid "7a59d871-153d-4e79-a5b5-b1298c95b258") + ) + (text "2" + (exclude_from_sim no) + (at 398.78 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "82f48984-1782-4ab4-a446-37afc3d5bbf7") + ) + (text "1.8 MHZ HPF" + (exclude_from_sim no) + (at 228.6 99.06 0) + (effects + (font + (size 3 3) + (bold yes) + ) + (justify left bottom) + ) + (uuid "855e2861-a416-4f77-bdf3-fad83fbea586") + ) + (text "Power supply" + (exclude_from_sim no) + (at 353.06 190.5 0) + (effects + (font + (size 3 3) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "9c49fdee-ad63-4e9c-9522-d37f414513ab") + ) + (text "N/C" + (exclude_from_sim no) + (at 346.71 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "a0304b97-be2f-4838-8e7e-dcd58ed5482b") + ) + (text "ATTN" + (exclude_from_sim no) + (at 58.42 68.58 90) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "a1b867dc-5df9-444e-beee-40ef76c43cd4") + ) + (text "PAD: Set for \n20W or 200W" + (exclude_from_sim no) + (at 220.98 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "a366eedd-00bd-49ea-b5aa-2818db4e80cf") + ) + (text "N turns" + (exclude_from_sim no) + (at 386.08 163.83 0) + (effects + (font + (size 1.27 1.27) + (color 255 0 255 1) + ) + (justify right bottom) + ) + (uuid "a840ee5a-8e0f-4b5f-a8b3-4a60c9bf6fd7") + ) + (text "→" + (exclude_from_sim no) + (at 123.19 133.35 0) + (effects + (font + (size 8 8) + (thickness 1.6) + (bold yes) + (color 255 0 0 1) + ) + (justify left bottom) + ) + (uuid "ae26249b-0547-423e-91b0-cf15d1d325e2") + ) + (text "RX RF OUT" + (exclude_from_sim no) + (at 204.47 20.32 0) + (effects + (font + (size 4 4) + (bold yes) + ) + (justify left bottom) + ) + (uuid "b61661f0-0c86-4553-b35b-47cd6cf6894c") + ) + (text "Option 2: Diode detector option (part 1/2)" + (exclude_from_sim no) + (at 223.52 138.43 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "b8fcb0d2-c21d-4443-96e1-80ce2ea07f58") + ) + (text "BPF" + (exclude_from_sim no) + (at 128.27 43.18 90) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "ba47f912-8e46-44d2-8116-ad475a905a8c") + ) + (text "Option 2: Diode detector option (part 2/2)" + (exclude_from_sim no) + (at 224.79 273.05 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "c14f3b54-e315-4be1-a3ce-e2f2596ced73") + ) + (text "5" + (exclude_from_sim no) + (at 398.78 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "c1a6f7bb-13fb-44df-9d82-2b648e5eaa85") + ) + (text "Control signal breakout and drivers" + (exclude_from_sim no) + (at 13.97 157.48 0) + (effects + (font + (size 3 3) + (bold yes) + ) + (justify left bottom) + ) + (uuid "c50e7520-7695-48b5-831f-7bf288784a95") + ) + (text "Option A: Digitize detected power" + (exclude_from_sim no) + (at 284.48 185.42 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "cc7148cf-00a8-4517-8feb-8373c3d46c43") + ) + (text "TX path\nselect" + (exclude_from_sim no) + (at 66.04 240.03 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "d9935f66-fe67-451d-8e7f-4e585f5919c2") + ) + (text "Antenna select" + (exclude_from_sim no) + (at 71.12 228.6 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "e22cb3e4-e6bb-4f7e-957f-df425856974f") + ) + (text "Option 1: Log-amp detector option" + (exclude_from_sim no) + (at 223.52 162.56 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "effb771f-bc96-4420-a617-bad735271db8") + ) + (text "RF in" + (exclude_from_sim no) + (at 353.06 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "f7ed411b-0ebf-42ef-a135-8be1113a2733") + ) + (text "BN43-202 winding guide and pad values" + (exclude_from_sim no) + (at 397.51 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "fbd673d1-4820-4b83-9ad0-e9820046d276") + ) + (text_box "Board mounting holes" + (exclude_from_sim no) + (at 383.54 55.88 0) + (size 22.86 17.78) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left top) + ) + (uuid "f8dff638-d9c8-4d77-a669-507378d79194") + ) + (junction + (at 356.87 128.27) + (diameter 0) + (color 0 0 0 0) + (uuid "005a00ea-13c5-4e67-b255-f2522c758f92") + ) + (junction + (at 78.74 233.68) + (diameter 0) + (color 0 0 0 0) + (uuid "03d39f31-f2df-4ebf-bdf7-8bc2e5e8bf4f") + ) + (junction + (at 279.4 210.82) + (diameter 0) + (color 0 0 0 0) + (uuid "0948af34-d0c9-4131-b0fc-4a1e4a7127d3") + ) + (junction + (at 132.08 191.77) + (diameter 0) + (color 0 0 0 0) + (uuid "0c59c2bc-f152-4cf0-ab0f-838fe6772889") + ) + (junction + (at 267.97 86.36) + (diameter 0) + (color 0 0 0 0) + (uuid "0cf4c120-ab1e-49fc-b02f-421496be0314") + ) + (junction + (at 255.27 214.63) + (diameter 0) + (color 0 0 0 0) + (uuid "0d470313-c131-4cd9-95bb-30985923c8f0") + ) + (junction + (at 222.25 143.51) + (diameter 0) + (color 0 0 0 0) + (uuid "0e5d7bf9-3194-4e7a-9a56-572c071c4198") + ) + (junction + (at 316.23 99.06) + (diameter 0) + (color 0 0 0 0) + (uuid "16448ae8-bfa7-460e-91df-84fa2726fd20") + ) + (junction + (at 255.27 168.91) + (diameter 0) + (color 0 0 0 0) + (uuid "187b622e-2b4e-4542-a671-f5015e77f40c") + ) + (junction + (at 356.87 238.76) + (diameter 0) + (color 0 0 0 0) + (uuid "1a0ad7e0-cd03-41d1-99c0-f0e026900171") + ) + (junction + (at 308.61 101.6) + (diameter 0) + (color 0 0 0 0) + (uuid "1bc45510-ab5f-4955-b2a1-477686960d48") + ) + (junction + (at 243.84 86.36) + (diameter 0) + (color 0 0 0 0) + (uuid "1c532f58-bd07-4c2b-b1bf-4b245f88c264") + ) + (junction + (at 370.84 246.38) + (diameter 0) + (color 0 0 0 0) + (uuid "1cc9848f-5d60-4168-8afd-aaf544c924aa") + ) + (junction + (at 162.56 163.83) + (diameter 0) + (color 0 0 0 0) + (uuid "1dc9f0c5-fb91-48ed-8a0b-9566ba2a87bf") + ) + (junction + (at 62.23 182.88) + (diameter 0) + (color 0 0 0 0) + (uuid "20a2a0a1-97ae-4b9f-9d4b-f4a47604648b") + ) + (junction + (at 347.98 128.27) + (diameter 0) + (color 0 0 0 0) + (uuid "22310034-baa9-42cf-8e21-2521729e5b6b") + ) + (junction + (at 21.59 234.95) + (diameter 0) + (color 0 0 0 0) + (uuid "227b1029-dcdd-4c7c-a6e9-78b67397c905") + ) + (junction + (at 381 207.01) + (diameter 0) + (color 0 0 0 0) + (uuid "2282b5dd-135f-4b5f-95aa-49c014082d1e") + ) + (junction + (at 267.97 88.9) + (diameter 0) + (color 0 0 0 0) + (uuid "26525595-5752-4576-9714-f9834857b72d") + ) + (junction + (at 43.18 213.36) + (diameter 0) + (color 0 0 0 0) + (uuid "293e8449-8c40-4a8f-8c8d-a224c5ce3952") + ) + (junction + (at 347.98 120.65) + (diameter 0) + (color 0 0 0 0) + (uuid "2a96a380-db17-4746-b8cd-67c93c1fddd5") + ) + (junction + (at 302.26 83.82) + (diameter 0) + (color 0 0 0 0) + (uuid "2ae2ebc9-b454-472a-a51d-eff49a76cb0e") + ) + (junction + (at 127 24.13) + (diameter 0) + (color 0 0 0 0) + (uuid "2b4b5d02-6b20-456c-9a4d-1ecaee5014d9") + ) + (junction + (at 132.08 154.94) + (diameter 0) + (color 0 0 0 0) + (uuid "2f3144ba-1533-4192-82a2-7ee4beecf73c") + ) + (junction + (at 355.6 199.39) + (diameter 0) + (color 0 0 0 0) + (uuid "31b5f7dc-43cb-4314-9d2f-26536be978bb") + ) + (junction + (at 170.18 222.25) + (diameter 0) + (color 0 0 0 0) + (uuid "31ea1b95-8a32-4687-bea9-5efe8409c5fd") + ) + (junction + (at 375.92 207.01) + (diameter 0) + (color 0 0 0 0) + (uuid "342b961a-4573-488a-ac10-f5f670da32f4") + ) + (junction + (at 375.92 246.38) + (diameter 0) + (color 0 0 0 0) + (uuid "34dfcdc1-fae0-41aa-bdfc-3ff584fe47fe") + ) + (junction + (at 77.47 231.14) + (diameter 0) + (color 0 0 0 0) + (uuid "35c8df4f-acc9-4633-b273-e42c7af815dc") + ) + (junction + (at 63.5 187.96) + (diameter 0) + (color 0 0 0 0) + (uuid "38e01a8e-5c36-4a77-b83f-6571193c9ecb") + ) + (junction + (at 229.87 172.72) + (diameter 0) + (color 0 0 0 0) + (uuid "3c23cf98-6a75-4083-a1c3-093d8f15c052") + ) + (junction + (at 284.48 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "40f7384f-83a9-4b2f-84ea-e4efa993ac29") + ) + (junction + (at 238.76 256.54) + (diameter 0) + (color 0 0 0 0) + (uuid "42ca05e8-6671-4811-96f9-8deaf190a6cc") + ) + (junction + (at 237.49 143.51) + (diameter 0) + (color 0 0 0 0) + (uuid "45d83a9f-22fc-4d9a-9282-31c543a0f31d") + ) + (junction + (at 254 243.84) + (diameter 0) + (color 0 0 0 0) + (uuid "45e5771e-ea8c-453e-9a83-2300edb17efa") + ) + (junction + (at 163.83 171.45) + (diameter 0) + (color 0 0 0 0) + (uuid "472f29c9-eee7-46df-b10c-4c2e7b0afe22") + ) + (junction + (at 328.93 199.39) + (diameter 0) + (color 0 0 0 0) + (uuid "4a2c4310-53a1-41a6-8970-e417691b2f21") + ) + (junction + (at 166.37 120.65) + (diameter 0) + (color 0 0 0 0) + (uuid "4bbeffc3-d4a7-41aa-87c5-f4d9a6ede428") + ) + (junction + (at 281.94 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "4d29cc78-3674-47b2-988f-14f4907f458c") + ) + (junction + (at 222.25 172.72) + (diameter 0) + (color 0 0 0 0) + (uuid "4f7b48e9-845d-40b6-a613-55f8331c9176") + ) + (junction + (at 351.79 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "581ad681-0e65-4ba7-972b-884d8dfbf654") + ) + (junction + (at 121.92 224.79) + (diameter 0) + (color 0 0 0 0) + (uuid "589d1fc3-78df-4b6f-a6df-315a3373ec80") + ) + (junction + (at 115.57 274.32) + (diameter 0) + (color 0 0 0 0) + (uuid "5f152757-2193-49c4-8740-dd9f70928007") + ) + (junction + (at 85.09 241.3) + (diameter 0) + (color 0 0 0 0) + (uuid "5fce7c5a-01df-48d8-8a9c-5c42f11b5b9a") + ) + (junction + (at 212.09 215.9) + (diameter 0) + (color 0 0 0 0) + (uuid "61a53499-f11b-44d1-807f-7e146b10a4bb") + ) + (junction + (at 250.19 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "64d78268-2e22-4580-bcd6-f9e68a0dfa70") + ) + (junction + (at 393.7 199.39) + (diameter 0) + (color 0 0 0 0) + (uuid "66947dd7-05e7-4a60-9a28-261c30a47f39") + ) + (junction + (at 110.49 217.17) + (diameter 0) + (color 0 0 0 0) + (uuid "67583876-05fc-4a3f-b8b5-7ed289326a58") + ) + (junction + (at 279.4 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "67c52bc5-6bfb-467a-8cd8-39f9ca3863f6") + ) + (junction + (at 227.33 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "6d8d6948-ea27-44de-accd-ef47a4d94588") + ) + (junction + (at 191.77 134.62) + (diameter 0) + (color 0 0 0 0) + (uuid "6dad17f0-9899-427d-9756-2edb70ac5c50") + ) + (junction + (at 344.17 80.01) + (diameter 0) + (color 0 0 0 0) + (uuid "71e9dbb0-98f4-4166-b596-54f49cb68723") + ) + (junction + (at 81.28 40.64) + (diameter 0) + (color 0 0 0 0) + (uuid "7365c40b-222a-4378-8b8d-56a7dd3edaab") + ) + (junction + (at 284.48 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "77803efd-de1c-48c8-b3fa-f1501d061c79") + ) + (junction + (at 64.77 193.04) + (diameter 0) + (color 0 0 0 0) + (uuid "7aa83067-1928-47da-a5f7-8e8caa453f58") + ) + (junction + (at 302.26 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "82bc9318-0dab-4128-807c-e0397044ad97") + ) + (junction + (at 82.55 217.17) + (diameter 0) + (color 0 0 0 0) + (uuid "853b2fe6-5abb-47fc-b4f3-3ce11a0e909a") + ) + (junction + (at 229.87 220.98) + (diameter 0) + (color 0 0 0 0) + (uuid "872ce871-0569-4348-9279-2516d0505ff5") + ) + (junction + (at 222.25 177.8) + (diameter 0) + (color 0 0 0 0) + (uuid "87a2633d-a092-4954-a87d-fe9ed5d19e2e") + ) + (junction + (at 237.49 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "88a7b9d6-a37d-4f98-9d14-a08ae15fef9f") + ) + (junction + (at 238.76 266.7) + (diameter 0) + (color 0 0 0 0) + (uuid "88df601b-bf9a-4c56-8b24-8f3127289f51") + ) + (junction + (at 255.27 171.45) + (diameter 0) + (color 0 0 0 0) + (uuid "89af1293-7086-4c15-b8c9-58fdee300e25") + ) + (junction + (at 110.49 181.61) + (diameter 0) + (color 0 0 0 0) + (uuid "8bc2044c-80c1-4f0a-a5a9-a611805fc7c7") + ) + (junction + (at 302.26 102.87) + (diameter 0) + (color 0 0 0 0) + (uuid "8c0e28ae-d7ec-4cc5-829e-88496c6ae4e2") + ) + (junction + (at 125.73 248.92) + (diameter 0) + (color 0 0 0 0) + (uuid "8cdd83b2-8b7c-40ac-afa4-e4def67ec327") + ) + (junction + (at 346.71 220.98) + (diameter 0) + (color 0 0 0 0) + (uuid "8f1c539d-8461-4f09-80de-2f3b568e348f") + ) + (junction + (at 147.32 262.89) + (diameter 0) + (color 0 0 0 0) + (uuid "8f4bf319-380e-4f91-8cb2-764c4cec7b9a") + ) + (junction + (at 231.14 153.67) + (diameter 0) + (color 0 0 0 0) + (uuid "8f9720a1-b68d-43ec-964e-62a42f0c1c09") + ) + (junction + (at 138.43 256.54) + (diameter 0) + (color 0 0 0 0) + (uuid "8fc6ac00-2687-4167-9adb-824aa13ce40c") + ) + (junction + (at 355.6 220.98) + (diameter 0) + (color 0 0 0 0) + (uuid "90e19af9-998a-45c2-86b4-12e5db518e8f") + ) + (junction + (at 21.59 261.62) + (diameter 0) + (color 0 0 0 0) + (uuid "921b9c7d-85fc-4251-a0c3-d57326150da0") + ) + (junction + (at 125.73 246.38) + (diameter 0) + (color 0 0 0 0) + (uuid "9236e46e-9db3-4bb3-b86c-151ce1176cbb") + ) + (junction + (at 127 62.23) + (diameter 0) + (color 0 0 0 0) + (uuid "966674fb-d1b4-4003-aa8c-92b16f58dd10") + ) + (junction + (at 393.7 238.76) + (diameter 0) + (color 0 0 0 0) + (uuid "9da3c1ba-eac7-4376-9594-28a475f4f8f2") + ) + (junction + (at 41.91 40.64) + (diameter 0) + (color 0 0 0 0) + (uuid "9de01915-4b3b-4094-a50e-1f5b8ea0ee10") + ) + (junction + (at 292.1 234.95) + (diameter 0) + (color 0 0 0 0) + (uuid "a14fd65c-ee92-44bd-9851-80d4686523af") + ) + (junction + (at 237.49 215.9) + (diameter 0) + (color 0 0 0 0) + (uuid "a264c602-e897-4eed-8c85-8556b15bc71c") + ) + (junction + (at 237.49 172.72) + (diameter 0) + (color 0 0 0 0) + (uuid "a2e53079-6f2f-4f05-b485-662bcc33e3c9") + ) + (junction + (at 364.49 228.6) + (diameter 0) + (color 0 0 0 0) + (uuid "a3744ad0-f546-4bf5-8e07-7d583992ceaa") + ) + (junction + (at 33.02 269.24) + (diameter 0) + (color 0 0 0 0) + (uuid "a38311ad-4e88-42fc-bf94-b08aceb903f2") + ) + (junction + (at 148.59 220.98) + (diameter 0) + (color 0 0 0 0) + (uuid "a535c922-f4c9-428a-bf60-31e4ddd4403b") + ) + (junction + (at 328.93 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "a5d0cb1d-f4dd-4f89-af90-6d07bd28e2b7") + ) + (junction + (at 16.51 251.46) + (diameter 0) + (color 0 0 0 0) + (uuid "a6042d77-2b60-4cfb-8b82-a180fb63a5f6") + ) + (junction + (at 387.35 67.31) + (diameter 0) + (color 0 0 0 0) + (uuid "a67df88d-d11f-4e82-aa0d-ed61571a7363") + ) + (junction + (at 375.92 228.6) + (diameter 0) + (color 0 0 0 0) + (uuid "a9547518-2ad0-4c96-b811-9d8a807f3aad") + ) + (junction + (at 234.95 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "af5bd88f-c6da-4e03-9970-02b514437476") + ) + (junction + (at 267.97 83.82) + (diameter 0) + (color 0 0 0 0) + (uuid "b2038b79-43fa-4197-8961-d5ba02e9c997") + ) + (junction + (at 375.92 238.76) + (diameter 0) + (color 0 0 0 0) + (uuid "b25e2f3b-07ea-4205-8784-c0feaac82a66") + ) + (junction + (at 364.49 207.01) + (diameter 0) + (color 0 0 0 0) + (uuid "b5a9d625-fdd8-4711-b5d0-8e8348df7b83") + ) + (junction + (at 273.05 193.04) + (diameter 0) + (color 0 0 0 0) + (uuid "b8474560-6419-4e0a-a96f-0f6d0ee62a0d") + ) + (junction + (at 163.83 207.01) + (diameter 0) + (color 0 0 0 0) + (uuid "b96eb459-14d3-4920-8813-f743a0d7eb92") + ) + (junction + (at 33.02 86.36) + (diameter 0) + (color 0 0 0 0) + (uuid "ba145605-3e07-4e95-8aa4-b736dce3ad5e") + ) + (junction + (at 43.18 269.24) + (diameter 0) + (color 0 0 0 0) + (uuid "badf1476-eaf9-4617-b4d8-571b4a9e8d70") + ) + (junction + (at 375.92 199.39) + (diameter 0) + (color 0 0 0 0) + (uuid "bbc897e7-99ca-4788-b042-6f88ff8bfc7a") + ) + (junction + (at 302.26 116.84) + (diameter 0) + (color 0 0 0 0) + (uuid "bc20d93b-f602-4741-8af4-43487482ac14") + ) + (junction + (at 237.49 153.67) + (diameter 0) + (color 0 0 0 0) + (uuid "bca2d6df-0701-406d-98b1-5ed0ae9d9db0") + ) + (junction + (at 33.02 273.05) + (diameter 0) + (color 0 0 0 0) + (uuid "bdbf44e0-336d-409f-a572-f0d48f9021e2") + ) + (junction + (at 295.91 193.04) + (diameter 0) + (color 0 0 0 0) + (uuid "bdc694ba-1b18-4740-9097-5b55aa970044") + ) + (junction + (at 375.92 220.98) + (diameter 0) + (color 0 0 0 0) + (uuid "be539c41-737a-4c59-9812-ab6834420d74") + ) + (junction + (at 226.06 198.12) + (diameter 0) + (color 0 0 0 0) + (uuid "c0ec30fa-bc7e-4abf-a5ce-597620daa995") + ) + (junction + (at 306.07 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "c20fd360-5205-4817-bec9-51aefd088b79") + ) + (junction + (at 255.27 212.09) + (diameter 0) + (color 0 0 0 0) + (uuid "c23583f7-24dd-41c0-8fc7-38e987edbcc9") + ) + (junction + (at 67.31 163.83) + (diameter 0) + (color 0 0 0 0) + (uuid "c356211d-ce2f-40cc-aa42-243445769886") + ) + (junction + (at 66.04 198.12) + (diameter 0) + (color 0 0 0 0) + (uuid "c701e64b-3c60-4f2d-99d1-57d7b5f5b63f") + ) + (junction + (at 254 200.66) + (diameter 0) + (color 0 0 0 0) + (uuid "c88e3aab-818d-44bb-90fd-50dada106730") + ) + (junction + (at 185.42 40.64) + (diameter 0) + (color 0 0 0 0) + (uuid "c9254f81-6205-4c10-b7fb-d63f6dc3de9a") + ) + (junction + (at 252.73 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "ca88ded0-f621-4bdb-be9a-0d7e16315044") + ) + (junction + (at 232.41 266.7) + (diameter 0) + (color 0 0 0 0) + (uuid "d0433aca-162c-418f-945f-6f02d3ab815d") + ) + (junction + (at 349.25 199.39) + (diameter 0) + (color 0 0 0 0) + (uuid "d0521bec-f403-43d7-9be8-af7066122567") + ) + (junction + (at 302.26 88.9) + (diameter 0) + (color 0 0 0 0) + (uuid "d0c441aa-7573-4274-a41a-9c6909abc079") + ) + (junction + (at 260.35 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "d16e8720-6e3b-4d5c-8213-1bcfb46446fd") + ) + (junction + (at 281.94 213.36) + (diameter 0) + (color 0 0 0 0) + (uuid "d3502b86-f9bf-4564-b331-2df69f2c9258") + ) + (junction + (at 182.88 222.25) + (diameter 0) + (color 0 0 0 0) + (uuid "d6dc19a3-11ad-4454-b857-56f4b8444468") + ) + (junction + (at 332.74 63.5) + (diameter 0) + (color 0 0 0 0) + (uuid "d8056910-0c55-4a30-8728-b8788f3a805f") + ) + (junction + (at 302.26 86.36) + (diameter 0) + (color 0 0 0 0) + (uuid "d87fec93-3161-448f-beac-757c182e1dd2") + ) + (junction + (at 226.06 241.3) + (diameter 0) + (color 0 0 0 0) + (uuid "d8f8c94c-32b3-419a-830e-18a12334d2f4") + ) + (junction + (at 222.25 215.9) + (diameter 0) + (color 0 0 0 0) + (uuid "d9f8da13-fde4-470f-90ca-7ef4a9a1868d") + ) + (junction + (at 162.56 199.39) + (diameter 0) + (color 0 0 0 0) + (uuid "da161f7f-d062-4593-a89d-f0a770b83b9a") + ) + (junction + (at 223.52 256.54) + (diameter 0) + (color 0 0 0 0) + (uuid "dd03d349-13c9-4cb1-b871-9eac30cf7c73") + ) + (junction + (at 304.8 247.65) + (diameter 0) + (color 0 0 0 0) + (uuid "dd847913-8900-4804-8e38-3faf5152fedf") + ) + (junction + (at 187.96 54.61) + (diameter 0) + (color 0 0 0 0) + (uuid "e0bf4393-95ca-441b-ab77-d40cb8865275") + ) + (junction + (at 302.26 63.5) + (diameter 0) + (color 0 0 0 0) + (uuid "e1ec33e9-4174-4555-95e0-f87becba1e7b") + ) + (junction + (at 309.88 63.5) + (diameter 0) + (color 0 0 0 0) + (uuid "e42000c8-33fa-49ea-b923-55c0262cefbf") + ) + (junction + (at 287.02 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "e72265d4-26f8-4bed-a749-0bb7c2db3c91") + ) + (junction + (at 212.09 172.72) + (diameter 0) + (color 0 0 0 0) + (uuid "e75b6417-3b85-4411-a4c7-50e631c9fe07") + ) + (junction + (at 15.24 251.46) + (diameter 0) + (color 0 0 0 0) + (uuid "e773ce18-bdbf-4a41-94d7-995f0044b134") + ) + (junction + (at 121.92 189.23) + (diameter 0) + (color 0 0 0 0) + (uuid "ea865d1a-ac35-440a-a57c-4e3091bc00d5") + ) + (junction + (at 229.87 177.8) + (diameter 0) + (color 0 0 0 0) + (uuid "ef8c6408-683c-4399-a296-00e26eed22a2") + ) + (junction + (at 287.02 234.95) + (diameter 0) + (color 0 0 0 0) + (uuid "f09b10b7-6d14-4818-beee-2b06d3f72f2f") + ) + (junction + (at 365.76 246.38) + (diameter 0) + (color 0 0 0 0) + (uuid "f1929b62-8865-400c-9d57-387bd872ad57") + ) + (junction + (at 346.71 199.39) + (diameter 0) + (color 0 0 0 0) + (uuid "f29510ee-6aff-46d4-be07-9f2902a0603b") + ) + (junction + (at 303.53 226.06) + (diameter 0) + (color 0 0 0 0) + (uuid "f36dd7ec-93c7-408b-b77b-5c926826f278") + ) + (junction + (at 303.53 247.65) + (diameter 0) + (color 0 0 0 0) + (uuid "f45d48a2-1767-437a-9328-3c699a982736") + ) + (junction + (at 229.87 215.9) + (diameter 0) + (color 0 0 0 0) + (uuid "f4aa4f7b-e8c0-47a4-901e-984dc1262bd7") + ) + (junction + (at 359.41 100.33) + (diameter 0) + (color 0 0 0 0) + (uuid "f5d01e67-45ff-46f6-b099-3e9c141ef4a7") + ) + (junction + (at 222.25 220.98) + (diameter 0) + (color 0 0 0 0) + (uuid "f65a5c4d-d06c-42d4-a878-63aec83c73af") + ) + (junction + (at 111.76 260.35) + (diameter 0) + (color 0 0 0 0) + (uuid "f6b8a82c-e942-474c-9c37-0a7ea18840e1") + ) + (junction + (at 77.47 54.61) + (diameter 0) + (color 0 0 0 0) + (uuid "f75e7b0c-8211-49cb-ad43-7fd7252e7720") + ) + (junction + (at 273.05 236.22) + (diameter 0) + (color 0 0 0 0) + (uuid "faf0510a-f6c5-495c-b3ea-9eb06fd6e61e") + ) + (junction + (at 330.2 124.46) + (diameter 0) + (color 0 0 0 0) + (uuid "fb2fcc74-e68c-4110-a166-bc5d1eb8512c") + ) + (junction + (at 22.86 259.08) + (diameter 0) + (color 0 0 0 0) + (uuid "fcbdbc89-3b78-4fc8-8bf0-142d3ddb9028") + ) + (junction + (at 24.13 256.54) + (diameter 0) + (color 0 0 0 0) + (uuid "fda4c7fa-ef5a-4d51-8461-3d8f63a92a92") + ) + (junction + (at 175.26 222.25) + (diameter 0) + (color 0 0 0 0) + (uuid "ffe0f409-cf93-4a4a-a28d-25ae7e317a12") + ) + (no_connect + (at 107.95 246.38) + (uuid "0fc31141-06c5-4c9e-8a40-594e9a4f1e39") + ) + (no_connect + (at 336.55 44.45) + (uuid "23c4f441-5b26-4d39-a6ca-7c404eb74936") + ) + (no_connect + (at 128.27 251.46) + (uuid "23e01862-3c6a-4679-9f45-2a844c632042") + ) + (no_connect + (at 25.4 236.22) + (uuid "261a6bc5-a620-4cc3-96a2-835ff0b109d2") + ) + (no_connect + (at 25.4 238.76) + (uuid "2edb1fb5-cce5-4097-8117-1ce5af4eff8d") + ) + (no_connect + (at 313.69 44.45) + (uuid "3fce46e7-0b92-443e-9ac5-b325793d7dc3") + ) + (no_connect + (at 290.83 44.45) + (uuid "46dc77d5-d45a-47e0-92c2-29239aa40f0b") + ) + (no_connect + (at 95.25 201.93) + (uuid "4863d20e-51f7-4c3b-bdcd-a904356ee6eb") + ) + (no_connect + (at 60.96 259.08) + (uuid "4b52d153-ec87-4ff6-99d4-f9cd0ac9a401") + ) + (no_connect + (at 60.96 254) + (uuid "4b63f750-37c2-4fb3-9868-2abbf4cc1e80") + ) + (no_connect + (at 148.59 248.92) + (uuid "4c1ede6d-29c1-492c-93e4-6432aae54b04") + ) + (no_connect + (at 132.08 184.15) + (uuid "5026baf1-94c3-4161-ab95-bc9425866c30") + ) + (no_connect + (at 111.76 219.71) + (uuid "5592af51-25a8-48c0-a156-6075b1725486") + ) + (no_connect + (at 60.96 248.92) + (uuid "59a610a5-6445-486f-ad97-fe80d025fe21") + ) + (no_connect + (at 259.08 215.9) + (uuid "5cbac685-89ef-4f73-ba7b-1d1bcf9cf9ef") + ) + (no_connect + (at 95.25 199.39) + (uuid "60e51604-30bf-455f-8417-53c005c80aa3") + ) + (no_connect + (at 107.95 241.3) + (uuid "64db2a65-a7db-4c0f-8e3a-df3293b8950d") + ) + (no_connect + (at 132.08 179.07) + (uuid "696b375f-e360-44ad-8af9-23c8112e15e8") + ) + (no_connect + (at 148.59 246.38) + (uuid "6d25f42e-7eb2-46f6-9de5-60a93be20216") + ) + (no_connect + (at 102.87 279.4) + (uuid "88706ed6-c326-450b-b08f-30c38125251b") + ) + (no_connect + (at 267.97 44.45) + (uuid "893dab90-84fe-452c-8c34-61d7cabc4887") + ) + (no_connect + (at 132.08 217.17) + (uuid "8e5c0541-1484-46c3-a425-fe7f874c393a") + ) + (no_connect + (at 132.08 181.61) + (uuid "9138d306-8a54-46ed-848c-e93e6e3f8f05") + ) + (no_connect + (at 107.95 243.84) + (uuid "96b58035-75a2-4b6f-8351-c61760f85219") + ) + (no_connect + (at 208.28 198.12) + (uuid "a115a8ae-cf7d-4ff1-965a-a0f4265718f3") + ) + (no_connect + (at 256.54 234.95) + (uuid "a1e208b1-1d24-4fee-a984-ef48e3acefea") + ) + (no_connect + (at 95.25 204.47) + (uuid "a6dea6cb-2b87-41a2-91e9-8f34167617b1") + ) + (no_connect + (at 148.59 243.84) + (uuid "abf4e703-1623-4db1-b88b-ea6f17e0b285") + ) + (no_connect + (at 259.08 172.72) + (uuid "b186bf72-a81a-4bf7-94ea-da07723f089d") + ) + (no_connect + (at 356.87 123.19) + (uuid "b263f0fb-77ca-4519-9aee-6389a3c69f16") + ) + (no_connect + (at 107.95 248.92) + (uuid "b35aca06-4e74-42d6-a0b8-d643f0586789") + ) + (no_connect + (at 132.08 219.71) + (uuid "bb4d5b23-b1c4-448d-8d48-b5974e71440e") + ) + (no_connect + (at 111.76 184.15) + (uuid "bd5f6d6d-4adf-4713-87a8-b73c0ae30f51") + ) + (no_connect + (at 132.08 214.63) + (uuid "c4c599bb-d56c-40ef-8ad9-e8c3323d399a") + ) + (no_connect + (at 356.87 125.73) + (uuid "d497604a-7a45-4ae0-b922-558450672e08") + ) + (no_connect + (at 95.25 207.01) + (uuid "dde1f40c-bf8b-4119-837a-db1a50e1ae23") + ) + (no_connect + (at 148.59 251.46) + (uuid "e0986ca1-6f99-4c8a-a8ab-8a8295b51dc2") + ) + (no_connect + (at 356.87 118.11) + (uuid "e505bf4c-052d-4f34-a803-22d09cfbdf58") + ) + (no_connect + (at 60.96 256.54) + (uuid "e7a42c22-e381-4409-a9e3-956b4e2968b1") + ) + (no_connect + (at 256.54 191.77) + (uuid "e83f85d6-f870-405b-8a8a-f91e32b0f11c") + ) + (no_connect + (at 60.96 261.62) + (uuid "eba1e594-fd84-41e4-aa13-09d0841cc634") + ) + (no_connect + (at 60.96 251.46) + (uuid "f3a1c634-088e-4809-ad24-2f1e95af8167") + ) + (wire + (pts + (xy 284.48 109.22) (xy 284.48 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "005db2bf-87bc-4285-865d-0f38023572f4") + ) + (wire + (pts + (xy 165.1 45.72) (xy 167.64 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "005f408b-ab2e-4626-b500-2d1d31fbbc7e") + ) + (wire + (pts + (xy 370.84 246.38) (xy 375.92 246.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0081ed23-696e-4032-b40a-7247b7be5f80") + ) + (wire + (pts + (xy 107.95 233.68) (xy 128.27 233.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "01eaa468-a422-4d9a-9efe-21715552050f") + ) + (wire + (pts + (xy 161.29 166.37) (xy 162.56 166.37) + ) + (stroke + (width 0) + (type default) + ) + (uuid "021cd585-4a02-4c81-97f0-b17a433adb1a") + ) + (wire + (pts + (xy 287.02 72.39) (xy 284.48 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "02cbe64a-6516-4f43-987a-54d290ea8c4f") + ) + (wire + (pts + (xy 304.8 213.36) (xy 306.07 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "02d64ba1-15a1-41a3-a81b-6ac5edebc5fb") + ) + (wire + (pts + (xy 82.55 241.3) (xy 85.09 241.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "03f28ac0-8e91-4696-a420-c5315e7d0337") + ) + (wire + (pts + (xy 295.91 193.04) (xy 304.8 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "045c732c-5965-47f9-8a20-416c7d924aaa") + ) + (wire + (pts + (xy 127 62.23) (xy 151.13 62.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "049a8314-a116-4375-a1d4-6025e0c4f2f1") + ) + (wire + (pts + (xy 176.53 269.24) (xy 175.26 269.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "04a5b123-5d58-40b9-bde0-cd9c7dff4d48") + ) + (wire + (pts + (xy 115.57 273.05) (xy 115.57 274.32) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0574d696-ee8c-4a3d-b8b2-286033b14743") + ) + (wire + (pts + (xy 328.93 209.55) (xy 328.93 212.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "058c6725-ace2-48db-b8f1-cf1a29f2f5a2") + ) + (wire + (pts + (xy 81.28 34.29) (xy 81.28 40.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "061489da-9446-4997-9109-0834b05f44ea") + ) + (wire + (pts + (xy 43.18 270.51) (xy 43.18 269.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0631d35a-4065-4f06-af71-7269e836a6ad") + ) + (wire + (pts + (xy 132.08 204.47) (xy 148.59 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0708f46a-43ab-4b17-b4bc-2ab1def53b37") + ) + (wire + (pts + (xy 185.42 72.39) (xy 227.33 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "078d7a04-d2e5-4739-8a31-65ffccf0de7c") + ) + (wire + (pts + (xy 180.34 31.75) (xy 187.96 31.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "07b74df4-8161-41c8-97bc-50b38c435f8c") + ) + (polyline + (pts + (xy 173.99 107.95) (xy 180.34 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "080aaa6c-af94-421f-a543-bcf996c814bb") + ) + (wire + (pts + (xy 302.26 116.84) (xy 308.61 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "08b429e2-e85c-48c0-8e30-14b99b75ddf8") + ) + (wire + (pts + (xy 303.53 245.11) (xy 303.53 247.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0912e16a-8356-4d71-b509-3febd690887a") + ) + (wire + (pts + (xy 162.56 201.93) (xy 161.29 201.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0953fff2-b9e5-4036-84d4-f74430039132") + ) + (polyline + (pts + (xy 325.12 182.88) (xy 325.12 252.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0972fce0-9e6e-411a-b748-bc0061a9da1d") + ) + (wire + (pts + (xy 175.26 222.25) (xy 175.26 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "097f027c-bfb9-4dd8-9447-ff47c78596a9") + ) + (wire + (pts + (xy 97.79 176.53) (xy 97.79 166.37) + ) + (stroke + (width 0) + (type default) + ) + (uuid "099fbf97-49c5-4041-8123-3a5e42f54002") + ) + (wire + (pts + (xy 276.86 100.33) (xy 279.4 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "09c4f90c-963c-4078-8be2-e55249a9ea17") + ) + (wire + (pts + (xy 110.49 224.79) (xy 121.92 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0a2dc3d9-aef0-4749-bb45-c260e799a855") + ) + (wire + (pts + (xy 194.31 109.22) (xy 194.31 118.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0ac62cc5-0b7c-4b82-93bb-f64de2168e46") + ) + (wire + (pts + (xy 97.79 46.99) (xy 97.79 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0b36ac40-dfe0-4f8d-99f5-a8a0739305c8") + ) + (wire + (pts + (xy 151.13 273.05) (xy 151.13 274.32) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0bf35fa4-9c62-46f7-afb8-68b6f137e8df") + ) + (wire + (pts + (xy 347.98 129.54) (xy 347.98 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0bfaa6a9-dc55-4d87-a357-6a985672d812") + ) + (polyline + (pts + (xy 195.58 284.48) (xy 12.7 284.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0c2f0258-1d9c-427d-afec-0127e3e097da") + ) + (wire + (pts + (xy 143.51 273.05) (xy 143.51 276.86) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0cb09f72-9660-420b-8026-2ab88ca482d0") + ) + (wire + (pts + (xy 222.25 220.98) (xy 222.25 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0d1be201-8ffe-4780-b7c3-24dd8f3da6e3") + ) + (polyline + (pts + (xy 389.89 152.4) (xy 397.51 148.59) + ) + (stroke + (width 1) + (type default) + (color 0 0 255 1) + ) + (uuid "0d7ece74-8178-4071-baf7-35770ede2a4b") + ) + (wire + (pts + (xy 250.19 72.39) (xy 252.73 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0d89a7f0-762c-4cc3-9a24-eeed8255679d") + ) + (wire + (pts + (xy 375.92 246.38) (xy 393.7 246.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0dc1ab9c-6a05-48d2-b47e-37f6052d6f26") + ) + (wire + (pts + (xy 256.54 171.45) (xy 255.27 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0dcc2c22-6346-42d8-94cf-360009971bfd") + ) + (wire + (pts + (xy 132.08 171.45) (xy 148.59 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0e06b220-e1e1-4ddb-9536-785763220f5c") + ) + (wire + (pts + (xy 60.96 231.14) (xy 77.47 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0e6ee964-7b92-4b00-a6c5-7ad24caab29c") + ) + (wire + (pts + (xy 234.95 72.39) (xy 237.49 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0ef78b8e-3da5-4c3e-a4b7-7f7c3e5c330e") + ) + (wire + (pts + (xy 158.75 24.13) (xy 160.02 24.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0f3aa16e-e052-47bf-9bd8-d65521941987") + ) + (wire + (pts + (xy 41.91 40.64) (xy 41.91 54.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0f9e88bf-b835-476f-8c55-c28feb267031") + ) + (wire + (pts + (xy 125.73 256.54) (xy 125.73 248.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "104cfd38-4a4b-4ab8-9ba3-cbbcc64e18b3") + ) + (wire + (pts + (xy 110.49 179.07) (xy 110.49 181.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "106a273c-215d-43aa-8cc4-4f32db7fbe6a") + ) + (wire + (pts + (xy 287.02 99.06) (xy 287.02 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "10b59e6f-770c-4e0f-b812-737c70d64aba") + ) + (wire + (pts + (xy 133.35 271.78) (xy 133.35 260.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "10dc838a-8486-4225-9d75-c8be8936c4a8") + ) + (wire + (pts + (xy 255.27 214.63) (xy 254 214.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "11112496-bcca-4741-bf3b-5ef1c3996a75") + ) + (wire + (pts + (xy 74.93 238.76) (xy 74.93 260.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "112e9758-bae7-4fcd-a837-9f659b215765") + ) + (wire + (pts + (xy 162.56 163.83) (xy 162.56 166.37) + ) + (stroke + (width 0) + (type default) + ) + (uuid "11817dbb-3131-494c-be8b-e94b44aee02f") + ) + (wire + (pts + (xy 349.25 199.39) (xy 355.6 199.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "11841be0-37ec-492f-ba4b-9b7c05efe8fb") + ) + (wire + (pts + (xy 234.95 256.54) (xy 238.76 256.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "118e2184-fa64-44e3-a2dc-fd89b4d080c5") + ) + (wire + (pts + (xy 157.48 269.24) (xy 162.56 269.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1271ea93-7e76-4228-b49d-e913fca36df3") + ) + (wire + (pts + (xy 270.51 149.86) (xy 273.05 149.86) + ) + (stroke + (width 0) + (type default) + ) + (uuid "12f23a53-7f29-41ba-8bec-53c5cf166ef6") + ) + (wire + (pts + (xy 96.52 173.99) (xy 96.52 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "13532b57-61b8-4b74-80ef-f256229bfcc5") + ) + (wire + (pts + (xy 247.65 72.39) (xy 250.19 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "13f9be4b-5d3a-4180-a39f-43bccce89762") + ) + (wire + (pts + (xy 85.09 31.75) (xy 77.47 31.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "144fa93f-23cd-4cba-b5ef-0dcf76519bb1") + ) + (wire + (pts + (xy 40.64 198.12) (xy 53.34 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1450dfbe-4593-47e1-995c-948f2076accf") + ) + (wire + (pts + (xy 161.29 204.47) (xy 163.83 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "14635f88-30a6-48a1-bf31-c51f22875b68") + ) + (polyline + (pts + (xy 182.88 139.7) (xy 185.42 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "14d95441-d34d-4625-8385-fed18d113398") + ) + (wire + (pts + (xy 303.53 226.06) (xy 303.53 227.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "152b6ef2-8450-43eb-a538-23730d55d349") + ) + (wire + (pts + (xy 101.6 189.23) (xy 101.6 201.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "15a8a2a4-dfa5-4ce0-be53-386ed15a2132") + ) + (polyline + (pts + (xy 127 44.45) (xy 127 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "15bfb03d-4724-4dfd-9934-c8faff11660b") + ) + (wire + (pts + (xy 64.77 191.77) (xy 69.85 191.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "15f1f3d8-3a77-4b82-ae95-0104bcd66eff") + ) + (wire + (pts + (xy 133.35 260.35) (xy 111.76 260.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "169d6939-a378-4587-9b7f-c26e08aaf160") + ) + (wire + (pts + (xy 175.26 274.32) (xy 176.53 274.32) + ) + (stroke + (width 0) + (type default) + ) + (uuid "17255f4d-1bb4-40c1-b0ce-a8c482cb71c1") + ) + (wire + (pts + (xy 33.02 267.97) (xy 33.02 269.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "17eeede9-865d-4410-a4c0-7452ace8a7fb") + ) + (wire + (pts + (xy 364.49 207.01) (xy 375.92 207.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "18afb770-36f2-4a12-bb17-ebf77ad7896b") + ) + (wire + (pts + (xy 254 191.77) (xy 254 200.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "190110c8-6e86-4337-8cfc-a88c6a6fe860") + ) + (wire + (pts + (xy 226.06 198.12) (xy 226.06 199.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "196005b3-4be5-40f0-850d-ae0da9252f92") + ) + (wire + (pts + (xy 60.96 233.68) (xy 78.74 233.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "19df1fff-7d6c-48b2-8be0-5a1dede372a4") + ) + (wire + (pts + (xy 232.41 266.7) (xy 238.76 266.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1ae7f82f-53a5-438e-a181-8ed29e6c641d") + ) + (wire + (pts + (xy 364.49 228.6) (xy 375.92 228.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1b13ae43-cd73-46fe-a75a-f51bb320ed5d") + ) + (wire + (pts + (xy 107.95 40.64) (xy 107.95 57.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1b3e9b5e-45a6-4620-9392-9ce5ab03234c") + ) + (wire + (pts + (xy 139.7 134.62) (xy 191.77 134.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1b567db4-fb3a-4cb7-a4a5-66312bc3d20a") + ) + (wire + (pts + (xy 102.87 199.39) (xy 111.76 199.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1bb64502-f07b-41a2-8acd-e4abdeff7ec0") + ) + (wire + (pts + (xy 154.94 120.65) (xy 166.37 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1c07757d-f5a0-4ca1-821f-bae7807c9335") + ) + (wire + (pts + (xy 309.88 41.91) (xy 309.88 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1c2ed9a7-356b-48ac-8d04-edc812aae196") + ) + (wire + (pts + (xy 132.08 173.99) (xy 148.59 173.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1c3bc748-7b31-4ed1-bc8c-f63122a35ceb") + ) + (wire + (pts + (xy 226.06 241.3) (xy 229.87 241.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1c4f1f82-b476-4381-85fe-4c220398d47f") + ) + (wire + (pts + (xy 62.23 182.88) (xy 66.04 182.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1ca7f4eb-9ad7-46a8-a3f1-2398ee3b2917") + ) + (wire + (pts + (xy 63.5 163.83) (xy 67.31 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1cbba31b-9c0b-4ccb-8bb5-3ef95d1efba6") + ) + (wire + (pts + (xy 102.87 176.53) (xy 111.76 176.53) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1ce6421f-7885-4c37-a04e-7b05f6fabb52") + ) + (wire + (pts + (xy 128.27 243.84) (xy 125.73 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1cece350-d206-4f28-9b77-20e988a81c64") + ) + (wire + (pts + (xy 347.98 119.38) (xy 347.98 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1d2b7530-dece-4234-ad50-87a28572892a") + ) + (wire + (pts + (xy 295.91 116.84) (xy 302.26 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1d2be19f-8d41-4dd2-afbb-9ad75cfe943d") + ) + (wire + (pts + (xy 60.96 246.38) (xy 72.39 246.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1e0a096a-0072-4ad1-88ea-e44a59eb4e9a") + ) + (wire + (pts + (xy 162.56 163.83) (xy 161.29 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1f6a3c2a-b42a-4874-80f8-96a6632e3680") + ) + (wire + (pts + (xy 151.13 262.89) (xy 147.32 262.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "204d5587-b800-45fe-baa8-4538e1a6a058") + ) + (wire + (pts + (xy 133.35 276.86) (xy 133.35 283.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "209119d6-c24a-4171-abb3-9f5127ebb61d") + ) + (wire + (pts + (xy 190.5 222.25) (xy 190.5 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "20b631f9-16af-43ed-abf8-44784e221541") + ) + (wire + (pts + (xy 212.09 215.9) (xy 222.25 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2100a656-d15c-40b6-8c60-459b4bc13e03") + ) + (wire + (pts + (xy 148.59 236.22) (xy 182.88 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "21e94a3b-3ebf-485a-a752-665f99cc60fb") + ) + (polyline + (pts + (xy 142.24 27.94) (xy 158.75 27.94) + ) + (stroke + (width 1) + (type default) + (color 0 255 0 1) + ) + (uuid "2224d4de-2c92-4093-b32d-867d5d6c6299") + ) + (wire + (pts + (xy 375.92 207.01) (xy 381 207.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "226a7db6-5c00-4fdc-9449-42e31d23a3dc") + ) + (wire + (pts + (xy 132.08 191.77) (xy 134.62 191.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "228df5da-a641-4c57-8fac-a14a3e3bc1c5") + ) + (wire + (pts + (xy 283.21 109.22) (xy 284.48 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "23669c87-c695-40a2-a31d-99e098addb56") + ) + (wire + (pts + (xy 132.08 154.94) (xy 132.08 161.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "24031fd7-e9df-4e63-8423-2aeaad5bed24") + ) + (wire + (pts + (xy 316.23 99.06) (xy 331.47 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "25f345ce-44b6-4a15-abe3-210d691a45de") + ) + (wire + (pts + (xy 161.29 209.55) (xy 162.56 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2653279a-25ea-4595-bd5b-c97042882c0f") + ) + (wire + (pts + (xy 97.79 166.37) (xy 111.76 166.37) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2749baf0-de0a-420d-998f-ee36da363485") + ) + (wire + (pts + (xy 356.87 99.06) (xy 359.41 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "28712815-be42-4891-b106-fe9054fd2c16") + ) + (wire + (pts + (xy 175.26 231.14) (xy 175.26 233.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2877b80d-0e5e-4efb-b842-7554522ae2ad") + ) + (wire + (pts + (xy 127 62.23) (xy 127 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "28a9b25b-18ad-4721-a4d3-f49ebe02f739") + ) + (wire + (pts + (xy 287.02 242.57) (xy 287.02 247.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "28d0f70e-e860-4377-8be6-0a9c764aeff1") + ) + (wire + (pts + (xy 132.08 176.53) (xy 162.56 176.53) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2917531a-3b11-418b-8e74-ffbe9ba6cb12") + ) + (wire + (pts + (xy 151.13 274.32) (xy 162.56 274.32) + ) + (stroke + (width 0) + (type default) + ) + (uuid "29eec32f-1ebf-49a8-9cad-b3f2365bca4b") + ) + (wire + (pts + (xy 154.94 115.57) (xy 160.02 115.57) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2b0a5ea2-138d-49a6-9a36-5a6087b26b99") + ) + (wire + (pts + (xy 279.4 215.9) (xy 284.48 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2b3dd0cd-c3ce-46e1-9ac1-8fa764b0c33e") + ) + (wire + (pts + (xy 251.46 234.95) (xy 251.46 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2b6570c6-31c1-4799-8d4b-d6c06587367b") + ) + (wire + (pts + (xy 287.02 63.5) (xy 302.26 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2c4e6786-ee01-45c4-b6c9-abc226a47d70") + ) + (polyline + (pts + (xy 273.05 74.93) (xy 364.49 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2cc49511-8b18-478d-8b97-254ed2cb38dd") + ) + (wire + (pts + (xy 238.76 256.54) (xy 238.76 259.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2d3cfa5b-dc13-4c7f-be60-220e8b7ab0f3") + ) + (wire + (pts + (xy 148.59 231.14) (xy 167.64 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2e2353d6-d181-4683-b90a-73a6a0011e58") + ) + (wire + (pts + (xy 95.25 209.55) (xy 95.25 212.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2f17d8d9-90e0-424a-ab80-3e98fbc907ba") + ) + (wire + (pts + (xy 222.25 153.67) (xy 231.14 153.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2f26f8bf-ed74-4152-85f4-7a1ddba1f3ae") + ) + (polyline + (pts + (xy 127 104.14) (xy 123.19 110.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2fe3ae6a-0c30-4612-88ec-59c659b39387") + ) + (wire + (pts + (xy 204.47 194.31) (xy 204.47 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2fe41b43-15ba-424d-9afb-fdd3ceae9c9c") + ) + (wire + (pts + (xy 64.77 193.04) (xy 64.77 191.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3080ee5e-532e-44d5-bd8b-f9470e9549ba") + ) + (wire + (pts + (xy 359.41 101.6) (xy 356.87 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "30a32632-5bb9-4947-b5e9-18fdd8a68278") + ) + (wire + (pts + (xy 223.52 256.54) (xy 212.09 256.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "31a0deae-c666-4837-b5cb-a25019367650") + ) + (wire + (pts + (xy 302.26 88.9) (xy 302.26 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "31ee9f69-e79d-4cb9-9d91-2b94a5ce910a") + ) + (wire + (pts + (xy 267.97 88.9) (xy 267.97 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "32189eb2-bdf3-4b8d-b0a1-1685e90d775d") + ) + (polyline + (pts + (xy 313.69 110.49) (xy 313.69 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "322b73d9-4764-4dca-b58d-b87f8baa8881") + ) + (wire + (pts + (xy 223.52 256.54) (xy 227.33 256.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "322ffb8c-060f-4713-99a0-d5f4febd168b") + ) + (wire + (pts + (xy 251.46 191.77) (xy 251.46 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3271b488-2fa3-42e4-9c2c-8e7ed01dcca9") + ) + (wire + (pts + (xy 100.33 179.07) (xy 100.33 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "32db777e-27c6-43cf-83ff-0e280d9e8366") + ) + (wire + (pts + (xy 332.74 63.5) (xy 355.6 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3359861c-3b09-4ff1-9cbf-c26096d554ed") + ) + (wire + (pts + (xy 308.61 101.6) (xy 308.61 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3390d434-51f2-4516-8d12-6377a984c3f8") + ) + (wire + (pts + (xy 300.99 83.82) (xy 302.26 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "33fde0b2-0694-41e4-bb0d-272346bed140") + ) + (wire + (pts + (xy 33.02 273.05) (xy 33.02 278.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "340e3188-5bf9-4694-af9c-dd3ccac5a842") + ) + (polyline + (pts + (xy 12.7 284.48) (xy 12.7 149.86) + ) + (stroke + (width 0) + (type default) + ) + (uuid "34200e31-79b8-4a5d-933c-e5956161cdbf") + ) + (wire + (pts + (xy 161.29 207.01) (xy 163.83 207.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3479e58a-7496-4b0a-96a8-a5ee9ce9c41d") + ) + (wire + (pts + (xy 170.18 215.9) (xy 170.18 222.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "350560d8-81b4-48c2-b4d2-eaf1be06c8e1") + ) + (wire + (pts + (xy 254 214.63) (xy 254 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "35690e4f-1602-4a33-9b95-766f6e060c62") + ) + (wire + (pts + (xy 259.08 191.77) (xy 259.08 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "35be254c-2334-41b1-b44d-d51c3bb98a2e") + ) + (wire + (pts + (xy 323.85 124.46) (xy 330.2 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "35d2931c-89be-4bd1-987a-19eb0eaaccee") + ) + (wire + (pts + (xy 105.41 57.15) (xy 107.95 57.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3610864a-bbed-4991-9583-e59e7388b092") + ) + (wire + (pts + (xy 154.94 104.14) (xy 152.4 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3674a12e-de44-4ac9-89e6-d2897a5655f6") + ) + (wire + (pts + (xy 266.7 143.51) (xy 266.7 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3699fd22-d9f2-467f-95bc-ff6442032d97") + ) + (wire + (pts + (xy 312.42 52.07) (xy 313.69 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "36ac4d8c-ba28-4ac3-a556-9738b8f0001f") + ) + (polyline + (pts + (xy 209.55 181.61) (xy 209.55 127) + ) + (stroke + (width 1) + (type default) + (color 255 0 0 1) + ) + (uuid "37ec2961-5a6e-4d35-b74b-481be99b9361") + ) + (wire + (pts + (xy 82.55 218.44) (xy 82.55 217.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3831ed1f-1d64-4b10-afad-1f4ef21465c5") + ) + (wire + (pts + (xy 176.53 115.57) (xy 166.37 115.57) + ) + (stroke + (width 0) + (type default) + ) + (uuid "38efdc62-55a9-4112-b8d8-7ced73ec13a5") + ) + (wire + (pts + (xy 149.86 29.21) (xy 149.86 57.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3910cc18-0cca-4224-aef3-5c8709a2e529") + ) + (wire + (pts + (xy 185.42 59.69) (xy 180.34 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "395e44d0-7908-4958-9c07-73c8b4b864a7") + ) + (wire + (pts + (xy 229.87 232.41) (xy 229.87 233.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3acb8132-dcb3-489a-9216-abe36e9c3b64") + ) + (wire + (pts + (xy 185.42 34.29) (xy 185.42 40.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3b2891cd-d6ea-4c48-8108-d6daf1d79c2d") + ) + (wire + (pts + (xy 267.97 86.36) (xy 267.97 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3b5008b6-0d4e-4843-8adb-250a048cbd15") + ) + (wire + (pts + (xy 281.94 99.06) (xy 281.94 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3baa77cd-09cc-4502-a742-9bda084c818e") + ) + (wire + (pts + (xy 120.65 62.23) (xy 127 62.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3bd570a6-d33e-480f-af50-254092b90576") + ) + (wire + (pts + (xy 95.25 173.99) (xy 96.52 173.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3c966553-8c61-4e9e-bd93-1670291aee83") + ) + (wire + (pts + (xy 297.18 167.64) (xy 281.94 167.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3cb1f219-f1ba-43de-8cb8-6ff27f5c49e6") + ) + (wire + (pts + (xy 132.08 166.37) (xy 148.59 166.37) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3dc5f1b4-1a50-45cb-b02c-28f612eb5587") + ) + (wire + (pts + (xy 92.71 96.52) (xy 118.11 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3df06616-f27f-4aea-8466-4316eb43efbd") + ) + (wire + (pts + (xy 309.88 63.5) (xy 332.74 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3e777949-f979-4eb0-966f-97f9aeabadea") + ) + (wire + (pts + (xy 356.87 246.38) (xy 365.76 246.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3efcac46-5009-4046-854c-ef078bff744e") + ) + (wire + (pts + (xy 99.06 194.31) (xy 99.06 207.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f6ae90a-7911-4abd-8f1b-ef397f5e46cd") + ) + (wire + (pts + (xy 161.29 171.45) (xy 163.83 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f81d0b5-7b47-42fc-9419-6f2d9da1a810") + ) + (wire + (pts + (xy 295.91 114.3) (xy 295.91 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f820c64-6eb9-493f-9150-4c256f2a5b02") + ) + (wire + (pts + (xy 173.99 128.27) (xy 176.53 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f8694b6-3383-4dd5-aa93-6a8615ed60ff") + ) + (wire + (pts + (xy 300.99 88.9) (xy 302.26 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f8fff71-9b17-4f22-a1de-762abda00696") + ) + (wire + (pts + (xy 97.79 44.45) (xy 95.25 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f90158e-3d5f-46d5-885f-c6ac1209ed24") + ) + (wire + (pts + (xy 83.82 59.69) (xy 85.09 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3fde2c28-f8dc-47a8-933f-5b5062a9fe37") + ) + (wire + (pts + (xy 283.21 66.04) (xy 306.07 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3fe9059a-1ff7-4b5a-a886-0d94b6e7e5b9") + ) + (wire + (pts + (xy 223.52 266.7) (xy 232.41 266.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3fe91076-37b5-43b4-af49-8696985fe287") + ) + (wire + (pts + (xy 260.35 67.31) (xy 260.35 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "400d912e-1be3-44c4-bfab-e8c907be8453") + ) + (polyline + (pts + (xy 142.24 27.94) (xy 142.24 38.1) + ) + (stroke + (width 1) + (type default) + (color 0 255 0 1) + ) + (uuid "404d93ac-0175-49a5-aa12-facf3c19b6a1") + ) + (wire + (pts + (xy 284.48 72.39) (xy 284.48 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "40eb6ef9-fc09-47b1-9450-e32109d93dbf") + ) + (wire + (pts + (xy 245.11 215.9) (xy 251.46 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "410229bc-5757-408a-a245-eec480581c7f") + ) + (wire + (pts + (xy 81.28 40.64) (xy 81.28 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "411b6a7b-0c76-49ab-87a3-293a0cf9b18d") + ) + (wire + (pts + (xy 180.34 26.67) (xy 185.42 26.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4204d60e-3f60-4068-9da6-b9328fac2787") + ) + (wire + (pts + (xy 267.97 83.82) (xy 269.24 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "42750042-6db9-443c-a93d-257b31c21767") + ) + (wire + (pts + (xy 125.73 243.84) (xy 125.73 246.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "429f9eec-68e5-462e-b778-7c71d5f1858b") + ) + (wire + (pts + (xy 328.93 199.39) (xy 328.93 207.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "42edfb34-4f0c-43ce-af9c-118a7f0e48bd") + ) + (wire + (pts + (xy 289.56 99.06) (xy 289.56 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "433b3d86-127d-4470-94ad-d26a6ee8df04") + ) + (wire + (pts + (xy 287.02 247.65) (xy 303.53 247.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4376b3ef-3061-4e99-840b-5c44a7254daa") + ) + (wire + (pts + (xy 132.08 209.55) (xy 148.59 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4405d8dc-4d96-4e31-922e-3a7837f3c53b") + ) + (wire + (pts + (xy 95.25 191.77) (xy 100.33 191.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "44b19161-ac37-418e-aacf-ab3aaf324bbe") + ) + (wire + (pts + (xy 222.25 172.72) (xy 222.25 177.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "44c526be-aac0-4bc1-80de-7d0416d964db") + ) + (wire + (pts + (xy 306.07 52.07) (xy 306.07 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "45489fc1-77d9-4446-a009-738b0e82a8f2") + ) + (wire + (pts + (xy 165.1 251.46) (xy 165.1 252.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "45752ec3-8ef1-424a-8f07-ba0cd3b028e2") + ) + (wire + (pts + (xy 148.59 241.3) (xy 165.1 241.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "45a03eba-2392-48d3-a5de-81f04f8b37c2") + ) + (wire + (pts + (xy 67.31 163.83) (xy 82.55 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "45b80f80-4be2-4a65-9540-f8f07db80da3") + ) + (wire + (pts + (xy 302.26 102.87) (xy 302.26 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "460e5439-c2b9-4950-8020-c61a68504f48") + ) + (wire + (pts + (xy 237.49 153.67) (xy 266.7 153.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "461231db-eeb9-4f88-a0d3-4813b9d41f4e") + ) + (wire + (pts + (xy 148.59 220.98) (xy 148.59 228.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "463cebea-e5f9-4178-9bca-943238aa0255") + ) + (polyline + (pts + (xy 372.11 153.67) (xy 389.89 154.94) + ) + (stroke + (width 0.5) + (type default) + (color 255 153 0 1) + ) + (uuid "46512e2e-f15c-428f-9cb0-628015e5a1cf") + ) + (wire + (pts + (xy 143.51 262.89) (xy 147.32 262.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4665f6bc-c5e2-428d-88ee-2cd056ec8fdf") + ) + (polyline + (pts + (xy 407.67 182.88) (xy 407.67 252.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "467d52dc-f13c-4092-b0b4-35eb04ce4128") + ) + (wire + (pts + (xy 243.84 86.36) (xy 250.19 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "473981de-8194-4a0c-986f-1e09cb3e4f57") + ) + (wire + (pts + (xy 99.06 207.01) (xy 111.76 207.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "47d68bef-7bb8-4217-a049-8b48280aee77") + ) + (polyline + (pts + (xy 389.89 160.02) (xy 397.51 163.83) + ) + (stroke + (width 1) + (type default) + (color 0 255 0 1) + ) + (uuid "4812e811-7f0d-4caf-b6f7-48a7a0796f12") + ) + (wire + (pts + (xy 138.43 256.54) (xy 125.73 256.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "489eaa04-5cc3-42ba-9cf6-02d5571432b6") + ) + (wire + (pts + (xy 161.29 173.99) (xy 162.56 173.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4919cffd-90d2-4d39-b412-d4e706c3dfdc") + ) + (wire + (pts + (xy 204.47 213.36) (xy 204.47 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "493a21da-78c1-474c-999f-1e7eda28b1c9") + ) + (wire + (pts + (xy 76.2 78.74) (xy 78.74 78.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4afa2e7d-dca0-4003-bc8d-f56416c2d4a0") + ) + (wire + (pts + (xy 163.83 204.47) (xy 163.83 207.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4ba38bae-2d98-4131-a4ef-5f529d9fd9af") + ) + (polyline + (pts + (xy 173.99 100.33) (xy 180.34 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4bba887f-46ea-4081-b9ba-0aea52f81f5e") + ) + (wire + (pts + (xy 266.7 256.54) (xy 266.7 259.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4cb80a9b-e2c2-47b7-ae81-16097b273a62") + ) + (wire + (pts + (xy 229.87 172.72) (xy 229.87 177.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4cce3c87-9734-41e6-b5e9-b87b135b240a") + ) + (wire + (pts + (xy 100.33 204.47) (xy 111.76 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4d02ee12-6565-4d28-8564-3c88085f254b") + ) + (wire + (pts + (xy 151.13 265.43) (xy 151.13 262.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4d186091-2d38-444b-8c40-7f5a8a33fb36") + ) + (wire + (pts + (xy 295.91 105.41) (xy 295.91 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4d33c134-83fa-4f39-ba4b-0ec7c93ce197") + ) + (wire + (pts + (xy 60.96 223.52) (xy 63.5 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4d9f156e-c860-4d69-ba43-bb3aa015896c") + ) + (wire + (pts + (xy 328.93 41.91) (xy 332.74 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4def4b93-572a-46cf-bc2c-3b9b8bcf5e8d") + ) + (polyline + (pts + (xy 370.84 147.32) (xy 386.08 147.32) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4df92ac1-7a39-450d-adf2-8f7449cb723e") + ) + (wire + (pts + (xy 355.6 228.6) (xy 364.49 228.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4e1fbefd-94bf-4d81-b2d9-4b4e9b2882b5") + ) + (wire + (pts + (xy 304.8 162.56) (xy 309.88 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4e283e18-3572-4c91-9ed4-e638bfea1096") + ) + (wire + (pts + (xy 229.87 172.72) (xy 237.49 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4e8524d4-723e-45c9-9391-b3c3d937df60") + ) + (wire + (pts + (xy 304.8 247.65) (xy 306.07 247.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4e97a38e-d7da-4e76-a21e-5661e2b2c601") + ) + (wire + (pts + (xy 256.54 214.63) (xy 255.27 214.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4ed91723-8b07-4446-a16c-600512f5c500") + ) + (wire + (pts + (xy 227.33 67.31) (xy 227.33 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4f129140-f7ee-43f2-9b80-be29cd449f99") + ) + (polyline + (pts + (xy 118.11 129.54) (xy 125.73 129.54) + ) + (stroke + (width 1) + (type default) + (color 255 0 0 1) + ) + (uuid "4f1371be-016a-4cda-857c-69d78d664884") + ) + (wire + (pts + (xy 355.6 207.01) (xy 364.49 207.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4faa49ea-d1df-466e-81fb-a28bfa580f04") + ) + (wire + (pts + (xy 60.96 198.12) (xy 66.04 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4fbb0d20-a3a5-4e66-ad2d-e62d74025865") + ) + (wire + (pts + (xy 21.59 220.98) (xy 25.4 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "500dc673-8733-47a7-b9f4-3b2ed9bd9aab") + ) + (wire + (pts + (xy 102.87 184.15) (xy 102.87 176.53) + ) + (stroke + (width 0) + (type default) + ) + (uuid "503924cb-3ad8-412e-976e-78940b6141ba") + ) + (polyline + (pts + (xy 116.84 52.07) (xy 116.84 58.42) + ) + (stroke + (width 1) + (type default) + (color 255 0 0 1) + ) + (uuid "50e722c6-11b7-45d4-a28f-9ae729656d58") + ) + (wire + (pts + (xy 237.49 143.51) (xy 237.49 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5107b046-5ea4-4fe6-bc72-1bd9c63e8535") + ) + (wire + (pts + (xy 229.87 215.9) (xy 237.49 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5126ea90-426d-488b-b38e-c79672e1f4e3") + ) + (wire + (pts + (xy 273.05 193.04) (xy 273.05 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "515883b6-9e3a-4e04-8b2d-e52202f1c144") + ) + (wire + (pts + (xy 389.89 62.23) (xy 387.35 62.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5283baad-a4a4-40ec-b8e4-b0d665a18c75") + ) + (wire + (pts + (xy 85.09 241.3) (xy 87.63 241.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "52c418b5-b145-40f6-aa67-ba10baa6e879") + ) + (wire + (pts + (xy 74.93 59.69) (xy 76.2 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "53a7cd7c-ccbc-4975-a8b0-38d201747701") + ) + (wire + (pts + (xy 222.25 241.3) (xy 226.06 241.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "545190c6-b33b-41de-b035-59a764a595c6") + ) + (polyline + (pts + (xy 195.58 149.86) (xy 195.58 284.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "54787d5c-825f-4747-9b9c-13f973a1db18") + ) + (wire + (pts + (xy 346.71 220.98) (xy 355.6 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "55afefe0-11bc-4451-b582-5de0afc905cc") + ) + (polyline + (pts + (xy 99.06 101.6) (xy 118.11 101.6) + ) + (stroke + (width 1) + (type default) + (color 255 0 0 1) + ) + (uuid "55d6556a-ef12-4585-a36d-cf517da3155c") + ) + (wire + (pts + (xy 346.71 238.76) (xy 356.87 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "566e6aeb-c7ad-4c04-ad60-355393d16d96") + ) + (wire + (pts + (xy 165.1 241.3) (xy 165.1 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5674405c-3ca4-46ae-b8b3-b9864e74dcc8") + ) + (wire + (pts + (xy 194.31 139.7) (xy 193.04 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5683176b-30cd-4110-bb07-957deededb0e") + ) + (wire + (pts + (xy 363.22 100.33) (xy 359.41 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "56f23462-7289-43c4-8b5b-708a13942eab") + ) + (wire + (pts + (xy 269.24 81.28) (xy 267.97 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "586678fc-1fc1-437c-9e55-4df9cd4cd72c") + ) + (wire + (pts + (xy 132.08 191.77) (xy 132.08 196.85) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5870826d-4abe-4c60-b15f-a8679698e4c9") + ) + (wire + (pts + (xy 287.02 234.95) (xy 284.48 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "58891225-0ded-4b70-81cc-2fa36d6ce470") + ) + (wire + (pts + (xy 238.76 256.54) (xy 266.7 256.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5962c37d-1dd1-4a21-a1f8-9738f9b266aa") + ) + (wire + (pts + (xy 40.64 182.88) (xy 53.34 182.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5994d0d9-0e75-48fd-b2c5-e4f0cca43a6a") + ) + (wire + (pts + (xy 110.49 181.61) (xy 111.76 181.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "59f9a438-a993-42ef-bcd0-31685edfb250") + ) + (wire + (pts + (xy 284.48 105.41) (xy 295.91 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5bce381b-1c2d-44e4-b13a-30e971ba23c7") + ) + (wire + (pts + (xy 15.24 259.08) (xy 15.24 251.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5bdbed19-81bc-4d06-838b-677ef2aa2f6f") + ) + (wire + (pts + (xy 365.76 246.38) (xy 370.84 246.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5c99e1ad-f2a6-42a4-819e-ff4566d46af6") + ) + (wire + (pts + (xy 237.49 215.9) (xy 237.49 219.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5ca646c6-57cf-4377-8d10-34cd2d4a1401") + ) + (wire + (pts + (xy 300.99 81.28) (xy 302.26 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5cc6fac4-09c5-4a3c-bc97-bc2432afac01") + ) + (wire + (pts + (xy 128.27 246.38) (xy 125.73 246.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5d271cc0-b7bd-4f37-bdd8-75c242f1fc32") + ) + (wire + (pts + (xy 328.93 66.04) (xy 351.79 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5d413ddb-ebe4-41c7-be24-7b27eb1c18d5") + ) + (wire + (pts + (xy 212.09 172.72) (xy 212.09 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5d468cd5-492e-492e-8efe-675e5e32602c") + ) + (wire + (pts + (xy 238.76 266.7) (xy 266.7 266.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5d4aad73-b4db-4f98-9220-62e251be4ea7") + ) + (wire + (pts + (xy 372.11 220.98) (xy 375.92 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5d584502-dd0c-4070-8253-e8656408c03d") + ) + (wire + (pts + (xy 306.07 247.65) (xy 306.07 245.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5e19676c-4cfb-4e20-943e-5be246c804de") + ) + (wire + (pts + (xy 226.06 241.3) (xy 226.06 242.57) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5e217520-b4f4-4733-8040-7a38dd9bb43b") + ) + (wire + (pts + (xy 60.96 193.04) (xy 64.77 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5e8230f0-e68e-475d-8b1b-540df7c7fadb") + ) + (wire + (pts + (xy 116.84 279.4) (xy 115.57 279.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5e9bf59c-9cd8-4ea1-b90a-a9769bcadfe5") + ) + (wire + (pts + (xy 306.07 218.44) (xy 304.8 218.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5f3970dd-6b6d-4776-b64c-6f80fa2fa75a") + ) + (wire + (pts + (xy 337.82 129.54) (xy 347.98 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5f95f598-238c-403a-91ea-1ff73a71f873") + ) + (wire + (pts + (xy 237.49 72.39) (xy 240.03 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5fb42a85-437b-4069-aae1-c1a222f6d8e7") + ) + (wire + (pts + (xy 175.26 276.86) (xy 176.53 276.86) + ) + (stroke + (width 0) + (type default) + ) + (uuid "602782c5-6b60-4123-9422-5e198eaa6914") + ) + (wire + (pts + (xy 148.59 220.98) (xy 151.13 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "60b91abe-c2c8-4e6b-95ae-5c53fb1d11ea") + ) + (wire + (pts + (xy 107.95 29.21) (xy 107.95 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "610745dc-198a-4738-979d-5b21e8cb6f1d") + ) + (polyline + (pts + (xy 273.05 129.54) (xy 273.05 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "611f5def-55a5-442e-8090-054a747e9ffd") + ) + (wire + (pts + (xy 69.85 217.17) (xy 69.85 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "61ec9658-8c0b-4260-aee7-c7bfa8d2c185") + ) + (wire + (pts + (xy 143.51 276.86) (xy 162.56 276.86) + ) + (stroke + (width 0) + (type default) + ) + (uuid "62ea250b-1978-41f7-9b8f-4c17c279caab") + ) + (polyline + (pts + (xy 364.49 74.93) (xy 364.49 110.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "635b0ab1-86c8-49b6-9c46-0a8e4bd0f62a") + ) + (wire + (pts + (xy 85.09 246.38) (xy 87.63 246.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "643a4cb1-007c-4822-a9a4-d95a7a9e687e") + ) + (wire + (pts + (xy 297.18 162.56) (xy 279.4 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "648efa80-c1d8-4afc-aa5f-fcad59de147f") + ) + (wire + (pts + (xy 151.13 57.15) (xy 149.86 57.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "64b32d6e-b6fd-4903-a76d-482ac1d74bd1") + ) + (wire + (pts + (xy 267.97 91.44) (xy 269.24 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "64fbd8b8-296b-48ef-9726-78ab934bb9c1") + ) + (wire + (pts + (xy 303.53 247.65) (xy 304.8 247.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "667e2ff5-1f2b-4177-b02f-7c9de9b87679") + ) + (wire + (pts + (xy 176.53 271.78) (xy 175.26 271.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "669e6087-7df9-4008-bad9-f1497c214b50") + ) + (wire + (pts + (xy 287.02 41.91) (xy 287.02 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "66d3f55a-16fa-4c45-8266-c20d7c6d8311") + ) + (wire + (pts + (xy 293.37 234.95) (xy 292.1 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "67126fcf-1934-4327-984a-afc5be88a399") + ) + (wire + (pts + (xy 287.02 102.87) (xy 302.26 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "67aeaaa0-ca09-4748-bb0e-5db708c663df") + ) + (wire + (pts + (xy 349.25 199.39) (xy 346.71 199.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "67d8755b-5834-485b-acf5-85412601402b") + ) + (wire + (pts + (xy 222.25 172.72) (xy 212.09 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6888cfff-42ec-4c4f-86fc-1d52b8f00ead") + ) + (wire + (pts + (xy 157.48 271.78) (xy 162.56 271.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6901c518-f02e-4d8c-a807-e3ac0673401a") + ) + (wire + (pts + (xy 105.41 24.13) (xy 107.95 24.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "699afad9-18b1-4bfc-af54-fa07fd65de11") + ) + (wire + (pts + (xy 234.95 67.31) (xy 234.95 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "69ab3137-32de-40fe-98ce-6faad629d78b") + ) + (polyline + (pts + (xy 370.84 160.02) (xy 356.87 163.83) + ) + (stroke + (width 1) + (type default) + (color 0 255 0 1) + ) + (uuid "69ef1b76-aecf-42a5-925f-213aa81e1667") + ) + (polyline + (pts + (xy 356.87 163.83) (xy 370.84 153.67) + ) + (stroke + (width 0.5) + (type default) + (color 255 153 0 1) + ) + (uuid "6a259d8f-a039-46d2-ae03-9eacc09a712a") + ) + (wire + (pts + (xy 102.87 186.69) (xy 102.87 199.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6ae273f5-52cf-4ba1-b08d-d544c1afded3") + ) + (wire + (pts + (xy 387.35 67.31) (xy 389.89 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6b91a574-6b68-4529-852c-af6d8c032ef2") + ) + (wire + (pts + (xy 78.74 261.62) (xy 78.74 233.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6b9a4c52-eefc-4528-939c-e9b74e4c1cec") + ) + (wire + (pts + (xy 302.26 81.28) (xy 302.26 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6bd0a7bb-d5af-4ba7-9da5-883552670e12") + ) + (wire + (pts + (xy 81.28 52.07) (xy 85.09 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6c4aa989-5bac-478d-b23a-a5b017bbbd4a") + ) + (wire + (pts + (xy 83.82 248.92) (xy 87.63 248.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6c4ccf1b-787f-4373-aa9e-576115b04b14") + ) + (wire + (pts + (xy 128.27 118.11) (xy 139.7 118.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6c9e7d17-f967-4ddb-a8e2-b4ebe06fe8fb") + ) + (wire + (pts + (xy 256.54 172.72) (xy 256.54 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6ca64f1a-be68-4ec3-8f52-291b8aad1fa9") + ) + (polyline + (pts + (xy 116.84 27.94) (xy 116.84 45.72) + ) + (stroke + (width 1) + (type default) + (color 255 0 0 1) + ) + (uuid "6ddf7502-ae69-40ec-abba-1e3e285fd433") + ) + (wire + (pts + (xy 302.26 63.5) (xy 302.26 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6e00f2ab-cca2-4829-9f7e-62b77f242568") + ) + (wire + (pts + (xy 182.88 222.25) (xy 175.26 222.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6e31312c-acb2-4799-a3dd-c643f32cc2e2") + ) + (polyline + (pts + (xy 356.87 148.59) (xy 370.84 158.75) + ) + (stroke + (width 0.5) + (type default) + (color 255 0 255 1) + ) + (uuid "6e450be5-6272-417e-a8c4-9aab3cb54547") + ) + (wire + (pts + (xy 190.5 231.14) (xy 190.5 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6e6cb42a-643e-4ebf-b212-2d95f7a28ee8") + ) + (wire + (pts + (xy 328.93 52.07) (xy 328.93 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6f2074d4-2b00-43ee-a4fd-83ac590ca6b6") + ) + (wire + (pts + (xy 132.08 168.91) (xy 148.59 168.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6f602eb0-5388-4f53-9eaa-668280b34663") + ) + (wire + (pts + (xy 25.4 267.97) (xy 24.13 267.97) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6f811050-93c8-4e43-bce4-5b85f21f8387") + ) + (wire + (pts + (xy 289.56 73.66) (xy 289.56 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "70371f5d-eb88-4896-943a-78a4213d6c7e") + ) + (wire + (pts + (xy 283.21 41.91) (xy 287.02 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7066e4f7-9a97-44c2-b5cc-cdcc5e1102f7") + ) + (wire + (pts + (xy 187.96 54.61) (xy 180.34 54.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7078cbd1-506b-4274-aa76-30f0375cb670") + ) + (wire + (pts + (xy 78.74 233.68) (xy 87.63 233.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "71188d20-e534-4529-ac8d-c8fcccd50885") + ) + (wire + (pts + (xy 289.56 52.07) (xy 290.83 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "71373e1f-7860-415c-83a9-9be7976260c8") + ) + (wire + (pts + (xy 100.33 273.05) (xy 115.57 273.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "72274241-0740-4e01-a54e-d551c777769c") + ) + (wire + (pts + (xy 60.96 238.76) (xy 74.93 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "723026d7-a9fe-4bab-88ef-3a3d78ef8f69") + ) + (wire + (pts + (xy 284.48 99.06) (xy 284.48 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "72367cd3-149c-413d-81d1-a9ce574d2f42") + ) + (wire + (pts + (xy 60.96 187.96) (xy 63.5 187.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "726b7b98-8d41-4ff2-b22f-ac75ca8eb30d") + ) + (wire + (pts + (xy 60.96 220.98) (xy 62.23 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "726ff31b-f859-409c-8c08-ed3b66ea21ea") + ) + (wire + (pts + (xy 293.37 237.49) (xy 292.1 237.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "72bfa4ad-1de8-46db-b154-865b054d05f1") + ) + (wire + (pts + (xy 355.6 220.98) (xy 356.87 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "735a1471-5f0a-49ee-9157-b2675c90ef77") + ) + (polyline + (pts + (xy 151.13 59.69) (xy 142.24 59.69) + ) + (stroke + (width 1) + (type default) + (color 0 255 0 1) + ) + (uuid "737acc2e-3424-4bbc-8f40-04c3d3f95f07") + ) + (wire + (pts + (xy 95.25 186.69) (xy 102.87 186.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "738bba8b-89b3-49dd-9eca-fd28ffaedc36") + ) + (wire + (pts + (xy 182.88 231.14) (xy 182.88 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "73a5f76c-946a-4195-9b8d-f2ab5715df37") + ) + (wire + (pts + (xy 351.79 66.04) (xy 359.41 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "73d6fb28-72ef-464c-ac07-e8e4dc676762") + ) + (wire + (pts + (xy 260.35 72.39) (xy 279.4 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "748e4973-139b-4853-99ed-7fd393b07fc0") + ) + (wire + (pts + (xy 289.56 100.33) (xy 308.61 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "74baa529-9eb9-44ec-bc2b-3fed7bd9c557") + ) + (wire + (pts + (xy 332.74 41.91) (xy 332.74 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "74fe486e-ec30-4601-875c-93d3905e97d4") + ) + (wire + (pts + (xy 66.04 186.69) (xy 69.85 186.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "751706d5-12f1-41d6-9045-e4201241874d") + ) + (wire + (pts + (xy 127 24.13) (xy 151.13 24.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "75194573-c469-428a-a350-cd779b8bce18") + ) + (wire + (pts + (xy 132.08 201.93) (xy 148.59 201.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "752c911f-37c4-4635-800c-2f63573bb827") + ) + (wire + (pts + (xy 267.97 81.28) (xy 267.97 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "75beea2f-2bba-452a-bda6-b17e2ca643db") + ) + (wire + (pts + (xy 16.51 234.95) (xy 21.59 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "75ebf06b-818e-437f-ae96-e7d5c819ac27") + ) + (wire + (pts + (xy 306.07 41.91) (xy 309.88 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "75f3c624-1b79-4f75-8944-2dab55a96fc9") + ) + (wire + (pts + (xy 95.25 176.53) (xy 97.79 176.53) + ) + (stroke + (width 0) + (type default) + ) + (uuid "76018015-9676-4f71-80cf-8e12538b4dc2") + ) + (wire + (pts + (xy 160.02 29.21) (xy 149.86 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "76f03833-f845-4c23-bc1f-a615da1cd1fb") + ) + (wire + (pts + (xy 375.92 220.98) (xy 387.35 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7719cf79-6feb-45ed-9d98-07c4487cfc66") + ) + (wire + (pts + (xy 161.29 168.91) (xy 163.83 168.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "77388019-6163-4ffd-8bc8-8a14f1ab9c05") + ) + (wire + (pts + (xy 341.63 199.39) (xy 346.71 199.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "77b4c887-79a7-4523-a963-e0ede3b67769") + ) + (wire + (pts + (xy 223.52 256.54) (xy 223.52 259.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7812ad08-f831-4398-9a9b-c5c1215f2ad3") + ) + (wire + (pts + (xy 67.31 176.53) (xy 67.31 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "78b70322-438c-4619-8809-16fe519ea1e9") + ) + (wire + (pts + (xy 292.1 234.95) (xy 287.02 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "792d9127-548c-44b1-bc01-9bb2a5d0ec19") + ) + (wire + (pts + (xy 101.6 173.99) (xy 111.76 173.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7962ec12-1aec-42eb-82e7-c507028abf67") + ) + (wire + (pts + (xy 115.57 24.13) (xy 127 24.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "796a7c15-6748-42ee-a77b-7ce07f04a047") + ) + (wire + (pts + (xy 304.8 167.64) (xy 309.88 167.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "79982279-c2e3-44c6-9a3f-68bc06566269") + ) + (wire + (pts + (xy 332.74 80.01) (xy 344.17 80.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7af7fa52-5c30-4a7d-8f05-bc4730374a01") + ) + (wire + (pts + (xy 273.05 213.36) (xy 281.94 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7c8c781b-b961-412f-980f-c7557a8c542f") + ) + (wire + (pts + (xy 281.94 167.64) (xy 281.94 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7ca30baa-945c-4f72-80f1-a30ad34c2245") + ) + (polyline + (pts + (xy 307.34 69.85) (xy 307.34 86.36) + ) + (stroke + (width 1) + (type default) + (color 255 0 0 1) + ) + (uuid "7d7f599c-d4bd-4885-b27e-db7130d60001") + ) + (wire + (pts + (xy 175.26 215.9) (xy 170.18 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7dbe1da6-e019-4a7e-9bfb-3846c5d3d99e") + ) + (wire + (pts + (xy 66.04 198.12) (xy 66.04 194.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7e0ba9ad-282e-4780-b0a6-e8e925b4bcfb") + ) + (wire + (pts + (xy 185.42 59.69) (xy 185.42 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7e685828-fc30-4bcf-ad2e-e6454d59e24d") + ) + (wire + (pts + (xy 182.88 222.25) (xy 182.88 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7e9c1091-e2c6-4d24-a332-3f7ffbdaece4") + ) + (wire + (pts + (xy 110.49 217.17) (xy 110.49 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7f6be57a-0334-4c46-aad1-2433238d49e6") + ) + (wire + (pts + (xy 85.09 241.3) (xy 85.09 246.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "803e0fc2-1b62-4c27-b88e-d9fd83c013c5") + ) + (wire + (pts + (xy 355.6 199.39) (xy 356.87 199.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "806a8999-3873-4690-939c-46d0ca97f350") + ) + (wire + (pts + (xy 300.99 86.36) (xy 302.26 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8070cba6-814b-46b9-972f-2bed35bb65d8") + ) + (wire + (pts + (xy 273.05 157.48) (xy 273.05 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "809224c2-9213-40b3-ac9a-125bb48cb7bc") + ) + (wire + (pts + (xy 83.82 26.67) (xy 85.09 26.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "80a84206-dcbf-429b-a910-c029a699704d") + ) + (wire + (pts + (xy 39.37 213.36) (xy 43.18 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "80d148eb-2c22-471e-a938-319eb7368d3e") + ) + (wire + (pts + (xy 33.02 100.33) (xy 50.8 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "81477e28-605a-4b69-bf80-18fc81d3232c") + ) + (wire + (pts + (xy 83.82 91.44) (xy 85.09 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "821bcd80-324c-4618-9c50-4a0ef7d99ee7") + ) + (polyline + (pts + (xy 85.09 69.85) (xy 67.31 69.85) + ) + (stroke + (width 1) + (type default) + (color 255 0 0 1) + ) + (uuid "84c7c5ed-6a52-4698-b0af-62fd44bc5f50") + ) + (wire + (pts + (xy 64.77 226.06) (xy 64.77 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "85cde928-38bd-48c4-b8c5-bc22081440db") + ) + (polyline + (pts + (xy 127 31.75) (xy 127 36.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "874825f7-14ae-416a-a63d-49c100ee11ae") + ) + (polyline + (pts + (xy 173.99 139.7) (xy 175.26 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "878298f1-dace-4e43-902f-ed624425beaf") + ) + (wire + (pts + (xy 63.5 187.96) (xy 64.77 187.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "88179145-9eca-4e23-a367-7dd1eb707957") + ) + (polyline + (pts + (xy 367.03 151.13) (xy 367.03 161.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "88238528-5ea8-43ea-9152-27885b465c25") + ) + (wire + (pts + (xy 107.95 236.22) (xy 128.27 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "89abdde3-8346-448f-8245-a898a2b49c0b") + ) + (wire + (pts + (xy 123.19 91.44) (xy 123.19 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8a837137-bde8-4230-ad26-9edeeef1afc8") + ) + (wire + (pts + (xy 99.06 168.91) (xy 111.76 168.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8b41e15f-4e8d-4695-88ce-a5c2de5932e5") + ) + (wire + (pts + (xy 95.25 196.85) (xy 97.79 196.85) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8b5b1411-84af-4646-8c33-e87595faa280") + ) + (wire + (pts + (xy 232.41 40.64) (xy 234.95 40.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8b640500-8105-4c86-93f5-267520661909") + ) + (wire + (pts + (xy 245.11 172.72) (xy 251.46 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8c2fd42e-089e-4813-b5be-c434b8603262") + ) + (wire + (pts + (xy 284.48 234.95) (xy 284.48 218.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8c317d7d-d692-4040-a910-c254f420a386") + ) + (wire + (pts + (xy 252.73 67.31) (xy 252.73 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8cc80a9d-6ef4-4b58-a4c1-ad598dcf9953") + ) + (wire + (pts + (xy 60.96 226.06) (xy 64.77 226.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8d622ed7-8a09-48d6-9f80-ef2079e67175") + ) + (wire + (pts + (xy 106.68 82.55) (xy 106.68 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8d8058e8-b73e-4533-9a80-b019c23d876a") + ) + (wire + (pts + (xy 33.02 269.24) (xy 43.18 269.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8dceb4e4-e45e-4c29-8e2c-eb50149ce8ca") + ) + (wire + (pts + (xy 302.26 116.84) (xy 302.26 118.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8e56d517-76b0-4f37-9196-d4c0b12f6bc7") + ) + (wire + (pts + (xy 85.09 236.22) (xy 85.09 241.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8e903221-2477-475f-86ec-9917e1463468") + ) + (wire + (pts + (xy 204.47 40.64) (xy 185.42 40.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8ef58f4a-862d-46af-a228-2ef0ecbdfdfb") + ) + (wire + (pts + (xy 72.39 283.21) (xy 72.39 246.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8f089280-47ba-4c00-b070-7cbdcb7db226") + ) + (wire + (pts + (xy 289.56 72.39) (xy 287.02 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8f125e8d-e33a-4d03-99a3-0b33b755ba6e") + ) + (wire + (pts + (xy 344.17 80.01) (xy 344.17 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8f9a62f6-dfe2-496e-a071-d8106a7702c5") + ) + (wire + (pts + (xy 306.07 66.04) (xy 328.93 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8fe123e2-a3c8-42a2-9417-7286bfab00aa") + ) + (polyline + (pts + (xy 57.15 59.69) (xy 68.58 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8ffdb2f2-7122-418b-91fb-a867e9f0b236") + ) + (wire + (pts + (xy 139.7 157.48) (xy 139.7 154.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "902ebb79-923e-41e2-b6b1-a23929528b12") + ) + (wire + (pts + (xy 82.55 217.17) (xy 69.85 217.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "907b8634-9f9d-4100-a08d-f40d93e76e8c") + ) + (polyline + (pts + (xy 105.41 27.94) (xy 116.84 27.94) + ) + (stroke + (width 1) + (type default) + (color 255 0 0 1) + ) + (uuid "909a2777-1b47-4a34-a432-9905c0284467") + ) + (wire + (pts + (xy 270.51 262.89) (xy 273.05 262.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "909f1fa8-c3b3-48d9-9e3c-5414dcdf387c") + ) + (wire + (pts + (xy 109.22 82.55) (xy 106.68 82.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "90b11655-9dad-46d3-903b-6c7bbdd1da74") + ) + (polyline + (pts + (xy 203.2 148.59) (xy 203.2 175.26) + ) + (stroke + (width 1) + (type default) + (color 255 0 0 1) + ) + (uuid "91454aaa-4d2a-460c-87b7-209e7ee3bf13") + ) + (wire + (pts + (xy 77.47 269.24) (xy 77.47 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "914d218a-75f0-47bd-a6d1-a2a1d8be3ca9") + ) + (wire + (pts + (xy 148.59 238.76) (xy 190.5 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "91673951-6812-4777-bf8b-c17e0f3a5788") + ) + (wire + (pts + (xy 69.85 176.53) (xy 67.31 176.53) + ) + (stroke + (width 0) + (type default) + ) + (uuid "91b0a5c0-9533-4f4c-b785-7bc03db824f1") + ) + (wire + (pts + (xy 346.71 199.39) (xy 346.71 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "91cc2cbb-0fa7-43f7-a6eb-79e0e3681a43") + ) + (polyline + (pts + (xy 209.55 127) (xy 264.16 127) + ) + (stroke + (width 1) + (type default) + (color 255 0 0 1) + ) + (uuid "9217aad4-9186-4aaf-b2f6-3af91cfb374d") + ) + (polyline + (pts + (xy 364.49 110.49) (xy 313.69 110.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "921e39d9-1e6d-44d3-bb82-5a971a575f11") + ) + (wire + (pts + (xy 95.25 184.15) (xy 102.87 184.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "92261000-2cd2-4265-8469-603247ce1c3f") + ) + (wire + (pts + (xy 237.49 86.36) (xy 243.84 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9263e414-18f1-40b8-85a7-963216988d59") + ) + (wire + (pts + (xy 162.56 199.39) (xy 162.56 201.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "93ff2acf-78d1-4f5c-8428-b539b2409606") + ) + (polyline + (pts + (xy 180.34 104.14) (xy 191.77 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "943e7f70-8d67-43fa-89a5-19ba0bf38570") + ) + (wire + (pts + (xy 212.09 172.72) (xy 212.09 143.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "94c1f1a1-7ef1-471e-b985-6c292898be73") + ) + (wire + (pts + (xy 43.18 212.09) (xy 43.18 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "94f5fe6d-a091-4c56-a6ba-8703cc2b651b") + ) + (polyline + (pts + (xy 142.24 44.45) (xy 142.24 59.69) + ) + (stroke + (width 1) + (type default) + (color 0 255 0 1) + ) + (uuid "9580db4d-acf4-4e94-b66a-a81a04d75e9e") + ) + (wire + (pts + (xy 229.87 215.9) (xy 229.87 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "95beb42a-c10e-4be8-9d51-d469923ab08c") + ) + (wire + (pts + (xy 62.23 93.98) (xy 63.5 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "97196674-6ee3-44f9-92e1-079fda2e9ac7") + ) + (wire + (pts + (xy 229.87 220.98) (xy 229.87 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "977c7e5b-0b22-4be2-81ff-243499b46c8a") + ) + (wire + (pts + (xy 25.4 273.05) (xy 22.86 273.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "97954f08-250e-4be3-a710-a92ef21984b3") + ) + (wire + (pts + (xy 267.97 86.36) (xy 269.24 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "98029c40-d41a-480e-bab7-d75b11f2e64d") + ) + (wire + (pts + (xy 170.18 222.25) (xy 167.64 222.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9810f478-ed29-449e-abeb-8743a5106bcb") + ) + (polyline + (pts + (xy 123.19 99.06) (xy 123.19 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "986563bd-e7b4-4934-8493-be37ccc0aeab") + ) + (wire + (pts + (xy 74.93 260.35) (xy 111.76 260.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9867f95e-1ac5-43ab-b71f-b266ebfb4b71") + ) + (wire + (pts + (xy 212.09 213.36) (xy 212.09 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "989255b8-944f-4fdf-b0bf-cd526308364b") + ) + (wire + (pts + (xy 125.73 246.38) (xy 125.73 248.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "98953a30-2756-4674-8552-d753b0b6c173") + ) + (wire + (pts + (xy 190.5 222.25) (xy 182.88 222.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "98ff9e1d-fcf2-4e62-839a-13eb797d3916") + ) + (wire + (pts + (xy 109.22 82.55) (xy 109.22 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9931277a-43ac-40bf-b2ea-9478113b711d") + ) + (wire + (pts + (xy 62.23 182.88) (xy 62.23 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "99c4871d-6de9-4709-99c7-19fcd7862c9f") + ) + (polyline + (pts + (xy 372.11 151.13) (xy 389.89 152.4) + ) + (stroke + (width 0.5) + (type default) + (color 255 153 0 1) + ) + (uuid "9a5cca66-0b47-4b16-8259-b870aa3316aa") + ) + (wire + (pts + (xy 115.57 271.78) (xy 133.35 271.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9a7cdb82-57c9-4eb8-85c6-6d1b49b2f293") + ) + (wire + (pts + (xy 83.82 96.52) (xy 85.09 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9ae3f48c-a021-49a4-b219-1a001a6de887") + ) + (wire + (pts + (xy 191.77 134.62) (xy 191.77 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9b84732d-7f71-4c48-b21f-a66b168f2df8") + ) + (wire + (pts + (xy 273.05 251.46) (xy 273.05 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9b9bebb0-b4aa-476a-9641-d2d34d93d9a4") + ) + (wire + (pts + (xy 254 171.45) (xy 254 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9c05b11d-2213-4583-bca7-32ac4d38d49f") + ) + (wire + (pts + (xy 256.54 215.9) (xy 256.54 214.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9c6b9742-813c-4b0e-9f91-9e7fd5ce45d4") + ) + (wire + (pts + (xy 347.98 128.27) (xy 356.87 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9d14c0a2-efa0-4c23-adef-0eff0510b54d") + ) + (polyline + (pts + (xy 173.99 107.95) (xy 173.99 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9d14dcf3-0385-4735-ae18-4a0b3295c678") + ) + (wire + (pts + (xy 21.59 243.84) (xy 25.4 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9d5c4bd7-81a4-4f28-8c38-e5a0def61858") + ) + (wire + (pts + (xy 100.33 191.77) (xy 100.33 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9d789884-3736-4360-a099-8b5e40665586") + ) + (polyline + (pts + (xy 370.84 152.4) (xy 356.87 148.59) + ) + (stroke + (width 1) + (type default) + (color 0 0 255 1) + ) + (uuid "9daae050-e8ab-451b-b5eb-a419733db16a") + ) + (wire + (pts + (xy 60.96 243.84) (xy 73.66 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9dc95a43-ce85-4213-95e0-6cc7d1f3777d") + ) + (wire + (pts + (xy 13.97 251.46) (xy 15.24 251.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9e56065b-c23b-4224-a652-3d2bf9debdc0") + ) + (wire + (pts + (xy 50.8 100.33) (xy 50.8 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9f245d3c-6d5d-4106-8a94-61bda618e87e") + ) + (wire + (pts + (xy 222.25 189.23) (xy 222.25 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9f2de9c9-c796-4a69-8b4c-2acd2fce76cc") + ) + (wire + (pts + (xy 66.04 182.88) (xy 66.04 186.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9f6ee202-5bb4-400e-911c-a968716c8e4f") + ) + (wire + (pts + (xy 180.34 34.29) (xy 185.42 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9f7df9e2-931f-491b-9beb-3fc3e4fe8314") + ) + (wire + (pts + (xy 21.59 278.13) (xy 21.59 261.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a0398997-097b-4ef4-8af1-4e94c3976c68") + ) + (wire + (pts + (xy 226.06 198.12) (xy 229.87 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a06b8871-1d2c-46cd-a8e0-404d07612fbc") + ) + (polyline + (pts + (xy 12.7 149.86) (xy 195.58 149.86) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a09edd56-65a3-4a43-9487-f1710b6516c7") + ) + (wire + (pts + (xy 222.25 198.12) (xy 226.06 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a2441812-8e8b-409a-b10c-38588195731e") + ) + (wire + (pts + (xy 21.59 261.62) (xy 25.4 261.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a295c155-bb29-4bc2-aff9-e10aadf69fb0") + ) + (wire + (pts + (xy 139.7 128.27) (xy 139.7 134.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a3092a66-a243-4b78-8412-434da4123aa6") + ) + (wire + (pts + (xy 302.26 99.06) (xy 316.23 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a32ebbd3-2d10-451a-9c13-02f46f26a9c9") + ) + (wire + (pts + (xy 237.49 72.39) (xy 237.49 78.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a3477a7c-0a99-4a32-934a-4d0f880d60ae") + ) + (wire + (pts + (xy 132.08 207.01) (xy 148.59 207.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a3f4ecf8-ae74-46c1-9a15-02865892dc9e") + ) + (wire + (pts + (xy 95.25 181.61) (xy 101.6 181.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a436d6dc-44bd-4654-9ad0-4fb37198ffed") + ) + (wire + (pts + (xy 259.08 234.95) (xy 259.08 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a43e84e7-c409-41fc-905b-abfa6a73044e") + ) + (wire + (pts + (xy 95.25 179.07) (xy 100.33 179.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a4ff42f2-e17d-4627-bfa4-13567560e28c") + ) + (polyline + (pts + (xy 222.25 62.23) (xy 262.89 62.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a5e66c87-7149-4b40-a64c-e4e4f05e6b41") + ) + (wire + (pts + (xy 372.11 199.39) (xy 375.92 199.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a60ea8e8-0c96-4d3d-ae93-a78aee86a073") + ) + (polyline + (pts + (xy 389.89 161.29) (xy 397.51 156.21) + ) + (stroke + (width 0.5) + (type default) + (color 255 0 255 1) + ) + (uuid "a6753832-1c84-49a6-8934-99cffcd7a7d0") + ) + (wire + (pts + (xy 212.09 143.51) (xy 222.25 143.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a6a8ba36-c7f5-403f-9249-6a9ca4164fd3") + ) + (wire + (pts + (xy 231.14 153.67) (xy 237.49 153.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a9e7245d-2e3d-449f-8696-88618f0be619") + ) + (wire + (pts + (xy 302.26 63.5) (xy 309.88 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aa3660ab-e4ed-40af-a33e-076d05a4046b") + ) + (wire + (pts + (xy 229.87 177.8) (xy 229.87 181.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aa422a12-0b88-4ba3-9edd-0c978c323c1b") + ) + (wire + (pts + (xy 194.31 134.62) (xy 191.77 134.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aa555c75-eb92-4ff9-8c43-b6cbab4a07f8") + ) + (wire + (pts + (xy 26.67 86.36) (xy 33.02 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aa79a95c-b59a-46f3-8c33-4c4f91131025") + ) + (wire + (pts + (xy 22.86 259.08) (xy 25.4 259.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aaab4366-07f3-4525-a4d4-4eedaa3ec665") + ) + (wire + (pts + (xy 283.21 52.07) (xy 283.21 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aad8df6b-ee9e-4755-86f8-0f2816689e7d") + ) + (wire + (pts + (xy 125.73 248.92) (xy 128.27 248.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aaeea02d-0143-41fa-8956-04198a538449") + ) + (wire + (pts + (xy 77.47 31.75) (xy 77.47 54.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aaf31c6b-da44-4467-9d38-1c361a122b2d") + ) + (polyline + (pts + (xy 162.56 104.14) (xy 173.99 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ab1549b2-e88a-43b4-9373-4abec5936ae2") + ) + (wire + (pts + (xy 63.5 166.37) (xy 63.5 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "abb26fb1-8505-48f9-b181-755ced097f90") + ) + (wire + (pts + (xy 125.73 88.9) (xy 125.73 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ac0c52d4-beb2-4a4d-9743-a9cb0d283a86") + ) + (polyline + (pts + (xy 57.15 62.23) (xy 57.15 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ac7b4942-7796-43b3-9d0e-1345d350b2d1") + ) + (wire + (pts + (xy 387.35 62.23) (xy 387.35 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "acce0606-21e0-4c19-b35d-800176c0942a") + ) + (wire + (pts + (xy 132.08 269.24) (xy 132.08 261.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ad3bea0b-778e-4048-bafb-b36f0266b544") + ) + (wire + (pts + (xy 175.26 222.25) (xy 170.18 222.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ad3c1190-3f50-4ec5-8aa1-1f0a31ab7240") + ) + (wire + (pts + (xy 337.82 119.38) (xy 347.98 119.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "adb7f264-8006-4431-bf01-13e056d331e9") + ) + (wire + (pts + (xy 250.19 72.39) (xy 250.19 78.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "adf1b66e-ae00-4882-b60d-3583a87eb99b") + ) + (wire + (pts + (xy 87.63 236.22) (xy 85.09 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ae3b4b08-0db4-4ccd-b535-add5c41e71c3") + ) + (polyline + (pts + (xy 374.65 151.13) (xy 374.65 161.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aea1a33c-e7a6-4d8b-b51c-c39cf46de89d") + ) + (wire + (pts + (xy 15.24 251.46) (xy 16.51 251.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aea874ed-d4c6-47b2-ab52-af3cf2ea3db8") + ) + (wire + (pts + (xy 107.95 231.14) (xy 128.27 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aef0fe6b-a5e7-4aea-a20b-55601e2d779c") + ) + (wire + (pts + (xy 302.26 99.06) (xy 302.26 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "af6c0f39-14bb-4679-8981-a9b3303c507b") + ) + (wire + (pts + (xy 302.26 86.36) (xy 302.26 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "af79ab68-f9d6-4e04-8247-a98b14cde529") + ) + (wire + (pts + (xy 193.04 26.67) (xy 194.31 26.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "af88d0f1-b46a-4666-9c74-dd79d503d128") + ) + (wire + (pts + (xy 234.95 54.61) (xy 187.96 54.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "afb32af2-46a4-4a32-92e7-fe21579bed95") + ) + (polyline + (pts + (xy 325.12 182.88) (xy 407.67 182.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "afe750da-2b3e-45bf-aabe-8200a5421e16") + ) + (wire + (pts + (xy 60.96 86.36) (xy 63.5 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b025d751-9f0d-47ed-b6a4-32713c9f85c9") + ) + (wire + (pts + (xy 375.92 238.76) (xy 393.7 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b07e87f9-3814-4923-93ec-a2a89edc9081") + ) + (wire + (pts + (xy 304.8 193.04) (xy 304.8 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b09b4146-e8bc-4a4b-abd9-385472fdf5cf") + ) + (wire + (pts + (xy 229.87 189.23) (xy 229.87 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b0b03454-cf5a-4494-b0a4-5595b5bdc436") + ) + (wire + (pts + (xy 212.09 256.54) (xy 212.09 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b0e84ce1-21fe-4183-b5eb-c1963134fad2") + ) + (wire + (pts + (xy 273.05 210.82) (xy 279.4 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b0f582ea-28d6-47ce-bf5b-bf7cda0ef36a") + ) + (wire + (pts + (xy 66.04 194.31) (xy 69.85 194.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b25197a2-41cb-43c9-a217-f0123b87408c") + ) + (wire + (pts + (xy 375.92 199.39) (xy 393.7 199.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b2fc057d-93b4-448c-a4cc-fd8f29fe2195") + ) + (polyline + (pts + (xy 407.67 252.73) (xy 325.12 252.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b34bd3c7-b3a4-4c5b-acde-59f2a714c488") + ) + (wire + (pts + (xy 281.94 72.39) (xy 281.94 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b34c761d-10f9-43cf-a738-93b08d42460f") + ) + (wire + (pts + (xy 176.53 279.4) (xy 175.26 279.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b484c007-c066-4e52-b21f-3b25add2caa1") + ) + (wire + (pts + (xy 100.33 171.45) (xy 111.76 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b4c47b93-7c10-48f1-9da3-a6dfa5510e17") + ) + (wire + (pts + (xy 101.6 201.93) (xy 111.76 201.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b4e1a201-bffe-4370-a042-9ac7a6e7cfbf") + ) + (wire + (pts + (xy 332.74 82.55) (xy 332.74 80.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b50216c0-89cb-401d-ae9e-7d454a8f74dc") + ) + (polyline + (pts + (xy 105.41 58.42) (xy 116.84 58.42) + ) + (stroke + (width 1) + (type default) + (color 255 0 0 1) + ) + (uuid "b57ea0f5-02e6-45ec-b47b-d052c7c239b0") + ) + (wire + (pts + (xy 287.02 72.39) (xy 287.02 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b5b6f0a0-238c-4808-9873-806a55816f1a") + ) + (wire + (pts + (xy 40.64 193.04) (xy 53.34 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b5d005ac-c698-46d9-af0c-331c3c3dbf5b") + ) + (wire + (pts + (xy 13.97 261.62) (xy 13.97 251.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b6b7134f-0d7f-4506-b19b-16767b020901") + ) + (wire + (pts + (xy 273.05 236.22) (xy 273.05 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b6c54134-f97b-4af6-8c4e-70822051c68f") + ) + (wire + (pts + (xy 24.13 256.54) (xy 25.4 256.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b77de244-8835-4c3d-b4fb-b8efaedbbba7") + ) + (wire + (pts + (xy 82.55 241.3) (xy 82.55 242.57) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b7a3a6ee-275a-408b-abff-c4bccd2486bf") + ) + (wire + (pts + (xy 16.51 256.54) (xy 16.51 251.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b7bea89e-e1c3-48e4-90cc-3e04c689a64f") + ) + (wire + (pts + (xy 234.95 40.64) (xy 234.95 54.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b8806cd2-9b67-462a-90c7-9832e9575fe6") + ) + (wire + (pts + (xy 22.86 273.05) (xy 22.86 259.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b9631118-2ead-4647-8a79-0bbff3f29b94") + ) + (polyline + (pts + (xy 171.45 148.59) (xy 203.2 148.59) + ) + (stroke + (width 1) + (type default) + (color 255 0 0 1) + ) + (uuid "ba69e3b7-edbd-4fbd-a9bf-b7092e906f68") + ) + (wire + (pts + (xy 308.61 100.33) (xy 308.61 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "baa1404c-6579-4cb3-a089-e5f1b5e27d9e") + ) + (wire + (pts + (xy 152.4 104.14) (xy 152.4 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bae6c4fd-bab8-4f66-88a8-e72e56f0f1b7") + ) + (polyline + (pts + (xy 118.11 101.6) (xy 118.11 129.54) + ) + (stroke + (width 1) + (type default) + (color 255 0 0 1) + ) + (uuid "bb604b76-5c70-4837-b58d-c787e7bd4ede") + ) + (wire + (pts + (xy 381 207.01) (xy 393.7 207.01) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bb7fb7f7-c38e-415c-8dbc-69bd4dcd4c11") + ) + (wire + (pts + (xy 306.07 215.9) (xy 304.8 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bb836777-6ea2-485a-ad29-d3994148e596") + ) + (wire + (pts + (xy 267.97 88.9) (xy 269.24 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bbbcf587-6d6f-4a6a-af88-facb2358ac5e") + ) + (wire + (pts + (xy 63.5 223.52) (xy 63.5 187.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bbc050ee-538a-4033-917e-c33d41c1862e") + ) + (wire + (pts + (xy 166.37 115.57) (xy 166.37 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bbeb3577-b2cc-44b9-a7a7-31984f5f5ad9") + ) + (wire + (pts + (xy 85.09 34.29) (xy 81.28 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bc0e402c-9885-4139-80de-b05ac29f3275") + ) + (wire + (pts + (xy 222.25 232.41) (xy 222.25 233.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bc810260-3cf1-4dcc-80dd-251e4d07f7cf") + ) + (polyline + (pts + (xy 389.89 151.13) (xy 397.51 156.21) + ) + (stroke + (width 0.5) + (type default) + (color 255 153 0 1) + ) + (uuid "bcf2b7b4-2507-4ccf-b42e-d7511ad1194f") + ) + (wire + (pts + (xy 243.84 86.36) (xy 243.84 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bd6fe6f2-be6a-4811-b862-feff45164d74") + ) + (wire + (pts + (xy 111.76 214.63) (xy 110.49 214.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "be1708b1-38af-4cf6-9e16-2f818aaef7a2") + ) + (wire + (pts + (xy 302.26 83.82) (xy 302.26 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bea62cea-6f68-44ef-9d6b-e34ef53b688f") + ) + (wire + (pts + (xy 110.49 181.61) (xy 110.49 189.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bec3b20b-6372-44ba-8e3c-cd6dd492c659") + ) + (wire + (pts + (xy 222.25 143.51) (xy 222.25 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bf404e45-6405-4508-8682-e87f54cdf388") + ) + (wire + (pts + (xy 25.4 278.13) (xy 21.59 278.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bfacf737-2a0d-43a2-b123-042f33cf499f") + ) + (wire + (pts + (xy 133.35 283.21) (xy 72.39 283.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c07df975-f123-46b4-89ae-d3c987e225a2") + ) + (wire + (pts + (xy 267.97 27.94) (xy 267.97 39.37) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c24d81be-a9e4-4145-9425-c8cf2684253e") + ) + (wire + (pts + (xy 107.95 238.76) (xy 128.27 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c2524d15-ccc0-45b9-93db-cd5485560587") + ) + (wire + (pts + (xy 64.77 187.96) (xy 64.77 189.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c254ddae-014f-4f4c-9a1c-844ea64f7199") + ) + (wire + (pts + (xy 16.51 251.46) (xy 16.51 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c298249d-1d78-4ecd-9555-0699081a928e") + ) + (wire + (pts + (xy 77.47 269.24) (xy 102.87 269.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c30bf18c-6473-4876-a7ee-f81c433402df") + ) + (wire + (pts + (xy 132.08 199.39) (xy 148.59 199.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c3542103-a4b8-4448-9d7f-47201abc718a") + ) + (wire + (pts + (xy 33.02 86.36) (xy 33.02 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c3a50468-de12-4675-82d9-fc0574c420d8") + ) + (wire + (pts + (xy 40.64 187.96) (xy 53.34 187.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c4afd1c7-4c73-44b6-b7f6-e4e90341d731") + ) + (wire + (pts + (xy 100.33 274.32) (xy 100.33 273.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c4e24fac-6473-4da7-88f2-532e53318226") + ) + (wire + (pts + (xy 96.52 163.83) (xy 111.76 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c4e33a18-c29b-4669-952a-5ee70fae31b6") + ) + (wire + (pts + (xy 95.25 171.45) (xy 99.06 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c4fb7d8d-b897-4e34-a45b-867971a0a49e") + ) + (wire + (pts + (xy 69.85 40.64) (xy 81.28 40.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c5c43a0b-de6f-4b95-a26d-4b2bf1ba990d") + ) + (wire + (pts + (xy 162.56 161.29) (xy 162.56 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c5d23535-d3dc-43bf-ad20-589c5307a160") + ) + (wire + (pts + (xy 233.68 143.51) (xy 237.49 143.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c60a7b20-ff00-44b1-86a1-fbd62b062513") + ) + (wire + (pts + (xy 351.79 66.04) (xy 351.79 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c6c878ab-86f6-4f2d-9d68-cfa47841cb4f") + ) + (polyline + (pts + (xy 389.89 151.13) (xy 389.89 161.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c70c51ea-780e-4a10-9b7b-cb06d59276ae") + ) + (wire + (pts + (xy 24.13 267.97) (xy 24.13 256.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c7132a30-6bf5-4338-8179-279041a34e5f") + ) + (wire + (pts + (xy 222.25 143.51) (xy 226.06 143.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c7840647-15c3-492b-8ed1-00bc13aef8f9") + ) + (wire + (pts + (xy 185.42 52.07) (xy 180.34 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c8ea70b6-b0eb-4cbc-826e-7da03130d3a7") + ) + (wire + (pts + (xy 259.08 236.22) (xy 273.05 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c9834f2f-89b4-4802-861e-0a76b02f1411") + ) + (wire + (pts + (xy 101.6 181.61) (xy 101.6 173.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c996f030-583a-4392-adf6-f328a25924af") + ) + (wire + (pts + (xy 111.76 241.3) (xy 128.27 241.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c9ab5ef1-02f4-40d1-9bf2-ab0033c35279") + ) + (wire + (pts + (xy 356.87 238.76) (xy 358.14 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ca9946b3-78e8-4ba2-b92c-c807358e3dd8") + ) + (polyline + (pts + (xy 264.16 86.36) (xy 264.16 127) + ) + (stroke + (width 1) + (type default) + (color 255 0 0 1) + ) + (uuid "cb776b4a-215c-49d3-a2de-90ebaf520eca") + ) + (polyline + (pts + (xy 372.11 161.29) (xy 389.89 160.02) + ) + (stroke + (width 0.5) + (type default) + (color 255 0 255 1) + ) + (uuid "cba13303-ba20-49df-bddb-f5c9fd1563e0") + ) + (wire + (pts + (xy 115.57 276.86) (xy 133.35 276.86) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cbda1ef6-c20a-4624-b4c4-088e72079187") + ) + (wire + (pts + (xy 97.79 209.55) (xy 111.76 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cbe4b96e-598f-4e4a-9aef-738dca3b62b3") + ) + (wire + (pts + (xy 64.77 189.23) (xy 69.85 189.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cd6ac1df-fb72-4957-972e-e31cd2d4c1b2") + ) + (wire + (pts + (xy 255.27 212.09) (xy 255.27 214.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cd87a444-b4ba-49fe-9a12-8ae0f46aee9d") + ) + (wire + (pts + (xy 302.26 91.44) (xy 300.99 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cdd2b4ac-719f-4ad2-b769-ecc8128db375") + ) + (wire + (pts + (xy 281.94 213.36) (xy 284.48 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cde1354b-611c-4186-8ff0-8c45b6e71be5") + ) + (wire + (pts + (xy 21.59 233.68) (xy 21.59 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ce621b87-8616-4102-b4b5-a58129d5dbcb") + ) + (wire + (pts + (xy 110.49 217.17) (xy 111.76 217.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ce8b37e5-2a6c-4de9-81f5-f9912eb4c541") + ) + (wire + (pts + (xy 346.71 220.98) (xy 346.71 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cec85af4-f55a-407b-85fa-48cc9497f141") + ) + (polyline + (pts + (xy 222.25 62.23) (xy 222.25 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cf6bed7b-feda-45c6-bbd5-d4adec2be66d") + ) + (wire + (pts + (xy 194.31 118.11) (xy 191.77 118.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cfbf5e27-1c44-4f57-ae99-eb3bf715c312") + ) + (wire + (pts + (xy 156.21 128.27) (xy 154.94 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d0278231-f4ec-41d7-8ba6-c4e2c795728e") + ) + (wire + (pts + (xy 102.87 274.32) (xy 100.33 274.32) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d0566408-b03d-4054-bca4-e4ef2cfd43a9") + ) + (wire + (pts + (xy 111.76 260.35) (xy 111.76 241.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d0f8beed-107d-4e9c-ae62-7199e7727489") + ) + (wire + (pts + (xy 290.83 27.94) (xy 290.83 39.37) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d13b51bd-f631-4a5f-9636-3725a745a6d2") + ) + (wire + (pts + (xy 359.41 99.06) (xy 359.41 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d14b1654-72b1-47c7-be8e-4348594804d4") + ) + (wire + (pts + (xy 313.69 27.94) (xy 313.69 39.37) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d1f66e29-f42e-47b6-97ae-9b1077a314ea") + ) + (wire + (pts + (xy 73.66 276.86) (xy 73.66 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d20d6f39-0e3f-49c5-927c-b1210ee70b6a") + ) + (polyline + (pts + (xy 119.38 104.14) (xy 127 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d3190236-636e-4f44-b69b-0253273b2523") + ) + (wire + (pts + (xy 292.1 237.49) (xy 292.1 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d36167d0-bc3f-4620-86f7-6c29d8a750b2") + ) + (wire + (pts + (xy 60.96 182.88) (xy 62.23 182.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d379628f-c5d1-4fc7-8c58-147840cb14df") + ) + (wire + (pts + (xy 237.49 143.51) (xy 266.7 143.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d3fcd2e5-d270-4cec-9ceb-e172fb5b2757") + ) + (wire + (pts + (xy 148.59 233.68) (xy 175.26 233.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d4643d21-cd25-4afe-9c4f-34c60996daa3") + ) + (wire + (pts + (xy 123.19 88.9) (xy 125.73 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d4c22d07-c48d-4c8a-acb8-553216b5db2a") + ) + (wire + (pts + (xy 254 200.66) (xy 251.46 200.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d51b4afa-f760-42cd-93e3-5b9bf653f28e") + ) + (wire + (pts + (xy 359.41 100.33) (xy 359.41 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d55383f7-f861-4048-b3eb-ab9d6ab5979e") + ) + (wire + (pts + (xy 299.72 226.06) (xy 303.53 226.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d58c5a48-a1ad-47ec-b2a9-732b4ef44c5c") + ) + (wire + (pts + (xy 254 243.84) (xy 251.46 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d6097c85-8045-4ed9-9d9f-a8c7ddba0c1f") + ) + (wire + (pts + (xy 166.37 120.65) (xy 166.37 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d673b415-fc79-482a-8f46-0447a61634ab") + ) + (wire + (pts + (xy 279.4 210.82) (xy 284.48 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d74b9cb9-12c1-4837-971c-775d09a8dd00") + ) + (polyline + (pts + (xy 142.24 27.94) (xy 142.24 27.94) + ) + (stroke + (width 1) + (type default) + (color 0 255 0 1) + ) + (uuid "d8597897-fbef-4a4f-ac86-abcb9d89ac11") + ) + (polyline + (pts + (xy 372.11 160.02) (xy 389.89 158.75) + ) + (stroke + (width 0.5) + (type default) + (color 255 0 255 1) + ) + (uuid "d8c89a2f-6eb6-425a-adbc-6b5e85b85707") + ) + (wire + (pts + (xy 60.96 236.22) (xy 76.2 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d9d809ab-906b-45b8-9bcd-08842204fb20") + ) + (wire + (pts + (xy 111.76 179.07) (xy 110.49 179.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "da3ecce2-fb26-45f3-a0c7-e5f21eef465a") + ) + (wire + (pts + (xy 254 234.95) (xy 254 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "da5f21f8-a73d-4707-bc67-e3b572c36f7c") + ) + (wire + (pts + (xy 95.25 212.09) (xy 111.76 212.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "db0393a2-50e3-4668-9500-5888e4480dce") + ) + (wire + (pts + (xy 237.49 172.72) (xy 237.49 176.53) + ) + (stroke + (width 0) + (type default) + ) + (uuid "db32d667-7002-4f9a-b085-07dccd1e3e80") + ) + (wire + (pts + (xy 105.41 29.21) (xy 107.95 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dc2e8f47-5b18-4191-9d57-f515033976af") + ) + (wire + (pts + (xy 160.02 115.57) (xy 160.02 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dc6344bf-05bd-44ad-8112-669c2ebf6a3d") + ) + (wire + (pts + (xy 158.75 62.23) (xy 160.02 62.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dc6787f4-c5c1-4937-b277-91d92d8bce4e") + ) + (polyline + (pts + (xy 123.19 110.49) (xy 123.19 115.57) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dc76133b-e96e-40a0-bd52-b9bb4a992240") + ) + (wire + (pts + (xy 185.42 40.64) (xy 185.42 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dd353b9d-da0a-48a8-9885-c43f1eeb4f6b") + ) + (wire + (pts + (xy 99.06 171.45) (xy 99.06 168.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dd907d8a-b805-448c-8705-1959bb4f554a") + ) + (polyline + (pts + (xy 57.15 69.85) (xy 57.15 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dde9e89d-11e9-4b1b-b6c8-e458c5d1af0c") + ) + (wire + (pts + (xy 95.25 189.23) (xy 101.6 189.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "deb7e25c-cde0-4397-8728-2ea8e47c02c1") + ) + (wire + (pts + (xy 255.27 171.45) (xy 254 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "df3a0541-9d32-44d5-943a-cbe7d13a30e2") + ) + (wire + (pts + (xy 115.57 274.32) (xy 118.11 274.32) + ) + (stroke + (width 0) + (type default) + ) + (uuid "df5e06d5-382f-46d1-9a29-5dca65ac337f") + ) + (wire + (pts + (xy 115.57 269.24) (xy 132.08 269.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "df921253-df90-421b-a759-986dffda193b") + ) + (wire + (pts + (xy 313.69 234.95) (xy 313.69 226.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dfd05f2c-1435-45d2-a275-e976bb5076ec") + ) + (wire + (pts + (xy 29.21 40.64) (xy 41.91 40.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e01a9879-9d0a-416c-b6f5-01d874b00d1b") + ) + (wire + (pts + (xy 279.4 72.39) (xy 279.4 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e01f7e3a-6ffc-4039-8efc-434e9d379c21") + ) + (wire + (pts + (xy 76.2 236.22) (xy 76.2 271.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e03d781a-0269-4f4d-9a48-8537b8d566a8") + ) + (wire + (pts + (xy 158.75 57.15) (xy 160.02 57.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e07d9e79-dfe5-4f68-a351-9b90357eb71c") + ) + (wire + (pts + (xy 95.25 44.45) (xy 95.25 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e1561fa4-b8ff-423f-9c69-b63db0d41d78") + ) + (wire + (pts + (xy 281.94 72.39) (xy 279.4 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e1ee7241-a15b-4465-8437-09f3b193c71e") + ) + (polyline + (pts + (xy 262.89 100.33) (xy 222.25 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e2e055b9-c0eb-4250-9e24-7dfeb03b47ae") + ) + (wire + (pts + (xy 73.66 276.86) (xy 102.87 276.86) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e3128dae-9ef7-471c-96d3-b1d065951edd") + ) + (wire + (pts + (xy 255.27 168.91) (xy 255.27 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e355719c-3a75-48e5-afb3-792baf1c03bf") + ) + (wire + (pts + (xy 60.96 228.6) (xy 66.04 228.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e3ec22e8-3b7c-493f-9053-66d730879ab4") + ) + (wire + (pts + (xy 308.61 116.84) (xy 308.61 114.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e3f0b07f-02eb-46d6-9897-d1e94604c75b") + ) + (wire + (pts + (xy 279.4 100.33) (xy 279.4 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e44ec7f7-52e5-4881-8785-d979dd5b9259") + ) + (wire + (pts + (xy 187.96 31.75) (xy 187.96 54.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e512a03a-d1b3-449f-a4e4-22a240ab3c97") + ) + (wire + (pts + (xy 163.83 168.91) (xy 163.83 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e56cebb8-efd4-4c7b-8a93-83617e2232dc") + ) + (wire + (pts + (xy 330.2 121.92) (xy 330.2 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e59bcf46-6f61-4a31-b5d9-986b00d4fd01") + ) + (wire + (pts + (xy 347.98 120.65) (xy 356.87 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e5b5e22b-9d45-464f-8bc9-41b989c29165") + ) + (wire + (pts + (xy 110.49 189.23) (xy 121.92 189.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e6510e06-0040-4fad-9827-fc237abf1fe3") + ) + (wire + (pts + (xy 132.08 212.09) (xy 162.56 212.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e68ab52d-cc24-4c1a-8ede-b1f69889c266") + ) + (wire + (pts + (xy 316.23 129.54) (xy 316.23 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e7560f71-f354-4824-aef3-4e94a74c7288") + ) + (wire + (pts + (xy 77.47 231.14) (xy 87.63 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e77d6499-5164-4a41-addb-f15fbf53e0cf") + ) + (wire + (pts + (xy 41.91 54.61) (xy 77.47 54.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e837f643-bccc-40a2-b948-b1aa4e8e4588") + ) + (wire + (pts + (xy 74.93 26.67) (xy 76.2 26.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e85a6a26-8b13-4d61-ac0e-3877aeead834") + ) + (wire + (pts + (xy 222.25 177.8) (xy 222.25 181.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e9b29f86-22b8-4ee7-8397-a7eec84651e4") + ) + (wire + (pts + (xy 29.21 213.36) (xy 31.75 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ea0ac332-7ec5-43bc-b878-16013dc217f4") + ) + (wire + (pts + (xy 21.59 223.52) (xy 25.4 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eb653aac-badf-420c-a6bc-977ec9778d52") + ) + (wire + (pts + (xy 336.55 27.94) (xy 336.55 39.37) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ebd6e3eb-29fa-46ad-8aa6-f717efd7a1e6") + ) + (polyline + (pts + (xy 119.38 104.14) (xy 123.19 110.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ebf1648e-efe1-4212-af29-98bbc053752d") + ) + (wire + (pts + (xy 143.51 265.43) (xy 143.51 262.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ec42d228-3b39-4938-a648-babf7e5e2d6e") + ) + (wire + (pts + (xy 162.56 173.99) (xy 162.56 176.53) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ec8a99d3-9816-4430-a18c-f17d1097fbe5") + ) + (wire + (pts + (xy 259.08 193.04) (xy 273.05 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ece968d7-c378-4fd1-a6b0-db1579b8a346") + ) + (polyline + (pts + (xy 180.34 21.59) (xy 199.39 21.59) + ) + (stroke + (width 1) + (type default) + (color 0 255 0 1) + ) + (uuid "ed0a33ab-0f6c-4e0b-b34c-cf7edac4afa6") + ) + (polyline + (pts + (xy 284.48 59.69) (xy 194.31 59.69) + ) + (stroke + (width 1) + (type default) + (color 0 255 0 1) + ) + (uuid "ed500476-a89e-4827-abf4-18cc38a9ae0a") + ) + (wire + (pts + (xy 355.6 63.5) (xy 355.6 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ee05a8fb-242d-4571-9d62-5ca2094c275f") + ) + (polyline + (pts + (xy 262.89 62.23) (xy 262.89 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ee7b737b-7fc9-49f8-ba74-5af6a150511b") + ) + (wire + (pts + (xy 33.02 269.24) (xy 33.02 273.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ee8134ba-49fb-4abf-829a-32ab1d9a200f") + ) + (polyline + (pts + (xy 313.69 129.54) (xy 273.05 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ee9aa040-f5fb-4aa9-b271-7d7fcc7ecd0c") + ) + (polyline + (pts + (xy 307.34 86.36) (xy 264.16 86.36) + ) + (stroke + (width 1) + (type default) + (color 255 0 0 1) + ) + (uuid "ef0d9b20-6d24-48c2-8ffb-801a3a569b5f") + ) + (wire + (pts + (xy 50.8 88.9) (xy 63.5 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "efd12a0b-9f0b-4b6d-ae46-2af1dee8570f") + ) + (wire + (pts + (xy 76.2 271.78) (xy 102.87 271.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f024fb2c-4e14-4f3c-8ff4-0c40b57014d8") + ) + (wire + (pts + (xy 167.64 222.25) (xy 167.64 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f08a14db-50f3-4dd9-b7f2-1030ac3f5d09") + ) + (wire + (pts + (xy 132.08 163.83) (xy 148.59 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f14c8aa7-fc69-424d-a440-233c94c2abd9") + ) + (wire + (pts + (xy 267.97 83.82) (xy 267.97 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f247a217-55d6-4a5a-8271-e5d3e4fe2175") + ) + (wire + (pts + (xy 302.26 114.3) (xy 302.26 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f259221c-bb9c-4e30-97be-6beaf1c5e269") + ) + (wire + (pts + (xy 335.28 52.07) (xy 336.55 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f2928ada-72df-4ce3-a187-c49bc74e836e") + ) + (wire + (pts + (xy 308.61 101.6) (xy 331.47 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f2ef741a-d24c-44c2-90e1-74584068db41") + ) + (wire + (pts + (xy 97.79 196.85) (xy 97.79 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f3393a56-cd07-4805-83f8-d9d788c09233") + ) + (polyline + (pts + (xy 67.31 69.85) (xy 67.31 80.01) + ) + (stroke + (width 1) + (type default) + (color 255 0 0 1) + ) + (uuid "f36de82a-0557-44b5-8fdb-b424225a555b") + ) + (wire + (pts + (xy 105.41 62.23) (xy 113.03 62.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f37c40dc-dcdb-4d7b-a447-5ab82cc62478") + ) + (wire + (pts + (xy 279.4 162.56) (xy 279.4 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f3fcfb87-6cbf-4c0a-a22b-7982ba6e40fc") + ) + (wire + (pts + (xy 175.26 218.44) (xy 175.26 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f47d3938-e28f-49df-8662-6c1fcd319bbe") + ) + (wire + (pts + (xy 167.64 45.72) (xy 167.64 46.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f48e4865-ace7-43a0-9a01-6fdce766cdfb") + ) + (wire + (pts + (xy 284.48 72.39) (xy 281.94 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f529b2d2-b61f-47c5-bf74-fc1a5ff29c11") + ) + (wire + (pts + (xy 373.38 238.76) (xy 375.92 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f5323ec0-ea0c-44b7-a5e6-35e7329c8349") + ) + (wire + (pts + (xy 77.47 54.61) (xy 85.09 54.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f5e2f301-bfd8-494e-8e9e-7194ff47ddb5") + ) + (wire + (pts + (xy 76.2 81.28) (xy 76.2 78.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f66cb755-d4d6-46c3-9150-2e07f57e414f") + ) + (polyline + (pts + (xy 372.11 152.4) (xy 389.89 153.67) + ) + (stroke + (width 0.5) + (type default) + (color 255 153 0 1) + ) + (uuid "f79c255a-318b-4c38-b728-d05999cb3145") + ) + (polyline + (pts + (xy 370.84 165.1) (xy 386.08 165.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f8fb5f45-ed67-427f-ba7f-dd5165efafd3") + ) + (wire + (pts + (xy 132.08 261.62) (xy 78.74 261.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f946f142-a469-4bf7-a7b0-cfa2564acb03") + ) + (wire + (pts + (xy 95.25 194.31) (xy 99.06 194.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f98b99dd-753b-4540-8d55-65702f2f2aa5") + ) + (wire + (pts + (xy 273.05 262.89) (xy 273.05 259.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fa0b9045-afcf-415e-8148-49432f7d08ef") + ) + (wire + (pts + (xy 162.56 209.55) (xy 162.56 212.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fb110207-1038-4ebd-a4a2-2f0440df0813") + ) + (wire + (pts + (xy 328.93 199.39) (xy 334.01 199.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fc82b915-25b2-4566-b655-c717b79dcc82") + ) + (wire + (pts + (xy 92.71 91.44) (xy 101.6 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fd02dab1-c8ad-4be7-b54c-aad8af7dec48") + ) + (wire + (pts + (xy 313.69 226.06) (xy 303.53 226.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fe53bae5-dc3b-49d4-9e03-3bf122f66a12") + ) + (wire + (pts + (xy 355.6 41.91) (xy 351.79 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fe915bd7-1609-4e76-a274-ede22f2eb746") + ) + (wire + (pts + (xy 21.59 234.95) (xy 21.59 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fec168bc-d1ab-4e42-b130-ac79797331d9") + ) + (wire + (pts + (xy 222.25 215.9) (xy 222.25 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ff0386a5-b80e-4d1e-b237-8e3c07c9b3d5") + ) + (wire + (pts + (xy 266.7 52.07) (xy 267.97 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ff1fdabb-8719-47b1-b83a-023b2989782d") + ) + (wire + (pts + (xy 110.49 214.63) (xy 110.49 217.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ff76632f-f99c-4e35-b254-722b23c44ba1") + ) + (polyline + (pts + (xy 372.11 158.75) (xy 389.89 157.48) + ) + (stroke + (width 0.5) + (type default) + (color 255 0 255 1) + ) + (uuid "ffcbbaed-a936-4759-a6d4-b636e2e9a470") + ) + (wire + (pts + (xy 66.04 228.6) (xy 66.04 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ffcbccf9-6ec2-4e7f-9fe9-e09cfcf104b5") + ) + (wire + (pts + (xy 161.29 199.39) (xy 162.56 199.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ffe560c0-0f1e-4ae4-b8de-09835243a6d8") + ) + (label "160M" + (at 133.35 163.83 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "01e63417-ae8e-4d5a-b99a-c3016a2ab9ef") + ) + (label "RRF12" + (at 158.75 57.15 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "09a8c6d0-78d9-411d-a16f-210a792e8338") + ) + (label "ANT4_SEL" + (at 151.13 238.76 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "0c01614c-2840-478b-a45d-d917c9e39bf2") + ) + (label "RRF15" + (at 83.82 91.44 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "0d44f788-756c-40fd-90bd-169f775f0b7e") + ) + (label "RF30" + (at 234.95 72.39 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "0deee7c1-ec39-40bf-86a0-7788458e0676") + ) + (label "RRF16" + (at 83.82 96.52 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "0eee66cf-1d6c-4c6c-842b-8d41dd13f6ec") + ) + (label "100W_PA_SEL" + (at 151.13 241.3 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "13f6c142-3760-4ee8-99c0-059a0d50864e") + ) + (label "RRF11" + (at 158.75 24.13 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "140bde83-dc94-48dc-b715-4ec9d973b455") + ) + (label "60M" + (at 133.35 168.91 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "16bc82c3-23d9-4017-8b44-68d7528eb85d") + ) + (label "RF27" + (at 336.55 34.29 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "1848cc93-a7c8-4379-92f1-fe1c349d8c71") + ) + (label "40M" + (at 133.35 171.45 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "23b65625-6bad-4cfd-b8e3-8647f3c4c337") + ) + (label "10M" + (at 133.35 207.01 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "28466946-2ab2-4b60-969a-1062aec74ade") + ) + (label "XVTR_SEL" + (at 62.23 236.22 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "2baeeb06-4255-44fb-8b0f-42b500b5fb48") + ) + (label "RF36" + (at 214.63 215.9 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "2be808e5-3d66-4612-aabb-0c29ca83d6be") + ) + (label "RX_BPF_SEL" + (at 234.95 40.64 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "2d92f050-9668-4249-897b-7703987ea863") + ) + (label "REF_V" + (at 176.53 276.86 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "2eb58fd5-14ff-4a4c-8254-ead4af07be21") + ) + (label "BIT3" + (at 40.64 198.12 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "3601ee5d-0a17-4d68-ba78-b41fbbb2c3a3") + ) + (label "FWD_V" + (at 309.88 162.56 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "3967ab74-ed87-4393-9284-12a0a143faa2") + ) + (label "TX" + (at 363.22 100.33 180) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify right bottom) + ) + (uuid "39a1e2a4-24e2-4af1-ab6e-bdbc38b2b3e9") + ) + (label "ANT2_SEL" + (at 151.13 233.68 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "3f763504-2c6e-4e33-95eb-f14908971770") + ) + (label "RF29" + (at 248.92 72.39 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "47108bdc-01cb-43c9-b892-5ee91089a9ad") + ) + (label "RRF5" + (at 107.95 43.18 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "48c97c63-05d4-44e5-abdc-d50cb937d45c") + ) + (label "RRF33" + (at 181.61 26.67 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "49a07373-5646-4b08-86eb-d679a976dc9c") + ) + (label "BIT2" + (at 40.64 193.04 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "4b2a8c93-7198-484c-9f09-f3ffd3f6c78f") + ) + (label "SDA" + (at 157.48 274.32 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "4e75d2e7-5737-4aee-971e-1aa9040a2913") + ) + (label "30M" + (at 133.35 173.99 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "4e76c0ef-fa20-47c3-bc61-ea3e9715c7aa") + ) + (label "8R ~{TX}" + (at 330.2 99.06 180) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify right bottom) + ) + (uuid "50ce051a-5a46-408c-951b-bd596d94e303") + ) + (label "RF19" + (at 129.54 118.11 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "550bfb63-f5ab-42ee-b828-8b3cfbbeec7e") + ) + (label "BIT1" + (at 40.64 187.96 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "59dc2d97-74e3-444c-9a19-4fdf04dbb7b4") + ) + (label "RRF10" + (at 106.68 62.23 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "59e117e9-e540-4231-bb6b-d636c6dd6907") + ) + (label "80M" + (at 133.35 166.37 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "5a965bba-f37b-4f02-84d5-33211cb6dc2d") + ) + (label "12M" + (at 133.35 204.47 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "5c3d750b-c2c3-4727-acab-68c83f3a2843") + ) + (label "ANT1_SEL" + (at 266.7 52.07 90) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "5e58185a-a78c-4eee-bf75-fcf5bdf29ca5") + ) + (label "LPF_TO_SWR" + (at 204.47 194.31 90) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "63f4b762-ded1-4dbc-b194-4d9c90e71941") + ) + (label "RRF8" + (at 115.57 24.13 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "66a66563-0bfe-440b-a2d9-e9519ce61ff3") + ) + (label "SCL" + (at 306.07 213.36 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "675d7848-0a1f-4f58-a6dd-bd1707021b36") + ) + (label "RF1" + (at 74.93 26.67 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "67f15c25-b974-4375-85cd-6b2a981e811b") + ) + (label "SWR_TO_PIN_DIODE_TR" + (at 267.97 91.44 270) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify right bottom) + ) + (uuid "685b0ed9-4c1e-40bb-bf3c-1e2f2bc29072") + ) + (label "RF37" + (at 232.41 215.9 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "6a35be99-2659-48b3-b363-851c1541b6b2") + ) + (label "REF" + (at 273.05 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "6b549eba-9a95-43b5-a2e1-3201b440145c") + ) + (label "RRF6" + (at 83.82 59.69 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "7b796db8-c0d7-4356-84a8-74ab7d46d008") + ) + (label "RRF32" + (at 149.86 57.15 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "7f14aad0-38ef-4a24-b1ad-6fd974f0dc78") + ) + (label "SCL" + (at 21.59 223.52 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "7f446a4d-6bc8-4a46-8858-25e0d29cabf9") + ) + (label "RF28" + (at 261.62 72.39 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "85c43f9c-0e2a-4539-aa4f-820de58188bc") + ) + (label "FWD" + (at 273.05 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "8661c0c5-eb5b-43ab-8858-172ce45e611c") + ) + (label "8T TX" + (at 330.2 101.6 180) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify right bottom) + ) + (uuid "86e4a156-0c92-4e28-8177-c8fb4c54e280") + ) + (label "6M" + (at 133.35 209.55 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "87d83286-3325-439b-9406-4dee1fb87c1d") + ) + (label "BIT1" + (at 176.53 269.24 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "8e0c8413-db9c-4aa8-a2f6-43c50854c4c4") + ) + (label "RF17" + (at 92.71 91.44 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "8e4134c1-ddc8-4114-a04b-62235ca04e5f") + ) + (label "BIT0" + (at 40.64 182.88 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "985b4a54-e5a2-4b57-b3bf-af06acb469d8") + ) + (label "RF21" + (at 161.29 120.65 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "9a9ef60a-2afc-44e8-910e-ea0aa2c2e6db") + ) + (label "SWR_TO_PIN_DIODE_TR" + (at 204.47 236.22 90) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "9c705c07-7fdf-434b-ad6b-04fb4e29e4ac") + ) + (label "RF35" + (at 213.36 172.72 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "9eef6529-e117-4e3b-bd2c-3e34d21fd127") + ) + (label "SCL" + (at 157.48 276.86 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "a269e600-4817-47a1-8c82-1bce0cf34691") + ) + (label "XVTR_SEL" + (at 26.67 86.36 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "a5d344f7-5219-4097-a44f-f9855624c6ec") + ) + (label "RRF3" + (at 105.41 24.13 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "a625bfae-4f95-4a03-9f4e-ee83bf7bf6b9") + ) + (label "SDA" + (at 306.07 215.9 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "a7a303aa-cff1-4fa7-a20b-1450734ff891") + ) + (label "RRF31" + (at 224.79 72.39 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "a90b15ad-a64f-42ba-bbf4-e746eeeed8b5") + ) + (label "RRF14" + (at 62.23 93.98 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "aa715ef2-81b4-4466-a3ae-37e3d70f719b") + ) + (label "100W_PA_SEL" + (at 194.31 134.62 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "adcfcbdc-5423-4363-8050-374c16372337") + ) + (label "BIT3" + (at 176.53 271.78 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "ae2071fe-7d3a-438d-ad46-cba7498dbe53") + ) + (label "TX_BPF_SEL" + (at 62.23 243.84 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "af515c14-81be-48ba-ba51-473515981baa") + ) + (label "RF7" + (at 74.93 59.69 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "af6c04b1-76d4-4624-837d-95357d100d08") + ) + (label "ANT3_SEL" + (at 312.42 52.07 90) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "b441abbf-3ae6-4dfb-b461-9ad854adfc28") + ) + (label "TX" + (at 176.53 279.4 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "b9637f4c-58bd-4a2b-b181-45fabe97f815") + ) + (label "BIT0" + (at 157.48 269.24 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "baa2457e-78b9-495c-a44a-d9ce7090e714") + ) + (label "FWD_V" + (at 176.53 274.32 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "bad8e555-a21d-4c65-a342-d3fa843d4617") + ) + (label "RRF25" + (at 290.83 34.29 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "bbf3850c-c3ea-4d02-b7db-26803f40ca59") + ) + (label "RF24" + (at 267.97 34.29 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "bfa71d4b-21f8-4df7-be09-55a308743b6e") + ) + (label "RF34" + (at 193.04 26.67 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "c0e8ad23-84b2-42a3-abd3-e81e01503234") + ) + (label "RF23" + (at 289.56 63.5 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "c2e03d51-613e-482c-8a90-8c47ea42b53e") + ) + (label "RRF13" + (at 158.75 62.23 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "c4d763af-1e76-4b80-8257-19df83de125d") + ) + (label "BIT2" + (at 157.48 271.78 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "c4f8d923-618f-494d-a09c-807e0d71c06c") + ) + (label "17M" + (at 133.35 199.39 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "cc2203eb-3d4c-442d-bf94-fec8017b0531") + ) + (label "RF18" + (at 92.71 96.52 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "d606466d-e8ba-497e-857c-d572943e0895") + ) + (label "RF20" + (at 156.21 115.57 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "d8cca2b8-e532-4463-870c-6b893188a112") + ) + (label "20M" + (at 133.35 176.53 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "dbe78347-7889-4eee-8a64-6f98b71d721e") + ) + (label "SDA" + (at 21.59 220.98 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "deb8793e-cc32-48a0-b5bf-bac515234428") + ) + (label "REF_V" + (at 309.88 167.64 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "e55088fa-7a99-4f4b-9965-8326f9f371c5") + ) + (label "RX_BPF_SEL" + (at 62.23 246.38 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "e61576ff-a7ba-4b9c-8ca5-3c1c76c6cf40") + ) + (label "ANT2_SEL" + (at 289.56 52.07 90) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "e8a93fe1-0562-47ae-830b-df9872a2ccd4") + ) + (label "RF38" + (at 232.41 172.72 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "e904916d-9cb0-4c48-8b1c-711fde9776cb") + ) + (label "RRF4" + (at 105.41 29.21 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "eada9091-47ec-4d14-b622-706fbd72d10a") + ) + (label "RRF26" + (at 313.69 34.29 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "ecc7bd6e-11c8-468e-bce5-320d4104dad5") + ) + (label "LPF_TO_SWR" + (at 194.31 139.7 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "ecd1299f-0fcf-4f42-b012-0fc4d0f9af6e") + ) + (label "RF22" + (at 194.31 118.11 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "eded0808-18b1-45bd-8be4-02f6539ce271") + ) + (label "RRF9" + (at 120.65 62.23 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "ee7a0e6a-c7bb-4b29-9e6d-d93612295a7c") + ) + (label "TX_BPF_SEL" + (at 29.21 40.64 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "eed970a8-f90a-4e63-9930-668a90357b55") + ) + (label "TX" + (at 116.84 279.4 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "f24ac578-0196-42d5-b55f-7eafd6e57a41") + ) + (label "TX" + (at 276.86 100.33 180) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify right bottom) + ) + (uuid "f93b2f1b-bb36-4810-9d5a-47c7fd8f429c") + ) + (label "ANT1_SEL" + (at 151.13 231.14 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "f9d22183-db84-4873-8f36-5437b4ee8184") + ) + (label "15M" + (at 133.35 201.93 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "fb3242e1-331d-4b87-b5da-0f1c3aab57a2") + ) + (label "ANT4_SEL" + (at 335.28 52.07 90) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "fb4a15ca-ee39-4742-a046-e68e49471689") + ) + (label "ANT3_SEL" + (at 151.13 236.22 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "fbe9d07b-bee4-4176-ab01-5e83d1363129") + ) + (label "RRF2" + (at 83.82 26.67 0) + (effects + (font + (size 0.5 0.5) + ) + (justify left bottom) + ) + (uuid "fc33c44c-eaf1-43f8-97a3-3c1c745d707a") + ) + (label "NF" + (at 133.35 212.09 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "fc9463b8-346f-472a-9588-06430d5b8b38") + ) + (symbol + (lib_id "Device:C") + (at 154.94 220.98 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "009cf2e5-c83c-4913-85f8-27a71744bf8f") + (property "Reference" "C12" + (at 154.94 214.63 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 153.67 217.17 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 158.75 220.0148 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 154.94 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 154.94 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 154.94 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 154.94 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c37710eb-7761-4e7d-a486-74249b878735") + ) + (pin "1" + (uuid "bd8a13b4-a53e-4cc1-95fa-1256d7ae60c3") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C12") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 69.85 59.69 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "00b8229a-3a0c-4ca4-a163-b75616e86a54") + (property "Reference" "J4" + (at 71.12 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TO ATTN" + (at 67.31 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 69.85 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 69.85 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 69.85 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 69.85 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 69.85 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "16aeda33-13de-47b2-978b-0add96bd3abc") + ) + (pin "2" + (uuid "7eec7998-7026-4c92-930d-70f305c4e433") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 199.39 26.67 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "01309a3a-f5a4-4000-bf91-1bde11bb78cb") + (property "Reference" "J2" + (at 201.9301 25.7511 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TO_RECEIVER" + (at 201.9301 28.1753 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 199.39 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 199.39 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 199.39 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 199.39 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 199.39 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4fa1c93f-eb02-4044-98b0-022817f06152") + ) + (pin "2" + (uuid "0ffd5819-de3e-4dc1-b9c1-0a50a63aea01") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 250.19 82.55 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "02220b1f-db62-4cd7-8143-3c43a768d540") + (property "Reference" "L2" + (at 248.9227 81.3379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "3.3uH" + (at 248.9227 83.7621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 250.19 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 250.19 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 250.19 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "70-ILSB1206ER3R3K" + (at 250.19 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 250.19 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "47631783-eb03-4411-aa18-fac86f9837cb") + ) + (pin "2" + (uuid "6d66dab6-ae8a-4b37-b40e-771d20403821") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:IDC_2x5") + (at 153.67 168.91 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "03d51a09-b053-42dd-97be-b28b2da76283") + (property "Reference" "J25" + (at 154.94 158.4157 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LPF CTRL LOW" + (at 154.94 160.8399 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x05_P2.54mm_Vertical" + (at 153.67 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 153.67 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 153.67 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 153.67 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "A-2939" + (at 153.67 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "9" + (uuid "59bfd214-c408-4be9-8029-0098c45f2ad2") + ) + (pin "5" + (uuid "f7f480e9-9098-49fe-88cf-cbf90bed68aa") + ) + (pin "2" + (uuid "0945fc60-5379-4134-aa9a-b6f6839d7b95") + ) + (pin "4" + (uuid "b5c32a9e-9971-42a7-ad5c-89e9a0aced96") + ) + (pin "6" + (uuid "7d1442fa-53cd-45f7-8f68-d91c408710ca") + ) + (pin "10" + (uuid "a21e0d74-ea0e-4bc2-9115-541c4534f854") + ) + (pin "7" + (uuid "61d153af-e1fa-472d-a65d-5a005c8701f4") + ) + (pin "3" + (uuid "33c885ee-f99c-435b-80f2-fd0fcca915cb") + ) + (pin "1" + (uuid "1c5cd497-cf9a-40d7-bf08-7d2fbde062cb") + ) + (pin "8" + (uuid "ce37fbf4-703d-4a03-a514-c346785ade7f") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J25") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 95.25 57.15 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "04020e32-e6cd-49f5-88e5-daf5f5c2c2af") + (property "Reference" "U7" + (at 95.25 67.6443 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 95.25 65.2201 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 95.25 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 95.25 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 95.25 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 95.25 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 95.25 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "006c2e63-a031-45b5-907f-a12c1ceb70df") + ) + (pin "6" + (uuid "b8264b27-0749-4dbf-8acf-7220a1bc5043") + ) + (pin "4" + (uuid "6daabbb1-290e-4c8f-b162-c129f35620d2") + ) + (pin "1" + (uuid "d116ad1f-c762-48d3-9908-ae8b974184a9") + ) + (pin "2" + (uuid "d57c6ef7-40d6-4a52-9418-23b76de554be") + ) + (pin "3" + (uuid "f141cada-ac2b-4a23-bd44-6d94711e39a7") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector_Audio:AudioJack3_SwitchTR") + (at 361.95 125.73 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "04582302-d9b5-4de1-979d-20ae5b2bc4ad") + (property "Reference" "J19" + (at 363.855 133.6843 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "KEY OUT" + (at 363.855 131.2601 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:Jack_3.5mm_STX-3081_Horizontal" + (at 361.95 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 361.95 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 361.95 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "490-SJ1-3515N" + (at 361.95 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 361.95 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "RN" + (uuid "828d9958-195b-40be-9aa9-faf70d4e1fa3") + ) + (pin "T" + (uuid "d4225aef-ccc6-4503-8cc6-c0aad463cb9d") + ) + (pin "S" + (uuid "313d3dea-f9b2-441f-b61f-0099b50d9d57") + ) + (pin "R" + (uuid "1592e4b3-e83c-4026-a330-1b0a59c5c42f") + ) + (pin "TN" + (uuid "1d54d0b9-7887-42e3-bc4c-7726fd9516c2") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J19") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 147.32 262.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0470ee10-92d3-4ab5-b316-3b94ee9ac861") + (property "Reference" "#PWR028" + (at 147.32 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 147.32 257.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 147.32 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 147.32 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 147.32 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "3b690245-7429-4dee-9825-9879af663fb8") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR028") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 194.31 104.14 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "05dda897-4699-47a1-b9d7-c42f9c9421c8") + (property "Reference" "J10" + (at 195.58 97.79 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "FROM 100W PA" + (at 201.93 100.33 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 194.31 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 194.31 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 194.31 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 194.31 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 194.31 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "bb5c56b0-1306-4e2c-b6e5-63ce69ab1f0a") + ) + (pin "2" + (uuid "7a14e898-6acf-4a79-95a6-2b6160dab701") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:ULN2803C") + (at 138.43 236.22 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "05ff3b25-059b-40f7-9603-5efbd3d08849") + (property "Reference" "U4" + (at 138.43 222.25 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "ULN2803C" + (at 138.43 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-20W_7.5x12.8mm_P1.27mm" + (at 139.7 252.73 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/uln2803c.pdf" + (at 142.24 257.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 138.43 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "7" + (uuid "a8601013-7592-4f83-9de9-9ed7a3bb4837") + ) + (pin "17" + (uuid "0fd1a5d0-c239-4a21-a84d-5498144d78c9") + ) + (pin "8" + (uuid "3130bbe1-c0a9-4e6e-b5ee-a8f16d1437f9") + ) + (pin "15" + (uuid "2417709a-6a54-4feb-81b5-1cb93439b291") + ) + (pin "14" + (uuid "085bf898-846e-4636-a7d6-b4d09b44d752") + ) + (pin "2" + (uuid "b03b59dc-318d-4e3c-a159-76bd3992c135") + ) + (pin "13" + (uuid "7eba586b-4f94-4fb9-8a52-4ee9efd99f20") + ) + (pin "16" + (uuid "7f07c800-4088-457a-8d5c-baa76e0225b7") + ) + (pin "1" + (uuid "f44e233d-793e-43a6-9b21-7260cc52e3e3") + ) + (pin "9" + (uuid "f1250ddc-ad93-4ee7-991e-1a75f02e8e26") + ) + (pin "12" + (uuid "1f622863-4699-4c56-9ce5-a3650c763bd3") + ) + (pin "11" + (uuid "ff92fb61-cd3f-4539-aaf2-6bc37de29be3") + ) + (pin "10" + (uuid "ee2e441d-6c20-45b1-983b-c397f25722e0") + ) + (pin "5" + (uuid "1d47f2f9-72db-42ed-abe1-34e2e7d560f7") + ) + (pin "3" + (uuid "7a8dc2ae-608a-4c43-82b8-af2f0f38fa58") + ) + (pin "4" + (uuid "f9d1da98-9177-4de7-b47e-f804d8876cf0") + ) + (pin "18" + (uuid "e8c9fdcb-25c8-46a3-8d9e-f70fdc08c50d") + ) + (pin "19" + (uuid "16d28390-8940-426d-87af-83532376d3da") + ) + (pin "6" + (uuid "cb94d3bb-ef32-4973-a298-83774d011ad1") + ) + (pin "20" + (uuid "45f5023b-ee5c-48e1-ad7f-c27815b94a77") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:AD8307") + (at 255.27 181.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0913b0b9-534d-4ebf-9174-37399c24c55c") + (property "Reference" "U14" + (at 263.017 181.0329 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "AD8307" + (at 263.017 183.4571 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 258.445 185.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 259.08 187.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 255.27 181.61 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "584-AD8307ARZ-R7" + (at 255.27 181.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 255.27 181.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "ac9fe195-fcbb-487f-9bd9-02992b2600e4") + ) + (pin "2" + (uuid "aacc1e4d-6a2f-4885-b1bc-480752f260cf") + ) + (pin "7" + (uuid "ed8752be-53e8-4899-bc99-4973857669db") + ) + (pin "8" + (uuid "3fe98e2f-13b4-4109-8916-76e926980139") + ) + (pin "6" + (uuid "e1fac4cd-f5fe-43f1-b923-e07675e6af95") + ) + (pin "5" + (uuid "f5ac3b30-ec31-4260-b1e5-d9952f660fde") + ) + (pin "4" + (uuid "d78023a3-b930-4c8a-be8e-fda7ae5b4fc2") + ) + (pin "1" + (uuid "4a3ac5a1-5485-47d4-8630-1ee6b646c0d9") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U14") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xGxx:74LVC1G04") + (at 217.17 40.64 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0917cbda-c893-4f04-94f0-0db6d2147067") + (property "Reference" "U6" + (at 214.63 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SN74LVC1G04DCK" + (at 214.63 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:SOT-SC70" + (at 217.17 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 217.17 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 217.17 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "595-SN74LVC1G04DCKR" + (at 217.17 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 217.17 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "582de3d4-72a6-40d7-b7db-9c00411dc88b") + ) + (pin "4" + (uuid "d9919cae-8b1d-470a-8dd6-d2e38203e63b") + ) + (pin "3" + (uuid "034634c1-4454-426c-abe8-f7cc5d5bea83") + ) + (pin "5" + (uuid "b7c2bb94-71d9-4f14-a557-ea57625c1f9a") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Regulator_Linear:LM7805_TO220") + (at 364.49 199.39 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0b34f678-0701-46e7-963d-e744618882ac") + (property "Reference" "U11" + (at 364.49 193.3407 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM7805CT" + (at 364.49 195.7649 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 364.49 193.675 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.cn/PowerSolutions/document/MC7800-D.PDF" + (at 364.49 200.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 364.49 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "926-LM7805CT" + (at 364.49 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 364.49 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "101a8c63-52e6-402c-8a91-90fb746d5948") + ) + (pin "2" + (uuid "b3f5c98f-f65b-4680-b9f6-73df73b61c59") + ) + (pin "1" + (uuid "b627376c-162e-4cef-8b0e-05984d924c55") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:IDC_2x5") + (at 153.67 204.47 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0ba969a8-e177-4c4f-9dd4-218d7bff5b2a") + (property "Reference" "J24" + (at 154.94 193.9757 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LPF CTRL HI" + (at 154.94 196.3999 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x05_P2.54mm_Vertical" + (at 153.67 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 153.67 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 153.67 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 153.67 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "A-2939" + (at 153.67 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "9" + (uuid "77714322-13c9-4d7f-8470-bd02a293870b") + ) + (pin "5" + (uuid "7b04471e-401a-4226-96c1-8982a829491c") + ) + (pin "2" + (uuid "1d9c4c27-3629-46cc-961e-95a33c4fccbe") + ) + (pin "4" + (uuid "c0d32274-3c43-4c93-94c6-71c96bff374d") + ) + (pin "6" + (uuid "f47dba6c-ee25-4256-b438-30a3bd2a6218") + ) + (pin "10" + (uuid "59ee627e-7293-4b9c-a6f2-4e9a015b8826") + ) + (pin "7" + (uuid "96a67314-9d3c-4dd7-becc-37461234fe10") + ) + (pin "3" + (uuid "8bb361ab-3871-4e11-9472-4d0dd5832a9e") + ) + (pin "1" + (uuid "e3534dd8-77b5-418d-8f92-9e37b0eedb08") + ) + (pin "8" + (uuid "552eba44-cfe0-481b-8d54-d7c8670cec6f") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J24") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 175.26 218.44 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0cdfd970-a77c-43c4-a748-eb3cbba557cb") + (property "Reference" "#PWR0191" + (at 175.26 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 177.8 219.71 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 175.26 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 175.26 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 175.26 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "503249d6-fc87-46a3-a6f9-d647645953fc") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0191") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 171.45 144.78 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0ded12a4-a684-4de0-9787-0a859abfccb2") + (property "Reference" "#PWR0210" + (at 171.45 151.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 173.99 146.05 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 171.45 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 171.45 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 171.45 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "4734ea2e-0b8d-4b15-9e58-9a77cfe6f2fc") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0210") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 97.79 226.06 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0e0fc69b-b613-481f-b4b2-784057ad3b5a") + (property "Reference" "#PWR0184" + (at 97.79 229.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 97.79 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 97.79 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 97.79 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 97.79 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "665cbd6d-2970-4576-be34-2bd12813bd85") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0184") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 375.92 242.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0ebf704e-6619-4e82-b941-00e97a2e124e") + (property "Reference" "C136" + (at 378.841 241.3579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "1uF 50V" + (at 378.841 243.7821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 376.8852 246.38 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 375.92 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 375.92 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "187-CL31B105KBHNNNE" + (at 375.92 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 375.92 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a7812565-85b0-4a6f-a013-9b569e53d498") + ) + (pin "1" + (uuid "4d746b20-6030-4f1e-a6ac-aa2b9a43862b") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C136") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 237.49 184.15 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "10c4bd78-cf5d-427f-8ec4-380fe17476db") + (property "Reference" "#PWR015" + (at 237.49 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 240.03 186.69 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 237.49 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 237.49 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 237.49 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "833edb77-3bcb-4601-b2a1-fde4aab73cf4") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR015") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 229.87 237.49 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "11728d7c-918b-49ed-9ebb-94ae4da426cf") + (property "Reference" "L43" + (at 231.1373 236.2779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "22nH" + (at 231.1373 238.7021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 229.87 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 229.87 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 229.87 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 229.87 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 229.87 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8e7d1834-c1c7-4c5b-b2df-d2d0067c06b1") + ) + (pin "2" + (uuid "9aa43eec-24c9-438b-aac4-c7a55b848097") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L43") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 189.23 26.67 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "11ba8e50-02a2-433f-8611-7a93615745e3") + (property "Reference" "C8" + (at 189.23 33.02 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 187.96 30.48 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 193.04 27.6352 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 189.23 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 189.23 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 189.23 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 189.23 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "bc9f7b24-1fb4-44ef-a206-f8f08e83ebb8") + ) + (pin "1" + (uuid "259aab3a-d1a3-4b29-813a-82bffb19bbbe") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 132.08 29.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1216a767-f0a1-46c9-96bd-31c2287b523b") + (property "Reference" "#PWR0167" + (at 132.08 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 134.62 30.48 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 132.08 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 132.08 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 132.08 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "a6cf7f93-719c-4055-a6f6-d8e2df86eb1b") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0167") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 123.19 118.11 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "12eb632b-d7fa-47f3-b8c3-f60d7136338f") + (property "Reference" "J8" + (at 130.81 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "FROM 20W PA" + (at 137.16 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 123.19 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 123.19 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 123.19 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 123.19 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5d67871e-f574-450e-8bdf-a7cfb611064d") + ) + (pin "2" + (uuid "2e45f489-d965-4893-8759-2c2eb22c1ead") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 273.05 22.86 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "136f307e-9762-46e0-bf71-234e33dc9baa") + (property "Reference" "#PWR0179" + (at 273.05 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 275.59 24.13 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 273.05 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 273.05 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 273.05 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "84d1f542-08c2-4053-9945-330b74022a08") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0179") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:IRF630") + (at 335.28 124.46 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "14cd8dcf-1ccf-432e-8539-bae981cbf8f8") + (property "Reference" "Q1" + (at 340.487 123.2479 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "IRF630" + (at 339.09 127 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 340.36 126.365 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.st.com/resource/en/datasheet/cd00000701.pdf" + (at 340.36 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "" + (at 335.28 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "942-IRF630NPBF" + (at 335.28 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 335.28 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "4f2609a4-6e4a-4b79-8aaa-dacf66dea6e6") + ) + (pin "1" + (uuid "6920876c-0954-447e-ad4d-e1e7bf31c2c8") + ) + (pin "2" + (uuid "8d87fc72-3ba6-4975-8d7b-7f79146cad99") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "Q1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 82.55 218.44 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "14dbd2f2-d28b-43f8-8bfa-98e3f46c2d56") + (property "Reference" "#PWR037" + (at 82.55 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 85.09 219.71 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 82.55 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 82.55 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 82.55 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "788505e3-ecbe-4f08-80ea-c08511f5d88b") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR037") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 118.11 274.32 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "169518ea-f7e4-41a1-9326-cc0808d158e7") + (property "Reference" "#PWR0209" + (at 118.11 280.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 121.92 275.59 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 118.11 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 118.11 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 118.11 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "ddedff9c-65a4-419a-bf77-03bdebad22e9") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0209") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 88.9 91.44 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "17875128-51f8-4302-86cc-0f5d4e8de5c7") + (property "Reference" "C140" + (at 87.63 85.09 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 87.63 87.63 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 92.71 90.4748 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 88.9 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 88.9 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 88.9 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 88.9 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3bea99ff-abc7-4e53-9a8c-260e1b979814") + ) + (pin "1" + (uuid "7dca3ba1-79f9-40b9-857e-eb09513a16ef") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C140") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 302.26 110.49 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1919ff03-529a-4087-901f-6d114a1180e6") + (property "Reference" "C22" + (at 299.72 106.68 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 299.72 116.84 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 301.2948 106.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 302.26 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 302.26 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 302.26 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 302.26 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6332aa65-fa5c-493d-b562-951d02605c53") + ) + (pin "1" + (uuid "f5f37bd2-701d-4ec2-a607-90cc9d181fd3") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C22") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 226.06 220.98 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "193e0b6d-a8e3-4026-aa78-d716857e441d") + (property "Reference" "R22" + (at 226.06 223.52 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "~" + (at 226.06 223.7161 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 226.06 219.202 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 226.06 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 226.06 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "71-RCS1206499RFKEA" + (at 226.06 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 226.06 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d75ad621-443f-4f63-a1ac-8c3941e05846") + ) + (pin "1" + (uuid "e9d95ad6-a38c-4e56-a668-4dca846e83e2") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R22") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 229.87 194.31 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "19c1986d-1878-4610-ba1b-900eef89bc4f") + (property "Reference" "L38" + (at 231.1372 193.0979 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "22nH" + (at 231.1372 195.5221 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 229.87 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 229.87 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 229.87 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 229.87 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 229.87 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7c3209ea-acc7-4e36-9d27-5b646692fbc2") + ) + (pin "2" + (uuid "4c17124c-29a1-4492-999a-6f25a667cc24") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L38") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 154.94 57.15 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1d5d14e4-1791-4ae3-b835-3a65c6d77fdc") + (property "Reference" "C13" + (at 153.67 50.8 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 153.67 53.34 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 158.75 56.1848 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 154.94 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 154.94 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 154.94 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 154.94 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "9bbbe6ad-3867-48bf-b30f-1860682cdeee") + ) + (pin "1" + (uuid "518d6f73-757d-4d45-a8c8-186b7947ec1c") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 63.5 170.18 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2083c8e9-2aac-41f8-ac9d-af7c1f54b7e4") + (property "Reference" "C130" + (at 57.2658 168.91 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 59.69 168.91 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 62.5348 173.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 63.5 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 63.5 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 63.5 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 63.5 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "be803890-f99c-410a-a527-624e089818ea") + ) + (pin "1" + (uuid "fdf14b6b-54af-470c-923c-28a8f74cd393") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C130") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 19.05 259.08 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "20db30e2-41c7-4218-b471-a61590f1c409") + (property "Reference" "R2" + (at 20.32 259.08 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 16.51 259.08 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 19.05 260.858 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 19.05 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 19.05 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" " 71-CRCW12062K20JNEAC" + (at 19.05 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 19.05 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a5a31ce4-033b-4ad6-a5d7-06b033f5a261") + ) + (pin "1" + (uuid "f55bcc54-be82-44ad-8652-d4a5cc7fa40e") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 138.43 256.54 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "21db77e6-0bd2-4a3a-9d8f-52337298a53a") + (property "Reference" "#PWR0190" + (at 138.43 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 140.97 257.81 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 138.43 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 138.43 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 138.43 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "9244ba05-af20-427b-bf2c-5b8896d0ddff") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0190") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 57.15 187.96 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "223641a1-e38e-407e-82ce-8b72135e7925") + (property "Reference" "R9" + (at 53.34 185.42 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0" + (at 57.15 185.2239 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 57.15 189.738 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 57.15 187.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 57.15 187.96 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "667-ERJ-8GEY0R00V" + (at 57.15 187.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 57.15 187.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "218ef838-856d-4694-87bd-0637b14a900b") + ) + (pin "1" + (uuid "c7433dd5-22cc-444b-9b2f-de6e8d20cf0f") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 223.52 262.89 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "22a9ad09-09b9-45bc-ac46-ed32c785a9be") + (property "Reference" "R28" + (at 228.6803 262.89 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "52R3" + (at 226.2561 262.89 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 221.742 262.89 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 223.52 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 223.52 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "71-CRCW120649R9FKEAC" + (at 223.52 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 223.52 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3f0110a7-2113-4ef2-b2e4-9ac9e7ab0347") + ) + (pin "1" + (uuid "f8c94fea-02cf-4649-859d-5f3de2a7f560") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R28") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 300.99 162.56 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "236c0cdb-dd1c-48b6-aaeb-3b686d26107b") + (property "Reference" "R30" + (at 304.8 160.02 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0" + (at 300.99 159.8239 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 300.99 164.338 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 300.99 162.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 300.99 162.56 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "667-ERJ-8GEY0R00V" + (at 300.99 162.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 300.99 162.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b64923d3-9930-4b4a-a322-1bf28f8b0e00") + ) + (pin "1" + (uuid "70eaee0c-1a4c-48c3-a404-77163aac139a") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R30") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xGxx:74LVC1G04") + (at 48.26 86.36 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2372493b-d174-4f6c-bf93-df1feab39bce") + (property "Reference" "U22" + (at 50.8 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SN74LVC1G04DCK" + (at 50.8 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:SOT-SC70" + (at 48.26 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 48.26 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 48.26 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "595-SN74LVC1G04DCKR" + (at 48.26 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 48.26 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "cdf822b0-0baf-46aa-ada1-72603f7f1a28") + ) + (pin "4" + (uuid "0f8672dc-e6a9-4e5d-bb3c-7fb72c4e794c") + ) + (pin "3" + (uuid "14c3cdee-710a-46ab-b0d8-a53ee8329f5c") + ) + (pin "5" + (uuid "59ab9be2-ae45-44e3-9921-8e39e5fc6239") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U22") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 17.78 261.62 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "23edfb98-87b3-4a82-b95e-96619de4141e") + (property "Reference" "R3" + (at 19.05 261.62 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 17.78 264.16 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 17.78 263.398 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 17.78 261.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 17.78 261.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" " 71-CRCW12062K20JNEAC" + (at 17.78 261.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 17.78 261.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "db5aa2be-c523-46d4-a814-fc4c4ed42d2e") + ) + (pin "1" + (uuid "655f5563-4d6c-4437-ba9b-07cdc7862131") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 222.25 50.8 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "24f5e79e-dc30-4b73-a725-6a9d4b6528f0") + (property "Reference" "#PWR0178" + (at 222.25 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 219.71 52.07 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 222.25 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 222.25 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 222.25 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "e098d928-0a15-49dc-b55c-6aeb20294bc8") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0178") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 241.3 172.72 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "25d6b660-5812-46b3-9467-27bb16d8efa4") + (property "Reference" "C144" + (at 242.57 166.4858 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10nF 50V" + (at 242.57 168.91 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 237.49 171.7548 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 241.3 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 241.3 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "80-C1206C103K5R7210" + (at 241.3 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 241.3 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "9892f4af-a3d3-4380-b59d-78f9062c593b") + ) + (pin "1" + (uuid "e7675ffc-13b9-498d-8a20-241fe09db67d") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C144") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 132.08 154.94 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "26b01383-c8ff-4bb5-b756-353590fe0713") + (property "Reference" "#PWR039" + (at 132.08 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 128.27 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 132.08 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 132.08 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 132.08 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "ff2a7bf4-68bb-4855-96c0-b95707401a62") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR039") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 57.15 182.88 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "26dc92bc-eb5b-4896-a2ad-ff00e7a6bcbc") + (property "Reference" "R8" + (at 53.34 180.34 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0" + (at 57.15 180.1439 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 57.15 184.658 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 57.15 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 57.15 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "667-ERJ-8GEY0R00V" + (at 57.15 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 57.15 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "115c1103-3cee-4c7a-9e80-7ffe3f02db3c") + ) + (pin "1" + (uuid "0b415361-032e-46b7-8b5b-a1ff6cf374fd") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 231.14 72.39 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "28434148-834b-4318-8c7c-8c9dbb10db51") + (property "Reference" "C14" + (at 229.87 78.74 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1800pF 50V" + (at 229.87 76.2 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 234.95 73.3552 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 231.14 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 231.14 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "77-VJ1206A182JXACBC" + (at 231.14 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 231.14 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6086f346-d935-4050-8b7a-951f2ae688d3") + ) + (pin "1" + (uuid "bddc2dde-7cae-47bd-902b-eb9aa2b8d4fb") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C14") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xx:74HC237") + (at 97.79 241.3 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "2ad961af-a649-4841-b53c-04a73f7a9da2") + (property "Reference" "U2" + (at 99.9841 224.4557 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "74HC237" + (at 99.9841 226.8799 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_SO:SOIC-16_3.9x9.9mm_P1.27mm" + (at 97.79 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/symlink/cd74hc237.pdf" + (at 97.79 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 97.79 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "595-CD74HC237NSR" + (at 97.79 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 97.79 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "10" + (uuid "d88951b6-f36d-426a-a505-a069b77ca0f7") + ) + (pin "11" + (uuid "dc968e37-718a-4784-bef7-56328ffc635d") + ) + (pin "12" + (uuid "72db3fcb-f9e3-4e30-99dd-3602464b5278") + ) + (pin "13" + (uuid "2c1abc5c-2d5a-4fbb-a0b4-ce4d9a5d4514") + ) + (pin "14" + (uuid "edd59dd4-a123-4073-81ec-933237157418") + ) + (pin "3" + (uuid "430d2fbd-cd4d-4fc5-baf9-b3bd25dbba20") + ) + (pin "5" + (uuid "6a3f0b9b-ee01-4599-a688-4eed7061ad6d") + ) + (pin "6" + (uuid "38724814-fe1a-466e-80ab-a9b9419a5411") + ) + (pin "2" + (uuid "9dfdc54e-c16c-4ce9-95d2-a97304f84b47") + ) + (pin "1" + (uuid "c0da1630-cb15-42b9-b7b8-8c93093c13e2") + ) + (pin "8" + (uuid "6809cfdc-4e8a-4e98-ac86-220633bb6f13") + ) + (pin "9" + (uuid "19b9c396-3982-4679-a116-cb226aa1bfe2") + ) + (pin "16" + (uuid "d3ab214b-3c9a-4828-85bc-ff2098e7d868") + ) + (pin "4" + (uuid "f5ed603c-6d48-4f9e-9935-6ba96cb3eae5") + ) + (pin "15" + (uuid "584e0fa9-91f1-4052-b019-3615622da42c") + ) + (pin "7" + (uuid "7e3c6857-f82a-43a6-ace1-c3bd64e40851") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 222.25 30.48 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "2c90a46d-3d02-4da1-b2e7-3a99e9433a98") + (property "Reference" "#PWR0177" + (at 222.25 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 222.25 26.3469 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 222.25 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 222.25 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 222.25 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "51459822-6012-4232-a08c-60674db39dd5") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0177") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 295.91 110.49 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2ca006e2-974f-44d9-b4d7-d7149dcf549c") + (property "Reference" "C23" + (at 293.37 106.68 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 293.37 116.84 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 294.9448 106.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 295.91 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 295.91 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 295.91 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 295.91 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c430813c-8c84-4c2a-b9e8-c3e05b111f67") + ) + (pin "1" + (uuid "42c94420-427f-4128-b37b-aca6d022e267") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C23") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 344.17 87.63 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2db88b8a-ce42-4b36-a24c-d94d849d2743") + (property "Reference" "L37" + (at 345.4373 86.4179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "FB" + (at 345.4373 88.8421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 344.17 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 344.17 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 344.17 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" " 81-LQM31PN1R5M00L" + (at 344.17 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 344.17 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3d9be698-7285-4546-beae-8240f4591efb") + ) + (pin "2" + (uuid "334afe65-50df-4088-ae2a-778e811caadb") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L37") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 393.7 199.39 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "2e96aa61-2b76-4c7e-9b37-d2f2cded7cf1") + (property "Reference" "#PWR07" + (at 393.7 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 393.7 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 393.7 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 393.7 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 393.7 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "f637daf2-8db2-45ab-8627-1f60db1c2ce6") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR07") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 21.59 233.68 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2f18d44c-c2bb-474a-a488-8ecc18f69e7d") + (property "Reference" "#PWR0161" + (at 21.59 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 25.4 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 21.59 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 21.59 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 21.59 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "b6193082-d62d-4583-8dc2-c03e303ceba8") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0161") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 127 29.21 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "317d7046-9fdb-4a4a-b5cb-73b1b6fe85b8") + (property "Reference" "J15" + (at 124.46 34.29 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TO BPF" + (at 125.73 31.75 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 127 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 127 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 127 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 127 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 127 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "64e628a7-6a5b-4184-b094-d04052c2cfe7") + ) + (pin "2" + (uuid "82566dd3-a7ec-4853-a439-ad07a8ecf2bb") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 52.07 50.8 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "31aab50d-7701-4c3b-9493-1de0a153db85") + (property "Reference" "#PWR0176" + (at 52.07 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 54.61 52.07 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 52.07 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 52.07 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 52.07 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "86e0520b-7bd2-4d8f-9376-ca259f213829") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0176") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 323.85 134.62 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "32731081-4ef8-4495-a3e3-569bf410e47a") + (property "Reference" "#PWR0208" + (at 323.85 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 321.31 137.16 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 323.85 134.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 323.85 134.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 323.85 134.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "c6595626-a308-4bc7-a516-bd04bbdefd9c") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0208") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:REF3440IDBVR") + (at 303.53 234.95 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "32c219c1-e946-474d-9002-8f5993a5e8b3") + (property "Reference" "U17" + (at 313.69 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "REF3440IDBVR" + (at 321.31 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_SMD:SOT-23-6" + (at 309.245 256.54 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/ref3440.pdf" + (at 292.735 259.715 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 303.53 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "595-REF3440IDBVR" + (at 303.53 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 303.53 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "526ff440-0601-44f5-b55f-77b63360be06") + ) + (pin "6" + (uuid "288853b8-b675-46f8-a4c6-6b2d6d79ea0f") + ) + (pin "3" + (uuid "70082855-bd5c-42de-982b-c09ea28db4f8") + ) + (pin "4" + (uuid "8f453b01-eb6b-4cc0-a4e7-5eae05e00847") + ) + (pin "2" + (uuid "8e7f1759-dcfd-4400-bd28-49cb394702ba") + ) + (pin "1" + (uuid "088ab673-2220-4b2a-abd9-0c416304ca22") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U17") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C_Polarized") + (at 375.92 203.2 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "33c47b88-c8a2-4ca4-99f2-684871a74442") + (property "Reference" "C131" + (at 378.841 201.0989 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "220uF 16V" + (at 378.841 203.5231 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_THT:CP_Radial_D10.0mm_P5.00mm" + (at 376.8852 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 375.92 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 375.92 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "667-ECA-1EM221" + (at 375.92 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 375.92 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "33b9ca16-23a4-41b9-a97e-0ac6914fa9ac") + ) + (pin "1" + (uuid "b212a1bd-3cbe-4c6f-a2cc-c74f35a6dec5") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C131") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12P") + (at 328.93 199.39 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "340a6c6e-aeb4-4c9a-8337-5b9f811f50e7") + (property "Reference" "#PWR01" + (at 328.93 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12P" + (at 328.93 195.2569 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 328.93 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 328.93 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 328.93 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "3c751346-e322-40e9-9744-30c3f19cfa24") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR01") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 43.18 212.09 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "34f201a6-e559-4910-9507-3a580befb5df") + (property "Reference" "#PWR0160" + (at 43.18 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 46.99 209.55 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 43.18 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 43.18 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 43.18 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "6d37c2b6-4c29-40c6-bf13-1f26b8291f13") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0160") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Screw_Terminal_01x02") + (at 334.01 207.01 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3568515c-1102-4b5f-96c5-13ea4c49eb81") + (property "Reference" "J20" + (at 336.042 207.0679 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "12-13.8V" + (at 336.042 209.4921 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "TerminalBlock:TerminalBlock_bornier-2_P5.08mm" + (at 334.01 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 334.01 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 334.01 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 334.01 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "A-662" + (at 334.01 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "449350db-85a0-4692-b92c-b12070bbdf5c") + ) + (pin "2" + (uuid "12dae0e0-b5ac-4798-91fe-0371eb4bbf8c") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J20") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 256.54 72.39 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "37f71e59-a8bb-4771-a598-ac410c412df6") + (property "Reference" "C16" + (at 255.27 78.74 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1800pF 50V" + (at 255.27 76.2 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 260.35 73.3552 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 256.54 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 256.54 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "77-VJ1206A182JXACBC" + (at 256.54 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 256.54 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "df54d15f-13b1-441b-97ab-1c6c1cab8c49") + ) + (pin "1" + (uuid "b052cdd1-b787-4cd7-869e-c44ebfe875c9") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C16") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 139.7 157.48 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "38e475c5-da96-4e4c-b762-0fd0bf27ba1d") + (property "Reference" "#PWR040" + (at 139.7 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 142.24 158.75 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 139.7 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 139.7 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 139.7 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "414fbeac-460a-41be-9793-a1d7c98819fe") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR040") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_01x05_Socket") + (at 295.91 86.36 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "39380066-825d-450e-8300-5e2b79d46375") + (property "Reference" "J16.1" + (at 292.735 84.8543 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "ANTENNA" + (at 290.83 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x05_P2.54mm_Vertical" + (at 295.91 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 295.91 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 295.91 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 295.91 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "A-196" + (at 295.91 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "f49239e0-7fe7-4211-b719-0de33efc55b2") + ) + (pin "3" + (uuid "396c234c-ac0b-4935-92c2-4e7d5b875c38") + ) + (pin "1" + (uuid "1832c7a8-7801-45d3-bd37-f9b44a836ad5") + ) + (pin "2" + (uuid "798f9dca-88f4-47cc-87aa-b829b246d44a") + ) + (pin "5" + (uuid "3627a685-5ee7-4261-a819-930c5c7dd4f8") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J16.1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 259.08 168.91 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3964c3c0-65b9-4ada-b2f3-0bfe5430b464") + (property "Reference" "C137" + (at 262.89 167.64 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 262.89 165.1 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 262.89 167.9448 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 259.08 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 259.08 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 259.08 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 259.08 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "9a6d39ce-fd74-41e8-956a-f80bfcb57447") + ) + (pin "1" + (uuid "5839766e-5524-42fe-a1e6-dd2b7022ab8e") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C137") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 63.5 173.99 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "399c29d3-e7b9-4f43-9709-498715dac2cb") + (property "Reference" "#PWR036" + (at 63.5 180.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 66.04 175.26 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 63.5 173.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 63.5 173.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 63.5 173.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "8d531c90-4019-4c72-a670-2bec1bd0d83e") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR036") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 57.15 198.12 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3c4be7de-eca8-40d5-a2b4-01336fde2f4e") + (property "Reference" "R11" + (at 53.34 195.58 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0" + (at 57.15 195.3839 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 57.15 199.898 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 57.15 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 57.15 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "667-ERJ-8GEY0R00V" + (at 57.15 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 57.15 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1e22ccfe-ff25-404f-bf68-7570bb37ced1") + ) + (pin "1" + (uuid "297ef593-7a4f-4edb-aca0-25be2d5545fc") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 152.4 106.68 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3c8670a5-d568-4d81-9d28-f10e744479e9") + (property "Reference" "#PWR0198" + (at 152.4 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 154.94 107.95 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 152.4 106.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 152.4 106.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 152.4 106.68 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "9f871952-1b3a-4366-9aa6-490cb5b733a7") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0198") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 167.64 227.33 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3d678dd4-22ac-4ab2-8e8e-eba6ec3f8a07") + (property "Reference" "C2" + (at 163.83 227.33 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 165.1 220.98 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 166.6748 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 167.64 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 167.64 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 167.64 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 167.64 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "2959fb40-3f5e-48d5-9164-50fc8230b60d") + ) + (pin "1" + (uuid "f8a7090d-ebfd-4b3c-b40d-b850ac5d6454") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 222.25 194.31 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3db41311-1785-4602-8cca-176c20037401") + (property "Reference" "L40" + (at 223.5172 193.0979 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "22nH" + (at 223.5172 195.5221 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 222.25 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 222.25 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 222.25 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 222.25 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 222.25 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c313a8d1-7c13-48ad-8d4c-83052e4535e0") + ) + (pin "2" + (uuid "70ff6047-4908-438a-a157-58b71ad49b66") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L40") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 80.01 26.67 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3e92e4bb-ecf2-4437-a847-2fb0299fad4b") + (property "Reference" "C1" + (at 78.74 20.32 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 78.74 22.86 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 76.2 25.7048 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 80.01 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 80.01 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 80.01 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 80.01 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3ecd3798-3b26-472b-bc16-2cf0c278cd49") + ) + (pin "1" + (uuid "c9353b09-9ec4-4cbc-ba20-487547e65c58") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Relay:Relay_SPDT") + (at 321.31 46.99 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3edaa41e-4ceb-483f-9b9c-e9eb5bbfcd2e") + (property "Reference" "K6" + (at 327.66 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "HF41F/12-ZS" + (at 330.2 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" + (at 322.58 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 321.31 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 321.31 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 321.31 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 321.31 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "A1" + (uuid "c58f7bc1-6091-410d-9ce6-b1cb2b8956c4") + ) + (pin "12" + (uuid "3d535e6c-c655-4da4-b194-f8c21d58ef6a") + ) + (pin "14" + (uuid "7ed55918-f9fa-4304-9fe4-0c763f9bbf98") + ) + (pin "A2" + (uuid "025142c0-67ff-4a69-a203-332b9a77df82") + ) + (pin "11" + (uuid "cd161ff1-c559-43f2-a6c6-2102be3eda22") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 80.01 59.69 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3f2f7e9b-eb1e-4005-abd8-b3bf3eb30115") + (property "Reference" "C20" + (at 78.74 66.04 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 78.74 63.5 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 83.82 60.6552 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 80.01 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 80.01 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 80.01 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 80.01 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "8b8b53cf-7d31-4355-8b12-fa85d5128571") + ) + (pin "1" + (uuid "6c519498-3dd2-40e3-af90-fdc5f0b4ab35") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C20") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 262.89 212.09 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3fda2902-8337-435f-9bf9-c48eda402183") + (property "Reference" "#PWR020" + (at 262.89 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 265.43 213.36 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 262.89 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 262.89 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 262.89 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "93745f5a-4d0f-421c-b721-97e84b9e7106") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR020") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 158.75 220.98 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "40823642-4680-4213-b39d-07ee02700171") + (property "Reference" "#PWR0189" + (at 158.75 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 161.29 222.25 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 158.75 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 158.75 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 158.75 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "5765830b-e31b-47f2-9fad-4843aa74909d") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0189") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 251.46 168.91 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "40f6c421-a661-428e-8f18-0ef30f994055") + (property "Reference" "L36" + (at 251.46 164.8927 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "FB" + (at 251.46 167.3169 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 251.46 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 251.46 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 251.46 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" " 81-LQM31PN1R5M00L" + (at 251.46 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 251.46 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "dfbb859c-909b-45e4-a465-6a5beb49dffd") + ) + (pin "2" + (uuid "bdc29cbc-8b63-49fb-b8e1-f8a1fdb1e219") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L36") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 267.97 22.86 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "410ec8b5-c212-4973-8261-c7a0903803c2") + (property "Reference" "J11" + (at 269.24 16.51 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "ANT-1" + (at 270.51 19.05 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 267.97 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 267.97 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 267.97 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 267.97 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 267.97 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "2010209c-04ca-4586-a7b5-909540992384") + ) + (pin "2" + (uuid "c5a4da9b-54ed-498b-a2cd-aa48ac87808b") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 187.96 144.78 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "415fa270-98bc-413d-812b-7a6a98a1f6ce") + (property "Reference" "#PWR0211" + (at 187.96 151.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 190.5 146.05 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 187.96 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 187.96 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 187.96 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "fc366dd3-86dc-41bb-91f6-f5bc04fd70e1") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0211") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 281.94 101.6 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "41c5326a-700d-444d-bbf6-eddd3b662e8b") + (property "Reference" "#PWR0205" + (at 281.94 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 279.4 104.14 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 281.94 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 281.94 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 281.94 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "caa788db-883e-423f-bfb2-b643dd4724c0") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0205") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 165.1 247.65 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "42be312e-929f-4543-994a-2843d2142ec5") + (property "Reference" "C11" + (at 171.45 247.65 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 168.91 246.38 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 166.0652 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 165.1 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 165.1 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 165.1 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 165.1 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d1b1c364-e9d5-4a01-b352-3e5727090b97") + ) + (pin "1" + (uuid "3a6b843f-03e9-47f7-9757-a0e202b46dcd") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 287.02 238.76 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "443ffa27-1cd5-4c70-97b8-e493d1bdd8ba") + (property "Reference" "C145" + (at 288.29 242.57 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10uF 50V" + (at 290.83 241.3 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 287.9852 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 287.02 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 287.02 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "80-C1206C106K4P" + (at 287.02 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 287.02 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "27bcc349-bfdc-47c2-9a25-354fb2f1d9cb") + ) + (pin "1" + (uuid "5a635948-a268-42ac-b6bb-b2c5d74370a8") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C145") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 237.49 149.86 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "459f784d-79c2-4056-ad7f-c10e9d245ad8") + (property "Reference" "C149" + (at 243.7242 148.59 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10nF 50V" + (at 241.3 148.59 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 238.4552 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 237.49 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 237.49 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "80-C1206C103K5R7210" + (at 237.49 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 237.49 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1e3ca6d3-b0d4-4d93-a267-a5f2fd302afb") + ) + (pin "1" + (uuid "a9df2dfd-e097-4e6f-a55a-e7f197f65fab") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C149") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 336.55 22.86 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "45f268f3-cc85-4c5b-a505-e8ade2811cb0") + (property "Reference" "J14" + (at 337.82 16.51 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "ANT-4" + (at 339.09 19.05 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 336.55 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 336.55 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 336.55 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 336.55 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 336.55 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "87c30232-e8ca-4384-84ea-21cef4463c83") + ) + (pin "2" + (uuid "2d25bcd0-b159-49d3-9edf-73eb5aac56cc") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J14") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 237.49 223.52 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "482171af-b6dd-405d-98ab-bd949d19347f") + (property "Reference" "R21" + (at 242.6503 223.52 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "52R3" + (at 240.2261 223.52 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 235.712 223.52 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 237.49 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 237.49 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "71-CRCW120649R9FKEAC" + (at 237.49 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 237.49 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b2b4ffd1-ad55-4bed-a43f-9b7395d54ea6") + ) + (pin "1" + (uuid "319be5c1-698f-46a3-b279-78232198958d") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R21") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 20.32 256.54 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4847599b-286b-4c02-a075-bd84996c60db") + (property "Reference" "R1" + (at 21.59 256.54 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 21.59 254 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 20.32 258.318 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 20.32 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 20.32 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" " 71-CRCW12062K20JNEAC" + (at 20.32 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 20.32 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "10068471-5da8-4a64-b045-6b45af9359b3") + ) + (pin "1" + (uuid "2fb3db7f-7db7-4994-9b28-ecd69361cc2f") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 173.99 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "49fa4929-ea42-4dec-bb1f-0fb1654cefde") + (property "Reference" "#PWR0202" + (at 173.99 132.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 170.18 127 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 173.99 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 173.99 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 173.99 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "ca279e8c-248b-4feb-91c5-c0a9c0d8d876") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0202") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 43.18 270.51 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4a4da249-3718-49ed-aad1-56091b115ff0") + (property "Reference" "#PWR0162" + (at 43.18 276.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 45.72 271.78 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 43.18 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 43.18 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 43.18 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "a3c81d69-43e1-43d0-9e8b-faf446b4a66f") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0162") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Regulator_Linear:LM1117T-3.3") + (at 364.49 220.98 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4a79cb44-9a77-4ad8-81f6-c897fd226c96") + (property "Reference" "U16" + (at 364.49 214.9307 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM1117T-3.3" + (at 364.49 217.3549 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 364.49 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/symlink/lm1117.pdf" + (at 364.49 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 364.49 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "926-LM1117T-3.3/NOPB" + (at 364.49 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 364.49 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "3f9d6572-6bce-432d-9882-9fc9c041015c") + ) + (pin "2" + (uuid "2b0255b9-6b7c-455a-9ef3-564fea18a5b6") + ) + (pin "1" + (uuid "69e849c1-e95c-42e6-981f-53fc83ff3b25") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U16") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 226.06 172.72 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4b208f84-dce2-4899-8f5c-f2beac43396c") + (property "Reference" "C147" + (at 227.33 166.4858 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10pF 50V" + (at 227.33 168.91 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 222.25 171.7548 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 226.06 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 226.06 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-KGM31BCG1H102JT" + (at 226.06 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 226.06 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "9b291668-b81d-45f7-a746-c8939e3011d0") + ) + (pin "1" + (uuid "5ebaf12f-8c3f-44df-9ba7-77764ddb102a") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C147") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 381 207.01 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4bb3ce95-d120-4e18-b66a-dfb07b749b04") + (property "Reference" "#PWR05" + (at 381 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 381 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 381 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 381 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 381 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "3c663e2f-ea81-4805-bdd4-50312c62d084") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR05") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 330.2 118.11 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4c1b1e2e-346b-4191-807f-bed8dad7b75f") + (property "Reference" "R7" + (at 325.0397 118.11 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10k" + (at 327.4639 118.11 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 331.978 118.11 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 330.2 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 330.2 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "652-CR1206JW-103ELF" + (at 330.2 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 330.2 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5c4dcfc5-3bc5-4cf3-9b42-91fca08aa652") + ) + (pin "1" + (uuid "24aebcf3-fde4-4ab1-826b-3ea997072bd8") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Jumper:SolderJumper_2_Open") + (at 29.21 273.05 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4e576422-750c-4805-a94a-b8b0944d1daf") + (property "Reference" "JP2" + (at 29.21 270.4409 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SolderJumper_2_Open" + (at 29.21 270.4409 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm" + (at 29.21 273.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 29.21 273.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 29.21 273.05 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 29.21 273.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 29.21 273.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "791a88b9-7b34-4440-8c55-9f6897981474") + ) + (pin "1" + (uuid "d144258b-60e9-4887-9a1e-806b77a300ff") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "JP2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 273.05 153.67 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4e642537-2219-44a2-8b08-224bac9f4e89") + (property "Reference" "R26" + (at 278.2103 153.67 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10k" + (at 275.7861 153.67 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 271.272 153.67 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 273.05 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 273.05 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "652-CR1206JW-103ELF" + (at 273.05 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 273.05 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "05dccecf-54ae-46e8-afb4-449e601da2f8") + ) + (pin "1" + (uuid "a2949c14-39e8-48ba-9df4-1212b54c3e9b") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R26") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 226.06 215.9 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4eaf0efb-17af-4096-a4f1-bf289375d643") + (property "Reference" "C154" + (at 227.33 209.6658 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10pF 50V" + (at 227.33 212.09 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 222.25 214.9348 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 226.06 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 226.06 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-KGM31BCG1H102JT" + (at 226.06 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 226.06 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "4118d6c6-540c-4e7d-82e1-12cbafd6af75") + ) + (pin "1" + (uuid "ff6a1be4-b593-414b-ad03-61537750ce5a") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C154") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 290.83 22.86 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4eeedada-ce8b-4ae1-bab7-9e1606d6f068") + (property "Reference" "J12" + (at 292.1 16.51 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "ANT-2" + (at 293.37 19.05 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 290.83 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 290.83 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 290.83 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 290.83 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 290.83 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7fca9250-f87a-4165-869e-64b9a4c29cd2") + ) + (pin "2" + (uuid "7122c39f-37cf-417d-96f4-ebc2edb15949") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J12") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C_Polarized") + (at 393.7 242.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4fff41bc-aa63-43fd-9b42-89cbac213387") + (property "Reference" "C134" + (at 396.621 240.4689 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "220uF 16V" + (at 396.621 242.8931 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_THT:CP_Radial_D10.0mm_P5.00mm" + (at 394.6652 246.38 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 393.7 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 393.7 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "667-ECA-1EM221" + (at 393.7 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 393.7 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f26234c3-c727-4fb4-ad45-42cfd8a6d017") + ) + (pin "1" + (uuid "a799a2f9-6ae7-48c6-aaec-adfa90b67e3e") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C134") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 52.07 30.48 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5275cba9-f1e0-4746-8458-96f85c4b061d") + (property "Reference" "#PWR0175" + (at 52.07 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 52.07 26.3469 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 52.07 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 52.07 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 52.07 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "43664dee-f6e2-40b6-932a-7a11314c106f") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0175") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 190.5 227.33 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "538d9bcf-4c23-45c0-9c37-b71461f112ed") + (property "Reference" "C5" + (at 186.69 227.33 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 187.96 220.98 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 189.5348 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 190.5 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 190.5 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 190.5 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 190.5 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "dc18ef2e-a444-437a-bf92-c7e522b15df7") + ) + (pin "1" + (uuid "ba28fd1f-d1d0-4136-b426-95c133fd48b6") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 232.41 266.7 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5410a56b-2ae3-4350-8978-1e4429414a00") + (property "Reference" "#PWR023" + (at 232.41 273.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 236.22 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 232.41 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 232.41 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 232.41 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "8a27814f-95a9-462d-9e79-f3760fee2f4c") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR023") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xGxx:74LVC1G04") + (at 57.15 40.64 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "541ea191-4bc3-4dff-bae4-ff5099a3df8e") + (property "Reference" "U5" + (at 59.69 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SN74LVC1G04DCK" + (at 59.69 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:SOT-SC70" + (at 57.15 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 57.15 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 57.15 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "595-SN74LVC1G04DCKR" + (at 57.15 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 57.15 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "06fe2027-7b39-4ffd-9cd6-ab99bca4cc5f") + ) + (pin "4" + (uuid "f942ec6a-38d9-44c5-9be6-c29fc1b0aa84") + ) + (pin "3" + (uuid "f1793e19-c99a-439a-8afe-588f394ff26c") + ) + (pin "5" + (uuid "b49ff8e6-d1af-4f35-8413-6b4155cf9382") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 226.06 242.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "561e7b0e-2295-4402-9d75-498e3d6fec1a") + (property "Reference" "#PWR016" + (at 226.06 248.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 228.6 245.11 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 226.06 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 226.06 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 226.06 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "48c8277e-2cb3-4556-9eab-2bda1012c3ab") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR016") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 256.54 67.31 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5769f591-e475-4e00-8851-22e3a09b2747") + (property "Reference" "C25" + (at 252.73 66.04 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100pF 50V" + (at 255.27 63.5 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 260.35 66.3448 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 256.54 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 256.54 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "710-885012008043" + (at 256.54 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 256.54 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "269ecfe6-d8c9-4691-97a0-d8f3e82c872a") + ) + (pin "1" + (uuid "a8870a2f-9845-4bb5-9517-17e3fabf69b5") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C25") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 106.68 91.44 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "57c5a781-f24b-4b3b-bbd7-8fbb68ce065c") + (property "Reference" "J6" + (at 114.3 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TO XVTR" + (at 110.49 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 106.68 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 106.68 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 106.68 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 106.68 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 106.68 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e38c8a98-0837-4137-865e-6541607f0d73") + ) + (pin "2" + (uuid "3838473e-a27d-4e40-ae4c-3f21c368aee6") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+8V") + (at 303.53 226.06 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "593d99bf-3433-4658-b267-b8c73ec5c7d7") + (property "Reference" "#PWR030" + (at 303.53 229.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+8V" + (at 303.53 221.9269 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 303.53 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 303.53 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 303.53 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "b66de7e3-969e-42c3-a939-f4d9f2c530dd") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR030") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_01x05_Socket") + (at 284.48 93.98 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5abca735-d48d-473f-b8fe-82cfaf19ac15") + (property "Reference" "J17.2" + (at 284.48 89.8865 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "TR CTL" + (at 284.48 92.3107 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x05_P2.54mm_Vertical" + (at 284.48 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 284.48 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 284.48 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 284.48 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 284.48 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "88974215-479d-4a0f-9013-c095385a0884") + ) + (pin "3" + (uuid "ec3d2248-adbe-4afd-8d53-ed67d03f4660") + ) + (pin "1" + (uuid "766f8ce9-acdd-40e6-abc3-7c257b3faa48") + ) + (pin "2" + (uuid "f14e499d-84dc-4c64-bfae-f0b7f52b0341") + ) + (pin "5" + (uuid "da6ddd86-c0a8-41ad-9cb2-551cc207d3bc") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J17.2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_01x05_Socket") + (at 284.48 78.74 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5be94003-8141-4a3e-83ac-4ffbf8bfa389") + (property "Reference" "J17.1" + (at 281.94 80.01 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "RECEIVE" + (at 280.67 82.55 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x05_P2.54mm_Vertical" + (at 284.48 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 284.48 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 284.48 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 284.48 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 284.48 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "06bfa4c2-4df9-4b88-8fd2-2e772fd49ca7") + ) + (pin "3" + (uuid "fb1cafa7-b3c6-4080-aad1-436d9b6c2103") + ) + (pin "1" + (uuid "01f5fa4d-5212-4d22-96e8-2514a12e7106") + ) + (pin "2" + (uuid "f5f7ca88-c990-418c-993d-9635dd82b287") + ) + (pin "5" + (uuid "119e267f-74d1-441d-819e-4d5f436b1fcb") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J17.1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:ULN2803C") + (at 121.92 168.91 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5c257567-2533-454d-9f4b-dff669d01be6") + (property "Reference" "U9" + (at 121.92 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "ULN2803C" + (at 121.92 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-20W_7.5x12.8mm_P1.27mm" + (at 123.19 185.42 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/uln2803c.pdf" + (at 125.73 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 121.92 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "7" + (uuid "d08691d5-f414-467b-ac34-f55012f80bc2") + ) + (pin "17" + (uuid "1af609d6-97a7-4cf8-9a88-d8f0dadb8975") + ) + (pin "8" + (uuid "4f1501be-d39d-42fa-bedb-34a94f745b65") + ) + (pin "15" + (uuid "4d11193c-d836-4fcc-bdea-7ae93cb01029") + ) + (pin "14" + (uuid "a3f6a79c-64e5-4dae-a12b-58c288588be5") + ) + (pin "2" + (uuid "502837cd-43f3-47ac-afdb-548f369dbe82") + ) + (pin "13" + (uuid "a55a1e72-8a1e-4c35-9670-a385111cb387") + ) + (pin "16" + (uuid "858f0b34-f641-417c-9f5e-4506ce014796") + ) + (pin "1" + (uuid "752f626e-64fc-4615-b62a-7351439487b8") + ) + (pin "9" + (uuid "2aceb8e2-bc59-4155-9f97-3ef56533b723") + ) + (pin "12" + (uuid "b5c8a9ab-7b3e-4590-aab0-10b178dbf21a") + ) + (pin "11" + (uuid "b7c97a2b-5976-48f2-8568-4c335b97c51a") + ) + (pin "10" + (uuid "0566b2fe-836e-4263-aa1f-089d6125384f") + ) + (pin "5" + (uuid "de76c0cc-c32f-4da4-817f-566ef9853d8d") + ) + (pin "3" + (uuid "22b9b98e-5f5c-4a53-aba5-a294ede285b4") + ) + (pin "4" + (uuid "9cb8c576-66cf-427e-9182-f01920318cd4") + ) + (pin "18" + (uuid "6e3314de-27f0-4ff7-93d2-4c50c15c2243") + ) + (pin "19" + (uuid "0b9c6ac1-66a4-4774-9b2d-44934930c1dd") + ) + (pin "6" + (uuid "d2d92d3b-1ee8-4f15-8383-5c13407efa5c") + ) + (pin "20" + (uuid "db5b7192-3800-46a6-8466-76cc2642631b") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 375.92 228.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5caacca5-f06d-41ae-921a-3b9e5df07eb9") + (property "Reference" "#PWR06" + (at 375.92 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 375.92 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 375.92 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 375.92 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 375.92 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "93fc3007-4899-4ced-b6e4-422ec4752e6a") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR06") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 292.1 193.04 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5f9183b6-49ae-4052-8470-edc0a474947f") + (property "Reference" "L39" + (at 292.1 189.0227 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "FB" + (at 292.1 191.4469 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 292.1 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 292.1 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 292.1 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" " 81-LQM31PN1R5M00L" + (at 292.1 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 292.1 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5a9a7ecb-a6c9-4003-9fd0-cf9fbabf077e") + ) + (pin "2" + (uuid "fda3e56c-2667-4cea-a7af-528e7f780892") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L39") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+8V") + (at 393.7 238.76 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5fac8e82-25bf-4c62-b090-7a979ccc9c4b") + (property "Reference" "#PWR010" + (at 393.7 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+8V" + (at 393.7 234.6269 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 393.7 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 393.7 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 393.7 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "0e64944e-5a86-43a9-a40a-e90a4777656c") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR010") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 344.17 106.68 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5febb07b-2636-4d6d-8bfb-0628bde0d495") + (property "Reference" "#PWR032" + (at 344.17 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 340.36 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 344.17 106.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 344.17 106.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 344.17 106.68 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "caa2d8ec-3090-4f4d-903e-9f4a0faed62a") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR032") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 135.89 154.94 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "616aef70-ecba-458d-87a5-2f8946805a59") + (property "Reference" "C128" + (at 142.24 151.13 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 142.24 153.67 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 139.7 153.9748 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 135.89 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 135.89 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 135.89 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 135.89 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6f3d0c2e-0ac8-4f27-bf4d-dce7eac7e866") + ) + (pin "1" + (uuid "51864356-864a-40be-bba9-6d9adc29e986") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C128") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 251.46 212.09 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "6308f1aa-0188-4ff7-bd09-0d38cdf81a67") + (property "Reference" "L41" + (at 251.46 208.0727 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "FB" + (at 251.46 210.4969 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 251.46 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 251.46 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 251.46 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" " 81-LQM31PN1R5M00L" + (at 251.46 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 251.46 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4c0372ef-024a-4194-b328-bce1d8a509c5") + ) + (pin "2" + (uuid "acef6cc1-9334-4676-9f0b-a7400877cc1c") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L41") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:6_pin_transformer") + (at 212.09 205.74 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "65eef4ac-daca-4b6a-b8f6-13089fea049f") + (property "Reference" "L44" + (at 202.565 204.5279 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "6_pin_transformer" + (at 198.12 181.61 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:Toroid_6Pin_BinocularCore_13.3mm_14.35mm" + (at 212.09 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 212.09 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 212.09 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 212.09 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 212.09 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "34a4d24f-c7a1-48de-8702-3143e1e763d7") + ) + (pin "4" + (uuid "f0923187-0fe6-4a85-b206-8e4231f121c4") + ) + (pin "6" + (uuid "6591d1c2-c376-4c96-ba13-7997a3c340ff") + ) + (pin "1" + (uuid "61dbac60-f937-4383-8783-50433eeebe6d") + ) + (pin "2" + (uuid "e8238ee1-c60b-47f6-b77b-d6c2308e0368") + ) + (pin "3" + (uuid "757b4cba-bb4a-4330-a46e-01eef82b1e12") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L44") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 238.76 262.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "66b81706-f124-495a-94ea-bd24686973eb") + (property "Reference" "C156" + (at 244.9942 261.62 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10nF 50V" + (at 242.57 261.62 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 239.7252 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 238.76 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 238.76 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "80-C1206C103K5R7210" + (at 238.76 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 238.76 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "2c68164b-d0e9-4aa6-8c07-55460416f721") + ) + (pin "1" + (uuid "c9ff767f-5c37-4c27-bd45-82c66ef1b128") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C156") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 121.92 224.79 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "66cd22d3-2094-4bf0-be50-d6e28e338d65") + (property "Reference" "#PWR042" + (at 121.92 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 124.46 226.06 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 121.92 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 121.92 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 121.92 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "3e705da3-930c-45e0-9e17-3de9d0248179") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR042") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 241.3 215.9 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "67874294-3f28-4654-bec0-ded85c2985c2") + (property "Reference" "C155" + (at 242.57 209.6658 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10nF 50V" + (at 242.57 212.09 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 237.49 214.9348 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 241.3 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 241.3 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "80-C1206C103K5R7210" + (at 241.3 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 241.3 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5bb7bdf7-d3af-4266-8bd1-a7ff92c7a799") + ) + (pin "1" + (uuid "251276b6-62e6-47d2-9f94-2985ca43121b") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C155") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 247.65 168.91 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "679ae5ce-5ced-4e62-948f-e52e59210a1b") + (property "Reference" "#PWR012" + (at 247.65 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 247.65 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 247.65 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 247.65 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 247.65 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "800b4c6b-26d4-4b45-b348-15f404fa4b61") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR012") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Regulator_Linear:L7808") + (at 365.76 238.76 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "690d45e6-c717-4c7a-8d26-bbdeebeac650") + (property "Reference" "U13" + (at 365.76 232.7107 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "L7808" + (at 365.76 235.1349 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 366.395 242.57 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "http://www.st.com/content/ccc/resource/technical/document/datasheet/41/4f/b3/b0/12/d4/47/88/CD00000444.pdf/files/CD00000444.pdf/jcr:content/translations/en.CD00000444.pdf" + (at 365.76 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 365.76 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "511-L7808ACV-DG" + (at 365.76 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 365.76 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "11fd84c6-7299-4c3d-9cf7-f0c359637600") + ) + (pin "3" + (uuid "59e7b796-4098-432e-9e82-a73540fb5a78") + ) + (pin "1" + (uuid "45968b74-f2ad-4604-a538-acfd60a61d37") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 300.99 167.64 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6bb850e0-cb8f-4572-a983-8d726b9c146c") + (property "Reference" "R23" + (at 304.8 165.1 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0" + (at 300.99 164.9039 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 300.99 169.418 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 300.99 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 300.99 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "667-ERJ-8GEY0R00V" + (at 300.99 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 300.99 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "4386bf91-5cfe-4bb1-8752-147402c93997") + ) + (pin "1" + (uuid "29299c46-31c4-410f-8005-c44a08b46124") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R23") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 337.82 199.39 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "6cb19416-29aa-457e-b05d-ef93bf3c873d") + (property "Reference" "L200" + (at 337.82 194.7404 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10uH 20%" + (at 337.82 197.1646 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Inductor_SMD:L_Coilcraft_XAL7020-102" + (at 337.82 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 337.82 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 337.82 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "81-1264EY-100MP3" + (at 337.82 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 337.82 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6950363f-771a-4a3b-b147-ba4001fd8035") + ) + (pin "2" + (uuid "8689a10c-ef1f-417a-b5de-c90bc313fd93") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L200") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 199.39 31.75 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6d0a6f13-cbf2-46d2-9995-0ce0b3512ab3") + (property "Reference" "#PWR0165" + (at 199.39 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 201.93 33.02 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 199.39 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 199.39 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 199.39 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "497eb7ff-735e-4f53-ac1b-68800633dee3") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0165") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Transistor_FET:2N7000") + (at 321.31 129.54 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6e6816e5-35c0-4537-bc9f-cfe4faf18a2a") + (property "Reference" "Q2" + (at 326.517 128.3279 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "2N7000" + (at 326.517 130.7521 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-92_Inline" + (at 326.39 131.445 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.vishay.com/docs/70226/70226.pdf" + (at 326.39 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "" + (at 321.31 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "512-2N7000D26Z" + (at 321.31 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 321.31 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "322d193c-280c-40fe-bde2-ca8d116e97c2") + ) + (pin "2" + (uuid "de9935db-96be-4c5e-ba66-469b66c8592c") + ) + (pin "3" + (uuid "1c18165b-3abd-429c-8d1f-ca96b562c9bd") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "Q2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 295.91 22.86 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6fa3c2c3-a5c4-479e-b770-c94c9504261c") + (property "Reference" "#PWR0180" + (at 295.91 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 298.45 24.13 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 295.91 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 295.91 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 295.91 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "13a9793f-3f3f-478a-8f51-552e71d99031") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0180") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 167.64 39.37 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7025da18-32fb-4198-9ffd-43dfcb248894") + (property "Reference" "#PWR0166" + (at 167.64 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 170.18 40.64 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 167.64 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 167.64 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 167.64 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "09c4b254-4cf5-4f5d-bb1d-0103bef2be7c") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0166") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 187.96 139.7 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7058378f-4672-415f-8cb2-7a430b889239") + (property "Reference" "J23" + (at 195.58 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "FROM LPF" + (at 201.93 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 187.96 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 187.96 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 187.96 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 187.96 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 187.96 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c3d5af80-19c2-454b-8e66-7ebd90f32ea3") + ) + (pin "2" + (uuid "e2bc324b-67b6-495b-be77-67df2e40144a") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J23") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 295.91 226.06 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7138cc0f-c1a8-4de8-ab89-f1317a461de6") + (property "Reference" "C146" + (at 292.1 224.79 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1uF 50V" + (at 294.64 222.25 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 299.72 225.0948 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 295.91 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 295.91 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "187-CL31B105KBHNNNE" + (at 295.91 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 295.91 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "aad00be7-03c8-46e5-854a-be033247d05e") + ) + (pin "1" + (uuid "08684ce2-9f94-4250-9702-7513bccdacb5") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C146") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 160.02 104.14 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "731a5b61-429c-4d65-8f0a-7cf68602e422") + (property "Reference" "J9" + (at 158.75 97.79 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TO 100W PA" + (at 154.94 100.33 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 160.02 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 160.02 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 160.02 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 160.02 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 160.02 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "9cb00384-3071-4ed1-8219-96984b4de600") + ) + (pin "2" + (uuid "3de3e0bf-5992-4ff0-a11d-a47bf5a0a05d") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 69.85 31.75 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7487de4c-9431-4f01-8898-a65dc273f893") + (property "Reference" "#PWR0169" + (at 69.85 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 67.31 33.02 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 69.85 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 69.85 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 69.85 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "41741fc2-6237-4880-9401-8d37c67967f7") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0169") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 116.84 62.23 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7598f7d5-1662-4cca-baef-98fe41f72cce") + (property "Reference" "C17" + (at 116.84 67.31 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 116.84 69.85 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 120.65 61.2648 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 116.84 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 116.84 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 116.84 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 116.84 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f8c76291-b026-4dbc-84ee-9c4b46b8f6bc") + ) + (pin "1" + (uuid "3741a913-6379-4b68-bd10-22c957fe05e7") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C17") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 229.87 228.6 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "76cf3948-9f33-44e1-b4a0-9345fcce8bdc") + (property "Reference" "R24" + (at 232.41 228.6 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "~" + (at 232.6061 228.6 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 228.092 228.6 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 229.87 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 229.87 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "755-SFR18EZPF56R0" + (at 229.87 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 229.87 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "4bf6f5dc-c68c-4ece-a500-5fed39e79ae0") + ) + (pin "1" + (uuid "f7953ea3-4b81-48b6-af7e-5d1752aa4d12") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R24") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 355.6 203.2 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "775e66fc-124b-41b4-b448-542076f4d675") + (property "Reference" "C132" + (at 352.679 201.9879 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "1uF 50V" + (at 352.679 204.4121 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 354.6348 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 355.6 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 355.6 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "187-CL31B105KBHNNNE" + (at 355.6 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 355.6 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f338a826-3d09-4171-a495-8f30b9618d24") + ) + (pin "1" + (uuid "dc6a60e3-c29f-4d97-9777-cb9a8141ec99") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C132") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 171.45 139.7 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7bae119e-6159-47a7-8ff1-b28a9210b260") + (property "Reference" "J16" + (at 163.83 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TO LPF" + (at 162.56 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 171.45 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 171.45 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 171.45 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 171.45 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 171.45 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "9a1d29c5-e858-4df6-88db-6c15eaa40adb") + ) + (pin "2" + (uuid "41a56bdb-28ad-4c67-87c6-3571129b93df") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J16") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 162.56 161.29 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7ca0c347-0190-4afe-b078-29310e4c7916") + (property "Reference" "#PWR0212" + (at 162.56 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 166.37 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 162.56 161.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 162.56 161.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 162.56 161.29 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "26196441-6c72-4484-be16-d3c1fea8d2de") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0212") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 121.92 189.23 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7cef4d20-c96d-4f5d-9cda-86b7187f245f") + (property "Reference" "#PWR038" + (at 121.92 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 124.46 189.23 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 121.92 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 121.92 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 121.92 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "01de44dd-b9c0-4c99-9615-5b508ffd86a6") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR038") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 143.51 269.24 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7cf5ad85-6f34-4f3f-a834-0afe80591cf6") + (property "Reference" "R14" + (at 148.6703 269.24 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "2k2" + (at 146.2461 269.24 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 141.732 269.24 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 143.51 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 143.51 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" " 71-CRCW12062K20JNEAC" + (at 143.51 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 143.51 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c5b0cfb9-496b-46ed-a9f8-b115c9337de8") + ) + (pin "1" + (uuid "5401a45a-5a65-4e82-afc7-b89df2ea6197") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R14") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 341.63 22.86 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7d798a10-cfe8-478c-a341-9d67f16a080d") + (property "Reference" "#PWR0182" + (at 341.63 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 344.17 24.13 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 341.63 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 341.63 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 341.63 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "8131329c-6943-44f1-bf23-7423f78e4ae5") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0182") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 237.49 82.55 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7e6da0ec-cb9b-4590-9c69-971825944d2e") + (property "Reference" "L1" + (at 236.2227 81.3379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "3.3uH" + (at 236.2227 83.7621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 237.49 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 237.49 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 237.49 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "70-ILSB1206ER3R3K" + (at 237.49 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 237.49 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "a7453a17-0435-49c7-bb3f-18ad76674b89") + ) + (pin "2" + (uuid "90549b64-80e1-4708-9278-95268323521e") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 254 243.84 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7ebccdf3-84f8-4d1a-a3a1-6fa5e02f2239") + (property "Reference" "#PWR019" + (at 254 250.19 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 256.54 246.38 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 254 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 254 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 254 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "4d976c6a-d22d-4939-928f-395e59529706") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR019") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+8V") + (at 344.17 80.01 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "7ed631ba-1976-48ab-b9f4-90a687acc5ed") + (property "Reference" "#PWR034" + (at 344.17 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+8V" + (at 344.17 75.8769 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 344.17 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 344.17 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 344.17 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "53c7b137-97c2-413b-805e-e85ead3c9d59") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR034") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R_Potentiometer") + (at 266.7 149.86 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "7eec388e-c708-42e6-a4e2-72b055f4d4ce") + (property "Reference" "RV19" + (at 264.922 148.6479 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "22k" + (at 264.922 151.0721 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Potentiometer_THT:Potentiometer_Bourns_3296Y_Vertical" + (at 266.7 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.mouser.com/datasheet/2/54/3296-776415.pdf" + (at 266.7 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 266.7 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "652-3296Y-1-223LF" + (at 266.7 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 266.7 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1da9fc04-d19f-40aa-8ac2-4fbe1061cecc") + ) + (pin "3" + (uuid "890891ab-c31d-42ed-bab0-0ff3d6b42fad") + ) + (pin "2" + (uuid "642af12c-63db-420b-b642-f530ac285192") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "RV19") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 359.41 66.04 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "80f94803-d669-4c28-a276-08d09549772d") + (property "Reference" "#PWR0183" + (at 359.41 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 359.41 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 359.41 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 359.41 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 359.41 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "0dc5ab10-e61e-4bfe-b375-dada567d7e16") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0183") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 175.26 227.33 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8116fdcd-32a3-4a36-81b0-61c58a54af84") + (property "Reference" "C3" + (at 171.45 227.33 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 172.72 220.98 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 174.2948 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 175.26 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 175.26 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 175.26 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 175.26 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "bfc1f6e4-d654-4b12-b959-fb3a779da2e6") + ) + (pin "1" + (uuid "b8aa2544-8f55-4083-8645-6088c25b4d9c") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 154.94 62.23 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "816a6554-abf8-4312-b2eb-d60f8d97ee92") + (property "Reference" "C18" + (at 153.67 68.58 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 153.67 66.04 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 158.75 63.1952 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 154.94 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 154.94 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 154.94 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 154.94 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "652f775b-feee-434f-9334-680f8482f4d9") + ) + (pin "1" + (uuid "c6a91da6-e5b5-4bbd-9433-efc61a483aca") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C18") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 95.25 45.72 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "81f7ee7e-ba36-4f5f-b9fe-5373004417ae") + (property "Reference" "#PWR0173" + (at 95.25 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 92.71 46.99 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 95.25 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 95.25 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 95.25 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "b7903ff9-753f-4a4f-9492-5672ce51d280") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0173") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 237.49 180.34 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "821c4ade-a2fe-4b65-bb8b-b157c1d75a8d") + (property "Reference" "R13" + (at 242.6503 180.34 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "52R3" + (at 240.2261 180.34 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 235.712 180.34 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 237.49 180.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 237.49 180.34 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "71-CRCW120649R9FKEAC" + (at 237.49 180.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 237.49 180.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "9658baf7-357e-4e30-bcb1-371d074a52d4") + ) + (pin "1" + (uuid "03cdd7bd-c503-4379-9887-f40f69af06ad") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 332.74 86.36 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "835f195f-68d6-4f04-89c4-c8a922749598") + (property "Reference" "C138" + (at 338.9742 85.09 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 336.55 85.09 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 333.7052 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 332.74 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 332.74 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 332.74 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 332.74 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "49a09c29-b5de-47d3-ae99-f1e210146efb") + ) + (pin "1" + (uuid "8d7efd0d-d498-408d-be69-3337c687bfb0") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C138") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 163.83 207.01 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "83b730b7-45eb-4e1d-8f98-84d2a25aa8c7") + (property "Reference" "#PWR0215" + (at 163.83 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 166.37 208.28 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 163.83 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 163.83 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 163.83 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "1f8f9b53-7f95-4213-8444-775a93b1bf59") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0215") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 226.06 177.8 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "84efdc97-533b-4f72-9c5a-1fd13d93dcc3") + (property "Reference" "R17" + (at 226.06 180.34 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "~" + (at 226.06 180.5361 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 226.06 176.022 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 226.06 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 226.06 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "71-RCS1206499RFKEA" + (at 226.06 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 226.06 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "4df138e3-72e3-4bce-9bbb-3ffbe9fcaf7b") + ) + (pin "1" + (uuid "6a787f7d-420a-4319-9b92-e1deb65d094b") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R17") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R_Potentiometer") + (at 266.7 262.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "877bdad3-d4e4-4c0e-a48e-86ab6a76f473") + (property "Reference" "RV27" + (at 264.922 261.6779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "22k" + (at 264.922 264.1021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Potentiometer_THT:Potentiometer_Bourns_3296Y_Vertical" + (at 266.7 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.mouser.com/datasheet/2/54/3296-776415.pdf" + (at 266.7 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 266.7 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "652-3296Y-1-223LF" + (at 266.7 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 266.7 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8c332f5a-3a63-478d-a2d6-231e867f166a") + ) + (pin "3" + (uuid "46032662-4191-4865-a762-e3ed34fc0fa2") + ) + (pin "2" + (uuid "082b2357-2e5d-415d-8f0e-708532000fab") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "RV27") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 292.1 226.06 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "87f9b370-5dd2-4f68-84ed-09a11f919c5d") + (property "Reference" "#PWR031" + (at 292.1 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 289.56 227.33 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 292.1 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 292.1 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 292.1 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "652ce684-7fea-417d-b5b3-3a2f7f2a6940") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR031") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 170.18 29.21 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "895889ad-2fea-4cc5-8420-3f85c843dedb") + (property "Reference" "U1" + (at 170.18 18.7157 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 170.18 21.1399 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 170.18 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 170.18 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 170.18 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 170.18 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 170.18 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "2cc8d066-9efc-4973-8e3e-784e54bb1641") + ) + (pin "6" + (uuid "518a9435-3cec-4f2b-b60a-1ed39e0bdd88") + ) + (pin "4" + (uuid "48e6cdfd-688f-4def-9a56-3704e36e9b41") + ) + (pin "1" + (uuid "4303d29a-c064-4f5d-a172-4b99adc9cfe1") + ) + (pin "2" + (uuid "0f61488c-f50f-4e0c-baec-45bd0f03711d") + ) + (pin "3" + (uuid "b0488ff5-a012-4609-9c4a-ee3889891f00") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 125.73 91.44 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8962e1d6-1a34-41bf-8a16-d0142e84a6b3") + (property "Reference" "#PWR0194" + (at 125.73 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 128.27 92.71 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 125.73 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 125.73 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 125.73 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "2def86ef-93ef-4bec-a335-f1fe3b3cc5e9") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0194") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:IDC_2x5") + (at 167.64 274.32 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "8a9c844e-3249-4474-8138-7ab6f28d9f0b") + (property "Reference" "J21" + (at 168.91 263.8257 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Bands" + (at 168.91 266.2499 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x05_P2.54mm_Vertical" + (at 167.64 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 167.64 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 167.64 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 167.64 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "A-2939" + (at 167.64 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "9" + (uuid "c88d6a3a-3409-46ae-b5ea-28cec561de06") + ) + (pin "5" + (uuid "fbc7066b-1191-44ed-a7fd-9fac47fda8ad") + ) + (pin "2" + (uuid "9c1c244f-e2df-4277-9344-9df055ef6ffa") + ) + (pin "4" + (uuid "5ec5dd19-2375-47d6-9e3c-25630610e781") + ) + (pin "6" + (uuid "81c96fdf-4f3c-4111-99ee-26be13dbe640") + ) + (pin "10" + (uuid "d652f46c-ba5b-443a-8cd2-3558907f2dc2") + ) + (pin "7" + (uuid "1bc7bec3-29a8-4dcf-9f30-5093eb15bea8") + ) + (pin "3" + (uuid "8ac02ec9-947e-43e4-ba4c-6c07fd753805") + ) + (pin "1" + (uuid "79627fe3-2a8a-4eb7-b9f7-e1d556edf862") + ) + (pin "8" + (uuid "7465d22c-dccc-49ef-a816-4f0ba5ea529d") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J21") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 182.88 227.33 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8b1fafca-6c34-4a5a-89a3-c317f6b27bd8") + (property "Reference" "C4" + (at 179.07 227.33 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 180.34 220.98 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 181.9148 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 182.88 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 182.88 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 182.88 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 182.88 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "bc3eca76-c973-492f-b960-8e60fb3f1838") + ) + (pin "1" + (uuid "0401a773-66ef-4db3-88a5-8d8f559a4067") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Relay:Relay_SPDT") + (at 147.32 123.19 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8f0ede3f-e360-45ee-a161-b02b428f3077") + (property "Reference" "K2" + (at 140.97 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "HF41F/12-ZS" + (at 138.43 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" + (at 146.05 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 147.32 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 147.32 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 147.32 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 147.32 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "A1" + (uuid "6270096f-e3a0-46b5-93c9-cc434a490d69") + ) + (pin "12" + (uuid "b4cbddee-5a2d-4be7-917e-afc8db847327") + ) + (pin "14" + (uuid "aa8ca4d4-135b-407e-ac46-7424bfaa0883") + ) + (pin "A2" + (uuid "31df6342-1a7c-446a-a6db-898110b2638c") + ) + (pin "11" + (uuid "f6f76b52-b414-4e3a-932c-74833e878362") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 328.93 212.09 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "90773448-826d-4651-95a9-82f8b925d903") + (property "Reference" "#PWR02" + (at 328.93 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 328.93 217.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 328.93 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 328.93 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 328.93 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "c129d444-568f-4a19-be0c-67e8d8c16bcb") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR02") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 111.76 24.13 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "90c75119-63c5-43dd-af7c-61d05359e901") + (property "Reference" "C6" + (at 110.49 17.78 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 110.49 20.32 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 115.57 23.1648 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 111.76 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 111.76 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 111.76 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 111.76 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "7cdc20f0-f30f-4b83-9023-a1ac096ba406") + ) + (pin "1" + (uuid "f5740971-983e-4001-acd9-a79c5f28715a") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 330.2 114.3 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "90cdd815-4c90-4fa3-bc02-7fd74feb237f") + (property "Reference" "#PWR0207" + (at 330.2 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 334.01 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 330.2 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 330.2 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 330.2 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "ff8320d1-28a9-4a71-9f55-a7deefb7d4ad") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0207") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Relay:Relay_SPDT") + (at 298.45 46.99 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "92c35af9-e424-4a6f-8f7c-2fc1ede0b7b3") + (property "Reference" "K5" + (at 304.8 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "HF41F/12-ZS" + (at 307.34 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" + (at 299.72 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 298.45 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 298.45 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 298.45 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 298.45 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "A1" + (uuid "679c63d6-1bbd-4e04-9bf3-1ff52862e530") + ) + (pin "12" + (uuid "50736f92-b959-4248-8a7e-8c44f1316752") + ) + (pin "14" + (uuid "5e58e390-4912-4ed1-878d-61c0ede0117e") + ) + (pin "A2" + (uuid "75f3de1e-a72e-4cfd-b0fa-8d5b44340f4e") + ) + (pin "11" + (uuid "3db2d162-cf59-4532-9aef-39adb633ff2e") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 355.6 224.79 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "934e9005-55c1-4ede-851f-66b6fd8bb533") + (property "Reference" "C143" + (at 352.679 223.5779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10uF 50V" + (at 352.679 226.0021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 354.6348 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 355.6 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 355.6 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "80-C1206C106K4P" + (at 355.6 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 355.6 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "cfdb6d2a-4ca7-4a73-9683-d66c8939507a") + ) + (pin "1" + (uuid "5ab5d145-96a3-4c07-999d-b2f81c56c002") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C143") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 283.21 109.22 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "93d43097-263a-4638-a6ed-5fa5e1fc0856") + (property "Reference" "#PWR0203" + (at 283.21 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 279.4 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 283.21 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 283.21 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 283.21 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "aca3574e-5e74-45f4-bb34-c3fa428c9e51") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0203") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 279.4 215.9 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "95a09b4f-276f-48a0-bc23-2839f9b53bc6") + (property "Reference" "#PWR024" + (at 279.4 222.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 281.94 218.44 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 279.4 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 279.4 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 279.4 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "61c312e3-2d92-4092-ab32-d82694e2d561") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR024") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 165.1 252.73 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "977a0f7b-a1a2-43be-8695-c7a3abdf1295") + (property "Reference" "#PWR0195" + (at 165.1 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 162.56 254 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 165.1 252.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 165.1 252.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 165.1 252.73 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "274f366e-710a-4630-9910-2226a8e318ab") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0195") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 222.25 185.42 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9832b806-99b1-4e7a-863d-a703ed3a4f4c") + (property "Reference" "R18" + (at 219.71 185.42 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "~" + (at 219.5139 185.42 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 224.028 185.42 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 222.25 185.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 222.25 185.42 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "755-SFR18EZPF56R0" + (at 222.25 185.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 222.25 185.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ffe876ee-db82-48b1-86b6-fc09cb75f0f6") + ) + (pin "1" + (uuid "3dca7fef-b4e9-4d6d-bc4f-f10a628adc12") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R18") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 356.87 242.57 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9871fae5-f455-4cdb-bed3-4f3353c01fe2") + (property "Reference" "C135" + (at 353.949 241.3579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "1uF 50V" + (at 353.949 243.7821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 355.9048 246.38 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 356.87 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 356.87 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "187-CL31B105KBHNNNE" + (at 356.87 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 356.87 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "962f959e-3a22-418b-873d-a354d122e944") + ) + (pin "1" + (uuid "bb1405ce-35e6-4752-8011-896885b649c8") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C135") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 302.26 118.11 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "9881fb70-c2f0-4ef4-8994-404049ec078c") + (property "Reference" "#PWR0204" + (at 302.26 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 302.26 122.2431 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 302.26 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 302.26 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 302.26 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "325fc954-b662-4219-89b6-d3e445531173") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0204") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Relay:Relay_SPDT") + (at 275.59 46.99 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "98ed2a95-34a5-4fa1-a293-4d912bd600d5") + (property "Reference" "K4" + (at 281.94 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "HF41F/12-ZS" + (at 284.48 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" + (at 276.86 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 275.59 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 275.59 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 275.59 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 275.59 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "A1" + (uuid "cba29de9-b28f-4739-8b08-58431c810dfc") + ) + (pin "12" + (uuid "925f3df5-7ce4-4c12-b0ef-e2604eb878e0") + ) + (pin "14" + (uuid "10c75149-d757-476d-b38b-2b96f27f1979") + ) + (pin "A2" + (uuid "1858da09-17d6-4e9d-a926-72505378a463") + ) + (pin "11" + (uuid "2473f67c-fd8b-4dc7-ab92-0690e64d4325") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 347.98 124.46 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "99279936-8f6e-44e2-b954-8f0609efb529") + (property "Reference" "C19" + (at 354.2142 123.19 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "15nF 50V" + (at 351.79 123.19 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 348.9452 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 347.98 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 347.98 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "77-VJ1206Y153JXAAC" + (at 347.98 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 347.98 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ebff3c45-665d-45a1-85f6-6d7dcfd7656a") + ) + (pin "1" + (uuid "16d7ef2e-eb23-4fc5-bd76-6e16d05cb17d") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C19") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 231.14 67.31 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "998574ec-4b7f-47c3-a0d7-b240a4785fad") + (property "Reference" "C24" + (at 227.33 66.04 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100pF 50V" + (at 229.87 63.5 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 234.95 66.3448 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 231.14 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 231.14 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "710-885012008043" + (at 231.14 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 231.14 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "df62dc28-bd89-4b01-a09d-b4cca1b914c5") + ) + (pin "1" + (uuid "b92a9c92-ae2f-4425-a6c8-29d7e6a5192d") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C24") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C_Polarized") + (at 375.92 224.79 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9a4d4e49-5595-496c-8782-5c1813b9587b") + (property "Reference" "C142" + (at 378.841 222.6889 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "100uF 6V" + (at 378.841 225.1131 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_THT:CP_Radial_D10.0mm_P5.00mm" + (at 376.8852 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 375.92 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 375.92 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "667-ECA-1EM101" + (at 375.92 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 375.92 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b1418361-b8bd-4ee1-998c-25eae0e408eb") + ) + (pin "1" + (uuid "54040406-6a7a-4393-8a06-3731ef415298") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C142") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 67.31 163.83 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "9b6a0b71-527d-4e7e-a42a-ec634a62ffa9") + (property "Reference" "#PWR035" + (at 67.31 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 67.31 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 67.31 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 67.31 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 67.31 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "d97bb63b-bc2f-44ab-808b-1805046e8f30") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR035") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 78.74 78.74 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9c3a9181-b00e-4791-a87e-8fa182619bfc") + (property "Reference" "#PWR0193" + (at 78.74 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 81.28 80.01 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 78.74 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 78.74 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 78.74 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "50b16208-d460-4bf7-aa43-d143d686e082") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0193") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 262.89 168.91 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9cc38e6d-55e2-48b9-b2be-88e30f5534c2") + (property "Reference" "#PWR013" + (at 262.89 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 265.43 170.18 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 262.89 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 262.89 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 262.89 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "f5e8158b-0ce9-4d7f-b0da-d9e5864645dc") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR013") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 313.69 22.86 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9d897590-a3bc-470b-b7e3-d2b7e613fa6f") + (property "Reference" "J13" + (at 314.96 16.51 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "ANT-3" + (at 316.23 19.05 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 313.69 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 313.69 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 313.69 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 313.69 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 313.69 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "387f1653-c1ca-44a8-b94c-77d34e95e53b") + ) + (pin "2" + (uuid "24166d6a-eb07-4db4-bdb7-79b2a2434904") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 97.79 254 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9da2b627-2c44-4380-a347-af80bd756c70") + (property "Reference" "#PWR0186" + (at 97.79 260.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 95.25 255.27 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 97.79 254 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 97.79 254 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 97.79 254 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "a2a958b2-60b4-4be9-bc68-c6f3dbb44d51") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0186") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 151.13 269.24 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9e4980d5-e1ec-4aa1-96ce-1eca6ea4950e") + (property "Reference" "R12" + (at 156.2903 269.24 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "2k2" + (at 153.8661 269.24 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 149.352 269.24 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 151.13 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 151.13 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" " 71-CRCW12062K20JNEAC" + (at 151.13 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 151.13 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a2eee8be-7858-4820-bf59-6179d226cce3") + ) + (pin "1" + (uuid "f12917cb-e6cc-42e8-819b-31c2e34752d7") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R12") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Relay:Relay_SPDT") + (at 344.17 46.99 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9fd9ac6c-d271-4bd3-8c4b-d5ebd950a273") + (property "Reference" "K7" + (at 350.52 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "HF41F/12-ZS" + (at 353.06 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" + (at 345.44 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 344.17 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 344.17 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 344.17 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 344.17 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "A1" + (uuid "dd7b2aa1-9e99-482a-a517-109e8bc4cc9f") + ) + (pin "12" + (uuid "bb64fa25-cd07-4d6e-9cdc-1fc676d42b60") + ) + (pin "14" + (uuid "f7d86579-4905-4f0a-8be6-0581f6610190") + ) + (pin "A2" + (uuid "f635c1b3-fbc6-4aa1-96bc-8140fde0334a") + ) + (pin "11" + (uuid "61212d00-c23a-47bc-a06a-74ec4d5e35b5") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 243.84 72.39 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a1553a73-42c5-47a9-aca6-159ed9a99148") + (property "Reference" "C15" + (at 242.57 66.04 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1000pF 50V" + (at 242.57 68.58 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 247.65 71.4248 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 243.84 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 243.84 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-KGM31BCG1H102JT" + (at 243.84 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 243.84 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "8b0292d1-bdeb-4ad0-9933-dc6e19177044") + ) + (pin "1" + (uuid "bb5e6af3-df6a-4341-a325-9d9f231cb751") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 43.18 96.52 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a1bc35da-819e-43ec-9be5-52033299fffe") + (property "Reference" "#PWR0221" + (at 43.18 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 45.72 97.79 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 43.18 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 43.18 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 43.18 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "18cd9427-2030-4ed3-a17d-21f8d3a8b3de") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0221") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:TC4428") + (at 344.17 99.06 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "a2f37917-bb4f-4ede-95f9-a9b32bc6893d") + (property "Reference" "U18" + (at 341.9759 89.8357 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TC4428" + (at 341.9759 92.2599 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 344.17 119.38 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://ww1.microchip.com/downloads/en/DeviceDoc/20001422G.pdf" + (at 344.17 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 344.17 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "579-TC4428ACOA713" + (at 344.17 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 344.17 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "734ccbb1-5d31-4bad-b798-199920f1a819") + ) + (pin "4" + (uuid "e169e98d-5883-45d7-856b-e6fc87524110") + ) + (pin "3" + (uuid "b9994737-8bec-4caf-85d9-c7c9442fb12b") + ) + (pin "7" + (uuid "41cb328c-fe2f-4033-9eef-f9011cffbc04") + ) + (pin "6" + (uuid "4de6583a-ba58-44c9-8c3b-269cfe8e37dd") + ) + (pin "1" + (uuid "408e6770-e728-46bc-a305-98b626e2e4ce") + ) + (pin "8" + (uuid "672ed881-4c83-4fcb-b617-126a7a1035bc") + ) + (pin "5" + (uuid "e440b2ff-6595-43c5-b884-c36942988bb1") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U18") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 243.84 87.63 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "a3420a4b-0720-4454-a1d3-cce04f0e0da0") + (property "Reference" "#PWR0174" + (at 243.84 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 243.84 91.7631 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 243.84 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 243.84 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 243.84 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "13b9d5b8-1430-4f79-9b34-3216cec74fc8") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0174") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 387.35 220.98 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "a349dbe8-af76-4ad3-97d6-c4c08a2932f0") + (property "Reference" "#PWR08" + (at 387.35 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 387.35 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 387.35 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 387.35 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 387.35 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "a610f717-fc21-4d84-aa4c-57ddd4a39054") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR08") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 95.25 29.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a366f573-63af-49ac-8b07-1cf76116fdd3") + (property "Reference" "U3" + (at 95.25 18.7157 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 95.25 21.1399 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 95.25 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 95.25 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 95.25 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 95.25 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 95.25 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "da84df70-c962-476f-b1f3-0b87c05d9478") + ) + (pin "6" + (uuid "049da1c1-3487-4276-ad62-9fff522f8282") + ) + (pin "4" + (uuid "19d7e13a-8642-4c10-9bed-2b035a5e7a7d") + ) + (pin "1" + (uuid "1aa1ee31-7426-4851-99fc-c6485c19cc09") + ) + (pin "2" + (uuid "c0f6e662-6a51-4083-aabf-7432b0ace046") + ) + (pin "3" + (uuid "be305495-fde8-40f1-8aa6-34b1796d532f") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Jumper:SolderJumper_2_Open") + (at 29.21 278.13 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "a3c2878c-5142-441b-a2af-fdf325c9dbdd") + (property "Reference" "JP3" + (at 29.21 275.5209 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SolderJumper_2_Open" + (at 29.21 275.5209 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm" + (at 29.21 278.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 29.21 278.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 29.21 278.13 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 29.21 278.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 29.21 278.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5737e4d3-3e82-46cf-a4da-c943b02724fa") + ) + (pin "1" + (uuid "a828af9a-4ecc-4fad-b4bc-d786988b5ed0") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "JP3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 226.06 199.39 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a3d1b690-6d1a-4ef6-ba7e-1653d76093a0") + (property "Reference" "#PWR014" + (at 226.06 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 228.6 201.93 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 226.06 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 226.06 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 226.06 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "02893be0-7fbd-4f54-a9f2-845effb5e6ab") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR014") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 349.25 199.39 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "a6c6827b-ddc2-4447-acd2-f2107ab84f50") + (property "Reference" "#PWR03" + (at 349.25 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 349.25 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 349.25 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 349.25 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 349.25 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "a52c5e0c-ff4c-4061-82e2-27df88e758f0") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR03") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 308.61 110.49 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a72b49b5-ea37-45a9-bf0e-9747842894f6") + (property "Reference" "C21" + (at 306.07 106.68 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 306.07 116.84 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 307.6448 106.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 308.61 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 308.61 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 308.61 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 308.61 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "9ecec168-623b-4d36-979c-26b4ff50f04b") + ) + (pin "1" + (uuid "8db8395a-103c-4d0f-af4e-14fe780ca646") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C21") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 163.83 171.45 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a9683b19-bb37-4a9c-a35c-b038c1c4cdd7") + (property "Reference" "#PWR0213" + (at 163.83 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 166.37 172.72 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 163.83 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 163.83 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 163.83 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "09978372-5817-40db-8286-c92196bf9478") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0213") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 57.15 93.98 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "abeae3c1-95c9-43cd-92cd-ee5978692f4d") + (property "Reference" "J5" + (at 54.61 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "FROM ATTN" + (at 62.23 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 57.15 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 57.15 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 57.15 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 57.15 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 57.15 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "94e8a90e-b31b-4400-8711-8410b9b99671") + ) + (pin "2" + (uuid "ada51eff-cacb-4b08-92db-d304169bf958") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 69.85 26.67 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ac19a7dc-4978-4c67-9e6d-37a7104e548d") + (property "Reference" "J3" + (at 71.12 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "FROM TX" + (at 67.31 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 69.85 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 69.85 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 69.85 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 69.85 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 69.85 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3edc8efa-c6a6-499a-b6ed-f5f8892fe511") + ) + (pin "2" + (uuid "5c365fe1-3af7-448e-85fd-e2bce9770750") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 69.85 64.77 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ad3b491d-153f-4fa2-8142-93f6d7f4ff71") + (property "Reference" "#PWR0170" + (at 69.85 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 72.39 66.04 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 69.85 64.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 69.85 64.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 69.85 64.77 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "492c4300-e967-4541-8ced-ab716fdacfee") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0170") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_01x05_Socket") + (at 274.32 86.36 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ad6ee1b6-cae6-4841-a548-aa809d38b184") + (property "Reference" "J16.2" + (at 275.0312 85.1479 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TRANSMIT" + (at 275.0312 87.5721 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x05_P2.54mm_Vertical" + (at 274.32 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 274.32 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 274.32 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 274.32 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 274.32 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "08df2393-76a8-4fe4-a6db-1ea040852779") + ) + (pin "3" + (uuid "c666f830-d317-42e5-b8e6-a7bf9566bbfa") + ) + (pin "1" + (uuid "5806dce7-138d-4f19-8049-b31bd93444e4") + ) + (pin "2" + (uuid "43eb7c4e-018b-4734-af20-3e310ade4c23") + ) + (pin "5" + (uuid "3ad4e7bf-8b2b-489d-9fda-9c4312de6ae5") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J16.2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 57.15 193.04 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ad96afb6-dec0-45d9-96f1-f2bffe571256") + (property "Reference" "R10" + (at 53.34 190.5 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0" + (at 57.15 190.3039 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 57.15 194.818 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 57.15 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 57.15 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "667-ERJ-8GEY0R00V" + (at 57.15 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 57.15 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "32654485-90d1-4e20-9253-94a1630c0dea") + ) + (pin "1" + (uuid "91c5797b-b430-4f32-9784-fb7224006f83") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 156.21 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ae23fcf2-2f71-4dcb-b017-bf0a0b5a8ed3") + (property "Reference" "#PWR0201" + (at 156.21 132.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 156.21 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 156.21 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 156.21 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 156.21 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "c4287cd9-e4bc-4961-8dc7-3ed7ec38fdab") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0201") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 132.08 53.34 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b2748925-d821-4ccd-a27b-959199284bcd") + (property "Reference" "#PWR0171" + (at 132.08 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 134.62 54.61 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 132.08 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 132.08 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 132.08 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "ccc946c8-2358-4d9a-b55f-aeb8ac1426ad") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0171") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:D_Zener") + (at 229.87 143.51 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b4550181-f339-4e6c-ada6-0a8ad88b7fb4") + (property "Reference" "D1" + (at 229.87 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "BAS70H,115" + (at 229.87 140.5199 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Diode_SMD:D_SOD-123F" + (at 229.87 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 229.87 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 229.87 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "771-BAS70H-T/R" + (at 229.87 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 229.87 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ca0c2c5a-97ad-47a7-b186-97d4bed8ecb4") + ) + (pin "1" + (uuid "216f2f99-4038-4b01-9d99-6af847457e65") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "D1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 247.65 212.09 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b5fbe8c1-9781-4709-b331-6654a1205f10") + (property "Reference" "#PWR018" + (at 247.65 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 247.65 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 247.65 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 247.65 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 247.65 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "674d943f-d4c0-4236-a0f4-39a13a56b031") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR018") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 222.25 228.6 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b5fc3161-e356-4fd8-97d3-24176586c2f5") + (property "Reference" "R25" + (at 219.71 228.6 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "~" + (at 219.5139 228.6 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 224.028 228.6 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 222.25 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 222.25 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "755-SFR18EZPF56R0" + (at 222.25 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 222.25 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1cdb7b0e-62aa-4158-a35f-f63f5b66b4a6") + ) + (pin "1" + (uuid "fec35b8f-0c65-4806-908b-4f457dcc6abe") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R25") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 154.94 24.13 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b6629c1f-6da0-475f-b548-7e350b6ef654") + (property "Reference" "C7" + (at 153.67 17.78 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 153.67 20.32 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 158.75 23.1648 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 154.94 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 154.94 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 154.94 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 154.94 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "dd756472-5fad-4c4f-bfa6-19d66d9be886") + ) + (pin "1" + (uuid "75e867e9-860e-4ea1-a84f-3a28a6b7fa12") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 43.18 76.2 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b95c918f-f052-4213-abc6-4a3959aa0d87") + (property "Reference" "#PWR0222" + (at 43.18 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 43.18 72.0669 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 43.18 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 43.18 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 43.18 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "482f9e28-1d3e-4c94-a15d-46c78593cb82") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0222") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 29.21 213.36 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b97744a5-1d3d-4ff2-a909-7e33f45e0f60") + (property "Reference" "#PWR0159" + (at 29.21 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 26.67 214.63 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 29.21 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 29.21 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 29.21 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "e1f4c2ba-eb42-49b0-a9db-f95aef6b3d05") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0159") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:AD7991YRJZ") + (at 294.64 215.9 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "badc0d9e-ae45-426a-93c4-90e79de02abe") + (property "Reference" "U20" + (at 294.64 205.4057 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "AD7991YRJZ" + (at 294.64 207.8299 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_SMD:SOT-23-8" + (at 297.815 240.665 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.analog.com/media/en/technical-documentation/data-sheets/AD7991_7995_7999.pdf" + (at 295.91 222.885 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 294.64 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "584-AD7991YRJZ0500R7" + (at 294.64 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 294.64 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "7" + (uuid "928867c3-fe4d-4b64-b502-8096dacb700f") + ) + (pin "3" + (uuid "3b647e92-f275-4722-9c13-a6c453f91a63") + ) + (pin "1" + (uuid "3be42aa4-ae51-48e6-af5b-2f5ccc919649") + ) + (pin "8" + (uuid "d82bc560-dd0c-4ddd-b775-6b5b1c7c1f63") + ) + (pin "5" + (uuid "89deb1a7-9da8-44c6-9081-9e8c45558f84") + ) + (pin "2" + (uuid "207350ba-e442-403d-9ce4-5732c7c9481e") + ) + (pin "6" + (uuid "5f2f798d-1bc6-48f5-9962-3fd8f2747011") + ) + (pin "4" + (uuid "4feea47e-aa97-4d83-b916-1c5c920a6604") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U20") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:IDC_2x5") + (at 107.95 274.32 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "bae9ff6b-a28f-49ad-bd0e-7d8a0d1fedf4") + (property "Reference" "J1" + (at 109.22 263.8257 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LPF ACC Control" + (at 109.22 266.2499 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x05_P2.54mm_Vertical" + (at 107.95 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 107.95 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 107.95 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 107.95 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "A-2939" + (at 107.95 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "9" + (uuid "c7bce505-2302-4648-abc5-2dc8a2c51de4") + ) + (pin "5" + (uuid "070546eb-cff7-48b9-bffa-ba9bd5cc55f7") + ) + (pin "2" + (uuid "2074d324-298d-46c3-ae29-127235403f90") + ) + (pin "4" + (uuid "6c4d54b2-5b69-441e-ba8c-856ca77f464b") + ) + (pin "6" + (uuid "898b760f-5042-4b61-9fac-e303b4d04785") + ) + (pin "10" + (uuid "3eec4526-bf6c-4cef-b069-b7873dd45ea9") + ) + (pin "7" + (uuid "dad91f95-83a6-457d-966a-67c260b4230e") + ) + (pin "3" + (uuid "d27f538f-0bda-4da5-a718-4c074086b786") + ) + (pin "1" + (uuid "9d5c4f49-f37c-4872-9d38-b3010f1d0f49") + ) + (pin "8" + (uuid "7efdb648-c675-4d03-b932-87e3b21f8169") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 251.46 240.03 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "bb81483f-9431-4a1c-917f-a61f4afc4b99") + (property "Reference" "C152" + (at 254.381 238.8179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 254.381 241.2421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 252.4252 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 251.46 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 251.46 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 251.46 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 251.46 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "53b86f7c-de87-4658-bebe-cd3aa69cab82") + ) + (pin "1" + (uuid "24f637f2-0366-489f-93ad-7557fdc2c560") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C152") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Interface_Expansion:MCP23017_SO") + (at 43.18 241.3 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "be78c7fa-7acb-4708-bf02-da31ab966ee3") + (property "Reference" "U15" + (at 45.3741 214.2957 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MCP23017_SO" + (at 45.3741 216.7199 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_SO:SOIC-28W_7.5x17.9mm_P1.27mm" + (at 48.26 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "http://ww1.microchip.com/downloads/en/DeviceDoc/20001952C.pdf" + (at 48.26 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "" + (at 43.18 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "579-MCP23017-E/SO" + (at 43.18 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 43.18 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "7" + (uuid "f75edbfa-c17e-4269-8b87-8631ff9edfd1") + ) + (pin "16" + (uuid "a9446cbb-311a-4721-9a9c-2582eae48c37") + ) + (pin "5" + (uuid "97a967b5-c298-4c4e-ae9c-17cc1f22221e") + ) + (pin "12" + (uuid "e2d931fe-b7fb-4e0d-9600-21abd89946e1") + ) + (pin "9" + (uuid "c27dc888-7ae0-4486-b289-231f16c35d90") + ) + (pin "17" + (uuid "eb5e221d-fdeb-4e51-af22-b705e98c3252") + ) + (pin "23" + (uuid "59dff5f9-d3ea-4034-b753-d2287ce9decd") + ) + (pin "4" + (uuid "8e918c95-e020-4eb0-872e-af9bc0d2925d") + ) + (pin "28" + (uuid "4d1a67b0-02fb-410f-8137-29ced1a864da") + ) + (pin "22" + (uuid "c16912c3-bbd7-4b91-b499-1fee7678bc9e") + ) + (pin "18" + (uuid "af1223aa-21c3-4fdd-9eef-048dd2ecca80") + ) + (pin "8" + (uuid "fe86e42f-5510-4e2d-b1ea-1fc0cb096fac") + ) + (pin "24" + (uuid "a8b6c947-9669-4ece-a2ea-2c8dad04da55") + ) + (pin "15" + (uuid "f74d41cf-314c-43a7-92b2-37d5f159cef9") + ) + (pin "3" + (uuid "f2045a88-7a88-4c59-871a-6173306f264e") + ) + (pin "14" + (uuid "e7aa09e8-d3cc-4329-bd75-d266b0d82194") + ) + (pin "25" + (uuid "8b45ff64-0032-4efc-90ad-c9cb2608aa85") + ) + (pin "6" + (uuid "96b4f2b7-d669-4d2e-8993-8709d29c207d") + ) + (pin "27" + (uuid "bf6a2121-1ce5-4551-9a3b-f4474f31f360") + ) + (pin "20" + (uuid "369ea33e-9947-4df2-8800-c97de90a2fc9") + ) + (pin "21" + (uuid "787a187d-cba5-4b6a-b87c-7a7dc7bc3bc1") + ) + (pin "10" + (uuid "dc23a306-a57c-45a8-830d-1778afcae20c") + ) + (pin "19" + (uuid "3f22b936-20a8-4026-8602-cbce12392251") + ) + (pin "26" + (uuid "b2903759-e321-4765-b1d3-ae6a1c846e5e") + ) + (pin "1" + (uuid "501c1f05-c8bc-4d33-8a8a-cd85b577dc82") + ) + (pin "2" + (uuid "3bae82ca-459b-4f3e-b152-c62d119fd399") + ) + (pin "11" + (uuid "19976dea-4c13-42d6-a528-e04eeb766a46") + ) + (pin "13" + (uuid "4b5b0cb1-1c52-4245-bdcd-9f7e5b82bf2c") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 288.29 193.04 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c280a6ca-63c5-4151-813c-92e4faff29b6") + (property "Reference" "#PWR026" + (at 288.29 196.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 288.29 187.96 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 288.29 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 288.29 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 288.29 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "ca44198e-a341-4053-a351-9467bfe89761") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR026") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 35.56 213.36 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c3234927-c5c0-4625-88b3-01c85abfd99e") + (property "Reference" "C141" + (at 36.83 207.01 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 36.83 209.55 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 31.75 212.3948 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 35.56 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 35.56 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 35.56 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 35.56 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a68e0396-45e7-4265-94a1-860d43f1964d") + ) + (pin "1" + (uuid "56e2ffd5-c7be-4382-a4da-c47af9e78da2") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C141") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 295.91 196.85 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c3e8a35e-20a2-4222-be87-fd54d2f82064") + (property "Reference" "C151" + (at 302.1442 195.58 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 299.72 195.58 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 296.8752 200.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 295.91 196.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 295.91 196.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 295.91 196.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 295.91 196.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "585ae1ee-cdd7-4323-86c4-f54ca7f47c4a") + ) + (pin "1" + (uuid "9753a800-ee2b-45a8-a029-8455efe5d2cf") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C151") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:D_Zener") + (at 231.14 256.54 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c4ab2b5d-3a8c-42f9-9a57-d110d7c1e2b9") + (property "Reference" "D2" + (at 231.14 251.1257 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "BAS70H,115" + (at 231.14 253.5499 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Diode_SMD:D_SOD-123F" + (at 231.14 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 231.14 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 231.14 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "771-BAS70H-T/R" + (at 231.14 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 231.14 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ad8e443c-7d0e-4c40-a688-4aaf0bafe481") + ) + (pin "1" + (uuid "aa95f698-c10b-44c2-a5e7-5baf89864136") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "D2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 97.79 39.37 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c4f5e6fa-a4f0-43ff-bf37-55e95020933d") + (property "Reference" "#PWR0168" + (at 97.79 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 100.33 40.64 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 97.79 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 97.79 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 97.79 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "d992a626-3977-43ed-a1d4-9057df66b766") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0168") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:ULN2803C") + (at 121.92 204.47 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c5226a2d-89bc-4627-a345-09fae7a7f971") + (property "Reference" "U10" + (at 113.03 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "ULN2803C" + (at 121.92 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-20W_7.5x12.8mm_P1.27mm" + (at 123.19 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/uln2803c.pdf" + (at 125.73 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 121.92 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "7" + (uuid "226a56ba-7560-4eb7-bcbb-b29952f7e787") + ) + (pin "17" + (uuid "b77f42dc-df91-417d-b064-1cbdd681b548") + ) + (pin "8" + (uuid "553afd6e-7d5e-45f6-a969-b19b016e11a0") + ) + (pin "15" + (uuid "ea87fc48-b56a-4ebc-ac5e-00196586f6ed") + ) + (pin "14" + (uuid "9bbafb96-345d-494b-a0cd-6476e98a4f21") + ) + (pin "2" + (uuid "6140e660-7666-49c3-a3d5-572c596b663e") + ) + (pin "13" + (uuid "5f5c48a9-f975-4272-8581-2ff6c7f452e5") + ) + (pin "16" + (uuid "8bd4a891-1108-45ae-bee9-30e64bcf5cbf") + ) + (pin "1" + (uuid "96514fd9-b961-4704-af38-6c19de2af63b") + ) + (pin "9" + (uuid "7ab4047f-a49b-4809-a069-8c03cce39cc4") + ) + (pin "12" + (uuid "0826744f-d63a-4d6b-bc35-15b394f148e3") + ) + (pin "11" + (uuid "700b30e8-9e27-442b-9b54-59e7336f5538") + ) + (pin "10" + (uuid "e7aecfa6-ce4a-46e1-8a59-b14705bde073") + ) + (pin "5" + (uuid "17814037-11bf-432b-b58a-d43e481af73e") + ) + (pin "3" + (uuid "019363be-2527-4007-9df5-4cd96891bee2") + ) + (pin "4" + (uuid "28ffb946-a2e2-4695-9e5a-bbf4a05ebc9e") + ) + (pin "18" + (uuid "6d86d450-46fe-451b-8bc7-5f20b3985ad7") + ) + (pin "19" + (uuid "d789b100-d44f-4cd3-8320-b03f64ff8814") + ) + (pin "6" + (uuid "1dd7f4ba-821b-487c-95ff-f759c7e8c6fe") + ) + (pin "20" + (uuid "baa57208-dc1c-461f-bc5f-8dd40251e8d9") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 393.7 203.2 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c52bcf02-fa97-4690-844c-4389556be5fd") + (property "Reference" "C133" + (at 396.621 201.9879 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "1uF 50V" + (at 396.621 204.4121 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 394.6652 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 393.7 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 393.7 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "187-CL31B105KBHNNNE" + (at 393.7 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 393.7 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b19c0c22-7354-425d-bd22-fd9e092f91d2") + ) + (pin "1" + (uuid "8a242c14-d1b1-4a89-9df4-2303d8fe030e") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C133") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 107.95 36.83 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c5e1218e-ccbe-4d78-87aa-ff945244033b") + (property "Reference" "C10" + (at 114.3 38.1 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 111.76 38.1 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 108.9152 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 107.95 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 107.95 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 107.95 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 107.95 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "36596b07-f5b5-4135-a24c-3a04279b0ffa") + ) + (pin "1" + (uuid "16846492-af96-4b0b-9eae-5c3406adf82d") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 165.1 45.72 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "caca3c3f-0943-48d6-98ff-055bc5bb6eaf") + (property "Reference" "#PWR0172" + (at 165.1 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 162.56 46.99 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 165.1 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 165.1 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 165.1 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "99eca6d8-1294-4042-82fc-4c1c26fe861f") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0172") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Jumper:SolderJumper_2_Open") + (at 29.21 267.97 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ce5c5963-165d-4693-87db-1b7426b29de5") + (property "Reference" "JP1" + (at 29.21 265.3609 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SolderJumper_2_Open" + (at 29.21 265.3609 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm" + (at 29.21 267.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 29.21 267.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 29.21 267.97 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 29.21 267.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 29.21 267.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f6fefdc3-780b-49c2-9416-094dc74b1279") + ) + (pin "1" + (uuid "bd9f3abf-8b6d-4669-81da-e84780363f99") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "JP1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 83.82 248.92 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ce5db429-9b1c-485e-b675-eddac168c1bd") + (property "Reference" "#PWR0187" + (at 83.82 252.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 81.28 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 83.82 248.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 83.82 248.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 83.82 248.92 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "b1602d71-81ae-4f6e-8dd7-96956f8d8981") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0187") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 123.19 96.52 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d0e4e6e1-b2df-4ead-bf05-0e07d8e6668e") + (property "Reference" "J7" + (at 128.27 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TO 20W PA" + (at 124.46 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 123.19 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 123.19 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 123.19 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 123.19 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4ba7f07d-5130-41cc-9055-832dccbb3973") + ) + (pin "2" + (uuid "02aabee3-6f6b-4947-9ad3-eeac93a3cb35") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 21.59 240.03 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d163d46f-2a18-4a00-9b30-645889691299") + (property "Reference" "R15" + (at 21.59 240.03 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "2k2" + (at 18.8539 240.03 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 23.368 240.03 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 21.59 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 21.59 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" " 71-CRCW12062K20JNEAC" + (at 21.59 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 21.59 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "108365b1-3e55-40a0-b2c6-3ecf7e0112f8") + ) + (pin "1" + (uuid "cb2a392f-0476-4876-a6e8-832c9692a982") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 387.35 67.31 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d1d807ab-1f31-4840-9867-4e9f576d5b77") + (property "Reference" "#PWR0220" + (at 387.35 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 387.35 71.4431 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 387.35 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 387.35 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 387.35 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "195e3f56-551f-432f-835d-22c787158024") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0220") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 304.8 247.65 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d26cde39-4144-4093-9523-3c1d8ed756e0") + (property "Reference" "#PWR029" + (at 304.8 254 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 307.34 248.92 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 304.8 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 304.8 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 304.8 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "c6b8426d-d2dc-44d0-ab97-6fbc9e4b117e") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR029") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 132.08 191.77 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d2710aca-b6cb-405b-a12d-ccf7cdf23fd2") + (property "Reference" "#PWR043" + (at 132.08 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 128.27 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 132.08 191.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 132.08 191.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 132.08 191.77 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "be7160c7-dc71-4747-931d-c5eea5b29329") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR043") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:AD8307") + (at 255.27 224.79 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d2e38859-e91a-4216-bd6b-9ec642e2abba") + (property "Reference" "U19" + (at 263.017 224.2129 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "AD8307" + (at 263.017 226.6371 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 258.445 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 259.08 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 255.27 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "584-AD8307ARZ-R7" + (at 255.27 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 255.27 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "8c4ed255-08dc-4ad3-b073-3d9e6ca82baf") + ) + (pin "2" + (uuid "a6927fd3-c59f-4c93-a66f-dbd0d824ac37") + ) + (pin "7" + (uuid "64dbfddc-36d8-40db-9bc0-449e133786ee") + ) + (pin "8" + (uuid "c3ef9061-0dd8-4c83-bd06-08fb882f54d6") + ) + (pin "6" + (uuid "a5a00db8-c573-4df3-9133-6a892b7fcb33") + ) + (pin "5" + (uuid "446bc493-a012-450b-a1c9-160853e4c44c") + ) + (pin "4" + (uuid "bc8cc578-1752-4f6d-a250-b99efd762c9f") + ) + (pin "1" + (uuid "c88a7065-311e-44cf-835a-77303f88aea7") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U19") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 295.91 200.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d3e5b44f-9be0-41f8-8fb3-0edd218a947c") + (property "Reference" "#PWR027" + (at 295.91 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 298.45 203.2 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 295.91 200.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 295.91 200.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 295.91 200.66 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "a2fcbd6b-acc6-43ea-9a40-c3784eac8d7f") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR027") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 123.19 123.19 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d5370177-59f0-44e7-8c1a-ea1ec1a1a677") + (property "Reference" "#PWR0197" + (at 123.19 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 125.73 124.46 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 123.19 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 123.19 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "ecf40047-47f7-46d2-aa16-fde4c812759d") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0197") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole_Pad") + (at 392.43 62.23 270) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d92c0f14-895f-4c24-a61b-f9a6785a530d") + (property "Reference" "H1" + (at 396.24 62.23 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "~" + (at 396.24 63.4421 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "MountingHole:MountingHole_4.3mm_M4_DIN965_Pad" + (at 392.43 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 392.43 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 392.43 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 392.43 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 392.43 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6b005369-59c2-4585-b3ef-905fd441e99a") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "H1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 127 53.34 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d92ee1a8-eedb-451a-9ac8-39279ba46f63") + (property "Reference" "J18" + (at 134.62 49.53 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "FROM BPF" + (at 138.43 46.99 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 127 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 127 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 127 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 127 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 127 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "328abb36-19c3-4bdb-a0b0-3042c42df04f") + ) + (pin "2" + (uuid "51bd0c48-cc43-411d-8d9c-6de8ae4d3759") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J18") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 138.43 191.77 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "dad0bbf4-9a9f-4d62-8fe2-ab66ff036ca8") + (property "Reference" "C129" + (at 138.43 185.42 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 137.16 187.96 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 142.24 190.8048 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 138.43 191.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 138.43 191.77 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 138.43 191.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 138.43 191.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e5299f5e-09c7-4182-bdc1-13560bc4c32c") + ) + (pin "1" + (uuid "daf3adeb-b532-499d-98d4-8d8c726e6eed") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C129") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 82.55 242.57 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "db3f16d9-998c-44d1-8cd0-dec663f32a4b") + (property "Reference" "#PWR0185" + (at 82.55 248.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 80.01 243.84 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 82.55 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 82.55 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 82.55 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "c8b730f3-ff12-407b-b157-8e55b36ef74f") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0185") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 273.05 255.27 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "dc9fbc81-a09b-429c-9a28-ea7ba69c64f4") + (property "Reference" "R29" + (at 278.2103 255.27 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10k" + (at 275.7861 255.27 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 271.272 255.27 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 273.05 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 273.05 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "652-CR1206JW-103ELF" + (at 273.05 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 273.05 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a533d68e-c2c1-4ac0-8f79-546508e49475") + ) + (pin "1" + (uuid "7467022c-47a6-40bb-983c-df90837dc9a0") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R29") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 318.77 22.86 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "dcbf7514-0ae3-428f-a473-651bba0d32ab") + (property "Reference" "#PWR0181" + (at 318.77 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 321.31 24.13 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 318.77 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 318.77 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 318.77 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "cee2c9a4-9ec3-4ad2-8375-b3920169e5d8") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0181") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 57.15 99.06 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "decaf8d0-3edc-4fcd-8757-1c9cff802a6b") + (property "Reference" "#PWR0192" + (at 57.15 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 59.69 100.33 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 57.15 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 57.15 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 57.15 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "c63f5fff-fa5d-4f44-a11d-e01b69c3082d") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0192") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 251.46 196.85 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "df8374ec-5f35-4a04-a1d8-2249b0d0691b") + (property "Reference" "C139" + (at 254.381 195.6379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 254.381 198.0621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 252.4252 200.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 251.46 196.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 251.46 196.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 251.46 196.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 251.46 196.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5ac12c7a-b86a-440c-880c-24721ab7eb50") + ) + (pin "1" + (uuid "848737a9-9a47-4e9a-8b79-2c50cdd2396a") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C139") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 254 200.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e0015bcb-5a69-429d-965f-5a96b55248ce") + (property "Reference" "#PWR011" + (at 254 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 256.54 203.2 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 254 200.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 254 200.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 254 200.66 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "a2e5571b-3a34-4653-8f2d-29da14373d4f") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR011") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:CD74HC4514M96") + (at 82.55 189.23 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e27cc0a3-b63e-4297-b9b4-931297ce782d") + (property "Reference" "U12" + (at 84.7441 163.4957 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "CD74HC4514M96" + (at 84.7441 165.9199 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_SO:SOIC-24W_7.5x15.4mm_P1.27mm" + (at 105.41 214.63 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/cd74hc4514.pdf" + (at 80.01 151.765 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 82.55 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "595-CD74HC4514M96" + (at 82.55 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 82.55 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "67224f65-4012-48dc-9f0b-2d48054f3013") + ) + (pin "9" + (uuid "95ef6b60-bf72-4fa3-b4a3-fbe96aea96bf") + ) + (pin "14" + (uuid "baff5457-a404-4836-bfc6-7cf5075ebee7") + ) + (pin "24" + (uuid "9ddcb118-ef9f-4fbf-864a-27a0b78eb5eb") + ) + (pin "23" + (uuid "36606119-d158-408c-b5d1-f63493dfa7bf") + ) + (pin "6" + (uuid "3eaea381-81f0-4ff1-8313-cb25c58f152b") + ) + (pin "15" + (uuid "fa55d997-23fb-4107-8e2c-788e5885b481") + ) + (pin "2" + (uuid "b7a161d0-2e0e-4985-9ac2-5383191bf8b4") + ) + (pin "5" + (uuid "645c0f8d-27c2-450f-a403-03a644a4a3ff") + ) + (pin "21" + (uuid "293f47fc-af56-45ca-a69d-e57ba9b9e293") + ) + (pin "20" + (uuid "5f4f0849-4c62-4c5f-8d10-43108259170f") + ) + (pin "19" + (uuid "2621e9fb-59e6-4933-8d7d-fab0bad43699") + ) + (pin "4" + (uuid "379bb53c-ce60-4b8e-a2b0-467165202919") + ) + (pin "18" + (uuid "8b694442-6859-4d67-a11f-d8d4eb21dabf") + ) + (pin "22" + (uuid "acc54f86-0f63-417b-b639-2ecb80dc5807") + ) + (pin "17" + (uuid "a1f4cc7e-1bc9-4b41-83a6-df3573f419d8") + ) + (pin "3" + (uuid "dbc617fb-2e63-43d5-ae83-428ea4fe8699") + ) + (pin "13" + (uuid "011fce33-e483-433e-a7c8-bed1eec6778a") + ) + (pin "10" + (uuid "2f341bdf-54ca-4521-abb6-6f7abcbb78e3") + ) + (pin "8" + (uuid "c1f1c431-0ce5-4771-b50c-f85db79e5f82") + ) + (pin "11" + (uuid "111a9002-9cef-4a37-a23c-c386c54be7e5") + ) + (pin "12" + (uuid "30e97f38-87d2-445e-8947-98cf4e6121ca") + ) + (pin "16" + (uuid "733905be-7bfa-4049-a5c0-983a7a6f25cd") + ) + (pin "7" + (uuid "7892a9ff-b5e2-46bf-bbfe-5479ced7fa78") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U12") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 332.74 90.17 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e3406af7-faf3-46bf-a471-c4926d07bf98") + (property "Reference" "#PWR033" + (at 332.74 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 330.2 92.71 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 332.74 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 332.74 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 332.74 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "6c8d7396-8ca7-457d-99c8-2da7fd301bcd") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR033") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 73.66 91.44 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e5d99e8b-05e2-4e0d-81f1-6d1d44f2be23") + (property "Reference" "U21" + (at 73.66 101.9343 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 73.66 99.5101 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 73.66 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 73.66 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 73.66 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 73.66 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 73.66 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "5650a5a8-2b71-458c-a86c-081e320a47ce") + ) + (pin "6" + (uuid "c1c3d9f3-cb6c-43d3-9984-895c2fad50d4") + ) + (pin "4" + (uuid "de24d876-81fa-4e86-bdd3-456754cf310d") + ) + (pin "1" + (uuid "60e842ff-018d-49c4-9fd4-ab5c837b4476") + ) + (pin "2" + (uuid "7c50c88c-e2d1-477c-b67e-525e46c9b359") + ) + (pin "3" + (uuid "0d1f5731-3afb-42e7-9801-03266569ece2") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U21") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 142.24 191.77 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e7406775-1d99-46eb-b0b5-1d515ebc789e") + (property "Reference" "#PWR041" + (at 142.24 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 144.78 193.04 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 142.24 191.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 142.24 191.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 142.24 191.77 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "dd2ff921-b489-4b63-a96d-8c3f4f210bbb") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR041") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 208.28 213.36 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e7b348d6-f4f0-4171-9127-c7243e8c2532") + (property "Reference" "#PWR021" + (at 208.28 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 210.82 215.9 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 208.28 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 208.28 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 208.28 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "19b571fd-c965-499b-8e26-562651015b8d") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR021") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 162.56 199.39 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e86edf67-fc51-4b08-8f91-85be21994f8a") + (property "Reference" "#PWR0214" + (at 162.56 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 166.37 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 162.56 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 162.56 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 162.56 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "f6f2b62f-dc9e-481f-a31c-ec5fffc66d62") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0214") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 306.07 218.44 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "eb10846d-fc8e-44ea-897f-d9cd5322d0df") + (property "Reference" "#PWR025" + (at 306.07 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 308.61 219.71 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 306.07 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 306.07 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 306.07 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "e5e3f37f-7fae-4951-b34b-ebb7b71f0dbf") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR025") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 170.18 57.15 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ecb283fb-92d2-4def-8639-566726e7eec5") + (property "Reference" "U8" + (at 170.18 67.6443 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 170.18 65.2201 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 170.18 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 170.18 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 170.18 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 170.18 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 170.18 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "6656dd5e-8a3d-46cc-a96d-9f0f2e2573b9") + ) + (pin "6" + (uuid "ac687703-2c56-4769-8ac4-c2bc1e8abfee") + ) + (pin "4" + (uuid "4fbce1c0-1a0a-4081-b7bc-2b6592a8cb47") + ) + (pin "1" + (uuid "380b9cf9-142e-44b4-a9e3-6019e1dfd40c") + ) + (pin "2" + (uuid "4d0f16e4-a12b-45e5-aaff-bd222f6ba32a") + ) + (pin "3" + (uuid "53edfe3f-9d7d-4f2a-83f7-6a0e8a313a41") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Relay:Relay_SPDT") + (at 184.15 123.19 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ed6a583c-18f2-485c-80fa-88d81f6663fe") + (property "Reference" "K3" + (at 190.5 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "HF41F/12-ZS" + (at 193.04 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" + (at 185.42 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 184.15 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 184.15 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 184.15 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 184.15 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "A1" + (uuid "26f97252-3284-499d-a6a2-8bd39bbdb793") + ) + (pin "12" + (uuid "077bd44f-7b11-49c6-8cf0-5b31330e1b41") + ) + (pin "14" + (uuid "c9e8494d-3a95-43ca-b03c-c8fb437cc807") + ) + (pin "A2" + (uuid "53a4d0d6-6662-46ab-82a0-d68b5804d6ea") + ) + (pin "11" + (uuid "ecf29c85-b83c-48e6-9a92-af1b7c63614f") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 231.14 153.67 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f16439bc-1f3a-4daa-83ff-d91bf4f3c640") + (property "Reference" "#PWR022" + (at 231.14 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 234.95 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 231.14 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 231.14 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 231.14 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "a376e689-9385-4cf7-84da-13979f3e3f1a") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR022") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 109.22 83.82 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f1e1011c-3bb0-48bd-a004-1b61087fad53") + (property "Reference" "#PWR0196" + (at 109.22 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 111.76 85.09 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 109.22 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 109.22 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 109.22 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "4adb68e3-e25e-400c-9b1f-c62b5f93c904") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0196") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 222.25 149.86 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f1f608ab-6eab-4cda-9645-6fb5525f26ae") + (property "Reference" "R20" + (at 227.4103 149.86 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "52R3" + (at 224.9861 149.86 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 220.472 149.86 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 222.25 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 222.25 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "71-CRCW120649R9FKEAC" + (at 222.25 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 222.25 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6852c157-32a3-45b0-8949-bfb110b2721d") + ) + (pin "1" + (uuid "9eff437a-fd18-4f4b-998f-11256fb7cc7e") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R20") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 176.53 120.65 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f2cad309-0c58-4833-83ee-935a85e173d2") + (property "Reference" "#PWR0200" + (at 176.53 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 173.99 121.92 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 176.53 120.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 176.53 120.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 176.53 120.65 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "39defb52-2838-48aa-986e-91f1c0ebf72a") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0200") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 229.87 185.42 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f450aa28-9ab4-484b-8072-b649a47aff2d") + (property "Reference" "R16" + (at 232.41 185.42 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "~" + (at 232.6061 185.42 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 228.092 185.42 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 229.87 185.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 229.87 185.42 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "755-SFR18EZPF56R0" + (at 229.87 185.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 229.87 185.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "4810c01d-c07c-4a9d-a4c5-3a0b08003bfb") + ) + (pin "1" + (uuid "8cec59f4-83a4-4021-9275-18fcbfb8aa8f") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R16") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 356.87 128.27 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f59c58a3-f9d5-463e-b85e-906f215a8b13") + (property "Reference" "#PWR0206" + (at 356.87 134.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 354.33 130.81 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 356.87 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 356.87 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 356.87 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "b4c037b6-5d2f-41e1-b39d-03fde768b0e8") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0206") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 259.08 212.09 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f70e5ad2-ffd4-4099-a7ea-b988e5d74272") + (property "Reference" "C150" + (at 259.08 205.7867 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 259.08 208.2109 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 262.89 211.1248 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 259.08 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 259.08 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 259.08 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 259.08 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6cb6d1fc-e177-4575-b489-6b8de81cfc30") + ) + (pin "1" + (uuid "82522c8b-3bbb-40e7-9990-47dbe290c6c7") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C150") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 222.25 237.49 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "f8a91502-0ce7-4613-a34d-9933ad411952") + (property "Reference" "L42" + (at 223.5173 236.2779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "22nH" + (at 223.5173 238.7021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 222.25 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 222.25 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 222.25 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 222.25 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 222.25 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "467a24e4-af84-440e-a1a1-981d7b1c7843") + ) + (pin "2" + (uuid "f20092a1-3aaf-4342-b088-5cc58e0155e7") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L42") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 370.84 246.38 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "fa23c43b-8ded-41a0-9416-d1c3c299e85b") + (property "Reference" "#PWR09" + (at 370.84 252.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 370.84 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 370.84 246.38 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 370.84 246.38 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 370.84 246.38 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "6aa716f5-dd2b-40bb-ab41-fc3c13c72227") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR09") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 162.56 279.4 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fa45d19c-855f-4db9-9edd-c392dc835074") + (property "Reference" "#PWR04" + (at 162.56 285.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 165.1 281.94 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 162.56 279.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 162.56 279.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 162.56 279.4 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "47cc6d20-2099-41ff-ac18-b513d619d541") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR04") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 88.9 96.52 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fa657bbb-ead1-4334-bdef-806f5389dc3a") + (property "Reference" "C148" + (at 90.17 102.87 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 90.17 100.33 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 85.09 97.4852 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 88.9 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 88.9 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 88.9 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 88.9 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b8e9b4bf-56b3-4216-940a-e877961f045b") + ) + (pin "1" + (uuid "e5757c7a-8309-4a78-9f63-b1923418739d") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C148") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 199.39 104.14 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fb70c338-df25-43e6-853e-df55fdd03e1b") + (property "Reference" "#PWR0199" + (at 199.39 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 201.93 105.41 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 199.39 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 199.39 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 199.39 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "16974e2e-7f1e-48b9-90fa-c8a907ecf878") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0199") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 237.49 227.33 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fe30a089-92e8-4b09-9ef9-7a6b07164881") + (property "Reference" "#PWR017" + (at 237.49 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 240.03 229.87 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 237.49 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 237.49 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 237.49 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "5ac31f2a-781f-4375-af01-77feaf83a176") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR017") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 148.59 220.98 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fea1c30b-2c60-4269-9d6a-5e37374a67d4") + (property "Reference" "#PWR0188" + (at 148.59 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 144.78 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 148.59 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 148.59 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "8a81d7c2-1bfd-4751-adfd-9f6ac72ff30a") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0188") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole_Pad") + (at 392.43 67.31 270) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ffd6becb-1bd7-4c58-b7f5-da9cc2d0bca9") + (property "Reference" "H2" + (at 396.24 67.31 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "~" + (at 396.24 68.5221 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "MountingHole:MountingHole_4.3mm_M4_DIN965_Pad" + (at 392.43 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 392.43 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 392.43 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Mouser Part Number" "" + (at 392.43 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 392.43 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5705355d-705b-4bf8-bad1-f0193d5e2e9e") + ) + (instances + (project "K9HZ_100W_11band_LPF-Control" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "H2") + (unit 1) + ) + ) + ) + ) + (sheet_instances + (path "/" + (page "1") + ) + ) + (embedded_fonts no) +) diff --git a/wiki/raw/K9HZ_100W_11band_LPF-Filter.kicad_sch b/wiki/raw/K9HZ_100W_11band_LPF-Filter.kicad_sch new file mode 100644 index 0000000..b71e66d --- /dev/null +++ b/wiki/raw/K9HZ_100W_11band_LPF-Filter.kicad_sch @@ -0,0 +1,12182 @@ +(kicad_sch (version 20230121) (generator eeschema) + + (uuid 3c4b9d3b-a516-4fd7-b325-b74c836dee65) + + (paper "A3") + + (title_block + (title "K9HZ 100W 11 Band LPF: Filter board") + (date "2024-01-17") + (rev "V1.00") + (comment 1 "Layout by OG King-KI3P") + (comment 2 "Designed by WJ Schmidt-K9HZ") + ) + + (lib_symbols + (symbol "Connector:Conn_Coaxial" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) + (property "Reference" "J" (at 0.254 3.048 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "Conn_Coaxial" (at 2.921 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" " ~" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "BNC SMA SMB SMC LEMO coaxial connector CINCH RCA MCX MMCX U.FL UMRF" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "coaxial connector (BNC, SMA, SMB, SMC, Cinch/RCA, LEMO, ...)" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "*BNC* *SMA* *SMB* *SMC* *Cinch* *LEMO* *UMRF* *MCX* *U.FL*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "Conn_Coaxial_0_1" + (arc (start -1.778 -0.508) (mid 0.2311 -1.8066) (end 1.778 0) + (stroke (width 0.254) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -2.54 0) + (xy -0.508 0) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 -2.54) + (xy 0 -1.778) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (circle (center 0 0) (radius 0.508) + (stroke (width 0.2032) (type default)) + (fill (type none)) + ) + (arc (start 1.778 0) (mid 0.2099 1.8101) (end -1.778 0.508) + (stroke (width 0.254) (type default)) + (fill (type none)) + ) + ) + (symbol "Conn_Coaxial_1_1" + (pin passive line (at -5.08 0 0) (length 2.54) + (name "In" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 0 -5.08 90) (length 2.54) + (name "Ext" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Device:C" (pin_numbers hide) (pin_names (offset 0.254)) (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) + ) + (property "Datasheet" "~" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "cap capacitor" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Unpolarized capacitor" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "C_*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (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)))) + ) + ) + ) + (symbol "Device:L_Ferrite" (pin_numbers hide) (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) + (property "Reference" "L" (at -1.27 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "L_Ferrite" (at 2.794 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "inductor choke coil reactor magnetic" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Inductor with ferrite core" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "Choke_* *Coil* Inductor_* L_*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "L_Ferrite_0_1" + (arc (start 0 -2.54) (mid 0.6323 -1.905) (end 0 -1.27) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (arc (start 0 -1.27) (mid 0.6323 -0.635) (end 0 0) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.016 -2.794) + (xy 1.016 -2.286) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.016 -1.778) + (xy 1.016 -1.27) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.016 -0.762) + (xy 1.016 -0.254) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.016 0.254) + (xy 1.016 0.762) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.016 1.27) + (xy 1.016 1.778) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.016 2.286) + (xy 1.016 2.794) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.524 -2.286) + (xy 1.524 -2.794) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.524 -1.27) + (xy 1.524 -1.778) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.524 -0.254) + (xy 1.524 -0.762) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.524 0.762) + (xy 1.524 0.254) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.524 1.778) + (xy 1.524 1.27) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.524 2.794) + (xy 1.524 2.286) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (arc (start 0 0) (mid 0.6323 0.635) (end 0 1.27) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (arc (start 0 1.27) (mid 0.6323 1.905) (end 0 2.54) + (stroke (width 0) (type default)) + (fill (type none)) + ) + ) + (symbol "L_Ferrite_1_1" + (pin passive line (at 0 3.81 270) (length 1.27) + (name "1" (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 "2" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Mechanical:MountingHole_Pad" (pin_numbers hide) (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) + (property "Reference" "H" (at 0 6.35 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "MountingHole_Pad" (at 0 4.445 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "mounting hole" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Mounting Hole with connection" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "MountingHole*Pad*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "MountingHole_Pad_0_1" + (circle (center 0 1.27) (radius 1.27) + (stroke (width 1.27) (type default)) + (fill (type none)) + ) + ) + (symbol "MountingHole_Pad_1_1" + (pin input line (at 0 -2.54 90) (length 2.54) + (name "1" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Relay:Relay_SPDT" (in_bom yes) (on_board yes) + (property "Reference" "K" (at 11.43 3.81 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "Relay_SPDT" (at 11.43 1.27 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "" (at 11.43 -1.27 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "Single Pole Relay SPDT" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Monostable Relay SPDT, EN50005" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "Relay?SPDT*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "Relay_SPDT_0_0" + (polyline + (pts + (xy 7.62 5.08) + (xy 7.62 2.54) + (xy 6.985 3.175) + (xy 7.62 3.81) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + ) + (symbol "Relay_SPDT_0_1" + (rectangle (start -10.16 5.08) (end 10.16 -5.08) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (rectangle (start -8.255 1.905) (end -1.905 -1.905) + (stroke (width 0.254) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -7.62 -1.905) + (xy -2.54 1.905) + ) + (stroke (width 0.254) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -5.08 -5.08) + (xy -5.08 -1.905) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -5.08 5.08) + (xy -5.08 1.905) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.905 0) + (xy -1.27 0) + ) + (stroke (width 0.254) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -0.635 0) + (xy 0 0) + ) + (stroke (width 0.254) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.635 0) + (xy 1.27 0) + ) + (stroke (width 0.254) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.905 0) + (xy 2.54 0) + ) + (stroke (width 0.254) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 3.175 0) + (xy 3.81 0) + ) + (stroke (width 0.254) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 5.08 -2.54) + (xy 3.175 3.81) + ) + (stroke (width 0.508) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 5.08 -2.54) + (xy 5.08 -5.08) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 2.54 5.08) + (xy 2.54 2.54) + (xy 3.175 3.175) + (xy 2.54 3.81) + ) + (stroke (width 0) (type default)) + (fill (type outline)) + ) + ) + (symbol "Relay_SPDT_1_1" + (pin passive line (at 5.08 -7.62 90) (length 2.54) + (name "~" (effects (font (size 1.27 1.27)))) + (number "11" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 2.54 7.62 270) (length 2.54) + (name "~" (effects (font (size 1.27 1.27)))) + (number "12" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 7.62 270) (length 2.54) + (name "~" (effects (font (size 1.27 1.27)))) + (number "14" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 7.62 270) (length 2.54) + (name "~" (effects (font (size 1.27 1.27)))) + (number "A1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -7.62 90) (length 2.54) + (name "~" (effects (font (size 1.27 1.27)))) + (number "A2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "T41_Library:IDC_2x5" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) + (property "Reference" "J" (at 1.27 7.62 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "IDC_2x5" (at 1.27 -7.62 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "connector" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Generic connector, double row, 02x05, top/bottom pin numbering scheme (row 1: 1...pins_per_row, row2: pins_per_row+1 ... num_pins), script generated (kicad-library-utils/schlib/autogen/connector/)" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "Connector*:*_2x??_*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "IDC_2x5_1_1" + (rectangle (start -1.27 -4.953) (end 0 -5.207) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 -2.413) (end 0 -2.667) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 1.27) (end 0 -1.27) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 2.667) (end 0 2.413) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 5.207) (end 0 4.953) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 6.35) (end 3.81 -6.35) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (rectangle (start 3.81 -4.953) (end 2.54 -5.207) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 -2.413) (end 2.54 -2.667) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 0.127) (end 2.54 -0.127) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 2.667) (end 2.54 2.413) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 5.207) (end 2.54 4.953) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (pin passive line (at -5.08 5.08 0) (length 3.81) + (name "Pin_1" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -5.08 180) (length 3.81) + (name "Pin_10" (effects (font (size 1.27 1.27)))) + (number "10" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 5.08 180) (length 3.81) + (name "Pin_2" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 2.54 0) (length 3.81) + (name "Pin_3" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 2.54 180) (length 3.81) + (name "Pin_4" (effects (font (size 1.27 1.27)))) + (number "4" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 0 0) (length 3.81) + (name "Pin_5" (effects (font (size 1.27 1.27)))) + (number "5" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 0 180) (length 3.81) + (name "Pin_6" (effects (font (size 1.27 1.27)))) + (number "6" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -2.54 0) (length 3.81) + (name "Pin_7" (effects (font (size 1.27 1.27)))) + (number "7" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -2.54 180) (length 3.81) + (name "Pin_8" (effects (font (size 1.27 1.27)))) + (number "8" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -5.08 0) (length 3.81) + (name "Pin_9" (effects (font (size 1.27 1.27)))) + (number "9" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "power:+12V" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes) + (property "Reference" "#PWR" (at 0 -3.81 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (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) + ) + (property "Datasheet" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "global power" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Power symbol creates a global label with name \"+12V\"" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "+12V_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 0) + (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)) + ) + ) + (symbol "+12V_1_1" + (pin power_in line (at 0 0 90) (length 0) hide + (name "+12V" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "power:GND" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes) + (property "Reference" "#PWR" (at 0 -6.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (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) + ) + (property "Datasheet" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "global power" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Power symbol creates a global label with name \"GND\" , ground" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (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) hide + (name "GND" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + ) + ) + ) + + (junction (at 44.45 125.73) (diameter 0) (color 0 0 0 0) + (uuid 0158b55c-e289-4de2-8786-6d26b705cac1) + ) + (junction (at 372.11 63.5) (diameter 0) (color 0 0 0 0) + (uuid 01fd322b-07dd-4572-a673-d10e40164113) + ) + (junction (at 336.55 120.65) (diameter 0) (color 0 0 0 0) + (uuid 029f3e87-3998-46c3-814f-b208d383bba8) + ) + (junction (at 237.49 140.97) (diameter 0) (color 0 0 0 0) + (uuid 042ff808-a0fb-4270-b1c9-193895ed178d) + ) + (junction (at 72.39 105.41) (diameter 0) (color 0 0 0 0) + (uuid 05acb327-300a-41b8-a836-a42aa1561d28) + ) + (junction (at 207.01 201.93) (diameter 0) (color 0 0 0 0) + (uuid 0afba483-d331-432e-b4d1-3e48be81e234) + ) + (junction (at 20.32 72.39) (diameter 0) (color 0 0 0 0) + (uuid 0cc3a2f8-daaa-48cc-8127-6e4bbe98f9d6) + ) + (junction (at 74.93 63.5) (diameter 0) (color 0 0 0 0) + (uuid 0d0a1807-4d7c-4318-affa-6c694d337ff1) + ) + (junction (at 232.41 222.25) (diameter 0) (color 0 0 0 0) + (uuid 0dfab62d-5270-41c4-9519-718f28fcab70) + ) + (junction (at 152.4 201.93) (diameter 0) (color 0 0 0 0) + (uuid 0ee0ba92-f585-493e-b424-d7a27015cd02) + ) + (junction (at 336.55 166.37) (diameter 0) (color 0 0 0 0) + (uuid 0f6f4332-1014-4071-a595-093da493f487) + ) + (junction (at 72.39 146.05) (diameter 0) (color 0 0 0 0) + (uuid 11083eaf-4920-4cb2-bb6d-29c0be2fd6dd) + ) + (junction (at 270.51 105.41) (diameter 0) (color 0 0 0 0) + (uuid 12f675ec-fc23-4a2a-bed3-6603e2c7c192) + ) + (junction (at 336.55 105.41) (diameter 0) (color 0 0 0 0) + (uuid 16a889b1-e259-4d00-9d87-cf34a5abcca8) + ) + (junction (at 119.38 176.53) (diameter 0) (color 0 0 0 0) + (uuid 170135e2-118e-4b97-a8fa-b69e4b378e43) + ) + (junction (at 232.41 214.63) (diameter 0) (color 0 0 0 0) + (uuid 1dacb650-0b2a-4750-9aa2-5ec4b990deb9) + ) + (junction (at 306.07 201.93) (diameter 0) (color 0 0 0 0) + (uuid 2088e9cb-31fb-4cb9-855f-4341b72a61a8) + ) + (junction (at 270.51 146.05) (diameter 0) (color 0 0 0 0) + (uuid 2258d2bf-e351-40ce-ba89-c116ddc26010) + ) + (junction (at 138.43 100.33) (diameter 0) (color 0 0 0 0) + (uuid 23c908fb-2580-40e6-803a-6bad35d08569) + ) + (junction (at 382.27 176.53) (diameter 0) (color 0 0 0 0) + (uuid 253c48f7-85c1-4576-b3b6-9ec9a04a2d5b) + ) + (junction (at 44.45 140.97) (diameter 0) (color 0 0 0 0) + (uuid 27ce3651-867a-4d70-9854-6a0f520ab799) + ) + (junction (at 125.73 125.73) (diameter 0) (color 0 0 0 0) + (uuid 28d8a03e-b8c1-47da-af50-1d9b285816ae) + ) + (junction (at 105.41 125.73) (diameter 0) (color 0 0 0 0) + (uuid 293ad913-9fff-4a70-b50f-c8ed82c83ac1) + ) + (junction (at 218.44 176.53) (diameter 0) (color 0 0 0 0) + (uuid 29ebfa89-3a9d-4c56-9699-a853762c118c) + ) + (junction (at 306.07 63.5) (diameter 0) (color 0 0 0 0) + (uuid 2b9d13a0-b20d-42f9-8f07-29347659d1d8) + ) + (junction (at 92.71 151.13) (diameter 0) (color 0 0 0 0) + (uuid 2daac84b-5c0c-4559-9722-9d122fd15f3e) + ) + (junction (at 171.45 146.05) (diameter 0) (color 0 0 0 0) + (uuid 311fca14-d988-40bb-8204-68e2898529f2) + ) + (junction (at 303.53 140.97) (diameter 0) (color 0 0 0 0) + (uuid 31f3f2b8-b901-4170-9a10-24003b7b3134) + ) + (junction (at 105.41 140.97) (diameter 0) (color 0 0 0 0) + (uuid 345b053a-7eca-45d1-89c7-effdd7c0ae3e) + ) + (junction (at 273.05 201.93) (diameter 0) (color 0 0 0 0) + (uuid 3548b9c7-41a4-420b-9aa9-dcae5b68763d) + ) + (junction (at 303.53 105.41) (diameter 0) (color 0 0 0 0) + (uuid 39587065-177f-4b4d-8352-0f15d0d3c6a2) + ) + (junction (at 171.45 125.73) (diameter 0) (color 0 0 0 0) + (uuid 3bcd9eee-55f2-4464-b056-966736c5945b) + ) + (junction (at 173.99 201.93) (diameter 0) (color 0 0 0 0) + (uuid 3d7e0eec-6a3b-4a61-9852-36bcfb5d5c12) + ) + (junction (at 237.49 125.73) (diameter 0) (color 0 0 0 0) + (uuid 3d8461dc-ab10-4341-9e1a-8889d370268d) + ) + (junction (at 86.36 72.39) (diameter 0) (color 0 0 0 0) + (uuid 3f738568-90ae-489b-9390-299320ab2416) + ) + (junction (at 369.57 146.05) (diameter 0) (color 0 0 0 0) + (uuid 404395cb-5716-4222-a7c6-37cc50d1e574) + ) + (junction (at 104.14 146.05) (diameter 0) (color 0 0 0 0) + (uuid 44ccb12d-2a8f-4862-9b2e-c4dcb87a157d) + ) + (junction (at 140.97 201.93) (diameter 0) (color 0 0 0 0) + (uuid 46899a91-a693-4532-b376-3810a868bd1a) + ) + (junction (at 53.34 72.39) (diameter 0) (color 0 0 0 0) + (uuid 47ad1f90-07a3-4ad4-9180-0c04570e2d5d) + ) + (junction (at 72.39 100.33) (diameter 0) (color 0 0 0 0) + (uuid 47f3319e-5822-423b-90ab-56868b73d94c) + ) + (junction (at 201.93 213.36) (diameter 0) (color 0 0 0 0) + (uuid 488408e9-d698-4740-a5bf-91d5d61c4f87) + ) + (junction (at 39.37 161.29) (diameter 0) (color 0 0 0 0) + (uuid 488ed9b4-4332-40ea-9678-8cbac795d096) + ) + (junction (at 105.41 146.05) (diameter 0) (color 0 0 0 0) + (uuid 49d2b785-196d-4ce8-b77d-155373fa2658) + ) + (junction (at 158.75 166.37) (diameter 0) (color 0 0 0 0) + (uuid 4a03dc1c-d7b2-425e-b54b-5796650af65b) + ) + (junction (at 77.47 125.73) (diameter 0) (color 0 0 0 0) + (uuid 4bc22207-de95-4266-a81c-75b4f60c5dc3) + ) + (junction (at 138.43 120.65) (diameter 0) (color 0 0 0 0) + (uuid 4d62aee1-0777-4930-9919-6c5117196ab9) + ) + (junction (at 110.49 125.73) (diameter 0) (color 0 0 0 0) + (uuid 51fdbbcb-dc47-4627-8ace-7bd193e6be27) + ) + (junction (at 369.57 125.73) (diameter 0) (color 0 0 0 0) + (uuid 53f81119-2ca1-4d97-b17c-be6fff5780a8) + ) + (junction (at 138.43 161.29) (diameter 0) (color 0 0 0 0) + (uuid 553b32d3-650b-4a0b-8d0e-497b66badb69) + ) + (junction (at 39.37 120.65) (diameter 0) (color 0 0 0 0) + (uuid 5905f607-11fe-46e2-acb4-767087fc841a) + ) + (junction (at 224.79 105.41) (diameter 0) (color 0 0 0 0) + (uuid 5a166756-9169-465a-b743-80640474bd7f) + ) + (junction (at 92.71 120.65) (diameter 0) (color 0 0 0 0) + (uuid 5b7be1ab-21fc-4a36-831f-78027a25179a) + ) + (junction (at 270.51 140.97) (diameter 0) (color 0 0 0 0) + (uuid 5b97a961-f132-426a-8613-36134b018624) + ) + (junction (at 303.53 166.37) (diameter 0) (color 0 0 0 0) + (uuid 5cb9b2e7-716a-444a-8431-d7b54908f7a7) + ) + (junction (at 336.55 125.73) (diameter 0) (color 0 0 0 0) + (uuid 5cf65b0e-7e52-4b8a-b629-a370a3240f34) + ) + (junction (at 270.51 125.73) (diameter 0) (color 0 0 0 0) + (uuid 5e525b67-e00b-4a64-8ea6-00df3f9e9439) + ) + (junction (at 173.99 63.5) (diameter 0) (color 0 0 0 0) + (uuid 5e84fc72-616b-4291-9ebf-8a6edd201c47) + ) + (junction (at 39.37 140.97) (diameter 0) (color 0 0 0 0) + (uuid 608b6b39-1be3-475b-b33e-16aff8fb8ee1) + ) + (junction (at 171.45 166.37) (diameter 0) (color 0 0 0 0) + (uuid 61964c16-03ad-4cb4-8522-dc1cd7e2069b) + ) + (junction (at 140.97 63.5) (diameter 0) (color 0 0 0 0) + (uuid 61e389d7-d350-426b-a9e8-2ec62b24191b) + ) + (junction (at 125.73 146.05) (diameter 0) (color 0 0 0 0) + (uuid 62a8c542-998a-4322-bd3c-c23fe27d2d22) + ) + (junction (at 369.57 140.97) (diameter 0) (color 0 0 0 0) + (uuid 63d03864-019e-42b9-ad81-f54fd8ed2c01) + ) + (junction (at 39.37 105.41) (diameter 0) (color 0 0 0 0) + (uuid 68876207-8479-4f26-9405-122867dc34db) + ) + (junction (at 158.75 105.41) (diameter 0) (color 0 0 0 0) + (uuid 69886d52-b8d8-45c2-ba85-478468f102d2) + ) + (junction (at 74.93 201.93) (diameter 0) (color 0 0 0 0) + (uuid 6cc1e262-5fc4-464b-96e7-7849c681b13d) + ) + (junction (at 201.93 220.98) (diameter 0) (color 0 0 0 0) + (uuid 6dacb0ad-5ca4-40bb-aabe-604d1d84a60a) + ) + (junction (at 204.47 125.73) (diameter 0) (color 0 0 0 0) + (uuid 71da0d83-1c7f-45b4-b1bd-a9f4b555c84e) + ) + (junction (at 152.4 72.39) (diameter 0) (color 0 0 0 0) + (uuid 745063e2-c8d9-49a8-871a-20eb77e8e1c4) + ) + (junction (at 369.57 105.41) (diameter 0) (color 0 0 0 0) + (uuid 750802ed-74e2-45bf-bf82-df8623f62330) + ) + (junction (at 26.67 105.41) (diameter 0) (color 0 0 0 0) + (uuid 7599b1d7-da3e-42aa-bb96-8a361f326c6b) + ) + (junction (at 119.38 72.39) (diameter 0) (color 0 0 0 0) + (uuid 76337f74-a3d6-4b9a-bb86-43cc4ff00dbc) + ) + (junction (at 107.95 201.93) (diameter 0) (color 0 0 0 0) + (uuid 779d649c-2c59-4478-bc66-49c5798b800e) + ) + (junction (at 284.48 72.39) (diameter 0) (color 0 0 0 0) + (uuid 79b1918a-434a-4c95-a968-06cd23497f8b) + ) + (junction (at 237.49 105.41) (diameter 0) (color 0 0 0 0) + (uuid 79b95822-dba6-414a-906b-3b196c23e316) + ) + (junction (at 152.4 176.53) (diameter 0) (color 0 0 0 0) + (uuid 7b5aa022-4d29-4241-bf5a-68619f7074c6) + ) + (junction (at 323.85 146.05) (diameter 0) (color 0 0 0 0) + (uuid 7e64870b-40e5-4dea-b6e8-aed2771fec65) + ) + (junction (at 138.43 125.73) (diameter 0) (color 0 0 0 0) + (uuid 80a7aa05-8adc-443e-b231-cd66ac16bc0d) + ) + (junction (at 59.69 166.37) (diameter 0) (color 0 0 0 0) + (uuid 84dd9000-f8af-412e-89ad-11d7139e9955) + ) + (junction (at 107.95 63.5) (diameter 0) (color 0 0 0 0) + (uuid 84f9cc7f-01a8-41d4-a6ec-acdb1381c16f) + ) + (junction (at 110.49 140.97) (diameter 0) (color 0 0 0 0) + (uuid 8507b524-58d4-488b-9f69-654e48012d14) + ) + (junction (at 105.41 120.65) (diameter 0) (color 0 0 0 0) + (uuid 85c7c6f0-3422-41e9-8249-d6592da9cbf3) + ) + (junction (at 86.36 176.53) (diameter 0) (color 0 0 0 0) + (uuid 87bce0f4-8522-4d9b-a637-fd6f67dda1e3) + ) + (junction (at 224.79 166.37) (diameter 0) (color 0 0 0 0) + (uuid 87fe183c-ccca-4513-ac41-4f9656b03834) + ) + (junction (at 171.45 100.33) (diameter 0) (color 0 0 0 0) + (uuid 88c6de8d-7599-4941-bc53-69981a18ac00) + ) + (junction (at 204.47 146.05) (diameter 0) (color 0 0 0 0) + (uuid 8d56a59f-ef4f-4f22-922d-c296009472ba) + ) + (junction (at 72.39 161.29) (diameter 0) (color 0 0 0 0) + (uuid 910e3595-77d8-46ca-912b-266f63cf5c88) + ) + (junction (at 224.79 125.73) (diameter 0) (color 0 0 0 0) + (uuid 93b450a3-8254-4282-bd8f-463ff63e8d26) + ) + (junction (at 39.37 166.37) (diameter 0) (color 0 0 0 0) + (uuid 94579200-e31c-4402-a56a-21d1f26f3621) + ) + (junction (at 270.51 166.37) (diameter 0) (color 0 0 0 0) + (uuid 94d62b8d-f9e3-4f6e-86d4-971e1850f208) + ) + (junction (at 224.79 146.05) (diameter 0) (color 0 0 0 0) + (uuid 96012ed8-80b0-48d8-b8bd-255dad5063f9) + ) + (junction (at 303.53 146.05) (diameter 0) (color 0 0 0 0) + (uuid 9737e9c8-ecca-4a84-9e69-4a0102fda03f) + ) + (junction (at 26.67 166.37) (diameter 0) (color 0 0 0 0) + (uuid 997e59fe-e39d-4b4d-8bc4-b25b85df15f4) + ) + (junction (at 207.01 63.5) (diameter 0) (color 0 0 0 0) + (uuid 9c76e8fd-57e5-4c41-a4fb-42b953375860) + ) + (junction (at 77.47 140.97) (diameter 0) (color 0 0 0 0) + (uuid 9d1ae1aa-41d7-4fc1-82e5-5e5d8d2b1eb5) + ) + (junction (at 317.5 176.53) (diameter 0) (color 0 0 0 0) + (uuid 9f5c9d10-9074-4d7c-8450-f042932c53fe) + ) + (junction (at 59.69 105.41) (diameter 0) (color 0 0 0 0) + (uuid 9fb5e9ae-5721-4e5c-aded-25e0f7a15911) + ) + (junction (at 240.03 201.93) (diameter 0) (color 0 0 0 0) + (uuid a0cb0f0b-760c-4a21-a1cf-5ace97de6303) + ) + (junction (at 20.32 176.53) (diameter 0) (color 0 0 0 0) + (uuid a0f7a362-1ee4-4407-8a95-4fe26cbc1926) + ) + (junction (at 72.39 125.73) (diameter 0) (color 0 0 0 0) + (uuid a26b0ad4-edcc-4ae7-9e21-b2e80f2f55d6) + ) + (junction (at 237.49 146.05) (diameter 0) (color 0 0 0 0) + (uuid a456f865-38b8-4322-ad5c-c2e6e9c11f84) + ) + (junction (at 26.67 125.73) (diameter 0) (color 0 0 0 0) + (uuid a69ba24f-8e1e-4e34-82a8-447992d7c5c2) + ) + (junction (at 125.73 166.37) (diameter 0) (color 0 0 0 0) + (uuid a77bd802-1dd5-4bf5-8e21-6cd7c59a26c8) + ) + (junction (at 251.46 72.39) (diameter 0) (color 0 0 0 0) + (uuid aadb5206-cdf6-4621-ae00-305a956c37bd) + ) + (junction (at 240.03 63.5) (diameter 0) (color 0 0 0 0) + (uuid ab1efc7e-4eb0-41a0-b6b1-24d150752f2c) + ) + (junction (at 104.14 120.65) (diameter 0) (color 0 0 0 0) + (uuid ac271bcb-3ec0-44fd-b47d-67e41569b617) + ) + (junction (at 26.67 146.05) (diameter 0) (color 0 0 0 0) + (uuid adafbc5e-c5c7-4fe0-8c09-afe986ea69e3) + ) + (junction (at 237.49 100.33) (diameter 0) (color 0 0 0 0) + (uuid b0aa1e96-5483-46a9-84b8-fa3785ff1c2b) + ) + (junction (at 339.09 201.93) (diameter 0) (color 0 0 0 0) + (uuid b65794fa-10b7-41cc-ac06-eae33d51ac3b) + ) + (junction (at 204.47 166.37) (diameter 0) (color 0 0 0 0) + (uuid b8990c6b-dc1d-4ed1-96c0-dab8d2560aea) + ) + (junction (at 171.45 140.97) (diameter 0) (color 0 0 0 0) + (uuid c0f7f1c9-f063-4543-a6cb-bef8369e0855) + ) + (junction (at 317.5 72.39) (diameter 0) (color 0 0 0 0) + (uuid c10b002c-484b-4523-b3c9-aa4081b08012) + ) + (junction (at 138.43 166.37) (diameter 0) (color 0 0 0 0) + (uuid c24b08a7-e177-410b-bf5a-a8c5bcb0f64d) + ) + (junction (at 185.42 72.39) (diameter 0) (color 0 0 0 0) + (uuid c2d5501e-19aa-4172-a0f5-2493f97f63d4) + ) + (junction (at 59.69 146.05) (diameter 0) (color 0 0 0 0) + (uuid c5cb20bc-c43e-4c5d-bb18-72f0d92fe1bf) + ) + (junction (at 339.09 63.5) (diameter 0) (color 0 0 0 0) + (uuid c6a21b99-bd94-400f-8c82-5664cc2ddbc0) + ) + (junction (at 138.43 140.97) (diameter 0) (color 0 0 0 0) + (uuid c842ee14-f274-4dc0-9870-2ea59796619e) + ) + (junction (at 138.43 146.05) (diameter 0) (color 0 0 0 0) + (uuid c870559f-7983-4fef-b4ca-65fb14403a0c) + ) + (junction (at 237.49 120.65) (diameter 0) (color 0 0 0 0) + (uuid c8bfb41d-e282-491a-9295-6dccae458efd) + ) + (junction (at 72.39 120.65) (diameter 0) (color 0 0 0 0) + (uuid cab2cbd1-277c-4601-a70d-1b980076a31c) + ) + (junction (at 39.37 125.73) (diameter 0) (color 0 0 0 0) + (uuid cc88cc81-793a-4043-9abe-60394bb1205d) + ) + (junction (at 39.37 146.05) (diameter 0) (color 0 0 0 0) + (uuid cc9743a3-e8da-4fb1-a1a2-b228995c7a87) + ) + (junction (at 204.47 140.97) (diameter 0) (color 0 0 0 0) + (uuid cd2dcc2d-7899-4891-8daf-e820dcfb9de8) + ) + (junction (at 105.41 166.37) (diameter 0) (color 0 0 0 0) + (uuid ce9cd4c7-655e-4668-a6e8-567cfbb99fc1) + ) + (junction (at 323.85 125.73) (diameter 0) (color 0 0 0 0) + (uuid ced16030-1d71-4dc5-a3a7-6171164b928d) + ) + (junction (at 113.03 220.98) (diameter 0) (color 0 0 0 0) + (uuid d2101ab8-d83c-4d6f-9b35-118376df4f76) + ) + (junction (at 171.45 105.41) (diameter 0) (color 0 0 0 0) + (uuid d23b5aba-58e0-42c8-b39a-f9a316c4a241) + ) + (junction (at 158.75 63.5) (diameter 0) (color 0 0 0 0) + (uuid d5937ee3-b5cf-4fd0-96f0-1c39ee1a1e11) + ) + (junction (at 350.52 176.53) (diameter 0) (color 0 0 0 0) + (uuid d7583fdc-543a-4049-b6fd-f1565e830d3e) + ) + (junction (at 273.05 63.5) (diameter 0) (color 0 0 0 0) + (uuid d99e4a48-7aa6-4551-9604-84c9a2c014c2) + ) + (junction (at 171.45 161.29) (diameter 0) (color 0 0 0 0) + (uuid d9f14644-49e3-4af7-a70d-eed691b610da) + ) + (junction (at 336.55 146.05) (diameter 0) (color 0 0 0 0) + (uuid dad48236-184f-437d-80e0-c6f4f66e3eb0) + ) + (junction (at 303.53 125.73) (diameter 0) (color 0 0 0 0) + (uuid db67bd35-47a5-4f40-b8fb-f84a2ea164f5) + ) + (junction (at 372.11 201.93) (diameter 0) (color 0 0 0 0) + (uuid dbcbc8a4-8591-4fc8-b414-7b2ef42c246a) + ) + (junction (at 72.39 166.37) (diameter 0) (color 0 0 0 0) + (uuid e155f5b8-3428-4d2b-9289-debacb6f0c8d) + ) + (junction (at 59.69 125.73) (diameter 0) (color 0 0 0 0) + (uuid e178260e-556a-4b31-bd73-806171ceafb2) + ) + (junction (at 53.34 176.53) (diameter 0) (color 0 0 0 0) + (uuid e1b504d8-2108-4366-8034-861f505dcb7a) + ) + (junction (at 251.46 176.53) (diameter 0) (color 0 0 0 0) + (uuid e294d097-1cc9-4ea4-97fb-ff2bfbeb21e5) + ) + (junction (at 336.55 140.97) (diameter 0) (color 0 0 0 0) + (uuid e67f7cf0-fc28-4242-9eb9-1471b66342fa) + ) + (junction (at 350.52 72.39) (diameter 0) (color 0 0 0 0) + (uuid e8cf82e4-8bb3-4a0c-b321-815c8c77a120) + ) + (junction (at 218.44 72.39) (diameter 0) (color 0 0 0 0) + (uuid e9c76bb1-83bc-467a-bdaa-31a29418ba4e) + ) + (junction (at 92.71 125.73) (diameter 0) (color 0 0 0 0) + (uuid e9d6b9f8-b615-4348-8e3d-b14a4a3433f1) + ) + (junction (at 185.42 176.53) (diameter 0) (color 0 0 0 0) + (uuid ebd3097a-993d-4bee-9482-b05d789beb1c) + ) + (junction (at 369.57 166.37) (diameter 0) (color 0 0 0 0) + (uuid ed18d3b4-fb19-4ec1-81b2-35f0be8a40df) + ) + (junction (at 284.48 176.53) (diameter 0) (color 0 0 0 0) + (uuid f00e63f5-0ed3-4582-8e73-1d8f711a88d3) + ) + (junction (at 92.71 146.05) (diameter 0) (color 0 0 0 0) + (uuid f15a64ed-e0eb-4d32-bf93-3177606bdcb9) + ) + (junction (at 382.27 72.39) (diameter 0) (color 0 0 0 0) + (uuid f6f62c49-e3ec-4c83-9771-9779c956f49e) + ) + (junction (at 72.39 140.97) (diameter 0) (color 0 0 0 0) + (uuid f85163f9-b181-49c3-9f5e-9abefe92811c) + ) + (junction (at 125.73 105.41) (diameter 0) (color 0 0 0 0) + (uuid f8610d61-d885-412c-857b-4ad6a73611ff) + ) + (junction (at 204.47 105.41) (diameter 0) (color 0 0 0 0) + (uuid f98515c5-56a3-4bfd-92dc-ffded727f2a5) + ) + (junction (at 105.41 100.33) (diameter 0) (color 0 0 0 0) + (uuid fa4b1f40-83bd-4780-aa9b-87f143a92435) + ) + (junction (at 138.43 105.41) (diameter 0) (color 0 0 0 0) + (uuid fafbb912-e36c-4e7a-a30d-107cfa5aaa66) + ) + (junction (at 237.49 166.37) (diameter 0) (color 0 0 0 0) + (uuid fb09cc1b-274b-4f5a-ae59-751a85c98d9e) + ) + (junction (at 237.49 161.29) (diameter 0) (color 0 0 0 0) + (uuid fe1a49c2-ad0a-4ea0-a4cc-3d690fc080d8) + ) + (junction (at 39.37 100.33) (diameter 0) (color 0 0 0 0) + (uuid feb5543b-dcdf-4bc6-bd81-26b6589ddc53) + ) + + (wire (pts (xy 92.71 125.73) (xy 93.98 125.73)) + (stroke (width 0) (type default)) + (uuid 004fe50e-53b3-4379-982d-3547ae0090a4) + ) + (wire (pts (xy 53.34 72.39) (xy 53.34 74.93)) + (stroke (width 0) (type default)) + (uuid 0063cb17-34e0-405f-a844-f93aa2c24ae7) + ) + (wire (pts (xy 171.45 146.05) (xy 171.45 149.86)) + (stroke (width 0) (type default)) + (uuid 008969de-fa53-4365-9d8e-269a7c978bd6) + ) + (wire (pts (xy 336.55 140.97) (xy 341.63 140.97)) + (stroke (width 0) (type default)) + (uuid 00c39a35-aab3-416b-8d6a-9cf91c8a83a6) + ) + (wire (pts (xy 171.45 100.33) (xy 171.45 105.41)) + (stroke (width 0) (type default)) + (uuid 00d15b2a-2ffe-4b8c-9066-0ac240ffcf02) + ) + (wire (pts (xy 35.56 161.29) (xy 39.37 161.29)) + (stroke (width 0) (type default)) + (uuid 011fc241-ac7d-4243-a74d-a8a7eb0b61a2) + ) + (wire (pts (xy 35.56 105.41) (xy 39.37 105.41)) + (stroke (width 0) (type default)) + (uuid 017388da-1052-4f17-8ead-976900d0c188) + ) + (wire (pts (xy 168.91 69.85) (xy 166.37 69.85)) + (stroke (width 0) (type default)) + (uuid 01896741-e7d6-4ac3-9e0a-bc00ef131531) + ) + (wire (pts (xy 104.14 115.57) (xy 104.14 120.65)) + (stroke (width 0) (type default)) + (uuid 01da4029-daae-45c3-b2e2-9bb2535d1268) + ) + (wire (pts (xy 140.97 201.93) (xy 152.4 201.93)) + (stroke (width 0) (type default)) + (uuid 02148d9d-9d4d-4b28-8767-ccab0fbf904b) + ) + (wire (pts (xy 233.68 146.05) (xy 237.49 146.05)) + (stroke (width 0) (type default)) + (uuid 03e2f3b1-e267-4f89-8b8a-e93cb46fa0f6) + ) + (wire (pts (xy 105.41 125.73) (xy 110.49 125.73)) + (stroke (width 0) (type default)) + (uuid 041d0ba7-4af7-4600-ad8e-37a07ffd4f44) + ) + (wire (pts (xy 72.39 120.65) (xy 72.39 125.73)) + (stroke (width 0) (type default)) + (uuid 0431c909-fce4-45ed-9917-8cc35e581986) + ) + (wire (pts (xy 237.49 166.37) (xy 237.49 176.53)) + (stroke (width 0) (type default)) + (uuid 05d14c60-8c2a-48de-85b9-8be96fbf0ff4) + ) + (wire (pts (xy 191.77 105.41) (xy 193.04 105.41)) + (stroke (width 0) (type default)) + (uuid 06002358-f78b-4819-b30a-7e7c8c5a8d71) + ) + (wire (pts (xy 93.98 120.65) (xy 92.71 120.65)) + (stroke (width 0) (type default)) + (uuid 0612f7a3-fa40-446d-8de2-4466bc44e41d) + ) + (wire (pts (xy 303.53 166.37) (xy 303.53 176.53)) + (stroke (width 0) (type default)) + (uuid 06f0f88e-6a1c-41ac-b740-1eb29cf5b295) + ) + (wire (pts (xy 35.56 125.73) (xy 39.37 125.73)) + (stroke (width 0) (type default)) + (uuid 0743ede8-c189-42c7-93cf-3fb05cceb5f8) + ) + (wire (pts (xy 207.01 191.77) (xy 207.01 201.93)) + (stroke (width 0) (type default)) + (uuid 074ada37-4e6d-4801-8883-15a45b3c5bf1) + ) + (wire (pts (xy 74.93 72.39) (xy 74.93 63.5)) + (stroke (width 0) (type default)) + (uuid 07c28af7-6621-4322-a7a1-adb9d6a9bbab) + ) + (wire (pts (xy 50.8 125.73) (xy 50.8 129.54)) + (stroke (width 0) (type default)) + (uuid 08685622-3025-427e-81c1-f2885dd4f504) + ) + (wire (pts (xy 171.45 87.63) (xy 171.45 100.33)) + (stroke (width 0) (type default)) + (uuid 08c1c0c9-1aa3-44ee-b715-f34b4a0f43fb) + ) + (wire (pts (xy 92.71 151.13) (xy 93.98 151.13)) + (stroke (width 0) (type default)) + (uuid 08d7ec1f-82cf-4641-9d48-cdb45605886e) + ) + (wire (pts (xy 26.67 125.73) (xy 27.94 125.73)) + (stroke (width 0) (type default)) + (uuid 08fd7403-a1cb-4364-93e3-7c4e2be8b5c0) + ) + (wire (pts (xy 92.71 115.57) (xy 92.71 120.65)) + (stroke (width 0) (type default)) + (uuid 092e96f6-7c1c-46da-97af-c65ea6ff5f5d) + ) + (wire (pts (xy 267.97 69.85) (xy 265.43 69.85)) + (stroke (width 0) (type default)) + (uuid 09912858-99c9-48ff-a6f2-5fe0ef551e2a) + ) + (wire (pts (xy 161.29 191.77) (xy 161.29 196.85)) + (stroke (width 0) (type default)) + (uuid 0a46710e-2b24-4872-a26c-beb92ad4f8b8) + ) + (wire (pts (xy 290.83 146.05) (xy 292.1 146.05)) + (stroke (width 0) (type default)) + (uuid 0b106124-1f60-4208-a5ba-26b4d573ea88) + ) + (wire (pts (xy 200.66 125.73) (xy 204.47 125.73)) + (stroke (width 0) (type default)) + (uuid 0b8a3353-febc-47a0-a0a5-5b4e1a09e75e) + ) + (wire (pts (xy 270.51 87.63) (xy 270.51 105.41)) + (stroke (width 0) (type default)) + (uuid 0c697795-350f-4f7d-930d-91f6c386096d) + ) + (wire (pts (xy 59.69 125.73) (xy 60.96 125.73)) + (stroke (width 0) (type default)) + (uuid 0c8bd34a-1f20-4b7e-b717-92f4307390ce) + ) + (wire (pts (xy 93.98 100.33) (xy 92.71 100.33)) + (stroke (width 0) (type default)) + (uuid 0db642e6-6b79-412f-82fd-716ab82d6ccc) + ) + (wire (pts (xy 382.27 72.39) (xy 391.16 72.39)) + (stroke (width 0) (type default)) + (uuid 0e5c91cf-bcee-4043-83d3-388b133a001c) + ) + (wire (pts (xy 336.55 105.41) (xy 336.55 109.22)) + (stroke (width 0) (type default)) + (uuid 0e6f6439-6df3-4c11-a64e-e6fec8a4103b) + ) + (wire (pts (xy 336.55 137.16) (xy 336.55 140.97)) + (stroke (width 0) (type default)) + (uuid 0f7a25a7-d561-4036-ad9e-0af374775d7b) + ) + (wire (pts (xy 207.01 201.93) (xy 240.03 201.93)) + (stroke (width 0) (type default)) + (uuid 0f87e271-482b-49cd-aecc-dc4180da0ead) + ) + (wire (pts (xy 138.43 161.29) (xy 138.43 157.48)) + (stroke (width 0) (type default)) + (uuid 0fddef26-4d26-49ac-8283-7760ad9094e5) + ) + (wire (pts (xy 101.6 151.13) (xy 104.14 151.13)) + (stroke (width 0) (type default)) + (uuid 0fe68802-c4bf-4b59-8866-a9f7796f65f1) + ) + (wire (pts (xy 152.4 72.39) (xy 161.29 72.39)) + (stroke (width 0) (type default)) + (uuid 1022f0b4-dbb8-4272-bd93-75c90e2ae3c5) + ) + (wire (pts (xy 401.32 87.63) (xy 401.32 176.53)) + (stroke (width 0) (type default)) + (uuid 10911429-d053-4cf3-a177-34dfd1b98d87) + ) + (wire (pts (xy 213.36 219.71) (xy 218.44 219.71)) + (stroke (width 0) (type default)) + (uuid 10f80b58-eb22-4c99-b923-ee2440e2f9dc) + ) + (wire (pts (xy 72.39 125.73) (xy 72.39 129.54)) + (stroke (width 0) (type default)) + (uuid 115c20ca-2d96-4d41-8846-f5cb75d9d3b3) + ) + (wire (pts (xy 27.94 100.33) (xy 26.67 100.33)) + (stroke (width 0) (type default)) + (uuid 11dc340e-cc51-42ad-9014-42960c6ac81b) + ) + (wire (pts (xy 134.62 105.41) (xy 138.43 105.41)) + (stroke (width 0) (type default)) + (uuid 12eb6b35-1c55-45a0-8939-f044860d497c) + ) + (wire (pts (xy 226.06 140.97) (xy 224.79 140.97)) + (stroke (width 0) (type default)) + (uuid 133962ed-bb05-421e-b522-f518bfda5db9) + ) + (wire (pts (xy 59.69 166.37) (xy 60.96 166.37)) + (stroke (width 0) (type default)) + (uuid 14883c2d-caa6-42e3-b1bb-021812bb6a22) + ) + (wire (pts (xy 107.95 201.93) (xy 140.97 201.93)) + (stroke (width 0) (type default)) + (uuid 157fcc9c-342b-4b8f-baa8-04357bd1d859) + ) + (wire (pts (xy 369.57 140.97) (xy 369.57 146.05)) + (stroke (width 0) (type default)) + (uuid 15c93a10-8971-4aa9-a2a1-7b4c0beaef22) + ) + (wire (pts (xy 138.43 125.73) (xy 143.51 125.73)) + (stroke (width 0) (type default)) + (uuid 16ca4066-87d3-4648-9df6-ffc7ebb958ab) + ) + (wire (pts (xy 369.57 166.37) (xy 369.57 176.53)) + (stroke (width 0) (type default)) + (uuid 1736757c-0294-4047-95bf-258af490ce6f) + ) + (wire (pts (xy 62.23 92.71) (xy 62.23 87.63)) + (stroke (width 0) (type default)) + (uuid 1798c101-3824-4b07-bd0a-ea4cccff72aa) + ) + (wire (pts (xy 201.93 72.39) (xy 201.93 69.85)) + (stroke (width 0) (type default)) + (uuid 185ee9d6-04b6-4c3c-892d-fc576e8b0745) + ) + (wire (pts (xy 134.62 120.65) (xy 138.43 120.65)) + (stroke (width 0) (type default)) + (uuid 198383f3-2bdf-4843-8510-a9290b84f295) + ) + (wire (pts (xy 171.45 116.84) (xy 171.45 125.73)) + (stroke (width 0) (type default)) + (uuid 1c09aaaa-0700-462d-bad2-5fc1e3eccc0a) + ) + (wire (pts (xy 233.68 120.65) (xy 237.49 120.65)) + (stroke (width 0) (type default)) + (uuid 1c73a7c0-9e41-4698-84e5-cd79c03b570b) + ) + (wire (pts (xy 224.79 125.73) (xy 226.06 125.73)) + (stroke (width 0) (type default)) + (uuid 1cb19355-d6c7-45b8-a714-023d5e07c858) + ) + (wire (pts (xy 116.84 125.73) (xy 116.84 129.54)) + (stroke (width 0) (type default)) + (uuid 1cd5077f-98ec-4181-ada9-c40e8ce94283) + ) + (wire (pts (xy 372.11 191.77) (xy 372.11 201.93)) + (stroke (width 0) (type default)) + (uuid 1d1a00f1-72d1-4737-ab73-269280acb470) + ) + (wire (pts (xy 251.46 72.39) (xy 251.46 74.93)) + (stroke (width 0) (type default)) + (uuid 1da7cbfb-91ad-4242-b7b5-649da6becec6) + ) + (wire (pts (xy 382.27 176.53) (xy 391.16 176.53)) + (stroke (width 0) (type default)) + (uuid 1deafb86-bc8e-4c29-b02a-3de04d87cdee) + ) + (wire (pts (xy 403.86 72.39) (xy 403.86 63.5)) + (stroke (width 0) (type default)) + (uuid 1f5e9c40-c602-4437-a4fb-832b37d4e3dc) + ) + (wire (pts (xy 138.43 87.63) (xy 138.43 100.33)) + (stroke (width 0) (type default)) + (uuid 2048c95c-4e23-41e5-8ee9-7f333b1716e5) + ) + (wire (pts (xy 35.56 120.65) (xy 39.37 120.65)) + (stroke (width 0) (type default)) + (uuid 2081441f-a6c0-4a18-bdaf-0b0fe5b59b96) + ) + (wire (pts (xy 72.39 105.41) (xy 72.39 109.22)) + (stroke (width 0) (type default)) + (uuid 20a2db88-7f46-45fb-b1e7-cdfd19f4062c) + ) + (wire (pts (xy 102.87 72.39) (xy 102.87 69.85)) + (stroke (width 0) (type default)) + (uuid 20a75a12-d706-4f24-b266-fb01c002c1e8) + ) + (wire (pts (xy 369.57 140.97) (xy 374.65 140.97)) + (stroke (width 0) (type default)) + (uuid 20d438c7-ee6d-4d8d-b7d6-0e47308d2a28) + ) + (wire (pts (xy 172.72 54.61) (xy 172.72 53.34)) + (stroke (width 0) (type default)) + (uuid 20df548f-10a7-4555-a972-b124a1a13e70) + ) + (wire (pts (xy 266.7 105.41) (xy 270.51 105.41)) + (stroke (width 0) (type default)) + (uuid 21730ae9-7134-4dc9-8ca3-d0ce4ded8aec) + ) + (wire (pts (xy 227.33 92.71) (xy 227.33 87.63)) + (stroke (width 0) (type default)) + (uuid 21cd5200-f864-4d5d-babc-f2378a9c71c6) + ) + (wire (pts (xy 226.06 161.29) (xy 224.79 161.29)) + (stroke (width 0) (type default)) + (uuid 21dea8f4-5480-4803-8277-69928ad71629) + ) + (wire (pts (xy 27.94 140.97) (xy 26.67 140.97)) + (stroke (width 0) (type default)) + (uuid 2251bcec-a3fb-45b4-afed-f04fb766fea0) + ) + (wire (pts (xy 233.68 125.73) (xy 237.49 125.73)) + (stroke (width 0) (type default)) + (uuid 238be581-a8df-427b-b88a-2081259c30f6) + ) + (wire (pts (xy 240.03 63.5) (xy 240.03 72.39)) + (stroke (width 0) (type default)) + (uuid 2450ebd1-8cb9-45db-9405-d01c9eefd6db) + ) + (wire (pts (xy 356.87 125.73) (xy 358.14 125.73)) + (stroke (width 0) (type default)) + (uuid 24b5c5c2-1acd-4465-952a-547086bb08f6) + ) + (wire (pts (xy 53.34 176.53) (xy 53.34 179.07)) + (stroke (width 0) (type default)) + (uuid 25567786-d235-4004-a548-7da9478b6095) + ) + (wire (pts (xy 104.14 125.73) (xy 104.14 120.65)) + (stroke (width 0) (type default)) + (uuid 25e229d3-45b1-4a09-8313-8ea109596fc2) + ) + (wire (pts (xy 336.55 125.73) (xy 341.63 125.73)) + (stroke (width 0) (type default)) + (uuid 26349c15-6b69-487b-b884-0a9d30b414d4) + ) + (wire (pts (xy 59.69 100.33) (xy 59.69 105.41)) + (stroke (width 0) (type default)) + (uuid 26406bda-4394-40f1-90dd-b79b2d47720a) + ) + (wire (pts (xy 101.6 146.05) (xy 104.14 146.05)) + (stroke (width 0) (type default)) + (uuid 26594166-6721-49a0-adac-ebe88512eb16) + ) + (wire (pts (xy 306.07 201.93) (xy 339.09 201.93)) + (stroke (width 0) (type default)) + (uuid 272bc5d1-140b-4a63-ab05-684e05d6696c) + ) + (wire (pts (xy 110.49 140.97) (xy 116.84 140.97)) + (stroke (width 0) (type default)) + (uuid 27dcf563-564f-445f-895a-8cf18fa50a2f) + ) + (wire (pts (xy 391.16 199.39) (xy 391.16 191.77)) + (stroke (width 0) (type default)) + (uuid 28162bf1-5b30-4013-825c-f7d9b6a739b8) + ) + (wire (pts (xy 237.49 166.37) (xy 237.49 161.29)) + (stroke (width 0) (type default)) + (uuid 29aeee31-164b-4c4f-9769-94048667debd) + ) + (wire (pts (xy 224.79 100.33) (xy 224.79 105.41)) + (stroke (width 0) (type default)) + (uuid 29e42ed1-b033-4917-8724-040c60917930) + ) + (wire (pts (xy 201.93 220.98) (xy 200.66 220.98)) + (stroke (width 0) (type default)) + (uuid 2a188427-de38-45b0-a8de-e8703e8483f1) + ) + (wire (pts (xy 308.61 137.16) (xy 308.61 140.97)) + (stroke (width 0) (type default)) + (uuid 2a59ab87-df86-4501-b567-37fe0582848e) + ) + (wire (pts (xy 306.07 191.77) (xy 306.07 201.93)) + (stroke (width 0) (type default)) + (uuid 2aba32a5-67fe-441f-ad28-351b644e113f) + ) + (wire (pts (xy 303.53 140.97) (xy 308.61 140.97)) + (stroke (width 0) (type default)) + (uuid 2ac3a0dc-dcec-4e5f-99b7-c985a865b7fd) + ) + (wire (pts (xy 93.98 140.97) (xy 92.71 140.97)) + (stroke (width 0) (type default)) + (uuid 2afa1241-8d34-47b5-ac07-9b3455a18584) + ) + (wire (pts (xy 168.91 72.39) (xy 168.91 69.85)) + (stroke (width 0) (type default)) + (uuid 2b362725-caef-4a87-a9ce-eacce879efb4) + ) + (wire (pts (xy 204.47 87.63) (xy 204.47 105.41)) + (stroke (width 0) (type default)) + (uuid 2b861809-2028-46f5-a63d-f232983d986c) + ) + (wire (pts (xy 306.07 63.5) (xy 339.09 63.5)) + (stroke (width 0) (type default)) + (uuid 2be7cef6-f1a2-477e-a80d-1e94a330ffae) + ) + (wire (pts (xy 237.49 125.73) (xy 242.57 125.73)) + (stroke (width 0) (type default)) + (uuid 2c163e7e-ff56-4028-a881-3bfc1d4e7054) + ) + (wire (pts (xy 105.41 140.97) (xy 110.49 140.97)) + (stroke (width 0) (type default)) + (uuid 2c249854-755f-4c8e-b369-40d723899107) + ) + (wire (pts (xy 26.67 100.33) (xy 26.67 105.41)) + (stroke (width 0) (type default)) + (uuid 2c705425-edc0-4583-a9f7-6fd29e18b28c) + ) + (wire (pts (xy 39.37 161.29) (xy 39.37 157.48)) + (stroke (width 0) (type default)) + (uuid 2d0b4405-1d5f-4fd3-b39f-1eef9d9aeba6) + ) + (wire (pts (xy 231.14 227.33) (xy 231.14 224.79)) + (stroke (width 0) (type default)) + (uuid 2d174d63-fd2b-453f-ab5c-d5a8df9bd4f7) + ) + (wire (pts (xy 398.78 191.77) (xy 398.78 193.04)) + (stroke (width 0) (type default)) + (uuid 2d3726b8-df7b-4223-b18a-544e7f50d451) + ) + (wire (pts (xy 391.16 93.98) (xy 391.16 87.63)) + (stroke (width 0) (type default)) + (uuid 2d376c41-9cbb-4bcb-abf0-537a2e699360) + ) + (wire (pts (xy 237.49 146.05) (xy 237.49 149.86)) + (stroke (width 0) (type default)) + (uuid 2ecfd4c7-be5e-4690-a2d2-bf3e24408072) + ) + (wire (pts (xy 303.53 157.48) (xy 303.53 166.37)) + (stroke (width 0) (type default)) + (uuid 2ef4ddff-5421-43a5-abe7-00909c7da70d) + ) + (wire (pts (xy 101.6 125.73) (xy 104.14 125.73)) + (stroke (width 0) (type default)) + (uuid 2f10daa3-b238-4e6a-a1eb-39f4034f4d4b) + ) + (wire (pts (xy 72.39 140.97) (xy 77.47 140.97)) + (stroke (width 0) (type default)) + (uuid 2f38cc7d-da2a-47e7-b895-7d7cdfd36d21) + ) + (wire (pts (xy 125.73 166.37) (xy 127 166.37)) + (stroke (width 0) (type default)) + (uuid 2f6c3281-c0f0-4b98-b22a-8cade07f0c27) + ) + (wire (pts (xy 41.91 72.39) (xy 41.91 63.5)) + (stroke (width 0) (type default)) + (uuid 2fe92672-8389-4a05-b8be-714c3c74f269) + ) + (wire (pts (xy 204.47 140.97) (xy 209.55 140.97)) + (stroke (width 0) (type default)) + (uuid 3006a43e-5412-4b74-8e12-4ec20f53acc0) + ) + (wire (pts (xy 152.4 176.53) (xy 152.4 179.07)) + (stroke (width 0) (type default)) + (uuid 301c9d7a-892d-4cc4-bf3f-eff770be8aa6) + ) + (wire (pts (xy 125.73 100.33) (xy 125.73 105.41)) + (stroke (width 0) (type default)) + (uuid 3048cafa-30f8-43e2-9b92-0a543ff9f34a) + ) + (wire (pts (xy 213.36 224.79) (xy 218.44 224.79)) + (stroke (width 0) (type default)) + (uuid 3055889f-327a-434f-94f0-e863c4117867) + ) + (wire (pts (xy 299.72 166.37) (xy 303.53 166.37)) + (stroke (width 0) (type default)) + (uuid 315853ae-39dd-4505-8f38-0bbbf99ed37d) + ) + (wire (pts (xy 237.49 105.41) (xy 237.49 109.22)) + (stroke (width 0) (type default)) + (uuid 316f0aab-2314-4813-a538-aa27567c89d5) + ) + (wire (pts (xy 226.06 120.65) (xy 224.79 120.65)) + (stroke (width 0) (type default)) + (uuid 317f5282-7e8e-4599-9296-55a06eaaee9b) + ) + (wire (pts (xy 270.51 166.37) (xy 270.51 176.53)) + (stroke (width 0) (type default)) + (uuid 3225c525-a0f8-4908-8e18-9a8a585ea8a2) + ) + (wire (pts (xy 200.66 215.9) (xy 201.93 215.9)) + (stroke (width 0) (type default)) + (uuid 327723b9-a69a-4e7e-8c75-58ffa2cede93) + ) + (wire (pts (xy 290.83 105.41) (xy 292.1 105.41)) + (stroke (width 0) (type default)) + (uuid 33507f84-00de-4f47-9637-bb820f14ab57) + ) + (wire (pts (xy 336.55 140.97) (xy 336.55 146.05)) + (stroke (width 0) (type default)) + (uuid 34ed12af-c575-4c24-b2ce-9624bc7f8f5d) + ) + (wire (pts (xy 105.41 87.63) (xy 105.41 100.33)) + (stroke (width 0) (type default)) + (uuid 354f514c-467c-44df-9e3d-ef28d5843ee4) + ) + (wire (pts (xy 273.05 201.93) (xy 306.07 201.93)) + (stroke (width 0) (type default)) + (uuid 3551d731-d137-40f1-a3af-ec2ca11fe8ec) + ) + (wire (pts (xy 39.37 125.73) (xy 44.45 125.73)) + (stroke (width 0) (type default)) + (uuid 3661309b-316f-4061-9f1f-b4525f829eeb) + ) + (wire (pts (xy 86.36 176.53) (xy 86.36 179.07)) + (stroke (width 0) (type default)) + (uuid 37daab92-7438-4389-ba40-4659dc979bd6) + ) + (wire (pts (xy 104.14 146.05) (xy 105.41 146.05)) + (stroke (width 0) (type default)) + (uuid 3967ac14-a2b6-45d6-8b22-7f8de3bc4ab5) + ) + (wire (pts (xy 134.62 140.97) (xy 138.43 140.97)) + (stroke (width 0) (type default)) + (uuid 3a8edd2a-30e1-4a9c-9493-7a4a1b008a6f) + ) + (wire (pts (xy 101.6 100.33) (xy 105.41 100.33)) + (stroke (width 0) (type default)) + (uuid 3a8f61d3-360a-49bd-90eb-966f971ee0f3) + ) + (wire (pts (xy 107.95 63.5) (xy 140.97 63.5)) + (stroke (width 0) (type default)) + (uuid 3aba8142-3914-4669-8d33-331cf2005cab) + ) + (wire (pts (xy 105.41 116.84) (xy 105.41 120.65)) + (stroke (width 0) (type default)) + (uuid 3bd795d1-c520-4543-8938-139eb10e8ece) + ) + (wire (pts (xy 218.44 72.39) (xy 218.44 74.93)) + (stroke (width 0) (type default)) + (uuid 3cac2168-9e75-44b3-8e7b-d5d9091085ab) + ) + (wire (pts (xy 158.75 166.37) (xy 160.02 166.37)) + (stroke (width 0) (type default)) + (uuid 3e1e550e-6223-4fd0-8ddb-107340245bad) + ) + (wire (pts (xy 275.59 137.16) (xy 275.59 140.97)) + (stroke (width 0) (type default)) + (uuid 3e45ea3b-b9e6-4e14-94cd-f0a3e2257eaf) + ) + (wire (pts (xy 213.36 222.25) (xy 218.44 222.25)) + (stroke (width 0) (type default)) + (uuid 3ed1d873-15a0-4e43-8a15-1f5a6a295b38) + ) + (wire (pts (xy 72.39 87.63) (xy 72.39 100.33)) + (stroke (width 0) (type default)) + (uuid 3f1fcd28-7af5-4f1b-be82-a8073af7badc) + ) + (wire (pts (xy 138.43 120.65) (xy 138.43 125.73)) + (stroke (width 0) (type default)) + (uuid 3f7ccf9e-af94-4b40-9fe6-80eb02995e07) + ) + (wire (pts (xy 160.02 100.33) (xy 158.75 100.33)) + (stroke (width 0) (type default)) + (uuid 3f9a3bf1-d0ee-4e47-a711-eb39e66a1503) + ) + (wire (pts (xy 185.42 176.53) (xy 185.42 179.07)) + (stroke (width 0) (type default)) + (uuid 401ccd32-e8ff-49cd-ad31-9d2c5da0cea7) + ) + (wire (pts (xy 200.66 226.06) (xy 200.66 223.52)) + (stroke (width 0) (type default)) + (uuid 408af3fb-70ec-4dfa-bc40-cd1c936a4e5b) + ) + (wire (pts (xy 92.71 146.05) (xy 93.98 146.05)) + (stroke (width 0) (type default)) + (uuid 40d999c4-bab6-44d2-af49-fac9e2fee89b) + ) + (wire (pts (xy 204.47 137.16) (xy 204.47 140.97)) + (stroke (width 0) (type default)) + (uuid 41248aa8-cdcb-42d1-ada1-660d30fffd23) + ) + (wire (pts (xy 138.43 137.16) (xy 138.43 140.97)) + (stroke (width 0) (type default)) + (uuid 415c6c6e-d066-4edc-9761-2608037eec4b) + ) + (wire (pts (xy 336.55 125.73) (xy 336.55 129.54)) + (stroke (width 0) (type default)) + (uuid 41ab845c-4a9e-4f5d-adca-0d8d6c8bfcbd) + ) + (wire (pts (xy 138.43 166.37) (xy 138.43 176.53)) + (stroke (width 0) (type default)) + (uuid 42d8d9fe-5146-4c74-ade4-85167d78a8bd) + ) + (wire (pts (xy 224.79 140.97) (xy 224.79 146.05)) + (stroke (width 0) (type default)) + (uuid 42e83044-6f1c-4d93-90fa-482a4aca75ea) + ) + (wire (pts (xy 237.49 137.16) (xy 237.49 140.97)) + (stroke (width 0) (type default)) + (uuid 42fdf177-99ac-42ff-b670-9d68b1fb0804) + ) + (wire (pts (xy 140.97 63.5) (xy 158.75 63.5)) + (stroke (width 0) (type default)) + (uuid 438f028d-4be3-4837-b166-464d15120202) + ) + (wire (pts (xy 161.29 92.71) (xy 161.29 87.63)) + (stroke (width 0) (type default)) + (uuid 44acd11a-70d4-4a9a-8a6e-436cfdca29dd) + ) + (wire (pts (xy 77.47 125.73) (xy 83.82 125.73)) + (stroke (width 0) (type default)) + (uuid 44db27a9-0d7a-4d29-8829-2d55bfd5b2c6) + ) + (wire (pts (xy 237.49 140.97) (xy 237.49 146.05)) + (stroke (width 0) (type default)) + (uuid 452d35a3-ae04-472a-9642-b4fb2c9b9638) + ) + (wire (pts (xy 251.46 72.39) (xy 260.35 72.39)) + (stroke (width 0) (type default)) + (uuid 46a67129-86bd-4afe-95d1-90738421ecd6) + ) + (wire (pts (xy 105.41 140.97) (xy 105.41 146.05)) + (stroke (width 0) (type default)) + (uuid 47fd2e9a-f6cc-4f05-89de-ee62bd51ada9) + ) + (wire (pts (xy 224.79 166.37) (xy 226.06 166.37)) + (stroke (width 0) (type default)) + (uuid 49fdb54f-f54d-4348-98c8-1d0e547bc389) + ) + (wire (pts (xy 116.84 140.97) (xy 116.84 137.16)) + (stroke (width 0) (type default)) + (uuid 4a65be0a-7c97-4ec2-95ed-c2e6cebe8f8f) + ) + (wire (pts (xy 171.45 137.16) (xy 171.45 140.97)) + (stroke (width 0) (type default)) + (uuid 4a692156-1817-4729-b29b-5076b7e1c9fb) + ) + (wire (pts (xy 158.75 161.29) (xy 158.75 166.37)) + (stroke (width 0) (type default)) + (uuid 4a6fb786-e015-44d7-9986-1d108d00eb65) + ) + (wire (pts (xy 369.57 157.48) (xy 369.57 166.37)) + (stroke (width 0) (type default)) + (uuid 4a6fe0ee-143a-4fcb-a08e-fbde45fc0992) + ) + (wire (pts (xy 323.85 125.73) (xy 325.12 125.73)) + (stroke (width 0) (type default)) + (uuid 4a88aac5-3910-4762-97b1-38b5cf3c2314) + ) + (wire (pts (xy 138.43 125.73) (xy 138.43 129.54)) + (stroke (width 0) (type default)) + (uuid 4adc19c2-82a5-465c-baa3-f39e1cc3fb63) + ) + (wire (pts (xy 403.86 191.77) (xy 403.86 201.93)) + (stroke (width 0) (type default)) + (uuid 4b0329f7-40ac-4be6-982d-4c3f42bca424) + ) + (wire (pts (xy 27.94 120.65) (xy 26.67 120.65)) + (stroke (width 0) (type default)) + (uuid 4b182bff-08cc-4764-a22b-270ffdc43842) + ) + (wire (pts (xy 39.37 166.37) (xy 39.37 176.53)) + (stroke (width 0) (type default)) + (uuid 4b7103a4-51de-46b0-b4cd-91970c33e81b) + ) + (wire (pts (xy 350.52 176.53) (xy 359.41 176.53)) + (stroke (width 0) (type default)) + (uuid 4c0bf723-61cb-4faf-95b5-1f8ba9478b65) + ) + (wire (pts (xy 270.51 125.73) (xy 275.59 125.73)) + (stroke (width 0) (type default)) + (uuid 4c37d254-a55a-4a26-9704-6ebdc03e42ae) + ) + (wire (pts (xy 26.67 140.97) (xy 26.67 146.05)) + (stroke (width 0) (type default)) + (uuid 4dc2af21-25b7-4364-843e-22da028d2265) + ) + (wire (pts (xy 237.49 116.84) (xy 237.49 120.65)) + (stroke (width 0) (type default)) + (uuid 4e1cd2c4-60be-46f7-a3a3-90c827670678) + ) + (wire (pts (xy 336.55 116.84) (xy 336.55 120.65)) + (stroke (width 0) (type default)) + (uuid 4e95823e-0e00-4625-a8df-cced62733708) + ) + (wire (pts (xy 53.34 176.53) (xy 62.23 176.53)) + (stroke (width 0) (type default)) + (uuid 4eaa352a-e193-47d7-ad9e-4c86faca7658) + ) + (wire (pts (xy 209.55 125.73) (xy 209.55 129.54)) + (stroke (width 0) (type default)) + (uuid 4f32f1f4-cf5a-4bd6-91bd-cdd6fcdf31a1) + ) + (wire (pts (xy 398.78 72.39) (xy 398.78 69.85)) + (stroke (width 0) (type default)) + (uuid 4f484b0c-2edf-4713-8fd9-9b651d401391) + ) + (wire (pts (xy 303.53 116.84) (xy 303.53 125.73)) + (stroke (width 0) (type default)) + (uuid 4fe095ef-a0f0-476a-ba35-cfafe7ecb29a) + ) + (wire (pts (xy 171.45 161.29) (xy 171.45 157.48)) + (stroke (width 0) (type default)) + (uuid 5005616e-a106-4bc9-a709-7e4c741c9de3) + ) + (wire (pts (xy 158.75 105.41) (xy 160.02 105.41)) + (stroke (width 0) (type default)) + (uuid 500656ff-276b-4523-aa54-0683a02331f9) + ) + (wire (pts (xy 299.72 105.41) (xy 303.53 105.41)) + (stroke (width 0) (type default)) + (uuid 50148e31-6b72-42d0-951b-e18e1999b725) + ) + (wire (pts (xy 29.21 93.98) (xy 29.21 87.63)) + (stroke (width 0) (type default)) + (uuid 522625af-59d8-4775-8040-edf1530ddde1) + ) + (wire (pts (xy 59.69 161.29) (xy 59.69 166.37)) + (stroke (width 0) (type default)) + (uuid 525562be-1913-4a58-a1b0-b3ab9d64bf2d) + ) + (wire (pts (xy 323.85 105.41) (xy 325.12 105.41)) + (stroke (width 0) (type default)) + (uuid 527350c5-7194-4e45-b7f6-441f49d4de19) + ) + (wire (pts (xy 303.53 140.97) (xy 303.53 146.05)) + (stroke (width 0) (type default)) + (uuid 5355fae2-e7b7-44dc-aba6-546ab66e36e8) + ) + (wire (pts (xy 201.93 215.9) (xy 201.93 213.36)) + (stroke (width 0) (type default)) + (uuid 537561b8-bd58-4cd6-9ea2-c9803444ee6a) + ) + (wire (pts (xy 105.41 100.33) (xy 105.41 109.22)) + (stroke (width 0) (type default)) + (uuid 542ce18f-5655-4ad5-9204-bde15cbb4925) + ) + (wire (pts (xy 372.11 201.93) (xy 403.86 201.93)) + (stroke (width 0) (type default)) + (uuid 55b0a6d0-eb25-4d28-8049-b5893d5e1a15) + ) + (wire (pts (xy 299.72 146.05) (xy 303.53 146.05)) + (stroke (width 0) (type default)) + (uuid 55b9a91c-f430-4377-8951-b4df3e18fa30) + ) + (wire (pts (xy 237.49 140.97) (xy 242.57 140.97)) + (stroke (width 0) (type default)) + (uuid 562bb2de-502f-4c53-a4cc-599ea1287593) + ) + (wire (pts (xy 270.51 157.48) (xy 270.51 166.37)) + (stroke (width 0) (type default)) + (uuid 563ae52e-a02e-417f-802c-df4708dba488) + ) + (wire (pts (xy 224.79 105.41) (xy 226.06 105.41)) + (stroke (width 0) (type default)) + (uuid 56b8544e-1453-44c7-a30f-43bb87ce9943) + ) + (wire (pts (xy 173.99 201.93) (xy 207.01 201.93)) + (stroke (width 0) (type default)) + (uuid 587f9206-6467-4b07-a628-741cb893362b) + ) + (wire (pts (xy 293.37 198.12) (xy 293.37 191.77)) + (stroke (width 0) (type default)) + (uuid 58d7802a-8906-4c4b-8d4d-53f6f1677f8d) + ) + (wire (pts (xy 26.67 166.37) (xy 27.94 166.37)) + (stroke (width 0) (type default)) + (uuid 58e3da13-5762-4d52-bea1-8e403431ae4d) + ) + (wire (pts (xy 204.47 125.73) (xy 209.55 125.73)) + (stroke (width 0) (type default)) + (uuid 59a111d9-dacd-4b38-ba60-b2fbaa28b796) + ) + (wire (pts (xy 300.99 72.39) (xy 300.99 69.85)) + (stroke (width 0) (type default)) + (uuid 59e6fbd0-0edd-46e9-b371-400bb9c15206) + ) + (wire (pts (xy 266.7 125.73) (xy 270.51 125.73)) + (stroke (width 0) (type default)) + (uuid 5a593778-2cb4-4a5e-b502-3140d30812e9) + ) + (wire (pts (xy 68.58 146.05) (xy 72.39 146.05)) + (stroke (width 0) (type default)) + (uuid 5bc19a55-a89b-4d15-9dba-c6b8335f5900) + ) + (wire (pts (xy 68.58 166.37) (xy 72.39 166.37)) + (stroke (width 0) (type default)) + (uuid 5c007c31-85a7-4911-bf2c-d3493f04ec71) + ) + (wire (pts (xy 119.38 72.39) (xy 119.38 74.93)) + (stroke (width 0) (type default)) + (uuid 5c025834-8de7-4b12-9e75-53f44c173f20) + ) + (wire (pts (xy 20.32 72.39) (xy 29.21 72.39)) + (stroke (width 0) (type default)) + (uuid 5d161f32-e394-4146-ac22-16ca392015d5) + ) + (wire (pts (xy 77.47 137.16) (xy 77.47 140.97)) + (stroke (width 0) (type default)) + (uuid 5d203596-365b-4c1c-989d-12df46699a4a) + ) + (wire (pts (xy 104.14 120.65) (xy 105.41 120.65)) + (stroke (width 0) (type default)) + (uuid 5d2fac3a-623c-4dee-bb19-fa31d3043afb) + ) + (wire (pts (xy 60.96 100.33) (xy 59.69 100.33)) + (stroke (width 0) (type default)) + (uuid 5d332055-c245-4b21-939c-df2fb4c430df) + ) + (wire (pts (xy 185.42 176.53) (xy 194.31 176.53)) + (stroke (width 0) (type default)) + (uuid 5d4cfe5b-ed13-43e6-b159-c8cd555c9b65) + ) + (wire (pts (xy 92.71 100.33) (xy 92.71 101.6)) + (stroke (width 0) (type default)) + (uuid 5fc7e2a9-f2ac-4f04-bfc1-649e066ba4c2) + ) + (wire (pts (xy 105.41 120.65) (xy 105.41 125.73)) + (stroke (width 0) (type default)) + (uuid 602e3051-2e8b-483f-bb91-c096d91b69d3) + ) + (wire (pts (xy 218.44 72.39) (xy 227.33 72.39)) + (stroke (width 0) (type default)) + (uuid 605c377f-0ceb-4381-8b3a-1de8740ae822) + ) + (wire (pts (xy 293.37 93.98) (xy 293.37 87.63)) + (stroke (width 0) (type default)) + (uuid 60eaed85-fd1f-4a5d-ab0d-794399c96e54) + ) + (wire (pts (xy 167.64 100.33) (xy 171.45 100.33)) + (stroke (width 0) (type default)) + (uuid 6145eafc-d1a5-4a4c-90e0-4e37fc35f273) + ) + (wire (pts (xy 29.21 198.12) (xy 29.21 191.77)) + (stroke (width 0) (type default)) + (uuid 6224008a-0a64-45f9-b20f-6528ebf838f8) + ) + (wire (pts (xy 350.52 176.53) (xy 350.52 179.07)) + (stroke (width 0) (type default)) + (uuid 645f8401-d2ef-4043-b028-ed7137473c95) + ) + (wire (pts (xy 138.43 166.37) (xy 138.43 161.29)) + (stroke (width 0) (type default)) + (uuid 65d9cba9-b6ca-422a-a75c-4f3967d70533) + ) + (wire (pts (xy 332.74 146.05) (xy 336.55 146.05)) + (stroke (width 0) (type default)) + (uuid 663bde99-498d-483c-a292-876220284423) + ) + (wire (pts (xy 135.89 69.85) (xy 133.35 69.85)) + (stroke (width 0) (type default)) + (uuid 6674c45b-48aa-4bc8-8542-5ec96c78df3a) + ) + (wire (pts (xy 39.37 140.97) (xy 44.45 140.97)) + (stroke (width 0) (type default)) + (uuid 66c005bb-e464-4f3f-98a8-aef85a52ad32) + ) + (wire (pts (xy 68.58 120.65) (xy 72.39 120.65)) + (stroke (width 0) (type default)) + (uuid 67514d83-b750-4610-8226-1381e7549981) + ) + (wire (pts (xy 273.05 72.39) (xy 273.05 63.5)) + (stroke (width 0) (type default)) + (uuid 6781c889-64a7-4be5-8f1f-9eb8abf6a65f) + ) + (wire (pts (xy 167.64 146.05) (xy 171.45 146.05)) + (stroke (width 0) (type default)) + (uuid 67b4c0e4-9ed3-4c40-bcdf-82d2d08b747a) + ) + (wire (pts (xy 359.41 198.12) (xy 359.41 191.77)) + (stroke (width 0) (type default)) + (uuid 683b3bc8-dcf0-45be-86ff-88e17b7fd171) + ) + (wire (pts (xy 171.45 140.97) (xy 171.45 146.05)) + (stroke (width 0) (type default)) + (uuid 687107c5-f7e9-459b-acb8-95b51b38dc4d) + ) + (wire (pts (xy 336.55 146.05) (xy 336.55 149.86)) + (stroke (width 0) (type default)) + (uuid 688c11f8-25b0-40f6-b504-a29f07b131bb) + ) + (wire (pts (xy 270.51 140.97) (xy 275.59 140.97)) + (stroke (width 0) (type default)) + (uuid 68f7526d-a68d-4ade-944b-383971d19528) + ) + (wire (pts (xy 127 140.97) (xy 125.73 140.97)) + (stroke (width 0) (type default)) + (uuid 69918af2-7972-4567-985e-a9eccf52db5a) + ) + (wire (pts (xy 152.4 176.53) (xy 161.29 176.53)) + (stroke (width 0) (type default)) + (uuid 69cd48c3-5e81-47e1-9b76-558549f01a29) + ) + (wire (pts (xy 369.57 125.73) (xy 369.57 129.54)) + (stroke (width 0) (type default)) + (uuid 6ab8d744-58c2-4ddf-8288-0fedd35b70ee) + ) + (wire (pts (xy 356.87 146.05) (xy 358.14 146.05)) + (stroke (width 0) (type default)) + (uuid 6b4c8490-fa99-427a-bdb9-95ffd1cc4710) + ) + (wire (pts (xy 284.48 72.39) (xy 284.48 74.93)) + (stroke (width 0) (type default)) + (uuid 6b9a0c64-4043-4d2c-b595-cb9907b9392f) + ) + (wire (pts (xy 74.93 201.93) (xy 107.95 201.93)) + (stroke (width 0) (type default)) + (uuid 6b9a9a7e-44d5-4560-9f00-e885fae84e13) + ) + (wire (pts (xy 39.37 140.97) (xy 39.37 146.05)) + (stroke (width 0) (type default)) + (uuid 6bfd10d0-a996-4cf9-b80e-839bc9f6d3a3) + ) + (wire (pts (xy 341.63 125.73) (xy 341.63 129.54)) + (stroke (width 0) (type default)) + (uuid 6c4eac2b-dd0f-4ab7-b086-a220af5318b3) + ) + (wire (pts (xy 233.68 105.41) (xy 237.49 105.41)) + (stroke (width 0) (type default)) + (uuid 6c8e65b4-32e3-4c4e-ac2b-f1ff88d8d513) + ) + (wire (pts (xy 110.49 125.73) (xy 110.49 129.54)) + (stroke (width 0) (type default)) + (uuid 6d1aa6bb-b85b-4bf8-a002-d875b3a8ced5) + ) + (wire (pts (xy 237.49 87.63) (xy 237.49 100.33)) + (stroke (width 0) (type default)) + (uuid 6e2536d2-956b-4d29-ba9a-fd3134262152) + ) + (wire (pts (xy 372.11 72.39) (xy 372.11 63.5)) + (stroke (width 0) (type default)) + (uuid 6edc85b3-7166-4be0-a93a-a35af417a2ff) + ) + (wire (pts (xy 266.7 166.37) (xy 270.51 166.37)) + (stroke (width 0) (type default)) + (uuid 6f6cd27b-6d21-460e-8fdd-e779997acd8a) + ) + (wire (pts (xy 83.82 140.97) (xy 83.82 137.16)) + (stroke (width 0) (type default)) + (uuid 6f7f617f-cbfb-47c0-8825-24f4f040d8f2) + ) + (wire (pts (xy 231.14 214.63) (xy 232.41 214.63)) + (stroke (width 0) (type default)) + (uuid 6f970fd7-24fc-4a67-a6d8-b6b8e163cebb) + ) + (wire (pts (xy 350.52 72.39) (xy 350.52 74.93)) + (stroke (width 0) (type default)) + (uuid 6fd51553-2037-4f2d-ba6d-b3b967de1f26) + ) + (wire (pts (xy 39.37 137.16) (xy 39.37 140.97)) + (stroke (width 0) (type default)) + (uuid 6fe1f429-7763-4b37-be8d-3a17ed99fbc2) + ) + (wire (pts (xy 341.63 137.16) (xy 341.63 140.97)) + (stroke (width 0) (type default)) + (uuid 721764c7-25bf-4907-ada5-2cabdaae276c) + ) + (wire (pts (xy 332.74 166.37) (xy 336.55 166.37)) + (stroke (width 0) (type default)) + (uuid 726749e4-56d7-4d74-89b5-e5808d04cf18) + ) + (wire (pts (xy 356.87 105.41) (xy 358.14 105.41)) + (stroke (width 0) (type default)) + (uuid 72d41015-1e05-4194-a042-e6bb23d5de8d) + ) + (wire (pts (xy 171.45 166.37) (xy 171.45 176.53)) + (stroke (width 0) (type default)) + (uuid 73bf8c73-ba34-44a0-9ee4-e6521e0feeb8) + ) + (wire (pts (xy 72.39 146.05) (xy 72.39 149.86)) + (stroke (width 0) (type default)) + (uuid 745896be-8b14-43f3-a25b-b6a94f590945) + ) + (wire (pts (xy 59.69 140.97) (xy 59.69 146.05)) + (stroke (width 0) (type default)) + (uuid 745eefd8-595c-4fc6-a537-9747975ce79d) + ) + (wire (pts (xy 167.64 161.29) (xy 171.45 161.29)) + (stroke (width 0) (type default)) + (uuid 74813040-d1aa-443c-80f9-77096977d752) + ) + (wire (pts (xy 273.05 191.77) (xy 273.05 201.93)) + (stroke (width 0) (type default)) + (uuid 74e1baf8-aad3-4c3f-a6d8-85d237ed8b65) + ) + (wire (pts (xy 382.27 176.53) (xy 382.27 179.07)) + (stroke (width 0) (type default)) + (uuid 7501a589-1134-4f70-b79e-07bfd51bc615) + ) + (wire (pts (xy 125.73 105.41) (xy 127 105.41)) + (stroke (width 0) (type default)) + (uuid 750a1f6d-6bf5-4e43-b5f0-3978c7586d9d) + ) + (wire (pts (xy 317.5 176.53) (xy 326.39 176.53)) + (stroke (width 0) (type default)) + (uuid 76045f1b-2ee9-4cdb-9626-d55085ada1ee) + ) + (wire (pts (xy 167.64 105.41) (xy 171.45 105.41)) + (stroke (width 0) (type default)) + (uuid 7624e0ad-84cf-4c6e-9614-6cd8b2e7d665) + ) + (wire (pts (xy 127 100.33) (xy 125.73 100.33)) + (stroke (width 0) (type default)) + (uuid 7687d3f3-e587-441e-b430-2465132a9fc3) + ) + (wire (pts (xy 72.39 125.73) (xy 77.47 125.73)) + (stroke (width 0) (type default)) + (uuid 76ba1fb9-af1b-4df0-8343-c0857dbadc58) + ) + (wire (pts (xy 194.31 191.77) (xy 194.31 196.85)) + (stroke (width 0) (type default)) + (uuid 777d293a-ddd6-4d52-b59b-3abf967482b8) + ) + (wire (pts (xy 365.76 125.73) (xy 369.57 125.73)) + (stroke (width 0) (type default)) + (uuid 78e4c67a-8e8e-4ffc-84e5-a2dd732c4ba4) + ) + (wire (pts (xy 173.99 63.5) (xy 173.99 72.39)) + (stroke (width 0) (type default)) + (uuid 7923ec58-9e9e-483e-ae4a-8e952687993e) + ) + (wire (pts (xy 182.88 226.06) (xy 200.66 226.06)) + (stroke (width 0) (type default)) + (uuid 7b2a09c0-8e7c-4c31-bf99-caeb95640be9) + ) + (wire (pts (xy 41.91 201.93) (xy 74.93 201.93)) + (stroke (width 0) (type default)) + (uuid 7d111f5c-67f9-46eb-b2e5-d2eb85e531bf) + ) + (wire (pts (xy 74.93 191.77) (xy 74.93 201.93)) + (stroke (width 0) (type default)) + (uuid 7e4c2834-3068-4000-879c-e301c5dca595) + ) + (wire (pts (xy 317.5 72.39) (xy 326.39 72.39)) + (stroke (width 0) (type default)) + (uuid 7e62fc2b-7fbb-4f51-841f-c70ebd0a9aa7) + ) + (wire (pts (xy 127 161.29) (xy 125.73 161.29)) + (stroke (width 0) (type default)) + (uuid 7f1d268b-864a-4993-b398-a49d9d500eb1) + ) + (wire (pts (xy 158.75 100.33) (xy 158.75 105.41)) + (stroke (width 0) (type default)) + (uuid 7ffe1bfe-54cd-4cf0-a50b-b862ce97f420) + ) + (wire (pts (xy 204.47 146.05) (xy 204.47 149.86)) + (stroke (width 0) (type default)) + (uuid 8014132b-acb4-49e7-ad90-dc67d57394b5) + ) + (wire (pts (xy 72.39 140.97) (xy 72.39 146.05)) + (stroke (width 0) (type default)) + (uuid 8015a6a6-10c3-4707-bf8c-8be7613cf27e) + ) + (wire (pts (xy 125.73 140.97) (xy 125.73 146.05)) + (stroke (width 0) (type default)) + (uuid 802e4c79-dde9-456b-acd6-dcddc0a8e876) + ) + (wire (pts (xy 105.41 146.05) (xy 105.41 149.86)) + (stroke (width 0) (type default)) + (uuid 825c170f-a299-4d67-840b-96efbf641b21) + ) + (wire (pts (xy 69.85 72.39) (xy 69.85 69.85)) + (stroke (width 0) (type default)) + (uuid 82cab987-b2c5-46fe-b7c4-cd7ff901dc69) + ) + (wire (pts (xy 332.74 125.73) (xy 336.55 125.73)) + (stroke (width 0) (type default)) + (uuid 838ad642-ba0b-4d2b-8978-c858fc2c8d20) + ) + (wire (pts (xy 240.03 63.5) (xy 273.05 63.5)) + (stroke (width 0) (type default)) + (uuid 83a9141f-3ebf-4652-afde-882c485527c7) + ) + (wire (pts (xy 119.38 176.53) (xy 128.27 176.53)) + (stroke (width 0) (type default)) + (uuid 84776ec2-45a9-4e92-88e1-c36fb39af6ee) + ) + (wire (pts (xy 200.66 146.05) (xy 204.47 146.05)) + (stroke (width 0) (type default)) + (uuid 85245972-2b61-4775-bf59-66e54d6f4b9a) + ) + (wire (pts (xy 213.36 217.17) (xy 218.44 217.17)) + (stroke (width 0) (type default)) + (uuid 852c111c-a792-4612-8817-cb1b8f693d1a) + ) + (wire (pts (xy 134.62 146.05) (xy 138.43 146.05)) + (stroke (width 0) (type default)) + (uuid 8671a9b4-ca98-4a36-af06-4dfee6da2a9c) + ) + (wire (pts (xy 107.95 63.5) (xy 107.95 72.39)) + (stroke (width 0) (type default)) + (uuid 86b15a33-d996-4b15-bbb5-3ee14aee0357) + ) + (wire (pts (xy 356.87 166.37) (xy 358.14 166.37)) + (stroke (width 0) (type default)) + (uuid 86e33657-0fba-49b0-a821-59eb0bfab53a) + ) + (wire (pts (xy 237.49 120.65) (xy 237.49 125.73)) + (stroke (width 0) (type default)) + (uuid 86e95116-a721-4260-a38e-5a22453da077) + ) + (wire (pts (xy 332.74 140.97) (xy 336.55 140.97)) + (stroke (width 0) (type default)) + (uuid 86ebef98-d2ee-472a-881f-ef2f5d4f5d74) + ) + (wire (pts (xy 191.77 166.37) (xy 193.04 166.37)) + (stroke (width 0) (type default)) + (uuid 86fee1cc-89d5-4212-a3fe-816cb44e4674) + ) + (wire (pts (xy 234.95 72.39) (xy 234.95 69.85)) + (stroke (width 0) (type default)) + (uuid 8753e24f-2470-4bd2-a1cd-4cf517724a60) + ) + (wire (pts (xy 128.27 92.71) (xy 128.27 87.63)) + (stroke (width 0) (type default)) + (uuid 8772e7a6-c5ec-4c54-821c-97d3f18f8c42) + ) + (wire (pts (xy 207.01 63.5) (xy 207.01 72.39)) + (stroke (width 0) (type default)) + (uuid 87c78926-66d7-48d9-8b2b-da4c415d44d8) + ) + (wire (pts (xy 152.4 72.39) (xy 152.4 74.93)) + (stroke (width 0) (type default)) + (uuid 8813d6be-8107-48db-b36b-163879f392a3) + ) + (wire (pts (xy 35.56 166.37) (xy 39.37 166.37)) + (stroke (width 0) (type default)) + (uuid 88fb6693-fda7-4231-a3d2-8aed4f2c75be) + ) + (wire (pts (xy 332.74 105.41) (xy 336.55 105.41)) + (stroke (width 0) (type default)) + (uuid 8913d273-260c-4e7c-abb3-52a3658e6e49) + ) + (wire (pts (xy 369.57 146.05) (xy 369.57 149.86)) + (stroke (width 0) (type default)) + (uuid 8944816b-8473-406d-a131-32275a3900e6) + ) + (wire (pts (xy 157.48 212.09) (xy 166.37 212.09)) + (stroke (width 0) (type default)) + (uuid 89534699-6a4a-497a-b955-61b6fe4b5484) + ) + (wire (pts (xy 339.09 201.93) (xy 372.11 201.93)) + (stroke (width 0) (type default)) + (uuid 89a1f33e-482c-4821-bf3e-7e7d7430cb3b) + ) + (wire (pts (xy 303.53 87.63) (xy 303.53 105.41)) + (stroke (width 0) (type default)) + (uuid 89cc8435-7c1b-408b-a5ec-41e359db0513) + ) + (wire (pts (xy 68.58 125.73) (xy 72.39 125.73)) + (stroke (width 0) (type default)) + (uuid 8af843c4-c10c-49e1-bf5b-a531b46bd671) + ) + (wire (pts (xy 92.71 151.13) (xy 92.71 146.05)) + (stroke (width 0) (type default)) + (uuid 8b1b8128-cd44-43f6-822e-0347c7e0b8bd) + ) + (wire (pts (xy 350.52 72.39) (xy 359.41 72.39)) + (stroke (width 0) (type default)) + (uuid 8bcc53bd-fad3-406a-b6fe-8b5f4121061e) + ) + (wire (pts (xy 171.45 105.41) (xy 171.45 109.22)) + (stroke (width 0) (type default)) + (uuid 8bcc6a42-d818-4d39-bcce-ee3c40c317bd) + ) + (wire (pts (xy 231.14 217.17) (xy 232.41 217.17)) + (stroke (width 0) (type default)) + (uuid 8d148f58-9391-4558-9d70-799775012bb5) + ) + (wire (pts (xy 182.88 220.98) (xy 187.96 220.98)) + (stroke (width 0) (type default)) + (uuid 8d4efc0b-7333-4156-afd5-939412845556) + ) + (wire (pts (xy 251.46 176.53) (xy 251.46 179.07)) + (stroke (width 0) (type default)) + (uuid 8d666cc4-e36e-44bc-880e-be5735674b8a) + ) + (wire (pts (xy 125.73 146.05) (xy 127 146.05)) + (stroke (width 0) (type default)) + (uuid 8dd05fb0-af35-46d6-a3ad-5181b747b1fc) + ) + (wire (pts (xy 158.75 125.73) (xy 160.02 125.73)) + (stroke (width 0) (type default)) + (uuid 8e0f0091-12de-4a01-825f-3cb9c134cd59) + ) + (wire (pts (xy 125.73 125.73) (xy 127 125.73)) + (stroke (width 0) (type default)) + (uuid 8e2899b5-b821-4e33-b720-dc1dc7641bcd) + ) + (wire (pts (xy 218.44 176.53) (xy 227.33 176.53)) + (stroke (width 0) (type default)) + (uuid 8ef7fd9f-62ff-4e2e-80a2-3d6a72a37ece) + ) + (wire (pts (xy 110.49 137.16) (xy 110.49 140.97)) + (stroke (width 0) (type default)) + (uuid 8efb7fa6-a881-4fc2-a848-3950309f40cf) + ) + (wire (pts (xy 138.43 116.84) (xy 138.43 120.65)) + (stroke (width 0) (type default)) + (uuid 8f3e1197-105d-468f-96c5-83783bde0eb6) + ) + (wire (pts (xy 267.97 72.39) (xy 267.97 69.85)) + (stroke (width 0) (type default)) + (uuid 8f4e25b8-668b-4e64-b458-52636ad12051) + ) + (wire (pts (xy 35.56 140.97) (xy 39.37 140.97)) + (stroke (width 0) (type default)) + (uuid 8fc200b5-e30b-4478-92b1-fffb3894eb43) + ) + (wire (pts (xy 284.48 72.39) (xy 293.37 72.39)) + (stroke (width 0) (type default)) + (uuid 90e9e638-ac2a-4b4c-a89e-33df3bf20689) + ) + (wire (pts (xy 224.79 120.65) (xy 224.79 125.73)) + (stroke (width 0) (type default)) + (uuid 90fd55c7-e7a6-4c1f-8708-d97c305e1225) + ) + (wire (pts (xy 101.6 115.57) (xy 104.14 115.57)) + (stroke (width 0) (type default)) + (uuid 916967e3-5d9c-44ec-b1a8-bf7684d06229) + ) + (wire (pts (xy 326.39 93.98) (xy 326.39 87.63)) + (stroke (width 0) (type default)) + (uuid 919028d1-7621-4d94-a2f9-2cc0b4cd600f) + ) + (wire (pts (xy 339.09 63.5) (xy 372.11 63.5)) + (stroke (width 0) (type default)) + (uuid 92083523-9b4d-47e7-a3c1-460ac56381df) + ) + (wire (pts (xy 240.03 201.93) (xy 240.03 191.77)) + (stroke (width 0) (type default)) + (uuid 924a717a-70b5-44aa-87ba-d34517266a1e) + ) + (wire (pts (xy 68.58 140.97) (xy 72.39 140.97)) + (stroke (width 0) (type default)) + (uuid 92554269-b237-4bd9-90b7-4a22b3ed7b7f) + ) + (wire (pts (xy 303.53 125.73) (xy 308.61 125.73)) + (stroke (width 0) (type default)) + (uuid 92c79332-82df-4843-85b5-3c71c8f364c6) + ) + (wire (pts (xy 171.45 166.37) (xy 171.45 161.29)) + (stroke (width 0) (type default)) + (uuid 938c4bbc-af43-4ff6-81ed-b144c48d9f48) + ) + (wire (pts (xy 127 120.65) (xy 125.73 120.65)) + (stroke (width 0) (type default)) + (uuid 93b76e4e-895f-457b-b177-aa0fcfd10d90) + ) + (wire (pts (xy 336.55 157.48) (xy 336.55 166.37)) + (stroke (width 0) (type default)) + (uuid 93b8fbca-a3ee-4e94-85c1-e43e9a7bc553) + ) + (wire (pts (xy 290.83 166.37) (xy 292.1 166.37)) + (stroke (width 0) (type default)) + (uuid 9433cf9f-a84d-424d-9481-43905772fb8d) + ) + (wire (pts (xy 68.58 100.33) (xy 72.39 100.33)) + (stroke (width 0) (type default)) + (uuid 945faa7a-9f84-4c1b-8f4f-b219c85211dc) + ) + (wire (pts (xy 317.5 72.39) (xy 317.5 74.93)) + (stroke (width 0) (type default)) + (uuid 94be267a-be35-49d2-ab7a-63020df2b46b) + ) + (wire (pts (xy 233.68 166.37) (xy 237.49 166.37)) + (stroke (width 0) (type default)) + (uuid 95a50f8f-3e4c-4e9f-89e9-6858d9ec1cb7) + ) + (wire (pts (xy 182.88 223.52) (xy 187.96 223.52)) + (stroke (width 0) (type default)) + (uuid 961509ab-4747-488f-9615-75a66fdc1178) + ) + (wire (pts (xy 284.48 176.53) (xy 293.37 176.53)) + (stroke (width 0) (type default)) + (uuid 96256b2f-85b9-4fc9-93e0-dc0434840e31) + ) + (wire (pts (xy 257.81 105.41) (xy 259.08 105.41)) + (stroke (width 0) (type default)) + (uuid 970a8599-881b-42fe-ada4-1028f79ec8cb) + ) + (wire (pts (xy 273.05 63.5) (xy 306.07 63.5)) + (stroke (width 0) (type default)) + (uuid 974346b2-2a99-4d25-82d9-07e30e1d617b) + ) + (wire (pts (xy 209.55 137.16) (xy 209.55 140.97)) + (stroke (width 0) (type default)) + (uuid 977a5457-e82c-463a-b452-ff1b84356ec3) + ) + (wire (pts (xy 275.59 125.73) (xy 275.59 129.54)) + (stroke (width 0) (type default)) + (uuid 97a935ed-dfc6-4108-aaa9-d69935867022) + ) + (wire (pts (xy 26.67 105.41) (xy 27.94 105.41)) + (stroke (width 0) (type default)) + (uuid 9844ff05-257c-42a2-97cc-3766067fefb5) + ) + (wire (pts (xy 257.81 146.05) (xy 259.08 146.05)) + (stroke (width 0) (type default)) + (uuid 988be366-2a0f-410f-af8e-938a0419685e) + ) + (wire (pts (xy 224.79 161.29) (xy 224.79 166.37)) + (stroke (width 0) (type default)) + (uuid 990a02f3-8c3b-4a9a-912b-5e18be5191d2) + ) + (wire (pts (xy 365.76 166.37) (xy 369.57 166.37)) + (stroke (width 0) (type default)) + (uuid 9937684a-5e1e-40d7-8252-d2e76ecbaa4b) + ) + (wire (pts (xy 339.09 191.77) (xy 339.09 201.93)) + (stroke (width 0) (type default)) + (uuid 9955a133-bf01-4005-8b0c-7803d6d073a1) + ) + (wire (pts (xy 72.39 137.16) (xy 72.39 140.97)) + (stroke (width 0) (type default)) + (uuid 9968484e-d859-4ba4-88e6-828ba1c66ff2) + ) + (wire (pts (xy 369.57 116.84) (xy 369.57 125.73)) + (stroke (width 0) (type default)) + (uuid 9969a141-c23f-432a-9fe3-b1c9eb290454) + ) + (wire (pts (xy 257.81 125.73) (xy 259.08 125.73)) + (stroke (width 0) (type default)) + (uuid 9a9efdcc-0f83-4ad7-87b0-fe0e0e7522b1) + ) + (wire (pts (xy 308.61 125.73) (xy 308.61 129.54)) + (stroke (width 0) (type default)) + (uuid 9ab356a8-20e4-493e-85ea-6d89d56d4eb6) + ) + (wire (pts (xy 227.33 191.77) (xy 227.33 196.85)) + (stroke (width 0) (type default)) + (uuid 9ad9f41c-c9a7-4815-b2f1-2a4d571c3466) + ) + (wire (pts (xy 290.83 125.73) (xy 292.1 125.73)) + (stroke (width 0) (type default)) + (uuid 9c7d716a-c9df-459d-ab78-fb71f5b99e56) + ) + (wire (pts (xy 185.42 72.39) (xy 194.31 72.39)) + (stroke (width 0) (type default)) + (uuid 9cd19384-c012-4255-83a6-4cab3d29a1d0) + ) + (wire (pts (xy 152.4 201.93) (xy 152.4 207.01)) + (stroke (width 0) (type default)) + (uuid 9da98624-9d42-45e6-a009-8ff63043af01) + ) + (wire (pts (xy 72.39 166.37) (xy 72.39 176.53)) + (stroke (width 0) (type default)) + (uuid 9f2c0cdd-6a53-4172-bafe-599cb757b348) + ) + (wire (pts (xy 233.68 161.29) (xy 237.49 161.29)) + (stroke (width 0) (type default)) + (uuid 9ff6c653-6e50-4820-9a8c-9532388f7cca) + ) + (wire (pts (xy 365.76 146.05) (xy 369.57 146.05)) + (stroke (width 0) (type default)) + (uuid a04ee7e7-b4e0-4eb8-a410-b5475d3259a7) + ) + (wire (pts (xy 83.82 125.73) (xy 83.82 129.54)) + (stroke (width 0) (type default)) + (uuid a09f21d9-a49e-4b1a-b859-a17817ebbbb8) + ) + (wire (pts (xy 140.97 63.5) (xy 140.97 72.39)) + (stroke (width 0) (type default)) + (uuid a0dd8fad-d5f6-491c-bbca-2a2d62d85acd) + ) + (wire (pts (xy 44.45 140.97) (xy 50.8 140.97)) + (stroke (width 0) (type default)) + (uuid a1130e83-fdd1-4349-9019-9c86b00222a6) + ) + (wire (pts (xy 77.47 125.73) (xy 77.47 129.54)) + (stroke (width 0) (type default)) + (uuid a13e694a-eab9-41aa-952c-2d81ab04ec94) + ) + (wire (pts (xy 369.57 105.41) (xy 369.57 109.22)) + (stroke (width 0) (type default)) + (uuid a1644031-eb24-4c75-abe3-bb13af8acc3a) + ) + (wire (pts (xy 101.6 140.97) (xy 104.14 140.97)) + (stroke (width 0) (type default)) + (uuid a16dc39c-fea2-4b23-9027-0dff2d3ccb88) + ) + (wire (pts (xy 204.47 105.41) (xy 204.47 109.22)) + (stroke (width 0) (type default)) + (uuid a19212c1-77c1-4920-bc73-cca0b390ed0c) + ) + (wire (pts (xy 325.12 120.65) (xy 323.85 120.65)) + (stroke (width 0) (type default)) + (uuid a21f245e-d9ea-4ab1-8316-45443c8fa6d4) + ) + (wire (pts (xy 257.81 166.37) (xy 259.08 166.37)) + (stroke (width 0) (type default)) + (uuid a2445f60-5a85-4633-b52e-2b54c95f6eea) + ) + (wire (pts (xy 234.95 69.85) (xy 232.41 69.85)) + (stroke (width 0) (type default)) + (uuid a2fc0754-aa13-49e4-a8e3-ad5bfd5e67b0) + ) + (wire (pts (xy 200.66 218.44) (xy 201.93 218.44)) + (stroke (width 0) (type default)) + (uuid a3313cb3-c23c-4f2c-ac76-5536c3d1447b) + ) + (wire (pts (xy 323.85 120.65) (xy 323.85 125.73)) + (stroke (width 0) (type default)) + (uuid a4c21675-4a2e-4754-92c8-81363ceb3221) + ) + (wire (pts (xy 86.36 176.53) (xy 95.25 176.53)) + (stroke (width 0) (type default)) + (uuid a5acc901-8bcd-4608-a8e7-8f48c0560fef) + ) + (wire (pts (xy 41.91 191.77) (xy 41.91 201.93)) + (stroke (width 0) (type default)) + (uuid a5de0274-5098-4919-8d44-db67d5b504ca) + ) + (wire (pts (xy 173.99 63.5) (xy 207.01 63.5)) + (stroke (width 0) (type default)) + (uuid a6131ef6-e535-4c37-948e-c7f9aaeb38eb) + ) + (wire (pts (xy 242.57 125.73) (xy 242.57 129.54)) + (stroke (width 0) (type default)) + (uuid a732d346-2e1b-4ce1-b3c7-f6c99745ba2f) + ) + (wire (pts (xy 232.41 219.71) (xy 232.41 222.25)) + (stroke (width 0) (type default)) + (uuid a78887b0-9e4e-4a60-ac7c-0d42d0d11ca9) + ) + (wire (pts (xy 138.43 100.33) (xy 138.43 105.41)) + (stroke (width 0) (type default)) + (uuid a7b75d9e-8734-48b8-8864-c52b6b60243e) + ) + (wire (pts (xy 299.72 125.73) (xy 303.53 125.73)) + (stroke (width 0) (type default)) + (uuid a7f8c020-9cb2-4975-92f7-0e51d4b7e22e) + ) + (wire (pts (xy 20.32 72.39) (xy 20.32 74.93)) + (stroke (width 0) (type default)) + (uuid a80ac0af-3b54-4fef-a6f3-401de24bf26e) + ) + (wire (pts (xy 359.41 93.98) (xy 359.41 87.63)) + (stroke (width 0) (type default)) + (uuid a931924c-9c65-4d04-bfca-2f33a039a7e3) + ) + (wire (pts (xy 374.65 125.73) (xy 374.65 129.54)) + (stroke (width 0) (type default)) + (uuid a955a05b-1be2-402d-b83a-65dd4393a8ab) + ) + (wire (pts (xy 95.25 92.71) (xy 95.25 87.63)) + (stroke (width 0) (type default)) + (uuid a9d97338-dd33-4587-aa6b-80a1ddee19f6) + ) + (wire (pts (xy 72.39 100.33) (xy 72.39 105.41)) + (stroke (width 0) (type default)) + (uuid a9f69d82-d88a-41f9-8e6e-b35f4e59eff6) + ) + (wire (pts (xy 233.68 140.97) (xy 237.49 140.97)) + (stroke (width 0) (type default)) + (uuid aa91567c-d669-4747-a313-b5d9843e7df0) + ) + (wire (pts (xy 398.78 69.85) (xy 396.24 69.85)) + (stroke (width 0) (type default)) + (uuid abe31de4-0b28-443e-9571-886a6373712c) + ) + (wire (pts (xy 36.83 72.39) (xy 36.83 69.85)) + (stroke (width 0) (type default)) + (uuid accd0ac6-e6d4-446a-91da-0255d60de67e) + ) + (wire (pts (xy 231.14 219.71) (xy 232.41 219.71)) + (stroke (width 0) (type default)) + (uuid ad2b1fb6-6703-406c-8e3c-8865fa8ee5ba) + ) + (wire (pts (xy 201.93 213.36) (xy 200.66 213.36)) + (stroke (width 0) (type default)) + (uuid ad492eee-261c-4a35-a405-4e61bca7780c) + ) + (wire (pts (xy 204.47 116.84) (xy 204.47 125.73)) + (stroke (width 0) (type default)) + (uuid ad4e0d3f-ce92-4e6e-a32d-95a3486dcd6c) + ) + (wire (pts (xy 323.85 146.05) (xy 325.12 146.05)) + (stroke (width 0) (type default)) + (uuid ae2328b8-f8cd-4d46-a5b4-c4c2ddf26531) + ) + (wire (pts (xy 367.03 72.39) (xy 367.03 69.85)) + (stroke (width 0) (type default)) + (uuid af67e99e-1cf4-4985-82fe-2c2f87dcf9f9) + ) + (wire (pts (xy 303.53 125.73) (xy 303.53 129.54)) + (stroke (width 0) (type default)) + (uuid b00da782-1505-41e2-9c52-be15b6a3deb7) + ) + (wire (pts (xy 194.31 92.71) (xy 194.31 87.63)) + (stroke (width 0) (type default)) + (uuid b07983f3-0571-47ae-a11d-f8c34227adde) + ) + (wire (pts (xy 300.99 69.85) (xy 298.45 69.85)) + (stroke (width 0) (type default)) + (uuid b0884c92-27d0-4303-ab71-c7a0b248672d) + ) + (wire (pts (xy 68.58 105.41) (xy 72.39 105.41)) + (stroke (width 0) (type default)) + (uuid b0f22b0d-7146-4ef5-8820-e30963a305b7) + ) + (wire (pts (xy 74.93 63.5) (xy 107.95 63.5)) + (stroke (width 0) (type default)) + (uuid b14b9029-07c3-4655-8738-81aeb4e5d27c) + ) + (wire (pts (xy 213.36 227.33) (xy 231.14 227.33)) + (stroke (width 0) (type default)) + (uuid b1a9e544-b4ef-417a-93f7-fbd33b14a419) + ) + (wire (pts (xy 60.96 161.29) (xy 59.69 161.29)) + (stroke (width 0) (type default)) + (uuid b32b8fbd-1813-4c07-8ca2-ca4c057afe3f) + ) + (wire (pts (xy 166.37 213.36) (xy 166.37 212.09)) + (stroke (width 0) (type default)) + (uuid b368a282-6eae-4084-8bd8-0fb1bccb10d9) + ) + (wire (pts (xy 53.34 72.39) (xy 62.23 72.39)) + (stroke (width 0) (type default)) + (uuid b4cb5910-3690-4e9e-be8b-f7fae56ad65b) + ) + (wire (pts (xy 72.39 116.84) (xy 72.39 120.65)) + (stroke (width 0) (type default)) + (uuid b530eddb-c221-45de-aa7c-8b00b8458412) + ) + (wire (pts (xy 138.43 140.97) (xy 138.43 146.05)) + (stroke (width 0) (type default)) + (uuid b5e7d81f-5a25-4320-8340-ced6075c309a) + ) + (wire (pts (xy 59.69 146.05) (xy 60.96 146.05)) + (stroke (width 0) (type default)) + (uuid b7af118b-3efc-4fa4-a19c-a459c5695586) + ) + (wire (pts (xy 104.14 140.97) (xy 104.14 146.05)) + (stroke (width 0) (type default)) + (uuid b907dba2-77af-445f-b32f-fbb3fdebf637) + ) + (wire (pts (xy 59.69 105.41) (xy 60.96 105.41)) + (stroke (width 0) (type default)) + (uuid ba62b95a-7445-4e52-b34f-1a1ec3417fec) + ) + (wire (pts (xy 77.47 140.97) (xy 83.82 140.97)) + (stroke (width 0) (type default)) + (uuid ba76150f-4fc4-48b2-b746-6e1d2a889b40) + ) + (wire (pts (xy 119.38 176.53) (xy 119.38 179.07)) + (stroke (width 0) (type default)) + (uuid ba8c2387-b605-4565-88b4-06d32f504022) + ) + (wire (pts (xy 27.94 161.29) (xy 26.67 161.29)) + (stroke (width 0) (type default)) + (uuid bb7ca0ec-9f5a-42c0-8609-baafe319c3d6) + ) + (wire (pts (xy 382.27 72.39) (xy 382.27 74.93)) + (stroke (width 0) (type default)) + (uuid bcd7638d-007b-406d-970a-04fb24e100b2) + ) + (wire (pts (xy 204.47 166.37) (xy 204.47 176.53)) + (stroke (width 0) (type default)) + (uuid bcf305b3-c4f7-4ca8-9cc8-c827a7c3cef6) + ) + (wire (pts (xy 86.36 72.39) (xy 95.25 72.39)) + (stroke (width 0) (type default)) + (uuid be1dd712-6200-4715-b5d4-0e25623b117e) + ) + (wire (pts (xy 372.11 63.5) (xy 403.86 63.5)) + (stroke (width 0) (type default)) + (uuid befe406f-7d45-42fc-9a5d-1bda06ace603) + ) + (wire (pts (xy 303.53 146.05) (xy 303.53 149.86)) + (stroke (width 0) (type default)) + (uuid bf4946b2-0041-4190-b257-a645ac760b4d) + ) + (wire (pts (xy 143.51 137.16) (xy 143.51 140.97)) + (stroke (width 0) (type default)) + (uuid bffc26a5-2645-4553-b5ea-b134ac07e1a0) + ) + (wire (pts (xy 138.43 105.41) (xy 138.43 109.22)) + (stroke (width 0) (type default)) + (uuid c0e9d76e-b0bb-45de-bbc0-2d94cd9fe3b4) + ) + (wire (pts (xy 270.51 146.05) (xy 270.51 149.86)) + (stroke (width 0) (type default)) + (uuid c0f365e8-c803-4d7d-ba71-64ebd72b3ae4) + ) + (wire (pts (xy 231.14 222.25) (xy 232.41 222.25)) + (stroke (width 0) (type default)) + (uuid c10abd84-9042-4545-8808-f453843ff39d) + ) + (wire (pts (xy 39.37 116.84) (xy 39.37 120.65)) + (stroke (width 0) (type default)) + (uuid c1ae4458-2de5-404f-98fc-6f544d7d5c56) + ) + (wire (pts (xy 39.37 166.37) (xy 39.37 161.29)) + (stroke (width 0) (type default)) + (uuid c1d861ab-c084-43e8-a7b2-7831426e3bc2) + ) + (wire (pts (xy 303.53 105.41) (xy 303.53 109.22)) + (stroke (width 0) (type default)) + (uuid c1ffc16d-dffc-4c6a-9eac-146f20446cd8) + ) + (wire (pts (xy 105.41 166.37) (xy 105.41 176.53)) + (stroke (width 0) (type default)) + (uuid c2c4f6d1-bbd7-4e03-8382-f20dff331275) + ) + (wire (pts (xy 26.67 120.65) (xy 26.67 125.73)) + (stroke (width 0) (type default)) + (uuid c2dca04e-1ef8-496b-8e68-96e363175414) + ) + (wire (pts (xy 266.7 146.05) (xy 270.51 146.05)) + (stroke (width 0) (type default)) + (uuid c2f34839-0380-45cc-96bb-e364043494f4) + ) + (wire (pts (xy 334.01 69.85) (xy 331.47 69.85)) + (stroke (width 0) (type default)) + (uuid c37c78a3-cd6b-4ba0-84ee-de35df9cc777) + ) + (wire (pts (xy 317.5 176.53) (xy 317.5 179.07)) + (stroke (width 0) (type default)) + (uuid c3c8121e-2a5c-46df-93d4-e5f0f8efc027) + ) + (wire (pts (xy 233.68 100.33) (xy 237.49 100.33)) + (stroke (width 0) (type default)) + (uuid c3daebe9-b14e-4d55-8930-b1ef4744d449) + ) + (wire (pts (xy 92.71 120.65) (xy 92.71 125.73)) + (stroke (width 0) (type default)) + (uuid c3e8b2e1-8141-436c-b369-978c94701b10) + ) + (wire (pts (xy 44.45 137.16) (xy 44.45 140.97)) + (stroke (width 0) (type default)) + (uuid c3feaa96-c97c-435e-a8c3-82a656caf6a8) + ) + (wire (pts (xy 201.93 218.44) (xy 201.93 220.98)) + (stroke (width 0) (type default)) + (uuid c47a56c7-c6c1-4a8d-80d8-be7b6606d8e8) + ) + (wire (pts (xy 339.09 72.39) (xy 339.09 63.5)) + (stroke (width 0) (type default)) + (uuid c4e78ef9-ebc5-4496-a1a8-2c8328a0bf14) + ) + (wire (pts (xy 303.53 137.16) (xy 303.53 140.97)) + (stroke (width 0) (type default)) + (uuid c5036352-d2dc-4540-b2f2-011109f37686) + ) + (wire (pts (xy 270.51 137.16) (xy 270.51 140.97)) + (stroke (width 0) (type default)) + (uuid c528a0ea-67c5-477c-9335-a9d621127483) + ) + (wire (pts (xy 336.55 87.63) (xy 336.55 105.41)) + (stroke (width 0) (type default)) + (uuid c52a1a8b-7731-4dfa-83b4-275f38c6f519) + ) + (wire (pts (xy 35.56 100.33) (xy 39.37 100.33)) + (stroke (width 0) (type default)) + (uuid c5a64b36-75ad-433b-9a0c-1c677362a5cd) + ) + (wire (pts (xy 237.49 161.29) (xy 237.49 157.48)) + (stroke (width 0) (type default)) + (uuid c5affc48-55a4-44d1-ae76-6a45a7c19b93) + ) + (wire (pts (xy 284.48 176.53) (xy 284.48 179.07)) + (stroke (width 0) (type default)) + (uuid c683c40e-d760-4437-bf20-b4008fb3138d) + ) + (wire (pts (xy 204.47 125.73) (xy 204.47 129.54)) + (stroke (width 0) (type default)) + (uuid c6bfcff1-f562-4954-8522-602200acf7b0) + ) + (wire (pts (xy 134.62 161.29) (xy 138.43 161.29)) + (stroke (width 0) (type default)) + (uuid c776b6fb-bd7b-483b-9b18-2758c297ff6a) + ) + (wire (pts (xy 59.69 120.65) (xy 59.69 125.73)) + (stroke (width 0) (type default)) + (uuid c80c4efb-b3e2-4ab2-a46c-212cff27d294) + ) + (wire (pts (xy 26.67 161.29) (xy 26.67 166.37)) + (stroke (width 0) (type default)) + (uuid ca3d34d7-b67a-4534-a2ca-95c901450c96) + ) + (wire (pts (xy 176.53 125.73) (xy 176.53 129.54)) + (stroke (width 0) (type default)) + (uuid ca5763c6-ab59-43bb-8d42-78f70bf75f9a) + ) + (wire (pts (xy 92.71 140.97) (xy 92.71 146.05)) + (stroke (width 0) (type default)) + (uuid cae914b9-e92d-421f-a15c-d450c847b3c0) + ) + (wire (pts (xy 191.77 146.05) (xy 193.04 146.05)) + (stroke (width 0) (type default)) + (uuid cbe121cf-06bc-4f26-a4d2-4194b366d1de) + ) + (wire (pts (xy 226.06 100.33) (xy 224.79 100.33)) + (stroke (width 0) (type default)) + (uuid cccb7116-f4d7-4578-948d-1a78dc8a445d) + ) + (wire (pts (xy 134.62 125.73) (xy 138.43 125.73)) + (stroke (width 0) (type default)) + (uuid ce236dfc-b78e-4841-a9c9-4019c88e03b5) + ) + (wire (pts (xy 332.74 120.65) (xy 336.55 120.65)) + (stroke (width 0) (type default)) + (uuid ce9895ce-678b-4ea0-9273-6b73b1e97563) + ) + (wire (pts (xy 270.51 125.73) (xy 270.51 129.54)) + (stroke (width 0) (type default)) + (uuid ce9f7546-c4cd-4cf2-95e1-50f267582202) + ) + (wire (pts (xy 93.98 115.57) (xy 92.71 115.57)) + (stroke (width 0) (type default)) + (uuid cee5e56d-5d38-4160-9bf8-56ce2352e86c) + ) + (wire (pts (xy 152.4 201.93) (xy 173.99 201.93)) + (stroke (width 0) (type default)) + (uuid cef42e0a-0ea7-44ec-a93d-005e1a85b62e) + ) + (wire (pts (xy 72.39 166.37) (xy 72.39 161.29)) + (stroke (width 0) (type default)) + (uuid cf9295f0-a29c-49ff-86b6-212e34573d76) + ) + (wire (pts (xy 160.02 161.29) (xy 158.75 161.29)) + (stroke (width 0) (type default)) + (uuid d0221a50-403c-4d07-933c-96cd786d3b42) + ) + (wire (pts (xy 237.49 125.73) (xy 237.49 129.54)) + (stroke (width 0) (type default)) + (uuid d0283780-c58a-42d4-9cfb-db0c8eb7516b) + ) + (wire (pts (xy 20.32 176.53) (xy 29.21 176.53)) + (stroke (width 0) (type default)) + (uuid d07a7f27-846a-4bd9-b205-2a6d9e28ae08) + ) + (wire (pts (xy 191.77 125.73) (xy 193.04 125.73)) + (stroke (width 0) (type default)) + (uuid d0873c77-8dea-40e6-9f06-8536e65f19b5) + ) + (wire (pts (xy 336.55 120.65) (xy 336.55 125.73)) + (stroke (width 0) (type default)) + (uuid d14de2e4-2ba3-4a50-b7ef-2f9504fb4c68) + ) + (wire (pts (xy 325.12 140.97) (xy 323.85 140.97)) + (stroke (width 0) (type default)) + (uuid d155f315-31b3-42c2-b481-1d39ab6c111d) + ) + (wire (pts (xy 128.27 191.77) (xy 128.27 196.85)) + (stroke (width 0) (type default)) + (uuid d1c0c303-6d08-48c7-85c4-48940d9d4792) + ) + (wire (pts (xy 369.57 87.63) (xy 369.57 105.41)) + (stroke (width 0) (type default)) + (uuid d1d6d611-3848-41cc-ae1a-2129ed1327c7) + ) + (wire (pts (xy 270.51 105.41) (xy 270.51 109.22)) + (stroke (width 0) (type default)) + (uuid d2999ab5-c2c9-43af-8e82-1ffafbb6fd88) + ) + (wire (pts (xy 39.37 120.65) (xy 39.37 125.73)) + (stroke (width 0) (type default)) + (uuid d2d94966-2d85-4e41-8c7e-fdae26001c45) + ) + (wire (pts (xy 125.73 161.29) (xy 125.73 166.37)) + (stroke (width 0) (type default)) + (uuid d423dbbe-7477-4e4e-8007-8e8fa4998b20) + ) + (wire (pts (xy 336.55 166.37) (xy 336.55 176.53)) + (stroke (width 0) (type default)) + (uuid d48aff6c-c638-4743-949a-d1f3533bcf9e) + ) + (wire (pts (xy 119.38 72.39) (xy 128.27 72.39)) + (stroke (width 0) (type default)) + (uuid d623cead-176f-4844-b6e1-54319d7875b6) + ) + (wire (pts (xy 182.88 218.44) (xy 187.96 218.44)) + (stroke (width 0) (type default)) + (uuid d708607f-43a0-4eb6-a0ed-c897d3332e2d) + ) + (wire (pts (xy 101.6 166.37) (xy 105.41 166.37)) + (stroke (width 0) (type default)) + (uuid d70feac0-f10d-4a51-af87-2506eea65a65) + ) + (wire (pts (xy 69.85 69.85) (xy 67.31 69.85)) + (stroke (width 0) (type default)) + (uuid d7225bbc-6409-4fd5-8a96-45ca64adf2a6) + ) + (wire (pts (xy 95.25 191.77) (xy 95.25 196.85)) + (stroke (width 0) (type default)) + (uuid d757eb11-b48e-4ba8-9bbc-5bb93f255b2f) + ) + (wire (pts (xy 138.43 140.97) (xy 143.51 140.97)) + (stroke (width 0) (type default)) + (uuid d7a30c8e-77ea-4423-a8ce-1a8ab361ba90) + ) + (wire (pts (xy 72.39 161.29) (xy 72.39 157.48)) + (stroke (width 0) (type default)) + (uuid d87c4b6a-3d3d-445b-b3a7-b4d02ed6050b) + ) + (wire (pts (xy 158.75 63.5) (xy 173.99 63.5)) + (stroke (width 0) (type default)) + (uuid d8c2005a-f820-4ec8-bde3-da32fe1eb5ae) + ) + (wire (pts (xy 251.46 176.53) (xy 260.35 176.53)) + (stroke (width 0) (type default)) + (uuid d8fb3693-3828-48f1-ba3d-df36d491ec95) + ) + (wire (pts (xy 213.36 214.63) (xy 218.44 214.63)) + (stroke (width 0) (type default)) + (uuid d9b5e393-0004-41fa-8cf1-d44c6b0593dc) + ) + (wire (pts (xy 172.72 53.34) (xy 163.83 53.34)) + (stroke (width 0) (type default)) + (uuid d9cb8297-fa27-4e48-99c1-f394f5f73887) + ) + (wire (pts (xy 173.99 191.77) (xy 173.99 201.93)) + (stroke (width 0) (type default)) + (uuid da470e7c-0d0f-42ef-87d4-4d80762684c7) + ) + (wire (pts (xy 171.45 125.73) (xy 171.45 129.54)) + (stroke (width 0) (type default)) + (uuid da63adcc-dfb7-439d-b1c3-cf41d7cd28e1) + ) + (wire (pts (xy 334.01 72.39) (xy 334.01 69.85)) + (stroke (width 0) (type default)) + (uuid da8476c1-b71b-4625-93d7-6a8a6c7568af) + ) + (wire (pts (xy 365.76 105.41) (xy 369.57 105.41)) + (stroke (width 0) (type default)) + (uuid daef53ba-f1f7-42c8-8abb-76f1579f51c7) + ) + (wire (pts (xy 104.14 151.13) (xy 104.14 146.05)) + (stroke (width 0) (type default)) + (uuid db0f3ca0-4dd8-4c6d-9402-c3cf719bb641) + ) + (wire (pts (xy 50.8 140.97) (xy 50.8 137.16)) + (stroke (width 0) (type default)) + (uuid dc4e1d4b-ca68-4ae1-8356-f692ffed77de) + ) + (wire (pts (xy 86.36 72.39) (xy 86.36 74.93)) + (stroke (width 0) (type default)) + (uuid dcace56d-e5d3-4213-973b-ddcfd0c5ed97) + ) + (wire (pts (xy 105.41 137.16) (xy 105.41 140.97)) + (stroke (width 0) (type default)) + (uuid dd6492e2-e6be-4320-b169-d0dcaeb5d120) + ) + (wire (pts (xy 113.03 220.98) (xy 115.57 220.98)) + (stroke (width 0) (type default)) + (uuid de026ed2-780e-481b-bd93-d226a17e4d78) + ) + (wire (pts (xy 39.37 125.73) (xy 39.37 129.54)) + (stroke (width 0) (type default)) + (uuid de05749a-a883-4737-b7e4-6f01cb03e3c9) + ) + (wire (pts (xy 39.37 87.63) (xy 39.37 100.33)) + (stroke (width 0) (type default)) + (uuid de3b0842-394d-4fa2-a17c-b7b7a83adcc3) + ) + (wire (pts (xy 204.47 140.97) (xy 204.47 146.05)) + (stroke (width 0) (type default)) + (uuid df347fe7-2f92-481c-969d-bac70b964ddc) + ) + (wire (pts (xy 158.75 58.42) (xy 158.75 63.5)) + (stroke (width 0) (type default)) + (uuid dfd9b8ea-5e29-483e-b934-e5b79f8190d9) + ) + (wire (pts (xy 105.41 157.48) (xy 105.41 166.37)) + (stroke (width 0) (type default)) + (uuid e034dce4-dedf-459f-823a-1064b34702c5) + ) + (wire (pts (xy 204.47 157.48) (xy 204.47 166.37)) + (stroke (width 0) (type default)) + (uuid e1383f55-2ccd-4600-8912-5a5b4d1d12ef) + ) + (wire (pts (xy 26.67 146.05) (xy 27.94 146.05)) + (stroke (width 0) (type default)) + (uuid e1d57ea2-918e-4a81-8af1-1f132dc720da) + ) + (wire (pts (xy 60.96 120.65) (xy 59.69 120.65)) + (stroke (width 0) (type default)) + (uuid e413d38d-3a3b-4696-ae40-a40e686ac753) + ) + (wire (pts (xy 110.49 125.73) (xy 116.84 125.73)) + (stroke (width 0) (type default)) + (uuid e50bce19-1220-4cb1-b33f-d4d5de438e63) + ) + (wire (pts (xy 240.03 201.93) (xy 273.05 201.93)) + (stroke (width 0) (type default)) + (uuid e6463a5f-5426-409c-aa0e-f382d9a91e90) + ) + (wire (pts (xy 306.07 72.39) (xy 306.07 63.5)) + (stroke (width 0) (type default)) + (uuid e66fca08-7983-4d12-8256-f5a5b2b1f141) + ) + (wire (pts (xy 113.03 215.9) (xy 113.03 220.98)) + (stroke (width 0) (type default)) + (uuid e688566d-71b3-4b3e-9120-e2b42367bb32) + ) + (wire (pts (xy 60.96 140.97) (xy 59.69 140.97)) + (stroke (width 0) (type default)) + (uuid e7c7007d-2264-4531-9925-2973bb744e25) + ) + (wire (pts (xy 105.41 125.73) (xy 105.41 129.54)) + (stroke (width 0) (type default)) + (uuid e809faaf-3050-4a79-a402-aa902b422ca8) + ) + (wire (pts (xy 260.35 93.98) (xy 260.35 87.63)) + (stroke (width 0) (type default)) + (uuid e90f4197-5d65-4576-8b6c-d3fe1f345520) + ) + (wire (pts (xy 68.58 161.29) (xy 72.39 161.29)) + (stroke (width 0) (type default)) + (uuid e99a0e23-2802-401e-8986-5f88b5939de4) + ) + (wire (pts (xy 134.62 166.37) (xy 138.43 166.37)) + (stroke (width 0) (type default)) + (uuid e9e62d6d-c270-4abc-bdec-b8ba8e220777) + ) + (wire (pts (xy 92.71 166.37) (xy 93.98 166.37)) + (stroke (width 0) (type default)) + (uuid ea402ee7-a3fe-4807-b8e6-9f27b900fa3c) + ) + (wire (pts (xy 41.91 63.5) (xy 74.93 63.5)) + (stroke (width 0) (type default)) + (uuid ebcc6e70-8716-498e-853c-69aa244b0880) + ) + (wire (pts (xy 107.95 191.77) (xy 107.95 201.93)) + (stroke (width 0) (type default)) + (uuid ec1e9ff9-c9ee-4d13-b7c9-6b8d81188bce) + ) + (wire (pts (xy 20.32 176.53) (xy 20.32 179.07)) + (stroke (width 0) (type default)) + (uuid ecb1332b-5d57-43d2-9cda-92942298ffb6) + ) + (wire (pts (xy 270.51 140.97) (xy 270.51 146.05)) + (stroke (width 0) (type default)) + (uuid ed156344-67cc-4931-8cbe-ea26cc6bc263) + ) + (wire (pts (xy 39.37 146.05) (xy 39.37 149.86)) + (stroke (width 0) (type default)) + (uuid ed257832-340d-4f23-8f12-bd93bedf91db) + ) + (wire (pts (xy 207.01 63.5) (xy 240.03 63.5)) + (stroke (width 0) (type default)) + (uuid ed7bb327-876e-41d3-9abb-5f9504e73eea) + ) + (wire (pts (xy 143.51 125.73) (xy 143.51 129.54)) + (stroke (width 0) (type default)) + (uuid edfc6b26-a1c9-4458-8569-783b63367be9) + ) + (wire (pts (xy 200.66 166.37) (xy 204.47 166.37)) + (stroke (width 0) (type default)) + (uuid ee33804c-02f9-4161-a78a-a38ef0d45552) + ) + (wire (pts (xy 167.64 125.73) (xy 171.45 125.73)) + (stroke (width 0) (type default)) + (uuid ef4661e1-d83c-4f92-9106-9301fc61dea4) + ) + (wire (pts (xy 36.83 69.85) (xy 34.29 69.85)) + (stroke (width 0) (type default)) + (uuid ef64ed70-f792-4c49-a9e0-e65f02d4f884) + ) + (wire (pts (xy 62.23 196.85) (xy 62.23 191.77)) + (stroke (width 0) (type default)) + (uuid f04d8541-f6ae-4853-9449-b3790d1a0bf8) + ) + (wire (pts (xy 44.45 125.73) (xy 50.8 125.73)) + (stroke (width 0) (type default)) + (uuid f092f78c-0290-430d-811b-29ff846b6a5d) + ) + (wire (pts (xy 367.03 69.85) (xy 364.49 69.85)) + (stroke (width 0) (type default)) + (uuid f19626f3-9fb6-4a16-b7bd-b8f5951332cb) + ) + (wire (pts (xy 171.45 125.73) (xy 176.53 125.73)) + (stroke (width 0) (type default)) + (uuid f255e782-2f53-49e3-8bec-19778b75ef48) + ) + (wire (pts (xy 44.45 125.73) (xy 44.45 129.54)) + (stroke (width 0) (type default)) + (uuid f2891858-4208-438a-aaa8-e5abe383aca3) + ) + (wire (pts (xy 260.35 198.12) (xy 260.35 191.77)) + (stroke (width 0) (type default)) + (uuid f2d93ea0-7034-4d3a-baa5-b24722dd7619) + ) + (wire (pts (xy 167.64 166.37) (xy 171.45 166.37)) + (stroke (width 0) (type default)) + (uuid f3254fa5-01b8-4c53-96a8-602f7f03102b) + ) + (wire (pts (xy 374.65 137.16) (xy 374.65 140.97)) + (stroke (width 0) (type default)) + (uuid f3fac14b-afc3-4b11-a2ef-4aae6281129c) + ) + (wire (pts (xy 134.62 100.33) (xy 138.43 100.33)) + (stroke (width 0) (type default)) + (uuid f464c4bb-f281-4c7c-9aa9-ef99b7125f4e) + ) + (wire (pts (xy 237.49 100.33) (xy 237.49 105.41)) + (stroke (width 0) (type default)) + (uuid f480e185-1241-49cb-bdd1-f0e7d4432216) + ) + (wire (pts (xy 270.51 116.84) (xy 270.51 125.73)) + (stroke (width 0) (type default)) + (uuid f575e34a-b0f2-4ac7-986f-8c6c8850f863) + ) + (wire (pts (xy 138.43 146.05) (xy 138.43 149.86)) + (stroke (width 0) (type default)) + (uuid f584d121-44ef-470b-939a-e37236425bd6) + ) + (wire (pts (xy 140.97 191.77) (xy 140.97 201.93)) + (stroke (width 0) (type default)) + (uuid f59bd531-6d79-4af5-bd6b-0fa47b8578cc) + ) + (wire (pts (xy 102.87 69.85) (xy 100.33 69.85)) + (stroke (width 0) (type default)) + (uuid f7023a21-842d-4297-addf-7bce3d650a48) + ) + (wire (pts (xy 323.85 166.37) (xy 325.12 166.37)) + (stroke (width 0) (type default)) + (uuid f71daa2a-6586-4377-9f13-4d194ad520d2) + ) + (wire (pts (xy 182.88 215.9) (xy 187.96 215.9)) + (stroke (width 0) (type default)) + (uuid f733ccae-3fe7-4ff5-b860-c131449d934e) + ) + (wire (pts (xy 158.75 146.05) (xy 160.02 146.05)) + (stroke (width 0) (type default)) + (uuid f9fdbe12-f808-4e9e-837b-2ef908d1a071) + ) + (wire (pts (xy 200.66 105.41) (xy 204.47 105.41)) + (stroke (width 0) (type default)) + (uuid fa4b9756-9190-4062-959e-5a98a46cac4e) + ) + (wire (pts (xy 35.56 146.05) (xy 39.37 146.05)) + (stroke (width 0) (type default)) + (uuid fa525e25-6c37-4967-89a7-b8c2139b1559) + ) + (wire (pts (xy 201.93 69.85) (xy 199.39 69.85)) + (stroke (width 0) (type default)) + (uuid fb5e6ab2-f1f0-4c0c-8ce3-1ac629124fbb) + ) + (wire (pts (xy 326.39 198.12) (xy 326.39 191.77)) + (stroke (width 0) (type default)) + (uuid fb61aae3-9a7e-4626-bd93-13e33adda41e) + ) + (wire (pts (xy 232.41 214.63) (xy 232.41 217.17)) + (stroke (width 0) (type default)) + (uuid fb97bfd0-49a9-41f7-aaf6-3c0bc08363c8) + ) + (wire (pts (xy 101.6 120.65) (xy 104.14 120.65)) + (stroke (width 0) (type default)) + (uuid fba3f36d-e6d8-449b-ab4d-cfed73db3147) + ) + (wire (pts (xy 242.57 137.16) (xy 242.57 140.97)) + (stroke (width 0) (type default)) + (uuid fbb4cfdb-4f34-4dac-9e46-3b5ead5f23b7) + ) + (wire (pts (xy 224.79 146.05) (xy 226.06 146.05)) + (stroke (width 0) (type default)) + (uuid fbe34c02-98d7-47d2-8ffe-0c7ab5ad7489) + ) + (wire (pts (xy 171.45 140.97) (xy 176.53 140.97)) + (stroke (width 0) (type default)) + (uuid fd034814-ec3f-45ea-87cc-92f79eaa8f67) + ) + (wire (pts (xy 115.57 215.9) (xy 113.03 215.9)) + (stroke (width 0) (type default)) + (uuid fd120123-b8cc-4030-af80-ac85b36e4fa8) + ) + (wire (pts (xy 323.85 140.97) (xy 323.85 146.05)) + (stroke (width 0) (type default)) + (uuid fd25b702-7df0-4df1-aed0-780782518ae4) + ) + (wire (pts (xy 39.37 105.41) (xy 39.37 109.22)) + (stroke (width 0) (type default)) + (uuid fd315168-26d1-4e94-86b2-f5a72ae34ffe) + ) + (wire (pts (xy 125.73 120.65) (xy 125.73 125.73)) + (stroke (width 0) (type default)) + (uuid fd8c1ce4-e3c1-4140-98ea-24433a58df03) + ) + (wire (pts (xy 182.88 213.36) (xy 187.96 213.36)) + (stroke (width 0) (type default)) + (uuid fd90630b-9d28-4578-80b6-31452a736e49) + ) + (wire (pts (xy 369.57 137.16) (xy 369.57 140.97)) + (stroke (width 0) (type default)) + (uuid fde1eae2-49de-47ee-822a-fb8b9b9e9335) + ) + (wire (pts (xy 218.44 176.53) (xy 218.44 179.07)) + (stroke (width 0) (type default)) + (uuid fdfdd67d-6476-4f3d-b319-578d0778f59a) + ) + (wire (pts (xy 369.57 125.73) (xy 374.65 125.73)) + (stroke (width 0) (type default)) + (uuid fe0d64b0-54cb-41ef-a65f-00487428deb1) + ) + (wire (pts (xy 185.42 72.39) (xy 185.42 74.93)) + (stroke (width 0) (type default)) + (uuid fe19e33a-e5e3-4296-b78d-b4e38397d778) + ) + (wire (pts (xy 39.37 100.33) (xy 39.37 105.41)) + (stroke (width 0) (type default)) + (uuid fe246516-bee9-4694-8a00-567a7e67fbb2) + ) + (wire (pts (xy 135.89 72.39) (xy 135.89 69.85)) + (stroke (width 0) (type default)) + (uuid ff32292c-e058-4a3e-84fe-aab261ed53e8) + ) + (wire (pts (xy 176.53 137.16) (xy 176.53 140.97)) + (stroke (width 0) (type default)) + (uuid ff4c0ea5-bb58-462e-b0d5-abaf4f1cb229) + ) + + (text_box "Board mounting holes" + (at 107.95 209.55 0) (size 20.32 17.78) + (stroke (width 0) (type default)) + (fill (type none)) + (effects (font (size 1.27 1.27) (thickness 0.254) bold) (justify left top)) + (uuid f8dff638-d9c8-4d77-a669-507378d79194) + ) + + (text "6M [1010]" (at 358.14 200.66 0) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 0da742f3-a183-463a-b4ae-de6ef8a55ba0) + ) + (text "160M [0001]" (at 27.94 200.66 0) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 12c35853-b257-408b-ae64-bb8556d89459) + ) + (text "15M [0111]" (at 259.08 200.66 0) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 1538d694-35f6-43be-b89a-7a8b33870bea) + ) + (text "All toroids wound on T68-6 cores" (at 227.33 58.42 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 2c745c41-e522-44e3-9b07-3f3850b6780f) + ) + (text "10M [1001]" (at 325.12 200.66 0) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 4798234c-a2c0-4b2f-8dde-cb01bbe732b7) + ) + (text "30M [0100]" (at 160.02 200.66 0) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 585893c2-03f8-43db-9a95-6857488cdb80) + ) + (text "20M [0101]" (at 193.04 200.66 0) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 779661dd-40dd-44c5-96d2-88c9bbdc6fd0) + ) + (text "40M [0011]" (at 127 200.66 0) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 783cdea5-0ebc-4f3b-b92f-521abe2ef7a4) + ) + (text "60M [0000]" (at 95.25 200.66 0) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 7c43d198-602b-4aaa-ab35-31e35c8ad5cc) + ) + (text "LPFs" (at 212.09 59.69 0) + (effects (font (size 3 3) (thickness 0.254) bold) (justify left bottom)) + (uuid 9c47a4dd-5258-451c-8c5d-76d4e896ff3a) + ) + (text "17M [0110]" (at 226.06 200.66 0) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid ad3af003-3173-4f02-8473-0d8ae3863ec9) + ) + (text "12M [1000]" (at 292.1 200.66 0) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid aed3a73f-3c77-41af-bb08-c01e027f9e65) + ) + (text "80M [0010]" (at 60.96 200.66 0) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid dfdc5bbe-2bef-4790-8704-6c6e4788232b) + ) + (text "NO FILT [1111]" (at 396.24 200.66 0) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid ea250ff3-8c6c-448e-baf5-6aac326c81a8) + ) + + (label "B10M" (at 326.39 198.12 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 06abb0b5-feba-4364-8de5-6aa730648b24) + ) + (label "RF3" (at 41.91 125.73 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 0c100875-6e4c-43b2-8031-ce2004efefaf) + ) + (label "B40M" (at 128.27 92.71 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 0f13fa05-71d2-4f4c-9faa-c807cac1e962) + ) + (label "B17M" (at 227.33 92.71 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 0fdaab1b-18d4-4023-a3fd-d368d1e30c8b) + ) + (label "B15M" (at 213.36 217.17 0) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 108ba16d-ac5a-428f-942d-1b500060c141) + ) + (label "B6M" (at 359.41 198.12 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 11ad960b-cc65-4df6-8468-8ac274949edf) + ) + (label "RF45" (at 369.57 144.78 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 14c008c6-293a-4ecf-a730-4b47001b38e0) + ) + (label "B160M" (at 29.21 198.12 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 1558e5a2-46d8-422d-8081-7e7a75ef53e7) + ) + (label "RF18" (at 138.43 165.1 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 1582e426-1291-41bd-97cb-3f1d028b61fb) + ) + (label "B40M" (at 128.27 196.85 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 161e97bb-080f-4a81-91c5-143346b16d57) + ) + (label "RF46" (at 369.57 165.1 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 16aab564-d5e1-48e6-aa29-9e50df14d738) + ) + (label "B10M" (at 213.36 222.25 0) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 193406f9-6ef6-4f03-a65d-94d4967cd5a2) + ) + (label "RF24" (at 207.01 125.73 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 1afb1370-ae32-4996-b5b2-f86733f35951) + ) + (label "RF42" (at 336.55 165.1 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 1d72c3a4-2877-47b9-81eb-411465306e3b) + ) + (label "RF21" (at 171.45 146.05 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 1dbf2ba8-717f-46fa-aa1e-11322f19cbd4) + ) + (label "B12M" (at 293.37 198.12 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 224e1135-3d62-44e7-89b9-7a1f453861f0) + ) + (label "RF37" (at 303.53 143.51 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 2649b484-6e56-46ce-9e5c-42042f42ee83) + ) + (label "B20M" (at 194.31 196.85 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 2e928cd7-0a43-4a09-b9c2-7d908b2023ef) + ) + (label "B80M" (at 62.23 196.85 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 31aa38f9-569a-4934-a37e-99829208d8ae) + ) + (label "RF25" (at 204.47 144.78 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 334828f2-d5b0-4b96-b7fe-82a596259073) + ) + (label "B80M" (at 62.23 92.71 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 3be9ac2d-5265-43dc-b19a-4d96d0812f68) + ) + (label "RF14" (at 105.41 168.91 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 3c6beb1c-8191-4c6f-bc92-c1369229126b) + ) + (label "RF10" (at 72.39 163.83 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 3e6dac82-cb0d-473d-b7ba-918ec67b858c) + ) + (label "B30M" (at 161.29 92.71 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 4085795e-9162-4140-a587-11cc95dba205) + ) + (label "RF34" (at 270.51 165.1 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 43a11876-8b58-4dcb-8058-c1e4b980aeed) + ) + (label "RF36" (at 304.8 125.73 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 4439ca10-e38f-450d-a7ec-9b1a7590d9f3) + ) + (label "RF30" (at 237.49 163.83 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 4ccfc824-e55b-42d1-969a-75d9c325cac4) + ) + (label "RF31" (at 270.51 102.87 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 4df283f7-96da-4c6a-927d-169c47595f1e) + ) + (label "B12M" (at 213.36 219.71 0) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 51a20640-15bb-433b-92c5-612af0e369ea) + ) + (label "BNF" (at 391.16 199.39 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 575595aa-71e9-43b8-a063-0151b6e7d7c1) + ) + (label "RF32" (at 271.78 125.73 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 5ae4d9a9-e42e-4332-9319-a79e52b81b5e) + ) + (label "B20M" (at 182.88 226.06 0) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 5b22ef9b-29b9-42b9-a253-22e0f61ee5ac) + ) + (label "RF2" (at 39.37 95.25 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 5f9437e7-1a0f-4250-b05c-b3145fa73ccf) + ) + (label "RF19" (at 171.45 97.79 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 61d97fbe-7c3b-433e-8e89-5af324067696) + ) + (label "RF43" (at 369.57 101.6 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 62637928-b95b-4270-b757-998d85fb71ef) + ) + (label "RF16" (at 142.24 125.73 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 66e0074a-4213-4b5b-abb1-92dfe8f03f9b) + ) + (label "RF7" (at 72.39 95.25 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 6b3d02a5-1481-425b-a926-26934af546bc) + ) + (label "B17M" (at 213.36 214.63 0) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 6e5825bf-2d75-40fe-a5b4-febce13af81c) + ) + (label "B60M" (at 95.25 196.85 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 713c0158-e2cc-4639-b66d-be2de47b47ae) + ) + (label "B60M" (at 95.25 92.71 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 73ec5fe0-6f17-4fd9-88ed-261ea4bd2784) + ) + (label "RF44" (at 370.84 125.73 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 740227d9-51f6-493c-bae4-ff45adaf08e9) + ) + (label "B20M" (at 194.31 92.71 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 7947b97d-c361-46e2-86bb-b75aa1eb70cd) + ) + (label "RF29" (at 237.49 143.51 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 7bb1dce4-e338-401f-a433-c5903d9f6320) + ) + (label "B15M" (at 260.35 93.98 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 8305b3bd-489d-4b08-a310-1e3684c9635f) + ) + (label "RF27" (at 237.49 97.79 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 84a0dc26-10b5-4ed9-b7d9-c32e8c0dae79) + ) + (label "B10M" (at 326.39 93.98 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 857dad95-a81a-4d92-8c09-14789b903294) + ) + (label "RF9" (at 72.39 148.59 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 8a5d6b07-c071-437f-ae69-22db1a5dbad9) + ) + (label "B40M" (at 182.88 220.98 0) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 8ec38b37-0920-4baa-9279-41ca138f5005) + ) + (label "B30M" (at 182.88 223.52 0) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 8fee411f-b078-4c99-a990-71377a46f5a4) + ) + (label "RF20" (at 173.99 125.73 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 9028149f-9ee2-4697-9745-334f8aed70a3) + ) + (label "RF26" (at 204.47 165.1 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 96841058-6c4a-4ef1-a9aa-463ccc30653b) + ) + (label "RF38" (at 303.53 163.83 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 96f3ff64-008f-4d61-85ca-3969002f019c) + ) + (label "RF11" (at 105.41 96.52 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 9b5f58b5-1d31-446d-8b44-45384916130e) + ) + (label "RF47" (at 401.32 130.81 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid 9ccaec64-e33a-4cb0-bef2-0aad8edf6aba) + ) + (label "B30M" (at 161.29 196.85 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid 9d218034-bc06-4b8d-843c-a080436ab9c3) + ) + (label "B6M" (at 359.41 93.98 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid a2ed07f6-dd81-4a90-bdc4-7ffb0cc1a2f1) + ) + (label "BNF" (at 213.36 227.33 0) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid a545ddfc-d226-462b-8e45-699ae24efa1e) + ) + (label "BNF" (at 391.16 93.98 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid a87d4aa0-558a-45fa-ba4c-fba699063ae6) + ) + (label "RF28" (at 240.03 125.73 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid a99633b9-fcbe-4a1d-ae6e-d25e8a16659f) + ) + (label "B60M" (at 182.88 218.44 0) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid afa17524-c561-4f4d-a58c-142ba41deb44) + ) + (label "RF8" (at 80.01 125.73 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid afd3c339-d995-4e4f-98a0-4bc29c3d84b7) + ) + (label "RF23" (at 204.47 100.33 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid b035c746-a185-402c-b50d-c7e96533c635) + ) + (label "RF15" (at 138.43 95.25 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid b530a34c-9c49-45b1-83bf-0992dc36b34f) + ) + (label "RF39" (at 336.55 99.06 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid b539b5a1-bfd0-4dda-8160-84685339d197) + ) + (label "RF4" (at 39.37 148.59 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid b66b989a-3d4c-4539-9825-74b6c07cf60d) + ) + (label "B15M" (at 260.35 198.12 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid c3a1010e-9e99-4cd7-ac79-491ff23f9f04) + ) + (label "RF5" (at 39.37 168.91 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid c4a3594f-a1c0-4185-bca6-7b58eb2ab6c7) + ) + (label "B160M" (at 182.88 213.36 0) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid c6fcdb3f-1741-4592-8f1e-e308b4127374) + ) + (label "RF33" (at 270.51 144.78 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid c8f400b9-feb3-458c-b595-256c9557d98b) + ) + (label "RF40" (at 337.82 125.73 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid d4e20b90-586b-4257-836e-f42c5b0be9dd) + ) + (label "RF1" (at 143.51 63.5 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid d8484de1-c52b-4d0c-b8ec-a1f1120d51dc) + ) + (label "B80M" (at 182.88 215.9 0) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid d9704b46-0462-4a68-b1fd-931ed141fa70) + ) + (label "RF6" (at 52.07 201.93 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid dab1d065-ff58-4318-b60f-57185f5c5aab) + ) + (label "RF41" (at 336.55 144.78 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid dce6b097-db08-4c4d-a65d-8f4c22069eb0) + ) + (label "B160M" (at 29.21 93.98 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid dec92f59-4778-465b-9515-822e36583b82) + ) + (label "RF35" (at 303.53 102.87 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid e0469e3a-6d82-4416-8ded-070c83c292d3) + ) + (label "B17M" (at 227.33 196.85 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid e167c71c-8369-424f-89a3-5d7eff476a14) + ) + (label "RF17" (at 138.43 148.59 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid e866619a-4ce6-4255-a712-fdadd23db573) + ) + (label "RF12" (at 113.03 125.73 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid edb24bd9-7936-49b4-b850-a2298eb65e4d) + ) + (label "RF22" (at 171.45 163.83 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid f01be92a-2658-4ffb-bf5f-6c1eb3d15fda) + ) + (label "RF13" (at 105.41 144.78 0) (fields_autoplaced) + (effects (font (size 0.8 0.8)) (justify left bottom)) + (uuid f13d6007-0bc0-46fb-a7e6-c8d199b50e34) + ) + (label "B6M" (at 213.36 224.79 0) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid f528ef01-6226-44fd-8fb1-d0b71870e264) + ) + (label "B12M" (at 293.37 93.98 90) (fields_autoplaced) + (effects (font (size 1.27 1.27) bold) (justify left bottom)) + (uuid f882d3f6-1397-489b-88f4-7ad3f90ffbc1) + ) + + (symbol (lib_id "power:+12V") (at 86.36 176.53 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 008db23c-7385-40fb-9a3f-9032d83b0149) + (property "Reference" "#PWR073" (at 86.36 180.34 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 86.36 171.45 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 86.36 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 86.36 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 6597282c-b64e-45ad-8e55-50d32823c47c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR073") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 20.32 176.53 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 00a78767-80a4-469a-a349-c2f6ace337e4) + (property "Reference" "#PWR063" (at 20.32 180.34 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 20.32 171.45 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 20.32 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 20.32 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 8a6dae15-701b-409e-987a-e0ee8e05d6d2)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR063") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 20.32 72.39 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 01b37360-2c43-40e2-9545-4665d4943955) + (property "Reference" "#PWR065" (at 20.32 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 20.32 67.31 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 20.32 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 20.32 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 96397365-0c71-4130-9f4e-2aecfa2327cd)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR065") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 265.43 69.85 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 02418d2e-42da-46fb-97d4-0ead670d2ced) + (property "Reference" "#PWR0123" (at 265.43 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 262.89 71.12 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 265.43 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 265.43 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid d616f0e9-0bc9-4351-9eee-e913f54d46b3)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0123") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 59.69 166.37 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 02e22504-d316-4be5-b60f-cd584243df5a) + (property "Reference" "#PWR051" (at 59.69 172.72 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 57.15 168.91 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 59.69 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 59.69 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid c0f0a6b2-ff46-49df-8a5d-dee1938d8758)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR051") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 251.46 176.53 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 04c9fef5-5324-463c-b728-ca582d8261a7) + (property "Reference" "#PWR0117" (at 251.46 180.34 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 251.46 171.45 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 251.46 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 251.46 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 15e2da65-fa49-40b0-981e-2014c5fc69b6)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0117") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 350.52 78.74 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 056ead94-d0d8-4b7d-9d05-38a019f6955c) + (property "Reference" "C126" (at 344.17 78.74 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 346.71 77.47 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 349.5548 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 350.52 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 350.52 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 350.52 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid f4393aa3-7350-4daf-968d-a7bf3af08251)) + (pin "1" (uuid 93438775-2bc8-4bd3-a65b-91494fb796b2)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C126") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 130.81 105.41 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 07b34094-d4cf-4b49-9fbe-cb6f103a975c) + (property "Reference" "C32" (at 130.81 111.76 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "100pF 100V" (at 130.81 109.22 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 134.62 106.3752 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 130.81 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C101J1GAULR" (at 130.81 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 130.81 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 395cc4e7-d981-4291-a7dd-0ae11c28673e)) + (pin "1" (uuid 15485603-5a4e-40ae-820f-afc6b4e5b676)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C32") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 364.49 80.01 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 08b34741-dc13-4f92-af59-e154604658bd) + (property "Reference" "K18" (at 374.65 86.36 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 373.38 88.9 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 375.92 81.28 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 364.49 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 364.49 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 364.49 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 2da9f285-9db5-4f8c-9c89-c13eab8a1533)) + (pin "12" (uuid fc385ce9-0143-42de-92c2-88b1bd598e86)) + (pin "14" (uuid f8de69f6-8b8c-4592-94a7-59a786b005b5)) + (pin "A2" (uuid deae59b7-28ff-415a-b94b-5556afd8cd4e)) + (pin "11" (uuid 1804c5e7-7181-4542-a8db-f5cdf1ec7f4b)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K18") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 105.41 133.35 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 08d63b82-1d3c-4e75-a990-e1c27cd3a1a4) + (property "Reference" "L16" (at 106.68 140.97 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "1.60uH" (at 104.14 137.16 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 105.41 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 105.41 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 105.41 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 105.41 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 73673eb3-e7e9-4daf-afc9-ae12d579106d)) + (pin "2" (uuid e96eb979-f4b8-4ac6-a606-a99a3640c43e)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L16") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 166.37 69.85 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 08dbcbd3-cb57-4897-9ba9-6444a874e454) + (property "Reference" "#PWR093" (at 166.37 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 163.83 71.12 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 166.37 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 166.37 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid a3b6d02c-4503-4c35-b15d-fa20c2b181ea)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR093") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 242.57 133.35 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 0a7d7b98-52e7-4777-ae11-51aa714d142d) + (property "Reference" "C71" (at 243.84 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "39pF 100V" (at 246.38 133.35 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 243.5352 129.54 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 242.57 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C390J1G" (at 242.57 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 242.57 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 870b1ef5-7308-4f6b-952a-cd6f730a3c73)) + (pin "1" (uuid da550ea2-4471-48a2-9081-65063f261322)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C71") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 130.81 125.73 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 0a99d9ba-f52b-4bfb-8d01-79cd43b5ede4) + (property "Reference" "C54" (at 130.81 132.08 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "330pF 100V" (at 130.81 129.54 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 134.62 126.6952 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 130.81 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061A331JAT4A" (at 130.81 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 130.81 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid ce10416c-18ed-49f8-b231-6c8d21b62e3e)) + (pin "1" (uuid c696a4c5-633a-44fd-a189-5e42b16fac14)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C54") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 298.45 80.01 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 0ae3b64f-d353-4426-8a41-4dfa010919df) + (property "Reference" "K10" (at 308.61 86.36 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 307.34 88.9 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 309.88 81.28 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 298.45 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 298.45 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 298.45 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 1db7e8d8-31f4-495c-9816-1876e362c022)) + (pin "12" (uuid 97e2963e-477b-4164-8939-760650d49066)) + (pin "14" (uuid 1102feca-0c31-4a38-ba75-9f5159c0c704)) + (pin "A2" (uuid 75acdb2c-2ffa-4895-bf5e-b7d2488f6609)) + (pin "11" (uuid 8b03f1f3-a1c9-4910-92a9-419f74925ee0)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K10") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 171.45 133.35 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 0c5a870f-21fa-4256-afde-fef0b013b068) + (property "Reference" "L18" (at 172.72 140.97 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.843uH" (at 170.18 137.16 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 171.45 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 171.45 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 171.45 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 171.45 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 6c34df85-1e02-400d-820d-b19c0e7784d8)) + (pin "2" (uuid 75fe1f53-55c7-456d-a45f-f935626561f6)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L18") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 172.72 54.61 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 0ded12a4-a684-4de0-9787-0a859abfccb2) + (property "Reference" "#PWR0210" (at 172.72 60.96 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 175.26 55.88 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 172.72 54.61 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 172.72 54.61 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 4734ea2e-0b8d-4b15-9e58-9a77cfe6f2fc)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0210") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 119.38 176.53 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 0df2536b-3053-4989-8440-4ecf48b1932f) + (property "Reference" "#PWR076" (at 119.38 180.34 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 119.38 171.45 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 119.38 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 119.38 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid f755dbcb-9a36-48cb-9533-3c0f53969b97)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR076") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 382.27 182.88 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 0e0d6f70-7217-44da-953a-4df634f59150) + (property "Reference" "C158" (at 375.92 182.88 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 378.46 181.61 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 381.3048 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 382.27 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 382.27 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 382.27 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 85fe4ddc-9b93-413d-8a7a-82b8ceb0b376)) + (pin "1" (uuid 9f7a529d-6e0a-4908-af01-2fde46e94b8e)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C158") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 334.01 191.77 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 0ec5913d-8935-4d48-966d-e6825bebc042) + (property "Reference" "#PWR0144" (at 334.01 198.12 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 331.47 193.04 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 334.01 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 334.01 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 4fb1e726-bc5e-44d5-a35f-d4b382f7037c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0144") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 163.83 161.29 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 0f407b9d-97f8-40a5-805f-a81fc6dd53f7) + (property "Reference" "C95" (at 163.83 154.94 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "150pF 100V" (at 163.83 157.48 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 167.64 160.3248 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 163.83 161.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C151J1G" (at 163.83 161.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 163.83 161.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 55f6584f-d0f7-431c-af1e-1a8f1227032e)) + (pin "1" (uuid 9e97ad9e-c4a3-4255-ac0a-e5992102802e)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C95") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 328.93 146.05 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 0f67de2c-f4a6-42e7-8108-36b05adc68f8) + (property "Reference" "C85" (at 328.93 152.4 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "82pF 100V" (at 328.93 149.86 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 332.74 147.0152 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 328.93 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C820J1G" (at 328.93 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 328.93 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 92acd904-8f9e-4975-b076-388090cd2d2f)) + (pin "1" (uuid c387e979-ed66-44b0-a851-558dca6a9201)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C85") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 26.67 146.05 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 0fa2f78c-25d8-4227-beb7-460798a0aed8) + (property "Reference" "#PWR046" (at 26.67 152.4 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 24.13 148.59 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 26.67 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 26.67 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid d37f9160-e02d-421d-a0fc-7fc72e798942)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR046") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 53.34 78.74 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 106a7233-33fc-4265-9000-14750dd742f0) + (property "Reference" "C108" (at 46.99 78.74 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 49.53 77.47 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 52.3748 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 53.34 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 53.34 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 53.34 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid bec29c66-eac5-489f-8f25-33fb54b3d135)) + (pin "1" (uuid 9595ad6f-9e13-4fbd-b832-c7e36f68418b)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C108") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 361.95 125.73 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 10aab928-fc7f-4e2e-a6c4-ae72e8ad1182) + (property "Reference" "C51" (at 361.95 132.08 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "91pF 100V" (at 361.95 129.54 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 365.76 126.6952 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 361.95 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C910J1G" (at 361.95 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 361.95 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 4335ceca-c351-4886-9246-f86a875aebe8)) + (pin "1" (uuid dbf3c276-b288-4cd7-918d-e154ecd164f3)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C51") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 382.27 82.55 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 10b88d2c-be2e-4f8f-8b1c-1b1125f62ed4) + (property "Reference" "#PWR0156" (at 382.27 88.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 379.73 83.82 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 382.27 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 382.27 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid ac5d1c14-c645-4924-8bef-0471238d9b79)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0156") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 356.87 166.37 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 1168ca01-bd2b-48b5-8dd1-bd3f2a45a07e) + (property "Reference" "#PWR0152" (at 356.87 172.72 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 354.33 168.91 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 356.87 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 356.87 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid bad73b47-bbea-4195-b3d4-681170f381c0)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0152") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 92.71 125.73 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 11e0d471-e738-41b4-8c36-03528edd613c) + (property "Reference" "#PWR054" (at 92.71 132.08 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 90.17 128.27 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 92.71 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 92.71 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid b0ad1de3-854b-43f4-b824-357fd57e8a6e)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR054") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 270.51 153.67 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 121f4298-0fd1-4d0e-bf8f-66dc40e5837d) + (property "Reference" "L32" (at 272.669 153.67 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.447uH" (at 273.05 156.21 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 270.51 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 270.51 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 270.51 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 270.51 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid d66ec830-1602-4db1-bf56-0d50e8ea1453)) + (pin "2" (uuid e239e1f6-dbcc-4be5-8e1f-bc7832d30c80)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L32") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 369.57 153.67 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 136d841f-f101-4ec4-a473-4bf0baad1c79) + (property "Reference" "L35" (at 371.729 153.67 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.188uH" (at 372.11 156.21 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 369.57 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 369.57 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 369.57 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 369.57 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 2af00d0a-203d-4d0d-85fb-5d5506b011d2)) + (pin "2" (uuid 7fd54069-f07d-483d-8b41-3af7634e4845)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L35") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 284.48 182.88 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 14724bc4-0dce-4f08-b816-abc5b04302a9) + (property "Reference" "C123" (at 278.13 182.88 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 280.67 181.61 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 283.5148 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 284.48 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 284.48 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 284.48 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid fd95b828-5a45-40da-a2ff-7d9888d138d9)) + (pin "1" (uuid 4bdbdb3a-e5bd-49b1-9011-86b2c3785212)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C123") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 229.87 166.37 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 154cafef-26cb-474a-95cf-fa34a12abfba) + (property "Reference" "C105" (at 229.87 172.72 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "82pF 100V" (at 229.87 170.18 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 233.68 167.3352 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 229.87 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C820J1G" (at 229.87 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 229.87 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 45761e48-e8bb-41f7-99be-3a2562395b06)) + (pin "1" (uuid ecba6c17-e70c-4b50-8253-6d93733536f8)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C105") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 133.35 80.01 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 15f0d950-dab8-4590-95d9-5581c1b21ede) + (property "Reference" "K12" (at 143.51 86.36 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 142.24 88.9 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 144.78 81.28 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 133.35 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 133.35 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 133.35 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 2ad2add1-aec8-4105-9059-1bacd65b26e5)) + (pin "12" (uuid 6adb0e83-b8c5-47e3-898a-61385ef75c74)) + (pin "14" (uuid a11f2c8f-8501-44e7-9a0f-ed232ccded7a)) + (pin "A2" (uuid ad49ca1d-ccc7-47b4-8eda-9ca6328df598)) + (pin "11" (uuid af123e43-2c8e-4010-9e63-39ecaed0e88a)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K12") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 295.91 166.37 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 164bebd1-7bba-4ea3-891e-f546a21799fc) + (property "Reference" "C98" (at 295.91 172.72 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "120pF 100V" (at 295.91 170.18 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 299.72 167.3352 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 295.91 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "77-VJ1206A121JXBMT" (at 295.91 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 295.91 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 495fe4fa-7efa-4c3e-acd3-675a51baa8bf)) + (pin "1" (uuid b6868228-3573-4a55-a5d9-ec4a23f2dce7)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C98") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 356.87 146.05 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 164cc4e8-edf7-45d8-b0fd-55baea7498a2) + (property "Reference" "#PWR0151" (at 356.87 152.4 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 354.33 148.59 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 356.87 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 356.87 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 3affc1e2-5f5b-486d-80b6-607d7869c10e)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0151") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 36.83 191.77 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 19bc2472-8f06-46f2-be52-6e1867bbcbf9) + (property "Reference" "#PWR061" (at 36.83 198.12 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 34.29 193.04 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 36.83 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 36.83 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid e45230e7-471e-426e-acd8-722ceeae6dc7)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR061") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 97.79 100.33 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 1ab1c632-65bc-448c-be14-659a36a253d9) + (property "Reference" "C31" (at 97.79 93.98 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "560pF 100V" (at 97.79 96.52 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 101.6 99.3648 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 97.79 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061C561JAT2A" (at 97.79 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 97.79 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 8d3b55f6-9729-4d9f-a32e-ed04071874a8)) + (pin "1" (uuid 03002f27-17d1-444a-a970-92dcbf5615c7)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C31") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 361.95 166.37 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 1b19e9ec-807a-4713-bd27-74fd243b4360) + (property "Reference" "C100" (at 361.95 172.72 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "60pF 100V" (at 361.95 170.18 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 365.76 167.3352 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 361.95 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C620J1G" (at 361.95 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 361.95 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 7174e99c-f311-4aa6-aec6-a241d6b5097d)) + (pin "1" (uuid 1f638f86-d46c-47a4-b30b-e5f105ab5dfb)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C100") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 64.77 105.41 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 1d3522cf-17d6-45a4-b732-e316cc0aa818) + (property "Reference" "C30" (at 64.77 111.76 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "470pF 100V" (at 64.77 109.22 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 68.58 106.3752 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 64.77 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C471J1GAC" (at 64.77 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 64.77 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 6e9f2c10-c86d-4bd9-b365-27b2b0211c6e)) + (pin "1" (uuid fa498fa7-47df-4138-9f7b-b85fa8f10703)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C30") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 201.93 213.36 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 1e197a04-58fc-458c-ab7a-98ad9b39dbf9) + (property "Reference" "#PWR0218" (at 201.93 217.17 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 205.74 212.09 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 201.93 213.36 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 201.93 213.36 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 7a9bbbde-5bc5-419a-b406-ff434088532a)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0218") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 86.36 182.88 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 1fee7f4f-8eca-4232-96bc-e59a2ee2e3c7) + (property "Reference" "C111" (at 80.01 182.88 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 82.55 181.61 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 85.3948 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 86.36 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 86.36 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 86.36 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid ed2898a9-cf5f-455d-a8ce-36be196ca9d0)) + (pin "1" (uuid 7b003995-7ae8-4816-b484-67fc1a1e8185)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C111") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 267.97 191.77 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 20021598-83fb-4634-b8cd-0c8a23073c19) + (property "Reference" "#PWR0124" (at 267.97 198.12 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 265.43 193.04 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 267.97 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 267.97 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid c2cc2dff-6a49-4da0-8e55-55f647431878)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0124") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 290.83 125.73 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 21294bd9-93c5-4344-a082-148b8bb7f144) + (property "Reference" "#PWR0130" (at 290.83 132.08 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 288.29 128.27 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 290.83 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 290.83 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 369481fa-e3f0-46d7-b8e5-3c394dd1ba55)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0130") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 171.45 113.03 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 21acc9bc-9d64-42a3-8524-b43f1ac6f962) + (property "Reference" "L7" (at 173.609 113.03 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.928uH" (at 173.99 115.57 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 171.45 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 171.45 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 171.45 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 171.45 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 7d0e9408-059a-46c6-98e2-4fb1ba9e59b4)) + (pin "2" (uuid 8d1fcb95-6c26-4995-9931-223aebaca8df)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L7") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 31.75 120.65 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 246e74fd-4129-438c-bed4-dd88108492f1) + (property "Reference" "C45" (at 31.75 114.3 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "2200pF 100V" (at 31.75 116.84 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 35.56 119.6848 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 31.75 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "81-GRM319R72A222JA1D" (at 31.75 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 31.75 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid e8acdd6b-da6c-43a5-af1f-af0e288727cd)) + (pin "1" (uuid 81c7d5ab-45a1-4dc0-926e-3f18cc8ea3ec)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C45") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 113.03 220.98 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 29aa1a78-21d9-42a8-b3e1-5bbb38a08098) + (property "Reference" "#PWR053" (at 113.03 227.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 113.03 225.1131 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 113.03 220.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 113.03 220.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 0656e774-0cb7-41f3-ba01-f21f39574e26)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR053") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 257.81 146.05 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 29cb5d40-1697-418f-9601-ce984e9b4d9f) + (property "Reference" "#PWR0121" (at 257.81 152.4 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 255.27 148.59 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 257.81 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 257.81 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 7a0dd9bc-99bb-4a5c-ab54-837ad848a8f1)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0121") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 199.39 184.15 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 29cf916c-c3f6-4311-be53-1f99c9f96b73) + (property "Reference" "K24" (at 209.55 176.53 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 213.36 173.99 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 210.82 182.88 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 199.39 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 199.39 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 199.39 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 50176529-4eb8-48c8-bd67-3e1568145797)) + (pin "12" (uuid e4c8cad9-0105-4f29-bab0-461e10801da9)) + (pin "14" (uuid fcb10574-cc35-4e9b-b16b-9741ec95f728)) + (pin "A2" (uuid b90638ea-e41a-4f4d-b464-b2c828b3fae8)) + (pin "11" (uuid 073122d8-5c86-4109-b73a-2b16322fea20)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K24") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 218.44 176.53 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 2a55087b-b2bb-456a-b3fa-d33aa21e7e3a) + (property "Reference" "#PWR0107" (at 218.44 180.34 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 218.44 171.45 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 218.44 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 218.44 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 32db7334-68bc-4716-ad72-71337e858027)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0107") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 229.87 161.29 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 2a891c0a-ffbf-4703-8a07-913d0de1f296) + (property "Reference" "C90" (at 229.87 154.94 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "82pF 100V" (at 229.87 157.48 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 233.68 160.3248 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 229.87 161.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C820J1G" (at 229.87 161.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 229.87 161.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid b6947ffd-e70d-4b6f-a3a0-5b340f011691)) + (pin "1" (uuid 48369ce2-651b-47ad-9f32-4aaf501965cf)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C90") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 251.46 82.55 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 2aa25910-e135-4392-b67a-784e0af4b478) + (property "Reference" "#PWR0116" (at 251.46 88.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 248.92 83.82 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 251.46 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 251.46 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid b429b20d-98e0-4747-a399-23169e2f4df7)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0116") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 152.4 72.39 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 2d557d6d-6916-427e-a227-fda34b847aca) + (property "Reference" "#PWR085" (at 152.4 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 152.4 67.31 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 152.4 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 152.4 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid f778bb72-ae6b-4684-a27a-b74f2b93a4d8)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR085") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 59.69 125.73 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 2dfb927b-6fe9-4aa5-a034-b98d75684a55) + (property "Reference" "#PWR049" (at 59.69 132.08 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 57.15 128.27 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 59.69 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 59.69 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 29f382cc-98d8-43b3-93e0-ef1c0932ec47)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR049") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 39.37 113.03 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 2e254cee-cfae-4224-8281-f3d3addfaeab) + (property "Reference" "L3" (at 41.529 111.8179 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "5.21uH" (at 41.529 114.2421 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 39.37 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 39.37 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 39.37 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 39.37 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 9967abcd-fc83-4214-a69c-4e3855381192)) + (pin "2" (uuid 97e079f1-5b2d-4f76-8af9-06004165291f)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L3") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 317.5 186.69 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 2e4173a4-1960-45cc-a3d5-946ced5bd9b6) + (property "Reference" "#PWR0138" (at 317.5 193.04 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 314.96 187.96 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 317.5 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 317.5 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid e6007dd6-4382-485a-91e4-85be2b3101dc)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0138") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 130.81 140.97 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 2e46ab3e-6bd8-4214-99f3-df61ceba65cb) + (property "Reference" "C73" (at 130.81 134.62 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "330pF 100V" (at 130.81 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 134.62 140.0048 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 130.81 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061A331JAT4A" (at 130.81 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 130.81 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 87cab3b1-96ae-42f2-895c-2bf4e4a26389)) + (pin "1" (uuid 0ce9aec0-9e5f-49a9-9112-44fb59e923c8)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C73") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 398.78 193.04 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 2efe2d3b-bbb3-4947-af80-276955a7bc27) + (property "Reference" "#PWR0164" (at 398.78 199.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 396.24 194.31 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 398.78 193.04 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 398.78 193.04 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 232aea92-f8cb-41cc-bdec-647b203c0f5c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0164") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 237.49 153.67 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 2fb4ef99-6d0f-457e-8bfa-1f44a0df4481) + (property "Reference" "L31" (at 239.649 153.67 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.519uH" (at 240.03 156.21 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 237.49 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 237.49 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 237.49 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 237.49 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 4d5fecd7-ad04-46ee-86c9-2a8e3f7d1cb4)) + (pin "2" (uuid 235042fa-0666-41f9-8b1f-fce363167599)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L31") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 64.77 100.33 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 2fc85ae5-a295-4cbc-9b61-3d51ef9895e6) + (property "Reference" "C26" (at 64.77 93.98 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "390pF 100V" (at 64.77 96.52 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 68.58 99.3648 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 64.77 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C391J1G" (at 64.77 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 64.77 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 54e03f5d-9c91-48ca-b655-2ed7334aa464)) + (pin "1" (uuid 24711fdb-a105-40ca-9b6b-8a47fb3b5a00)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C26") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 229.87 105.41 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 30338bc3-e622-4049-94f7-cf59d597bc48) + (property "Reference" "C35" (at 229.87 111.76 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "82pF 100V" (at 229.87 109.22 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 233.68 106.3752 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 229.87 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C820J1G" (at 229.87 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 229.87 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid c221e530-ec9b-4f5e-b7d6-9ed7b938b961)) + (pin "1" (uuid 2acfa831-be94-4f84-9b6f-5196d7731fef)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C35") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 262.89 146.05 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 3481dd06-0d13-4f4e-b495-9e3e22e837e9) + (property "Reference" "C80" (at 262.89 152.4 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "220pF 100V" (at 262.89 149.86 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 266.7 147.0152 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 262.89 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C221J1GAC" (at 262.89 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 262.89 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid e704edb2-9da4-4975-9c76-646aaa9ed525)) + (pin "1" (uuid ca6aeba3-5e41-4a5a-91c3-c3bae917fba1)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C80") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 323.85 125.73 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 34918b86-3bd8-465b-9fe4-51e014817c9c) + (property "Reference" "#PWR0140" (at 323.85 132.08 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 321.31 128.27 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 323.85 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 323.85 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 9f8abe68-7152-4c23-9b8c-e84079f8204c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0140") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 275.59 133.35 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 359c7cb7-c09b-4193-8500-c194644ab78c) + (property "Reference" "C65" (at 276.86 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "33pF 100V" (at 279.4 133.35 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 276.5552 129.54 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 275.59 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C330J1G" (at 275.59 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 275.59 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 316193c2-d15a-4e0d-934b-3c7361fb99b7)) + (pin "1" (uuid f14e400c-51ae-4e32-89c3-5c9275cc70a5)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C65") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 138.43 133.35 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 374ef3ec-1b33-4db0-8d77-2b72a6dc0364) + (property "Reference" "L17" (at 139.7 140.97 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "1.22uH" (at 137.16 137.16 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 138.43 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 138.43 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 138.43 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 138.43 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 50365db7-3c61-4579-83e6-74f4ee7a74e9)) + (pin "2" (uuid 29f91f16-57dc-4f85-ba98-2045cedde0af)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L17") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 229.87 146.05 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 38a28d07-a50b-4489-8cac-d216d9e05519) + (property "Reference" "C83" (at 229.87 152.4 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "150pF 100V" (at 229.87 149.86 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 233.68 147.0152 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 229.87 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C151J1G" (at 229.87 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 229.87 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 3b17e489-e1fc-483c-9ac6-8fa7736dbb05)) + (pin "1" (uuid f6ab3b6e-ef9e-4324-ade7-44877a51305d)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C83") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 168.91 191.77 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 3973165c-8be3-40ea-8c04-82e48b807ff4) + (property "Reference" "#PWR094" (at 168.91 198.12 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 166.37 193.04 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 168.91 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 168.91 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid bc7493fe-32be-489f-b72d-5eb029336e66)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR094") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 257.81 166.37 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 3acbc585-20ee-4a0a-a56f-89f7459806b6) + (property "Reference" "#PWR0122" (at 257.81 172.72 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 255.27 168.91 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 257.81 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 257.81 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 4a466da7-795a-4ed9-8156-271e7ef49d65)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0122") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 382.27 78.74 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 3cc9b93e-195a-4608-b111-170f10d4122f) + (property "Reference" "C157" (at 375.92 78.74 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 378.46 77.47 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 381.3048 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 382.27 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 382.27 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 382.27 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid b33a9063-303f-45a5-8640-9c5ffa402b8d)) + (pin "1" (uuid 2c6226ad-6f70-4bb9-b057-e042ce331770)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C157") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 374.65 133.35 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 3eb4418e-42c7-47c3-ac43-fc80a66400c7) + (property "Reference" "C70" (at 375.92 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "14pF 100V" (at 378.46 133.35 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 375.6152 129.54 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 374.65 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C150J1G" (at 374.65 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 374.65 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid e35a30e3-b39a-409b-94da-4b110251f33f)) + (pin "1" (uuid 8183cbdb-946b-4940-9728-68380ef8ae8b)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C70") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 290.83 105.41 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 3fbaed36-28dd-45c0-b207-87d3db235f96) + (property "Reference" "#PWR0129" (at 290.83 111.76 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 288.29 107.95 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 290.83 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 290.83 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid f5283e9e-32bc-42a4-9fe4-8d9dbb58fd45)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0129") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 166.37 213.36 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 415fa270-98bc-413d-812b-7a6a98a1f6ce) + (property "Reference" "#PWR0211" (at 166.37 219.71 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 168.91 214.63 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 166.37 213.36 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 166.37 213.36 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid fc366dd3-86dc-41bb-91f6-f5bc04fd70e1)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0211") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 125.73 166.37 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 420d2744-1b5e-4497-b4f4-2c3d889c6194) + (property "Reference" "#PWR060" (at 125.73 172.72 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 123.19 168.91 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 125.73 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 125.73 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 34cd81aa-7532-48fc-b3fe-f10ed3087361)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR060") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 328.93 105.41 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 4291989f-8abe-4f5e-98d3-300b6ce2ed55) + (property "Reference" "C38" (at 328.93 111.76 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "100pF 100V" (at 328.93 109.22 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 332.74 106.3752 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 328.93 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C101J1GAULR" (at 328.93 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 328.93 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid d8371ed3-8301-4074-9308-6709fbb2e62d)) + (pin "1" (uuid 46a32a55-e76c-46c8-afaf-c0c2759dd520)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C38") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 331.47 80.01 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 43dbd100-f782-409d-ab17-b790328358b4) + (property "Reference" "K11" (at 341.63 86.36 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 340.36 88.9 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 342.9 81.28 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 331.47 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 331.47 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 331.47 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid e2ea018b-0f7b-4bec-9158-71219e4bade4)) + (pin "12" (uuid 1619b8b6-09e6-4c98-bf96-a604ea4e8acd)) + (pin "14" (uuid bd5da308-3471-49bf-ab3a-860ba3f4b3df)) + (pin "A2" (uuid cfb8dbc5-e380-4236-8451-3c3612f73195)) + (pin "11" (uuid 1000c30b-ae56-4a5c-be7e-f3f3d3aed60b)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K11") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "T41_Library:IDC_2x5") (at 223.52 219.71 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 44078d0e-f005-489d-a23e-897a5efa75e1) + (property "Reference" "J27" (at 224.79 209.2157 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "LPF CTRL HI" (at 224.79 211.6399 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x05_P2.54mm_Vertical" (at 223.52 219.71 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 223.52 219.71 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 223.52 219.71 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "A-2939" (at 223.52 219.71 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "9" (uuid cdcc73fe-1db7-45ac-a8bf-834ceb6d3209)) + (pin "5" (uuid be375586-e8bc-4252-9f65-c962898d0144)) + (pin "2" (uuid ed7b3962-73c2-4b5b-845b-f8c09419c645)) + (pin "4" (uuid 1de5ee18-e31c-4d8c-b514-3b83b02a70da)) + (pin "6" (uuid acf67c44-2a7b-46b4-ab5d-df98325aac14)) + (pin "10" (uuid 4db61c42-207f-4f86-99f4-128300092f7a)) + (pin "7" (uuid a5b754bd-56fd-4776-897d-05f8f443c780)) + (pin "3" (uuid dc205d09-4fdc-42ea-9fa6-bb6cd8ca9d5d)) + (pin "1" (uuid 2381dfa0-b3bf-4328-9e7b-6d87dc926e40)) + (pin "8" (uuid d39bd3a6-338c-4049-bb0e-abf2c3db609d)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J27") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 86.36 82.55 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 44803ceb-500a-4311-b9b8-5a6154789be3) + (property "Reference" "#PWR080" (at 86.36 88.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 83.82 83.82 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 86.36 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 86.36 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid f839303a-ea74-4cb5-88f4-9359b2f0dc94)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR080") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 224.79 105.41 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 44ab4fdb-db55-40b4-8504-6ba835761764) + (property "Reference" "#PWR0109" (at 224.79 111.76 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 222.25 107.95 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 224.79 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 224.79 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 49034c38-9c1d-4daf-85c1-81e7cda61d48)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0109") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 158.75 146.05 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 44cc8bf4-344b-4d86-a934-fbab1d5b133f) + (property "Reference" "#PWR091" (at 158.75 152.4 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 156.21 148.59 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 158.75 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 158.75 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid e4650a13-e468-44ce-b422-e8d0d2c1b00e)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR091") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 97.79 140.97 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 45d497c6-0a5c-485d-9ce9-0e2684f3539c) + (property "Reference" "C75" (at 97.79 134.62 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "56pF 100V" (at 97.79 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 101.6 140.0048 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 97.79 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C560J1G" (at 97.79 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 97.79 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid f4df4abf-6ae4-48fe-a642-7d386870fb42)) + (pin "1" (uuid 5f71a58c-a9af-451c-8282-413badd1a48f)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C75") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 64.77 120.65 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 46032614-460a-40d7-8799-39d924bcef59) + (property "Reference" "C46" (at 64.77 114.3 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "1200pF 100V" (at 64.77 116.84 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 68.58 119.6848 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 64.77 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061C122JAT2A" (at 64.77 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 64.77 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid f8e589fe-4fb1-45ab-9019-09a82735ebe7)) + (pin "1" (uuid feb97887-4b91-4328-bf71-ec5be4cb420f)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C46") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 300.99 191.77 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 462d4e45-6e7a-4f4e-8f3b-0d0bf0535497) + (property "Reference" "#PWR0134" (at 300.99 198.12 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 298.45 193.04 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 300.99 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 300.99 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 8027a4f0-6700-461f-a005-a2d75191f0cd)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0134") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 229.87 120.65 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 47f0bc66-0bc1-4059-96d1-d98c7771c165) + (property "Reference" "C42" (at 229.87 114.3 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "150pF 100V" (at 229.87 116.84 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 233.68 119.6848 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 229.87 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C151J1G" (at 229.87 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 229.87 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 7443942b-8386-48b1-85e9-5b60fa995467)) + (pin "1" (uuid c99433e4-a27a-4613-8019-dbac72fce7ca)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C42") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 262.89 105.41 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 481741cf-bc02-4eac-b715-0718f6db6e18) + (property "Reference" "C36" (at 262.89 111.76 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "150pF 100V" (at 262.89 109.22 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 266.7 106.3752 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 262.89 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C151J1G" (at 262.89 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 262.89 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 49cadbcd-0b9b-427a-939a-6870cf37facf)) + (pin "1" (uuid 67e2db69-bdd6-4ad7-9272-36a040e1c15d)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C36") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 191.77 166.37 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 483a5099-918c-4665-9374-3b842f4509ec) + (property "Reference" "#PWR0102" (at 191.77 172.72 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 189.23 168.91 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 191.77 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 191.77 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 055f4cef-416f-4942-a851-be1b2a097773)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0102") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 290.83 166.37 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 493a9a7b-4098-447a-8838-00d5b8985720) + (property "Reference" "#PWR0132" (at 290.83 172.72 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 288.29 168.91 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 290.83 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 290.83 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid d7114940-7167-4e6a-bcdf-e9e0da29ef84)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0132") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 382.27 72.39 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 4a5b8eca-96f5-46af-be91-e735aeb74127) + (property "Reference" "#PWR0155" (at 382.27 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 382.27 67.31 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 382.27 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 382.27 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid ffd75c05-c7d9-44d5-844a-d6855269b06b)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0155") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 39.37 133.35 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 4b499858-eb45-4494-9368-a9c9f08b4783) + (property "Reference" "L14" (at 40.64 140.97 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "4.73uH" (at 38.1 135.89 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 39.37 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 39.37 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 39.37 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 39.37 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 828d9e17-feef-4190-90d7-e9302a627f39)) + (pin "2" (uuid 22328c8a-f939-4377-90b9-e81b287bdd1a)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L14") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 53.34 176.53 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 4ce50d26-21b1-4a13-8b31-9988aa7906a9) + (property "Reference" "#PWR067" (at 53.34 180.34 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 53.34 171.45 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 53.34 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 53.34 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 9f72f5a5-c7cb-46a3-94bd-a6eafdf62d83)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR067") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 204.47 133.35 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 4e40d70c-3b17-4780-9274-5a50da6b06f3) + (property "Reference" "L19" (at 205.74 140.97 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.608uH" (at 203.2 138.43 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 204.47 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 204.47 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 204.47 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 204.47 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 190a1d65-81cd-4a2e-b9b2-fba32939fe6a)) + (pin "2" (uuid bb5bf3ef-9c64-44a7-9dc6-d29b20240165)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L19") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 31.75 105.41 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 4e68a03a-5114-482b-ab00-84430d29645d) + (property "Reference" "C29" (at 31.75 111.76 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "1500pF 100V" (at 31.75 109.22 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 35.56 106.3752 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 31.75 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C152J1GECAUT" (at 31.75 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 31.75 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 1ab3ff0f-5f0a-44af-ab37-aeb4a9ce6c53)) + (pin "1" (uuid 94577ef0-0c12-4b40-ad1f-df6ca2661e4c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C29") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 119.38 186.69 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 4f09ca6a-63a2-4091-a08e-eb5a0f2931d8) + (property "Reference" "#PWR077" (at 119.38 193.04 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 116.84 187.96 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 119.38 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 119.38 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid db150b97-c9c3-462c-886d-f73a2a7f4dc3)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR077") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "T41_Library:IDC_2x5") (at 193.04 218.44 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 51bbd339-dfbc-430b-a01b-fddb46073bfe) + (property "Reference" "J26" (at 194.31 207.9457 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "LPF CTRL LOW" (at 194.31 210.3699 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x05_P2.54mm_Vertical" (at 193.04 218.44 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 193.04 218.44 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 193.04 218.44 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "A-2939" (at 193.04 218.44 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "9" (uuid 35d6f6a9-fd37-4fae-82e7-48fda2402f78)) + (pin "5" (uuid a20d21d8-9004-4eb9-b2b9-cd5c3fce5760)) + (pin "2" (uuid cec9701d-6973-47b1-a63a-7329e92973cd)) + (pin "4" (uuid 1a672316-fc65-444a-8a86-36c83bab6ff9)) + (pin "6" (uuid fe371daa-49af-410a-865c-997cfdd2de41)) + (pin "10" (uuid 22c50ec9-8897-4aea-a479-a12fb4a8d638)) + (pin "7" (uuid 9bfaa217-d16e-4516-b207-ba5d9d84be88)) + (pin "3" (uuid 95f3cb36-edc1-4338-b402-69da3ab9972b)) + (pin "1" (uuid dd2ee6d8-be82-4020-b4ed-cbe12a7e915d)) + (pin "8" (uuid 5ae1b23c-84d0-46bb-9270-9cb54d6f241f)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J26") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 152.4 182.88 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 5354eefe-6186-4c3b-b2c2-d583d14bbb9f) + (property "Reference" "C115" (at 146.05 182.88 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 148.59 181.61 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 151.4348 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 152.4 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 152.4 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 152.4 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 5c4ae988-b079-4087-ba95-2ca2b2de920e)) + (pin "1" (uuid 336b08e1-d43f-49d7-b572-2e18816f1553)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C115") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 20.32 82.55 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 560fd022-8926-4d37-adcc-4c54f6d15e95) + (property "Reference" "#PWR066" (at 20.32 88.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 17.78 83.82 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 20.32 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 20.32 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 0bed9dcf-e430-449b-97d9-573a41d50722)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR066") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 110.49 133.35 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 56ebc141-c049-4701-8a79-0e5e8580404e) + (property "Reference" "C66" (at 111.76 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "68pF 100V" (at 114.3 133.35 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 111.4552 129.54 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 110.49 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C680J1G" (at 110.49 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 110.49 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid c92e4162-ba15-4323-b1b4-13cf3a8265f5)) + (pin "1" (uuid fc9aaeba-ebb7-4251-9123-82121fd3b28f)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C66") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 158.75 105.41 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 57113d25-cb29-4c42-a1b4-c4a28aff7e14) + (property "Reference" "#PWR089" (at 158.75 111.76 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 156.21 107.95 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 158.75 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 158.75 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 4fc08a13-e192-4121-9460-63c0f9de63d5)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR089") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 224.79 166.37 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 571369d9-d1c9-4b3e-8331-250f93e1f31a) + (property "Reference" "#PWR0112" (at 224.79 172.72 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 222.25 168.91 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 224.79 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 224.79 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid d1a5850b-8a1e-4bdf-9289-7489af790d12)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0112") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 262.89 166.37 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 57b35f5e-a838-4dae-9c83-7f6cabc49414) + (property "Reference" "C97" (at 262.89 172.72 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "150pF 100V" (at 262.89 170.18 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 266.7 167.3352 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 262.89 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C151J1G" (at 262.89 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 262.89 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid fb9ed395-8003-4126-9ea5-5de63e1a1898)) + (pin "1" (uuid 2a35d025-87e9-4e2a-ae04-4124ffce9cb3)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C97") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 364.49 184.15 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 57b4e99f-1812-4a3d-a6b0-b982c2b9ccf9) + (property "Reference" "K29" (at 374.65 176.53 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 378.46 173.99 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 375.92 182.88 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 364.49 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 364.49 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 364.49 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 127629f4-4184-4dc8-b437-04e4f8bf4ca1)) + (pin "12" (uuid 63a869da-21a9-4905-b30e-e283fc56ccb0)) + (pin "14" (uuid 25cd3823-d278-4cb7-a5b6-c2264640f702)) + (pin "A2" (uuid 4ee1a959-2027-4460-95ac-1c5f519ca040)) + (pin "11" (uuid cd701b2e-db7e-4be7-b8a4-d3d63325c1db)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K29") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 31.75 125.73 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 58a655f9-28e6-4585-ab39-7f529419a700) + (property "Reference" "C55" (at 31.75 132.08 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "330pF 100V" (at 31.75 129.54 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 35.56 126.6952 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 31.75 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061A331JAT4A" (at 31.75 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 31.75 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 46a8c5eb-5f23-42a5-940f-e004572954ae)) + (pin "1" (uuid 26701f87-9ac6-4195-af36-fee218a8727c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C55") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 323.85 166.37 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 594d80f1-d7cc-407b-9cf3-9b093d214721) + (property "Reference" "#PWR0142" (at 323.85 172.72 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 321.31 168.91 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 323.85 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 323.85 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 1fe6e4d6-07ba-4e45-81d3-3dc4cbb9a7cc)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0142") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 100.33 80.01 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 5955741e-b12f-47b6-bfd4-2be9b139d5eb) + (property "Reference" "K13" (at 110.49 86.36 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 109.22 88.9 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 111.76 81.28 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 100.33 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 100.33 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 100.33 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 1f2d3635-ea9b-4b8f-b538-33f7a4919b59)) + (pin "12" (uuid 1e0f792c-42f8-4b49-94fc-85e4bbeb0b88)) + (pin "14" (uuid 0a79a37b-50b0-4b4e-bd91-91f6f44a9e9c)) + (pin "A2" (uuid bf3bc299-195f-489f-9098-b1c005a6a785)) + (pin "11" (uuid 5dfaec89-721b-4f94-83c4-37dbab7f6c36)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K13") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 102.87 191.77 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 59e11b6f-d17b-4ef8-a876-d0c62eebe41c) + (property "Reference" "#PWR075" (at 102.87 198.12 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 100.33 193.04 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 102.87 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 102.87 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 4cc682ac-384d-400d-8697-9440056d7eca)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR075") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 92.71 101.6 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 5a002c98-ce7e-4b0d-aeca-905be396b44f) + (property "Reference" "#PWR052" (at 92.71 107.95 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 90.17 104.14 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 92.71 101.6 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 92.71 101.6 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 69ed323a-0eb1-4ee2-9608-5e8ce35fc665)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR052") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 196.85 166.37 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 5abe35c9-3a5f-4ed2-ad84-6af0e1413b2b) + (property "Reference" "C96" (at 196.85 172.72 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "220pF 100V" (at 196.85 170.18 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 200.66 167.3352 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 196.85 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C221J1GAC" (at 196.85 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 196.85 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 73f647fa-08d0-416c-9e6e-b059ee6d83aa)) + (pin "1" (uuid 4fafe073-dea0-41e1-8560-73b3d33df8bc)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C96") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 92.71 166.37 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 5c747b7e-73e2-4312-9c27-71dcc52bf15b) + (property "Reference" "#PWR056" (at 92.71 172.72 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 90.17 168.91 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 92.71 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 92.71 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid cb613585-1ba4-4420-9723-299dbc73db09)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR056") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 396.24 80.01 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 5cf27801-fb58-44e3-b953-f5ca8f842026) + (property "Reference" "K33" (at 406.4 86.36 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 405.13 88.9 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 407.67 81.28 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 396.24 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 396.24 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 396.24 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 46f853ca-5683-4636-b15d-7a06ca3daf9c)) + (pin "12" (uuid 4ddb492c-05c0-4373-94e6-b81ae705a170)) + (pin "14" (uuid 2a845f60-f558-4838-80a3-4af834c6b5ba)) + (pin "A2" (uuid d3f7ef0d-5ed1-4a32-950d-5329bf8abd6f)) + (pin "11" (uuid 7bb337eb-783d-48fd-a1fe-a2c357ad3971)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K33") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 20.32 78.74 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 5f64c26e-4414-4864-b741-bc55bbc260cb) + (property "Reference" "C107" (at 13.97 78.74 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 16.51 77.47 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 19.3548 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 20.32 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 20.32 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 20.32 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 5a1ce3ba-0487-4fee-bba5-b47fd3628800)) + (pin "1" (uuid 85b5eb87-8499-4c8d-b796-411f84d402df)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C107") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 237.49 113.03 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 5fb181fd-a517-40d7-969b-cf8024fdf828) + (property "Reference" "L9" (at 239.649 113.03 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.519uH" (at 240.03 115.57 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 237.49 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 237.49 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 237.49 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 237.49 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 9ab20bb7-0ff8-49e9-88b8-65272673d43a)) + (pin "2" (uuid 05a72a2e-97e8-4bfb-b2fd-df5d0dbecbde)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L9") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 257.81 105.41 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 61636b1e-9577-490c-b72e-54069fcdfe25) + (property "Reference" "#PWR0119" (at 257.81 111.76 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 255.27 107.95 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 257.81 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 257.81 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 6a08f2da-02fa-4326-b40b-566d151ca8ae)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0119") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 284.48 176.53 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 61ec9252-e462-40d9-9e63-7c731df3ceab) + (property "Reference" "#PWR0127" (at 284.48 180.34 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 284.48 171.45 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 284.48 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 284.48 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid de5dbd84-0dbe-434e-af0f-f05fd13fdf64)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0127") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 290.83 146.05 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 6227e1d6-03fe-463b-bd02-278c0cd5a57a) + (property "Reference" "#PWR0131" (at 290.83 152.4 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 288.29 148.59 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 290.83 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 290.83 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid bbe7c5c0-4530-4a35-ad78-9f58fcfa896c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0131") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 163.83 100.33 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 633ee90c-a200-4ad0-8cf9-16a4fcf6509a) + (property "Reference" "C27" (at 163.83 93.98 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "150pF 100V" (at 163.83 96.52 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 167.64 99.3648 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 163.83 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C151J1G" (at 163.83 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 163.83 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 5683cd58-163e-4aa5-9209-4e78a7a31ab1)) + (pin "1" (uuid b31504cb-1f62-4d4a-b4e2-236db168712d)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C27") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 97.79 115.57 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 634d1281-2e9f-4b97-8c74-f611a08a5324) + (property "Reference" "C40" (at 97.79 109.22 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "470pF 100V" (at 97.79 111.76 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 101.6 114.6048 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 97.79 115.57 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C471J1GAC" (at 97.79 115.57 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 97.79 115.57 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 54061599-7779-43f0-ac44-7d0677386e3f)) + (pin "1" (uuid 4ef02753-59a3-47e3-8e58-94dc231e68b2)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C40") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 270.51 113.03 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 64771300-ad1c-46ef-9fa2-b78741e82072) + (property "Reference" "L10" (at 272.669 113.03 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.447uH" (at 273.05 115.57 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 270.51 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 270.51 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 270.51 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 270.51 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 5b4af0e1-bd31-40bd-bda2-f7fa7ad6721e)) + (pin "2" (uuid e05a790f-6f9d-4de5-a2ca-97c30859b4c9)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L10") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 196.85 105.41 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 650c03d4-848b-41d1-9f63-91e92abd104b) + (property "Reference" "C34" (at 196.85 111.76 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "220pF 100V" (at 196.85 109.22 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 200.66 106.3752 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 196.85 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C221J1GAC" (at 196.85 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 196.85 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 9dcbf31a-f63a-41b6-bc90-ee1975b867df)) + (pin "1" (uuid 14afbc81-ab23-46cf-8174-6456c1be94e1)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C34") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 191.77 105.41 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 68ac2971-d6a6-4530-a52a-b90458285c9b) + (property "Reference" "#PWR099" (at 191.77 111.76 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 189.23 107.95 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 191.77 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 191.77 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 7b6a492a-3754-48b9-b4e6-dfc0545e3d7d)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR099") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 130.81 166.37 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 68ca82b0-e9ad-4de3-ac67-8fc0310ad649) + (property "Reference" "C103" (at 130.81 172.72 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "330pF 100V" (at 130.81 170.18 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 134.62 167.3352 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 130.81 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061A331JAT4A" (at 130.81 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 130.81 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 2b46b677-ab60-4b97-9d67-557d34c5c411)) + (pin "1" (uuid 2d4ae38d-b697-40b0-8779-b90470e192b1)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C103") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 59.69 105.41 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 6bbbc7d5-9394-48ee-a218-13b95b9dc9ec) + (property "Reference" "#PWR048" (at 59.69 111.76 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 57.15 107.95 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 59.69 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 59.69 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 1c3de89d-263f-4a21-874e-8f3123737265)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR048") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 130.81 100.33 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 6db9aa11-ac36-4599-93eb-c984865d01e6) + (property "Reference" "C25" (at 130.81 93.98 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "330pF 100V" (at 130.81 96.52 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 134.62 99.3648 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 130.81 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061A331JAT4A" (at 130.81 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 130.81 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 28e5d1e7-9f00-4c62-bcba-a2e390f90bf2)) + (pin "1" (uuid ffbd4905-977e-4da4-b51c-95af0aeabc7a)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C25") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 356.87 125.73 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 6e2a0b23-d6f3-46a2-b36b-522c7a4a86f0) + (property "Reference" "#PWR0150" (at 356.87 132.08 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 354.33 128.27 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 356.87 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 356.87 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 7379883b-5a24-4f02-9a44-020db7899721)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0150") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 69.85 191.77 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 6f33ccc5-f87b-420f-933b-4a6de3460622) + (property "Reference" "#PWR069" (at 69.85 198.12 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 67.31 193.04 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 69.85 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 69.85 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 1676b1d5-d61f-47ee-b631-3a9b48de2b3d)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR069") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 382.27 176.53 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 7132f1da-85c0-4173-ba27-d9de56bbd6e1) + (property "Reference" "#PWR0157" (at 382.27 180.34 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 382.27 171.45 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 382.27 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 382.27 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid a366cd27-dc7e-447f-9d2b-77438118e2c4)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0157") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 34.29 184.15 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 71adcbae-425a-48d3-9f17-d6c16a3bec9e) + (property "Reference" "K21" (at 44.45 176.53 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 48.26 173.99 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 45.72 182.88 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 34.29 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 34.29 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 34.29 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 708c9968-51d1-4b33-9b1b-4b888fa0a53c)) + (pin "12" (uuid ea782da5-176a-429f-94d3-f8dfe4a78273)) + (pin "14" (uuid fe0c1913-7c66-43d8-8d80-90b0477f148a)) + (pin "A2" (uuid 0677cab0-deb4-4801-8acb-c312d2aafda1)) + (pin "11" (uuid 7f6cea1c-a33c-40b6-8c39-0d98e200a18f)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K21") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 295.91 146.05 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 71f9ad9c-c6cb-40d3-8d1f-855afd430e75) + (property "Reference" "C81" (at 295.91 152.4 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "180pF 100V" (at 295.91 149.86 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 299.72 147.0152 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 295.91 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C181J1G" (at 295.91 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 295.91 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 5d553654-1aeb-490d-a14f-af96fc25ecd0)) + (pin "1" (uuid d15189fa-9f0a-4092-83ab-7bcae0db5fa8)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C81") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 328.93 120.65 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 7202945a-02bd-45f5-b1a1-0f70c5ffbae4) + (property "Reference" "C41" (at 328.93 114.3 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "82pF 100V" (at 328.93 116.84 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 332.74 119.6848 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 328.93 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C820J1G" (at 328.93 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 328.93 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid e2d574af-367c-4961-9d18-4a80e64f5268)) + (pin "1" (uuid 72370c17-ce39-4e91-9435-1ce96f896e0c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C41") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 152.4 186.69 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 72559e8d-e6ee-40ab-ae6d-3fec3c1b4c68) + (property "Reference" "#PWR088" (at 152.4 193.04 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 149.86 187.96 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 152.4 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 152.4 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 899b0e65-743f-42de-985e-cde67392ced0)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR088") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 105.41 153.67 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 7347a074-2f4b-4c69-a7fa-904713f07ff7) + (property "Reference" "L27" (at 107.569 153.67 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "1.76uH" (at 107.95 156.21 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 105.41 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 105.41 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 105.41 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 105.41 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid fce974be-aad1-4725-8595-e9a62c445927)) + (pin "2" (uuid ebf41997-2a49-4407-9495-d2ad0652d414)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L27") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 191.77 125.73 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 7352c648-1b8b-4e5f-be0e-058a586ef9c2) + (property "Reference" "#PWR0100" (at 191.77 132.08 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 189.23 128.27 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 191.77 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 191.77 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 68213b86-b622-4f32-be46-fbbcff84775e)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0100") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 152.4 176.53 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 7356ff4b-7faa-4ae0-ad6d-061270df1380) + (property "Reference" "#PWR087" (at 152.4 180.34 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 152.4 171.45 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 152.4 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 152.4 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 11e4d54f-753a-437f-a224-4adcbe937092)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR087") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 64.77 140.97 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 7512579a-c28e-4083-bd66-c40d932a2b0c) + (property "Reference" "C76" (at 64.77 134.62 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "100pF 100V" (at 64.77 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 68.58 140.0048 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 64.77 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C101J1GAULR" (at 64.77 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 64.77 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid c701a5b9-e0da-407e-9ec9-659e940ee572)) + (pin "1" (uuid 1d9caaf1-fc43-437d-a5c3-55b5145c70d5)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C76") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 224.79 146.05 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 7566ce2b-d26d-4124-acc3-5f5f15fa5762) + (property "Reference" "#PWR0111" (at 224.79 152.4 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 222.25 148.59 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 224.79 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 224.79 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 2245db81-05ed-4468-8fda-ea4c5be8e7bb)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0111") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 232.41 184.15 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 75af5a94-9d2b-4e94-b428-4b7489cdc189) + (property "Reference" "K25" (at 242.57 176.53 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 246.38 173.99 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 243.84 182.88 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 232.41 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 232.41 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 232.41 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 88b9d32d-1fd5-45a4-97fd-8ca662752dd1)) + (pin "12" (uuid 66c25fa1-208b-42bd-8fa0-299c83ffaa45)) + (pin "14" (uuid ee3a16de-f9e4-4fcd-a995-465146eb927f)) + (pin "A2" (uuid 0072df61-a9b7-4e23-8e20-0a828a9d6fe6)) + (pin "11" (uuid b56a081a-692c-488d-91bf-5d3c688783b7)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K25") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 64.77 161.29 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 76af360c-02f9-4894-82e7-8f53ded070be) + (property "Reference" "C92" (at 64.77 154.94 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "470pF 100V" (at 64.77 157.48 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 68.58 160.3248 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 64.77 161.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C471J1GAC" (at 64.77 161.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 64.77 161.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid ef14ba24-4037-44cd-9eba-b7bcc64e0a3f)) + (pin "1" (uuid 55520e74-0578-4639-a9de-50335d388e85)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C92") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 284.48 186.69 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 76e24532-9717-458b-ba48-dbb586f5a419) + (property "Reference" "#PWR0128" (at 284.48 193.04 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 281.94 187.96 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 284.48 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 284.48 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 1adcc736-4e27-479d-a4fe-ab2613ace289)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0128") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 232.41 80.01 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 77e44b95-e5a6-483b-8f1a-26ba51cd6d99) + (property "Reference" "K9" (at 242.57 86.36 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 241.3 88.9 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 243.84 81.28 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 232.41 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 232.41 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 232.41 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 28625071-ec09-4324-9b12-7b3c21884163)) + (pin "12" (uuid d8e8bd4b-1869-4516-8fee-a65bff2d28ad)) + (pin "14" (uuid ea2c81ed-da76-4c19-b85f-78ecc022149e)) + (pin "A2" (uuid cdcd65f3-ac41-4e08-9cb1-da067e90dac3)) + (pin "11" (uuid 3d742481-9c66-4900-b386-bfad9f979be0)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K9") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 152.4 82.55 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 78860ed9-aff2-4c44-95a2-86d07f7f3f10) + (property "Reference" "#PWR086" (at 152.4 88.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 149.86 83.82 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 152.4 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 152.4 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid d9c2a055-f3d2-4543-b164-07a111b07b01)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR086") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 125.73 125.73 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 7896e59a-79d4-49ca-8721-bd336346c33e) + (property "Reference" "#PWR058" (at 125.73 132.08 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 123.19 128.27 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 125.73 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 125.73 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 22f01874-ac7a-4fd5-b7f5-0c0839a10ded)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR058") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 53.34 182.88 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 7c3e284c-fbe5-4851-8ddc-b6f88201fdf6) + (property "Reference" "C109" (at 46.99 182.88 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 49.53 181.61 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 52.3748 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 53.34 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 53.34 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 53.34 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 1a2bdfca-78ac-43d7-aa0d-d9841c4c5374)) + (pin "1" (uuid b784291e-0b80-413c-84e4-5fe8b9c5fcce)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C109") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 341.63 133.35 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 7c53c1c0-07b7-4f3b-973e-c6a0302c7424) + (property "Reference" "C69" (at 342.9 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "27pF 100V" (at 345.44 133.35 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 342.5952 129.54 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 341.63 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C270J1G" (at 341.63 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 341.63 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 0472405d-8bd4-439d-b252-752861f15232)) + (pin "1" (uuid d3ce2764-3131-4cbc-b26d-2ded3ccba7e3)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C69") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 67.31 69.85 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 7c91a705-09d9-486c-8f48-39b942b2da49) + (property "Reference" "#PWR072" (at 67.31 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 64.77 71.12 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 67.31 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 67.31 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid c07d321e-5b35-40dd-b981-1cc058158f54)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR072") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 133.35 184.15 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 7f7943ac-3c60-4a94-94a2-9f74a6885788) + (property "Reference" "K22" (at 143.51 176.53 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 147.32 173.99 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 144.78 182.88 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 133.35 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 133.35 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 133.35 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid ec40d584-6052-4b30-9d5e-45e3db8e62c2)) + (pin "12" (uuid 4c9dce0d-759e-4073-a1a4-a70df87259e5)) + (pin "14" (uuid 829a0cc6-f0f9-408c-8754-4b218ff1b2c5)) + (pin "A2" (uuid 1aa3b33d-634d-4257-bc52-aaadb17dad57)) + (pin "11" (uuid 5fcd535c-c08b-44b7-a30e-b61191bb3eb8)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K22") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 26.67 125.73 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 80849d5b-16d1-4e2b-b54b-a270ecc55949) + (property "Reference" "#PWR045" (at 26.67 132.08 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 24.13 128.27 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 26.67 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 26.67 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid ad731e95-2406-44fc-a245-ed8a45d1fba3)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR045") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 64.77 166.37 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 808df3be-d03a-496f-b580-d9c2a573a180) + (property "Reference" "C101" (at 64.77 172.72 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "390pF 100V" (at 64.77 170.18 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 68.58 167.3352 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 64.77 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C391J1G" (at 64.77 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 64.77 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid ebbd6928-80af-422a-b5b7-6e1df216cd4c)) + (pin "1" (uuid e2369be1-e825-4fb3-866b-5cfaa0a5ccad)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C101") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 298.45 69.85 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 8224bfc6-c0d9-444f-971f-31092083109d) + (property "Reference" "#PWR0133" (at 298.45 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 295.91 71.12 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 298.45 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 298.45 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 911c44d3-defb-4b13-819d-aa28fde13b8e)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0133") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 356.87 105.41 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 831a7a3f-68d9-4880-a2f3-14261f68c57c) + (property "Reference" "#PWR0149" (at 356.87 111.76 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 354.33 107.95 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 356.87 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 356.87 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid c1c6f209-6e67-4465-a9e6-2f6060e84823)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0149") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 143.51 133.35 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 8361787a-476a-487f-ae02-fcb1e0485747) + (property "Reference" "C58" (at 144.78 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "100pF 100V" (at 147.32 133.35 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 144.4752 129.54 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 143.51 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C101J1GAULR" (at 143.51 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 143.51 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 63244850-a76a-4a76-bf90-3dd678b5b8b8)) + (pin "1" (uuid a444dfe4-78c4-4d6c-b0f2-365e71cf06e8)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C58") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 251.46 72.39 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 836e9a66-9aeb-473d-95c1-d4f526ac6b43) + (property "Reference" "#PWR0115" (at 251.46 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 251.46 67.31 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 251.46 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 251.46 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 1d52698d-347b-4900-b16b-071605b09741)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0115") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 185.42 78.74 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 8370823c-82dc-4f30-990f-de148d5af9e4) + (property "Reference" "C116" (at 179.07 78.74 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 181.61 77.47 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 184.4548 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 185.42 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 185.42 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 185.42 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 6a86544a-efcc-4440-9613-12cc2ff0b352)) + (pin "1" (uuid d2ca587c-1739-48fd-9910-068486816e64)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C116") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 237.49 133.35 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 8759c416-d0dc-413a-994c-9a8630d2f2a1) + (property "Reference" "L20" (at 238.76 140.97 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.471uH" (at 236.22 137.16 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 237.49 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 237.49 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 237.49 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 237.49 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 398ebe52-1035-4923-9968-95d604d2254a)) + (pin "2" (uuid d93d257c-b124-4693-b3ef-94b671787572)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L20") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 350.52 186.69 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 879abae2-0b4a-4c4e-ba1a-97e6cf6a036f) + (property "Reference" "#PWR0148" (at 350.52 193.04 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 347.98 187.96 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 350.52 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 350.52 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 76697df1-d844-4192-b48b-8338ae96231e)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0148") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 26.67 166.37 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 881eb176-abbe-43b5-8745-45dd26eb74ca) + (property "Reference" "#PWR047" (at 26.67 172.72 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 24.13 168.91 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 26.67 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 26.67 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 990df348-890e-4e66-aca3-3d8bbb272b11)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR047") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 97.79 125.73 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 8825a924-9951-49d4-bb35-ff8e93ee7b17) + (property "Reference" "C57" (at 97.79 132.08 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "56pF 100V" (at 97.79 129.54 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 101.6 126.6952 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 97.79 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C560J1G" (at 97.79 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 97.79 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid e90c9684-4acc-41fe-a163-0d6e34b7f2d6)) + (pin "1" (uuid 9c3e4172-43cf-42bf-9d0a-5218441622bc)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C57") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 303.53 153.67 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 88cdd729-414c-4757-b53c-d56e3dd2f0ab) + (property "Reference" "L33" (at 305.689 153.67 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.337uH" (at 306.07 156.21 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 303.53 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 303.53 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 303.53 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 303.53 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid de3bc30a-5dee-4498-84ae-1ceed6422db8)) + (pin "2" (uuid 46ccf8e3-5178-4dac-a08d-fbc70283f210)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L33") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 328.93 140.97 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 89293ea0-da20-49c1-ac23-523831a73aaa) + (property "Reference" "C72" (at 328.93 134.62 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "82pF 100V" (at 328.93 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 332.74 140.0048 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 328.93 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C820J1G" (at 328.93 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 328.93 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 07fc4461-4e87-4a77-bb04-ea2bb5c93af7)) + (pin "1" (uuid d3e052de-48dd-47d7-b935-470daeb3532d)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C72") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 166.37 184.15 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 8962e2f2-51a8-49d5-88f6-3e6c80e2ff0b) + (property "Reference" "K23" (at 176.53 176.53 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 180.34 173.99 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 177.8 182.88 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 166.37 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 166.37 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 166.37 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 1e70ac32-1fa6-4fb1-a54c-ff0e5e91783f)) + (pin "12" (uuid 9355f94c-59aa-4318-8dc9-6eb333c971fc)) + (pin "14" (uuid 558ffe13-f185-4d7b-a4f0-aaeb71741bbe)) + (pin "A2" (uuid c4cf0a38-18f3-4bec-a71e-2912abbe3b68)) + (pin "11" (uuid 2d670b43-4ac3-4ce6-880d-748da01a45c2)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K23") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 185.42 182.88 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 89ef717a-93db-42f7-a13d-fbcd23090f4d) + (property "Reference" "C117" (at 179.07 182.88 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 181.61 181.61 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 184.4548 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 185.42 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 185.42 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 185.42 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 9385d4f1-b140-4825-912c-2eba1468c49e)) + (pin "1" (uuid c1e33922-994a-439c-ae93-e3cd8a6998a3)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C117") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 26.67 105.41 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 8ac631cd-7fc6-4134-b3c5-5b61a2c1c645) + (property "Reference" "#PWR044" (at 26.67 111.76 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 24.13 107.95 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 26.67 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 26.67 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid e64bb44b-3820-42c7-ad82-3b373fee50f6)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR044") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 100.33 184.15 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 8b0fe0f8-daa9-45d2-b624-0be9da687e4f) + (property "Reference" "K20" (at 110.49 176.53 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 114.3 173.99 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 111.76 182.88 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 100.33 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 100.33 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 100.33 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 5225390f-648b-4bda-b0bd-355a4784b5af)) + (pin "12" (uuid 211d001c-56df-457a-88b2-04afae803d3d)) + (pin "14" (uuid 32666e10-5db8-4171-a175-7268a80dc39d)) + (pin "A2" (uuid db5b9584-ff01-43fb-989a-c54f2c55f384)) + (pin "11" (uuid bbcddcf4-ff05-4b09-84c2-20fe3f66f413)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K20") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 317.5 82.55 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 8c91f4a2-b5e7-44cc-ae98-3be4a77153e2) + (property "Reference" "#PWR0136" (at 317.5 88.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 314.96 83.82 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 317.5 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 317.5 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid d9261230-ed9b-4951-8ff5-c4c249b3fe50)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0136") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 53.34 72.39 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 8db1288d-8a10-4332-909f-eacc1314415b) + (property "Reference" "#PWR070" (at 53.34 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 53.34 67.31 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 53.34 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 53.34 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 09237b0e-6b48-4bc8-b231-581f2489a927)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR070") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 86.36 78.74 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 8e6c5265-62e5-4c2d-ae30-7387a9a7201c) + (property "Reference" "C110" (at 80.01 78.74 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 82.55 77.47 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 85.3948 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 86.36 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 86.36 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 86.36 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 276c18be-2366-4e4f-9545-fd1703ea70c7)) + (pin "1" (uuid 9eddc554-b099-4ebc-b00f-ec21f8fa1f88)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C110") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 39.37 153.67 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 8e7db6d1-3324-4b6d-acb6-902921051153) + (property "Reference" "L25" (at 41.529 152.4579 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "5.21uH" (at 41.529 154.8821 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 39.37 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 39.37 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 39.37 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 39.37 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 4327c0a3-dbf2-4500-9daa-62d6e695845a)) + (pin "2" (uuid e5055cb3-bf2c-4f18-ab59-75984e35a3b5)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L25") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 44.45 133.35 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 8f0dc41c-931e-4da8-82e7-e974ba1860b4) + (property "Reference" "C59" (at 45.72 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "330pF 100V" (at 48.26 133.35 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 45.4152 129.54 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 44.45 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061A331JAT4A" (at 44.45 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 44.45 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid a0df16a8-2c91-4606-907e-844849e5770c)) + (pin "1" (uuid a200e6c6-8733-4f09-a6c8-87d2b6a20f35)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C59") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 303.53 133.35 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 91beb536-a3f9-4a2d-a63a-f436fd9a11ad) + (property "Reference" "L22" (at 304.8 140.97 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.342uH" (at 302.26 138.43 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 303.53 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 303.53 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 303.53 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 303.53 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid d1f8855a-e8af-472d-a096-e4486b22c109)) + (pin "2" (uuid f9d14406-f80b-45b4-9a25-e3f37e2a021c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L22") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 232.41 222.25 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 91f98bee-a85b-4f04-8eff-ac6a763bf7a1) + (property "Reference" "#PWR0216" (at 232.41 228.6 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 234.95 223.52 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 232.41 222.25 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 232.41 222.25 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid eb7bc4c7-d857-47c6-98ba-518928f887cc)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0216") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Mechanical:MountingHole_Pad") (at 118.11 215.9 270) (unit 1) + (in_bom no) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 9261f4c5-839a-4c33-a065-5a90ba320edf) + (property "Reference" "H5" (at 121.92 215.9 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "~" (at 121.92 217.1121 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "MountingHole:MountingHole_4.3mm_M4_DIN965_Pad" (at 118.11 215.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 118.11 215.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 118.11 215.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 118.11 215.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid fd4342f9-9f35-41f8-808f-009640104266)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "H5") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 191.77 146.05 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 9383560e-3bfa-48f8-890e-2c8dce2ecff2) + (property "Reference" "#PWR0101" (at 191.77 152.4 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 189.23 148.59 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 191.77 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 191.77 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 9e7efa1f-b9a2-48dc-b176-358ae7b31785)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0101") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 20.32 182.88 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 93a02541-e576-426d-b441-d8db55ca06fb) + (property "Reference" "C106" (at 13.97 182.88 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 16.51 181.61 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 19.3548 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 20.32 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 20.32 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 20.32 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 3e349ee0-ce55-4e4e-abd8-20ca173f805b)) + (pin "1" (uuid aa0583ff-563c-4524-bf58-54b7c463f854)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C106") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 229.87 100.33 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 93c82041-4ec5-4c01-a81d-19d73cf87e4a) + (property "Reference" "C24" (at 229.87 93.98 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "82pF 100V" (at 229.87 96.52 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 233.68 99.3648 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 229.87 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C820J1G" (at 229.87 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 229.87 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 874cf946-90ff-4eef-ba2b-212aeb7991d9)) + (pin "1" (uuid 8d1bb1c3-a61a-4ae6-89eb-2387c24e0cf1)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C24") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 323.85 105.41 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 94363505-7cae-41d6-a61c-6640860c08d4) + (property "Reference" "#PWR0139" (at 323.85 111.76 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 321.31 107.95 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 323.85 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 323.85 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 0ce535ed-8768-49c1-b7d2-2ca4591261e4)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0139") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 64.77 146.05 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 95d59a16-43ed-495c-882f-c1b14c436088) + (property "Reference" "C86" (at 64.77 152.4 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "1200pF 100V" (at 64.77 149.86 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 68.58 147.0152 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 64.77 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061C122JAT2A" (at 64.77 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 64.77 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 1951e927-77bb-45f9-b623-50aaeeef868f)) + (pin "1" (uuid 7ea9016c-c338-413e-b24a-927229ed00f4)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C86") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 317.5 182.88 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 968e0fce-5a81-41d7-a402-826bc11bcfc1) + (property "Reference" "C125" (at 311.15 182.88 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 313.69 181.61 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 316.5348 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 317.5 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 317.5 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 317.5 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 9fe0c626-6ad2-438d-9d29-dcaee88060a1)) + (pin "1" (uuid aeed9dd1-29f0-410f-b1fe-f4ff68c26057)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C125") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 72.39 133.35 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 971cfd51-4f6c-4c25-ae18-90ef87bb6b35) + (property "Reference" "L15" (at 73.66 140.97 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "2.43uH" (at 71.12 137.16 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 72.39 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 72.39 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 72.39 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 72.39 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 87b93bfd-9374-4c65-891c-9c745e6b40e9)) + (pin "2" (uuid 415605dc-c022-47ce-aec4-48f794db215c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L15") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 224.79 125.73 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 9784e6ce-89d0-4a65-bfca-53a5ef182887) + (property "Reference" "#PWR0110" (at 224.79 132.08 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 222.25 128.27 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 224.79 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 224.79 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid a39d2a83-e3c7-4c26-9430-26d39b11ce0c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0110") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 83.82 133.35 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 97933539-072f-47c5-a039-b21306d5753a) + (property "Reference" "C62" (at 85.09 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "47pF 100V" (at 87.63 133.35 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 84.7852 129.54 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 83.82 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C470J1GAC" (at 83.82 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 83.82 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid bbb09ff6-35a1-4405-b125-e5f1396c1efe)) + (pin "1" (uuid 36f97448-7f3f-4e60-81e3-86bc0d12c9d9)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C62") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 176.53 133.35 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 97c31759-183c-4473-9da6-b2a5a4a43be2) + (property "Reference" "C68" (at 177.8 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "68pF 100V" (at 180.34 133.35 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 177.4952 129.54 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 176.53 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C680J1G" (at 176.53 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 176.53 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid a25ba139-7fdb-4f35-9583-6efdd5c84fe7)) + (pin "1" (uuid 92cd5642-7d04-4959-aa45-793e52044655)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C68") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Connector:Conn_Coaxial") (at 157.48 207.01 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 97d637d8-22dd-41f6-a007-5229b5324d03) + (property "Reference" "J22" (at 160.02 209.55 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "RF interconnect" (at 160.02 207.01 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" (at 157.48 207.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" " ~" (at 157.48 207.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "712-CONSMA001-G" (at 157.48 207.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 157.48 207.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid f3c1193c-9a43-4ac9-b31c-df47f33e8f52)) + (pin "2" (uuid b440b922-bfe8-4a83-a75e-7f1daf692577)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J22") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 31.75 166.37 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 983e6ed1-9e02-4f83-962e-5fc1b3b4a481) + (property "Reference" "C102" (at 31.75 172.72 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "150pF 100V" (at 31.75 170.18 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 35.56 167.3352 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 31.75 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C151J1G" (at 31.75 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 31.75 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 8cc5252b-457d-4f5d-845d-fbad07f504b0)) + (pin "1" (uuid a5cb4ef4-600c-4498-9c8d-ce15a78a838d)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C102") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 204.47 113.03 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 98483035-2b25-45c8-9ecf-9cb34d290861) + (property "Reference" "L8" (at 206.629 113.03 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.670uH" (at 207.01 115.57 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 204.47 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 204.47 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 204.47 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 204.47 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 3232f365-0aff-47af-a127-dd9330c877b2)) + (pin "2" (uuid 3943b52d-119d-4710-8665-5780eeb72e1b)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L8") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 251.46 78.74 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 9c5d5163-6de9-4898-bf57-3550dfa2b0c7) + (property "Reference" "C120" (at 245.11 78.74 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 247.65 77.47 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 250.4948 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 251.46 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 251.46 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 251.46 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid a24b2b23-07a3-4c94-a7fa-846febcae42d)) + (pin "1" (uuid 527b2a03-6029-4225-91db-b4e9cc888e1b)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C120") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 59.69 146.05 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 9cbe2e66-d93b-4069-bdf8-d9281c7d074e) + (property "Reference" "#PWR050" (at 59.69 152.4 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 57.15 148.59 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 59.69 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 59.69 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 81332afd-8900-4277-b195-fe4c0a046390)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR050") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 163.83 125.73 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 9d128f59-70f7-4141-97fc-d8d379fc0ce9) + (property "Reference" "C47" (at 163.83 132.08 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "470pF 100V" (at 163.83 129.54 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 167.64 126.6952 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 163.83 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C471J1GAC" (at 163.83 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 163.83 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid d425d92e-40e8-4789-8840-12a8b07b779b)) + (pin "1" (uuid 57defdaa-a15d-448d-bfa9-9dd2b9cce5f8)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C47") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 31.75 140.97 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 9e51c7a6-a784-4235-8bf7-519518a75da4) + (property "Reference" "C77" (at 31.75 134.62 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "330pF 100V" (at 31.75 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 35.56 140.0048 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 31.75 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061A331JAT4A" (at 31.75 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 31.75 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 8c19028b-c2a2-4eb6-b2ae-d464e7d6e355)) + (pin "1" (uuid 494e5feb-fcee-4f04-ac27-9b31bfb09695)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C77") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 67.31 80.01 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 9f9cd752-e767-42ce-bbea-54fe694c0b14) + (property "Reference" "K14" (at 77.47 86.36 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 76.2 88.9 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 78.74 81.28 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 67.31 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 67.31 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 67.31 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 039d38bb-db6f-4a0d-b030-96ca32571710)) + (pin "12" (uuid ec28bbe5-0a0c-426a-8e1e-ef7d283ca57a)) + (pin "14" (uuid 5db852dc-e37e-484b-8c38-bca8a3649f43)) + (pin "A2" (uuid 7b32681d-15f3-4a04-910d-b39a35f56855)) + (pin "11" (uuid 9bb87fa6-d061-4ffe-9775-295bd885efed)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K14") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Mechanical:MountingHole_Pad") (at 118.11 220.98 270) (unit 1) + (in_bom no) (on_board yes) (dnp no) (fields_autoplaced) + (uuid a09693b5-bc9a-478b-8f96-8eee23b0219a) + (property "Reference" "H6" (at 121.92 220.98 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "~" (at 121.92 222.1921 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "MountingHole:MountingHole_4.3mm_M4_DIN965_Pad" (at 118.11 220.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 118.11 220.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 118.11 220.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 118.11 220.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid f3c13bfd-bd47-455c-849e-91c6447355f7)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "H6") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 67.31 184.15 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid a103dfde-4b1f-48ca-b412-809a797d744a) + (property "Reference" "K19" (at 77.47 176.53 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 81.28 173.99 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 78.74 182.88 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 67.31 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 67.31 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 67.31 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 18138edc-e9d6-4953-b41a-995de9a63793)) + (pin "12" (uuid 92e3e67d-85a9-47ac-a5da-f23cb5bff322)) + (pin "14" (uuid b54070d7-499e-421e-a69d-6d5f4d76e5ec)) + (pin "A2" (uuid 741a62ea-93da-4f8e-9369-3f1720574aac)) + (pin "11" (uuid 9dfbc767-be1f-46fb-8218-35a3898afa57)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K19") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 336.55 133.35 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid a14266ab-bce9-4f99-83a4-42b6cabc8f26) + (property "Reference" "L23" (at 337.82 140.97 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.305uH" (at 335.28 135.89 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 336.55 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 336.55 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 336.55 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 336.55 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid d2a94055-44af-4857-894c-e0147d4d7de0)) + (pin "2" (uuid 25a3e693-25e5-4f3c-b0a7-0cc5c1776e0c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L23") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 317.5 78.74 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid a2fb5395-71e9-4ae3-81ed-8ca7784304f0) + (property "Reference" "C124" (at 311.15 78.74 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 313.69 77.47 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 316.5348 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 317.5 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 317.5 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 317.5 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 5a40d834-6b14-449f-a8c7-1529a3d3c9da)) + (pin "1" (uuid d81e3589-c339-4bb5-9c56-f8576e992c18)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C124") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 204.47 153.67 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid a32a0c0c-c562-4715-9620-8eedd3a9bc2c) + (property "Reference" "L30" (at 206.629 153.67 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.670uH" (at 207.01 156.21 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 204.47 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 204.47 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 204.47 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 204.47 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 7cec2fd4-97eb-4a2b-b037-757de6e9257c)) + (pin "2" (uuid 27e3b6d5-781f-4e6e-8143-569a4ffe202e)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L30") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 331.47 184.15 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid a455684c-fa03-4d2e-9029-de0141f71378) + (property "Reference" "K28" (at 341.63 176.53 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 345.44 173.99 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 342.9 182.88 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 331.47 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 331.47 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 331.47 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid ad2c4737-79dc-4aa2-a04d-71fd50ff6944)) + (pin "12" (uuid 9e84a7cc-8524-462b-9ac8-412832a0cc36)) + (pin "14" (uuid ced1c2ec-4d36-4833-b31f-a3fd67d0fb3a)) + (pin "A2" (uuid 79f565c7-12f5-4d72-aef2-8c038fff6b66)) + (pin "11" (uuid 8b3707d3-b6db-4ca2-9337-b94fd8d6fd80)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K28") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 298.45 184.15 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid a4dfb86a-1d9c-42a9-ac8a-aa8a018dcd29) + (property "Reference" "K27" (at 308.61 176.53 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 312.42 173.99 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 309.88 182.88 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 298.45 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 298.45 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 298.45 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid a16ba4b2-0419-4663-9921-981e385623e7)) + (pin "12" (uuid 61662b99-b18f-429a-b316-cc35b67ec84f)) + (pin "14" (uuid 83aa161f-d96c-4575-9294-6bd33029d78b)) + (pin "A2" (uuid b691bb1f-3c9e-4e8b-be6b-711d9206fefb)) + (pin "11" (uuid c370203c-b429-454d-8e3b-fa43a2a5553b)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K27") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 257.81 125.73 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid a7a4969f-ee3c-4870-95b4-bd7b575a1c31) + (property "Reference" "#PWR0120" (at 257.81 132.08 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 255.27 128.27 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 257.81 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 257.81 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid fa4d3aaa-26a3-49cb-bf7a-91261aca6de5)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0120") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 364.49 69.85 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid a7bbde75-de8d-49c8-a4a9-75e1213cf3a6) + (property "Reference" "#PWR0153" (at 364.49 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 361.95 71.12 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 364.49 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 364.49 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid fdcf15fc-ba73-4f3f-91ad-7f70446d1948)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0153") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 295.91 105.41 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid a7c73f5e-f827-4a5f-972f-e4a15f045717) + (property "Reference" "C37" (at 295.91 111.76 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "120pF 100V" (at 295.91 109.22 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 299.72 106.3752 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 295.91 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "77-VJ1206A121JXBMT" (at 295.91 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 295.91 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid e7b87b42-8552-492f-9238-806a83d87424)) + (pin "1" (uuid 00d851bf-8876-4c13-9888-dffb4c4c7fb0)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C37") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 77.47 133.35 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid a8659880-8449-44ac-b958-cfcb9f13ec95) + (property "Reference" "C61" (at 78.74 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "150pF 100V" (at 81.28 133.35 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 78.4352 129.54 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 77.47 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C151J1G" (at 77.47 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 77.47 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 640105c7-0afd-4f16-8803-0dc4f898f60e)) + (pin "1" (uuid ee4a043c-742b-4549-90e0-841c79b7c6c5)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C61") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 265.43 80.01 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid aac37fab-622d-45b6-b09f-2d4e81159d21) + (property "Reference" "K8" (at 275.59 86.36 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 274.32 88.9 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 276.86 81.28 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 265.43 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 265.43 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 265.43 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid af5555cf-7714-4bb4-a91f-20e115cc87fa)) + (pin "12" (uuid 64a97565-369a-4385-8558-86deecfe7fe3)) + (pin "14" (uuid 5cc890a8-73d8-46ac-b196-d0a14b44dabb)) + (pin "A2" (uuid 79bd5ada-543e-4646-825b-3594ff71384d)) + (pin "11" (uuid 455596ad-7564-4075-bd05-eea0e11e62ad)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K8") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 34.29 80.01 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid abac9513-7dd6-410e-81ee-6a59da7e54f2) + (property "Reference" "K16" (at 44.45 86.36 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 43.18 88.9 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 45.72 81.28 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 34.29 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 34.29 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 34.29 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 53c98a7a-4d24-418b-a22e-a4a08114f29c)) + (pin "12" (uuid f8e2323f-573e-48f4-8d1b-c0926baae352)) + (pin "14" (uuid f7f7773a-acf9-457f-a270-c63b8df312bf)) + (pin "A2" (uuid c0002e9c-23de-4040-9edf-bd6e3437b9ef)) + (pin "11" (uuid 12794b83-dd3e-4c35-91da-398055e88773)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K16") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 158.75 166.37 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid ac65519b-185e-4fbf-a048-ddf3f3a2280e) + (property "Reference" "#PWR092" (at 158.75 172.72 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 156.21 168.91 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 158.75 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 158.75 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 2e75b80d-6a4b-4dc1-9cb3-3fdb4aed5a87)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR092") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 199.39 69.85 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid ac79eb0b-32a4-4848-980b-2d3cb398cf2c) + (property "Reference" "#PWR0103" (at 199.39 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 196.85 71.12 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 199.39 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 199.39 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 012653fa-f479-4b30-a76a-2417481bc37f)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0103") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 158.75 125.73 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid ad6ffc62-8dfd-4d0f-88f8-cbd0845a1d74) + (property "Reference" "#PWR090" (at 158.75 132.08 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 156.21 128.27 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 158.75 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 158.75 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid a9542cc5-1610-4956-bd64-513e535745ac)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR090") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 382.27 186.69 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid af9dd51b-eb82-4528-84e0-f4a8c4b5d2a6) + (property "Reference" "#PWR0158" (at 382.27 193.04 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 379.73 187.96 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 382.27 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 382.27 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid fb72872a-4b43-4870-9bb0-fade0942b83b)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0158") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 163.83 166.37 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid afe91a6f-68cd-43f3-a754-eb02cf1df989) + (property "Reference" "C104" (at 163.83 172.72 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "150pF 100V" (at 163.83 170.18 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 167.64 167.3352 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 163.83 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C151J1G" (at 163.83 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 163.83 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 99ba8d47-d539-4a85-ac6c-ba4d3cf9a0cd)) + (pin "1" (uuid 30d9fc37-58f1-4cf4-9132-abcca431bf6d)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C104") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 308.61 133.35 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid b0181517-0e57-46db-bfba-515ff63ebdd2) + (property "Reference" "C63" (at 309.88 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "27pF 100V" (at 312.42 133.35 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 309.5752 129.54 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 308.61 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C270J1G" (at 308.61 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 308.61 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 6e155a7b-944e-4e53-9be5-b317b562da5d)) + (pin "1" (uuid 5e26e9cf-d13f-42bd-b767-f9d7576f6f88)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C63") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 31.75 100.33 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid b439b237-fe06-4e5b-bff9-d01d841f5296) + (property "Reference" "C28" (at 31.75 93.98 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "150pF 100V" (at 31.75 96.52 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 35.56 99.3648 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 31.75 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C151J1G" (at 31.75 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 31.75 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 5cc1ec20-5af2-4a7b-9d38-b9eccd92955c)) + (pin "1" (uuid 9c08e113-4834-4b88-b14d-2c237153ab34)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C28") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 369.57 133.35 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid b515e3e5-c8d3-466a-8736-ccd0f09439d3) + (property "Reference" "L24" (at 370.84 140.97 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.170uH" (at 368.3 135.89 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 369.57 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 369.57 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 369.57 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 369.57 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid acd428be-7f0d-4870-9586-883277ee738e)) + (pin "2" (uuid d2c4f351-ac9b-4e7f-80cb-648dbb7363b3)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L24") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 350.52 176.53 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid b55cc0e0-99e6-4e9c-bf3d-63d060540a67) + (property "Reference" "#PWR0147" (at 350.52 180.34 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 350.52 171.45 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 350.52 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 350.52 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 3ee1af44-28ec-4ad4-8a4a-606c6221aa2f)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0147") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 218.44 78.74 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid b5b0a0f4-0234-4f4b-958f-00f40eff0ecf) + (property "Reference" "C118" (at 212.09 78.74 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 214.63 77.47 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 217.4748 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 218.44 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 218.44 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 218.44 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 015d0a46-4b7c-43eb-bbfb-2ee890170bb9)) + (pin "1" (uuid 6ac917d5-3f6a-46be-bbb0-7bb78af7d66a)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C118") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 133.35 69.85 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid b646683b-c2b5-450d-9a74-b82dc7fbea5d) + (property "Reference" "#PWR084" (at 133.35 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 130.81 71.12 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 133.35 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 133.35 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 5f315542-1d79-47bd-b6a3-7dfcfa858a60)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR084") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 138.43 113.03 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid b77dfc99-234f-48f9-8e33-b5c9c212f453) + (property "Reference" "L6" (at 140.589 113.03 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "1.34uH" (at 140.97 115.57 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 138.43 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 138.43 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 138.43 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 138.43 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 6b89cc85-84c3-4341-9eb6-5f5beee1227a)) + (pin "2" (uuid 89876b9e-0957-46f5-9107-33b5de917d53)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L6") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 284.48 72.39 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid b8e6f2a9-49b2-47ab-82cf-e5c0e26ea990) + (property "Reference" "#PWR0125" (at 284.48 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 284.48 67.31 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 284.48 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 284.48 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid c49f1885-1760-4d1d-be7c-2b413f598739)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0125") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 130.81 146.05 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid b9600a5d-8cd0-4d83-b6bf-652da225c008) + (property "Reference" "C88" (at 130.81 152.4 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "330pF 100V" (at 130.81 149.86 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 134.62 147.0152 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 130.81 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061A331JAT4A" (at 130.81 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 130.81 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid b82606e3-c108-44c1-be5a-b0922a5af0eb)) + (pin "1" (uuid 4762f821-d94a-4d0d-8923-c56143cd236d)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C88") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 119.38 78.74 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid b9e69905-a01b-44c3-b33d-6f2256f1ae2c) + (property "Reference" "C112" (at 113.03 78.74 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 115.57 77.47 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 118.4148 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 119.38 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 119.38 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 119.38 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 5c0046da-31ac-455f-b754-7faaf20a3ab4)) + (pin "1" (uuid 95328eb4-b5b7-48a4-b279-c4c13b5b7d9e)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C112") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 232.41 69.85 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid ba3a2b02-eab4-4952-8dcc-19958d2df135) + (property "Reference" "#PWR0113" (at 232.41 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 229.87 71.12 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 232.41 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 232.41 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 8bc2f8e9-073d-4eb7-a2a0-f4414d54ceb0)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0113") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 350.52 72.39 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid ba456bce-c53a-499f-8677-0c6b13ea5a52) + (property "Reference" "#PWR0145" (at 350.52 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 350.52 67.31 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 350.52 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 350.52 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 27958e9f-962f-4281-a37f-efae7fe28400)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0145") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 31.75 146.05 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid bad7380e-9e8d-4c25-bc64-fa7d6fd69db9) + (property "Reference" "C84" (at 31.75 152.4 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "2200pF 100V" (at 31.75 149.86 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 35.56 147.0152 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 31.75 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "81-GRM319R72A222JA1D" (at 31.75 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 31.75 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 74738982-6687-4c42-a19a-26ee7f8ab3b7)) + (pin "1" (uuid 711832fe-1442-479d-8afb-655a91653c4b)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C84") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 116.84 133.35 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid baee5989-e61f-4c85-9aad-31da91deb457) + (property "Reference" "C67" (at 118.11 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "60pF 100V" (at 120.65 133.35 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 117.8052 129.54 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 116.84 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C620J1G" (at 116.84 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 116.84 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 5a570bb8-8fd6-41be-b594-1c2e6b92b70c)) + (pin "1" (uuid b1149a19-ee42-4138-9443-03928899be9c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C67") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 166.37 80.01 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid bbe1b1e6-eb8f-46e8-af3c-4cbba5eccb58) + (property "Reference" "K17" (at 176.53 86.36 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 175.26 88.9 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 177.8 81.28 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 166.37 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 166.37 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 166.37 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 64a8e316-98d7-4e29-ada6-6e4b36480135)) + (pin "12" (uuid 82a608c0-eb8f-483d-aae2-91d724374dab)) + (pin "14" (uuid 2a3e1d72-bed6-49e6-b62e-847df6ac061d)) + (pin "A2" (uuid d792e3a7-852a-432c-8fd0-f578ee3414c6)) + (pin "11" (uuid d104a250-9fa9-48e2-8cec-85be135605e3)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K17") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 295.91 125.73 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid bcab77aa-2238-4986-91df-17753c4bcb66) + (property "Reference" "C50" (at 295.91 132.08 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "180pF 100V" (at 295.91 129.54 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 299.72 126.6952 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 295.91 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C181J1G" (at 295.91 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 295.91 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 258034f6-e3e7-4175-b7bd-3c4144bfd95f)) + (pin "1" (uuid aaa4a2c9-d042-4243-bd0c-5314de486de1)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C50") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 317.5 72.39 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid bcf446c0-f470-43c2-8e58-e4a4342a9849) + (property "Reference" "#PWR0135" (at 317.5 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 317.5 67.31 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 317.5 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 317.5 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid bc4cbbba-e5c3-4e1e-81fd-a7a6bcb260e5)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0135") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 303.53 113.03 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid c18d8e88-7878-4428-bae0-1cf707ee64dd) + (property "Reference" "L11" (at 305.689 113.03 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.337uH" (at 306.07 115.57 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 303.53 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 303.53 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 303.53 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 303.53 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid f5dce61e-cbfe-4189-8de5-b8904f0a75e4)) + (pin "2" (uuid 9dc15646-b810-4183-b4d6-ae7c42c96898)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L11") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 323.85 146.05 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid c33fb917-100f-49fe-beeb-6554f9f32af8) + (property "Reference" "#PWR0141" (at 323.85 152.4 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 321.31 148.59 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 323.85 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 323.85 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 609dfb4c-39dc-4e74-8404-86c175333e97)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0141") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 201.93 220.98 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid c64d6eaf-d115-44a0-9c55-ab2733af097a) + (property "Reference" "#PWR0217" (at 201.93 227.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 204.47 222.25 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 201.93 220.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 201.93 220.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 699d9916-3d2b-49f8-8315-d8c5b7118329)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0217") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 135.89 191.77 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid c751e765-f68d-4f21-a144-507d2bba9466) + (property "Reference" "#PWR078" (at 135.89 198.12 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 133.35 193.04 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 135.89 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 135.89 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 7bbe694c-6fe6-4b7a-8a80-fb137b1a75fa)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR078") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 34.29 69.85 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid c857973e-ec5a-489a-a46f-8243f212794b) + (property "Reference" "#PWR062" (at 34.29 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 31.75 71.12 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 34.29 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 34.29 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 2375ec56-757b-463a-b57f-55f2f5fae1e8)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR062") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 396.24 184.15 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid c87ecbb1-570b-41c5-837f-cdab8724abff) + (property "Reference" "K32" (at 406.4 176.53 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 410.21 173.99 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 407.67 182.88 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 396.24 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 396.24 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 396.24 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 37ee5e9d-8ffe-45ea-a8fe-b9b9f41ee35c)) + (pin "12" (uuid d763aa7f-1f31-4684-bc26-f2442ffb560e)) + (pin "14" (uuid bc3937f3-32c7-495b-82e8-22f9dfbccdd3)) + (pin "A2" (uuid 3fea5985-a73f-45b1-8520-7afaab71e57e)) + (pin "11" (uuid 165d34d3-dcc5-4ad8-ba77-cda7cf7861b3)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K32") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 336.55 113.03 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid c8ef9f7e-f621-4416-9fea-8cf31bdf5702) + (property "Reference" "L12" (at 338.709 111.8179 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.335uH" (at 338.709 114.2421 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 336.55 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 336.55 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 336.55 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 336.55 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid aadad873-ac3a-46d9-b2d2-8e4058fc2503)) + (pin "2" (uuid 703db622-a4f3-4d1d-a450-59bd312323c0)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L12") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 218.44 182.88 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid c9923484-8f5a-4dcb-8ca2-bb903ba469ec) + (property "Reference" "C119" (at 212.09 182.88 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 214.63 181.61 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 217.4748 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 218.44 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 218.44 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 218.44 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 5cccfbc9-f8e3-4984-9dfc-2c0fdbc9a6dc)) + (pin "1" (uuid 3187e51b-64b0-4750-80d5-5730c23b4da7)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C119") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 350.52 82.55 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid cb0cad00-7cb1-419c-ad01-639c84644d8a) + (property "Reference" "#PWR0146" (at 350.52 88.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 347.98 83.82 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 350.52 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 350.52 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid eb0612b2-e17d-4e9d-863e-993cd97ce051)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0146") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 232.41 214.63 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid cb5f5ff1-0857-4046-880b-1f9f2189b762) + (property "Reference" "#PWR01" (at 232.41 218.44 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 236.22 213.36 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 232.41 214.63 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 232.41 214.63 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid ce3e132d-8ccd-4e6e-93cd-70a5313a0a6e)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR01") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 196.85 125.73 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid ccb6e392-a788-4439-8b33-d70a692492c4) + (property "Reference" "C48" (at 196.85 132.08 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "330pF 100V" (at 196.85 129.54 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 200.66 126.6952 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 196.85 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061A331JAT4A" (at 196.85 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 196.85 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 32eb5308-e81a-40b1-8f10-bc924da1e1b7)) + (pin "1" (uuid a6760f6d-9870-48cd-95a0-303ee99219ae)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C48") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 163.83 146.05 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid cf955743-b4b3-4d0f-83de-951511a4976b) + (property "Reference" "C78" (at 163.83 152.4 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "470pF 100V" (at 163.83 149.86 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 167.64 147.0152 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 163.83 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C471J1GAC" (at 163.83 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 163.83 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 6c7c76ce-54ef-41d8-9e6d-b0be7d04ca56)) + (pin "1" (uuid ca58476d-daf4-4148-916a-0a96a0e8e25d)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C78") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 86.36 186.69 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid d07e2023-aa85-4a8b-b847-56b4beea4cf1) + (property "Reference" "#PWR074" (at 86.36 193.04 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 83.82 187.96 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 86.36 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 86.36 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid bc768013-1a01-4ff9-83ad-c1e8e539f25d)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR074") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 369.57 113.03 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid d333a72b-72cd-4dff-bdad-bb11a33a9d3e) + (property "Reference" "L13" (at 371.729 113.03 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.188uH" (at 372.11 115.57 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 369.57 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 369.57 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 369.57 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 369.57 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid cb1dac32-4f70-4fde-9343-747bdcb74450)) + (pin "2" (uuid 2787b5fc-f23e-493a-af1f-383376b53853)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L13") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 361.95 146.05 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid d3561090-2d87-4242-bde8-f2be9c30ae0b) + (property "Reference" "C82" (at 361.95 152.4 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "91pF 100V" (at 361.95 149.86 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 365.76 147.0152 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 361.95 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C910J1G" (at 361.95 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 361.95 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 7ad5ed15-938d-46ce-86a3-25cfbc6e9299)) + (pin "1" (uuid d2cc6dab-acce-466e-8d15-b33f978c3f4f)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C82") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 251.46 182.88 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid d413103e-3e3d-4d90-a0fb-00338c87afcc) + (property "Reference" "C121" (at 245.11 182.88 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 247.65 181.61 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 250.4948 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 251.46 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 251.46 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 251.46 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 787487f9-42ae-4e90-ac8f-fe6781f70759)) + (pin "1" (uuid 0b7f8cad-7f65-4e68-95a0-2212d0114efa)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C121") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 31.75 161.29 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid d46cc31e-a469-46bb-a4a6-d3ac903d2991) + (property "Reference" "C91" (at 31.75 154.94 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "1500pF 100V" (at 31.75 157.48 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 35.56 160.3248 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 31.75 161.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C152J1GECAUT" (at 31.75 161.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 31.75 161.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid dbbec1cb-710b-419f-acd6-ef54cdca6918)) + (pin "1" (uuid 898afa73-53a2-4fd8-a001-a4770e8e3da0)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C91") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 336.55 153.67 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid d530d1ec-bab9-4264-9321-2fba626b9943) + (property "Reference" "L34" (at 338.709 152.4579 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.335uH" (at 338.709 154.8821 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 336.55 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 336.55 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 336.55 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 336.55 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 7d15cf69-40aa-44b4-abf4-d4314ec4330c)) + (pin "2" (uuid 1ccec293-260b-4209-85fd-dbe39158e768)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L34") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 20.32 186.69 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid d617fec1-7724-44b5-9020-0992b56fb3f3) + (property "Reference" "#PWR064" (at 20.32 193.04 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 17.78 187.96 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 20.32 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 20.32 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid b8796b71-81f3-4388-a0f7-133213cb51db)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR064") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 196.85 146.05 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid d7e1c335-4a47-43e3-9f9d-ec392e43f409) + (property "Reference" "C79" (at 196.85 152.4 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "330pF 100V" (at 196.85 149.86 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 200.66 147.0152 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 196.85 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061A331JAT4A" (at 196.85 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 196.85 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid f238b883-0ef0-404e-a070-2520f666b893)) + (pin "1" (uuid 6bd5e4b8-21f6-4a49-bd6c-a8060a8bac59)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C79") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 185.42 82.55 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid d7e5123f-32a6-48be-afe5-d30e09794383) + (property "Reference" "#PWR096" (at 185.42 88.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 182.88 83.82 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 185.42 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 185.42 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid f9ef1912-506f-460f-b347-3b91aa80162c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR096") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 396.24 69.85 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid d857e8d2-e564-414a-90d1-5707b9ad3df1) + (property "Reference" "#PWR0163" (at 396.24 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 393.7 71.12 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 396.24 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 396.24 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 05c02288-1774-4430-ae81-88790bc965e5)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0163") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 50.8 133.35 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid d8c2e58e-279b-413a-b86f-90fcf3a58751) + (property "Reference" "C60" (at 52.07 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "47pF 100V" (at 54.61 133.35 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 51.7652 129.54 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 50.8 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C470J1GAC" (at 50.8 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 50.8 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 82ebd11c-e1c2-4079-81d9-d1458a1fc176)) + (pin "1" (uuid aeec772f-fa7a-405e-bfea-5feaaa33b5da)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C60") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 262.89 125.73 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid d9524c5a-51ed-4fd1-806b-8f6887e8dcaa) + (property "Reference" "C49" (at 262.89 132.08 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "220pF 100V" (at 262.89 129.54 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 266.7 126.6952 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 262.89 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C221J1GAC" (at 262.89 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 262.89 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid c39630f9-0f9f-4cee-a9f5-775de683df97)) + (pin "1" (uuid 710b28c2-8360-4ba6-9092-8d8b4ad62c72)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C49") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 229.87 140.97 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid d9920930-2c55-4c85-ac1c-4a25011e6a44) + (property "Reference" "C74" (at 229.87 134.62 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "100pF 100V" (at 229.87 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 233.68 140.0048 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 229.87 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C101J1GAULR" (at 229.87 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 229.87 140.97 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 9b39a9f7-2466-4eaa-a7dd-0a99cbfdd368)) + (pin "1" (uuid 44336da2-3800-47d5-9ae7-d0967af6d432)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C74") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 163.83 105.41 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid daec01be-9a17-4362-9e5d-ac5a38702a42) + (property "Reference" "C33" (at 163.83 111.76 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "150pF 100V" (at 163.83 109.22 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 167.64 106.3752 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 163.83 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C151J1G" (at 163.83 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 163.83 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid fe63f520-24e0-4346-8f91-4ff84d9e52a6)) + (pin "1" (uuid 2c3bdc52-f02d-4e24-aa6f-fbaa5dae597f)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C33") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 72.39 113.03 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid db57f6dc-25f2-41ed-ac7a-9255a09169b4) + (property "Reference" "L4" (at 74.549 113.03 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "2.68uH" (at 74.93 115.57 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 72.39 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 72.39 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 72.39 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 72.39 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid f0f98e12-d934-4d82-92fc-ceb89858fa85)) + (pin "2" (uuid 8e15119a-9f1e-4e02-a93f-a4e0dd010d4c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L4") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 270.51 133.35 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid dbcd85f6-5a15-45c1-a276-7a1a681292c3) + (property "Reference" "L21" (at 271.78 140.97 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.406uH" (at 269.24 137.16 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 270.51 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 270.51 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 270.51 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 270.51 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid cb14506f-6346-42fc-ad59-f44322bbe1c6)) + (pin "2" (uuid 6c92627e-3dd1-409b-a621-5b9fef604c01)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L21") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 125.73 146.05 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid dbfc8589-1f3e-4e56-80e2-76fabcc59f3d) + (property "Reference" "#PWR059" (at 125.73 152.4 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 123.19 148.59 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 125.73 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 125.73 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid e9e8e617-58a6-4cae-ac9c-e39421ffa602)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR059") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 92.71 151.13 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid dc4fd0a8-81b8-4028-ad77-2aa8a1c9b560) + (property "Reference" "#PWR055" (at 92.71 157.48 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 90.17 153.67 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 92.71 151.13 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 92.71 151.13 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid a8294d8d-a075-4ca2-85ca-bc3797f684bc)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR055") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Connector:Conn_Coaxial") (at 163.83 58.42 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid dd2a8ea5-a155-4a65-8010-f9fddfe90885) + (property "Reference" "J17" (at 166.37 55.88 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "RF interconnect" (at 166.37 58.42 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" (at 163.83 58.42 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" " ~" (at 163.83 58.42 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "712-CONSMA001-G" (at 163.83 58.42 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 163.83 58.42 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 133df811-b1cc-48c3-8af1-985bd945f040)) + (pin "2" (uuid 600f1821-0af1-405a-b926-d1409ad1af1f)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J17") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 218.44 186.69 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid de0b57b3-c7b5-4983-96fc-de95e115fe98) + (property "Reference" "#PWR0108" (at 218.44 193.04 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 215.9 187.96 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 218.44 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 218.44 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid e5eb9095-8c78-4fab-8ca7-c2372bb95827)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0108") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 185.42 186.69 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid de1097df-b5d3-492b-9b30-e71820af07d3) + (property "Reference" "#PWR098" (at 185.42 193.04 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 182.88 187.96 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 185.42 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 185.42 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 425535c1-a738-4eca-bc8b-b3c204778e99)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR098") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 284.48 82.55 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid dee7cc32-35b1-47d7-bdad-45f4ce31268c) + (property "Reference" "#PWR0126" (at 284.48 88.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 281.94 83.82 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 284.48 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 284.48 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 7b121e32-6fcd-4cc3-8c37-4ee846b817ac)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0126") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 367.03 191.77 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid def4dd1f-29dd-4c30-a12a-bcef8f4e4380) + (property "Reference" "#PWR0154" (at 367.03 198.12 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 364.49 193.04 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 367.03 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 367.03 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid f83f1e38-632b-4376-9ea2-1da0137ee830)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0154") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 251.46 186.69 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid df452db3-bda5-4a4b-9395-8b6f91184ddc) + (property "Reference" "#PWR0118" (at 251.46 193.04 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 248.92 187.96 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 251.46 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 251.46 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 5816395b-c3d0-433a-8ab5-4467d0dfac25)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0118") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 218.44 82.55 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid dfc304a7-7b2d-40cb-a129-05bfea4ea935) + (property "Reference" "#PWR0106" (at 218.44 88.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 215.9 83.82 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 218.44 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 218.44 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 1cb9afc3-6e4e-418d-a7a1-956ba7b0645c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0106") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 97.79 151.13 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid dfcbc923-70c6-49c2-ba17-78054e7df017) + (property "Reference" "C89" (at 97.79 157.48 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "470pF 100V" (at 97.79 154.94 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 101.6 152.0952 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 97.79 151.13 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C471J1GAC" (at 97.79 151.13 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 97.79 151.13 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 97b0fdf7-9397-4425-bd75-fb79a818f527)) + (pin "1" (uuid 65893845-7ba7-4663-ae68-e9ba1fc3ab8b)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C89") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 234.95 191.77 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid dfdf7c60-6f0f-423a-89c2-0ba0959cf4cb) + (property "Reference" "#PWR0114" (at 234.95 198.12 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 232.41 193.04 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 234.95 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 234.95 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 8ca8d7bb-177b-48e9-8fc2-c33e60e04735)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0114") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 53.34 186.69 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid e3d2d83e-2290-4e2d-9df1-0b76bbb10c94) + (property "Reference" "#PWR068" (at 53.34 193.04 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 50.8 187.96 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 53.34 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 53.34 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 8d13b14e-aa2e-4b2e-8c4f-6759221c85e7)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR068") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 100.33 69.85 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid e461c453-ebc1-4b57-b1c0-f24bde3002ee) + (property "Reference" "#PWR081" (at 100.33 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 97.79 71.12 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 100.33 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 100.33 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 017c9162-e6b1-4768-904a-bb64902adf2b)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR081") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 152.4 78.74 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid e4eb8a82-6fac-45e4-85ef-f11f2b4c6d99) + (property "Reference" "C114" (at 146.05 78.74 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 148.59 77.47 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 151.4348 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 152.4 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 152.4 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 152.4 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 313f76c0-5c85-4e3b-b308-096f1deb04b3)) + (pin "1" (uuid b6e20480-e891-4714-b680-8e3a48e56690)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C114") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 265.43 184.15 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid e5fed47a-138d-4cb8-a0c4-fb2ca86f2b19) + (property "Reference" "K26" (at 275.59 176.53 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 279.4 173.99 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 276.86 182.88 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 265.43 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 265.43 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 265.43 184.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 666d1c20-8ea6-43a4-b56a-f01965560508)) + (pin "12" (uuid 752440e1-ce8f-4346-9722-33622655c1c4)) + (pin "14" (uuid 61ede4ca-ba05-49fa-aece-0e394b126d9d)) + (pin "A2" (uuid f4efdc68-042c-47f0-bb1a-3c39e77a1618)) + (pin "11" (uuid 5faa0d6c-f763-443e-82f9-d198fa21f0aa)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K26") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 97.79 146.05 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid e9322e90-af5c-4795-b8d6-0c5f031329d3) + (property "Reference" "C87" (at 101.6 147.32 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "330pF 100V" (at 97.79 149.86 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 101.6 147.0152 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 97.79 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061A331JAT4A" (at 97.79 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 97.79 146.05 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid d4f78f10-ef11-466c-ac87-2321a180dabf)) + (pin "1" (uuid f22b12b6-ba7f-475a-b8bd-f2973a057f8e)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C87") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 185.42 72.39 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid ea3fa168-3287-433a-97da-5a1d6ba5bfa9) + (property "Reference" "#PWR095" (at 185.42 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 185.42 67.31 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 185.42 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 185.42 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 52b8cd59-54ce-4e4b-a7de-c8b82ff6a6e7)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR095") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 119.38 72.39 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid ebbb1837-c39f-44b0-9553-22dbb0eb7f06) + (property "Reference" "#PWR082" (at 119.38 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 119.38 67.31 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 119.38 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 119.38 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 31c46759-eb4c-4d91-a03d-7bf0c1afd0ae)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR082") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 328.93 166.37 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid ec0de1d2-fca7-4727-9c00-4094463a4d94) + (property "Reference" "C99" (at 328.93 172.72 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "100pF 100V" (at 328.93 170.18 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 332.74 167.3352 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 328.93 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C101J1GAULR" (at 328.93 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 328.93 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid b11746f0-3481-4cda-92d4-50c2745c2f09)) + (pin "1" (uuid 0721d303-2a57-4552-a990-a833511dfdc5)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C99") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 105.41 113.03 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid ed2909a6-9999-4c90-bc89-6861845f8f7d) + (property "Reference" "L5" (at 107.569 113.03 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "1.76uH" (at 107.95 115.57 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 105.41 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 105.41 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 105.41 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 105.41 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid bd1bb675-a699-4a32-b483-e8dc3004c22d)) + (pin "2" (uuid 7381be80-da01-4132-a23a-9fedc050d9c7)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L5") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 72.39 153.67 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid ee407e69-1875-43c0-bf37-068e22cdedac) + (property "Reference" "L26" (at 74.549 153.67 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "2.68uH" (at 74.93 156.21 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 72.39 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 72.39 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 72.39 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 72.39 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 93205e09-c83f-4972-b72d-4e5ef041116b)) + (pin "2" (uuid 243589ef-32f7-4e8c-87f2-aafc7b4f3b31)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L26") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 218.44 72.39 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid eec08273-802a-48a7-9cf0-3f7cd1414dab) + (property "Reference" "#PWR0105" (at 218.44 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 218.44 67.31 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 218.44 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 218.44 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 523a722a-97ef-4eda-9766-efeb9bd8d795)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0105") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 229.87 125.73 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid eeee2428-5929-4813-ac0c-8891923cf93b) + (property "Reference" "C52" (at 229.87 132.08 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "100pF 100V" (at 229.87 129.54 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 233.68 126.6952 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 229.87 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C101J1GAULR" (at 229.87 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 229.87 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid c4344603-6437-4a22-99aa-c86b47161cb7)) + (pin "1" (uuid 0afba514-fedc-4f28-bc48-c6c3847c61cb)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C52") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 97.79 120.65 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid ef0b8c6f-dc2e-453f-b72f-db1cab7b5e8f) + (property "Reference" "C44" (at 100.33 116.84 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "330pF 100V" (at 97.79 118.11 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 101.6 119.6848 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 97.79 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061A331JAT4A" (at 97.79 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 97.79 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 7cd3f156-01a2-40c8-9243-d6ee724896e1)) + (pin "1" (uuid 56ddaf4c-1924-4cc4-9fbb-7c10f594a73c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C44") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 130.81 120.65 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid f004858d-079a-4d65-8579-1639b72b0048) + (property "Reference" "C43" (at 130.81 114.3 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "330pF 100V" (at 130.81 116.84 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 134.62 119.6848 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 130.81 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061A331JAT4A" (at 130.81 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 130.81 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 3e699ed8-3069-434c-ba87-b3cd508211e8)) + (pin "1" (uuid e253abc2-5a97-4c38-b370-7df7b1557b93)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C43") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 185.42 176.53 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid f0cec86f-add4-4474-b9f8-10b60b5b0f8d) + (property "Reference" "#PWR097" (at 185.42 180.34 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 185.42 171.45 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 185.42 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 185.42 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid b68c619b-c7dc-493f-978a-91cbe870dd42)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR097") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 284.48 78.74 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid f19b3d02-0f7e-4623-b49a-a093a6cf76ec) + (property "Reference" "C122" (at 278.13 78.74 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 280.67 77.47 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 283.5148 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 284.48 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 284.48 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 284.48 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 5fd47a4b-63a9-43d5-bbcd-bd4e1216a80a)) + (pin "1" (uuid a35777d7-0f22-430e-8b3c-9506674f1a7d)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C122") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 361.95 105.41 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid f1d36ff1-d98c-4226-9104-8753d546b48d) + (property "Reference" "C39" (at 361.95 111.76 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "60pF 100V" (at 361.95 109.22 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 365.76 106.3752 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 361.95 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C620J1G" (at 361.95 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 361.95 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 4891de93-c7d5-4a33-a06c-478f776b3ba5)) + (pin "1" (uuid 940416ac-b704-4541-bfcf-cd401eed4405)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C39") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 331.47 69.85 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid f2095608-3cf1-4d80-802b-920be9e73f9d) + (property "Reference" "#PWR0143" (at 331.47 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 328.93 71.12 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 331.47 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 331.47 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid dd6d41e0-0051-4f51-96ae-c430546df404)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0143") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 350.52 182.88 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid f50cbd34-df22-4c41-9b39-4029ccde200b) + (property "Reference" "C127" (at 344.17 182.88 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 346.71 181.61 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 349.5548 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 350.52 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 350.52 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 350.52 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 43ac1a48-de16-4fab-8e2c-deb8e68f6805)) + (pin "1" (uuid eb641184-60a7-40ae-9443-12f1b84eda1c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C127") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 119.38 82.55 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid f5c0b058-832e-420e-9c7b-1d19510140e4) + (property "Reference" "#PWR083" (at 119.38 88.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 116.84 83.82 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 119.38 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 119.38 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid e50bd218-6540-4e20-9735-44bb888d8b1e)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR083") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 97.79 166.37 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid f8433dc7-d953-428e-9b9e-743c0dafa9e8) + (property "Reference" "C93" (at 97.79 172.72 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "560pF 100V" (at 97.79 170.18 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 101.6 167.3352 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 97.79 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12061C561JAT2A" (at 97.79 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 97.79 166.37 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid cde4218e-601c-4233-b12a-f0f3b9eb435f)) + (pin "1" (uuid b24ef654-5e74-4db1-af62-79da1378fe93)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C93") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 209.55 133.35 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid f8adcaf5-8598-4638-b57d-1d085c7654e8) + (property "Reference" "C64" (at 210.82 137.16 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "47pF 100V" (at 213.36 133.35 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 210.5152 129.54 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 209.55 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C470J1GAC" (at 209.55 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 209.55 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid a16e3a49-f4af-448a-9858-a21e4b4e9f06)) + (pin "1" (uuid 492f405b-5df8-49e6-b7f9-80080ecb36fa)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C64") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 130.81 161.29 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid f9703a93-e278-43a0-b559-de4033d12654) + (property "Reference" "C94" (at 130.81 154.94 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "100pF 100V" (at 130.81 157.48 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 134.62 160.3248 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 130.81 161.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C101J1GAULR" (at 130.81 161.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 130.81 161.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 433a726d-6338-4468-8caf-4d082e952559)) + (pin "1" (uuid 144b4274-fb01-4abc-a64a-d1f8d69f8c20)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C94") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Relay:Relay_SPDT") (at 199.39 80.01 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid f9d149fd-505d-4166-9f74-dea47a2d4761) + (property "Reference" "K15" (at 209.55 86.36 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "HF41F/12-ZS" (at 208.28 88.9 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "T41_Library:Relay_SPDT_HF41F12-ZS" (at 210.82 81.28 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "Datasheet" "~" (at 199.39 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 199.39 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 199.39 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A1" (uuid 507e8ec1-7664-49f4-884b-4599d5f3c854)) + (pin "12" (uuid 5a664b32-8921-425d-bab5-00e74e4c8199)) + (pin "14" (uuid 1c25481a-c1fc-493a-b445-fe63786fbc59)) + (pin "A2" (uuid e9537c82-433d-4221-afe2-3c07fb72ac1c)) + (pin "11" (uuid 9bbb7bee-3d84-4076-aa33-1ef1137e3d7f)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "K15") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 138.43 153.67 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid fa11d3c5-e294-49ff-a155-8834629f8072) + (property "Reference" "L28" (at 140.589 153.67 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "1.34uH" (at 140.97 156.21 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 138.43 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 138.43 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 138.43 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 138.43 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 04095c33-ff3f-4ca9-9b2a-9eb4b64d8454)) + (pin "2" (uuid 5e19f3e8-75c9-4cca-9f15-46bf4e40fa7c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L28") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:L_Ferrite") (at 171.45 153.67 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid faa0df3f-2478-4417-8d36-f828bd146d93) + (property "Reference" "L29" (at 173.609 153.67 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "0.928uH" (at 173.99 156.21 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "T41_Library:T68-6-toroid-vertical" (at 171.45 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 171.45 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "" (at 171.45 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 171.45 153.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid e994f85d-7db3-4251-9ff0-c83d2e0a333f)) + (pin "2" (uuid c7f85740-7ff5-420a-8e9e-7652289bcee6)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L29") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 328.93 125.73 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid fb53f3ea-14be-4283-881a-e42c72a75079) + (property "Reference" "C53" (at 328.93 132.08 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "82pF 100V" (at 328.93 129.54 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 332.74 126.6952 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 328.93 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C820J1G" (at 328.93 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 328.93 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 99707078-a48f-45b8-bb24-34200288ba5a)) + (pin "1" (uuid 7c57f38b-dedd-474a-b3e2-066c2dfca2a3)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C53") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 64.77 125.73 90) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid fc649fbe-5ac5-4b67-86eb-8b43451061d2) + (property "Reference" "C56" (at 64.77 132.08 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "100pF 100V" (at 64.77 129.54 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 68.58 126.6952 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 64.77 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "80-C1206C101J1GAULR" (at 64.77 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 64.77 125.73 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid 178678a4-bc7b-4682-bc58-7feb5481aa28)) + (pin "1" (uuid 1245e675-f8d7-4ed0-a5ec-36dfd1d47262)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C56") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:C") (at 119.38 182.88 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid fd3abcd6-0a8b-4168-8bee-c7e753a51997) + (property "Reference" "C113" (at 113.03 182.88 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "0.1uF 50V" (at 115.57 181.61 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (at 118.4148 186.69 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 119.38 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Mouser Part Number" "581-12065F104K4" (at 119.38 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "taydaelectronics.com" "" (at 119.38 182.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "2" (uuid d50d5685-6188-40ff-8549-d42225c36c67)) + (pin "1" (uuid 066d54ec-2cdd-43da-9381-710f34a87922)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C113") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 86.36 72.39 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid fd4b5d50-6f04-4bdc-9fa0-4d4e0211dabd) + (property "Reference" "#PWR079" (at 86.36 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 86.36 67.31 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 86.36 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 86.36 72.39 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 51e92986-40a4-49ce-9936-68c68c98e7a3)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR079") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 125.73 105.41 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid fd6bee65-0d23-49d2-ade7-898a9d25aaa3) + (property "Reference" "#PWR057" (at 125.73 111.76 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 123.19 107.95 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 125.73 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 125.73 105.41 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 50b62500-4325-4f05-8af2-1e1c03d5ee13)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR057") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 53.34 82.55 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid fe57a9db-a77e-4c0d-829e-9942f6d74403) + (property "Reference" "#PWR071" (at 53.34 88.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 50.8 83.82 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 53.34 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 53.34 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 9976de4f-49a5-4b25-a582-ec5b7a2d608c)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR071") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+12V") (at 317.5 176.53 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid fecb8d7f-5c0d-4075-b7b1-12274302a633) + (property "Reference" "#PWR0137" (at 317.5 180.34 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+12V" (at 317.5 171.45 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 317.5 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 317.5 176.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid af21888a-809a-4a59-897d-f82144004d38)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0137") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 201.93 191.77 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid ff9cc7bc-2625-4c8e-9478-7c12066a88ce) + (property "Reference" "#PWR0104" (at 201.93 198.12 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 199.39 193.04 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 201.93 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 201.93 191.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid db2dae64-3d18-4efc-9bbf-4edc9eab4dd3)) + (instances + (project "K9HZ_100W_11band_LPF-Filter" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR0104") (unit 1) + ) + ) + ) + ) + + (sheet_instances + (path "/" (page "1")) + ) +) diff --git a/wiki/raw/T41-RF-board-Attenuator-daughterboard.kicad_sch b/wiki/raw/T41-RF-board-Attenuator-daughterboard.kicad_sch new file mode 100644 index 0000000..0dc3e6b --- /dev/null +++ b/wiki/raw/T41-RF-board-Attenuator-daughterboard.kicad_sch @@ -0,0 +1,3776 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "4fb44e34-3372-47df-9694-9168f4fad0b1") + (paper "A4") + (title_block + (title "T41 RF Board Attenuator Daughterboard") + (date "2025-12-27") + (rev "1") + (company "Oliver King, KI3P") + ) + (lib_symbols + (symbol "Connector:Conn_01x06_Socket" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x06_Socket" + (at 0 -10.16 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" "Generic connector, single row, 01x06, script generated" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_locked" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_1x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_01x06_Socket_1_1" + (polyline + (pts + (xy -1.27 5.08) (xy -0.508 5.08) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 2.54) (xy -0.508 2.54) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 0) (xy -0.508 0) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 -2.54) (xy -0.508 -2.54) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 -5.08) (xy -0.508 -5.08) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 -7.62) (xy -0.508 -7.62) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 4.572) + (mid -0.5058 5.08) + (end 0 5.588) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 2.032) + (mid -0.5058 2.54) + (end 0 3.048) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -0.508) + (mid -0.5058 0) + (end 0 0.508) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -3.048) + (mid -0.5058 -2.54) + (end 0 -2.032) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -5.588) + (mid -0.5058 -5.08) + (end 0 -4.572) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -8.128) + (mid -0.5058 -7.62) + (end 0 -7.112) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 5.08 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -5.08 0) + (length 3.81) + (name "Pin_5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -7.62 0) + (length 3.81) + (name "Pin_6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (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:L" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "L" + (at -1.27 0 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "L" + (at 1.905 0 90) + (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" "Inductor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "inductor choke coil reactor magnetic" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Choke_* *Coil* Inductor_* L_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "L_0_1" + (arc + (start 0 2.54) + (mid 0.6323 1.905) + (end 0 1.27) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 1.27) + (mid 0.6323 0.635) + (end 0 0) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 0) + (mid 0.6323 -0.635) + (end 0 -1.27) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -1.27) + (mid 0.6323 -1.905) + (end 0 -2.54) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "L_1_1" + (pin passive line + (at 0 3.81 270) + (length 1.27) + (name "1" + (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 "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 "T41_Library:PE4312" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 0 -0.635 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "PE4312" + (at 0 1.905 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_DFN_QFN:QFN-20-1EP_4x4mm_P0.5mm_EP2.7x2.7mm" + (at 2.54 -21.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.psemi.com/pdf/datasheets/pe4312ds.pdf" + (at 1.27 -19.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "1MHz-4GHz, 6-bit 31.5dB step attenuator, QFN 4x4 20 pin" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "RF attenuator" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOT*23*5*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "PE4312_0_1" + (rectangle + (start -10.16 10.16) + (end 10.16 -10.16) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "PE4312_1_1" + (pin input line + (at -12.7 5.08 0) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 2.54 0) + (length 2.54) + (name "VSS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 0 0) + (length 2.54) + (name "P/S" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 -2.54 0) + (length 2.54) + (name "RF2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 -5.08 0) + (length 2.54) + (name "C8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -5.08 12.7 270) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -5.08 -12.7 90) + (length 2.54) + (name "C4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -2.54 12.7 270) + (length 2.54) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -2.54 -12.7 90) + (length 2.54) + (name "C2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 0 12.7 270) + (length 2.54) + (name "PUP2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 0 -3.81 180) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "21" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 0 -12.7 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 12.7 270) + (length 2.54) + (name "PUP1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 -12.7 90) + (length 2.54) + (name "C1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "19" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 5.08 12.7 270) + (length 2.54) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 5.08 -12.7 90) + (length 2.54) + (name "C0.5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "20" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 12.7 5.08 180) + (length 2.54) + (name "LE" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 12.7 2.54 180) + (length 2.54) + (name "Clock" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 12.7 0 180) + (length 2.54) + (name "Data" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 12.7 -2.54 180) + (length 2.54) + (name "RF1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 12.7 -5.08 180) + (length 2.54) + (name "C16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:+3V3" + (power) + (pin_names + (offset 0) + ) + (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" "+3V3" + (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 \"+3V3\"" + (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 "+3V3_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 "+3V3_1_1" + (pin power_in line + (at 0 0 90) + (length 0) + (hide yes) + (name "+3V3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:GND" + (power) + (pin_names + (offset 0) + ) + (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) + (hide yes) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + ) + (junction + (at 138.43 68.58) + (diameter 0) + (color 0 0 0 0) + (uuid "423902a0-3106-42c4-bc1c-d580ade806b7") + ) + (junction + (at 133.35 82.55) + (diameter 0) + (color 0 0 0 0) + (uuid "5050f1d4-9443-4f0b-8b8d-4c77cf221d0a") + ) + (junction + (at 149.86 87.63) + (diameter 0) + (color 0 0 0 0) + (uuid "55ce52bb-67d0-4a30-8910-5bd603dfb60a") + ) + (junction + (at 130.81 68.58) + (diameter 0) + (color 0 0 0 0) + (uuid "5fdaeb50-88b8-4211-b56c-78b09e0cd521") + ) + (junction + (at 149.86 91.44) + (diameter 0) + (color 0 0 0 0) + (uuid "90912bee-28cc-4602-b300-65d23b5601b4") + ) + (junction + (at 149.86 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "cc6c5e83-1731-4bd6-a7c6-f9e05716b14d") + ) + (junction + (at 147.32 68.58) + (diameter 0) + (color 0 0 0 0) + (uuid "fef4c8a0-2c5b-4428-8326-4eee0089281f") + ) + (no_connect + (at 123.19 93.98) + (uuid "1729a218-25ab-47b7-86cf-29d20036519b") + ) + (wire + (pts + (xy 99.06 95.25) (xy 99.06 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "07ef6723-f596-46c4-92eb-67272c1edcf5") + ) + (wire + (pts + (xy 148.59 93.98) (xy 149.86 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0cbbef5b-6965-4d57-b9ab-54cb47594054") + ) + (wire + (pts + (xy 148.59 101.6) (xy 148.59 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "106512d7-c37f-4be5-a804-c9957347ea3a") + ) + (wire + (pts + (xy 157.48 69.85) (xy 157.48 68.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "165da60e-75c3-4e89-935f-51cb431c5a8e") + ) + (wire + (pts + (xy 143.51 113.03) (xy 143.51 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "16973b15-b7e0-4633-ba24-d089dae7ceec") + ) + (wire + (pts + (xy 138.43 109.22) (xy 138.43 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1d0a92fc-b50a-4d60-bde4-1dae13ea96f9") + ) + (wire + (pts + (xy 140.97 113.03) (xy 140.97 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "25e1a26f-6109-4dc9-b364-67c350d1cdce") + ) + (wire + (pts + (xy 135.89 74.93) (xy 133.35 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2ffe58da-c46e-43bf-bbb1-fb746cd733d2") + ) + (wire + (pts + (xy 149.86 91.44) (xy 148.59 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3c487a44-2d52-4c91-9a23-27dee6d2a571") + ) + (wire + (pts + (xy 147.32 68.58) (xy 147.32 69.85) + ) + (stroke + (width 0) + (type default) + ) + (uuid "402800f3-0b76-4019-b643-ca587e553755") + ) + (wire + (pts + (xy 133.35 82.55) (xy 135.89 82.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "464ca380-bf44-475e-882f-e96bdfc593a9") + ) + (wire + (pts + (xy 130.81 68.58) (xy 130.81 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4703cbe8-1f6c-4725-8d6e-58c14f1dad48") + ) + (wire + (pts + (xy 135.89 100.33) (xy 135.89 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4c1f2fdf-225a-4237-93a8-49a05aaf1d86") + ) + (wire + (pts + (xy 138.43 57.15) (xy 138.43 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4d81b670-c395-4a16-8893-354b202f0ddc") + ) + (wire + (pts + (xy 88.9 99.06) (xy 123.19 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "50884d35-0dba-4269-a5ae-46356dad71a3") + ) + (wire + (pts + (xy 111.76 96.52) (xy 111.76 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5576666b-cb11-47f9-be75-aa2917df7762") + ) + (wire + (pts + (xy 147.32 68.58) (xy 138.43 68.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5a3caf8a-3061-4d75-aeec-13d692baaf88") + ) + (wire + (pts + (xy 149.86 87.63) (xy 149.86 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5c4078c9-1d10-4bc9-aee6-a247766e9ec5") + ) + (wire + (pts + (xy 133.35 83.82) (xy 133.35 82.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5ddf5473-f73c-448f-9b52-ea89ab82909c") + ) + (wire + (pts + (xy 99.06 96.52) (xy 88.9 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "66d9e7bf-a034-4ebb-b973-ebcc386c5389") + ) + (wire + (pts + (xy 149.86 87.63) (xy 154.94 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "675531cd-7ee8-4961-9884-fe20d0b04137") + ) + (wire + (pts + (xy 130.81 113.03) (xy 130.81 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6a7f0d02-dfc8-48c4-b673-9d86337ed06f") + ) + (wire + (pts + (xy 96.52 90.17) (xy 96.52 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6caf8b00-241b-4230-a316-e60bea90da68") + ) + (wire + (pts + (xy 161.29 93.98) (xy 168.91 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6d8b24ff-913e-41bb-8356-198adf48c1ea") + ) + (wire + (pts + (xy 96.52 91.44) (xy 88.9 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6e141436-234d-4367-af4b-f3ed39512457") + ) + (wire + (pts + (xy 149.86 83.82) (xy 149.86 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7067955e-ae56-4ff1-be92-ef404fb46f36") + ) + (wire + (pts + (xy 140.97 83.82) (xy 149.86 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "72b874b4-0111-4f05-ba25-d0fd15a23607") + ) + (wire + (pts + (xy 133.35 74.93) (xy 133.35 82.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "75897e4d-860a-42d4-b2a3-4881f32986bc") + ) + (wire + (pts + (xy 130.81 68.58) (xy 138.43 68.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "75d27aca-f011-408d-af70-6e6be0a114a9") + ) + (wire + (pts + (xy 143.51 113.03) (xy 140.97 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7add3fc2-577a-437a-bc2d-266787041b5c") + ) + (wire + (pts + (xy 88.9 101.6) (xy 93.98 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "81a28ee0-6caf-46e0-9e0a-685bf238d548") + ) + (wire + (pts + (xy 149.86 93.98) (xy 149.86 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "82c53e46-6fbc-411c-ad58-8051f770b612") + ) + (wire + (pts + (xy 138.43 68.58) (xy 138.43 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "93611877-f943-49d5-af43-400fc2f641d5") + ) + (wire + (pts + (xy 99.06 95.25) (xy 101.6 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "975bb97d-21ef-4026-ba09-e736a6acd779") + ) + (wire + (pts + (xy 135.89 82.55) (xy 135.89 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "98931f6a-7053-4232-a454-bd0c52453265") + ) + (wire + (pts + (xy 96.52 90.17) (xy 100.33 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9aa6b4c8-d34b-449e-9544-c1b9bd85ce9b") + ) + (wire + (pts + (xy 149.86 93.98) (xy 149.86 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9ac25f8d-57c7-411c-bf46-ab15817462bf") + ) + (wire + (pts + (xy 148.59 99.06) (xy 168.91 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a5d9f05f-1724-4718-abbf-4f48c9cff7e7") + ) + (wire + (pts + (xy 133.35 109.22) (xy 133.35 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a9f2af6e-5930-4abe-bee5-c0fca7655ecb") + ) + (wire + (pts + (xy 127 113.03) (xy 127 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aa303fb0-9fba-4298-b3d7-83499f7c1fad") + ) + (wire + (pts + (xy 88.9 88.9) (xy 93.98 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aab0a7e4-95d4-4cb3-b2a8-9fc281192007") + ) + (wire + (pts + (xy 127 113.03) (xy 130.81 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aaf4fc55-d381-458a-9e51-7e73875be045") + ) + (wire + (pts + (xy 120.65 101.6) (xy 123.19 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b268442e-57a5-459e-b4f6-82783d7020dd") + ) + (wire + (pts + (xy 163.83 101.6) (xy 168.91 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b8f9eaf9-0db9-4219-99bc-e10ae2db1fbd") + ) + (wire + (pts + (xy 138.43 64.77) (xy 138.43 68.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bf48d558-b1bc-4e84-a0a5-9b688623c95b") + ) + (wire + (pts + (xy 157.48 68.58) (xy 147.32 68.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bf7f89e5-e91c-4aea-8334-6f65db1d3233") + ) + (wire + (pts + (xy 123.19 68.58) (xy 130.81 68.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c4f6a045-2005-4c63-b6b4-665a4d27bc44") + ) + (wire + (pts + (xy 120.65 101.6) (xy 120.65 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d5c0308f-576e-413f-9b6e-37fedd68e732") + ) + (wire + (pts + (xy 135.89 95.25) (xy 133.35 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dc90863c-630b-4309-8975-d450c0f834ea") + ) + (wire + (pts + (xy 123.19 91.44) (xy 123.19 68.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dd1b6fdc-bdef-4228-ae32-46b5e357f36e") + ) + (wire + (pts + (xy 161.29 91.44) (xy 168.91 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e8dd8bc3-7cc2-403c-b30b-7bbd7149bb28") + ) + (wire + (pts + (xy 111.76 77.47) (xy 111.76 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ea9927ac-7e32-41f9-9c61-1e7219e480ca") + ) + (wire + (pts + (xy 148.59 96.52) (xy 149.86 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eb0fb10d-6ddc-425d-87a9-721c1ea0d51a") + ) + (wire + (pts + (xy 161.29 96.52) (xy 168.91 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ebc6ae42-c0c1-480c-85d0-e182c9f5f632") + ) + (wire + (pts + (xy 88.9 93.98) (xy 104.14 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ec971626-b2a5-4e09-9ca5-96690288b1f5") + ) + (wire + (pts + (xy 161.29 88.9) (xy 168.91 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f13d013d-2c46-4473-85a9-834110f65cde") + ) + (wire + (pts + (xy 123.19 96.52) (xy 111.76 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f9b35432-4e09-4b35-97bb-ecb27084df45") + ) + (wire + (pts + (xy 120.65 113.03) (xy 120.65 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fb92b1f4-e4df-4326-82d4-09ef748ddd50") + ) + (wire + (pts + (xy 111.76 72.39) (xy 114.3 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fc4e0148-368d-4e81-a9fa-6189785f2219") + ) + (label "TC8" + (at 161.29 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "26671497-6dec-4064-b9fc-c8c83ab95ca4") + ) + (label "TC1" + (at 161.29 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "28d47d1f-ed19-4a24-89eb-45ee5c1e8ca1") + ) + (label "TC2" + (at 161.29 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "3285096d-7fc9-43e7-a2c9-4b75a906e9cb") + ) + (label "TC4" + (at 143.51 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "4b4f6610-d3cf-45f4-8f82-d98fb60c6e5a") + ) + (label "TC1" + (at 133.35 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "515b9b7a-387d-4d68-a772-eeef2bb0f838") + ) + (label "TC0.5" + (at 127 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "66ffbc6e-db9f-4215-aa29-a97a098fb3fd") + ) + (label "TC16" + (at 93.98 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "688ea866-638c-400a-bfba-4fe69be0c007") + ) + (label "TC2" + (at 138.43 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "81aaeb70-ae50-461f-98d7-a5c7a8c33d2f") + ) + (label "TC4" + (at 161.29 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "a8bfc67f-6194-4934-9a41-e896d8c051f6") + ) + (label "TC0.5" + (at 93.98 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "d592ae0f-8ac0-4923-a099-f599f5afa5db") + ) + (label "TC8" + (at 148.59 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "e74443ce-a31a-4d21-b41d-6744642b7981") + ) + (label "TC16" + (at 120.65 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "f9645601-5307-4329-bf76-4f5586b84543") + ) + (symbol + (lib_id "T41_Library:PE4312") + (at 135.89 96.52 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "087ff44f-f155-4b7e-8f11-e8ee9664d87f") + (property "Reference" "U1" + (at 128.27 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "PE4312" + (at 130.81 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:PE4312-QFN-20" + (at 133.35 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.psemi.com/pdf/datasheets/pe4312ds.pdf" + (at 134.62 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 135.89 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C500480" + (at 135.89 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "PE4312C-Z" + (at 135.89 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "11" + (uuid "c788c7d6-432b-4f91-ae83-2bc6d1c7a6bc") + ) + (pin "10" + (uuid "ccc59408-3dc4-4130-98f4-3e8567022487") + ) + (pin "15" + (uuid "43e84e9c-3dfe-489f-9499-5b6c4512d144") + ) + (pin "9" + (uuid "2e50be23-1f43-4745-9af5-7da6d86ed6e0") + ) + (pin "4" + (uuid "7a380943-a5ac-4e5f-ac64-1d6293473c51") + ) + (pin "20" + (uuid "18bd471e-fb17-4ad1-b440-fa014b4eb974") + ) + (pin "7" + (uuid "f89edfba-8d4b-475a-badb-655fa5beedce") + ) + (pin "21" + (uuid "ea1105d7-3d08-41ca-9e7d-2b6565a336fa") + ) + (pin "14" + (uuid "dbfacdd4-9ad7-423f-8bb2-4e3476413fc5") + ) + (pin "6" + (uuid "046c1ce8-0853-4594-915a-09f2e6818cbc") + ) + (pin "16" + (uuid "2446cf9d-0f32-4e91-9b4b-4801a9962772") + ) + (pin "8" + (uuid "0c911d69-99e0-4de0-82e5-61235bdd2820") + ) + (pin "2" + (uuid "28275ac0-0a23-4367-ae30-4364408562a7") + ) + (pin "19" + (uuid "894e71e9-3036-4f17-8b26-096a2bd3623f") + ) + (pin "13" + (uuid "0bb3e25e-2939-4e86-8568-3a6053517e84") + ) + (pin "17" + (uuid "4814ed5b-cb52-44c8-bfaa-3d17e0bbb352") + ) + (pin "3" + (uuid "023a793c-fc83-4f22-8dc9-ac63cd980f04") + ) + (pin "5" + (uuid "fd2a1f95-c330-4f5a-a75f-6161b9abe6ca") + ) + (pin "12" + (uuid "74f102d0-9845-464b-8df0-1b4cf6e7cd9a") + ) + (pin "18" + (uuid "a4e49b54-9c08-4613-8bf9-1f56cac2fbd7") + ) + (pin "1" + (uuid "868446fb-5431-4bba-9ee6-fd40e5667668") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "U1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 135.89 109.22 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "17234761-b601-4977-a21d-5fc699a782aa") + (property "Reference" "#PWR03" + (at 135.89 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 135.89 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 135.89 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 135.89 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 135.89 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "08a6218d-57bd-4be0-9025-01ddbbf7045a") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "#PWR03") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 114.3 72.39 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "22b2053a-cb7f-4f66-8a63-1be6668e88f7") + (property "Reference" "#PWR01" + (at 114.3 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 114.3 76.5231 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 114.3 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 114.3 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 114.3 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f6f88740-cbde-46fc-a12c-420dd1857333") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "#PWR01") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 147.32 73.66 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "242d148f-63f3-41df-8766-ef5f2c871a2b") + (property "Reference" "C1" + (at 153.6233 73.66 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 151.1991 73.66 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_0603_1608Metric" + (at 148.2852 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 147.32 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 147.32 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C14663" + (at 147.32 73.66 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CC0603KRX7R9BB104" + (at 147.32 73.66 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6dad19f6-e8b6-45da-b425-076f03ae8723") + ) + (pin "1" + (uuid "82d50d11-0304-49d4-a0d4-0a952a13652c") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "C1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 135.89 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "30a2a334-eff2-4d86-81f6-ba672da1f48f") + (property "Reference" "#PWR07" + (at 135.89 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 135.89 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 135.89 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 135.89 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 135.89 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7e7596e1-abde-4b75-9f89-3b7284bd8bf4") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "#PWR07") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 104.14 93.98 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "47ec0376-7bd0-42c8-bdaa-0a0357b98eba") + (property "Reference" "#PWR010" + (at 104.14 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 107.95 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 104.14 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 104.14 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 104.14 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "91875422-ac71-451a-8663-5caf3faabe69") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "#PWR010") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 138.43 60.96 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "49220bed-ed7d-450a-bbef-e8fd2967aadd") + (property "Reference" "L1" + (at 139.0649 59.7478 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "FB" + (at 139.0649 62.1721 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_0603_1608Metric" + (at 138.43 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 138.43 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 138.43 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1002" + (at 138.43 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "BMC-Q1JY0500H" + (at 138.43 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "bd4932bf-e213-4bce-8730-d8294a580713") + ) + (pin "2" + (uuid "fcd4aee2-ef2b-4406-a937-30b88b66be7d") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "L1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 101.6 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4de756b4-5276-4c95-a45a-5601b0a36e08") + (property "Reference" "#PWR09" + (at 101.6 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 106.172 97.028 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 101.6 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 101.6 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 101.6 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6a243996-578e-4187-b4e5-e20708b41392") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "#PWR09") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 120.65 109.22 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "586b0634-8e4f-4ac3-81d3-56c3e3beb308") + (property "Reference" "R2" + (at 122.428 108.0079 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10k" + (at 122.428 110.4321 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_0603_1608Metric" + (at 118.872 109.22 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 120.65 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 120.65 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C25804" + (at 120.65 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CMP0603-FX-1002ELF" + (at 120.65 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "47fa3b2f-19cb-4f7d-88fa-df3f693ebe45") + ) + (pin "1" + (uuid "42bc17b9-f88e-4486-9475-53298a981cd7") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "R2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 100.33 90.17 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5c561e30-72a5-4ff3-b49c-1d4b4169a0b5") + (property "Reference" "#PWR08" + (at 100.33 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 97.536 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 100.33 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 100.33 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 100.33 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4f8459cc-f86e-43f3-a71f-14cbc4ea4f20") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "#PWR08") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 111.76 81.28 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5e6e8aa6-318d-4117-9a38-f8ba7b268cdf") + (property "Reference" "R1" + (at 113.538 80.0679 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10k" + (at 113.538 82.4921 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_0603_1608Metric" + (at 109.982 81.28 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 111.76 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 111.76 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C25804" + (at 111.76 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CMP0603-FX-1002ELF" + (at 111.76 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "daee1d60-a3be-4212-865b-50b1885e026a") + ) + (pin "1" + (uuid "015088a0-fb2b-44ff-8102-e7dbc3d1651d") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "R1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 147.32 77.47 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7a31de6f-df16-4584-8c02-e887d1e39de0") + (property "Reference" "#PWR02" + (at 147.32 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 144.78 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 147.32 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 147.32 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 147.32 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "06280043-c24e-405b-b3f6-f9f77a3dcc3c") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "#PWR02") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 157.48 73.66 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "96d6742b-6624-4601-89e2-7b7ec5989ee6") + (property "Reference" "C2" + (at 163.7833 73.66 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10uF 50V" + (at 161.3591 73.66 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_0603_1608Metric" + (at 158.4452 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 157.48 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 157.48 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C96446" + (at 157.48 73.66 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "GXT188R61C106KE13D" + (at 157.48 73.66 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ac04fed0-d60a-4f1b-aa84-4f4d6827fbf0") + ) + (pin "1" + (uuid "162fcb9b-d294-42ac-980b-57cc8f1829e5") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "C2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 154.94 87.63 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a7503e7c-8bf9-4b70-937c-7c7511e20cf2") + (property "Reference" "#PWR05" + (at 154.94 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 154.94 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 154.94 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 154.94 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 154.94 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1b9cd5ed-bade-4bbd-a836-7cfe8450e0c5") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "#PWR05") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_01x06_Socket") + (at 173.99 93.98 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ad2e8b12-3521-4d07-9089-0774a859c5f0") + (property "Reference" "J2" + (at 175.26 93.9799 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Conn 2" + (at 175.26 96.5199 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical" + (at 173.99 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 173.99 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Generic connector, single row, 01x06, script generated" + (at 173.99 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 173.99 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "" + (at 173.99 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "adba724e-ac1e-4d56-bbd5-1c7ea317df7a") + ) + (pin "2" + (uuid "0cffefab-34fb-4742-92ff-a06b55f24b1d") + ) + (pin "1" + (uuid "92114573-f66f-46c9-8241-be9cbc68c2fe") + ) + (pin "4" + (uuid "48ac5927-0685-4407-8c78-4e0ce1a1f040") + ) + (pin "5" + (uuid "2809a25f-63c5-42a9-961e-362dfe67a121") + ) + (pin "6" + (uuid "ad9ad35a-f435-47ce-9551-be6fd075646c") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "J2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 163.83 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b06d4f36-632b-4b09-aad8-10f6b3802ad3") + (property "Reference" "#PWR011" + (at 163.83 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 167.386 103.632 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 163.83 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 163.83 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 163.83 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "925df352-ce81-40cd-a2d9-79e2d73272cf") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "#PWR011") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 138.43 55.88 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d12141bc-2ceb-478c-a937-dcf3b7e81c63") + (property "Reference" "#PWR04" + (at 138.43 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 142.24 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 138.43 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 138.43 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 138.43 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "40930842-e1ca-4b85-a4ad-ff869834cee1") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "#PWR04") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 157.48 77.47 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e9e14b1b-02d7-410b-a777-0c56c9ffaf3a") + (property "Reference" "#PWR012" + (at 157.48 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 154.94 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 157.48 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 157.48 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 157.48 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8812cb7e-87cd-451f-8d1b-046a72f9d3b8") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "#PWR012") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 133.35 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f2313634-5b6a-4b35-8810-c87eddcaf5d7") + (property "Reference" "#PWR06" + (at 133.35 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 133.35 100.33 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 133.35 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 133.35 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 133.35 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "69baf962-1ba6-4bc4-9671-7397faa08dcb") + ) + (instances + (project "T41-RF-board-Attenuator-daughterboard" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "#PWR06") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_01x06_Socket") + (at 83.82 96.52 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "f76c630c-5393-49b8-8420-a24a84779b7f") + (property "Reference" "J1" + (at 84.455 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn 1" + (at 84.455 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical" + (at 83.82 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 83.82 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Generic connector, single row, 01x06, script generated" + (at 83.82 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 83.82 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "" + (at 83.82 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "e26bdebc-37fb-4c8a-8123-dae59fc26a62") + ) + (pin "2" + (uuid "a45496fa-629b-4f68-a2f6-6d4811402ace") + ) + (pin "1" + (uuid "d47a085f-f10e-4c29-8138-a9b0ed61aef2") + ) + (pin "4" + (uuid "19ba3a85-602c-4f70-acf9-7416a9fff736") + ) + (pin "5" + (uuid "53556cf0-7ea1-411e-8aa4-515dec0447c8") + ) + (pin "6" + (uuid "44614803-583c-42a9-b10c-317ba84082f9") + ) + (instances + (project "" + (path "/4fb44e34-3372-47df-9694-9168f4fad0b1" + (reference "J1") + (unit 1) + ) + ) + ) + ) + (sheet_instances + (path "/" + (page "1") + ) + ) + (embedded_fonts no) +) diff --git a/wiki/raw/T41-RF-board-V012.kicad_sch b/wiki/raw/T41-RF-board-V012.kicad_sch new file mode 100644 index 0000000..1aeca9f --- /dev/null +++ b/wiki/raw/T41-RF-board-V012.kicad_sch @@ -0,0 +1,40577 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "3c4b9d3b-a516-4fd7-b325-b74c836dee65") + (paper "A3") + (title_block + (title "T41 RF Board") + (date "2025-12-31") + (rev "V012.8") + (comment 1 " Additional work by Oliver KI3P") + (comment 2 "By Al Peter-AC8GY, Revised by WJ Schmidt-K9HZ") + (comment 3 "Change log: Added daughterboards") + ) + (lib_symbols + (symbol "74xGxx:74LVC1G04" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 0 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "74LVC1G04" + (at 5.08 -7.62 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" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Single NOT Gate, Low-Voltage CMOS" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Single Gate NOT LVC CMOS" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOT?23* Texas?R-PDSO-G5?DCK* Texas?R-PDSO-N5?DRL* Texas?X2SON*0.8x0.8mm*P0.48mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "74LVC1G04_0_1" + (polyline + (pts + (xy -7.62 6.35) (xy -7.62 -6.35) (xy 5.08 0) (xy -7.62 6.35) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "74LVC1G04_1_1" + (pin input line + (at -15.24 0 0) + (length 7.62) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -5.08 10.16 270) + (length 5.08) + (name "VCC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -5.08 -10.16 90) + (length 5.08) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output inverted + (at 12.7 0 180) + (length 7.62) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Amplifier_Operational:MC33078" + (pin_names + (offset 0.127) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MC33078" + (at 0 -5.08 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.com/pub/Collateral/MC33078-D.PDF" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Low Noise, Dual Operational Amplifiers, DIP-8/SOIC-8/SSOP-8" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_locked" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_keywords" "dual opamp" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOIC*3.9x4.9mm*P1.27mm* DIP*W7.62mm* TO*99* OnSemi*Micro8* TSSOP*3x3mm*P0.65mm* TSSOP*4.4x3mm*P0.65mm* MSOP*3x3mm*P0.65mm* SSOP*3.9x4.9mm*P0.635mm* LFCSP*2x2mm*P0.5mm* *SIP* SOIC*5.3x6.2mm*P1.27mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MC33078_1_1" + (polyline + (pts + (xy -5.08 5.08) (xy 5.08 0) (xy -5.08 -5.08) (xy -5.08 5.08) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (pin input line + (at -7.62 2.54 0) + (length 2.54) + (name "+" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -7.62 -2.54 0) + (length 2.54) + (name "-" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 7.62 0 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (symbol "MC33078_2_1" + (polyline + (pts + (xy -5.08 5.08) (xy 5.08 0) (xy -5.08 -5.08) (xy -5.08 5.08) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (pin input line + (at -7.62 2.54 0) + (length 2.54) + (name "+" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -7.62 -2.54 0) + (length 2.54) + (name "-" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 7.62 0 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (symbol "MC33078_3_1" + (pin power_in line + (at -2.54 7.62 270) + (length 3.81) + (name "V+" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -2.54 -7.62 90) + (length 3.81) + (name "V-" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Connector:Conn_Coaxial" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0.254 3.048 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_Coaxial" + (at 2.921 0 90) + (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" "coaxial connector (BNC, SMA, SMB, SMC, Cinch/RCA, LEMO, ...)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "BNC SMA SMB SMC LEMO coaxial connector CINCH RCA MCX MMCX U.FL UMRF" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "*BNC* *SMA* *SMB* *SMC* *Cinch* *LEMO* *UMRF* *MCX* *U.FL*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_Coaxial_0_1" + (polyline + (pts + (xy -2.54 0) (xy -0.508 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 1.778 0) + (mid 0.222 -1.8079) + (end -1.778 -0.508) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -1.778 0.508) + (mid 0.2221 1.8084) + (end 1.778 0) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 0 0) + (radius 0.508) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -2.54) (xy 0 -1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Conn_Coaxial_1_1" + (pin passive line + (at -5.08 0 0) + (length 2.54) + (name "In" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -5.08 90) + (length 2.54) + (name "Ext" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Connector:Screw_Terminal_01x02" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Screw_Terminal_01x02" + (at 0 -5.08 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" "Generic screw terminal, single row, 01x02, script generated (kicad-library-utils/schlib/autogen/connector/)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "screw terminal" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TerminalBlock*:*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Screw_Terminal_01x02_1_1" + (rectangle + (start -1.27 1.27) + (end 1.27 -3.81) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (polyline + (pts + (xy -0.5334 0.3302) (xy 0.3302 -0.508) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.5334 -2.2098) (xy 0.3302 -3.048) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.3556 0.508) (xy 0.508 -0.3302) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.3556 -2.032) (xy 0.508 -2.8702) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 0 0) + (radius 0.635) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 0 -2.54) + (radius 0.635) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Connector:TestPoint" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 0.762) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "TP" + (at 0 6.858 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "TestPoint" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 5.08 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 5.08 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "test point" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "test point tp" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Pin* Test*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "TestPoint_0_1" + (circle + (center 0 3.302) + (radius 0.762) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "TestPoint_1_1" + (pin passive line + (at 0 0 90) + (length 2.54) + (name "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Connector_Audio:AudioJack3_SwitchTR" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 8.89 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "AudioJack3_SwitchTR" + (at 0 6.35 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" "Audio Jack, 3 Poles (Stereo / TRS), Switched TR Poles (Normalling)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "audio jack receptacle stereo headphones phones TRS connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Jack*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "AudioJack3_SwitchTR_0_1" + (rectangle + (start -5.08 -5.08) + (end -6.35 -7.62) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy -1.905 -5.08) (xy -1.27 -5.715) (xy -0.635 -5.08) (xy -0.635 0) (xy 2.54 0) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -5.08) (xy 0.635 -5.715) (xy 1.27 -5.08) (xy 2.54 -5.08) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.508 -0.254) (xy 0.762 -0.762) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.778 -5.334) (xy 2.032 -5.842) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 2.54 3.81) + (end -5.08 -10.16) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (polyline + (pts + (xy 2.54 2.54) (xy -2.54 2.54) (xy -2.54 -5.08) (xy -3.175 -5.715) (xy -3.81 -5.08) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 -2.54) (xy 0.508 -2.54) (xy 0.508 -0.254) (xy 0.254 -0.762) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 -7.62) (xy 1.778 -7.62) (xy 1.778 -5.334) (xy 1.524 -5.842) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "AudioJack3_SwitchTR_1_1" + (pin passive line + (at 5.08 2.54 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "S" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 0 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "R" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -2.54 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "RN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -5.08 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "T" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -7.62 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "TN" + (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:C_Polarized" + (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_Polarized" + (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" "Polarized 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" "CP_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "C_Polarized_0_1" + (rectangle + (start -2.286 0.508) + (end 2.286 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.778 2.286) (xy -0.762 2.286) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 2.794) (xy -1.27 1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 2.286 -0.508) + (end -2.286 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + ) + (symbol "C_Polarized_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:L" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "L" + (at -1.27 0 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "L" + (at 1.905 0 90) + (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" "Inductor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "inductor choke coil reactor magnetic" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Choke_* *Coil* Inductor_* L_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "L_0_1" + (arc + (start 0 2.54) + (mid 0.6323 1.905) + (end 0 1.27) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 1.27) + (mid 0.6323 0.635) + (end 0 0) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 0) + (mid 0.6323 -0.635) + (end 0 -1.27) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -1.27) + (mid 0.6323 -1.905) + (end 0 -2.54) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "L_1_1" + (pin passive line + (at 0 3.81 270) + (length 1.27) + (name "1" + (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 "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 "Interface_Expansion:MCP23017_SO" + (pin_names + (offset 1.016) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -11.43 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MCP23017_SO" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-28W_7.5x17.9mm_P1.27mm" + (at 5.08 -25.4 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "http://ww1.microchip.com/downloads/en/DeviceDoc/20001952C.pdf" + (at 5.08 -27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "16-bit I/O expander, I2C, interrupts, w pull-ups, SOIC-28" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "I2C parallel port expander" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOIC*7.5x17.9mm*P1.27mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MCP23017_SO_0_1" + (rectangle + (start -12.7 22.86) + (end 12.7 -22.86) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "MCP23017_SO_1_1" + (pin bidirectional line + (at -17.78 20.32 0) + (length 5.08) + (name "SDA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -17.78 17.78 0) + (length 5.08) + (name "SCK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin tri_state line + (at -17.78 5.08 0) + (length 5.08) + (name "INTB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "19" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin tri_state line + (at -17.78 2.54 0) + (length 5.08) + (name "INTA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "20" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -17.78 -2.54 0) + (length 5.08) + (name "~{RESET}" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -17.78 -15.24 0) + (length 5.08) + (name "A2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -17.78 -17.78 0) + (length 5.08) + (name "A1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -17.78 -20.32 0) + (length 5.08) + (name "A0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at -12.7 15.24 0) + (length 5.08) + (hide yes) + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at -12.7 12.7 0) + (length 5.08) + (hide yes) + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 27.94 270) + (length 5.08) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -27.94 90) + (length 5.08) + (name "VSS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 20.32 180) + (length 5.08) + (name "GPB0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 17.78 180) + (length 5.08) + (name "GPB1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 15.24 180) + (length 5.08) + (name "GPB2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 12.7 180) + (length 5.08) + (name "GPB3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 10.16 180) + (length 5.08) + (name "GPB4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 7.62 180) + (length 5.08) + (name "GPB5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 5.08 180) + (length 5.08) + (name "GPB6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 2.54 180) + (length 5.08) + (name "GPB7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -2.54 180) + (length 5.08) + (name "GPA0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "21" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -5.08 180) + (length 5.08) + (name "GPA1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "22" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -7.62 180) + (length 5.08) + (name "GPA2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "23" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -10.16 180) + (length 5.08) + (name "GPA3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "24" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -12.7 180) + (length 5.08) + (name "GPA4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "25" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -15.24 180) + (length 5.08) + (name "GPA5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "26" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -17.78 180) + (length 5.08) + (name "GPA6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "27" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -20.32 180) + (length 5.08) + (name "GPA7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "28" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Jumper:Jumper_2_Open" + (pin_names + (offset 0) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "JP" + (at 0 2.794 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Jumper_2_Open" + (at 0 -2.286 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" "Jumper, 2-pole, open" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Jumper SPST" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Jumper* TestPoint*2Pads* TestPoint*Bridge*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Jumper_2_Open_0_0" + (circle + (center -2.032 0) + (radius 0.508) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 2.032 0) + (radius 0.508) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Jumper_2_Open_0_1" + (arc + (start -1.524 1.27) + (mid 0 1.778) + (end 1.524 1.27) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Jumper_2_Open_1_1" + (pin passive line + (at -5.08 0 0) + (length 2.54) + (name "A" + (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 "B" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Jumper:SolderJumper_2_Bridged" + (pin_names + (offset 0) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "JP" + (at 0 2.032 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SolderJumper_2_Bridged" + (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" "Solder Jumper, 2-pole, closed/bridged" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "solder jumper SPST" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SolderJumper*Bridged*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "SolderJumper_2_Bridged_0_1" + (rectangle + (start -0.508 0.508) + (end 0.508 -0.508) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy -0.254 1.016) (xy -0.254 -1.016) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -0.254 -1.016) + (mid -1.2656 0) + (end -0.254 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -0.254 -1.016) + (mid -1.2656 0) + (end -0.254 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (arc + (start 0.254 1.016) + (mid 1.2656 0) + (end 0.254 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0.254 1.016) + (mid 1.2656 0) + (end 0.254 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 0.254 1.016) (xy 0.254 -1.016) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "SolderJumper_2_Bridged_1_1" + (pin passive line + (at -3.81 0 0) + (length 2.54) + (name "A" + (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 "B" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Jumper:SolderJumper_2_Open" + (pin_names + (offset 0) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "JP" + (at 0 2.032 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SolderJumper_2_Open" + (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" "Solder Jumper, 2-pole, open" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "solder jumper SPST" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SolderJumper*Open*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "SolderJumper_2_Open_0_1" + (polyline + (pts + (xy -0.254 1.016) (xy -0.254 -1.016) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -0.254 -1.016) + (mid -1.2656 0) + (end -0.254 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -0.254 -1.016) + (mid -1.2656 0) + (end -0.254 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (arc + (start 0.254 1.016) + (mid 1.2656 0) + (end 0.254 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0.254 1.016) + (mid 1.2656 0) + (end 0.254 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 0.254 1.016) (xy 0.254 -1.016) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "SolderJumper_2_Open_1_1" + (pin passive line + (at -3.81 0 0) + (length 2.54) + (name "A" + (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 "B" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Mechanical:MountingHole_Pad" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "H" + (at 0 6.35 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MountingHole_Pad" + (at 0 4.445 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" "Mounting Hole with connection" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "mounting hole" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "MountingHole*Pad*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MountingHole_Pad_0_1" + (circle + (center 0 1.27) + (radius 1.27) + (stroke + (width 1.27) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "MountingHole_Pad_1_1" + (pin input line + (at 0 -2.54 90) + (length 2.54) + (name "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "RF_Switch:MASWSS0179" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -7.62 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 3.81 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_SMD:SOT-23-6" + (at 0 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 0 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Macom GaAs RF SPDT switch, DC-2GHz, 0.6/22dB loss/isolation, SOT-26 (SOT-23-6)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "RF SWITCH SPDT" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOT?23*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MASWSS0179_0_1" + (polyline + (pts + (xy -3.175 -3.81) (xy -2.54 -3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center -3.048 2.54) + (radius 0.2794) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -2.794 2.54) (xy 2.921 5.207) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.905 -3.81) (xy -1.27 -3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.635 -3.81) (xy 0 -3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 3.175) (xy 0 3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 1.905) (xy 0 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 0.635) (xy 0 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -0.635) (xy 0 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -1.905) (xy 0 -1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -3.175) (xy 0 -2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 3.048 0) + (radius 0.2794) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 3.175 5.207) + (radius 0.2794) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 7.62 -7.62) + (end -7.62 6.35) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "MASWSS0179_1_1" + (pin passive line + (at -10.16 2.54 0) + (length 2.54) + (name "RFC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -2.54 0) + (length 2.54) + (name "V1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -5.08 0) + (length 2.54) + (name "V2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 2.54 -10.16 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 10.16 5.08 180) + (length 2.54) + (name "RF1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 10.16 0 180) + (length 2.54) + (name "RF2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Regulator_Linear:LM1117T-3.3" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -3.81 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM1117T-3.3" + (at 0 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Horizontal_TabDown" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/symlink/lm1117.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "800mA Low-Dropout Linear Regulator, 3.3V fixed output, TO-220" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "linear regulator ldo fixed positive" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO?220*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "LM1117T-3.3_0_1" + (rectangle + (start -5.08 -5.08) + (end 5.08 1.905) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "LM1117T-3.3_1_1" + (pin power_in line + (at -7.62 0 0) + (length 2.54) + (name "VI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -7.62 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_out line + (at 7.62 0 180) + (length 2.54) + (name "VO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Regulator_Linear:LM317L_SO8" + (pin_names + (offset 0.254) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -3.81 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM317L_SO8" + (at 0 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/snvs775k/snvs775k.pdf" + (at 0 -5.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "100mA 35V Adjustable Linear Regulator, SO-8" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Adjustable Voltage Regulator 100mA Positive" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOIC*3.9x4.9mm*P1.27mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "LM317L_SO8_0_1" + (rectangle + (start -5.08 1.905) + (end 5.08 -5.08) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "LM317L_SO8_1_1" + (pin power_in line + (at -7.62 0 0) + (length 2.54) + (name "VI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at -5.08 -2.54 0) + (length 2.54) + (hide yes) + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 0 -7.62 90) + (length 2.54) + (name "ADJ" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at 5.08 -2.54 180) + (length 2.54) + (hide yes) + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_out line + (at 7.62 0 180) + (length 2.54) + (name "VO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 0 180) + (length 2.54) + (hide yes) + (name "VO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 0 180) + (length 2.54) + (hide yes) + (name "VO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 0 180) + (length 2.54) + (hide yes) + (name "VO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Regulator_Linear:LM7805_TO220" + (pin_names + (offset 0.254) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -3.81 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM7805_TO220" + (at 0 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 0 5.715 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.cn/PowerSolutions/document/MC7800-D.PDF" + (at 0 -1.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Positive 1A 35V Linear Regulator, Fixed Output 5V, TO-220" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Voltage Regulator 1A Positive" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO?220*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "LM7805_TO220_0_1" + (rectangle + (start -5.08 1.905) + (end 5.08 -5.08) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "LM7805_TO220_1_1" + (pin power_in line + (at -7.62 0 0) + (length 2.54) + (name "VI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -7.62 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_out line + (at 7.62 0 180) + (length 2.54) + (name "VO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "T41_Library:74CBTLV3253PWRE4" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 10.795 19.685 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "74CBTLV3253PWRE4" + (at 11.43 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:TSSOP-16-1EP_4.4x5mm_P0.65mm" + (at 1.27 -17.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74cbtlv3253.pdf" + (at 0 -20.955 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Low-Voltage Dual 1-of-4 FET Multiplexer/Demultiplexer" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "DIP?24*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "74CBTLV3253PWRE4_1_0" + (polyline + (pts + (xy 1.27 1.27) (xy -1.27 0) (xy 1.27 -1.27) (xy 1.27 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.27 0) (xy -1.27 1.27) (xy -1.27 -1.27) (xy 1.27 0) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin input line + (at -12.7 15.24 0) + (length 5.08) + (name "1~{OE}" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 12.7 0) + (length 5.08) + (name "2~{OE}" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -12.7 5.08 0) + (length 5.08) + (name "S0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -12.7 2.54 0) + (length 5.08) + (name "S1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -12.7 -5.08 0) + (length 5.08) + (name "1A" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -12.7 -7.62 0) + (length 5.08) + (name "2A" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 22.86 270) + (length 5.08) + (name "VCC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -15.24 90) + (length 5.08) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 15.24 180) + (length 5.08) + (name "1B1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 12.7 180) + (length 5.08) + (name "1B2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 10.16 180) + (length 5.08) + (name "1B3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 7.62 180) + (length 5.08) + (name "1B4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 0 180) + (length 5.08) + (name "2B1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 -2.54 180) + (length 5.08) + (name "2B2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 -5.08 180) + (length 5.08) + (name "2B3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 -7.62 180) + (length 5.08) + (name "2B4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (symbol "74CBTLV3253PWRE4_1_1" + (rectangle + (start -7.62 17.78) + (end 7.62 -10.16) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "T41_Library:IDC_2x5" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 1.27 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "IDC_2x5" + (at 1.27 -7.62 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" "Generic connector, double row, 02x05, top/bottom pin numbering scheme (row 1: 1...pins_per_row, row2: pins_per_row+1 ... num_pins), script generated (kicad-library-utils/schlib/autogen/connector/)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_2x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "IDC_2x5_1_1" + (rectangle + (start -1.27 6.35) + (end 3.81 -6.35) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (rectangle + (start -1.27 5.207) + (end 0 4.953) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 2.667) + (end 0 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 1.27) + (end 0 -1.27) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -2.413) + (end 0 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -4.953) + (end 0 -5.207) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 5.207) + (end 2.54 4.953) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 2.667) + (end 2.54 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 0.127) + (end 2.54 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 -2.413) + (end 2.54 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 -4.953) + (end 2.54 -5.207) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 5.08 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -5.08 0) + (length 3.81) + (name "Pin_9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 5.08 180) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 2.54 180) + (length 3.81) + (name "Pin_4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 0 180) + (length 3.81) + (name "Pin_6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 -2.54 180) + (length 3.81) + (name "Pin_8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 -5.08 180) + (length 3.81) + (name "Pin_10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "T41_Library:MAR-3SM+" + (pin_names + (offset 0.127) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 5.08 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MAR-3SM+" + (at 5.08 -2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at 0 -9.525 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.minicircuits.com/pdfs/MAR-3SM+.pdf" + (at 1.27 -11.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "DC to 4 GHz, 31 dB gain, 3 dB NF monolithic amplifier" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOIC*P1.27mm* DIP*W7.62mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MAR-3SM+_1_1" + (polyline + (pts + (xy 5.08 0) (xy -5.08 5.08) (xy -5.08 -5.08) (xy 5.08 0) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (pin input line + (at -7.62 0 0) + (length 2.54) + (name "IN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -2.54 6.35 270) + (length 2.54) + (name "GND" + (effects + (font + (size 0.508 0.508) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -2.54 -6.35 90) + (length 2.54) + (name "GND" + (effects + (font + (size 0.508 0.508) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 7.62 0 180) + (length 2.54) + (name "OUT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "T41_Library:PSA-8A+" + (pin_names + (offset 0.127) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 5.08 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "PSA-8A+" + (at 5.08 -2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_SMD:SOT-363_SC-70-6" + (at 0 -9.525 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.minicircuits.com/pdfs/PSA-8A+.pdf" + (at 1.27 -11.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "DC to 4 GHz, 31 dB gain, 3 dB NF monolithic amplifier" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOIC*P1.27mm* DIP*W7.62mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "PSA-8A+_1_1" + (polyline + (pts + (xy 5.08 0) (xy -5.08 5.08) (xy -5.08 -5.08) (xy 5.08 0) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (pin input line + (at -7.62 0 0) + (length 2.54) + (name "IN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -5.08 -7.62 90) + (length 2.54) + (name "GND" + (effects + (font + (size 0.508 0.508) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -2.54 -7.62 90) + (length 2.54) + (name "GND" + (effects + (font + (size 0.508 0.508) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 0 -7.62 90) + (length 2.54) + (name "GND" + (effects + (font + (size 0.508 0.508) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 -7.62 90) + (length 2.54) + (name "GND" + (effects + (font + (size 0.508 0.508) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 7.62 0 180) + (length 2.54) + (name "OUT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "T41_Library:T41_Attenuator_Daughter" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -0.762 10.414 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "T41_Attenuator_Daughter" + (at 0.762 13.97 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:T41_Attenuator_Daughter" + (at 3.175 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 3.81 -6.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "MSOP*3x3mm*P0.65mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "T41_Attenuator_Daughter_0_1" + (rectangle + (start -7.62 8.89) + (end 6.35 -8.89) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "T41_Attenuator_Daughter_1_1" + (pin input line + (at -10.16 6.35 0) + (length 2.54) + (name "0.5dB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 3.81 0) + (length 2.54) + (name "RF1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 1.27 0) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -1.27 0) + (length 2.54) + (name "3V3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -3.81 0) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -6.35 0) + (length 2.54) + (name "16dB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 8.89 6.35 180) + (length 2.54) + (name "1dB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 8.89 3.81 180) + (length 2.54) + (name "2dB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 8.89 1.27 180) + (length 2.54) + (name "4dB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 8.89 -1.27 180) + (length 2.54) + (name "8dB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 8.89 -3.81 180) + (length 2.54) + (name "RF2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 8.89 -6.35 180) + (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 "T41_Library:T41_DualClock_Daughter" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -0.762 10.414 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "T41_DualClock_Daughter" + (at 0.762 13.97 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:T41_DualClock_Daughter" + (at 3.175 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 3.81 -6.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "MSOP*3x3mm*P0.65mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "T41_DualClock_Daughter_0_1" + (rectangle + (start -7.62 8.89) + (end 6.35 -8.89) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "T41_DualClock_Daughter_1_1" + (pin input line + (at -10.16 6.35 0) + (length 2.54) + (name "CLK4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 3.81 0) + (length 2.54) + (name "CLK5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 1.27 0) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -1.27 0) + (length 2.54) + (name "CLK6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -3.81 -11.43 90) + (length 2.54) + (name "SCL" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -1.27 -11.43 90) + (length 2.54) + (name "SDA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 1.27 -11.43 90) + (length 2.54) + (name "3V3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 3.81 -11.43 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 8.89 6.35 180) + (length 2.54) + (name "CLK0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 8.89 3.81 180) + (length 2.54) + (name "CLK1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 8.89 1.27 180) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 8.89 -1.27 180) + (length 2.54) + (name "N/C" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Transformer:ADT1-1" + (pin_names + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "TR" + (at 0 6.35 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "ADT1-1" + (at 0 -6.35 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "RF_Mini-Circuits:Mini-Circuits_CD542_H2.84mm" + (at 0 -8.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.minicircuits.com/pdfs/ADT1-1+.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "0.15-400MHz 1:1 RF Transformer, Balanced to Balanced, CD542" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Mini-Circuits RF Transformer" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Mini?Circuits*CD542*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "ADT1-1_0_1" + (polyline + (pts + (xy -2.54 5.08) (xy -1.524 5.08) (xy -1.524 3.048) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -1.524 3.048) + (mid -0.7653 2.286) + (end -1.524 1.524) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -1.524 1.524) + (mid -0.7653 0.762) + (end -1.524 0) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -1.524 0) + (mid -0.7653 -0.762) + (end -1.524 -1.524) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -1.524 -1.524) + (mid -0.7653 -2.286) + (end -1.524 -3.048) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.524 -3.048) (xy -1.524 -5.08) (xy -2.54 -5.08) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.524 3.048) (xy 1.524 5.08) (xy 2.54 5.08) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 1.524 1.524) + (mid 0.7653 2.286) + (end 1.524 3.048) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 1.524 0) + (mid 0.7653 0.762) + (end 1.524 1.524) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 1.524 -1.524) + (mid 0.7653 -0.762) + (end 1.524 0) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 1.524 -3.048) + (mid 0.7653 -2.286) + (end 1.524 -1.524) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 -5.08) (xy 1.524 -5.08) (xy 1.524 -3.048) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "ADT1-1_1_1" + (pin passive line + (at -5.08 5.08 0) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -5.08 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 5.08 5.08 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -5.08 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Transformer:ADT2-1T" + (pin_names + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "TR" + (at 0 6.35 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "ADT2-1T" + (at 0 -6.985 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "RF_Mini-Circuits:Mini-Circuits_CD542_H2.84mm" + (at 0 -8.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.minicircuits.com/pdfs/ADT2-1T+.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "0.40-450MHz 1:2 RF Transformer, Unbalanced to Balanced Center Tap, CD542" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Mini-Circuits RF Transformer" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Mini?Circuits*CD542*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "ADT2-1T_0_1" + (circle + (center -3.81 3.81) + (radius 0.635) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy -2.54 5.08) (xy -1.524 5.08) (xy -1.524 3.048) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -1.524 3.048) + (mid -0.7653 2.286) + (end -1.524 1.524) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -1.524 1.524) + (mid -0.7653 0.762) + (end -1.524 0) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -1.524 0) + (mid -0.7653 -0.762) + (end -1.524 -1.524) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -1.524 -1.524) + (mid -0.7653 -2.286) + (end -1.524 -3.048) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.524 -3.048) (xy -1.524 -5.08) (xy -2.54 -5.08) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.524 3.048) (xy 1.524 5.08) (xy 2.54 5.08) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 1.524 1.524) + (mid 0.7653 2.286) + (end 1.524 3.048) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 1.524 0) + (mid 0.7653 0.762) + (end 1.524 1.524) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 1.524 -1.524) + (mid 0.7653 -0.762) + (end 1.524 0) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 1.524 -3.048) + (mid 0.7653 -2.286) + (end 1.524 -1.524) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 0) (xy 1.27 0) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 -5.08) (xy 1.524 -5.08) (xy 1.524 -3.048) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 3.81 3.81) + (radius 0.635) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + ) + (symbol "ADT2-1T_1_1" + (pin passive line + (at -5.08 5.08 0) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -5.08 0) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at -2.54 0 0) + (length 2.54) + (hide yes) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 5.08 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 0 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -5.08 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Transistor_FET:BS170" + (pin_names + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "Q" + (at 5.08 1.905 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "BS170" + (at 5.08 0 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-92_Inline" + (at 5.08 -1.905 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.com/pub/Collateral/BS170-D.PDF" + (at 5.08 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "0.5A Id, 60V Vds, N-Channel MOSFET, TO-92" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "N-Channel MOSFET" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO?92*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "BS170_0_1" + (polyline + (pts + (xy 0.254 1.905) (xy 0.254 -1.905) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.254 0) (xy -2.54 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 2.286) (xy 0.762 1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 0.508) (xy 0.762 -0.508) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 -1.27) (xy 0.762 -2.286) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 -1.778) (xy 3.302 -1.778) (xy 3.302 1.778) (xy 0.762 1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.016 0) (xy 2.032 0.381) (xy 2.032 -0.381) (xy 1.016 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (circle + (center 1.651 0) + (radius 2.794) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 2.54) (xy 2.54 1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 2.54 1.778) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (circle + (center 2.54 -1.778) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 2.54 -2.54) (xy 2.54 0) (xy 0.762 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.794 0.508) (xy 2.921 0.381) (xy 3.683 0.381) (xy 3.81 0.254) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 3.302 0.381) (xy 2.921 -0.254) (xy 3.683 -0.254) (xy 3.302 0.381) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "BS170_1_1" + (pin input line + (at -5.08 0 0) + (length 2.54) + (name "G" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 2.54 5.08 270) + (length 2.54) + (name "D" + (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 "S" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:+12P" + (power) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR01" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12P" + (at 0 4.1331 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 \"+12P\"" + (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 "+12P_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 "+12P_1_1" + (pin power_out line + (at 0 0 90) + (length 0) + (hide yes) + (name "+12P" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:+12V" + (power) + (pin_names + (offset 0) + ) + (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" "+12V" + (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 \"+12V\"" + (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 "+12V_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 "+12V_1_1" + (pin power_in line + (at 0 0 90) + (length 0) + (hide yes) + (name "+12V" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:+3V3" + (power) + (pin_names + (offset 0) + ) + (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" "+3V3" + (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 \"+3V3\"" + (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 "+3V3_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 "+3V3_1_1" + (pin power_in line + (at 0 0 90) + (length 0) + (hide yes) + (name "+3V3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:+5V" + (power) + (pin_names + (offset 0) + ) + (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" "+5V" + (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 \"+5V\"" + (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 "+5V_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 "+5V_1_1" + (pin power_in line + (at 0 0 90) + (length 0) + (hide yes) + (name "+5V" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:GND" + (power) + (pin_names + (offset 0) + ) + (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) + (hide yes) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + ) + (text "RF output" + (exclude_from_sim no) + (at 27.178 198.628 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "031b19c7-f55d-41ff-b2be-6264dc2317fa") + ) + (text "RF input from\nfilter board" + (exclude_from_sim no) + (at 19.304 96.774 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "10515d9c-97bd-4441-bb6f-f8a7492ac8ff") + ) + (text "Amplifier \nbiasing" + (exclude_from_sim no) + (at 158.75 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "15245d86-9b99-427b-b4a9-224f0dd37e94") + ) + (text "IQ out to \nmain board\nRing - Q\nTip - I" + (exclude_from_sim no) + (at 394.97 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "3210d3f4-fc6c-4282-9091-35516b10ac05") + ) + (text "CW Mode" + (exclude_from_sim no) + (at 165.1 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "3ec9a43b-1f03-45a1-b375-ad34d73bc17c") + ) + (text "R73 stacked \non top of C73" + (exclude_from_sim no) + (at 168.91 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "4017eba2-9a4d-4511-814a-a8fc2b3e3030") + ) + (text "10T" + (exclude_from_sim no) + (at 60.96 99.06 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "550da594-2a26-4546-8a4b-f0d2b412b343") + ) + (text "RF RECEIVE CHAIN ->" + (exclude_from_sim no) + (at 186.69 20.32 0) + (effects + (font + (size 5 5) + (bold yes) + ) + (justify left bottom) + ) + (uuid "5e25ad68-3ebe-4fcc-a1df-4498b987f797") + ) + (text "Select 5V if needed for large \nsignal operation." + (exclude_from_sim no) + (at 171.45 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "7b2f77cd-7952-48f6-be66-55556ab8f6fc") + ) + (text "ADDRESS\nSELECT" + (exclude_from_sim no) + (at 35.56 132.08 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "8adc0f8f-7728-49c5-a834-1d79b0c57bd5") + ) + (text "Tx On/Off: High = Tx on" + (exclude_from_sim no) + (at 269.24 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "bc2b3d92-10db-4bd5-a85b-a4719b7eda70") + ) + (text "SSB Mode" + (exclude_from_sim no) + (at 166.37 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "bdfea11d-eaf9-4f20-85ee-f718b8348de0") + ) + (text "IQ in from \nmain board\nRing - Q\nTip - I" + (exclude_from_sim no) + (at 403.86 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "cec5c257-0a1d-4245-ad22-820106243467") + ) + (text "MiniCircuits ADT2-1T+" + (exclude_from_sim no) + (at 207.01 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "e5e064e8-b689-4236-80f0-c23fba90282f") + ) + (text "MiniCircuits ADT1-1+" + (exclude_from_sim no) + (at 46.99 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "f06c0705-08d4-4d88-aa87-22a5da70c18c") + ) + (text "10T" + (exclude_from_sim no) + (at 49.53 99.06 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "f1a62925-d76f-4e2d-af12-8efeb7156765") + ) + (text "<- RF TRANSMIT CHAIN" + (exclude_from_sim no) + (at 119.38 272.796 0) + (effects + (font + (size 5 5) + (bold yes) + ) + (justify right bottom) + ) + (uuid "fdbcd8f4-3a51-48d9-8697-6fb4dc5c5e94") + ) + (text_box "RF control breakout" + (exclude_from_sim no) + (at 107.95 121.92 0) + (size 68.58 59.69) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left top) + ) + (uuid "0494d2ca-87ad-4721-91a1-22489fd2db57") + ) + (text_box "Auto calibrate switch" + (exclude_from_sim no) + (at 80.01 200.66 0) + (size -53.34 52.07) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify right top) + ) + (uuid "1ae34b8c-0eee-46f9-bda3-f7945c98cdc8") + ) + (text_box "Power supply" + (exclude_from_sim no) + (at 12.7 12.7 0) + (size 119.38 46.99) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left top) + ) + (uuid "1c91b0aa-6cab-42bb-8d4b-b473970c48c9") + ) + (text_box "Mode select" + (exclude_from_sim no) + (at 123.19 184.15 0) + (size 55.88 54.61) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left top) + ) + (uuid "2b121266-0879-4ee6-b087-57d1b5cf8595") + ) + (text_box "Inverting and phasing op-amps" + (exclude_from_sim no) + (at 392.43 151.13 0) + (size -116.84 99.06) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify right top) + ) + (uuid "304d42e8-28b9-4d6f-b430-1fcd4d11bd83") + ) + (text_box "Transmit RF gain control" + (exclude_from_sim no) + (at 80.01 201.93 0) + (size 43.18 34.29) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify right top) + ) + (uuid "44f1cc8b-6df6-4c81-87c2-0e2a984131e6") + ) + (text_box "Input RF amplifier" + (exclude_from_sim no) + (at 128.27 71.12 0) + (size 30.48 50.8) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left top) + ) + (uuid "525764c5-3442-481c-8f80-592a094bd304") + ) + (text_box "Low-pass 200 kHz Anti-aliasing Filter" + (exclude_from_sim no) + (at 300.99 20.32 0) + (size 78.74 101.6) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left top) + ) + (uuid "5d9ccf1a-1086-4ac3-b2a1-eb76e042b9a0") + ) + (text_box "Summing transformer" + (exclude_from_sim no) + (at 179.07 210.82 0) + (size 46.99 68.58) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left top) + ) + (uuid "67da0485-d802-4e9e-a1c5-125851e668cb") + ) + (text_box "I2C options control" + (exclude_from_sim no) + (at 27.94 114.3 0) + (size 80.01 67.31) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left top) + ) + (uuid "6d75db5d-e148-4b22-8515-4c93e4a0906e") + ) + (text_box "RxTx: HIGH = Tx on\nX Mode:\n HIGH = SSB\n LOW = CW\nCW: H = on, L = off" + (exclude_from_sim no) + (at 137.16 162.56 0) + (size 25.4 11.43) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + ) + (uuid "8a160ad4-e6d4-429c-86a7-eec847621646") + ) + (text_box "Quadrature sampling exciter" + (exclude_from_sim no) + (at 275.59 151.13 0) + (size -49.53 99.06) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify right top) + ) + (uuid "937aa864-57d8-4fdc-8356-878c8666801b") + ) + (text_box "Quadrature Sampling Detector" + (exclude_from_sim no) + (at 158.75 20.32 0) + (size 142.24 101.6) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left top) + ) + (uuid "aef8ce6a-ddb5-4951-bc88-5228a591ae34") + ) + (text_box "Receive RF gain control" + (exclude_from_sim no) + (at 77.47 59.69 0) + (size 50.8 54.61) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify right top) + ) + (uuid "c384568c-c3b4-4a7a-9cea-9c71e432b802") + ) + (text_box "Misc. holes" + (exclude_from_sim no) + (at 133.35 29.21 0) + (size 24.13 40.64) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left top) + ) + (uuid "c8731b5d-fc07-469e-9c9f-77c63a7b9c01") + ) + (text_box "CW envelope shaping" + (exclude_from_sim no) + (at 179.07 238.76 0) + (size -55.88 40.64) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify right bottom) + ) + (uuid "f1d7ea5d-783a-496a-bb43-3b9c0d2f52cc") + ) + (text_box "Board mounting holes" + (exclude_from_sim no) + (at 133.35 12.7 0) + (size 24.13 16.51) + (margins 0.9525 0.9525 0.9525 0.9525) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left top) + ) + (uuid "f8dff638-d9c8-4d77-a669-507378d79194") + ) + (junction + (at 153.67 264.16) + (diameter 0) + (color 0 0 0 0) + (uuid "01063aa6-6693-4fd9-b107-7be92ca88bad") + ) + (junction + (at 322.58 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "0373bdaf-e5c9-4ba7-a87c-2091ff22b5a1") + ) + (junction + (at 290.83 175.26) + (diameter 0) + (color 0 0 0 0) + (uuid "03872264-7a71-4efb-a2cb-80ebd5d35899") + ) + (junction + (at 281.94 96.52) + (diameter 0) + (color 0 0 0 0) + (uuid "048017ee-18ff-4eda-a7d8-c04b9aac9188") + ) + (junction + (at 290.83 210.82) + (diameter 0) + (color 0 0 0 0) + (uuid "048020bf-d31d-498c-b3d0-b01f0531466b") + ) + (junction + (at 389.89 175.26) + (diameter 0) + (color 0 0 0 0) + (uuid "0537966d-7975-454e-bbd8-6829d1deb10b") + ) + (junction + (at 281.94 194.31) + (diameter 0) + (color 0 0 0 0) + (uuid "06e650b0-955f-4ebf-81c3-4fa71a9b03c5") + ) + (junction + (at 185.42 63.5) + (diameter 0) + (color 0 0 0 0) + (uuid "071434ac-ce92-41c2-bccd-95bbaa42feb7") + ) + (junction + (at 243.84 172.72) + (diameter 0) + (color 0 0 0 0) + (uuid "0765f964-4187-4585-b56c-1ac68c51316a") + ) + (junction + (at 347.98 74.93) + (diameter 0) + (color 0 0 0 0) + (uuid "086f2090-8296-4b12-b991-c3705658f413") + ) + (junction + (at 356.87 175.26) + (diameter 0) + (color 0 0 0 0) + (uuid "0b88acd3-220d-408f-8f3f-d03e8235fe42") + ) + (junction + (at 138.43 257.81) + (diameter 0) + (color 0 0 0 0) + (uuid "0e1e2ccb-b64a-4700-8cf9-d37dcbe62033") + ) + (junction + (at 281.94 210.82) + (diameter 0) + (color 0 0 0 0) + (uuid "0f85c6af-3f1a-4db8-81e3-0f93725abfbc") + ) + (junction + (at 256.54 234.95) + (diameter 0) + (color 0 0 0 0) + (uuid "10123975-4876-4b23-a5f8-e8f88aca7e6e") + ) + (junction + (at 271.78 180.34) + (diameter 0) + (color 0 0 0 0) + (uuid "110424cf-dca6-4ece-980d-0772e8cd339f") + ) + (junction + (at 34.29 45.72) + (diameter 0) + (color 0 0 0 0) + (uuid "11792bda-e0e2-4832-b410-669170592d42") + ) + (junction + (at 340.36 172.72) + (diameter 0) + (color 0 0 0 0) + (uuid "15321b25-061c-4a03-8054-07705184b068") + ) + (junction + (at 168.91 97.79) + (diameter 0) + (color 0 0 0 0) + (uuid "17e47df1-3aae-45fc-affa-9e28487ae3a7") + ) + (junction + (at 355.6 205.74) + (diameter 0) + (color 0 0 0 0) + (uuid "17fbc50c-db1c-4d17-b907-f1e467045892") + ) + (junction + (at 36.83 161.29) + (diameter 0) + (color 0 0 0 0) + (uuid "18998907-ef1f-4b40-b208-88a3510f0d85") + ) + (junction + (at 279.4 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "1aa95ca0-50e5-4024-901e-a554429c63d5") + ) + (junction + (at 226.06 95.25) + (diameter 0) + (color 0 0 0 0) + (uuid "1acafb46-b66c-4696-b0a0-0c2b411edfba") + ) + (junction + (at 368.3 205.74) + (diameter 0) + (color 0 0 0 0) + (uuid "1c55d127-9a39-4b78-a206-3ded9e8beed9") + ) + (junction + (at 35.56 146.05) + (diameter 0) + (color 0 0 0 0) + (uuid "1c6049f0-c9eb-4c78-abcb-8adcbda96341") + ) + (junction + (at 191.77 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "1e06e18c-4e73-412f-a614-29cbed11429e") + ) + (junction + (at 322.58 77.47) + (diameter 0) + (color 0 0 0 0) + (uuid "20fb593a-f94f-47d1-9585-2ed71c1e2ab3") + ) + (junction + (at 142.24 60.96) + (diameter 0) + (color 0 0 0 0) + (uuid "226281b7-684b-4201-88e8-bfb7139e7095") + ) + (junction + (at 278.13 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "240471e6-9c6d-4afa-832a-cb68d105e76e") + ) + (junction + (at 160.02 259.08) + (diameter 0) + (color 0 0 0 0) + (uuid "24aac518-36ae-4752-ac89-37c9a05ee92c") + ) + (junction + (at 313.69 210.82) + (diameter 0) + (color 0 0 0 0) + (uuid "26add3b2-b437-40ff-8dae-3b3f5e790167") + ) + (junction + (at 177.8 102.87) + (diameter 0) + (color 0 0 0 0) + (uuid "27657a07-8632-4dd4-a64e-cb07bf01f96a") + ) + (junction + (at 73.66 31.75) + (diameter 0) + (color 0 0 0 0) + (uuid "2777e675-08bd-4396-92c9-3ea6f6abc8c9") + ) + (junction + (at 220.98 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "27b1458a-399d-4961-91af-15d3bfcb2a75") + ) + (junction + (at 147.32 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "283395d1-2fc4-494d-b2d9-040887ad4b08") + ) + (junction + (at 346.71 231.14) + (diameter 0) + (color 0 0 0 0) + (uuid "28a7650e-0688-4363-ba60-28a0d39a8af0") + ) + (junction + (at 80.01 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "29021509-fd53-44c0-9962-0f2ab58f27ae") + ) + (junction + (at 207.01 73.66) + (diameter 0) + (color 0 0 0 0) + (uuid "299ddf59-1bbc-4688-82b8-efb7a64e3cea") + ) + (junction + (at 287.02 83.82) + (diameter 0) + (color 0 0 0 0) + (uuid "2b516f2d-469c-4634-b81e-a58b577ec3ec") + ) + (junction + (at 179.07 102.87) + (diameter 0) + (color 0 0 0 0) + (uuid "2db47d9b-b374-4103-b4ac-6f4608c0f4c2") + ) + (junction + (at 281.94 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "2fee614e-ecec-4682-bde3-ee3f0d782f8d") + ) + (junction + (at 57.15 170.18) + (diameter 0) + (color 0 0 0 0) + (uuid "34a7f89e-ac9a-4c27-b55a-86d4a9e8a5ea") + ) + (junction + (at 309.88 44.45) + (diameter 0) + (color 0 0 0 0) + (uuid "39c6c1f5-fe93-4c0f-837d-541059fda878") + ) + (junction + (at 223.52 88.9) + (diameter 0) + (color 0 0 0 0) + (uuid "3a17f246-9c64-4c77-8733-bdcc517f5dbb") + ) + (junction + (at 313.69 231.14) + (diameter 0) + (color 0 0 0 0) + (uuid "3a5c8523-3cbd-4e0f-925d-aeb9704d349e") + ) + (junction + (at 266.7 194.31) + (diameter 0) + (color 0 0 0 0) + (uuid "3abaebd7-a14a-4f9a-aed1-b6c04bb05375") + ) + (junction + (at 138.43 137.16) + (diameter 0) + (color 0 0 0 0) + (uuid "3c03bb1b-6318-48da-956f-f7f4433aa7e6") + ) + (junction + (at 35.56 140.97) + (diameter 0) + (color 0 0 0 0) + (uuid "3c5c160c-0e3d-4571-9cdb-094e700a5937") + ) + (junction + (at 16.51 24.13) + (diameter 0) + (color 0 0 0 0) + (uuid "3d0055fb-4bb5-48c9-8067-743cad7d7323") + ) + (junction + (at 356.87 210.82) + (diameter 0) + (color 0 0 0 0) + (uuid "3d8e08e5-9a38-4074-97b8-d7cb7b3dbabb") + ) + (junction + (at 340.36 243.84) + (diameter 0) + (color 0 0 0 0) + (uuid "3d905acd-1188-4e7b-9461-488a7c1ebde4") + ) + (junction + (at 251.46 41.91) + (diameter 0) + (color 0 0 0 0) + (uuid "3e535f69-7abc-46dc-89c1-f908142ff225") + ) + (junction + (at 341.63 90.17) + (diameter 0) + (color 0 0 0 0) + (uuid "413ed92d-a981-4644-b076-92774d246746") + ) + (junction + (at 247.65 245.11) + (diameter 0) + (color 0 0 0 0) + (uuid "43457222-0f82-4892-9530-dd123f2cca50") + ) + (junction + (at 34.29 24.13) + (diameter 0) + (color 0 0 0 0) + (uuid "4355bfe9-1890-4316-9841-027ca797c712") + ) + (junction + (at 280.67 44.45) + (diameter 0) + (color 0 0 0 0) + (uuid "4699cabd-6c6d-4eb0-be9e-cddc578d4b98") + ) + (junction + (at 243.84 165.1) + (diameter 0) + (color 0 0 0 0) + (uuid "49aaca96-90d5-4085-950e-a6019b8edd79") + ) + (junction + (at 281.94 175.26) + (diameter 0) + (color 0 0 0 0) + (uuid "4a20ae6d-ae92-46ea-9929-54a957bf89d8") + ) + (junction + (at 355.6 236.22) + (diameter 0) + (color 0 0 0 0) + (uuid "4a81aea4-1a92-4b62-8e6f-93953bb415ae") + ) + (junction + (at 342.9 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "4b713454-f6b8-4fce-8740-812a12506493") + ) + (junction + (at 66.04 248.92) + (diameter 0) + (color 0 0 0 0) + (uuid "4b8930b4-0fb9-482f-8418-82be296c12d2") + ) + (junction + (at 73.66 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "4b8bf84e-385f-4d06-a486-7b0af18178be") + ) + (junction + (at 328.93 172.72) + (diameter 0) + (color 0 0 0 0) + (uuid "4c1d48d0-f507-41a0-ae36-ac964f2d0999") + ) + (junction + (at 142.24 55.88) + (diameter 0) + (color 0 0 0 0) + (uuid "5ba0ed9e-a461-4dd9-9a62-46bfb0e708e1") + ) + (junction + (at 234.95 180.34) + (diameter 0) + (color 0 0 0 0) + (uuid "5ec73f01-2f7a-493e-804d-94083a873df3") + ) + (junction + (at 138.43 259.08) + (diameter 0) + (color 0 0 0 0) + (uuid "64495609-e1cc-4f57-bc14-13756fb75b67") + ) + (junction + (at 340.36 208.28) + (diameter 0) + (color 0 0 0 0) + (uuid "64e79ae6-14dd-4081-8555-78ada794d410") + ) + (junction + (at 284.48 74.93) + (diameter 0) + (color 0 0 0 0) + (uuid "656fad18-b89b-4a9b-812e-e6a96bc32ba5") + ) + (junction + (at 261.62 95.25) + (diameter 0) + (color 0 0 0 0) + (uuid "65c5176e-846c-49e9-8acc-1aaf5055b821") + ) + (junction + (at 297.18 74.93) + (diameter 0) + (color 0 0 0 0) + (uuid "66c7e4bb-ee28-434b-9b73-0db993771c29") + ) + (junction + (at 36.83 24.13) + (diameter 0) + (color 0 0 0 0) + (uuid "679850da-4357-4857-8b35-0fa6f3e8020e") + ) + (junction + (at 336.55 243.84) + (diameter 0) + (color 0 0 0 0) + (uuid "68c9de10-d95c-42f8-ae86-f66f256bc592") + ) + (junction + (at 383.54 232.41) + (diameter 0) + (color 0 0 0 0) + (uuid "696ce8e1-26b9-4ab8-9cb5-ffefdd5abf48") + ) + (junction + (at 328.93 208.28) + (diameter 0) + (color 0 0 0 0) + (uuid "6a9a6fb7-4182-4af2-b944-546df19626db") + ) + (junction + (at 262.89 41.91) + (diameter 0) + (color 0 0 0 0) + (uuid "71055a2f-650c-4897-ade6-d58c9c441a73") + ) + (junction + (at 341.63 41.91) + (diameter 0) + (color 0 0 0 0) + (uuid "72719985-c3d5-45bc-a3df-752743b01397") + ) + (junction + (at 248.92 90.17) + (diameter 0) + (color 0 0 0 0) + (uuid "74c7992e-7f91-4cfe-88d6-d0fd070e93c8") + ) + (junction + (at 194.31 71.12) + (diameter 0) + (color 0 0 0 0) + (uuid "756298cd-3b30-4048-a19e-0772ac8fc2c1") + ) + (junction + (at 147.32 102.87) + (diameter 0) + (color 0 0 0 0) + (uuid "76b2aa19-b190-41b4-beac-4ace6f8be112") + ) + (junction + (at 322.58 44.45) + (diameter 0) + (color 0 0 0 0) + (uuid "770fd83f-de8b-4f72-bf7f-ad54bdc481da") + ) + (junction + (at 389.89 193.04) + (diameter 0) + (color 0 0 0 0) + (uuid "799635e5-6068-4a16-895d-fcb7d824ec1f") + ) + (junction + (at 44.45 45.72) + (diameter 0) + (color 0 0 0 0) + (uuid "7a5fa5fd-9aa1-4d87-882c-ee50ed3c36b7") + ) + (junction + (at 356.87 177.8) + (diameter 0) + (color 0 0 0 0) + (uuid "7ab2dfc4-c049-422a-b27c-9e68ee91b47c") + ) + (junction + (at 55.88 167.64) + (diameter 0) + (color 0 0 0 0) + (uuid "7c1fd0d0-1d7c-4bd1-a580-030cc133dae6") + ) + (junction + (at 217.17 270.51) + (diameter 0) + (color 0 0 0 0) + (uuid "7c2ea4ca-6832-4098-b801-93c635aca2e5") + ) + (junction + (at 36.83 167.64) + (diameter 0) + (color 0 0 0 0) + (uuid "7d266659-133e-4786-8d8a-84757c44e8ca") + ) + (junction + (at 313.69 175.26) + (diameter 0) + (color 0 0 0 0) + (uuid "7daba775-9a2b-4550-bfc6-b620038759a4") + ) + (junction + (at 340.36 198.12) + (diameter 0) + (color 0 0 0 0) + (uuid "7f0c078d-1acf-4b9d-a3da-cdc69341feab") + ) + (junction + (at 214.63 220.98) + (diameter 0) + (color 0 0 0 0) + (uuid "81d0f8b5-e4f4-4efe-a348-2b7adc7d9862") + ) + (junction + (at 281.94 158.75) + (diameter 0) + (color 0 0 0 0) + (uuid "82df764d-e9f5-4379-913e-e1f8ac31fed4") + ) + (junction + (at 290.83 194.31) + (diameter 0) + (color 0 0 0 0) + (uuid "830d0b8d-8328-4548-a5ef-9af5cefec5a0") + ) + (junction + (at 160.02 273.05) + (diameter 0) + (color 0 0 0 0) + (uuid "836c9765-434a-4c90-bbd6-c19979f2f64a") + ) + (junction + (at 340.36 194.31) + (diameter 0) + (color 0 0 0 0) + (uuid "83911430-3dfb-42b8-885a-421afa80f16d") + ) + (junction + (at 153.67 273.05) + (diameter 0) + (color 0 0 0 0) + (uuid "85c4e79a-694e-4b4c-b2d1-536a71e7d332") + ) + (junction + (at 191.77 102.87) + (diameter 0) + (color 0 0 0 0) + (uuid "86ceff7c-efd3-430d-bb34-2db67a596e53") + ) + (junction + (at 133.35 273.05) + (diameter 0) + (color 0 0 0 0) + (uuid "87ff8e34-04ec-440e-9113-c14163430757") + ) + (junction + (at 115.57 45.72) + (diameter 0) + (color 0 0 0 0) + (uuid "8adfcc33-0f3e-49df-a554-40246d890724") + ) + (junction + (at 250.19 90.17) + (diameter 0) + (color 0 0 0 0) + (uuid "8c69767c-568a-44ff-bab0-cd220cf44620") + ) + (junction + (at 368.3 170.18) + (diameter 0) + (color 0 0 0 0) + (uuid "8cd7d867-ebc6-439f-9f61-e04a5833ff62") + ) + (junction + (at 248.92 46.99) + (diameter 0) + (color 0 0 0 0) + (uuid "8d7652f7-dfca-404e-a0e0-03a91eabc93d") + ) + (junction + (at 309.88 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "8dfe4106-ebee-4519-a9f3-88b1d265d4ab") + ) + (junction + (at 73.66 45.72) + (diameter 0) + (color 0 0 0 0) + (uuid "8e3ccf5e-3272-4e80-a8c9-778ed5501597") + ) + (junction + (at 168.91 226.06) + (diameter 0) + (color 0 0 0 0) + (uuid "9058a99e-b61c-4664-89f3-55f84c4fe93f") + ) + (junction + (at 146.05 60.96) + (diameter 0) + (color 0 0 0 0) + (uuid "98d273a6-358d-470a-b6f4-436ec8764499") + ) + (junction + (at 354.33 90.17) + (diameter 0) + (color 0 0 0 0) + (uuid "9c71c7a3-3518-4505-965e-e8cec0969f01") + ) + (junction + (at 290.83 158.75) + (diameter 0) + (color 0 0 0 0) + (uuid "9db57ec1-3c1a-4732-9ef3-7787d88adbfd") + ) + (junction + (at 177.8 63.5) + (diameter 0) + (color 0 0 0 0) + (uuid "a1f52ea2-7dde-4dbf-b863-5e0abdd30166") + ) + (junction + (at 248.92 95.25) + (diameter 0) + (color 0 0 0 0) + (uuid "a26cf61e-3e9c-4c28-98e8-b4ac542ba56e") + ) + (junction + (at 322.58 29.21) + (diameter 0) + (color 0 0 0 0) + (uuid "a2c1f81b-702d-42b7-830d-ccf5b65451d9") + ) + (junction + (at 288.29 74.93) + (diameter 0) + (color 0 0 0 0) + (uuid "a574818b-78b1-4133-9a02-278d805cc8d7") + ) + (junction + (at 200.66 63.5) + (diameter 0) + (color 0 0 0 0) + (uuid "a5892772-3b9a-49a9-b36d-320304aa531c") + ) + (junction + (at 368.3 182.88) + (diameter 0) + (color 0 0 0 0) + (uuid "a763bcb9-4d76-4922-b74d-2c8b180d0c6a") + ) + (junction + (at 140.97 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "a84b8d31-7e60-426e-806f-4e28787753e7") + ) + (junction + (at 157.48 199.39) + (diameter 0) + (color 0 0 0 0) + (uuid "a9b250aa-f70c-4a81-abe4-7818cebade76") + ) + (junction + (at 262.89 46.99) + (diameter 0) + (color 0 0 0 0) + (uuid "a9cb3147-ec2d-4e78-91ed-6876490a1c36") + ) + (junction + (at 91.44 24.13) + (diameter 0) + (color 0 0 0 0) + (uuid "ac11f944-2b90-4033-a7b7-aa8467c164c5") + ) + (junction + (at 139.7 55.88) + (diameter 0) + (color 0 0 0 0) + (uuid "ad2ec9b6-3824-4c78-8533-75e7059717f5") + ) + (junction + (at 341.63 213.36) + (diameter 0) + (color 0 0 0 0) + (uuid "ad8d09eb-b4bd-46d1-bbeb-564154929060") + ) + (junction + (at 355.6 243.84) + (diameter 0) + (color 0 0 0 0) + (uuid "af38bda4-54e6-48d9-af66-07c4241bfe4f") + ) + (junction + (at 269.24 200.66) + (diameter 0) + (color 0 0 0 0) + (uuid "b1857c19-8d76-4656-a19b-e2f1b8703e7f") + ) + (junction + (at 368.3 218.44) + (diameter 0) + (color 0 0 0 0) + (uuid "b40c02be-559f-46d1-88ee-2d6781ef8477") + ) + (junction + (at 73.66 24.13) + (diameter 0) + (color 0 0 0 0) + (uuid "b759e0f5-ff9f-4610-871f-58d29b9ba9c3") + ) + (junction + (at 370.84 232.41) + (diameter 0) + (color 0 0 0 0) + (uuid "b8dcc04a-5acb-47c9-a46c-92ce04a072db") + ) + (junction + (at 251.46 234.95) + (diameter 0) + (color 0 0 0 0) + (uuid "b9626a11-b756-4e47-924f-2cbdb8035ef4") + ) + (junction + (at 341.63 231.14) + (diameter 0) + (color 0 0 0 0) + (uuid "badb857f-217b-4892-97c8-f2b605a46bed") + ) + (junction + (at 298.45 234.95) + (diameter 0) + (color 0 0 0 0) + (uuid "be67258f-1b15-45b9-bacb-edbfa33a9b4f") + ) + (junction + (at 248.92 41.91) + (diameter 0) + (color 0 0 0 0) + (uuid "bfe5a80e-2136-4e7e-a47a-b1ffe2fb05c8") + ) + (junction + (at 86.36 220.98) + (diameter 0) + (color 0 0 0 0) + (uuid "c06596cb-e5e1-4c69-b384-db52f299c54a") + ) + (junction + (at 351.79 74.93) + (diameter 0) + (color 0 0 0 0) + (uuid "c2c97f7e-4efe-46e7-a2ba-26488ff8c06b") + ) + (junction + (at 356.87 170.18) + (diameter 0) + (color 0 0 0 0) + (uuid "c348fccd-d23d-4eb4-a212-ed51a6b8b185") + ) + (junction + (at 370.84 236.22) + (diameter 0) + (color 0 0 0 0) + (uuid "c6872926-27f6-4218-b172-cd944245843c") + ) + (junction + (at 365.76 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "c6e688d9-5475-42be-afc2-45fee02ea371") + ) + (junction + (at 160.02 266.7) + (diameter 0) + (color 0 0 0 0) + (uuid "c6e8d226-bb25-49d2-a059-e69ad07b5554") + ) + (junction + (at 83.82 91.44) + (diameter 0) + (color 0 0 0 0) + (uuid "c729e9f5-d0e5-4e3f-a745-bcc0b902c307") + ) + (junction + (at 209.55 270.51) + (diameter 0) + (color 0 0 0 0) + (uuid "ca44c3c7-e666-4b3f-bc0e-9b698619b873") + ) + (junction + (at 76.2 118.11) + (diameter 0) + (color 0 0 0 0) + (uuid "ca498fbc-9f1a-451f-8d61-06759d487709") + ) + (junction + (at 242.57 228.6) + (diameter 0) + (color 0 0 0 0) + (uuid "ce2ed814-683d-4317-be70-feae92f63d40") + ) + (junction + (at 281.94 114.3) + (diameter 0) + (color 0 0 0 0) + (uuid "ceaf7640-4201-435f-8785-324cddc44461") + ) + (junction + (at 242.57 245.11) + (diameter 0) + (color 0 0 0 0) + (uuid "cf5ac0d0-8e22-4057-ad66-39faf9e02098") + ) + (junction + (at 138.43 24.13) + (diameter 0) + (color 0 0 0 0) + (uuid "d2101ab8-d83c-4d6f-9b35-118376df4f76") + ) + (junction + (at 157.48 148.59) + (diameter 0) + (color 0 0 0 0) + (uuid "d36c9937-431b-4d53-8bf0-e1ea49d2631e") + ) + (junction + (at 54.61 165.1) + (diameter 0) + (color 0 0 0 0) + (uuid "d4bd8c50-0df7-49cb-8490-6b29dbdc0b4b") + ) + (junction + (at 237.49 228.6) + (diameter 0) + (color 0 0 0 0) + (uuid "d550906d-68e8-439c-986a-4f68426534ba") + ) + (junction + (at 130.81 250.19) + (diameter 0) + (color 0 0 0 0) + (uuid "d593513a-5ead-422a-b5d9-94081be98290") + ) + (junction + (at 313.69 234.95) + (diameter 0) + (color 0 0 0 0) + (uuid "d8678e8d-0fb3-4524-bd1d-97dccf260379") + ) + (junction + (at 135.89 111.76) + (diameter 0) + (color 0 0 0 0) + (uuid "d8bac1e0-ed66-4fda-aabb-632b6613b4b0") + ) + (junction + (at 140.97 91.44) + (diameter 0) + (color 0 0 0 0) + (uuid "da68f121-a460-412b-b394-991bb0af25c7") + ) + (junction + (at 160.02 255.27) + (diameter 0) + (color 0 0 0 0) + (uuid "db4ee334-6f43-4e80-a4a2-29e9999bc207") + ) + (junction + (at 251.46 245.11) + (diameter 0) + (color 0 0 0 0) + (uuid "db53ee0d-58ba-4d52-8bea-c1f70c045cdd") + ) + (junction + (at 340.36 162.56) + (diameter 0) + (color 0 0 0 0) + (uuid "dc8e712b-9080-409c-89c5-a114c14f1b2e") + ) + (junction + (at 91.44 45.72) + (diameter 0) + (color 0 0 0 0) + (uuid "def83167-1728-492d-a792-65f5c6dfed2a") + ) + (junction + (at 138.43 111.76) + (diameter 0) + (color 0 0 0 0) + (uuid "e0966d2d-2009-4d43-a7a7-cffdf99b039e") + ) + (junction + (at 44.45 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "e14f62cf-2531-404b-9ef9-fb0c82444f28") + ) + (junction + (at 261.62 90.17) + (diameter 0) + (color 0 0 0 0) + (uuid "e25afd58-33d4-44ff-a8c1-8296d45a318f") + ) + (junction + (at 217.17 261.62) + (diameter 0) + (color 0 0 0 0) + (uuid "e3598704-970d-4ebb-88d8-6a102c07de32") + ) + (junction + (at 228.6 90.17) + (diameter 0) + (color 0 0 0 0) + (uuid "e3da2186-3def-4160-8e59-cbd2f0f19c63") + ) + (junction + (at 137.16 111.76) + (diameter 0) + (color 0 0 0 0) + (uuid "e40c7cb9-ce73-47b6-bbc9-2168c7cb6600") + ) + (junction + (at 340.36 158.75) + (diameter 0) + (color 0 0 0 0) + (uuid "e6846a08-2aa1-41a5-924f-01c401035c71") + ) + (junction + (at 214.63 231.14) + (diameter 0) + (color 0 0 0 0) + (uuid "e70395ee-3ec2-4e12-b8c8-e936b3da5522") + ) + (junction + (at 340.36 231.14) + (diameter 0) + (color 0 0 0 0) + (uuid "e739a1d3-3293-4ff1-ac79-8553cbb0f47c") + ) + (junction + (at 115.57 24.13) + (diameter 0) + (color 0 0 0 0) + (uuid "e7965570-eff5-4358-8339-4e6f81e6afa3") + ) + (junction + (at 194.31 63.5) + (diameter 0) + (color 0 0 0 0) + (uuid "ec5e4175-76c6-48d0-98f4-df6248368286") + ) + (junction + (at 157.48 151.13) + (diameter 0) + (color 0 0 0 0) + (uuid "ed2f32da-86da-4367-b46a-6e6d2f9a355c") + ) + (junction + (at 287.02 74.93) + (diameter 0) + (color 0 0 0 0) + (uuid "f1a0080a-b1ff-46c9-a384-5777e315494b") + ) + (junction + (at 33.02 102.87) + (diameter 0) + (color 0 0 0 0) + (uuid "f4275241-bed0-4b38-b3f1-e0a028a10882") + ) + (junction + (at 209.55 261.62) + (diameter 0) + (color 0 0 0 0) + (uuid "f634ec82-4856-4248-b66e-6542783a756a") + ) + (junction + (at 248.92 165.1) + (diameter 0) + (color 0 0 0 0) + (uuid "f69b4c7b-1c63-4a47-9041-777c0cfdbb65") + ) + (junction + (at 354.33 41.91) + (diameter 0) + (color 0 0 0 0) + (uuid "f77d542f-9221-4a04-b48b-3e3e7f306803") + ) + (junction + (at 351.79 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "f795f37e-4b86-4c89-86f0-5163efb9f509") + ) + (junction + (at 278.13 57.15) + (diameter 0) + (color 0 0 0 0) + (uuid "f7e4b8dc-bab7-4808-9060-b55591d8287f") + ) + (junction + (at 78.74 31.75) + (diameter 0) + (color 0 0 0 0) + (uuid "f85d0364-e803-4117-b8d5-2b462e491b24") + ) + (junction + (at 264.16 187.96) + (diameter 0) + (color 0 0 0 0) + (uuid "f88e137c-e449-42fa-8995-52ff167f2311") + ) + (junction + (at 168.91 87.63) + (diameter 0) + (color 0 0 0 0) + (uuid "f8e34efc-67f7-4095-aaa6-d84599064aa6") + ) + (junction + (at 285.75 48.26) + (diameter 0) + (color 0 0 0 0) + (uuid "f9c47654-b3d2-41c0-8b25-30a5d61d3bcb") + ) + (junction + (at 234.95 182.88) + (diameter 0) + (color 0 0 0 0) + (uuid "ff161479-7516-4bd2-9664-b279f5a707ac") + ) + (junction + (at 62.23 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "ff362bcc-2a01-45ba-a240-504191252c9f") + ) + (junction + (at 67.31 102.87) + (diameter 0) + (color 0 0 0 0) + (uuid "ffb0fc2e-9bb6-4bf5-af13-f65939bde454") + ) + (no_connect + (at 393.7 190.5) + (uuid "0353eb87-14cd-4712-8f76-a7011d7a47a5") + ) + (no_connect + (at 93.98 144.78) + (uuid "1d37b386-5841-43d2-9551-d49b18b96f4c") + ) + (no_connect + (at 93.98 167.64) + (uuid "210078c3-c9ef-4ba4-9352-3524939fa4f0") + ) + (no_connect + (at 58.42 147.32) + (uuid "2c20692f-dcaf-4d9a-90fd-555b65aa93fc") + ) + (no_connect + (at 195.58 143.51) + (uuid "89a7a28c-d5b0-4c5d-b28d-8fb5b0164908") + ) + (no_connect + (at 393.7 185.42) + (uuid "94220c96-79e4-4dd0-bdec-b1d20e71c7a2") + ) + (no_connect + (at 58.42 144.78) + (uuid "94b9c4a9-a272-4c3d-a05e-e7a0383d7fe4") + ) + (no_connect + (at 393.7 66.04) + (uuid "b263f0fb-77ca-4519-9aee-6389a3c69f16") + ) + (no_connect + (at 93.98 170.18) + (uuid "cc009a51-e416-4f43-b722-03dfe7999d8b") + ) + (no_connect + (at 393.7 71.12) + (uuid "e505bf4c-052d-4f34-a803-22d09cfbdf58") + ) + (no_connect + (at 156.21 156.21) + (uuid "fa059ce6-4e07-4d46-9c0a-6fbcb4c09f18") + ) + (no_connect + (at 93.98 147.32) + (uuid "fb13ed0c-af03-4beb-9d8c-dacb9c38792f") + ) + (wire + (pts + (xy 247.65 90.17) (xy 248.92 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "006a7224-4bd4-4c63-b98c-1886ed74bc19") + ) + (wire + (pts + (xy 342.9 66.04) (xy 342.9 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0096a06c-a31e-4cb5-ade0-bcae12dad58a") + ) + (wire + (pts + (xy 237.49 245.11) (xy 242.57 245.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "00a5151b-7766-4b46-8c0d-a0d13cdb80df") + ) + (wire + (pts + (xy 139.7 60.96) (xy 142.24 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "01b65bac-a9af-493d-bdb8-ec4cc8b127db") + ) + (wire + (pts + (xy 62.23 233.68) (xy 52.07 233.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0219796b-9883-43ed-819d-f6d02203592f") + ) + (wire + (pts + (xy 137.16 137.16) (xy 138.43 137.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "025d9743-1c1b-4f54-883c-b9bd06257ee2") + ) + (wire + (pts + (xy 142.24 55.88) (xy 142.24 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "02c35db9-4f17-4e7c-b980-53651ba237a6") + ) + (wire + (pts + (xy 342.9 66.04) (xy 351.79 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "03efc5e9-94af-44c2-8649-38350eba44f6") + ) + (wire + (pts + (xy 209.55 261.62) (xy 203.2 261.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0432f869-9b2e-4ee2-85d6-b1cab45a8240") + ) + (wire + (pts + (xy 322.58 92.71) (xy 325.12 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "044fbeb5-b321-4bf2-91c4-ce4009509486") + ) + (wire + (pts + (xy 100.33 160.02) (xy 93.98 160.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "04cd1618-937e-48bc-abf4-b7bd00dbf7e3") + ) + (wire + (pts + (xy 77.47 215.9) (xy 92.71 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "04e54bcd-1537-4a35-b50d-3c57141a25b0") + ) + (wire + (pts + (xy 67.31 87.63) (xy 69.85 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0502dd89-54cb-4b47-ab09-0ef705ae7c51") + ) + (wire + (pts + (xy 33.02 102.87) (xy 35.56 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "05c6415f-12dc-41af-ad2f-efb2f322d912") + ) + (wire + (pts + (xy 191.77 81.28) (xy 191.77 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "05d42315-ff22-4f0a-a82f-886f93cfeb19") + ) + (wire + (pts + (xy 33.02 167.64) (xy 36.83 167.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "06bbea88-427a-4c0d-9b4f-37e1a4be1b7f") + ) + (wire + (pts + (xy 168.91 163.83) (xy 168.91 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "06d427e8-4a26-47da-a973-be17bb992958") + ) + (wire + (pts + (xy 322.58 87.63) (xy 322.58 77.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "070d8951-1d75-4365-93ec-fdcd8f5acd2e") + ) + (wire + (pts + (xy 318.77 29.21) (xy 322.58 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "07d2aed6-eb1f-4f03-944a-86050a236e25") + ) + (wire + (pts + (xy 289.56 109.22) (xy 289.56 114.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "08818c20-ca20-47d7-927e-7c4b09fb6e57") + ) + (wire + (pts + (xy 356.87 210.82) (xy 355.6 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "08ec0634-7f5c-4f39-b997-fcaa5812fca0") + ) + (wire + (pts + (xy 237.49 228.6) (xy 234.95 228.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "098151a9-865e-4f2d-bcd6-8bfaf8d5aec3") + ) + (wire + (pts + (xy 341.63 90.17) (xy 342.9 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "09ea81b5-5cdc-45cc-a482-e99e9a1ae11a") + ) + (wire + (pts + (xy 284.48 83.82) (xy 284.48 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0a4c09cd-1d27-4897-b912-f64adf220df2") + ) + (wire + (pts + (xy 36.83 167.64) (xy 43.18 167.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0a66c543-0a94-43e1-b0d9-84f590404890") + ) + (wire + (pts + (xy 370.84 223.52) (xy 370.84 232.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0b108034-79c8-4ad9-b152-d1e16365a977") + ) + (wire + (pts + (xy 290.83 158.75) (xy 281.94 158.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0bcf8bae-796a-462b-9599-0e94a715479b") + ) + (wire + (pts + (xy 143.51 152.4) (xy 157.48 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0befe5c6-4009-40b6-8631-ec2fa74f6155") + ) + (wire + (pts + (xy 281.94 210.82) (xy 281.94 212.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0bf541bb-519e-4634-b07e-8005bb24fa07") + ) + (wire + (pts + (xy 340.36 243.84) (xy 336.55 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0c496ae7-4c77-4fc1-8500-a80d9147c421") + ) + (wire + (pts + (xy 33.02 83.82) (xy 33.02 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0c53c37d-5582-46b0-8e38-99327de9e65a") + ) + (wire + (pts + (xy 261.62 180.34) (xy 271.78 180.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0c8f7c9e-50f9-49f4-844e-14522e66c8ae") + ) + (wire + (pts + (xy 266.7 185.42) (xy 266.7 194.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0d9eea46-8084-4ad0-aa8a-af14867daf26") + ) + (wire + (pts + (xy 133.35 273.05) (xy 130.81 273.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0e30aeb5-5bdf-4f60-bca8-2dc6ef924cf9") + ) + (wire + (pts + (xy 193.04 130.81) (xy 193.04 143.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0e8227c0-7b2e-45bd-bd50-8bb9e0ba205e") + ) + (wire + (pts + (xy 147.32 78.74) (xy 147.32 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0ebfb2b9-01f4-437a-9b1e-14e17763ec53") + ) + (wire + (pts + (xy 191.77 101.6) (xy 194.31 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "102e6bc6-2e18-419f-bb56-7352742de593") + ) + (wire + (pts + (xy 66.04 220.98) (xy 62.23 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "10556fa3-462c-4efe-bb7a-aec51fed4dcd") + ) + (wire + (pts + (xy 346.71 223.52) (xy 370.84 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "10c77b1f-dd3e-44c0-860c-64dbc72a168f") + ) + (wire + (pts + (xy 73.66 45.72) (xy 91.44 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "10fe9295-56d4-403d-8cce-bdef49543fd1") + ) + (wire + (pts + (xy 356.87 177.8) (xy 356.87 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "11ae4f16-e7e8-4fb1-b8f1-e5b5e48ce09d") + ) + (wire + (pts + (xy 298.45 243.84) (xy 298.45 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "11e732d6-aa13-4ced-bf71-47a01e32caed") + ) + (wire + (pts + (xy 190.5 93.98) (xy 190.5 123.19) + ) + (stroke + (width 0) + (type default) + ) + (uuid "122f2ee1-449b-4a7e-bb91-0edf336ee2ee") + ) + (wire + (pts + (xy 147.32 102.87) (xy 149.86 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "129d3f0d-49b9-4038-902d-ab8ab37fd31f") + ) + (wire + (pts + (xy 360.68 210.82) (xy 356.87 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "13b7420f-988d-4588-85b5-bd5e71be441d") + ) + (wire + (pts + (xy 347.98 158.75) (xy 340.36 158.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "13b91251-2815-4556-b990-07b34542eb30") + ) + (wire + (pts + (xy 217.17 260.35) (xy 217.17 261.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "13c57109-fd0d-4ad7-8c6b-2386941b46ec") + ) + (wire + (pts + (xy 83.82 91.44) (xy 91.44 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "13d4580f-fe6b-4024-8c5e-f26208a455cc") + ) + (wire + (pts + (xy 168.91 63.5) (xy 168.91 78.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "13df86b9-dc48-4e8b-8f95-23a398c07849") + ) + (wire + (pts + (xy 281.94 158.75) (xy 264.16 158.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "140cc12d-e919-4c1a-9d67-05c6546571a4") + ) + (wire + (pts + (xy 134.62 90.17) (xy 134.62 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "141a87ba-4485-4471-853c-d564cbf57745") + ) + (wire + (pts + (xy 191.77 220.98) (xy 165.1 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "14c870f8-aab9-46b8-a266-38910aa8ce38") + ) + (wire + (pts + (xy 148.59 55.88) (xy 142.24 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "14e5a28f-d02a-4070-855b-013806e080bb") + ) + (wire + (pts + (xy 43.18 152.4) (xy 36.83 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1500cb0e-7789-4cc6-a977-88a41302c6b7") + ) + (wire + (pts + (xy 138.43 259.08) (xy 138.43 264.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "16223034-97b1-4871-8a27-6256c7786c6f") + ) + (wire + (pts + (xy 100.33 165.1) (xy 93.98 165.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1733dbb6-752b-479d-8566-4fc071749be7") + ) + (wire + (pts + (xy 370.84 236.22) (xy 367.03 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "17c5f9c8-f509-4124-a366-e35fe89ccc44") + ) + (wire + (pts + (xy 36.83 24.13) (xy 54.61 24.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "17f308f5-d87b-4634-98a7-511bfd319c79") + ) + (wire + (pts + (xy 243.84 22.86) (xy 248.92 22.86) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1804f88e-b698-4e0f-bd01-bc9ae29dc09a") + ) + (wire + (pts + (xy 53.34 129.54) (xy 58.42 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "180f0984-8aa2-46d2-af7d-02da39356423") + ) + (wire + (pts + (xy 138.43 250.19) (xy 138.43 257.81) + ) + (stroke + (width 0) + (type default) + ) + (uuid "18932e36-3300-473e-a44f-47801bce3f0b") + ) + (wire + (pts + (xy 383.54 247.65) (xy 383.54 232.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "18ccc016-9b3d-4e77-ba73-9d386a22f88a") + ) + (wire + (pts + (xy 261.62 182.88) (xy 269.24 182.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1a12ccf3-d47d-4e0e-85b5-b958ef82c978") + ) + (wire + (pts + (xy 168.91 241.3) (xy 168.91 226.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1a7519c2-4585-4ec2-8531-05c4c8dde9af") + ) + (wire + (pts + (xy 389.89 170.18) (xy 386.08 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1aba7fae-4a0d-48bb-8459-d76b7e1aa8bc") + ) + (wire + (pts + (xy 134.62 158.75) (xy 143.51 158.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1bd270a3-85a4-4a85-9963-0b9469dec2bf") + ) + (wire + (pts + (xy 46.99 92.71) (xy 46.99 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1bf5b16f-1fd9-4a6c-a257-c1d5d7098b7a") + ) + (wire + (pts + (xy 303.53 194.31) (xy 300.99 194.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1c083c5f-cde4-4867-aa10-13346f02675f") + ) + (wire + (pts + (xy 217.17 270.51) (xy 209.55 270.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1c33bc00-573f-4b3e-b1a0-dbf57b7670db") + ) + (wire + (pts + (xy 92.71 223.52) (xy 86.36 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1c53d8b9-c773-41a5-ab76-27e7df784d88") + ) + (wire + (pts + (xy 55.88 167.64) (xy 58.42 167.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1c9394cb-0772-44bf-8072-4334feb9e26e") + ) + (wire + (pts + (xy 355.6 158.75) (xy 368.3 158.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1c9ffef9-a4fd-4896-acc6-8537f549b99e") + ) + (wire + (pts + (xy 281.94 210.82) (xy 269.24 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1cc8afd5-4e35-412f-9c2e-6d51ab6626b8") + ) + (wire + (pts + (xy 248.92 165.1) (xy 248.92 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1cd06bca-213b-488c-ae79-0f85952f2c48") + ) + (wire + (pts + (xy 234.95 182.88) (xy 234.95 228.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1d912065-fc77-4b17-a56b-97da726d8140") + ) + (wire + (pts + (xy 251.46 234.95) (xy 250.19 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1db8c691-0270-4a0d-a9c2-1399c68df137") + ) + (wire + (pts + (xy 100.33 142.24) (xy 93.98 142.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1dd63bd6-7a17-491f-b6e3-16f4f25cb582") + ) + (wire + (pts + (xy 295.91 234.95) (xy 298.45 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1e2889b7-1664-4225-bc9a-882889a54a67") + ) + (wire + (pts + (xy 336.55 240.03) (xy 336.55 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1e6feb1e-4a29-4872-ab8d-63979905726b") + ) + (wire + (pts + (xy 340.36 208.28) (xy 339.09 208.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1e7eb9e2-5df8-4a94-927c-eb84a94a00ba") + ) + (wire + (pts + (xy 261.62 95.25) (xy 261.62 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "20054d1e-2859-46f1-8793-9861acd21798") + ) + (wire + (pts + (xy 43.18 140.97) (xy 55.88 140.97) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2043d5ec-c361-41c5-bec8-40a47ee9a0b1") + ) + (wire + (pts + (xy 220.98 81.28) (xy 231.14 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "21e9b771-d811-41ce-9ac2-68507e295485") + ) + (wire + (pts + (xy 297.18 76.2) (xy 297.18 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "21f9fa40-078f-43fb-aa16-80d91bb54516") + ) + (wire + (pts + (xy 389.89 182.88) (xy 389.89 175.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "22012085-553f-4fdf-8d22-8e4e4395141f") + ) + (wire + (pts + (xy 261.62 41.91) (xy 262.89 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "22ec1a0a-44b5-4d24-85d3-c2528d47e91b") + ) + (wire + (pts + (xy 85.09 86.36) (xy 91.44 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2301b544-0ca3-49a1-8850-c1737d1c923e") + ) + (wire + (pts + (xy 340.36 162.56) (xy 340.36 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "233895fd-96b3-4e23-b437-1b42ee4564cd") + ) + (wire + (pts + (xy 209.55 147.32) (xy 210.82 147.32) + ) + (stroke + (width 0) + (type default) + ) + (uuid "236c83a1-c57d-4944-8333-7d041b0d1f8f") + ) + (wire + (pts + (xy 146.05 102.87) (xy 147.32 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "24b5b8ba-4e74-49f3-be6e-c9ab0b76f34a") + ) + (wire + (pts + (xy 157.48 226.06) (xy 156.21 226.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "24c8f598-7997-4531-8b77-cf0a88750d12") + ) + (wire + (pts + (xy 279.4 92.71) (xy 278.13 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "24d79d48-9c3c-4bbd-b757-5516fe809a5a") + ) + (wire + (pts + (xy 287.02 83.82) (xy 297.18 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "24e7f878-450c-472e-a999-de4af679ef66") + ) + (wire + (pts + (xy 322.58 77.47) (xy 326.39 77.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "258165c0-4de2-40e6-bd3a-78c456e3fcf9") + ) + (wire + (pts + (xy 370.84 232.41) (xy 370.84 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "25cc7b7c-1960-494a-ac45-2fff047567cf") + ) + (wire + (pts + (xy 389.89 193.04) (xy 389.89 205.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "26721c6c-d8eb-4d36-a4ed-db5e9034f0f2") + ) + (wire + (pts + (xy 303.53 175.26) (xy 300.99 175.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2680a1a4-7d91-41cd-851a-e3147a01441f") + ) + (wire + (pts + (xy 285.75 60.96) (xy 285.75 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "26b9f782-e4e7-4d25-b7b2-797352540450") + ) + (wire + (pts + (xy 134.62 81.28) (xy 140.97 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "27e94aab-d2d9-417d-9215-58fbaa813b93") + ) + (wire + (pts + (xy 140.97 90.17) (xy 140.97 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "296b5b5a-2893-4d0c-92ca-59abc34351ec") + ) + (wire + (pts + (xy 157.48 151.13) (xy 157.48 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "29d30217-88e9-437d-806c-253d4812dee2") + ) + (wire + (pts + (xy 316.23 231.14) (xy 313.69 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "29f80df6-554a-422f-bf8a-7ca8392d6d37") + ) + (wire + (pts + (xy 346.71 243.84) (xy 340.36 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2a4f83da-922b-4322-b69a-89c5122c0dc0") + ) + (wire + (pts + (xy 242.57 228.6) (xy 242.57 229.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2a664902-8494-4a17-a2b3-c1764f2fb1af") + ) + (wire + (pts + (xy 243.84 172.72) (xy 234.95 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2b1f86ea-f36f-451c-b634-b1f82d99ce99") + ) + (wire + (pts + (xy 130.81 213.36) (xy 130.81 228.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2b78b2e4-f970-450e-aeb4-7ecf91770ddd") + ) + (wire + (pts + (xy 142.24 60.96) (xy 146.05 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2bdcffd7-16e3-4501-afde-93c3b28c1321") + ) + (wire + (pts + (xy 209.55 226.06) (xy 201.93 226.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2c0b1b9a-a823-44af-8743-b8923307116b") + ) + (wire + (pts + (xy 35.56 147.32) (xy 35.56 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2c2ab534-c0a3-462f-a7c5-1c1a7fc70558") + ) + (wire + (pts + (xy 293.37 158.75) (xy 290.83 158.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2c3dd24c-d320-4f72-a45d-080f6f569018") + ) + (wire + (pts + (xy 271.78 180.34) (xy 271.78 203.2) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2cc95033-2ffd-457a-b460-042b6811a0a7") + ) + (wire + (pts + (xy 283.21 74.93) (xy 284.48 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2cd45b2b-1aa4-4213-9717-a8e274e89409") + ) + (wire + (pts + (xy 355.6 198.12) (xy 355.6 205.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2d409e01-3faf-41ab-af9b-7e94a3e14aa4") + ) + (wire + (pts + (xy 248.92 41.91) (xy 251.46 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2d51710b-f9ab-45b3-bd2c-90b8e066935f") + ) + (wire + (pts + (xy 187.96 162.56) (xy 187.96 168.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2da946a4-6bc2-4d9f-942b-9dd61b4d1201") + ) + (wire + (pts + (xy 115.57 93.98) (xy 110.49 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2df8cbbd-1619-42d3-a6cd-eb047c7eb708") + ) + (wire + (pts + (xy 168.91 63.5) (xy 177.8 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2e313fba-a3ff-4ee2-8543-3973ddaae715") + ) + (wire + (pts + (xy 85.09 99.06) (xy 91.44 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2f035ef9-65f2-44ce-b886-e20cb2745d8e") + ) + (wire + (pts + (xy 76.2 118.11) (xy 92.71 118.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2f3312cf-e6d4-44cf-9aec-9190e8a5ced5") + ) + (wire + (pts + (xy 384.81 41.91) (xy 354.33 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2f4e9f83-0d7e-45bf-a9a7-0d6129667bb0") + ) + (wire + (pts + (xy 340.36 231.14) (xy 340.36 232.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2fab48ac-e479-47ed-bcc8-5620c82e5347") + ) + (wire + (pts + (xy 341.63 77.47) (xy 341.63 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2ff18238-8374-466f-92a6-53cb9482a267") + ) + (wire + (pts + (xy 287.02 74.93) (xy 288.29 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2ffcedc1-af80-4864-9dba-1195641ada9e") + ) + (wire + (pts + (xy 217.17 251.46) (xy 217.17 252.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "308776a2-297c-4db9-9752-82499d53952d") + ) + (wire + (pts + (xy 242.57 227.33) (xy 242.57 228.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "30a4cee6-cd7a-4964-820c-7c1faf3dcf66") + ) + (wire + (pts + (xy 368.3 218.44) (xy 360.68 218.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "30efec83-b177-45ec-8503-d4536b1c22a8") + ) + (wire + (pts + (xy 322.58 29.21) (xy 326.39 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "311624b3-6f3a-4329-8766-bd007640c291") + ) + (wire + (pts + (xy 260.35 95.25) (xy 261.62 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "31705500-6fae-4b83-b2db-9ae3c0219923") + ) + (wire + (pts + (xy 240.03 46.99) (xy 223.52 46.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "31e2bca1-de0d-4d30-b569-a5f30945ba4d") + ) + (wire + (pts + (xy 16.51 24.13) (xy 21.59 24.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "321668b8-23b9-488a-a1fa-60b69b37d51e") + ) + (wire + (pts + (xy 289.56 114.3) (xy 281.94 114.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3301bfec-01b0-4c3c-8b98-e97052a60a41") + ) + (wire + (pts + (xy 341.63 107.95) (xy 341.63 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "332568a7-09b7-4f42-83b2-91df7c82d38f") + ) + (wire + (pts + (xy 260.35 90.17) (xy 261.62 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3368a482-c99d-489d-8995-13e66972a36f") + ) + (wire + (pts + (xy 280.67 44.45) (xy 279.4 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "337d5b54-d84c-4880-ad11-a49dc7f49246") + ) + (wire + (pts + (xy 36.83 161.29) (xy 36.83 167.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "34095e95-cf96-408f-9e03-71f50fc8365a") + ) + (wire + (pts + (xy 214.63 231.14) (xy 201.93 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3413ddf6-5c37-4ea5-8f65-cfafda0cb185") + ) + (wire + (pts + (xy 393.7 168.91) (xy 396.24 168.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "341a19ec-26b7-4f87-a71b-20c2594599d0") + ) + (wire + (pts + (xy 278.13 55.88) (xy 278.13 57.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "343c8fb3-c477-4cec-bbe6-ea0a62ac2829") + ) + (wire + (pts + (xy 271.78 175.26) (xy 271.78 180.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "344bb1ae-1a78-427c-b460-6443231e8f76") + ) + (wire + (pts + (xy 309.88 59.69) (xy 309.88 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "34f42a79-368b-47b6-b659-48f94d624fab") + ) + (wire + (pts + (xy 368.3 182.88) (xy 368.3 184.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3504e7c8-bafe-461a-9da0-83916c3a891b") + ) + (wire + (pts + (xy 309.88 107.95) (xy 318.77 107.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "35895844-443e-4ec2-80af-d4684ed5ce92") + ) + (wire + (pts + (xy 34.29 24.13) (xy 34.29 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "358aa415-49bf-4b48-8c90-6ca938c8d283") + ) + (wire + (pts + (xy 393.7 63.5) (xy 384.81 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "35b66c28-8106-4411-ae43-20ad55531bb1") + ) + (wire + (pts + (xy 78.74 102.87) (xy 78.74 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "368a4704-f219-4f11-8bce-53fbb3abe41d") + ) + (wire + (pts + (xy 334.01 29.21) (xy 341.63 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "39187f9a-5dfa-42ac-bbfa-a53c47e736a8") + ) + (wire + (pts + (xy 52.07 170.18) (xy 52.07 173.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3918ab9e-e2c0-4316-8cad-1347d95ee044") + ) + (wire + (pts + (xy 248.92 71.12) (xy 248.92 78.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "39c0e261-a2d6-45ca-ba44-3db9b924c01a") + ) + (wire + (pts + (xy 378.46 170.18) (xy 375.92 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3a050a31-f5ad-47ac-bf6f-d2498b742be9") + ) + (wire + (pts + (xy 251.46 243.84) (xy 251.46 245.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3a118fa4-8db6-4701-b51f-9f1412f7e936") + ) + (wire + (pts + (xy 227.33 203.2) (xy 227.33 228.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3a557ddf-c839-4804-9720-cffdd8ef6a98") + ) + (wire + (pts + (xy 351.79 74.93) (xy 365.76 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3a63ca0b-445d-4aaf-9f7f-3134b038698d") + ) + (wire + (pts + (xy 194.31 71.12) (xy 200.66 71.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3b46a365-93ca-484a-86f1-d37814302553") + ) + (wire + (pts + (xy 203.2 270.51) (xy 209.55 270.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3b630958-6bed-458a-90c6-0a9adf7d9f57") + ) + (wire + (pts + (xy 248.92 46.99) (xy 248.92 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3b86b763-1ce6-4443-889f-da44f67df70a") + ) + (wire + (pts + (xy 347.98 74.93) (xy 351.79 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3b947955-27bc-4258-b7a1-0768a41cd971") + ) + (wire + (pts + (xy 139.7 55.88) (xy 142.24 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3bb92591-1f1b-49d9-b882-4a6a75c93a8d") + ) + (wire + (pts + (xy 271.78 203.2) (xy 261.62 203.2) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3c1b2d04-bc06-42ab-896c-7f27f62994e3") + ) + (wire + (pts + (xy 281.94 104.14) (xy 281.94 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3c1d7c91-133f-4b88-a55b-4e0c34c7505c") + ) + (wire + (pts + (xy 248.92 95.25) (xy 248.92 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3c52deb7-5b26-48cf-ab62-743a7594cf1d") + ) + (wire + (pts + (xy 322.58 100.33) (xy 322.58 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3ca6178e-bc1d-4c11-a890-a20e705a878c") + ) + (wire + (pts + (xy 177.8 255.27) (xy 168.91 255.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3cda9c39-2bdb-4417-8122-da0fb38efb67") + ) + (wire + (pts + (xy 318.77 77.47) (xy 322.58 77.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3d80e8bd-20db-4696-ba42-8d4190cff770") + ) + (wire + (pts + (xy 223.52 88.9) (xy 219.71 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3d86adc0-9405-47f5-8268-8541acd0d36b") + ) + (wire + (pts + (xy 83.82 96.52) (xy 83.82 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3df862ea-27e2-4b9e-a783-f379cc5b30c5") + ) + (wire + (pts + (xy 220.98 41.91) (xy 220.98 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3e2bb402-7096-463f-ac2b-e38d18f19960") + ) + (wire + (pts + (xy 351.79 66.04) (xy 356.87 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3e886b40-a6c1-4eea-880b-1f63b0e2e492") + ) + (wire + (pts + (xy 91.44 95.25) (xy 91.44 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3ed58a58-fbe9-4c19-b200-fb41ba161827") + ) + (wire + (pts + (xy 381 247.65) (xy 383.54 247.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f503426-2e47-4b2f-baa1-914dac3b403d") + ) + (wire + (pts + (xy 373.38 247.65) (xy 355.6 247.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f70cc38-7050-40a9-bbb8-516c359dbe3d") + ) + (wire + (pts + (xy 162.56 199.39) (xy 157.48 199.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f83987c-d4bc-42d1-a581-fa7bbf9354b8") + ) + (wire + (pts + (xy 90.17 222.25) (xy 87.63 222.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4011f609-c66e-412b-a288-28453c69746f") + ) + (wire + (pts + (xy 50.8 167.64) (xy 55.88 167.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "401a7d4a-e768-4951-bbd5-79952fbef755") + ) + (wire + (pts + (xy 214.63 224.79) (xy 214.63 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "406aa19e-1c16-45b8-bd63-0784f25e1114") + ) + (wire + (pts + (xy 35.56 140.97) (xy 35.56 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "40ead758-486c-419d-a27e-9d95fb83bc23") + ) + (wire + (pts + (xy 281.94 83.82) (xy 284.48 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "417af642-f14a-4012-a632-f77108802b04") + ) + (wire + (pts + (xy 193.04 162.56) (xy 193.04 168.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "41bfa75e-fb2a-4a61-80f8-d2bb576990ea") + ) + (wire + (pts + (xy 355.6 194.31) (xy 368.3 194.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "433aff84-18ba-410d-a13a-c92197159f39") + ) + (wire + (pts + (xy 269.24 210.82) (xy 269.24 200.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "43564bcb-170e-4e1d-8f3e-3eb9ae56d2d4") + ) + (wire + (pts + (xy 328.93 165.1) (xy 328.93 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "43569bbb-8efc-404f-8877-1abf30137404") + ) + (wire + (pts + (xy 191.77 104.14) (xy 191.77 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "43c9f61d-14f0-4c7b-af56-c82f218160fd") + ) + (wire + (pts + (xy 285.75 66.04) (xy 278.13 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "43edd344-3468-411e-a8c3-e9a65d4ae387") + ) + (wire + (pts + (xy 289.56 96.52) (xy 281.94 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "448460f5-0dbe-42c9-b19c-d6d376da0038") + ) + (wire + (pts + (xy 41.91 218.44) (xy 40.64 218.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4552cb31-dc05-42e9-9419-f6d39550e042") + ) + (wire + (pts + (xy 261.62 83.82) (xy 261.62 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "46f82a62-1335-44d7-994e-f50927316d45") + ) + (wire + (pts + (xy 62.23 223.52) (xy 62.23 233.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "485c14ab-2d09-4b06-8dd3-a75084767821") + ) + (wire + (pts + (xy 219.71 101.6) (xy 226.06 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "49b2f91a-d89b-4b85-9446-6e4bd78fc2b7") + ) + (wire + (pts + (xy 100.33 132.08) (xy 93.98 132.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "49c7c55b-6716-4272-8245-fe4cc782c137") + ) + (wire + (pts + (xy 162.56 205.74) (xy 162.56 208.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4a1e3567-142e-40f4-b3cd-dec0a7f295a7") + ) + (wire + (pts + (xy 264.16 187.96) (xy 264.16 195.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4ac2936a-fe3d-4885-a471-81d0e8fc1ef7") + ) + (wire + (pts + (xy 288.29 74.93) (xy 297.18 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4b25cb88-1dbf-465c-b1a1-fc84e40d9ff4") + ) + (wire + (pts + (xy 139.7 38.1) (xy 137.16 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4c70d2ef-69b6-4181-9bd0-827740f95de5") + ) + (wire + (pts + (xy 313.69 165.1) (xy 313.69 175.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4dbddf2e-564d-48ae-907c-8a5d337bd24f") + ) + (wire + (pts + (xy 142.24 55.88) (xy 142.24 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4e2be0e9-3b1f-47b8-827e-dfcf6f2afbb6") + ) + (wire + (pts + (xy 256.54 245.11) (xy 251.46 245.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4e4589b6-5a65-453e-927a-3dbd7cce763e") + ) + (wire + (pts + (xy 76.2 118.11) (xy 76.2 121.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4f07f20e-1f87-47e1-9331-66cd21178af4") + ) + (wire + (pts + (xy 248.92 46.99) (xy 254 46.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4f6ad787-1035-415b-93ba-577b43f0d0ed") + ) + (wire + (pts + (xy 81.28 91.44) (xy 83.82 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "500508ee-03aa-4c53-a762-ab5de467992c") + ) + (wire + (pts + (xy 350.52 41.91) (xy 354.33 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "50c2cc93-c1b2-4c2d-b7d3-786df0139961") + ) + (wire + (pts + (xy 185.42 63.5) (xy 186.69 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "512d87a8-40ef-4412-b4a2-136ff227d159") + ) + (wire + (pts + (xy 313.69 200.66) (xy 313.69 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "51c052e1-90ce-44f8-8db0-5e1870b511db") + ) + (wire + (pts + (xy 242.57 245.11) (xy 242.57 240.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5233a8f1-febf-4a4c-9d8c-4e62abe0b6d7") + ) + (wire + (pts + (xy 248.92 165.1) (xy 243.84 165.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5267493c-ef79-4758-89a5-ff3e77c4b5a9") + ) + (wire + (pts + (xy 205.74 148.59) (xy 209.55 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "52f3befb-7450-4a40-9caf-b92ec99cbf2c") + ) + (wire + (pts + (xy 156.21 153.67) (xy 162.56 153.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "542de239-179c-4128-88dc-0ca16cc28ba7") + ) + (wire + (pts + (xy 168.91 95.25) (xy 168.91 97.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "545cf554-3060-4090-9e26-b00f0538c399") + ) + (wire + (pts + (xy 237.49 228.6) (xy 242.57 228.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "54f16bf3-dd72-4305-9384-f03bdd063c20") + ) + (wire + (pts + (xy 78.74 31.75) (xy 91.44 31.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5637f307-16cd-4b39-83c5-1e615318f24f") + ) + (wire + (pts + (xy 135.89 228.6) (xy 130.81 228.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "56be4719-4ca3-45c0-8f5e-21e6ca41fa65") + ) + (wire + (pts + (xy 67.31 92.71) (xy 67.31 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "56f29e5b-d39e-4d4f-b125-482d963579be") + ) + (wire + (pts + (xy 168.91 266.7) (xy 160.02 266.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "571a81e5-9ecf-4965-9af7-2823cbb38860") + ) + (wire + (pts + (xy 193.04 168.91) (xy 198.12 168.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "57a3138f-4414-4697-a6b0-e0975401c296") + ) + (wire + (pts + (xy 177.8 62.23) (xy 177.8 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "57a557ef-3099-4f71-aa7f-ec2e27473df8") + ) + (wire + (pts + (xy 115.57 218.44) (xy 111.76 218.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "57c85413-b309-49c5-9070-6e505724f2db") + ) + (wire + (pts + (xy 137.16 151.13) (xy 137.16 144.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5817c8ba-00c2-490f-a50f-9067dd5c08c0") + ) + (wire + (pts + (xy 347.98 74.93) (xy 347.98 76.2) + ) + (stroke + (width 0) + (type default) + ) + (uuid "58d4ae0b-7dd6-4c5a-b11f-b0239cd9a1c9") + ) + (wire + (pts + (xy 214.63 220.98) (xy 201.93 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "58fd23bc-3fed-49f2-99d0-4f12dfc925d3") + ) + (wire + (pts + (xy 100.33 154.94) (xy 93.98 154.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "59290128-8194-491a-a15e-92fa5dff0175") + ) + (wire + (pts + (xy 157.48 220.98) (xy 156.21 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "592b2e33-899e-47e0-8557-c8e884f98cdd") + ) + (wire + (pts + (xy 340.36 231.14) (xy 341.63 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "599e2ba1-09a9-4c8a-9b2a-a7d8ebcfa755") + ) + (wire + (pts + (xy 368.3 218.44) (xy 368.3 219.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "59b2376d-7a75-4160-8e48-29578d01218e") + ) + (wire + (pts + (xy 248.92 58.42) (xy 248.92 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "59d11be4-0439-42f3-a513-ac541f83d273") + ) + (wire + (pts + (xy 261.62 187.96) (xy 264.16 187.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5ba361f9-fbcf-4ac5-bd8b-91bc12f100a9") + ) + (wire + (pts + (xy 243.84 71.12) (xy 248.92 71.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5c01434a-39ee-4b4d-aa31-4b862635781b") + ) + (wire + (pts + (xy 207.01 63.5) (xy 207.01 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5c18ae76-a766-4a71-ad0a-21b82cec632e") + ) + (wire + (pts + (xy 138.43 110.49) (xy 138.43 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5d18a406-06b5-44bb-9a99-c83f5af7f8d1") + ) + (wire + (pts + (xy 219.71 104.14) (xy 223.52 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5d2e1f9c-dc64-4377-b938-9519bc7355f6") + ) + (wire + (pts + (xy 21.59 208.28) (xy 21.59 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5d3fa86a-4349-4229-b902-b4b2a392e3dd") + ) + (wire + (pts + (xy 368.3 194.31) (xy 368.3 205.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5d5a8061-7300-479c-b54b-904f2288eab9") + ) + (wire + (pts + (xy 336.55 231.14) (xy 340.36 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5da835f1-6743-44bd-9c02-1fd591e17cfc") + ) + (wire + (pts + (xy 190.5 190.5) (xy 236.22 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5db625ed-7c99-4da5-b169-a1dd5178dd80") + ) + (wire + (pts + (xy 69.85 215.9) (xy 62.23 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5e2d8cc3-9855-46cb-bbd6-a1905d6e4e1a") + ) + (wire + (pts + (xy 21.59 204.47) (xy 22.86 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5e3bd365-801e-47d9-bfe4-b3d2e2aeb8ae") + ) + (wire + (pts + (xy 287.02 74.93) (xy 287.02 76.2) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5e83cb40-05ed-48aa-8486-b9b8ecf22f8d") + ) + (wire + (pts + (xy 248.92 22.86) (xy 248.92 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5e9171df-10c9-4e6d-9e32-8c6a70eddff2") + ) + (wire + (pts + (xy 194.31 81.28) (xy 191.77 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5f0f3bfe-bc38-438d-a7c5-6f5fc8790eb6") + ) + (wire + (pts + (xy 265.43 35.56) (xy 262.89 35.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5f221f4e-1869-41f0-94c6-49179cd5dc67") + ) + (wire + (pts + (xy 262.89 46.99) (xy 264.16 46.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5f324e79-11f4-4192-b963-2379d08f1634") + ) + (wire + (pts + (xy 153.67 273.05) (xy 148.59 273.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5f49d035-8d85-40ad-9e35-56da4f106d57") + ) + (wire + (pts + (xy 356.87 213.36) (xy 356.87 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5f5521e8-658d-4fdf-a23e-b6cb614811a2") + ) + (wire + (pts + (xy 46.99 87.63) (xy 41.91 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5f5f0d2d-5421-4596-afd1-8fcf048bf127") + ) + (wire + (pts + (xy 341.63 41.91) (xy 342.9 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5fd112a9-4234-41d9-bef5-3fc30eecbe6a") + ) + (wire + (pts + (xy 43.18 135.89) (xy 57.15 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "60487a51-0610-47dc-a75f-e330aa6e6f7a") + ) + (wire + (pts + (xy 264.16 158.75) (xy 264.16 187.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "614074e0-d036-42bf-bccd-6d53c70f7277") + ) + (wire + (pts + (xy 34.29 45.72) (xy 44.45 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "61faa6bb-718b-463a-8bb7-7bca397f7a7b") + ) + (wire + (pts + (xy 393.7 180.34) (xy 393.7 168.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "62aedcc2-eb16-4723-be17-30ed9ce5e253") + ) + (wire + (pts + (xy 109.22 24.13) (xy 115.57 24.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "62f7e01d-20f3-43cc-b577-4bd22f3c2ab4") + ) + (wire + (pts + (xy 129.54 102.87) (xy 130.81 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6407b0a1-9d62-4a4d-b036-9cfdeea764a4") + ) + (wire + (pts + (xy 293.37 194.31) (xy 290.83 194.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "656badbf-27fd-472a-9087-a2850896bc62") + ) + (wire + (pts + (xy 256.54 234.95) (xy 256.54 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "65a49279-f60f-418e-8e05-88f0a1bb74b2") + ) + (wire + (pts + (xy 234.95 182.88) (xy 234.95 180.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "65ceaf14-ec65-4f79-9d66-bb8305e68db6") + ) + (wire + (pts + (xy 152.4 62.23) (xy 147.32 62.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "65e17505-7379-4b56-9971-c61abb4c6ece") + ) + (wire + (pts + (xy 115.57 220.98) (xy 111.76 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "666fc372-a0a6-4494-8a06-a8dfe562ac3e") + ) + (wire + (pts + (xy 205.74 153.67) (xy 209.55 153.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "66778e8a-a6e3-4751-a80c-e0c3cbd508aa") + ) + (wire + (pts + (xy 247.65 95.25) (xy 248.92 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "66b5cf3a-d3e6-4e48-a67d-abadf6d62f37") + ) + (wire + (pts + (xy 78.74 102.87) (xy 76.2 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "673080f3-2c87-47d5-8b42-d476172bc54b") + ) + (wire + (pts + (xy 135.89 111.76) (xy 137.16 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "67ec2a01-20f7-40af-bae4-1b0ebf49c692") + ) + (wire + (pts + (xy 73.66 31.75) (xy 78.74 31.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6867336b-5e3d-4b62-b179-242131ea1833") + ) + (wire + (pts + (xy 261.62 46.99) (xy 262.89 46.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6884ccce-a8a8-42ff-a6f1-ca970e5ca00e") + ) + (wire + (pts + (xy 100.33 137.16) (xy 93.98 137.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "68bc8700-07c6-439e-9c10-1f784a4f2f43") + ) + (wire + (pts + (xy 273.05 83.82) (xy 279.4 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "68cd9282-785b-4e0f-9adb-90c926ed4f14") + ) + (wire + (pts + (xy 340.36 240.03) (xy 340.36 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "68d4a924-025b-47a5-a557-1c9fc4c1e8a0") + ) + (wire + (pts + (xy 156.21 158.75) (xy 162.56 158.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "695bd752-bcb6-47c6-9fc1-7aec5bdc0d83") + ) + (wire + (pts + (xy 309.88 92.71) (xy 311.15 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "695e80ba-2d46-408a-834c-dd194bbfe14b") + ) + (wire + (pts + (xy 259.08 234.95) (xy 256.54 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6a18e051-8bfd-4f30-91fc-9879929c2bc4") + ) + (wire + (pts + (xy 190.5 176.53) (xy 190.5 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6b181c1c-d63d-401b-a455-4a75b3e9c7fd") + ) + (wire + (pts + (xy 389.89 187.96) (xy 389.89 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6bf0a648-2d56-4f16-b56e-efaa12cf9d6d") + ) + (wire + (pts + (xy 139.7 144.78) (xy 139.7 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6d44d147-080f-4b5f-922c-93c0c7de7600") + ) + (wire + (pts + (xy 60.96 102.87) (xy 67.31 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6de4419c-5dd3-41d3-9a61-c7b77287b1bb") + ) + (wire + (pts + (xy 100.33 152.4) (xy 93.98 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6f7268dc-dcca-411e-a2e6-4064b5f4801d") + ) + (wire + (pts + (xy 147.32 81.28) (xy 147.32 82.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6f81a5c7-8225-472c-9e71-065b943aa5cb") + ) + (wire + (pts + (xy 52.07 248.92) (xy 66.04 248.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6f9c3c5f-84e3-410b-93e5-3518df01d2f1") + ) + (wire + (pts + (xy 156.21 151.13) (xy 157.48 151.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6fbec33d-0670-4408-b4ed-b31bef456be3") + ) + (wire + (pts + (xy 318.77 44.45) (xy 322.58 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6fc8b9ca-14ad-42de-8469-7f0f5fe13fab") + ) + (wire + (pts + (xy 309.88 92.71) (xy 309.88 107.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6ff40fd5-a81f-4095-9690-020e944daaa2") + ) + (wire + (pts + (xy 327.66 66.04) (xy 326.39 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "70e41fe9-ea67-4f4b-8b5b-bf057f499d49") + ) + (wire + (pts + (xy 110.49 96.52) (xy 118.11 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "70e73789-9cd8-4dcf-aa2c-4498eda1f2b7") + ) + (wire + (pts + (xy 187.96 193.04) (xy 236.22 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "70fb6bef-3e56-4aa9-8656-fa18db0bcfa6") + ) + (wire + (pts + (xy 341.63 213.36) (xy 356.87 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7198ecfe-b89f-48f6-ad66-4cff5442199b") + ) + (wire + (pts + (xy 350.52 90.17) (xy 354.33 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "71f4c6e8-aa20-47f2-a8fa-9b14f0d2a826") + ) + (wire + (pts + (xy 165.1 87.63) (xy 168.91 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "72cd5b80-8618-4b77-89e5-5c4701da00e9") + ) + (wire + (pts + (xy 261.62 95.25) (xy 262.89 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "731eb50a-fd45-4140-871c-1c335862a0c4") + ) + (wire + (pts + (xy 228.6 99.06) (xy 228.6 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "74331d8d-ee48-435c-badf-5f2594a4e0ab") + ) + (wire + (pts + (xy 356.87 175.26) (xy 355.6 175.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7446ebcb-41ce-4149-83f7-4258e323bda2") + ) + (wire + (pts + (xy 78.74 88.9) (xy 91.44 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "74b5429a-b946-4b62-b10a-843a541f768e") + ) + (wire + (pts + (xy 264.16 74.93) (xy 267.97 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "75286cc9-b4ac-4c9b-88d4-2bc98fc5b694") + ) + (wire + (pts + (xy 309.88 29.21) (xy 311.15 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "755338f6-12d9-4c5b-b302-055baba84c87") + ) + (wire + (pts + (xy 177.8 102.87) (xy 179.07 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "75aaa080-364e-429c-a4d2-d9ec568281ed") + ) + (wire + (pts + (xy 100.33 129.54) (xy 93.98 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "75c41d09-de17-4e68-826d-5168bc08c1f9") + ) + (wire + (pts + (xy 86.36 213.36) (xy 92.71 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7608a166-6eaa-46d2-9bf8-22cddec9366f") + ) + (wire + (pts + (xy 326.39 59.69) (xy 341.63 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "761ff5e7-446c-4a64-87fe-00ac771c2720") + ) + (wire + (pts + (xy 341.63 59.69) (xy 341.63 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "76552a39-9ca8-4bf1-b32e-d92c3ecb7a5b") + ) + (wire + (pts + (xy 334.01 77.47) (xy 341.63 77.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "765f00fa-d3b0-4085-a4ba-0b5f2b8fa875") + ) + (wire + (pts + (xy 340.36 198.12) (xy 340.36 208.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "76c58d76-0be4-49b1-984b-3138b480a780") + ) + (wire + (pts + (xy 209.55 148.59) (xy 209.55 147.32) + ) + (stroke + (width 0) + (type default) + ) + (uuid "76f73b93-f8c7-48de-b8fd-b9bcd3b8aff7") + ) + (wire + (pts + (xy 393.7 187.96) (xy 389.89 187.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "77261f5d-f16e-4d50-bf81-c8b93635e9d8") + ) + (wire + (pts + (xy 318.77 92.71) (xy 322.58 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7752cf80-db4d-4735-9b72-bedab494ad46") + ) + (wire + (pts + (xy 237.49 228.6) (xy 237.49 232.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "775eee06-010c-437a-9c90-03b50528680e") + ) + (wire + (pts + (xy 73.66 24.13) (xy 91.44 24.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "77be84cf-8dee-4423-9913-601580ac8868") + ) + (wire + (pts + (xy 313.69 243.84) (xy 313.69 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "780c0b1b-2ec2-49cd-a137-23ba974f9454") + ) + (wire + (pts + (xy 290.83 175.26) (xy 281.94 175.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "780e036d-29d6-4045-8f83-880a4421d276") + ) + (wire + (pts + (xy 41.91 87.63) (xy 41.91 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "79c0723f-c616-4759-93cd-2fe6c78ef6ea") + ) + (wire + (pts + (xy 378.46 205.74) (xy 375.92 205.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "79ec9283-aa45-4612-8401-bcbb1f51fb9b") + ) + (wire + (pts + (xy 313.69 210.82) (xy 311.15 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7a7c43c9-7893-4151-8fd0-6fb49f466abf") + ) + (wire + (pts + (xy 236.22 200.66) (xy 224.79 200.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7ab24cdd-14e1-4185-922b-6ba3d9004722") + ) + (wire + (pts + (xy 355.6 162.56) (xy 356.87 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7baf751b-0d2b-41c4-b4bf-c2ea751236f3") + ) + (wire + (pts + (xy 88.9 95.25) (xy 91.44 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7bcc67e4-7564-4f6e-8a64-27b188faeb98") + ) + (wire + (pts + (xy 273.05 35.56) (xy 280.67 35.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7c89b5b6-6584-4415-b5d0-2c385ea8d68e") + ) + (wire + (pts + (xy 140.97 81.28) (xy 140.97 82.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7d753682-1c16-4b76-8bbc-3d9b4b9ecc62") + ) + (wire + (pts + (xy 313.69 231.14) (xy 313.69 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7ee93ece-62f4-4b20-858e-d039611d104f") + ) + (wire + (pts + (xy 157.48 199.39) (xy 157.48 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7f44e3a4-cd59-4d24-acc8-376ddac15c9b") + ) + (wire + (pts + (xy 15.24 218.44) (xy 33.02 218.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7f78ea27-e76d-4982-b010-a7d334d51f1a") + ) + (wire + (pts + (xy 223.52 104.14) (xy 223.52 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7f7d91cc-bf3a-4113-b7fd-a0aa5454b2ed") + ) + (wire + (pts + (xy 321.31 165.1) (xy 313.69 165.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7f8629e9-535c-40c3-b317-1fe821e76055") + ) + (wire + (pts + (xy 138.43 264.16) (xy 143.51 264.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7ffae33d-ae04-44a2-9e5b-46e38b71fb15") + ) + (wire + (pts + (xy 359.41 243.84) (xy 355.6 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "80369f2c-7697-4ef4-be6a-ee3f853fe799") + ) + (wire + (pts + (xy 207.01 74.93) (xy 207.01 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "80a9e457-979f-47d1-97cc-122b7f9c8b74") + ) + (wire + (pts + (xy 340.36 158.75) (xy 340.36 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "80f21d59-80c7-4e96-9ab9-5f1470708d11") + ) + (wire + (pts + (xy 236.22 180.34) (xy 234.95 180.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "81180678-f69b-4737-8938-cd8beb104251") + ) + (wire + (pts + (xy 302.26 234.95) (xy 298.45 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "814512f8-38ca-482d-ba1c-d1f2250f54ff") + ) + (wire + (pts + (xy 326.39 107.95) (xy 341.63 107.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8261757c-f86c-4435-8f37-1b82ef24a7b1") + ) + (wire + (pts + (xy 168.91 87.63) (xy 177.8 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8387356f-27fe-4519-9462-7dec4d4541bb") + ) + (wire + (pts + (xy 393.7 60.96) (xy 393.7 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "83fa160e-d55f-4fbd-9f18-0ffd2cc5bbe9") + ) + (wire + (pts + (xy 256.54 243.84) (xy 256.54 245.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "83feabfd-b5ba-49fa-9226-34558f9bb896") + ) + (wire + (pts + (xy 340.36 194.31) (xy 340.36 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8424d038-1c05-4e91-8960-cfd2546ec06d") + ) + (wire + (pts + (xy 340.36 90.17) (xy 341.63 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "85279c2e-2393-4d12-b9aa-38543196a589") + ) + (wire + (pts + (xy 86.36 220.98) (xy 86.36 218.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "85321f37-cab7-45b2-b490-c0f1f5df1077") + ) + (wire + (pts + (xy 368.3 205.74) (xy 365.76 205.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "857dc339-676a-41ef-9fc2-dd917c55392e") + ) + (wire + (pts + (xy 209.55 269.24) (xy 209.55 270.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "86086ab3-cbc4-481e-a3b6-2402456a6b1c") + ) + (wire + (pts + (xy 58.42 170.18) (xy 57.15 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8636f9f2-015a-46b9-b235-6723030a1325") + ) + (wire + (pts + (xy 368.3 158.75) (xy 368.3 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "86389e30-e83c-4405-b03f-f600cd5213de") + ) + (wire + (pts + (xy 219.71 96.52) (xy 231.14 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8694c2ca-5385-4b40-9cfe-bf5046838f4a") + ) + (wire + (pts + (xy 177.8 63.5) (xy 185.42 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "86a3a126-3586-44e9-b665-5b2d6df36b0c") + ) + (wire + (pts + (xy 191.77 78.74) (xy 185.42 78.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "86f438f4-7070-48c2-956b-087a710e270d") + ) + (wire + (pts + (xy 54.61 146.05) (xy 54.61 165.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "87651b22-9301-4d73-9c95-0fd7495ee1e6") + ) + (wire + (pts + (xy 168.91 241.3) (xy 143.51 241.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8775af40-7af7-46ae-b4fc-973b86f141ee") + ) + (wire + (pts + (xy 57.15 135.89) (xy 57.15 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "87d13dd2-c257-4af3-a90a-0a4c677669d6") + ) + (wire + (pts + (xy 177.8 95.25) (xy 177.8 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "896a7778-17c8-4e3a-a387-2e9c5cd8eebb") + ) + (wire + (pts + (xy 135.89 241.3) (xy 130.81 241.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "89847732-ce9f-463d-be2e-106092f875d8") + ) + (wire + (pts + (xy 289.56 101.6) (xy 289.56 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "89b8fa1a-e341-4f89-868e-958e3f6bafff") + ) + (wire + (pts + (xy 100.33 139.7) (xy 93.98 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8a1a0662-368e-4f93-8d58-90c110e2fc14") + ) + (wire + (pts + (xy 208.28 151.13) (xy 208.28 149.86) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8a1a7f56-db7a-400f-a7e9-7d9b448431fc") + ) + (wire + (pts + (xy 293.37 175.26) (xy 290.83 175.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8a7c491b-1d12-42fc-b2e1-1d2381a97cd9") + ) + (wire + (pts + (xy 157.48 213.36) (xy 130.81 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8b128287-9039-459d-a748-194ea7a4caaf") + ) + (wire + (pts + (xy 66.04 251.46) (xy 66.04 248.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8b6bd04a-675d-4075-ae5a-903c5f791f54") + ) + (wire + (pts + (xy 44.45 45.72) (xy 54.61 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8bea8884-2cea-4378-aab0-964a4f4c4936") + ) + (wire + (pts + (xy 313.69 175.26) (xy 311.15 175.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8c1c4db6-8ae4-4969-90fd-1de0c2f8b666") + ) + (wire + (pts + (xy 194.31 72.39) (xy 194.31 71.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8ceba37c-622e-4b30-8303-71de4e82d02c") + ) + (wire + (pts + (xy 15.24 83.82) (xy 20.32 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8cecf4b4-b169-406d-b42b-0fb321f2196e") + ) + (wire + (pts + (xy 279.4 92.71) (xy 300.99 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8d29ecfc-5ab3-4656-8e7d-117764865422") + ) + (wire + (pts + (xy 135.89 223.52) (xy 127 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8dd5ad18-32d0-4b91-9e79-34c930a9638a") + ) + (wire + (pts + (xy 365.76 66.04) (xy 365.76 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8e64801f-3c2f-454e-8b3a-10df3a858489") + ) + (wire + (pts + (xy 247.65 46.99) (xy 248.92 46.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8e7df8ec-9f30-438b-9d72-36df9492c0f4") + ) + (wire + (pts + (xy 367.03 243.84) (xy 370.84 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8ead4b7b-ba36-41a8-a065-fea8b4ba3bc1") + ) + (wire + (pts + (xy 57.15 170.18) (xy 52.07 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8eccf633-043d-464a-9272-b5b23b7c14fc") + ) + (wire + (pts + (xy 191.77 83.82) (xy 194.31 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "903e43e8-d9e3-4b40-a674-86ba784b7a99") + ) + (wire + (pts + (xy 35.56 135.89) (xy 35.56 140.97) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9083ba14-9d32-4b54-8f82-e1540c4ab987") + ) + (wire + (pts + (xy 54.61 165.1) (xy 58.42 165.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "911fa678-ac32-4254-9ab2-b5bd4ec5d3c5") + ) + (wire + (pts + (xy 41.91 213.36) (xy 40.64 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "91797355-4c74-4e50-a9ce-d232c7f7c0bb") + ) + (wire + (pts + (xy 224.79 224.79) (xy 214.63 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "91c26636-7322-45ed-9a1e-dd7db908d532") + ) + (wire + (pts + (xy 346.71 243.84) (xy 346.71 240.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "91ec5ab1-62b1-4493-86f3-748375caf4d0") + ) + (wire + (pts + (xy 226.06 95.25) (xy 226.06 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "925db50f-6134-472d-bb4d-0910d95c8810") + ) + (wire + (pts + (xy 143.51 153.67) (xy 143.51 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9278ce66-28bc-44f9-ab81-55ce3ee262ff") + ) + (wire + (pts + (xy 111.76 226.06) (xy 113.03 226.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "93a9d3d5-22a8-4c39-8f6f-c01d3f2f8c1b") + ) + (wire + (pts + (xy 360.68 175.26) (xy 356.87 175.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "940a6a06-2399-4e85-9ad3-10a048f6d9cd") + ) + (wire + (pts + (xy 248.92 106.68) (xy 248.92 107.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "942831ce-e41b-42a9-b4a3-0b29ff255212") + ) + (wire + (pts + (xy 50.8 152.4) (xy 58.42 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "950ff827-7a2c-416b-9bc4-e755252736c9") + ) + (wire + (pts + (xy 285.75 48.26) (xy 285.75 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9511831e-10fb-48a7-8145-8c66cc8d334b") + ) + (wire + (pts + (xy 16.51 34.29) (xy 16.51 36.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "95829f65-8b61-4bc6-8a0b-eb420d3800a1") + ) + (wire + (pts + (xy 262.89 41.91) (xy 264.16 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "95fb10ed-bb09-4a72-b842-9a526a7cc328") + ) + (wire + (pts + (xy 226.06 95.25) (xy 240.03 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "966c62af-b29b-4ae6-a9a3-74d7fc7e036e") + ) + (wire + (pts + (xy 205.74 151.13) (xy 208.28 151.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "967b3111-48e0-4aa7-9ba9-84d1902c1613") + ) + (wire + (pts + (xy 111.76 99.06) (xy 111.76 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "967d5890-f921-44d3-82ec-d8ad342fdd94") + ) + (wire + (pts + (xy 161.29 255.27) (xy 160.02 255.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "96c4211b-b3e9-4f48-af21-f3a92709685e") + ) + (wire + (pts + (xy 262.89 57.15) (xy 262.89 46.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "97e0b68f-0045-44d8-ba0c-0c523a982b02") + ) + (wire + (pts + (xy 29.21 24.13) (xy 34.29 24.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9819e90e-cea2-4b6a-ae28-990aa2df2312") + ) + (wire + (pts + (xy 356.87 177.8) (xy 356.87 175.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "989148b6-2125-4a19-87d6-2c7f38678378") + ) + (wire + (pts + (xy 115.57 88.9) (xy 110.49 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "98baf9b6-da58-42a4-acf2-9e70c2ca4861") + ) + (wire + (pts + (xy 191.77 102.87) (xy 191.77 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "98cf9553-6c04-4519-977d-493b01beee49") + ) + (wire + (pts + (xy 16.51 24.13) (xy 16.51 31.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "98d15c59-3399-41a0-b380-af4148b21400") + ) + (wire + (pts + (xy 135.89 231.14) (xy 129.54 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "98d7e782-cf98-4f5a-9a86-69aad693777b") + ) + (wire + (pts + (xy 396.24 168.91) (xy 396.24 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "99cb5f9f-b5bb-4c61-bcbf-86e82be57007") + ) + (wire + (pts + (xy 356.87 162.56) (xy 356.87 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9a43a700-4c21-4c23-9193-7e623f63e4ae") + ) + (wire + (pts + (xy 200.66 63.5) (xy 194.31 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9a9a43a8-adc4-4e48-b4cf-49e3af54e80a") + ) + (wire + (pts + (xy 346.71 231.14) (xy 341.63 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9b104c38-a954-47a3-8254-b0c0e4e29658") + ) + (wire + (pts + (xy 309.88 85.09) (xy 309.88 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9b262045-52be-4cd9-b9eb-a1ae19a841d4") + ) + (wire + (pts + (xy 111.76 223.52) (xy 119.38 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9b5aee08-117e-4860-9486-5b829b086994") + ) + (wire + (pts + (xy 281.94 96.52) (xy 281.94 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9bbed7ba-58ad-4fd7-a63f-c9b856a60a7e") + ) + (wire + (pts + (xy 157.48 152.4) (xy 157.48 151.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9bc6efd1-5e2f-45e3-a888-9cf8e707f359") + ) + (wire + (pts + (xy 129.54 199.39) (xy 129.54 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9c336b00-9d10-4e14-b856-be182dfa58f3") + ) + (wire + (pts + (xy 368.3 182.88) (xy 360.68 182.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9d06d2a0-7f92-44c3-9d67-dd35b33457ee") + ) + (wire + (pts + (xy 262.89 57.15) (xy 278.13 57.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9d76dbd5-2f8c-44a8-bfbf-a6570f724e74") + ) + (wire + (pts + (xy 251.46 41.91) (xy 254 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9dbcfdcd-abc0-48c5-ab25-73828570e9ef") + ) + (wire + (pts + (xy 165.1 97.79) (xy 165.1 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9ddd4c0c-3e9f-4f10-b9db-f5ca235e88e4") + ) + (wire + (pts + (xy 284.48 74.93) (xy 287.02 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9dfda32c-2e20-4cb9-9d9f-7625943de829") + ) + (wire + (pts + (xy 340.36 172.72) (xy 339.09 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9e61be7f-8c0f-4d4e-a599-26fb1f53af15") + ) + (wire + (pts + (xy 331.47 172.72) (xy 328.93 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9ea84322-96fd-4459-beef-fea9f1e3c4a6") + ) + (wire + (pts + (xy 340.36 158.75) (xy 311.15 158.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9eb2b625-a3a4-43ad-975c-453fd59dfb47") + ) + (wire + (pts + (xy 359.41 236.22) (xy 355.6 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9ef5b929-9e48-478b-be87-9d351181d317") + ) + (wire + (pts + (xy 86.36 226.06) (xy 92.71 226.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9f5033f4-8826-491b-9f0b-615d55f3497d") + ) + (wire + (pts + (xy 52.07 233.68) (xy 52.07 248.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a025848a-f24a-45c9-9449-31c0d8710023") + ) + (wire + (pts + (xy 293.37 210.82) (xy 290.83 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a033fd25-1469-4a85-80b7-673f55bc1222") + ) + (wire + (pts + (xy 355.6 243.84) (xy 355.6 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a0742d36-be94-46e5-865c-ea78ef6d47b5") + ) + (wire + (pts + (xy 168.91 86.36) (xy 168.91 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a0928349-97ed-4125-924c-aaff318c8309") + ) + (wire + (pts + (xy 151.13 264.16) (xy 153.67 264.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a0b58f7a-de24-4030-ba01-3b9a29667e6f") + ) + (wire + (pts + (xy 309.88 77.47) (xy 311.15 77.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a10e33eb-42fe-49f8-9649-76ff59345333") + ) + (wire + (pts + (xy 86.36 223.52) (xy 86.36 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a188c617-3a4d-47ae-8334-7cbb110eddba") + ) + (wire + (pts + (xy 137.16 78.74) (xy 139.7 78.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a19283a9-c86e-4152-9701-1bf48bcb88ad") + ) + (wire + (pts + (xy 321.31 200.66) (xy 313.69 200.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a2d4c2f0-66af-425a-ae3b-2e6fe5c833af") + ) + (wire + (pts + (xy 243.84 73.66) (xy 243.84 71.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a2d9067f-4021-45d3-be18-2a04e1972751") + ) + (wire + (pts + (xy 309.88 243.84) (xy 313.69 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a319757e-5133-457e-83ed-4ca6b95007cc") + ) + (wire + (pts + (xy 248.92 86.36) (xy 248.92 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a39fe6c1-310d-40db-8695-9b397d425895") + ) + (wire + (pts + (xy 256.54 234.95) (xy 251.46 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a49c113b-e148-4e91-a4cc-ba7be33236f8") + ) + (wire + (pts + (xy 168.91 259.08) (xy 160.02 259.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a4c2dcfd-aa59-4d14-acd9-23bedfece0d8") + ) + (wire + (pts + (xy 302.26 243.84) (xy 298.45 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a4fab178-5941-4fc1-8b6c-b6657640a19b") + ) + (wire + (pts + (xy 278.13 48.26) (xy 285.75 48.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a50874ce-1979-4d23-9374-663cab345c59") + ) + (wire + (pts + (xy 391.16 53.34) (xy 393.7 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a511ceda-daeb-484c-a193-2ef61ccd3a09") + ) + (wire + (pts + (xy 368.3 170.18) (xy 365.76 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a563b53a-2982-4cf4-ae12-0a04e79f326b") + ) + (wire + (pts + (xy 389.89 205.74) (xy 386.08 205.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a8667e05-d790-4dfd-a5ea-6789f164a13b") + ) + (wire + (pts + (xy 384.81 68.58) (xy 393.7 68.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a966872b-cfa2-4963-87ad-812d3f7bf558") + ) + (wire + (pts + (xy 287.02 83.82) (xy 287.02 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a97889ca-c14b-4662-8d7c-2b7dd0c12a34") + ) + (wire + (pts + (xy 115.57 45.72) (xy 120.65 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a9ea7988-4251-418a-8742-d45f4fa56fb3") + ) + (wire + (pts + (xy 347.98 198.12) (xy 340.36 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aa29825f-e9a8-4aaa-b36b-d5437f302d89") + ) + (wire + (pts + (xy 370.84 243.84) (xy 370.84 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ab647954-3f7a-40f9-9a9c-2cb7b0efd331") + ) + (wire + (pts + (xy 168.91 226.06) (xy 165.1 226.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "abb8c620-cae5-40f1-904b-5feaf9554df7") + ) + (wire + (pts + (xy 157.48 148.59) (xy 156.21 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "abde847f-99fa-457f-967b-ad52ca82a797") + ) + (wire + (pts + (xy 140.97 81.28) (xy 147.32 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ac6fb932-0707-474b-8245-470e43db57ff") + ) + (wire + (pts + (xy 384.81 41.91) (xy 384.81 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "acb4fcf5-7ccc-436a-a68d-9fbd1e132e7b") + ) + (wire + (pts + (xy 187.96 91.44) (xy 194.31 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "acfa339e-c5b0-4603-a5f2-aaab1ce0d567") + ) + (wire + (pts + (xy 91.44 96.52) (xy 83.82 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "acff48d7-3763-4a77-b6ce-8e97712e3187") + ) + (wire + (pts + (xy 36.83 173.99) (xy 36.83 167.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ad30ca54-0dee-4697-80c5-da99cc011c93") + ) + (wire + (pts + (xy 148.59 55.88) (xy 148.59 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ad84c957-db93-449f-a695-b7a8fcb35907") + ) + (wire + (pts + (xy 85.09 220.98) (xy 86.36 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ade265ca-c914-480f-a4a5-0b30fbceb6eb") + ) + (wire + (pts + (xy 50.8 161.29) (xy 52.07 161.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ae2fceb2-4532-476e-836a-ae09e8146645") + ) + (wire + (pts + (xy 100.33 157.48) (xy 93.98 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aebb2711-1484-40ae-909b-7a335cbbbf3b") + ) + (wire + (pts + (xy 209.55 226.06) (xy 209.55 261.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aefdc0e3-4736-4101-b80d-8fc732c3af31") + ) + (wire + (pts + (xy 279.4 83.82) (xy 279.4 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "af96c816-530c-48d4-b090-cd2fbf8c05ce") + ) + (wire + (pts + (xy 325.12 87.63) (xy 322.58 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "afa48363-706e-47d6-a947-14ac6da1e94c") + ) + (wire + (pts + (xy 285.75 48.26) (xy 288.29 48.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b0995455-c227-4ed0-aa39-dd4c7d37bef2") + ) + (wire + (pts + (xy 160.02 273.05) (xy 160.02 266.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b0aad4fb-9326-41da-a0bf-21fef9e46fb0") + ) + (wire + (pts + (xy 134.62 82.55) (xy 134.62 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b0ab75f1-c8e4-4c88-85e5-dd94bd63aec7") + ) + (wire + (pts + (xy 278.13 64.77) (xy 278.13 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b0aba0a5-f0ac-4465-8df7-11496703db26") + ) + (wire + (pts + (xy 129.54 102.87) (xy 129.54 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b0eef2c6-c62d-4f81-a3b4-1dada1b13aed") + ) + (wire + (pts + (xy 280.67 35.56) (xy 280.67 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b10a2261-3e3f-4d73-96b1-30b8ad10ad05") + ) + (wire + (pts + (xy 157.48 102.87) (xy 177.8 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b17628a1-9056-4dfe-b2de-e23986a90068") + ) + (wire + (pts + (xy 200.66 63.5) (xy 207.01 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b18425bb-2943-4a18-8b30-e4423d74bdbd") + ) + (wire + (pts + (xy 248.92 90.17) (xy 250.19 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b1a627a7-5c19-4731-8c71-003d23580685") + ) + (wire + (pts + (xy 266.7 198.12) (xy 261.62 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b1cef88e-6f76-490c-beec-83730923e83d") + ) + (wire + (pts + (xy 308.61 92.71) (xy 309.88 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b2431674-1834-4ed1-8e1e-1d747a59d468") + ) + (wire + (pts + (xy 165.1 97.79) (xy 168.91 97.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b2a0e674-1147-448f-9a9e-1a0f55d772d0") + ) + (wire + (pts + (xy 340.36 41.91) (xy 341.63 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b2cd871a-39c7-4531-8f12-281fc1d67566") + ) + (wire + (pts + (xy 351.79 73.66) (xy 351.79 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b39c11b9-7493-4103-8ba1-47354e59de3c") + ) + (wire + (pts + (xy 251.46 234.95) (xy 251.46 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b41a21ef-ad7a-4594-9bfe-65b7a2400abb") + ) + (wire + (pts + (xy 356.87 170.18) (xy 355.6 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b4204bd5-73d8-4dfa-8e04-73eef27396cf") + ) + (wire + (pts + (xy 243.84 154.94) (xy 237.49 154.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b43eecc5-9f3a-4894-b5e0-87176b2b157d") + ) + (wire + (pts + (xy 234.95 182.88) (xy 236.22 182.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b531b65b-2d63-48b0-8beb-d4534152f101") + ) + (wire + (pts + (xy 30.48 83.82) (xy 33.02 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b5397dc2-dc7c-4f00-a7e1-cc53fd1b9e54") + ) + (wire + (pts + (xy 248.92 95.25) (xy 252.73 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b6a7aa29-2bb7-4b93-a814-4ef10a7c2f4e") + ) + (wire + (pts + (xy 160.02 255.27) (xy 160.02 259.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b6b0994b-7c8e-4027-a737-1091baa6f870") + ) + (wire + (pts + (xy 226.06 86.36) (xy 219.71 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b6c9ea99-7d32-4c79-92f5-8458aea005ee") + ) + (wire + (pts + (xy 322.58 44.45) (xy 325.12 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b723fd46-1a23-4f89-80f7-a947356c0091") + ) + (wire + (pts + (xy 60.96 92.71) (xy 67.31 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b7e8f787-97eb-4ebe-be41-b0ea77407ef5") + ) + (wire + (pts + (xy 80.01 53.34) (xy 91.44 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b86e9b24-5028-4164-9a0e-23aeafe360f7") + ) + (wire + (pts + (xy 15.24 218.44) (xy 15.24 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b87593c2-65c9-481f-9b02-f90c73c61227") + ) + (wire + (pts + (xy 147.32 90.17) (xy 147.32 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b8bcb17a-27a5-44c6-a76a-958eb63f6fd8") + ) + (wire + (pts + (xy 147.32 100.33) (xy 147.32 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b909af50-cdd0-48f9-96b8-4753d1e11848") + ) + (wire + (pts + (xy 33.02 213.36) (xy 26.67 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ba483c1a-9353-4bd3-8d7d-d4cc09bf1760") + ) + (wire + (pts + (xy 36.83 24.13) (xy 34.29 24.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ba638dac-1d8c-4546-98d3-a6fd58f7f535") + ) + (wire + (pts + (xy 130.81 248.92) (xy 130.81 250.19) + ) + (stroke + (width 0) + (type default) + ) + (uuid "baf9e1f6-8cd0-429c-90d5-807ca8486280") + ) + (wire + (pts + (xy 160.02 273.05) (xy 153.67 273.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bb1fdb0d-bbf4-40d7-b343-4a35b5456601") + ) + (wire + (pts + (xy 341.63 29.21) (xy 341.63 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bbead3cd-fc35-426a-b972-2d68035b96c2") + ) + (wire + (pts + (xy 133.35 111.76) (xy 135.89 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bbff88c9-bacf-48c8-987b-7bfb855ba44f") + ) + (wire + (pts + (xy 309.88 44.45) (xy 311.15 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bc45dfef-de83-439d-8f7c-956999fd4d4e") + ) + (wire + (pts + (xy 281.94 175.26) (xy 271.78 175.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bca9ee47-9281-411a-9503-f123f76d47f8") + ) + (wire + (pts + (xy 250.19 90.17) (xy 252.73 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bcbd8d7c-610a-4ce4-9881-b6cb34027bb1") + ) + (wire + (pts + (xy 248.92 38.1) (xy 248.92 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bd1d4354-c0d2-4afd-ba1b-95e7d352a2e1") + ) + (wire + (pts + (xy 355.6 247.65) (xy 355.6 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bd547afd-d503-4a6c-b4cc-43a9e4f5dde9") + ) + (wire + (pts + (xy 347.98 162.56) (xy 340.36 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bd618681-3ccd-49b0-91a9-cf285d47aa8b") + ) + (wire + (pts + (xy 227.33 203.2) (xy 236.22 203.2) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bdc0276b-83da-46c2-bc7f-db39f83edf86") + ) + (wire + (pts + (xy 326.39 66.04) (xy 326.39 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bdcb7a09-0971-4f97-9cbf-b07601d9f92c") + ) + (wire + (pts + (xy 340.36 194.31) (xy 311.15 194.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "be122d0f-e8b1-4167-8875-fa67ab4b1683") + ) + (wire + (pts + (xy 368.3 170.18) (xy 368.3 175.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "be159c3f-ce90-427b-a886-2fa28416cb88") + ) + (wire + (pts + (xy 53.34 132.08) (xy 58.42 132.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "be2389d6-7d1d-4fef-a2c9-37ecaa34760f") + ) + (wire + (pts + (xy 90.17 220.98) (xy 90.17 222.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "be2c4331-b4a3-4f92-a2e8-b0e5eaf59920") + ) + (wire + (pts + (xy 193.04 130.81) (xy 198.12 130.81) + ) + (stroke + (width 0) + (type default) + ) + (uuid "be7a1ffa-4f21-4470-8e13-80c3e58ded2e") + ) + (wire + (pts + (xy 100.33 162.56) (xy 93.98 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bf179fc3-14be-476d-bdf8-531bf1ad9bac") + ) + (wire + (pts + (xy 269.24 182.88) (xy 269.24 200.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bfc10ee3-45f3-43fe-be52-4e9d5bf3e21e") + ) + (wire + (pts + (xy 138.43 259.08) (xy 138.43 257.81) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c03d4e39-2e0e-4498-bf18-d53244a8a03f") + ) + (wire + (pts + (xy 281.94 113.03) (xy 281.94 114.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c0fcebae-a43e-475f-b13c-938bc9d7ae1c") + ) + (wire + (pts + (xy 384.81 68.58) (xy 384.81 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c14ce2f7-85b0-4b45-a54f-bf5920158e52") + ) + (wire + (pts + (xy 223.52 46.99) (xy 223.52 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c152a008-f083-40b4-b80e-79842d8551dd") + ) + (wire + (pts + (xy 328.93 213.36) (xy 341.63 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c1858afd-e804-40ec-aa72-1257f7894d20") + ) + (wire + (pts + (xy 228.6 90.17) (xy 228.6 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c188f76f-ff52-44c9-8df9-147dae2e156e") + ) + (wire + (pts + (xy 381 232.41) (xy 383.54 232.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c1febe3b-773b-4507-b2d2-c3a9a647db47") + ) + (wire + (pts + (xy 265.43 83.82) (xy 261.62 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c20710da-f9d6-4175-9229-53d54b40085e") + ) + (wire + (pts + (xy 240.03 41.91) (xy 220.98 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c2b1f398-0967-46ad-bab0-f9dfb89dc359") + ) + (wire + (pts + (xy 203.2 269.24) (xy 203.2 270.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c38b3223-1a27-47c8-b45e-dcb9326ca386") + ) + (wire + (pts + (xy 323.85 231.14) (xy 326.39 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c3f1871a-8afb-48dd-9c5c-7ec02ffe7dc0") + ) + (wire + (pts + (xy 86.36 218.44) (xy 92.71 218.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c48a4bc7-604b-4cb9-a9bb-253237a24723") + ) + (wire + (pts + (xy 34.29 53.34) (xy 44.45 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c49553e7-fc09-419b-b5ec-ec2170e325dc") + ) + (wire + (pts + (xy 139.7 38.1) (xy 139.7 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c4ee4c8d-8f74-4b92-88f3-8a41cc8a4759") + ) + (wire + (pts + (xy 134.62 91.44) (xy 140.97 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c5868fb6-fbb0-404d-a181-ffb70679373c") + ) + (wire + (pts + (xy 393.7 182.88) (xy 389.89 182.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c60dc552-f03a-4ab4-85da-f90a535a78f0") + ) + (wire + (pts + (xy 187.96 176.53) (xy 187.96 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c61f6508-211b-42e4-9a79-3b5f8e7f1902") + ) + (wire + (pts + (xy 243.84 25.4) (xy 243.84 22.86) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c658a0d9-31ea-43f0-af21-c53bc22d636b") + ) + (wire + (pts + (xy 153.67 264.16) (xy 153.67 265.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c6ae5922-3682-4455-bb03-890c69e987ff") + ) + (wire + (pts + (xy 251.46 245.11) (xy 247.65 245.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c6f5ccb2-29b1-4087-b96b-4a7fe2e21891") + ) + (wire + (pts + (xy 328.93 177.8) (xy 356.87 177.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c6fcbe0d-822b-446b-900a-769ba2d75ccb") + ) + (wire + (pts + (xy 322.58 52.07) (xy 322.58 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c75fbbf3-1909-4a9b-88a1-eece96ca5461") + ) + (wire + (pts + (xy 290.83 194.31) (xy 281.94 194.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c7dfdae6-ccab-4dba-8fdf-0103584c718c") + ) + (wire + (pts + (xy 288.29 48.26) (xy 288.29 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c84cdc60-7d20-44b6-aba2-6b626cb75b43") + ) + (wire + (pts + (xy 264.16 195.58) (xy 261.62 195.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c85da147-17ac-4fa4-92cc-272deaf97078") + ) + (wire + (pts + (xy 115.57 213.36) (xy 111.76 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c8d5e62d-0f6e-4c8a-a265-471ea1f345b4") + ) + (wire + (pts + (xy 266.7 194.31) (xy 266.7 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c9807783-0362-4b14-8582-b71193377934") + ) + (wire + (pts + (xy 247.65 245.11) (xy 242.57 245.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ca9463e6-92f0-4720-8559-33faa618d242") + ) + (wire + (pts + (xy 227.33 228.6) (xy 214.63 228.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cb342867-f56f-427f-a337-7a9c097c8893") + ) + (wire + (pts + (xy 358.14 170.18) (xy 356.87 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cb62cf8d-6caa-444d-90d6-36592f454170") + ) + (wire + (pts + (xy 52.07 161.29) (xy 52.07 165.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cc097896-5ea4-495e-920e-51845896e3a8") + ) + (wire + (pts + (xy 368.3 205.74) (xy 368.3 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cce5a34a-3662-401e-b3e3-126a94745fc9") + ) + (wire + (pts + (xy 115.57 24.13) (xy 120.65 24.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cd4741b1-1246-4186-84bf-b3d7eec70044") + ) + (wire + (pts + (xy 138.43 137.16) (xy 139.7 137.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cdfc1101-d023-4e07-940a-9efc60b33ae4") + ) + (wire + (pts + (xy 194.31 104.14) (xy 191.77 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cecf03a2-3920-4cad-86e5-497de06d2196") + ) + (wire + (pts + (xy 273.05 234.95) (xy 266.7 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ced5368e-205a-40ed-972b-9f0582daa669") + ) + (wire + (pts + (xy 168.91 215.9) (xy 168.91 226.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cfb046ff-e352-4663-a079-550119efa9be") + ) + (wire + (pts + (xy 328.93 200.66) (xy 328.93 208.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cfbed0e3-38e9-4a40-a663-7cf5fd0c246f") + ) + (wire + (pts + (xy 308.61 44.45) (xy 309.88 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d0643ac7-d6d6-45fa-8f4f-4afeaa093016") + ) + (wire + (pts + (xy 217.17 269.24) (xy 217.17 270.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d1d9db6d-42cf-4476-b5e1-c8eb69c07c42") + ) + (wire + (pts + (xy 365.76 66.04) (xy 364.49 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d258d8d6-a15b-4757-bc30-523be8f9466d") + ) + (wire + (pts + (xy 322.58 39.37) (xy 322.58 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d2989142-cdf6-495a-9cb5-570bffc7a873") + ) + (wire + (pts + (xy 280.67 44.45) (xy 300.99 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d46b577c-48b9-4641-9de2-73ad1b444d42") + ) + (wire + (pts + (xy 110.49 99.06) (xy 111.76 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d49f084b-4d9f-4fbf-b04d-b693435eb6ca") + ) + (wire + (pts + (xy 187.96 91.44) (xy 187.96 123.19) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d4dda4f9-bc22-4156-a6cf-e9b64c1e0f5c") + ) + (wire + (pts + (xy 106.68 45.72) (xy 115.57 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d5f1bd3b-5f57-46c3-8a9a-034ff6ac13ee") + ) + (wire + (pts + (xy 219.71 81.28) (xy 220.98 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d6763a20-d16b-42ee-bb03-9f45132dbcb7") + ) + (wire + (pts + (xy 133.35 110.49) (xy 133.35 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d6aa3060-3137-46bc-b51f-3baa3deda373") + ) + (wire + (pts + (xy 52.07 165.1) (xy 54.61 165.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d76deaf3-40e2-44ed-8617-47254e431a7f") + ) + (wire + (pts + (xy 358.14 205.74) (xy 355.6 205.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d786f128-4766-4922-97f3-8ed774024a08") + ) + (wire + (pts + (xy 135.89 110.49) (xy 135.89 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d79508a5-c12b-4478-b43d-a6c21206f22a") + ) + (wire + (pts + (xy 130.81 251.46) (xy 130.81 250.19) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d7a022cc-0e51-44ba-8053-d181160a1696") + ) + (wire + (pts + (xy 36.83 152.4) (xy 36.83 161.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d7cb27e5-3e29-415f-904c-9d5a552143f2") + ) + (wire + (pts + (xy 55.88 140.97) (xy 55.88 167.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d80c9a9f-77a4-478a-ac58-2aa3709ce307") + ) + (wire + (pts + (xy 147.32 62.23) (xy 147.32 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d88c0f3a-ada6-4c1f-8a8e-1032733b2601") + ) + (wire + (pts + (xy 290.83 210.82) (xy 281.94 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d917d145-1f89-4bd3-80b7-c803dd78f70f") + ) + (wire + (pts + (xy 331.47 208.28) (xy 328.93 208.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d9485f5e-177c-4603-806c-4d54d9374f8c") + ) + (wire + (pts + (xy 43.18 102.87) (xy 50.8 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d9808d19-8da9-4905-bfb9-44d02d4cf04b") + ) + (wire + (pts + (xy 26.67 102.87) (xy 33.02 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d9a467e9-5746-48ce-b9e1-005b440def9b") + ) + (wire + (pts + (xy 224.79 200.66) (xy 224.79 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d9b12f66-08a4-4ff7-ba07-14816855c40b") + ) + (wire + (pts + (xy 69.85 87.63) (xy 69.85 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dc9c98e7-cc7a-4ddc-8f6e-78e17116c987") + ) + (wire + (pts + (xy 313.69 234.95) (xy 309.88 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dd1fba89-b302-4d81-8c8e-2d854e5e1cf5") + ) + (wire + (pts + (xy 92.71 220.98) (xy 90.17 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dd2dd666-7cd0-4c1c-9464-ca5d570acba7") + ) + (wire + (pts + (xy 325.12 39.37) (xy 322.58 39.37) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dd6d758b-98e1-4f05-ba5d-edec8f2f3e86") + ) + (wire + (pts + (xy 43.18 161.29) (xy 36.83 161.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dda85920-a2d2-4ddc-9468-e4d4fcd2adf2") + ) + (wire + (pts + (xy 138.43 24.13) (xy 140.97 24.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "de026ed2-780e-481b-bd93-d226a17e4d78") + ) + (wire + (pts + (xy 62.23 53.34) (xy 73.66 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "de222f6d-0fc0-4376-9d9d-d783a879d81c") + ) + (wire + (pts + (xy 247.65 41.91) (xy 248.92 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "de315eec-bfcc-45e0-b455-a8e67e3d3884") + ) + (wire + (pts + (xy 100.33 134.62) (xy 93.98 134.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "de93f3fe-6bbd-4e04-88f1-50e94d94e20b") + ) + (wire + (pts + (xy 187.96 130.81) (xy 187.96 143.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "de9f1471-e0bc-4511-8fbe-d0a5f11996ae") + ) + (wire + (pts + (xy 115.57 215.9) (xy 111.76 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "decdb992-6865-4b98-9bc7-8faa6d041b5c") + ) + (wire + (pts + (xy 160.02 255.27) (xy 153.67 255.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "df4ead64-3ee0-4488-8fc9-c7b5a796e066") + ) + (wire + (pts + (xy 243.84 162.56) (xy 243.84 165.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e02fcbf7-668c-4260-93d6-300dfca0ea4b") + ) + (wire + (pts + (xy 336.55 231.14) (xy 336.55 232.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e09bd54c-14e1-4039-a312-9e064cb526b4") + ) + (wire + (pts + (xy 231.14 96.52) (xy 231.14 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e13dcb93-f3a3-4d3f-bcb2-594fc8963890") + ) + (wire + (pts + (xy 261.62 90.17) (xy 262.89 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e16c0e7e-768e-44f2-b6d3-abbe48a856f6") + ) + (wire + (pts + (xy 168.91 163.83) (xy 195.58 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e188ec2a-e5f1-4ac8-ad93-241597d283ad") + ) + (wire + (pts + (xy 185.42 62.23) (xy 185.42 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e1ee4e6d-c11e-4e48-9eec-257bffa099ed") + ) + (wire + (pts + (xy 43.18 173.99) (xy 36.83 173.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e2837bf8-1a1f-4d69-93e8-29abc7bfd773") + ) + (wire + (pts + (xy 318.77 59.69) (xy 309.88 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e2ca4d11-4d7d-4845-9023-02e856091b18") + ) + (wire + (pts + (xy 73.66 53.34) (xy 80.01 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e3a47d11-9c10-496e-a3b7-7dc118c8548e") + ) + (wire + (pts + (xy 62.23 31.75) (xy 73.66 31.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e3a81afe-567e-4786-a1d6-7b4abae2be81") + ) + (wire + (pts + (xy 373.38 232.41) (xy 370.84 232.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e47943e4-d6dc-4b6f-a6a6-2ecf172b6249") + ) + (wire + (pts + (xy 91.44 24.13) (xy 101.6 24.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e5924541-6a75-4152-bc72-6b5c73164481") + ) + (wire + (pts + (xy 190.5 93.98) (xy 194.31 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e5f7ff4e-ecba-44cd-b78d-92d795e41072") + ) + (wire + (pts + (xy 262.89 35.56) (xy 262.89 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e6096ae3-946d-4d45-9b73-e1d8709f91f7") + ) + (wire + (pts + (xy 138.43 19.05) (xy 138.43 24.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e688566d-71b3-4b3e-9120-e2b42367bb32") + ) + (wire + (pts + (xy 226.06 101.6) (xy 226.06 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e6c42602-79b1-4f12-90d3-c9cdf1e6d884") + ) + (wire + (pts + (xy 50.8 173.99) (xy 52.07 173.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e6c54e61-e80d-4e07-b7d7-987dc6534ad4") + ) + (wire + (pts + (xy 91.44 45.72) (xy 99.06 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e7f93f18-7a0c-47a6-8391-7dc5e7806892") + ) + (wire + (pts + (xy 219.71 99.06) (xy 228.6 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e805eadd-6162-4504-ad3b-4e57dd04afb2") + ) + (wire + (pts + (xy 207.01 111.76) (xy 207.01 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e83d80a3-fe44-431e-8259-6902496fb5ab") + ) + (wire + (pts + (xy 179.07 102.87) (xy 191.77 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e9d0fdbc-2c5e-41db-8cf1-ca286ba413f3") + ) + (wire + (pts + (xy 191.77 81.28) (xy 191.77 78.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ea3b425f-e512-44f0-b8ac-41346c312165") + ) + (wire + (pts + (xy 219.71 83.82) (xy 228.6 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eaa4522e-080e-4bb7-8af7-56959dd05f5f") + ) + (wire + (pts + (xy 261.62 105.41) (xy 281.94 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eb6d6577-6aa1-48be-87da-f06e3ab74cdf") + ) + (wire + (pts + (xy 69.85 45.72) (xy 73.66 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ebaf72e5-9309-4f4f-9263-54005cb1de9a") + ) + (wire + (pts + (xy 139.7 148.59) (xy 143.51 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ec9aac1b-bb9f-46a1-a03b-a6c29623a2cd") + ) + (wire + (pts + (xy 62.23 53.34) (xy 44.45 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ece426e4-f10e-4207-a72c-07cd1c007a32") + ) + (wire + (pts + (xy 228.6 90.17) (xy 240.03 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ed0360ca-a1bc-48e7-bce1-bdd83b84fae8") + ) + (wire + (pts + (xy 134.62 156.21) (xy 143.51 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "edb37245-c1c8-441a-93c8-42ae5987b381") + ) + (wire + (pts + (xy 115.57 91.44) (xy 110.49 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ee3228d1-64a8-45e7-a88d-747033b9bff1") + ) + (wire + (pts + (xy 261.62 185.42) (xy 266.7 185.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ee4e9ef3-c181-4f19-807e-110ee2b50dc3") + ) + (wire + (pts + (xy 130.81 266.7) (xy 130.81 273.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ee8d9d77-0ee8-4749-bf35-ccd2184233d9") + ) + (wire + (pts + (xy 190.5 130.81) (xy 190.5 143.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eef38942-8241-4b1c-b8c9-81a63a4b6e62") + ) + (wire + (pts + (xy 281.94 160.02) (xy 281.94 158.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ef147794-27cb-4123-aca6-fcba29af5064") + ) + (wire + (pts + (xy 129.54 96.52) (xy 125.73 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f1e1405e-4f4d-42ef-8cd5-f03fba7ab69d") + ) + (wire + (pts + (xy 303.53 210.82) (xy 300.99 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f27c32ef-ac65-4254-a03b-f8e253addff5") + ) + (wire + (pts + (xy 140.97 111.76) (xy 140.97 110.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f2900bc2-5a0e-4bb5-990d-eadee9de7b33") + ) + (wire + (pts + (xy 298.45 231.14) (xy 298.45 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f2985607-157c-41c2-8ba2-383c684cea12") + ) + (wire + (pts + (xy 217.17 261.62) (xy 209.55 261.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f2a12f31-1e75-42f2-8637-ebce92ed261b") + ) + (wire + (pts + (xy 341.63 231.14) (xy 341.63 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f2cd26c1-6d88-4722-8d60-ba072a0979fb") + ) + (wire + (pts + (xy 269.24 200.66) (xy 261.62 200.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f31d82ca-a778-43bd-8ef0-85922125c52f") + ) + (wire + (pts + (xy 355.6 232.41) (xy 355.6 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f3670e29-d97b-4789-a923-302687fb6098") + ) + (wire + (pts + (xy 153.67 260.35) (xy 153.67 264.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f369bf03-7a5a-42ed-8d6f-0afec0dcd38b") + ) + (wire + (pts + (xy 137.16 111.76) (xy 138.43 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f4ea1755-6c64-4138-a685-cf36affc6d27") + ) + (wire + (pts + (xy 342.9 74.93) (xy 347.98 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f612c871-85af-471b-a522-cb9c55e0415e") + ) + (wire + (pts + (xy 143.51 151.13) (xy 137.16 151.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f61c81d1-5600-4ecd-809d-a5ad4f6a4d26") + ) + (wire + (pts + (xy 157.48 148.59) (xy 160.02 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f7d7bbe6-23bb-417e-a307-f16d2239c3ab") + ) + (wire + (pts + (xy 175.26 205.74) (xy 175.26 208.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f88f2eb4-ea80-4a52-bce2-3ede994d0f22") + ) + (wire + (pts + (xy 353.06 236.22) (xy 355.6 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f895ad5f-60d8-4931-bf01-148234fefbfd") + ) + (wire + (pts + (xy 205.74 156.21) (xy 209.55 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f8fee96f-8ce9-4573-bc97-137173c118eb") + ) + (wire + (pts + (xy 354.33 90.17) (xy 384.81 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f97f8f05-4139-41d5-8578-71f21741d05e") + ) + (wire + (pts + (xy 297.18 67.31) (xy 297.18 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f99910f0-d3cf-41f0-8a83-d119f13faf1f") + ) + (wire + (pts + (xy 347.98 194.31) (xy 340.36 194.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fa215f34-e744-40cb-8f3d-f02154d80fd8") + ) + (wire + (pts + (xy 43.18 146.05) (xy 54.61 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fab07c1f-5b6c-4bfd-94c3-ca72a31810b1") + ) + (wire + (pts + (xy 346.71 231.14) (xy 346.71 232.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fad0f76e-c37f-4a6e-a62b-5dd37a7cba34") + ) + (wire + (pts + (xy 214.63 228.6) (xy 214.63 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fadf3aae-c724-4ba4-8386-0e9f06027985") + ) + (wire + (pts + (xy 389.89 175.26) (xy 389.89 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fafce94f-7174-4b2c-841b-b2f96b5ee4b4") + ) + (wire + (pts + (xy 309.88 36.83) (xy 309.88 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fbddb59e-b592-4325-8134-135e4c03d07d") + ) + (wire + (pts + (xy 69.85 24.13) (xy 73.66 24.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fc78ba7d-d126-4756-ad49-6c6eaaa98a37") + ) + (wire + (pts + (xy 138.43 111.76) (xy 140.97 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fcb3b153-505b-4ffb-bd39-0525cdd802ad") + ) + (wire + (pts + (xy 195.58 162.56) (xy 195.58 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fcbf79d4-1cdd-44c2-a099-451101bab860") + ) + (wire + (pts + (xy 140.97 19.05) (xy 138.43 19.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fd120123-b8cc-4030-af80-ac85b36e4fa8") + ) + (wire + (pts + (xy 336.55 243.84) (xy 336.55 245.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fd2690c4-9fb8-465f-91f0-ffcfeb254223") + ) + (wire + (pts + (xy 115.57 86.36) (xy 110.49 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fd45149b-7050-4370-91a3-adfcae3a55fa") + ) + (wire + (pts + (xy 190.5 162.56) (xy 190.5 168.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fd4677eb-92a5-4878-9efa-0e9ec7b1672f") + ) + (wire + (pts + (xy 303.53 158.75) (xy 300.99 158.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fde0379d-a048-488d-9338-33979e7f46c4") + ) + (wire + (pts + (xy 237.49 240.03) (xy 237.49 245.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fe0c632b-9531-46a3-9e09-fc7e7943225e") + ) + (wire + (pts + (xy 67.31 102.87) (xy 68.58 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fe94309e-7c11-47e4-a4d3-bd2d03d2a4ce") + ) + (wire + (pts + (xy 281.94 194.31) (xy 266.7 194.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "feb94796-7b12-488d-8414-9a5f5373916b") + ) + (wire + (pts + (xy 147.32 60.96) (xy 146.05 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fef2b9c8-3e67-4038-9451-3c9a159ba96b") + ) + (wire + (pts + (xy 46.99 92.71) (xy 50.8 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ff2d9517-e2cb-4e28-9ddf-94ec794e9a7e") + ) + (wire + (pts + (xy 191.77 231.14) (xy 181.61 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ff5fcab9-babc-4949-812a-e71e4bed47ce") + ) + (label "TC1" + (at 100.33 132.08 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "0151dac3-4fd4-4426-b5dd-2beb436402e1") + ) + (label "X Mode" + (at 162.56 199.39 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "0f9742f9-19d3-49a9-92e8-8e690e505c7f") + ) + (label "RC0.5" + (at 85.09 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "14d56a45-ba66-47d2-a3ee-c6ae779e8c03") + ) + (label "TC4" + (at 115.57 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "1c1c0c57-a5f2-4a5f-99a2-547973a52b26") + ) + (label "SDA" + (at 209.55 153.67 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "1eab2b5c-b1f7-48d6-9ba5-0947ddddc164") + ) + (label "TC8" + (at 115.57 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "25c05216-9334-44c0-a86e-b4e4a2ca29a4") + ) + (label "TX90" + (at 190.5 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "2b3e4fda-2833-49c8-af2f-b309f8b325d3") + ) + (label "TC4" + (at 100.33 137.16 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "2d14dc97-f999-44fd-a18c-c95d5e8cdadb") + ) + (label "ExciterEnable" + (at 234.95 196.85 180) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify right bottom) + ) + (uuid "2ece0263-c172-4bf8-a73a-5a5b3bacc177") + ) + (label "RXTX" + (at 134.62 158.75 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "33ea99d1-cf7c-44d6-8c31-450e611c1931") + ) + (label "RC8" + (at 100.33 162.56 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "39d1e1a4-9b52-42fb-a4f0-6719b21f3623") + ) + (label "TC0.5" + (at 86.36 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "3f2d18ab-ded6-4f75-89cd-7409dc04ed7f") + ) + (label "RC0.5" + (at 100.33 152.4 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "46a28b61-564a-4b3b-94ce-72592069f40b") + ) + (label "TX0" + (at 187.96 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "4733d42f-b29f-48ce-a5d6-416afe666c09") + ) + (label "Q_out" + (at 384.81 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "47e58cc9-8a97-4727-92eb-2db25717a15f") + ) + (label "SDA" + (at 53.34 129.54 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "4973552b-e76e-4077-88c0-3c959b10b6d8") + ) + (label "SDA" + (at 137.16 151.13 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "5aa720ef-ba5c-42f0-bc43-991426572f9c") + ) + (label "TC8" + (at 100.33 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "5cc581c0-4a72-4141-aa9a-a8d10b2860c4") + ) + (label "Cal" + (at 66.04 251.46 180) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify right bottom) + ) + (uuid "5f8d8838-129e-43ec-919e-37ad128d7480") + ) + (label "TC1" + (at 115.57 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "60f18817-7a8c-4f97-8121-9df64896082c") + ) + (label "RC1" + (at 115.57 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "62371618-7f32-4616-972d-d11a903b5385") + ) + (label "SCL" + (at 139.7 148.59 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "660a10a5-f9e3-4647-bcac-4a8258b4b68f") + ) + (label "RXTX" + (at 273.05 234.95 180) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify right bottom) + ) + (uuid "6b36d394-170c-42b2-8e11-f09232676f85") + ) + (label "I_out" + (at 384.81 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "72c8c688-48dd-4797-9676-973434bff668") + ) + (label "RC8" + (at 115.57 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "77a15a20-3ffb-4e99-a618-cb30bb55d4f2") + ) + (label "RX0" + (at 190.5 134.62 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "7d19b16c-46a9-4ec6-937d-65f99a09e770") + ) + (label "RC16" + (at 85.09 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "7e3ec8b4-4767-4edd-b6ee-d5e2f3620057") + ) + (label "CW on{slash}off" + (at 134.62 156.21 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "82b1c4ce-57c0-40a9-9d74-8ff683b05b7b") + ) + (label "RC1" + (at 100.33 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "90b40406-54a6-4093-b9af-71504accb108") + ) + (label "SCL" + (at 53.34 132.08 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "9352a2c3-6cf6-4b8f-a4ad-0e65c3d581c2") + ) + (label "RC2" + (at 115.57 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "9555a3a5-cde8-42a5-af13-4b463df67b33") + ) + (label "RC2" + (at 100.33 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "9d6779fc-48a8-4916-89c1-b502abc34a8b") + ) + (label "RC4" + (at 100.33 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "a7864cca-683e-49ab-82f1-e2b89084961f") + ) + (label "TC16" + (at 86.36 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "a9e44e3d-9b83-42a7-b763-31e02f2c2d01") + ) + (label "RC16" + (at 100.33 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "aa879221-3e3c-47ff-9a0c-d32368519295") + ) + (label "RFIN" + (at 31.75 218.44 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "ae685060-ae79-44a3-8d51-6c0d88e5a655") + ) + (label "TC2" + (at 115.57 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "ae74c6e0-4916-42d6-9fc4-f2ee4a364baa") + ) + (label "CW" + (at 195.58 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "c4ceda7b-df5c-4774-827b-8c48228225f9") + ) + (label "CW on{slash}off" + (at 177.8 255.27 180) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify right bottom) + ) + (uuid "c74e5d9c-5fbe-43bb-8b0b-d2e553b32ce1") + ) + (label "X Mode" + (at 162.56 153.67 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "d6557b70-2b12-42c8-9d22-ecfffeb8b566") + ) + (label "TC16" + (at 100.33 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "e1d3054a-56c5-4677-98da-ce1f3d1b26a1") + ) + (label "RC4" + (at 115.57 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "e2b47357-39ce-47b0-bba2-70205b75c507") + ) + (label "Cal" + (at 162.56 158.75 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "e4d3be49-88c1-4fa6-83f2-e8012d1d15b2") + ) + (label "TC2" + (at 100.33 134.62 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "ed78916e-8030-4072-9fb6-ee772f607e63") + ) + (label "SCL" + (at 209.55 156.21 0) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "efe412e4-ab5c-4282-b978-13c6554cd1b8") + ) + (label "RX90" + (at 187.96 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "f0700102-db01-4ba8-b079-d10d6ee4fd99") + ) + (label "TC0.5" + (at 100.33 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "ff1dcbf5-2ff9-4899-a70f-bfce8ab3cb52") + ) + (symbol + (lib_id "Device:R") + (at 217.17 256.54 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "00246cb7-3861-4c23-97da-6605bb13aeeb") + (property "Reference" "R26" + (at 215.392 255.3279 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 215.392 257.7521 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 215.392 256.54 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 217.17 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 217.17 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17948" + (at 217.17 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "RT1206FRE072K2L" + (at 217.17 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "8f2ca1cc-646c-4a7e-b037-584872ea311b") + ) + (pin "1" + (uuid "92625b66-e159-4b6e-a862-cd1acf480548") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R26") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 290.83 175.26 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "01a0ef8f-36af-4e18-b875-dced6f3511d3") + (property "Reference" "TP10" + (at 289.433 170.7459 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 289.433 173.1701 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 285.75 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 285.75 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 290.83 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 290.83 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e1c57a93-b845-4c32-b650-88dcc2c01eb0") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 177.8 91.44 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0290e991-8bb0-4f02-bce8-118aa626a0c8") + (property "Reference" "R20" + (at 179.578 90.2279 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10k" + (at 179.578 92.6521 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 176.022 91.44 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 177.8 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 177.8 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 177.8 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 177.8 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b21e7af0-4f02-41a5-a957-a0ba7ddae737") + ) + (pin "1" + (uuid "ac41632f-dd56-4565-9d90-2ac96cda47e3") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R20") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 120.65 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "034a0cd2-4926-422e-8eb0-b56bd12745b5") + (property "Reference" "TP18" + (at 122.047 41.2059 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 122.047 43.6301 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 125.73 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 125.73 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 120.65 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 120.65 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "a543b150-0f31-441d-b84a-f53a041dd9ba") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP18") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 297.18 194.31 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "03c5d55e-72b3-4092-9913-f082638efe48") + (property "Reference" "R38" + (at 297.18 189.1497 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "49R9 1%" + (at 297.18 191.5739 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 297.18 196.088 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 297.18 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 297.18 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C2984401" + (at 297.18 194.31 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CRCW120649R9FKEAC" + (at 297.18 194.31 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "fb9eb269-6897-42a0-98c0-f5fc13e310fa") + ) + (pin "1" + (uuid "a3e963bc-e460-480a-b529-a7fb802e54cc") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R38") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector_Audio:AudioJack3_SwitchTR") + (at 398.78 63.5 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "04582302-d9b5-4de1-979d-20ae5b2bc4ad") + (property "Reference" "J1" + (at 400.685 55.5457 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "IQ_Out" + (at 400.685 57.9699 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:Jack_3.5mm_STX-3081_Horizontal" + (at 398.78 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 398.78 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 398.78 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 398.78 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "SJ1-3515N" + (at 398.78 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "RN" + (uuid "828d9958-195b-40be-9aa9-faf70d4e1fa3") + ) + (pin "T" + (uuid "d4225aef-ccc6-4503-8cc6-c0aad463cb9d") + ) + (pin "S" + (uuid "313d3dea-f9b2-441f-b61f-0099b50d9d57") + ) + (pin "R" + (uuid "1592e4b3-e83c-4026-a330-1b0a59c5c42f") + ) + (pin "TN" + (uuid "1d54d0b9-7887-42e3-bc4c-7726fd9516c2") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 147.32 86.36 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "047baf6d-8cca-46c0-8fc8-373fcd683105") + (property "Reference" "R14" + (at 149.098 85.1479 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "36R5" + (at 149.098 87.5721 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 145.542 86.36 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 147.32 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 147.32 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C205349" + (at 147.32 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CRCW120636R5FKEA" + (at 147.32 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "8d76923e-7301-4718-95b5-6176164536f9") + ) + (pin "1" + (uuid "891aada7-753f-4b53-bc9f-3bb72743c092") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R14") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C_Polarized") + (at 34.29 49.53 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "048b6365-a59b-49ee-83db-d30c96c3c008") + (property "Reference" "C69" + (at 31.369 47.4289 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "470uF 25V" + (at 31.369 49.8531 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_THT:CP_Radial_D10.0mm_P5.00mm" + (at 33.3248 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 34.29 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 34.29 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 34.29 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" " ECA-1EM471" + (at 34.29 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "16e91181-0588-48e6-9fea-90a2ea27e44b") + ) + (pin "1" + (uuid "e60d59a8-66ca-438a-89c0-beeccc69c54b") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C69") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Jumper:SolderJumper_2_Open") + (at 39.37 146.05 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "071668b0-ba22-494c-a5a3-d1ac16c4618e") + (property "Reference" "JP17" + (at 39.37 143.4409 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SolderJumper_2_Open" + (at 39.37 143.4409 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm" + (at 39.37 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 39.37 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 39.37 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 39.37 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "30572bc6-1d41-4467-a670-5d04b2cf8ea9") + ) + (pin "1" + (uuid "520322b2-2ab7-4897-996e-861c0373e93c") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "JP17") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 87.63 222.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "089a996f-056a-4a83-b10b-03313b7a8230") + (property "Reference" "#PWR063" + (at 87.63 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 90.424 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 87.63 222.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 87.63 222.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 87.63 222.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f0b24cf4-3c56-4df6-a0cf-b4bb9763852e") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR063") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 137.16 78.74 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "08c7d01b-39fd-4c0f-a2fa-f519b249987d") + (property "Reference" "#PWR011" + (at 137.16 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 132.334 77.978 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 137.16 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 137.16 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 137.16 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "aed621fa-54f1-4854-b4eb-1a0975bf9c04") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR011") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 248.92 102.87 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0a382700-8107-47e2-b455-b22b25758a43") + (property "Reference" "C28" + (at 251.841 101.6579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10nF 50V" + (at 251.841 104.0821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 247.9548 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 248.92 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 248.92 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1846" + (at 248.92 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C103K5RAC7210" + (at 248.92 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "78663115-aa96-438e-bf2f-528e9bf2f8cc") + ) + (pin "1" + (uuid "02cc780c-7fbd-41e4-a6ca-a0a9dc85de55") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C28") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 365.76 66.04 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0ac4d9c2-305f-4261-a996-efedd4da4cfc") + (property "Reference" "#PWR037" + (at 365.76 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 365.76 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 365.76 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 365.76 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 365.76 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1c10e4a4-42d2-46a2-b1f9-f3601f03a7e4") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR037") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 76.2 238.76 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0acbd015-fe1f-4c27-a891-489b817ab310") + (property "Reference" "#PWR072" + (at 72.39 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 76.2 241.3 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 76.2 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 76.2 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 76.2 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f8d184ad-316f-467c-95c8-30ab3244f7d0") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR072") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 251.46 240.03 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0b71a289-a48d-4f30-a61a-41247aa1cbd4") + (property "Reference" "R48" + (at 249.682 238.8179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "100k" + (at 249.682 241.2421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 253.238 240.03 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 251.46 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 251.46 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17900" + (at 251.46 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CRCW1206100KFKEAC" + (at 251.46 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "950890ff-ce0f-4376-a3a8-14ae4ab44955") + ) + (pin "1" + (uuid "62c48ccc-b042-467b-8290-d883de2ec983") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R48") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 73.66 215.9 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0b76c1f3-ae09-4964-a2c3-b3a138d419a3") + (property "Reference" "C63" + (at 73.66 222.2033 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 73.66 219.7791 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 69.85 216.8652 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 73.66 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 73.66 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 73.66 215.9 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 73.66 215.9 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e3643064-0d7f-4681-9330-fdf86a4d18b5") + ) + (pin "1" + (uuid "b373cbcd-d8f4-4e81-9151-4be97f339935") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C63") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 91.44 49.53 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0b805e27-5453-4732-a757-157994f1ce08") + (property "Reference" "C72" + (at 94.361 48.3179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 94.361 50.7421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 92.4052 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 91.44 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 91.44 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 91.44 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 91.44 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6caec6ee-9f74-4d6d-90c2-c71813dc8df5") + ) + (pin "1" + (uuid "084b5dc4-3c62-49ed-aaba-811e6cdc0966") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C72") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector_Audio:AudioJack3_SwitchTR") + (at 398.78 182.88 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0b9d605b-8272-4da3-927e-09bf8ecd3f30") + (property "Reference" "J5" + (at 400.685 174.9257 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "IQ_In" + (at 400.685 177.3499 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:Jack_3.5mm_STX-3081_Horizontal" + (at 398.78 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 398.78 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 398.78 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 398.78 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "SJ1-3515N" + (at 398.78 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "RN" + (uuid "d6345e8a-1eb2-4170-88ab-8e4e503170c1") + ) + (pin "T" + (uuid "ffc9355a-3022-4fa3-ae78-4a9e00d686f3") + ) + (pin "S" + (uuid "b81ee287-7387-4942-b8c1-0f5cefe0aecc") + ) + (pin "R" + (uuid "51b31117-fa65-4ae8-9b4d-116b4cd84df8") + ) + (pin "TN" + (uuid "7724f492-5fe4-4100-97c1-8c8955409c14") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 242.57 223.52 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0c4cab63-fe82-48cc-b4ab-8a8ba567bb05") + (property "Reference" "R39" + (at 240.792 222.3079 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10k" + (at 240.792 224.7321 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 240.792 223.52 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 242.57 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 242.57 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 242.57 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 242.57 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3eabf04f-8ace-4db5-9921-b2a16a3c219a") + ) + (pin "1" + (uuid "9ac9cdbf-1f38-4d74-878f-070a0285f38b") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R39") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 382.27 205.74 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0d8e08c4-b089-4425-85c1-18e7b61e1f63") + (property "Reference" "R67" + (at 382.27 200.5795 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0" + (at 382.27 203.0038 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 382.27 207.518 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 382.27 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 382.27 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17888" + (at 382.27 205.74 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "1206S4J0000TDE" + (at 382.27 205.74 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ee801a57-8abc-4b31-850d-ab8d04f3ec0a") + ) + (pin "1" + (uuid "ad279040-e43d-47ee-aa75-0b89c2df7a06") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R67") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 35.56 147.32 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0de05137-a7a7-4098-a1e8-da5fc5f23aaa") + (property "Reference" "#PWR093" + (at 35.56 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 33.02 148.59 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 35.56 147.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 35.56 147.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 35.56 147.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "9db35ee6-5bb1-4c08-a50d-34e706a49dbf") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR093") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 383.54 232.41 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0e0dca48-8401-4a25-bbcf-4d807f518ec4") + (property "Reference" "#PWR045" + (at 383.54 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 383.54 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 383.54 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 383.54 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 383.54 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "17d43dc2-4d88-4e2d-b81a-278ecd7a09b7") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR045") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 351.79 158.75 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0e1038ec-402a-4a0c-a2a6-3a6b63463f4f") + (property "Reference" "R25" + (at 351.79 153.5897 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10k 1%" + (at 351.79 156.0139 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 351.79 160.528 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 351.79 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 351.79 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 351.79 158.75 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 351.79 158.75 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "acca2d02-3dd5-43c1-bfd5-8339fba9db95") + ) + (pin "1" + (uuid "cfe652a6-c926-4df5-bdb6-b7b7177432ac") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R25") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Regulator_Linear:LM1117T-3.3") + (at 62.23 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "1076a160-2fc8-48a7-87c5-54c02c210b9f") + (property "Reference" "U15" + (at 62.23 39.6707 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM1117T-3.3" + (at 62.23 42.0949 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 62.23 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/symlink/lm1117.pdf" + (at 62.23 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 62.23 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C201726" + (at 62.23 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "LM1117T-3.3/NOPB" + (at 62.23 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "4e856064-f410-4982-8b08-a4d5fd7418dd") + ) + (pin "2" + (uuid "013b6a8a-bec8-487e-8373-236b64df5ff6") + ) + (pin "1" + (uuid "17044a74-bf15-4002-809a-5f98903c2125") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 281.94 114.3 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "108384fb-3537-45bd-b0df-689ad26532a7") + (property "Reference" "#PWR029" + (at 281.94 120.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 281.94 118.4331 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 281.94 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 281.94 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 281.94 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "28dea3a5-5f2e-41b8-9d35-8473f209422d") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR029") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 179.07 102.87 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "110a334b-dcf5-4016-b548-43542d9a19ff") + (property "Reference" "TP6" + (at 177.673 107.3841 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 177.673 104.9599 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 173.99 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 173.99 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 179.07 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 179.07 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "9fcb286e-5c39-4d74-8149-1b08b0e2d75f") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 208.28 149.86 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1164c150-14ab-4b93-898a-2899f3bef612") + (property "Reference" "#PWR084" + (at 208.28 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 209.55 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 208.28 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 208.28 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 208.28 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4b374cef-95c1-4f4a-acc9-a814fab4bc30") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR084") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 248.92 157.48 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "122e4d81-69a2-4b65-99aa-d77f5fb9a947") + (property "Reference" "#PWR052" + (at 248.92 161.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 252.73 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 248.92 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 248.92 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 248.92 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "edcb060d-22c3-4ded-b687-3e4d8657c251") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR052") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 243.84 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "124d1745-51fe-4f71-869e-f96ae7f63337") + (property "Reference" "#PWR025" + (at 243.84 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 243.84 77.7931 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 243.84 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 243.84 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 243.84 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "bb64dc8b-5abe-4881-958f-bc20b273d180") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR025") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xGxx:74LVC1G04") + (at 142.24 199.39 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "12d4b9e6-7b80-4785-99d2-49a191cf8b1f") + (property "Reference" "U5" + (at 138.43 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SN74LVC1G04DCK" + (at 137.16 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:SOT-SC70" + (at 142.24 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 142.24 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 142.24 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C8207" + (at 142.24 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "SN74LVC1G04DCKR" + (at 142.24 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "04c5b16f-8561-43df-a2b4-6ed495344b9c") + ) + (pin "4" + (uuid "c43b66f8-882d-47ff-9cb0-b1257c5748dd") + ) + (pin "3" + (uuid "17c3bb1c-e6d3-45f7-828f-1a33fbbedaeb") + ) + (pin "5" + (uuid "786c94a6-3f7b-4683-afec-41f3acafad51") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 44.45 49.53 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "14958baa-fb6b-4ad7-a139-c14d848671a6") + (property "Reference" "C70" + (at 47.371 48.3179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 47.371 50.7421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 45.4152 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 44.45 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 44.45 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 44.45 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 44.45 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "66bb862c-7331-4cac-8b17-d29d0d167aef") + ) + (pin "1" + (uuid "41bf3267-286b-4e00-ba14-d50365760fba") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C70") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Amplifier_Operational:MC33078") + (at 271.78 44.45 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1564b91c-b52f-4107-b971-1905bf199be4") + (property "Reference" "U106" + (at 271.78 53.6743 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "AD8599" + (at 271.78 51.2501 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 271.78 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.analog.com/media/en/technical-documentation/data-sheets/AD8597_8599.pdf" + (at 271.78 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 271.78 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C207971" + (at 271.78 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "AD8599ARZ-REEL" + (at 271.78 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "d4338d04-f2e5-46f5-b9f4-6523cce45fc2") + ) + (pin "3" + (uuid "b5457395-2677-4c18-8688-fb161809ff89") + ) + (pin "7" + (uuid "5c9a58fc-5c2e-4884-8564-dd00f456f463") + ) + (pin "4" + (uuid "7424284b-d874-43b1-a298-41afdf4b582d") + ) + (pin "6" + (uuid "3da680ea-2720-4ce3-be85-fe4005c9d4f1") + ) + (pin "8" + (uuid "3a714538-558b-4865-824b-0c87abcceb17") + ) + (pin "5" + (uuid "8b590559-1f6f-4b77-ab7c-97758f4928c0") + ) + (pin "2" + (uuid "f4a7bf9a-2a7f-4a30-95bd-b12ec74abf51") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U106") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 168.91 196.85 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "15ebd158-167c-4398-ac99-7af57e098e9e") + (property "Reference" "C62" + (at 175.26 196.85 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 177.8 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 169.8752 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 168.91 196.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 168.91 196.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 168.91 196.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 168.91 196.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "179d774c-dc22-46fc-8fd8-8f90bc3a8282") + ) + (pin "1" + (uuid "edebc610-2626-4a87-8484-7b532aa1f05a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C62") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 309.88 86.36 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "17685fda-0056-45c5-a594-d73d9ed8d2cb") + (property "Reference" "#PWR035" + (at 309.88 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 312.42 87.63 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 309.88 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 309.88 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 309.88 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "32c77b3c-e641-4cd4-93a7-1c5719218771") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR035") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 346.71 227.33 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "18059823-6817-46dd-a91e-89ebc6f732e2") + (property "Reference" "R50" + (at 344.932 226.1179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 344.932 228.5421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 344.932 227.33 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 346.71 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 346.71 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17948" + (at 346.71 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "RT1206FRE072K2L" + (at 346.71 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "38e15ee7-6d06-4aaf-9fa7-ad05a6abe3b5") + ) + (pin "1" + (uuid "a825cde7-aa6e-42b5-8d08-d9ba0d863f13") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R50") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 297.18 158.75 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "18238101-274d-4a8c-a70d-46cb6c00117c") + (property "Reference" "R27" + (at 297.18 153.5897 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "49R9 1%" + (at 297.18 156.0139 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 297.18 160.528 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 297.18 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 297.18 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C2984401" + (at 297.18 158.75 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CRCW120649R9FKEAC" + (at 297.18 158.75 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "afcde3ae-c182-49b9-bafe-8a20fa58fec8") + ) + (pin "1" + (uuid "1025f49d-2706-4ed9-a1b4-5bc3636a0b8a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R27") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:IDC_2x5") + (at 148.59 153.67 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "1b978540-a6cb-4754-98fa-d1146e6b35ec") + (property "Reference" "J3" + (at 149.86 143.1757 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "RFControl" + (at 149.86 145.5999 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x05_P2.54mm_Vertical" + (at 148.59 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 148.59 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 148.59 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "9" + (uuid "3ead77d2-8eb9-45a2-825c-6622800127ef") + ) + (pin "5" + (uuid "7b783577-55f5-4be4-ab64-5e4b8a398084") + ) + (pin "2" + (uuid "c75d115e-7bec-4df7-b9cd-c7fdd5b59e68") + ) + (pin "4" + (uuid "f2648471-bb5e-47bb-9c06-8a3a8ef590e0") + ) + (pin "6" + (uuid "28725db9-fa37-4f6c-ae67-7462c140e3f5") + ) + (pin "10" + (uuid "ec187f5b-7416-4808-b58b-43b2d220756e") + ) + (pin "7" + (uuid "233ab9fa-f561-4978-aa9d-ebd3a9b999f6") + ) + (pin "3" + (uuid "203e2052-7937-445c-ad64-4b87fa497199") + ) + (pin "1" + (uuid "e88380c4-95be-4fd1-9b69-3f22904a49bc") + ) + (pin "8" + (uuid "f15e9e1e-04e2-447e-9896-2aa83d70dbc6") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 346.71 90.17 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1c4008fe-fc32-44e1-8e53-626895126a4f") + (property "Reference" "R65" + (at 346.71 85.0097 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0" + (at 346.71 87.4339 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 346.71 91.948 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 346.71 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 346.71 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17888" + (at 346.71 90.17 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "1206S4J0000TDE" + (at 346.71 90.17 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "af161c98-1fa0-45b5-800d-db3a86c7d303") + ) + (pin "1" + (uuid "d03f6087-a418-456f-9ff4-2914da8bbad3") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R65") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Amplifier_Operational:MC33078") + (at 332.74 90.17 0) + (mirror x) + (unit 2) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1db45799-e8c4-4486-b87f-b8d1ea5f60b5") + (property "Reference" "U107" + (at 332.74 99.3943 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "OPA2209" + (at 332.74 96.9701 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 332.74 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/opa2209.pdf" + (at 332.74 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 332.74 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C2057330" + (at 332.74 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "OPA2209AIDR" + (at 332.74 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "cb9d96e0-16e2-4c49-ba9e-6fbc7fecf923") + ) + (pin "6" + (uuid "54ee0ecc-e626-4a25-9e4a-e46b92559c5b") + ) + (pin "3" + (uuid "afdd1e38-2469-483d-a93e-a88cd981d04f") + ) + (pin "4" + (uuid "a81a1a81-8f0f-4ad8-a30e-188050bb57af") + ) + (pin "8" + (uuid "504c6d13-f351-4f9d-8cc7-d29f1899f6a6") + ) + (pin "2" + (uuid "40c07fc5-733e-4598-85f0-5c69fca669fc") + ) + (pin "7" + (uuid "f0ff8adc-5fbe-473e-a802-e38e5f9c3da7") + ) + (pin "1" + (uuid "2ef09dcb-ad12-46f7-a336-f426be899085") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U107") + (unit 2) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 165.1 91.44 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1e5ab43d-1e9d-41d2-a920-5d2659d8eb34") + (property "Reference" "C20" + (at 163.83 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 170.18 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 166.0652 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 165.1 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 165.1 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 165.1 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 165.1 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "4222d18d-4070-4e3b-b866-9f6869b24960") + ) + (pin "1" + (uuid "66b37322-2faf-416c-95f4-6e2453ac709f") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C20") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 297.18 210.82 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "1f0580c7-24e5-4020-93bd-02b041d0a65d") + (property "Reference" "R43" + (at 297.18 205.6597 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "49R9 1%" + (at 297.18 208.0839 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 297.18 212.598 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 297.18 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 297.18 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C2984401" + (at 297.18 210.82 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CRCW120649R9FKEAC" + (at 297.18 210.82 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d4df4a00-24ac-46b0-b612-dd9642dbcc35") + ) + (pin "1" + (uuid "dfb4a60a-c777-4777-bf98-376aac298e79") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R43") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 285.75 57.15 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1f82689d-ada3-4731-a445-a8ded8cac1a9") + (property "Reference" "C7" + (at 288.671 55.9379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 288.671 58.3621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 284.7848 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 285.75 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 285.75 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 285.75 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 285.75 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "cb093975-758f-4cf3-b1cf-3d6f587c2826") + ) + (pin "1" + (uuid "6bb640d2-f150-4390-a943-055fc2526873") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 361.95 205.74 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "22812166-9c76-4baf-bdcc-32c082aac999") + (property "Reference" "R45" + (at 361.95 200.5797 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "2k2 1%" + (at 361.95 203.0039 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 361.95 207.518 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 361.95 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 361.95 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17948" + (at 361.95 205.74 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "RT1206FRE072K2L" + (at 361.95 205.74 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "50b1330e-17db-462c-9d32-6f123011db14") + ) + (pin "1" + (uuid "10a7e716-6794-48fe-b2c8-1f78ede11941") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R45") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 187.96 172.72 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "231fde3c-dafb-4766-ab72-9b60afee568b") + (property "Reference" "R35" + (at 185.42 171.4499 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0" + (at 185.42 173.9899 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 186.182 172.72 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 187.96 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 187.96 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17888" + (at 187.96 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "1206S4J0000TDE" + (at 187.96 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "567848e9-9a5d-4681-8e2c-7193cac9147a") + ) + (pin "1" + (uuid "5b3cf3f9-82bd-4133-8981-51a45f68bdd5") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R35") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 21.59 107.95 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "23e178aa-f6c3-4599-afef-c8429007bb46") + (property "Reference" "#PWR02" + (at 21.59 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 21.59 112.0831 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 21.59 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 21.59 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 21.59 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "402478c8-36ef-40de-ae55-5f0333eee9af") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR02") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 306.07 243.84 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "25e299bd-e975-4ef5-ba4a-b03a9383f395") + (property "Reference" "C35" + (at 308.102 248.158 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10uF 50V" + (at 296.926 248.412 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 309.88 244.8052 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 306.07 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 306.07 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C13585" + (at 306.07 243.84 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C106K4PACTU" + (at 306.07 243.84 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "30681797-e167-4397-ae9c-2ef701f52a2c") + ) + (pin "1" + (uuid "c4ae42d2-d9cf-4c33-bee6-d33825965e30") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C35") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 290.83 194.31 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "262ac98d-26f7-49b5-ad76-eaf48a8eba83") + (property "Reference" "TP11" + (at 289.433 189.7959 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 289.433 192.2201 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 285.75 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 285.75 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 290.83 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 290.83 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e68d431d-388f-4028-9001-4c4d13401d19") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 314.96 92.71 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "27b2e266-298b-4934-bfac-99d443a9eadc") + (property "Reference" "R18" + (at 314.96 87.5497 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "5k1" + (at 314.96 89.9739 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 314.96 94.488 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 314.96 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 314.96 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C26033" + (at 314.96 92.71 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "ERJ-8ENF5101V" + (at 314.96 92.71 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a9d83d0a-5c0b-4d44-8ed4-9155708a68c8") + ) + (pin "1" + (uuid "8d39661a-754d-4b7c-8a82-e7172c072b0a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R18") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 237.49 154.94 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "298b4a03-8052-4bc6-a5e4-d1afb79e28f6") + (property "Reference" "#PWR065" + (at 237.49 161.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 236.22 159.258 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 237.49 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 237.49 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 237.49 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "328fcf46-3aa3-4819-9aae-7cab2ac7b2c9") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR065") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 138.43 24.13 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "29aa1a78-21d9-42a8-b3e1-5bbb38a08098") + (property "Reference" "#PWR053" + (at 138.43 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 138.43 28.2631 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 138.43 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 138.43 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 138.43 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0656e774-0cb7-41f3-ba01-f21f39574e26") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR053") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 264.16 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "29fd8745-d9b0-4e11-9636-fe3862effc42") + (property "Reference" "#PWR032" + (at 264.16 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 264.16 79.0631 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 264.16 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 264.16 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 264.16 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "69bd572f-330b-47c0-9edc-34e0e2c7b168") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR032") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 281.94 100.33 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2a5e64a2-ce75-4c19-8e94-5b9eac801ecf") + (property "Reference" "R21" + (at 283.718 99.1179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10k" + (at 283.718 101.5421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 283.718 100.33 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 281.94 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 281.94 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 281.94 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 281.94 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "624bab78-a3fc-4027-aa9e-1ccd02408a2b") + ) + (pin "1" + (uuid "1d1601ad-c933-497a-9eca-7ec47d2a8976") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R21") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 161.29 226.06 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2adb8092-d223-4f73-b9d2-115dafcdfabb") + (property "Reference" "C47" + (at 167.64 227.33 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 165.1 229.87 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 157.48 225.0948 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 161.29 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 161.29 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 161.29 226.06 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 161.29 226.06 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "43c6426a-7be8-458d-b98b-60a26f69d19d") + ) + (pin "1" + (uuid "e1aaa6bd-5cf3-40b2-bc28-2e0d3eab93af") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C47") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 168.91 262.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board no) + (dnp no) + (uuid "2b7b24b8-bee6-4bd4-921e-3f00839e3468") + (property "Reference" "R73" + (at 171.45 261.9897 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "100k" + (at 171.45 264.414 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 167.132 262.89 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 168.91 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 168.91 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17900" + (at 168.91 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CRCW1206100KFKEAC" + (at 168.91 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "fe1d7a52-5991-4086-bdc4-bfaa9e158bb0") + ) + (pin "1" + (uuid "bf0e3f96-2ee3-4afb-9235-67b6446daa92") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R73") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 278.13 66.04 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "2c05b2a7-1a1a-4550-b1cb-78dd213d8c88") + (property "Reference" "#PWR028" + (at 278.13 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 278.13 70.1731 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 278.13 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 278.13 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 278.13 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "d25128c5-de6b-4441-972d-f5071684a8b5") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR028") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 250.19 90.17 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "2c269965-af34-48bf-a484-1241d7d9c456") + (property "Reference" "TP5" + (at 245.11 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 251.46 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 255.27 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 255.27 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 250.19 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 250.19 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "d5cf2bdf-09cc-47a7-905c-24e324448a22") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Screw_Terminal_01x02") + (at 21.59 31.75 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "2f68449d-6fb7-407d-9d37-edc228f7c982") + (property "Reference" "J4" + (at 23.622 31.8079 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "12-13.8V" + (at 23.622 34.2321 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "TerminalBlock:TerminalBlock_bornier-2_P5.08mm" + (at 21.59 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 21.59 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 21.59 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 21.59 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "bcc03d43-d58f-4337-b104-4f5ceee2fbe0") + ) + (pin "2" + (uuid "098f9cd1-8740-48c5-8581-a3118ff9ef82") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 160.02 273.05 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "302be67a-dff6-4143-9b5a-666f062f3f04") + (property "Reference" "#PWR074" + (at 160.02 279.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 156.21 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 160.02 273.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 160.02 273.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 160.02 273.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "671afcd6-20a3-4d01-9f6e-f5cd713b090f") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR074") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 248.92 210.82 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "304d72fc-224c-4125-b125-9ab7f8e16fec") + (property "Reference" "#PWR054" + (at 248.92 217.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 248.92 214.9531 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 248.92 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 248.92 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 248.92 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b9c54a90-f24e-4cc6-8b4d-7ae0f472fb88") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR054") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 326.39 231.14 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "30b18de9-486a-4de1-94c5-783a6eff3c0c") + (property "Reference" "#PWR043" + (at 326.39 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 326.39 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 326.39 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 326.39 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 326.39 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "38417221-e95a-444b-a158-9a0608ca0087") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR043") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 73.66 49.53 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "318fc588-08c5-4ef9-be94-44a7f4e985c3") + (property "Reference" "C71" + (at 76.581 48.3179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10uF 50V" + (at 76.581 50.7421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 74.6252 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 73.66 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 73.66 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C13585" + (at 73.66 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C106K4PACTU" + (at 73.66 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1dc767d0-a614-40b9-b8c8-524781d26b86") + ) + (pin "1" + (uuid "1d70c36f-32c2-40c9-8dd0-a8e4d457e8b9") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C71") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 21.59 102.87 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "31a99f55-9d07-42e7-92b3-b0bc88893cbc") + (property "Reference" "J2" + (at 19.0499 101.9511 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "RF_IN" + (at 29.21 106.426 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 21.59 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 21.59 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 21.59 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 21.59 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CONSMA001-G" + (at 21.59 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5b2b4d0a-3156-4fb1-ac54-6719a74321f1") + ) + (pin "2" + (uuid "db5aa626-0a5b-4ed5-80f1-71864d3ec913") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 346.71 41.91 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "32089dfe-57dd-4cae-b1f9-0f2d9b1505f7") + (property "Reference" "R64" + (at 346.71 36.7497 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0" + (at 346.71 39.1739 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 346.71 43.688 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 346.71 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 346.71 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17888" + (at 346.71 41.91 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "1206S4J0000TDE" + (at 346.71 41.91 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "db25c0cb-e612-4a6a-823d-4dbde80b48ab") + ) + (pin "1" + (uuid "25fc55c0-1518-4baf-ad45-9b863e3e6655") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R64") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 389.89 193.04 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "331eaf33-7aab-43bf-a853-46f75bae2c51") + (property "Reference" "TP14" + (at 385.191 191.8279 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 385.191 194.2521 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 389.89 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 389.89 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 389.89 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 389.89 193.04 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5b551c89-b9cb-4abf-a15b-4e93e9ea12be") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP14") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 289.56 105.41 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "338b06c8-9320-494b-a839-aeb61306a1a3") + (property "Reference" "C23" + (at 292.481 104.1979 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 292.481 106.6221 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 288.5948 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 289.56 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 289.56 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 289.56 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 289.56 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c57f5763-6233-4319-a2fe-a0b100d99eb6") + ) + (pin "1" + (uuid "cb748b54-b24b-4e5c-9300-9d7017e20a8b") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C23") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 237.49 236.22 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "34824563-2e10-44f5-a18e-b9ee0148de99") + (property "Reference" "C55" + (at 233.68 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 231.14 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 236.5248 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 237.49 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 237.49 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 237.49 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 237.49 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "9882d5a3-50a0-4bbd-a5ac-96e476ad9829") + ) + (pin "1" + (uuid "8c9a3e0a-b885-429a-baf1-b656971e5dc3") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C55") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 297.18 71.12 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "35295b02-595e-4588-b32e-6d06242597b4") + (property "Reference" "L3" + (at 297.8149 69.9078 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "FB" + (at 297.8149 72.3321 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 297.18 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 297.18 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 297.18 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C74486" + (at 297.18 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "HZ1206E601R-10" + (at 297.18 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "18ff0e78-d3db-4f53-9970-91418106c94e") + ) + (pin "2" + (uuid "a4fe015b-ef63-4921-b180-05708c8e5166") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 187.96 127 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "35a5b78b-3a99-4617-ba83-097c71e2fdaf") + (property "Reference" "R42" + (at 182.7997 127 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0" + (at 185.2239 127 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 189.738 127 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 187.96 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 187.96 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17888" + (at 187.96 127 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "1206S4J0000TDE" + (at 187.96 127 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "0e264eac-5455-4e5b-9f8c-15a09c3b2e33") + ) + (pin "1" + (uuid "3880d028-2813-4bfc-8e2c-f4f9c24723e5") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R42") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:T41_Attenuator_Daughter") + (at 102.87 219.71 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "35a95134-2da2-46cd-8da3-6c320b7d18a4") + (property "Reference" "U3" + (at 102.235 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "T41_Attenuator_Daughter" + (at 102.235 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:T41_Attenuator_Daughter" + (at 106.045 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 106.68 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 102.87 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 102.87 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "8" + (uuid "90005322-3635-4dc0-a81b-67953c5493af") + ) + (pin "10" + (uuid "e362fef4-e736-428f-b050-11642afb7a00") + ) + (pin "12" + (uuid "921ad399-bc8f-4d08-aecb-43b67f87d20d") + ) + (pin "9" + (uuid "a4f3910f-4f07-4b80-86f3-1893ae4b2e90") + ) + (pin "7" + (uuid "29a75a1e-c65c-4cf1-8afb-453ceccd9fc6") + ) + (pin "11" + (uuid "5df881a6-19cd-4f4b-bba5-ba5062c0d987") + ) + (pin "6" + (uuid "0940a76d-9ea5-41f9-91f0-31c9cf5498b4") + ) + (pin "5" + (uuid "f0938093-dbf1-4ca6-b8f2-d3e9af43497a") + ) + (pin "4" + (uuid "82d3773b-2e1b-41e3-b3f7-f0ce7999612f") + ) + (pin "3" + (uuid "d26eaeec-cc9b-4a21-9831-506a80472f68") + ) + (pin "2" + (uuid "bc5af7f1-5e44-4d7a-8393-b551743ec031") + ) + (pin "1" + (uuid "4094b7a6-21b1-4b47-9f7d-1fcb10734e46") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 281.94 219.71 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "37bc15b5-5175-46db-ac4c-74597d98d864") + (property "Reference" "#PWR050" + (at 281.94 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 279.4 222.25 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 281.94 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 281.94 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 281.94 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1bbf45d8-e37c-4348-be85-0073ccc704a6") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR050") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 137.16 111.76 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "38681e48-29d8-4cdf-995e-6b40f51009d3") + (property "Reference" "#PWR05" + (at 137.16 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 140.97 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 137.16 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 137.16 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 137.16 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b8b05a3e-c07b-40ae-9d13-eedfd2c69b49") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR05") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 361.95 170.18 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3989d841-2f9e-46f0-9cbf-b57be4d3a7cb") + (property "Reference" "R31" + (at 361.95 165.0197 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "2k2 1%" + (at 361.95 167.4439 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 361.95 171.958 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 361.95 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 361.95 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17948" + (at 361.95 170.18 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "RT1206FRE072K2L" + (at 361.95 170.18 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1fce9760-15eb-4edd-8c19-6c6878b2b175") + ) + (pin "1" + (uuid "7f550fb1-9caa-4b44-9b70-0fceaac35059") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R31") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 242.57 219.71 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "39d08bf7-3221-4e89-819d-144b03587437") + (property "Reference" "#PWR056" + (at 242.57 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 246.38 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 242.57 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 242.57 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 242.57 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "da0bc3f7-bb4c-421a-9c7f-0ed417e9866f") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR056") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 307.34 175.26 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3a8ab93c-ee70-4bbb-9764-e4e6ad97b89d") + (property "Reference" "R28" + (at 307.34 170.0995 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0" + (at 307.34 172.5238 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 307.34 177.038 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 307.34 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 307.34 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17888" + (at 307.34 175.26 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "1206S4J0000TDE" + (at 307.34 175.26 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d7651d80-bd43-47a3-8953-3dd91f4c9ff0") + ) + (pin "1" + (uuid "84302cb3-4288-4758-9f37-fe7b4fff27bf") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R28") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 105.41 24.13 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3ab8583d-be9c-4d25-aaad-051d3aff24ac") + (property "Reference" "L12" + (at 105.41 19.4804 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10uH 20%" + (at 105.41 21.9046 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Inductor_SMD:L_Bourns-SRN6028" + (at 105.41 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 105.41 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 105.41 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C5753503" + (at 105.41 24.13 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "IFSC2020DEER100M01" + (at 105.41 24.13 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "15ebfe7e-59a4-4f5b-8284-2b47bdd1ceb9") + ) + (pin "2" + (uuid "7e349eb3-7b43-4dc4-8628-3d71d7b5e746") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L12") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Jumper:SolderJumper_2_Open") + (at 39.37 140.97 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3c4e6ba0-f85f-4c92-b61c-ce9ed6d42e30") + (property "Reference" "JP16" + (at 39.37 138.3609 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SolderJumper_2_Open" + (at 39.37 138.3609 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm" + (at 39.37 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 39.37 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 39.37 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 39.37 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "56f3d980-0bab-4c33-994f-6f283e95d54f") + ) + (pin "1" + (uuid "20f2a3dc-27fa-4eda-98a9-1a77e23169a9") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "JP16") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 140.97 91.44 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3dda600c-b8cd-4871-91c6-c6135f5adb03") + (property "Reference" "#PWR010" + (at 140.97 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 143.51 92.71 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 140.97 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 140.97 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 140.97 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "96349534-f937-4d1e-b249-9e06c50c97b3") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR010") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 36.83 218.44 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3f20cd71-b0f0-4efe-8aeb-a6f588a7f0f4") + (property "Reference" "C58" + (at 36.83 224.7433 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 36.83 222.3191 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 33.02 219.4052 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 36.83 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 36.83 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 36.83 218.44 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 36.83 218.44 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b71e2a2e-72bf-472d-92b9-19b3306243cf") + ) + (pin "1" + (uuid "65905b11-282c-49b7-bc15-e5df170d4722") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C58") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 247.65 245.11 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3faaaccb-603d-4e32-9045-5545af64e1c2") + (property "Reference" "#PWR057" + (at 247.65 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 245.11 247.65 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 247.65 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 247.65 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 247.65 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "833695bb-6609-426c-9f65-4a326a8569fe") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR057") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 243.84 95.25 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "404217e1-602c-4c5f-926c-75e3e15d1c75") + (property "Reference" "C24" + (at 242.6279 98.171 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1uF 50V" + (at 245.0521 98.171 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 240.03 94.2848 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 243.84 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 243.84 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1848" + (at 243.84 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CL31B105KBHNNNE" + (at 243.84 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e611550f-2a13-4cf0-ad64-bf277bf3f595") + ) + (pin "1" + (uuid "cb05cbde-5eff-490e-9b0a-166c5d38e725") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C24") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 92.71 121.92 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "411c39fb-3c86-4401-a8d0-232a1bd79d7c") + (property "Reference" "C80" + (at 96.52 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 99.06 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 93.6752 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 92.71 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 92.71 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 92.71 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 92.71 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "67c8d477-fdb1-4206-a1ed-84d121f19c1c") + ) + (pin "1" + (uuid "afd9af37-b989-48d3-8908-a444091c49c3") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C80") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 243.84 25.4 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "420c742c-732b-47f9-add5-e9b1eacf6e38") + (property "Reference" "#PWR024" + (at 243.84 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 243.84 29.5331 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 243.84 25.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 243.84 25.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 243.84 25.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "eb4cd4ba-d115-4b11-ab37-f6de356edc9a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR024") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 281.94 179.07 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "42836c31-5386-41b9-9ac8-15a148403709") + (property "Reference" "C38" + (at 285.75 176.53 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.2uF 50V" + (at 292.1 181.61 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 282.9052 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 281.94 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 281.94 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1857" + (at 281.94 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "12065C204KAT4A" + (at 281.94 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d1056932-948d-410e-895b-495ed38cfd7b") + ) + (pin "1" + (uuid "a749c5b3-1cc0-49d6-9e87-51f29068e678") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C38") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 165.1 255.27 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "433fc47f-07a2-4d94-8619-61d5b0844528") + (property "Reference" "R58" + (at 165.1 250.1097 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "51k" + (at 165.1 252.5339 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 165.1 253.492 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 165.1 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 165.1 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17992" + (at 165.1 255.27 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-5102ELF" + (at 165.1 255.27 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a5308455-9755-4be0-ae29-45770e2fbb2c") + ) + (pin "1" + (uuid "432695e7-d7af-4767-8ac5-f43513b93889") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R58") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 36.83 213.36 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "456d7ee3-11a5-475f-9775-38e22f0c7c37") + (property "Reference" "C53" + (at 36.83 207.0567 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 36.83 209.4809 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 33.02 212.3948 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 36.83 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 36.83 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 36.83 213.36 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 36.83 213.36 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "57b293a8-2c24-4e26-8c55-218537820a0c") + ) + (pin "1" + (uuid "4ef5bc11-a6ac-45be-a4bf-ebcfc4a50d51") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C53") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 177.8 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "45a11d0b-e9d5-4380-b7a5-4d0c4bc7db3c") + (property "Reference" "#PWR097" + (at 177.8 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 177.8 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 177.8 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 177.8 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 177.8 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3e592da4-aa6b-4e94-b313-b26dee48498a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR097") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 22.86 204.47 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "45a6b2d5-f8c0-4190-87aa-bbdcc720ada2") + (property "Reference" "#PWR069" + (at 22.86 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 25.4 205.74 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 22.86 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 22.86 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 22.86 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1c4ef978-ae1d-4694-85d8-38759b2d19b6") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR069") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Jumper:SolderJumper_2_Open") + (at 177.8 58.42 90) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "46c1083d-4341-47df-a506-03c8151a80c8") + (property "Reference" "JP1" + (at 180.34 58.42 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "SolderJumper_2_Open" + (at 175.1909 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm" + (at 177.8 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 177.8 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 177.8 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 177.8 58.42 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "9bc5e8a0-1c73-478d-ae7b-22d9a381d373") + ) + (pin "1" + (uuid "7b6bb4c6-8842-46e3-84e6-18012b194cc9") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "JP1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 391.16 53.34 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "474c8eca-5856-4d2a-9e39-3e35c451dfd5") + (property "Reference" "#PWR040" + (at 391.16 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 388.62 54.61 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 391.16 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 391.16 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 391.16 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c09d9297-f85b-44a0-854c-72cdb44663d0") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR040") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Jumper:SolderJumper_2_Bridged") + (at 185.42 58.42 90) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "47f553a9-4995-46c0-a505-982160771050") + (property "Reference" "JP2" + (at 187.96 57.15 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "SolderJumper_2_Bridged" + (at 187.96 59.69 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + (hide yes) + ) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mm" + (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) + ) + ) + (property "LCSC" "" + (at 185.42 58.42 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "605a0e81-f834-42f4-a088-26c412982994") + ) + (pin "1" + (uuid "59db58c7-f020-4027-a3d1-e37e9419409a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "JP2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 248.92 161.29 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "49220bed-ed7d-450a-bbef-e8fd2967aadd") + (property "Reference" "L5" + (at 248.2851 160.0779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "FB" + (at 248.2851 162.5021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 248.92 161.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 248.92 161.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 248.92 161.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C74486" + (at 248.92 161.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "HZ1206E601R-10" + (at 248.92 161.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "bd4932bf-e213-4bce-8730-d8294a580713") + ) + (pin "2" + (uuid "fcd4aee2-ef2b-4406-a937-30b88b66be7d") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Amplifier_Operational:MC33078") + (at 270.51 92.71 0) + (mirror x) + (unit 2) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "49368002-1d57-4e6d-9665-55799eb56a27") + (property "Reference" "U106" + (at 270.51 101.9343 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "AD8599" + (at 270.51 99.5101 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 270.51 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.analog.com/media/en/technical-documentation/data-sheets/AD8597_8599.pdf" + (at 270.51 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 270.51 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C207971" + (at 270.51 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "AD8599ARZ-REEL" + (at 270.51 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "c993e129-ae2a-4c33-bc62-0a07923c53da") + ) + (pin "7" + (uuid "313f2947-5847-4e35-9674-65e88c8afdc8") + ) + (pin "2" + (uuid "814b265e-d0c5-4367-8628-2fd8bde3355f") + ) + (pin "8" + (uuid "2d279fa0-ae48-496c-b753-cd938c3eba2d") + ) + (pin "6" + (uuid "d43ed737-c7d6-42e4-b9ee-67858f24700d") + ) + (pin "1" + (uuid "1b579974-943d-4996-bb33-72554f1b7976") + ) + (pin "3" + (uuid "6f3789f9-febb-484a-990a-3dac2c1572ae") + ) + (pin "5" + (uuid "775e9fd1-41e0-4504-943c-b0868fff30ee") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U106") + (unit 2) + ) + ) + ) + ) + (symbol + (lib_id "Transformer:ADT2-1T") + (at 196.85 226.06 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "49c55834-e0db-4ede-b617-b6f9f9557f9a") + (property "Reference" "TR2" + (at 196.85 216.8865 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "ADT2-1T" + (at 196.85 219.3107 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "RF_Mini-Circuits:Mini-Circuits_CD542_H2.84mm" + (at 196.85 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.minicircuits.com/pdfs/ADT2-1T+.pdf" + (at 196.85 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 196.85 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C5223988" + (at 196.85 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "ADT2-1T+" + (at 196.85 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "e5604437-8dde-452b-ada7-f3869a9af38a") + ) + (pin "2" + (uuid "3440378e-6763-49ac-a78e-86798b6edc35") + ) + (pin "5" + (uuid "3a15d7c5-4802-44c6-b239-0840f9efad7c") + ) + (pin "4" + (uuid "f34bffd1-7fd4-419f-a7d4-1e090952a802") + ) + (pin "1" + (uuid "d088b955-0e20-499d-be93-a1090f4999c1") + ) + (pin "6" + (uuid "c0cc6f01-d131-459a-8abe-6f7a7684e614") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TR2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Amplifier_Operational:MC33078") + (at 335.28 68.58 270) + (unit 3) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4b9045d6-65c7-40f3-8399-d437dd5d9569") + (property "Reference" "U107" + (at 335.28 62.0227 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "OPA2209" + (at 335.28 64.4469 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 335.28 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/opa2209.pdf" + (at 335.28 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 335.28 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C2057330" + (at 335.28 68.58 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "OPA2209AIDR" + (at 335.28 68.58 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "cb9d96e0-16e2-4c49-ba9e-6fbc7fecf924") + ) + (pin "6" + (uuid "54ee0ecc-e626-4a25-9e4a-e46b92559c5c") + ) + (pin "3" + (uuid "afdd1e38-2469-483d-a93e-a88cd981d050") + ) + (pin "4" + (uuid "a81a1a81-8f0f-4ad8-a30e-188050bb57b0") + ) + (pin "8" + (uuid "504c6d13-f351-4f9d-8cc7-d29f1899f6a7") + ) + (pin "2" + (uuid "40c07fc5-733e-4598-85f0-5c69fca669fd") + ) + (pin "7" + (uuid "f0ff8adc-5fbe-473e-a802-e38e5f9c3da8") + ) + (pin "1" + (uuid "2ef09dcb-ad12-46f7-a336-f426be899086") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U107") + (unit 3) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 160.02 262.89 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4bf9d5d2-d20b-489c-a2b1-d0b51ff73486") + (property "Reference" "C73" + (at 165.1 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 161.036 265.43 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 160.9852 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 160.02 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 160.02 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 160.02 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 160.02 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "bf219127-dcd4-48ae-9dc1-2ff0f034f87c") + ) + (pin "1" + (uuid "91d7bcc6-6835-403f-b291-dadabeb82252") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C73") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 290.83 210.82 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "4e3ca7f2-d693-4946-a6d8-4da61f0181be") + (property "Reference" "TP13" + (at 289.433 206.3059 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 289.433 208.7301 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 285.75 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 285.75 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 290.83 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 290.83 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "d3ecd2d7-0a25-43ef-aab4-7c94cf03f45d") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Amplifier_Operational:MC33078") + (at 275.59 77.47 270) + (unit 3) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4f44adae-2efc-4536-86f6-340083ba28c9") + (property "Reference" "U106" + (at 275.59 77.47 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "AD8599" + (at 275.59 73.3369 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 275.59 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.analog.com/media/en/technical-documentation/data-sheets/AD8597_8599.pdf" + (at 275.59 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 275.59 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C207971" + (at 275.59 77.47 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "AD8599ARZ-REEL" + (at 275.59 77.47 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "232d5daf-2c22-489b-b539-80106e31c68b") + ) + (pin "4" + (uuid "81b1e2bb-0eba-4588-9909-6272509b7400") + ) + (pin "2" + (uuid "b7f1514f-f163-4821-9ad7-c1138639e153") + ) + (pin "1" + (uuid "f42865b0-f16e-4d7a-b635-2ae35520d501") + ) + (pin "5" + (uuid "dd348ca3-570b-4dce-b68d-acd7104a4eab") + ) + (pin "6" + (uuid "95aafcd7-41ba-4302-ab7a-515d4bd6d5fc") + ) + (pin "7" + (uuid "a128b3b6-d94f-4ec2-8163-568394a87091") + ) + (pin "8" + (uuid "087e1470-ed6f-4039-bd9f-a24706f2f7f0") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U106") + (unit 3) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 25.4 24.13 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4f459a12-84fd-46dc-b453-6b18dc23e2b0") + (property "Reference" "L13" + (at 25.4 19.4804 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10uH 20%" + (at 25.4 21.9046 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Inductor_SMD:L_Bourns-SRN6028" + (at 25.4 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 25.4 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 25.4 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C5753503" + (at 25.4 24.13 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "IFSC2020DEER100M01" + (at 25.4 24.13 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f617fe61-c4a7-474e-8ee0-8428701e3b38") + ) + (pin "2" + (uuid "7896ddfa-5df6-45aa-bf45-90ba252b839a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 168.91 97.79 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5037de6e-3937-45be-8578-99c3e391daaf") + (property "Reference" "#PWR023" + (at 168.91 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 171.45 99.06 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 168.91 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 168.91 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 168.91 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "31294c7c-9f06-4dad-b870-7ca329e3e368") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR023") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 297.18 80.01 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "50d5da56-bfbf-4020-ba75-0dd794c1c4c7") + (property "Reference" "C14" + (at 292.862 77.978 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10uF 50V" + (at 292.1 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 296.2148 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 297.18 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 297.18 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C13585" + (at 297.18 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C106K4PACTU" + (at 297.18 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b1df37e1-1740-46c6-9fa5-e276bcc9a29b") + ) + (pin "1" + (uuid "6d74f691-e9e2-4f4a-8250-0cfd9a0aa989") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C14") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 360.68 214.63 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "51e25ed3-0f39-409e-b862-82ee0444b3f0") + (property "Reference" "C57" + (at 365.76 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10uF 50V" + (at 365.76 217.17 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 361.6452 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 360.68 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 360.68 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C13585" + (at 360.68 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C106K4PACTU" + (at 360.68 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "cebd1e00-e366-4fe1-a6b1-64940276aec5") + ) + (pin "1" + (uuid "b83cb78d-2dda-4b4e-a26b-1235002a0f57") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C57") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 335.28 208.28 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "523f2b62-3ab1-47dd-a80c-6c75762487c7") + (property "Reference" "R46" + (at 335.28 203.1197 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10k 1%" + (at 335.28 205.5439 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 335.28 210.058 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 335.28 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 335.28 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 335.28 208.28 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 335.28 208.28 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e36b44aa-3646-446d-a3c6-78a69010b453") + ) + (pin "1" + (uuid "04a44d7c-a14a-4fb5-958c-52f5bf6d9990") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R46") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 153.67 269.24 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "53329380-69d8-4201-b11a-d697178ed3af") + (property "Reference" "R59" + (at 158.8303 269.24 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1k1" + (at 156.4061 269.24 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 155.448 269.24 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 153.67 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 153.67 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17889" + (at 153.67 269.24 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1101ELF" + (at 153.67 269.24 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a27a8cc1-7e80-4d5a-afac-445197a64a8f") + ) + (pin "1" + (uuid "e05c56c9-5345-4517-a2a7-c0cc9e191777") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R59") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 115.57 24.13 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5373b5cc-b386-4927-8e30-c31b5c0499c7") + (property "Reference" "#PWR06" + (at 115.57 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 115.57 19.05 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 115.57 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 115.57 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 115.57 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f6415a35-2d05-49cd-8520-0947a7e54753") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR06") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 243.84 168.91 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5647f6f7-c2b0-4ef7-a65a-0861c7cd15d2") + (property "Reference" "C30" + (at 242.57 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 245.11 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 244.8052 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 243.84 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 243.84 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 243.84 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 243.84 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3905582f-67e9-4809-862c-2b6cd11e3faa") + ) + (pin "1" + (uuid "7f606ab4-7aa3-4fb5-a6ce-b501385bb6f3") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C30") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xGxx:74LVC1G04") + (at 66.04 233.68 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "56a96225-9ca5-491e-a183-5347b72a3a02") + (property "Reference" "U10" + (at 72.39 232.41 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SN74LVC1G04DCK" + (at 72.39 229.87 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:SOT-SC70" + (at 66.04 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 66.04 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 66.04 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C8207" + (at 66.04 233.68 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "SN74LVC1G04DCKR" + (at 66.04 233.68 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "dc470ea5-614e-4119-a91b-8c778dd4968d") + ) + (pin "4" + (uuid "6285c20b-eda5-4614-b056-f228dc6a2db1") + ) + (pin "3" + (uuid "94bf5b4b-780e-4f0a-936e-b4341da1eea9") + ) + (pin "5" + (uuid "674ff3b5-8d47-48c5-9ced-63aa7cfdaa3a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 306.07 234.95 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "583c0928-f198-44f3-b9a6-278401d36e14") + (property "Reference" "C64" + (at 312.42 236.22 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 309.88 238.76 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 302.26 233.9848 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 306.07 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 306.07 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 306.07 234.95 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 306.07 234.95 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "411f4cb1-d920-4c15-bdfb-259c621c0767") + ) + (pin "1" + (uuid "cacfbdf1-3b33-4d04-bb39-af32bbe612eb") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C64") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 314.96 29.21 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "59048c2d-547a-45d7-977d-dc94e78b37f1") + (property "Reference" "R3" + (at 314.96 24.0497 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "5k1" + (at 314.96 26.4739 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 314.96 30.988 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 314.96 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 314.96 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C26033" + (at 314.96 29.21 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "ERJ-8ENF5101V" + (at 314.96 29.21 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "06cae25a-8548-43c9-a24f-a96e34d58875") + ) + (pin "1" + (uuid "42b2a074-85c5-403e-a1f9-15f0939b03f2") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 330.2 77.47 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "59381521-8881-48b2-b68c-d3e138369b32") + (property "Reference" "R11" + (at 330.2 72.3097 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "5k1" + (at 330.2 74.7339 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 330.2 79.248 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 330.2 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 330.2 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C26033" + (at 330.2 77.47 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "ERJ-8ENF5101V" + (at 330.2 77.47 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "608691a5-35fa-4d03-bcce-e53ceae12d95") + ) + (pin "1" + (uuid "68955591-873b-4832-ae50-4131dbf723f0") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 363.22 236.22 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5974244b-c8bc-47a6-ba4e-e34e89f92389") + (property "Reference" "C65" + (at 369.57 237.49 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 367.03 240.03 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 359.41 235.2548 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 363.22 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 363.22 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 363.22 236.22 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 363.22 236.22 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5399b945-ca00-4231-b8e2-c4ad308ca7a9") + ) + (pin "1" + (uuid "314ec529-e981-43af-944a-36eb82c1e17f") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C65") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 137.16 140.97 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "59ac97ba-6e7f-4b6d-8e66-8fd0becbfdfa") + (property "Reference" "R51" + (at 135.382 139.7579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 135.382 142.1821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 135.382 140.97 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 137.16 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 137.16 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17948" + (at 137.16 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "RT1206FRE072K2L" + (at 137.16 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1852b547-6602-4447-9c5b-27a95824b562") + ) + (pin "1" + (uuid "5490030e-d73b-4590-8625-af4d1ec21b7e") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R51") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 209.55 265.43 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "59ed83c6-7196-4b03-bbdf-ea1b2db923a1") + (property "Reference" "C40" + (at 212.09 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 209.55 271.78 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 208.5848 261.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 209.55 265.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 209.55 265.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 209.55 265.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 209.55 265.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e1872887-7f0f-4d0f-9d8b-75aab6053f47") + ) + (pin "1" + (uuid "1d91fae0-a716-417b-a61c-41689d0dcca6") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C40") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 203.2 265.43 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5a1b9b41-f335-44cd-9ec6-df9a8a7b0aa2") + (property "Reference" "C41" + (at 207.01 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10uF 50V" + (at 208.28 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 204.1652 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 203.2 265.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 203.2 265.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C13585" + (at 203.2 265.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C106K4PACTU" + (at 203.2 265.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "65026eae-6e6a-4e9a-ae5b-b4eca5f4b890") + ) + (pin "1" + (uuid "8ecd6dff-b63d-46e0-8706-1813da3f68e4") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C41") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 149.86 57.15 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5be94fa7-52bf-486d-ad99-76c99b440fae") + (property "Reference" "#PWR022" + (at 149.86 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 149.86 61.2831 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 149.86 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 149.86 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 149.86 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1a747916-9efb-4706-b23a-dd4d308d0f11") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR022") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 309.88 33.02 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5c05ddf4-faad-43ab-bfd2-7982d602ee8e") + (property "Reference" "C1" + (at 306.959 31.8079 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10uF 50V" + (at 313.69 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 310.8452 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 309.88 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 309.88 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C13585" + (at 309.88 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C106K4PACTU" + (at 309.88 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5e56ac1a-4a4f-49e4-a4d8-24381732782c") + ) + (pin "1" + (uuid "6a94eea4-0273-416d-af48-ab5d94630c97") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 217.17 265.43 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5d3473f5-f912-422e-a8d7-8d137d2ac1de") + (property "Reference" "R34" + (at 215.392 264.2179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 215.392 266.6421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 215.392 265.43 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 217.17 265.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 217.17 265.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17948" + (at 217.17 265.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "RT1206FRE072K2L" + (at 217.17 265.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3de71166-87e1-49ab-ad4a-6cf673a9fd5f") + ) + (pin "1" + (uuid "d453e768-8d11-41ef-9039-fda98b196fe1") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R34") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 290.83 158.75 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "5eaba789-d211-4905-a570-b547e774fcbb") + (property "Reference" "TP7" + (at 289.433 154.2359 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 289.433 156.6601 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 285.75 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 285.75 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 290.83 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 290.83 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fe689c32-734e-44c7-8ece-c75a79222de4") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 248.92 107.95 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "60e2636d-bf9a-40b3-9277-30dd3ce11487") + (property "Reference" "#PWR027" + (at 248.92 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 248.92 112.0831 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 248.92 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 248.92 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 248.92 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c3f6625b-52df-477c-b170-b220507e9bd6") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR027") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 46.99 152.4 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "63981f94-2b11-426c-b130-b0c294296eb6") + (property "Reference" "R62" + (at 43.18 151.0142 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 43.18 148.59 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 46.99 154.178 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 46.99 152.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 46.99 152.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17948" + (at 46.99 152.4 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "RT1206FRE072K2L" + (at 46.99 152.4 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "9ed7d8b2-1f0d-4da0-b353-47516ce53ccb") + ) + (pin "1" + (uuid "72a26628-be46-4b59-987a-0f5df2194b75") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R62") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 194.31 72.39 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "65493692-6f1c-4501-8b58-fb549b75d927") + (property "Reference" "#PWR019" + (at 194.31 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 194.31 76.5231 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 194.31 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 194.31 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 194.31 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "99d05620-ed10-4e87-8d0e-f7c546258af3") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR019") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 133.35 273.05 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "658c270c-f601-4d59-af78-600e7397a959") + (property "Reference" "#PWR075" + (at 133.35 276.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 133.35 267.97 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 133.35 273.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 133.35 273.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 133.35 273.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4cf4e1bf-7673-4633-b408-a08a7fad8687") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR075") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 269.24 83.82 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "65db15b4-1c1c-4fe4-845c-0339dd7f0619") + (property "Reference" "R13" + (at 269.24 78.6597 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "2k" + (at 269.24 81.0839 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 269.24 85.598 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 269.24 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 269.24 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17944" + (at 269.24 83.82 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "ERA-8AEB202V" + (at 269.24 83.82 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "39f9f172-c804-4132-bedf-3cd1f229147d") + ) + (pin "1" + (uuid "d5c29e38-8e0e-498c-aadf-d8eaff5f68c6") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 354.33 90.17 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "6607c6ca-58d6-44a7-a82e-b44704a75838") + (property "Reference" "TP3" + (at 349.25 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 349.25 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 359.41 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 359.41 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 354.33 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 354.33 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "d92fa922-255d-4229-b672-afeda031a96e") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 185.42 82.55 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "67100718-c1b4-4ccd-b94e-1b0441961186") + (property "Reference" "R12" + (at 187.198 81.3379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10k" + (at 187.198 83.7621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 183.642 82.55 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 185.42 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 185.42 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 185.42 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 185.42 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "04a67c4b-66e9-4dec-817e-88d0a8bd0754") + ) + (pin "1" + (uuid "83b182a3-a847-43e0-bb9b-0ad4b3380e6a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R12") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 389.89 175.26 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "68a95678-9ace-47cf-870d-b27122453c7b") + (property "Reference" "TP9" + (at 385.191 174.0479 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 385.191 176.4721 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 389.89 180.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 389.89 180.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 389.89 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 389.89 175.26 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "581d902c-25bb-4f26-9e34-afec85d540ae") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 120.65 24.13 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "68d16323-ac90-49ad-9e00-a36496cf6221") + (property "Reference" "TP17" + (at 122.047 19.6159 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 122.047 22.0401 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 125.73 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 125.73 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 120.65 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 120.65 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "72c5dbaf-6c7d-4b83-b667-282a060374ca") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP17") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 16.51 36.83 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "696d0972-ac86-4a58-82ee-0f32b337ea7a") + (property "Reference" "#PWR096" + (at 16.51 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 16.51 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 16.51 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 16.51 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 16.51 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "41d36163-486a-4028-97ed-ef4fcbbf29a3") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR096") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 217.17 247.65 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "69c49c03-1eaa-4871-9791-b1f5a401889f") + (property "Reference" "L6" + (at 218.4372 246.4379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "FB" + (at 218.4372 248.8621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 217.17 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 217.17 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 217.17 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C74486" + (at 217.17 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "HZ1206E601R-10" + (at 217.17 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "aa38118a-b80a-45e0-b00e-939be2e95938") + ) + (pin "2" + (uuid "50aa5db1-69e3-49e2-9cb1-d8e0d2c933f5") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 256.54 240.03 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6a398a65-266f-4d93-922f-f1ab531c885b") + (property "Reference" "C56" + (at 261.62 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 262.89 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 257.5052 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 256.54 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 256.54 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 256.54 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 256.54 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e45e9711-e13d-46ae-a7b7-61fc527f3996") + ) + (pin "1" + (uuid "47a5f53b-938c-40fe-8cc8-e7e5ce26d9e9") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C56") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 147.32 189.23 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6b498279-c40c-4a8a-b41a-3fd2be87ca36") + (property "Reference" "#PWR070" + (at 147.32 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 144.78 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 147.32 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 147.32 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 147.32 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "93c4220e-5ffa-4123-beb9-723c229dc310") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR070") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 207.01 113.03 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "6c46f9b0-0a74-4e98-b9c4-2df049b4e39c") + (property "Reference" "#PWR020" + (at 207.01 119.38 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 207.01 117.1631 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 207.01 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 207.01 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 207.01 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c956a8d7-13d4-45b5-b728-7b999f00dac3") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR020") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 88.9 95.25 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6c9927b6-f93a-4723-89fa-50bca92b9d96") + (property "Reference" "#PWR015" + (at 88.9 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 85.09 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 88.9 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 88.9 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 88.9 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "18d094cb-2e1b-4eba-934e-a7589a37485c") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR015") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 185.42 86.36 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6d6f43ff-2381-4425-b321-847e2e0e16d0") + (property "Reference" "#PWR021" + (at 185.42 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 187.96 87.63 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 185.42 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 185.42 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 185.42 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7064f4b2-628b-4e1a-bcd1-04301983c849") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR021") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 76.2 177.8 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6ea92218-2db0-45e7-9feb-80976050be33") + (property "Reference" "#PWR090" + (at 76.2 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 78.74 179.07 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 76.2 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 76.2 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 76.2 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6542a505-acca-488b-a15f-15e005b22a35") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR090") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 147.32 264.16 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6efa63bc-86f0-4aeb-b38f-289f21f04c29") + (property "Reference" "R56" + (at 147.32 269.3203 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1k6" + (at 147.32 266.8961 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 147.32 265.938 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 147.32 264.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 147.32 264.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17896" + (at 147.32 264.16 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "ERJ-8ENF1601V" + (at 147.32 264.16 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "54758833-7cba-4cfb-90ec-e94bfff9bee2") + ) + (pin "1" + (uuid "a2a3ab98-2616-4609-af52-5013d78c558f") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R56") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 251.46 41.91 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "6f6953b1-4795-44d1-b2cf-7ab5d2ce88e2") + (property "Reference" "TP1" + (at 246.38 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 252.73 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 256.54 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 256.54 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 251.46 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 251.46 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "550037d8-5d18-4d00-80f7-4da15fa81a63") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 322.58 48.26 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "70307c71-cc1f-47ac-920e-e3974917f3ff") + (property "Reference" "C8" + (at 319.659 47.0479 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "180pF 50V" + (at 319.659 49.4721 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 323.5452 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 322.58 48.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 322.58 48.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C527293" + (at 322.58 48.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C181J5GAC7800" + (at 322.58 48.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "937963c4-c221-4c56-b669-664dfc8b6725") + ) + (pin "1" + (uuid "b16b56a8-2001-4e54-9ab6-f5f0c07a1afe") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 181.61 231.14 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "73356335-f24e-47bc-a59f-53720bf8c2e6") + (property "Reference" "#PWR061" + (at 181.61 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 179.07 233.68 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 181.61 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 181.61 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 181.61 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0cc48607-0fb3-42c6-9185-2f6815ce5e1a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR061") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 307.34 210.82 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "74386cd2-f4ec-4701-a971-8456a0188dae") + (property "Reference" "R55" + (at 307.34 205.6595 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0" + (at 307.34 208.0838 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 307.34 212.598 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 307.34 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 307.34 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17888" + (at 307.34 210.82 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "1206S4J0000TDE" + (at 307.34 210.82 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c7368528-480c-4733-a68b-8ab074e7f2dd") + ) + (pin "1" + (uuid "4d9595fa-40b0-4f5d-bdaa-c2cc84408ab5") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R55") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 314.96 77.47 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "76f0a876-e43e-45ef-b257-fe7c8bbd6166") + (property "Reference" "R10" + (at 314.96 72.3097 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "5k1" + (at 314.96 74.7339 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 314.96 79.248 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 314.96 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 314.96 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C26033" + (at 314.96 77.47 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "ERJ-8ENF5101V" + (at 314.96 77.47 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f606840f-5ebd-4037-97cc-2415bc3e0fe5") + ) + (pin "1" + (uuid "badaf7be-3f07-4880-abf0-fb2e9338c6a5") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 269.24 35.56 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "772ae96c-7a41-4f9f-a8d6-037289b70d16") + (property "Reference" "R1" + (at 269.24 30.3997 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "2k" + (at 269.24 32.8239 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 269.24 37.338 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 269.24 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 269.24 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17944" + (at 269.24 35.56 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "ERA-8AEB202V" + (at 269.24 35.56 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e38f4725-4e53-409a-8289-588266a2f1af") + ) + (pin "1" + (uuid "e14b5cc1-0f5c-44cd-9488-72422a5871ac") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 365.76 71.12 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "77794d6d-1e82-499b-b278-e8cd404be329") + (property "Reference" "C18" + (at 368.681 72.3321 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 360.68 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 364.7948 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 365.76 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 365.76 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 365.76 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 365.76 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "284a6984-340e-4e42-996e-16fd8ff30ebb") + ) + (pin "1" + (uuid "afe2dc41-0d88-4034-b9ec-efdac7abd9f3") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C18") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 139.7 140.97 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "778b42a1-94fc-440a-8f83-e581868a9b99") + (property "Reference" "R49" + (at 141.478 139.7579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 141.478 142.1821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 141.478 140.97 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 139.7 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 139.7 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17948" + (at 139.7 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "RT1206FRE072K2L" + (at 139.7 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f9029038-0298-4ded-9c17-02f9ef707a62") + ) + (pin "1" + (uuid "d9da9ac5-6e94-4d7a-a51c-ef9977795d63") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R49") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 322.58 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "778e37e2-970f-4038-99ab-7c56df1abece") + (property "Reference" "#PWR036" + (at 322.58 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 325.12 102.87 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 322.58 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 322.58 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 322.58 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "102c6f7b-db59-42eb-bfa5-fd617874c27a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR036") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 52.07 218.44 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "780f732d-b8ac-481a-aa7d-16187ce59c70") + (property "Reference" "U9" + (at 52.07 207.9457 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 52.07 210.3699 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 52.07 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 52.07 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 52.07 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C3304462" + (at 52.07 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "MASWSS0179TR-3000" + (at 52.07 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "5e4e6ded-e6ab-4bed-9f05-ebf48346c76f") + ) + (pin "6" + (uuid "17514c59-5d07-486e-8331-8e66e219a23d") + ) + (pin "4" + (uuid "a5c76704-1e00-46c5-b33e-b95d26341bc6") + ) + (pin "1" + (uuid "200376fc-cef7-4afc-8f0e-b19759b48d85") + ) + (pin "2" + (uuid "63934c35-2071-4bfc-bbbb-117318255e53") + ) + (pin "3" + (uuid "bf34b0bc-c40b-45c0-84fc-8ae0cb917f9e") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:T41_DualClock_Daughter") + (at 194.31 152.4 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7a68b1a2-9d33-4520-8453-b79f115dc2ee") + (property "Reference" "U12" + (at 184.15 151.7649 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "T41_DualClock_Daughter" + (at 223.774 162.052 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:T41_DualClock_Daughter" + (at 198.12 149.225 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 200.66 148.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 194.31 152.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 194.31 152.4 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "7" + (uuid "5e57fa1d-182a-4065-ab37-59d7a3989a6e") + ) + (pin "12" + (uuid "668006cf-3f85-4a02-902c-42a6386b810a") + ) + (pin "4" + (uuid "ced13373-3ef5-4d85-9181-f357d850aecf") + ) + (pin "3" + (uuid "12230f5b-bd00-4d5d-b740-9e30cf56fa23") + ) + (pin "5" + (uuid "a3e30968-cd0a-4b98-a99d-3d70336c2b3b") + ) + (pin "9" + (uuid "40fee890-c06b-49c8-942c-6c764d533f5e") + ) + (pin "6" + (uuid "9666bc91-5781-4755-813b-9cd989ccfb1d") + ) + (pin "2" + (uuid "5370c25c-b509-4f48-83ec-97d455b00468") + ) + (pin "1" + (uuid "ec535947-9a49-44c1-913d-59d3af15cdf4") + ) + (pin "8" + (uuid "c2fa4cd7-a83e-4d69-a65e-5f17b46e4a43") + ) + (pin "11" + (uuid "fcf9a84e-5943-4e9d-877c-e74d98432856") + ) + (pin "10" + (uuid "cf43701c-7abf-4aa9-be59-ba3ebeb584f0") + ) + (instances + (project "" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U12") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 281.94 167.64 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7ae7ce53-a224-41ba-b29d-67863bae35ac") + (property "Reference" "#PWR048" + (at 281.94 173.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 279.4 168.91 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 281.94 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 281.94 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 281.94 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "827135c8-c8b4-43e5-9a10-99b1742f17c1") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR048") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 287.02 85.09 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "7b9832cd-6edd-415f-b379-ec98324bedd1") + (property "Reference" "#PWR031" + (at 287.02 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 287.02 89.2231 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 287.02 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 287.02 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 287.02 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "da62d5bc-9d1a-4b87-86b8-7ec62318de10") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR031") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 139.7 60.96 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "7bc44fc1-feee-494b-8a0b-0806d2176844") + (property "Reference" "G3" + (at 135.89 58.42 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "TestPoint" + (at 139.7 63.5 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 139.7 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 139.7 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 139.7 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 139.7 60.96 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "05bd692d-981a-4d6f-ac71-9feb9a34f881") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "G3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 46.99 161.29 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7d254234-688e-4aba-bdce-9a2561933a33") + (property "Reference" "R63" + (at 43.18 159.9042 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 43.18 157.48 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 46.99 163.068 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 46.99 161.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 46.99 161.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17948" + (at 46.99 161.29 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "RT1206FRE072K2L" + (at 46.99 161.29 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3a75ada1-e2ca-4de2-a086-9dd7b742455b") + ) + (pin "1" + (uuid "25fa9cb2-50e6-46b5-8869-1a1fee72bcea") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R63") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 307.34 194.31 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "80efe2d6-1d0d-45cf-9106-ab29abd59240") + (property "Reference" "R53" + (at 307.34 189.1495 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0" + (at 307.34 191.5738 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 307.34 196.088 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 307.34 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 307.34 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17888" + (at 307.34 194.31 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "1206S4J0000TDE" + (at 307.34 194.31 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6d52eb2c-553f-4b4a-a300-fef289c5cbe1") + ) + (pin "1" + (uuid "0fc2169e-7709-4ec4-a14f-2dfb56bbf10f") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R53") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Amplifier_Operational:MC33078") + (at 347.98 208.28 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "823890e2-e64d-48b2-b028-f988cd604b67") + (property "Reference" "U8" + (at 347.98 217.5043 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MC33078" + (at 347.98 215.0801 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 347.98 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.com/pub/Collateral/MC33078-D.PDF" + (at 347.98 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 347.98 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C2057560" + (at 347.98 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "MC33078DR" + (at 347.98 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6d6edcbf-50bd-407c-af7d-e29b060b6a5d") + ) + (pin "4" + (uuid "044156db-f394-4fe3-8e56-8a68229a60b0") + ) + (pin "7" + (uuid "ddd1dc7f-e48c-4be9-84bb-56f54c65b7f9") + ) + (pin "8" + (uuid "1ddd0488-1a70-4666-b876-c65e3429cb80") + ) + (pin "6" + (uuid "d0f5dd9e-c737-49ff-a5d0-900ccf6ad25f") + ) + (pin "5" + (uuid "278f4a99-f32d-487d-9bed-3db9ca5316d7") + ) + (pin "3" + (uuid "ff85b316-07f1-4aad-9822-c36ed40d351d") + ) + (pin "2" + (uuid "a961f29f-472a-4e1d-b84e-afc975feec88") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 142.24 53.34 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "825f1799-6cf2-46a3-99bb-df719361f44e") + (property "Reference" "G1" + (at 143.51 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 142.24 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 147.32 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 147.32 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 142.24 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 142.24 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f1d22f22-aa28-43a4-807f-085b79c5a730") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "G1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 152.4 62.23 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "8296739c-d7e0-49ac-a4e9-7eca3db4e197") + (property "Reference" "G6" + (at 156.21 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 153.67 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 152.4 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 152.4 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 152.4 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 152.4 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "91f489d0-6caf-4ba5-a5ae-7f1af66fdfac") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "G6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 262.89 234.95 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "83b1fd2b-a6ae-44f7-aaa6-7d40e899bd80") + (property "Reference" "R47" + (at 262.89 229.7897 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10k" + (at 262.89 232.2139 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 262.89 233.172 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 262.89 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 262.89 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 262.89 234.95 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 262.89 234.95 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "275a63ad-4b2b-4871-8e2f-dbd3bc8d782c") + ) + (pin "1" + (uuid "387320a6-fc11-4ed9-aa30-85d7631b8a24") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R47") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 256.54 90.17 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "84ab5530-6004-4188-ba08-5031614a63f1") + (property "Reference" "R16" + (at 256.54 85.0097 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100R" + (at 256.54 87.4339 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 256.54 91.948 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 256.54 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 256.54 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17901" + (at 256.54 90.17 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1000ELF" + (at 256.54 90.17 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "2f0e2f17-506f-4063-b205-601343937c8d") + ) + (pin "1" + (uuid "844e5eb6-3c86-4168-95fc-1a39b9306b52") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R16") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 351.79 194.31 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "84f380b9-6d6e-45da-b539-2f165369450b") + (property "Reference" "R36" + (at 351.79 189.1497 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10k 1%" + (at 351.79 191.5739 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 351.79 196.088 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 351.79 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 351.79 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 351.79 194.31 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 351.79 194.31 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "08b8ed7b-a9f2-463a-a34b-ff9919e40c84") + ) + (pin "1" + (uuid "9d2bf8cd-f160-44a8-8fb4-a33f11222e64") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R36") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 168.91 91.44 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "85c61aea-7489-4c55-91e0-7fd6ba7adfd1") + (property "Reference" "R19" + (at 170.688 90.2278 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10k" + (at 170.688 92.6521 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 167.132 91.44 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 168.91 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 168.91 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 168.91 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 168.91 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "224e26be-3d05-45ed-a4b5-06cefe6379de") + ) + (pin "1" + (uuid "9cc9f1d7-d64c-4c57-9307-5fe6de67d55a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R19") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 372.11 170.18 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "8779f2b8-efdd-4de2-8398-01b97c21e6b5") + (property "Reference" "R30" + (at 372.11 165.0197 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10k" + (at 372.11 167.4439 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 372.11 171.958 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 372.11 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 372.11 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 372.11 170.18 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 372.11 170.18 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "cfe0319d-3c34-44ad-b47e-be03d65fea5f") + ) + (pin "1" + (uuid "774345a6-883a-46c8-a3de-ebf839082759") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R30") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 368.3 219.71 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "87ff4092-f84c-492b-b7c3-6323a67d1077") + (property "Reference" "#PWR042" + (at 368.3 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 365.76 220.98 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 368.3 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 368.3 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 368.3 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3901aac2-df96-4f8d-a40f-d116d9ab6025") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR042") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 168.91 82.55 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "882fd84c-cd57-4b47-9e67-c4dced60dd46") + (property "Reference" "R15" + (at 170.688 81.3378 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10k" + (at 170.688 83.7621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 167.132 82.55 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 168.91 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 168.91 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 168.91 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 168.91 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ff4e4b79-7b59-4314-bac2-6204f0ba90aa") + ) + (pin "1" + (uuid "5a368028-da27-4c16-94b7-a3b2197c2d52") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 243.84 172.72 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8a708bba-01d0-4d70-9eda-c3627f8a2e7e") + (property "Reference" "#PWR051" + (at 243.84 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 246.38 175.26 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 243.84 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 243.84 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 243.84 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8c72eb21-8f73-46db-89db-89ca7a3d25be") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR051") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 243.84 158.75 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8af6b184-51df-43f5-af3b-cd29dcae4d92") + (property "Reference" "C42" + (at 239.522 160.782 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10uF 50V" + (at 238.76 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 242.8748 162.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 243.84 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 243.84 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C13585" + (at 243.84 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C106K4PACTU" + (at 243.84 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "10905aa8-a662-4053-9234-7de0e89dd885") + ) + (pin "1" + (uuid "daa9250a-95d1-4309-a5bc-28d549c15696") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C42") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12P") + (at 16.51 24.13 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "8c06f945-636c-41f4-a106-816d1f65239c") + (property "Reference" "#PWR01" + (at 16.51 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12P" + (at 16.51 19.9969 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 16.51 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 16.51 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 16.51 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ebdb8f54-d7ed-476c-b9d5-b36c13138fe1") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR01") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 85.09 220.98 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8d42d7b8-4b0f-46a7-b4ef-b00cb3889791") + (property "Reference" "#PWR017" + (at 85.09 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 84.074 225.552 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 85.09 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 85.09 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 85.09 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f0a70dbb-1231-4528-b626-2ef77f5b101f") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR017") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 146.05 226.06 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "90331624-cd6e-4236-91d2-c5faecd94478") + (property "Reference" "U7" + (at 146.05 215.5657 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 146.05 217.9899 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 146.05 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 146.05 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 146.05 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C3304462" + (at 146.05 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "MASWSS0179TR-3000" + (at 146.05 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "76ad03e7-99b8-4c59-b8bb-9b9b9d188caa") + ) + (pin "6" + (uuid "1aa1e1a8-bc0d-42b9-89e0-090952557704") + ) + (pin "4" + (uuid "efad0c39-5083-4f7c-a18b-781fb8a83806") + ) + (pin "1" + (uuid "b44c0132-fb3c-40b5-8030-b31de8339784") + ) + (pin "2" + (uuid "e5e88d26-994a-4076-8d62-8c003c1496e9") + ) + (pin "3" + (uuid "fc2a8c4a-cda1-4c9c-bdcb-0cb64fa705a4") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 336.55 236.22 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "90d41470-66d0-4f3a-82f1-78af80c17231") + (property "Reference" "R52" + (at 334.772 235.0078 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1k1" + (at 334.772 237.4321 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 334.772 236.22 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 336.55 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 336.55 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17889" + (at 336.55 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1101ELF" + (at 336.55 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b06a1cee-c261-4e24-8eb6-d7d21c63d89f") + ) + (pin "1" + (uuid "b0da9c15-3a39-4680-b363-505dc9138c2a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R52") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole_Pad") + (at 143.51 19.05 270) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "9261f4c5-839a-4c33-a065-5a90ba320edf") + (property "Reference" "H5" + (at 147.32 19.05 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "~" + (at 147.32 20.2621 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "MountingHole:MountingHole_4.3mm_M4_DIN965_Pad" + (at 143.51 19.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 143.51 19.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 143.51 19.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 143.51 19.05 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fd4342f9-9f35-41f8-808f-009640104266") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "H5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 322.58 107.95 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "93514470-78fc-41a7-8d07-057272db40dc") + (property "Reference" "C21" + (at 320.04 105.41 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "105pF 50V" + (at 326.39 111.76 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 318.77 106.9848 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 322.58 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 322.58 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1884" + (at 322.58 107.95 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CL31C101JGFNNNE" + (at 322.58 107.95 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "9defb383-6384-4519-8ce9-23cc3373ed9c") + ) + (pin "1" + (uuid "f19ec925-1953-4c73-85ef-8c76fcd26803") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C21") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 354.33 41.91 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "97527d4e-4333-4b55-84fe-8158fa000b4c") + (property "Reference" "TP2" + (at 349.25 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 350.52 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 359.41 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 359.41 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 354.33 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 354.33 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "751c8059-f98e-4d59-a660-26005aa28112") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 123.19 223.52 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "976d77a0-c65a-4fe2-b723-1c37d89870b5") + (property "Reference" "C45" + (at 129.54 222.25 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 128.778 220.218 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 119.38 224.4852 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 123.19 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 123.19 223.52 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 123.19 223.52 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e0d02151-00af-4f14-a311-ee1db6c3e8cf") + ) + (pin "1" + (uuid "6ba1a0a2-b5f4-443c-99f1-4f96a5ae665b") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C45") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 148.59 236.22 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9880f170-d3ab-4ca6-bbe4-50292ebe16d9") + (property "Reference" "#PWR062" + (at 148.59 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 151.13 237.49 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 148.59 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 148.59 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7e0dbc7d-c66f-4e87-be84-1add4a023bbc") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR062") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 194.31 67.31 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "98ede7af-aa06-4d0f-abef-a1d4df9922a2") + (property "Reference" "C6" + (at 191.008 68.834 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 192.786 71.628 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 195.2752 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 194.31 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 194.31 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 194.31 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 194.31 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "dce0aa3b-2b10-4689-b96e-16182e5ecd15") + ) + (pin "1" + (uuid "97d81cbe-c4f1-494d-bebe-6d0c98a71c63") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Amplifier_Operational:MC33078") + (at 306.07 233.68 270) + (unit 3) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "9987df45-436e-46b2-9f34-eaf17a28e025") + (property "Reference" "U6" + (at 306.07 227.1227 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MC33078" + (at 306.07 229.5469 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 306.07 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.com/pub/Collateral/MC33078-D.PDF" + (at 306.07 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 306.07 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C2057560" + (at 306.07 233.68 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "MC33078DR" + (at 306.07 233.68 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b08a0fe3-0c2d-49cc-89ed-7b8b972917a9") + ) + (pin "4" + (uuid "044156db-f394-4fe3-8e56-8a68229a60ae") + ) + (pin "7" + (uuid "ddd1dc7f-e48c-4be9-84bb-56f54c65b7f7") + ) + (pin "8" + (uuid "1ddd0488-1a70-4666-b876-c65e3429cb7e") + ) + (pin "6" + (uuid "d0f5dd9e-c737-49ff-a5d0-900ccf6ad25d") + ) + (pin "5" + (uuid "278f4a99-f32d-487d-9bed-3db9ca5316d5") + ) + (pin "3" + (uuid "f82c28e7-e51f-431d-9d44-61e592fc560e") + ) + (pin "2" + (uuid "7060689d-235c-45e2-8cff-1ab4e5227904") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U6") + (unit 3) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 257.81 46.99 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9b74d670-c550-491f-b87e-81fe89937a62") + (property "Reference" "R8" + (at 257.81 52.1503 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100R" + (at 257.81 49.7261 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 257.81 45.212 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 257.81 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 257.81 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17901" + (at 257.81 46.99 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1000ELF" + (at 257.81 46.99 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ab813df4-d6c3-4875-8715-ae78637746d1") + ) + (pin "1" + (uuid "2add30d0-d142-4865-89e0-f591f06542d5") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 46.99 167.64 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9c2427d3-eff3-4403-9a44-d9ec67946f03") + (property "Reference" "R61" + (at 43.18 166.2542 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 43.18 163.83 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 46.99 169.418 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 46.99 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 46.99 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17948" + (at 46.99 167.64 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "RT1206FRE072K2L" + (at 46.99 167.64 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f345ba6f-b63d-47c2-b359-2855c8065d90") + ) + (pin "1" + (uuid "b9c98283-00ad-4e6e-beee-ea4e7d0c2dae") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R61") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 368.3 184.15 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9e396a40-911b-4ef6-a42f-4a0f252488a4") + (property "Reference" "#PWR041" + (at 368.3 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 365.76 185.42 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 368.3 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 368.3 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 368.3 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "38932525-d8fa-4c89-90cd-16f60a5540a9") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR041") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 160.02 148.59 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9e9f4c2f-1408-49c2-bceb-31342945a31b") + (property "Reference" "#PWR088" + (at 160.02 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 161.29 147.32 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 160.02 148.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 160.02 148.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 160.02 148.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "56266405-db50-4637-93c8-17f2a1ae20e4") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR088") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 278.13 52.07 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "9f42fe2a-7a66-40f0-86e9-005c6119aecf") + (property "Reference" "R7" + (at 279.908 50.8579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10k" + (at 279.908 53.2821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 276.352 52.07 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 278.13 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 278.13 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 278.13 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 278.13 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f7abefc1-6bd5-4859-9cda-d9de06a20cfe") + ) + (pin "1" + (uuid "6d98bd2d-e3fe-42b7-b65f-89dc55f75f02") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 281.94 201.93 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9f43d114-7678-4e98-935c-bb4d3fa6ee09") + (property "Reference" "#PWR016" + (at 281.94 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 279.4 204.47 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 281.94 201.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 281.94 201.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 281.94 201.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8d9afce2-6eb5-4d2d-b513-a401bfb6bfcb") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR016") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 41.91 88.9 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "9fb9cd67-1687-4a3b-9ae8-7fa5cf5a1d5c") + (property "Reference" "#PWR03" + (at 41.91 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 41.91 93.0331 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 41.91 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 41.91 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 41.91 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "bd3fb9cc-3f94-445d-89c8-9e550d33b4d3") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR03") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole_Pad") + (at 143.51 24.13 270) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "a09693b5-bc9a-478b-8f96-8eee23b0219a") + (property "Reference" "H6" + (at 147.32 24.13 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "~" + (at 147.32 25.3421 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "MountingHole:MountingHole_4.3mm_M4_DIN965_Pad" + (at 143.51 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 143.51 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 143.51 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 143.51 24.13 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f3c13bfd-bd47-455c-849e-91c6447355f7") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "H6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:74CBTLV3253PWRE4") + (at 207.01 96.52 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a14820aa-4878-44cf-bf0d-2b23291611ca") + (property "Reference" "U1" + (at 209.2041 74.5957 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "74CBTLV3253DR" + (at 208.28 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_SO:SOIC-16_3.9x9.9mm_P1.27mm" + (at 208.28 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74cbtlv3253.pdf" + (at 207.01 117.475 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 207.01 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C543079" + (at 207.01 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "SN74CBTLV3253DR" + (at 207.01 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "13" + (uuid "14fd973f-3279-4ab0-b1aa-43ac354dcde8") + ) + (pin "8" + (uuid "96023e65-6e05-441e-bbf3-289dd4879c6c") + ) + (pin "5" + (uuid "f2fd7638-c01d-4730-bdfe-4eb9d89d51c5") + ) + (pin "11" + (uuid "3ebd7669-0716-40ce-bfdd-b9b60c9cf178") + ) + (pin "1" + (uuid "a575bd7b-a6f2-423e-ad7e-fe03169cce2a") + ) + (pin "7" + (uuid "9b71c736-a301-46ad-9349-5c38c639bf6b") + ) + (pin "12" + (uuid "39d1326e-cfe2-4ebc-8125-3f05d7e4a942") + ) + (pin "6" + (uuid "ac34b0fc-c14c-4577-9d44-94a8da417086") + ) + (pin "9" + (uuid "cd30be1a-badd-46b9-9292-165dd7652400") + ) + (pin "3" + (uuid "ed179c8d-2bef-4dfe-b5fb-d3c4ad3d76b6") + ) + (pin "10" + (uuid "761ff806-2b78-4064-9def-247f25a4a26d") + ) + (pin "15" + (uuid "fb746ecf-6672-4f96-8703-2e0a7d40b534") + ) + (pin "2" + (uuid "3cc9fd01-3141-415c-b511-e4c3c1c61034") + ) + (pin "14" + (uuid "b5f5127d-b3c6-4c5b-b71d-d1a67efcfb1e") + ) + (pin "4" + (uuid "7a5024ae-ee33-42fd-bf57-f0479bfaccee") + ) + (pin "16" + (uuid "45c49937-5fd1-427f-a3ee-c0fe90854894") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 115.57 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "a1686572-9323-403b-87cf-f144e61430ee") + (property "Reference" "#PWR07" + (at 115.57 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 115.57 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 115.57 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 115.57 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 115.57 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e3e18a98-c02d-4fe2-8ce3-978058dd97a5") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR07") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 322.58 53.34 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a2da90c0-694b-402a-b6cb-9d2e2ed7c3c0") + (property "Reference" "#PWR033" + (at 322.58 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 325.12 54.61 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 322.58 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 322.58 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 322.58 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "2a16c874-cf6e-4ca6-839c-78d1bc46ca5b") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR033") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 377.19 232.41 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "a3aaa718-66ea-40ed-9d49-f47020194772") + (property "Reference" "L9" + (at 377.19 227.7604 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "FB" + (at 377.19 230.1846 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 377.19 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 377.19 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 377.19 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C74486" + (at 377.19 232.41 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "HZ1206E601R-10" + (at 377.19 232.41 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e16f5191-3423-4293-b5bf-5ece5450f5cd") + ) + (pin "2" + (uuid "c3760f1a-77c5-4a66-ac90-20197a3dbba5") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 39.37 102.87 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "a3b6f591-80d9-4828-a428-536abbd9460b") + (property "Reference" "C16" + (at 39.37 96.5667 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 39.37 98.9909 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 43.18 101.9048 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 39.37 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 39.37 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 39.37 102.87 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 39.37 102.87 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f5430d7d-8b84-47d5-bd3d-0561112af1ff") + ) + (pin "1" + (uuid "91fc583a-fd4a-4d87-99c0-cf740b20eadf") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C16") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 335.28 172.72 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "a52f0228-af75-4234-a435-643c3426f459") + (property "Reference" "R32" + (at 335.28 167.5597 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10k 1%" + (at 335.28 169.9839 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 335.28 174.498 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 335.28 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 335.28 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 335.28 172.72 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 335.28 172.72 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f1b50435-2004-4a2f-9520-03d924dff3bd") + ) + (pin "1" + (uuid "de05b289-5017-48de-8997-eafb9e180b1a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R32") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Jumper:SolderJumper_2_Open") + (at 39.37 135.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "a5a3cfdb-a813-4d3e-81ea-3159bde6dc6c") + (property "Reference" "JP15" + (at 39.37 133.2809 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SolderJumper_2_Open" + (at 39.37 133.2809 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm" + (at 39.37 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 39.37 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 39.37 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 39.37 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a8bea2cd-7dc6-4153-b708-ad35dab6544e") + ) + (pin "1" + (uuid "b4366125-df1d-4fa7-9de9-d88f936df0d4") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "JP15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 351.79 69.85 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a8c0556f-9078-4853-b810-e4082c013efa") + (property "Reference" "C32" + (at 347.472 67.818 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10uF 50V" + (at 346.71 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 350.8248 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 351.79 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 351.79 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C13585" + (at 351.79 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C106K4PACTU" + (at 351.79 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f9eebcc9-9be0-460f-8aec-8ca33eba8fc2") + ) + (pin "1" + (uuid "4f4e7766-1311-4b8b-a0c2-fc67acdcd384") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C32") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 353.06 236.22 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a9fd5735-413d-4016-ab27-56cbfc4fd118") + (property "Reference" "#PWR046" + (at 353.06 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 353.06 233.68 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 353.06 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 353.06 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 353.06 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "35a2d64c-8bc5-4dd9-9a24-d1860e84002c") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR046") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:MAR-3SM+") + (at 168.91 208.28 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "aa071f8b-18fe-4607-a8f4-e94cd209e382") + (property "Reference" "U13" + (at 180.2758 207.7822 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MAR-3SM+" + (at 180.2758 205.358 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:Mini-Circuits_WW107" + (at 178.435 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.minicircuits.com/pdfs/MAR-3SM+.pdf" + (at 180.34 209.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 168.91 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C6937326" + (at 168.91 208.28 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "MAR-3SM+" + (at 168.91 208.28 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0cf57800-7c84-42ea-a3d5-5c3dd43223ea") + ) + (pin "2" + (uuid "ba9d330e-db17-443e-9d57-9d63709fd4e8") + ) + (pin "3" + (uuid "66389677-dd72-4025-b199-9a3b91c22cee") + ) + (pin "4" + (uuid "de56e179-1925-4873-be30-711feb1f2089") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 347.98 76.2 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "aabd23a5-2f80-4e08-bf33-2b20c2f21a8e") + (property "Reference" "#PWR039" + (at 347.98 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 350.52 77.47 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 347.98 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 347.98 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 347.98 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fa4ddaf6-6a05-4a70-80d1-e66747aac5aa") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR039") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 309.88 81.28 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ab3ea4bc-56e0-44c9-ac0e-20e275a3bf54") + (property "Reference" "C11" + (at 306.959 80.0679 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10uF 50V" + (at 313.69 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 310.8452 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 309.88 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 309.88 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C13585" + (at 309.88 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C106K4PACTU" + (at 309.88 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6536bbc4-fdbe-48c2-bd80-083d7762a875") + ) + (pin "1" + (uuid "46cdc06d-a445-41c8-ba5e-209fe205b973") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 73.66 27.94 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "abbf3a1f-cc73-40d3-9eae-4da5531c2e00") + (property "Reference" "C67" + (at 76.581 26.7279 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10uF 50V" + (at 76.581 29.1521 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 74.6252 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 73.66 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 73.66 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C13585" + (at 73.66 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C106K4PACTU" + (at 73.66 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "44329590-9fc4-40fa-8e18-c93b6e6bc50a") + ) + (pin "1" + (uuid "fdb88386-193b-49c4-8922-c987a4bd2893") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C67") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 346.71 236.22 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ac89dd91-a68a-41aa-a750-f6d106de34c1") + (property "Reference" "C59" + (at 349.25 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 346.71 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 345.7448 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 346.71 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 346.71 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 346.71 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 346.71 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "70964bee-c25c-4329-aaab-4f85678a4c9c") + ) + (pin "1" + (uuid "d5c6a368-be23-4492-990d-94cc16bb74ef") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C59") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 190.5 172.72 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "accbf3b8-826d-4502-83fd-44320e406ce7") + (property "Reference" "R37" + (at 193.04 171.4499 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0" + (at 193.04 173.9899 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 192.278 172.72 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 190.5 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 190.5 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17888" + (at 190.5 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "1206S4J0000TDE" + (at 190.5 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "093b1f9d-fa88-47c2-ab6c-f0d3841f0b83") + ) + (pin "1" + (uuid "f80095e8-e90b-4fcc-8120-c555aecc7fa6") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R37") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 46.99 173.99 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ad544b08-0304-411a-b7c1-228755962e6e") + (property "Reference" "R60" + (at 43.18 172.6042 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 43.18 170.18 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 46.99 175.768 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 46.99 173.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 46.99 173.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17948" + (at 46.99 173.99 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "RT1206FRE072K2L" + (at 46.99 173.99 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ddd73146-f067-4c01-8e86-c14db7853d26") + ) + (pin "1" + (uuid "ca41527e-a1cf-482c-9b2a-4e1357489a15") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R60") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 55.88 238.76 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ad7316fb-9a55-4356-9737-30a4911dbc6f") + (property "Reference" "#PWR073" + (at 49.53 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 55.88 241.3 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 55.88 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 55.88 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 55.88 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "638f6e1b-4e27-47d1-b67b-c78233889ed0") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR073") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Jumper:Jumper_2_Open") + (at 25.4 83.82 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "ad87b898-c7a2-4996-b490-a56a31596238") + (property "Reference" "JP4" + (at 25.4 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "CAL isolation" + (at 25.4 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical" + (at 25.4 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 25.4 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 25.4 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 25.4 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "14359d47-f314-4b5d-894c-ff86f03ebd66") + ) + (pin "1" + (uuid "b2ddc6e6-c2ad-4405-b631-c52743ed9a78") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "JP4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 198.12 130.81 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ada103f1-5c06-4c85-9857-fd437f036147") + (property "Reference" "#PWR082" + (at 198.12 137.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 198.12 134.9431 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 198.12 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 198.12 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 198.12 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "32002109-d06c-4ff6-9851-5d32bcf465d3") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR082") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 162.56 208.28 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ada1b059-3061-4d9a-9d94-4ccdedd32249") + (property "Reference" "#PWR076" + (at 162.56 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 165.1 209.55 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 162.56 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 162.56 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 162.56 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "59cc0f80-fc63-44a4-a0b3-5d525059d0fd") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR076") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 342.9 71.12 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ae144e56-a8ad-4cab-9ab4-9934ac3264a4") + (property "Reference" "C26" + (at 339.979 72.3321 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 341.63 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 343.8652 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 342.9 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 342.9 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 342.9 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 342.9 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a40ace44-e1a3-4030-a6a1-49e0f76bb87b") + ) + (pin "1" + (uuid "f145213b-b32d-4f98-b4be-b1f5907c622b") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C26") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 217.17 270.51 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "aec6bf72-14d7-4417-a5b8-fa036611fd55") + (property "Reference" "#PWR060" + (at 217.17 276.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 219.71 271.78 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 217.17 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 217.17 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 217.17 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4e323def-46a4-4017-ad82-204429e3139e") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR060") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 102.87 45.72 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b2858ee3-b68b-4fcb-afd3-6bc6da45cd05") + (property "Reference" "L11" + (at 102.87 41.0704 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10uH 20%" + (at 102.87 43.4946 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Inductor_SMD:L_Bourns-SRN6028" + (at 102.87 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 102.87 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 102.87 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C5753503" + (at 102.87 45.72 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "IFSC2020DEER100M01" + (at 102.87 45.72 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "320f005b-acba-4c9a-a693-a70f65d917d9") + ) + (pin "2" + (uuid "cbc44ee1-8305-46bd-92aa-ca5e96138556") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Regulator_Linear:LM317L_SO8") + (at 130.81 259.08 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b3999719-8f92-4f59-b3af-09cc142dd379") + (property "Reference" "U17" + (at 128.143 260.2921 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "LM317L" + (at 128.143 257.8679 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 125.73 259.08 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/snvs775k/snvs775k.pdf" + (at 135.89 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 130.81 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C183332" + (at 130.81 259.08 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "LM317LIDR" + (at 130.81 259.08 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "280bf6e2-1df9-4391-9997-c857d4646040") + ) + (pin "1" + (uuid "2eb24c28-edb2-4c6f-a8a4-724c4cf9941c") + ) + (pin "3" + (uuid "352ec95c-1185-4d16-985d-5ec78e3077ca") + ) + (pin "7" + (uuid "f7d84025-4405-49f4-9f7a-e396576e61e7") + ) + (pin "6" + (uuid "3aaacde0-3ebf-4824-b171-d000c20217cb") + ) + (pin "8" + (uuid "36a5ca6e-06aa-45da-92e0-75980a394e7b") + ) + (pin "4" + (uuid "0cd74e1b-bedf-4b95-bb31-527abf00315e") + ) + (pin "5" + (uuid "0aca1091-d180-4ac5-83ff-d32f1a8bcc07") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U17") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 325.12 200.66 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b51501aa-6d98-4196-9b5c-6864c0bfb599") + (property "Reference" "R41" + (at 325.12 195.4997 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10k 1%" + (at 325.12 197.9239 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 325.12 202.438 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 325.12 200.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 325.12 200.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 325.12 200.66 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 325.12 200.66 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "182f24a0-3bf3-419f-9e09-b07eae4711b1") + ) + (pin "1" + (uuid "f455c366-c090-461b-89a3-c243e0af6b81") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R41") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:T41_Attenuator_Daughter") + (at 101.6 92.71 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b697e643-c7f2-4ea5-8d1f-833c50bce0fc") + (property "Reference" "U11" + (at 100.965 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "T41_Attenuator_Daughter" + (at 100.965 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:T41_Attenuator_Daughter" + (at 104.775 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 105.41 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 101.6 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 101.6 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "8" + (uuid "adbbf6ae-ddf3-4931-83ce-388fe58dde9d") + ) + (pin "10" + (uuid "a29f5c2a-d311-4d8c-b46e-7adddb79b1bc") + ) + (pin "12" + (uuid "3fb24e55-793e-4cdd-b9ff-04ff9891dd33") + ) + (pin "9" + (uuid "6c117822-77b1-419d-96f9-ae607ca0b54e") + ) + (pin "7" + (uuid "d45e98dc-15d5-4723-a59f-b45a7e961aeb") + ) + (pin "11" + (uuid "05e93006-d762-4f56-8c06-10edd4573efe") + ) + (pin "6" + (uuid "3e191061-0231-48fc-a5b7-9cd53b79d504") + ) + (pin "5" + (uuid "e3e339df-b5ad-4997-a50d-7e0bed70775e") + ) + (pin "4" + (uuid "d8e6e8a1-7789-4a9e-bba6-6d7bb7f105d0") + ) + (pin "3" + (uuid "db06c367-5321-432f-9ea3-a22a295a3eeb") + ) + (pin "2" + (uuid "7cfc8c4f-a8e5-4819-a776-d5301c2c99ef") + ) + (pin "1" + (uuid "c50294a9-fe14-4edd-8d59-0ee620de8ffb") + ) + (instances + (project "" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 200.66 67.31 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b80eeb8b-7961-4aeb-8a6a-fb5018fa1137") + (property "Reference" "C3" + (at 195.58 64.77 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10uF 50V" + (at 195.58 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 199.6948 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 200.66 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 200.66 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C13585" + (at 200.66 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C106K4PACTU" + (at 200.66 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d6d4bb3c-8394-4aec-8668-0c4476716a86") + ) + (pin "1" + (uuid "a66dbce3-51a1-4875-b105-8595b6db8caa") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 351.79 162.56 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ba99aafa-7d78-462b-86ef-9951fc4f8595") + (property "Reference" "C33" + (at 346.71 163.83 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2.2nF 50V" + (at 346.71 166.37 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 355.6 163.5252 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 351.79 162.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 351.79 162.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C326631" + (at 351.79 162.56 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "GRM3195C1H222JA01D" + (at 351.79 162.56 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "737e0afe-d37d-4d39-9590-8395dd1642e6") + ) + (pin "1" + (uuid "1bed95bd-9e46-4ce4-9c63-8c3b21c9fd66") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C33") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 363.22 243.84 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "baaf9c19-dc40-4360-942f-486284a1fb5a") + (property "Reference" "C36" + (at 366.776 245.872 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10uF 50V" + (at 357.378 246.634 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 367.03 244.8052 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 363.22 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 363.22 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C13585" + (at 363.22 243.84 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C106K4PACTU" + (at 363.22 243.84 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1c8066f2-8d89-4ac9-ab7a-79c198d4b046") + ) + (pin "1" + (uuid "8178fe18-d0c2-4059-a5ae-01f26ab6a0d6") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C36") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 377.19 247.65 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "bb30590d-6263-4f5c-b60d-2d6cd848b059") + (property "Reference" "C61" + (at 383.54 246.38 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 381 243.84 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 373.38 248.6152 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 377.19 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 377.19 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 377.19 247.65 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 377.19 247.65 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "09742436-b1ba-4dbe-9ea3-e05f6e300248") + ) + (pin "1" + (uuid "44a26389-cbc9-4dd8-bd0a-55bcb047bbe3") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C61") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 153.67 102.87 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "bbfa32a0-6069-46b1-a4fc-da5700d693fe") + (property "Reference" "C27" + (at 152.4 109.22 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 153.67 106.7491 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 157.48 103.8352 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 153.67 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 153.67 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 153.67 102.87 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 153.67 102.87 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1c3c5d4a-73df-423d-bf0d-c4fe076b4039") + ) + (pin "1" + (uuid "ac322af2-87dd-4401-b29a-6662dcc57d4d") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C27") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Transistor_FET:BS170") + (at 245.11 234.95 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "bc3fcd71-3914-495f-b73c-e391b00aa8d3") + (property "Reference" "Q1" + (at 250.19 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "BS170" + (at 251.46 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-92" + (at 240.03 236.855 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.com/pub/Collateral/BS170-D.PDF" + (at 240.03 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "" + (at 245.11 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 245.11 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "BS170" + (at 245.11 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "92be6197-7231-4022-bd29-b530de8506ab") + ) + (pin "2" + (uuid "5b71f57b-35a1-42f9-8548-236c18007272") + ) + (pin "1" + (uuid "50bdd62f-1a1e-4365-9b6d-fa9767b809f4") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "Q1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 307.34 158.75 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "bc4c140a-01c5-4bfa-9d2d-49a43a2636c1") + (property "Reference" "R24" + (at 307.34 153.5895 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0" + (at 307.34 156.0138 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 307.34 160.528 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 307.34 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 307.34 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17888" + (at 307.34 158.75 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "1206S4J0000TDE" + (at 307.34 158.75 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "86d02454-7317-42fc-842a-4492bac7c4ed") + ) + (pin "1" + (uuid "23224ae2-6edc-45ee-b27e-7feb8426d36a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R24") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 91.44 27.94 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "bc6ef2cb-a847-4253-b06d-215e6d6af04a") + (property "Reference" "C68" + (at 94.361 26.7279 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 94.361 29.1521 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 92.4052 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 91.44 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 91.44 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 91.44 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 91.44 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1911a329-3138-421e-a60a-e1fbbd818077") + ) + (pin "1" + (uuid "77af9959-3811-4475-9b28-0446fbd54778") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C68") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:PSA-8A+") + (at 138.43 102.87 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "bc7f1f12-c831-4e95-91ac-3e7b8da5081f") + (property "Reference" "U2" + (at 138.43 93.6457 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "PSA-8A+" + (at 138.43 96.0699 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_SMD:SOT-363_SC-70-6" + (at 138.43 112.395 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.minicircuits.com/pdfs/PSA-8A+.pdf" + (at 139.7 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 138.43 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C3192212" + (at 138.43 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "PSA-8A+" + (at 138.43 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "76ec0147-dad6-4680-bbe3-0d720d292dff") + ) + (pin "1" + (uuid "48aa3d25-fa85-4678-998d-c0d4ec0df202") + ) + (pin "3" + (uuid "e2ea8b26-df9d-4f30-980a-09b3e01a37bd") + ) + (pin "4" + (uuid "6507b868-3295-4987-ba8b-0444fa4f338b") + ) + (pin "2" + (uuid "684ec6b9-93a0-4392-887b-be82b22b7044") + ) + (pin "6" + (uuid "686d423c-9789-43f9-98a7-a8437a7eeb8d") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 257.81 41.91 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "bdf38931-802a-45c1-99e2-7ffdd8e8e288") + (property "Reference" "R4" + (at 257.81 36.7497 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100R" + (at 257.81 39.1739 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 257.81 43.688 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 257.81 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 257.81 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17901" + (at 257.81 41.91 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1000ELF" + (at 257.81 41.91 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f2a1cf3a-50f0-45e0-8612-995fbeb68eec") + ) + (pin "1" + (uuid "9f24fdf7-048b-47bb-90e6-a141d0839fb1") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 134.62 86.36 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "beec07e1-12b2-4f2e-bf96-0c2777e1b478") + (property "Reference" "C13" + (at 133.35 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 134.62 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 135.5852 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 134.62 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 134.62 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 134.62 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 134.62 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "7771b5f3-9fe2-49f1-ab71-66b70e829d51") + ) + (pin "1" + (uuid "859325fd-d444-4497-b989-6ffaff314154") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 320.04 231.14 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c05f687b-efc0-4529-b227-1a78c4b0d376") + (property "Reference" "L8" + (at 320.04 226.4904 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "FB" + (at 320.04 228.9146 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 320.04 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 320.04 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 320.04 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C74486" + (at 320.04 231.14 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "HZ1206E601R-10" + (at 320.04 231.14 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "26da0bc5-1ce9-4b71-8302-f23729443e44") + ) + (pin "2" + (uuid "a58ce37e-8878-45f5-94c1-0befb425e9be") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Amplifier_Operational:MC33078") + (at 140.97 275.59 90) + (mirror x) + (unit 3) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c087d2d5-2488-49e1-bb89-43282482635d") + (property "Reference" "U16" + (at 140.97 269.0327 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM358B" + (at 140.97 271.4569 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 140.97 275.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.com/pub/Collateral/MC33078-D.PDF" + (at 140.97 275.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 140.97 275.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1850238" + (at 140.97 275.59 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "LM358BIDR" + (at 140.97 275.59 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "6" + (uuid "8b2179e2-30d1-40c1-903e-b401af42aa78") + ) + (pin "5" + (uuid "57180fcd-2fb6-4525-9661-537a9bb80fb0") + ) + (pin "2" + (uuid "825b70b2-c176-444b-bb53-ecb4ead45b83") + ) + (pin "7" + (uuid "222ef63a-90bc-44c5-8d63-d5c658bc48e0") + ) + (pin "1" + (uuid "a0c7b821-6e49-4606-8ac7-2234e032ffd1") + ) + (pin "8" + (uuid "fc857c94-c483-431e-af64-014d21709dff") + ) + (pin "3" + (uuid "5dfbe698-0cca-4de9-82f7-a71e9afb5226") + ) + (pin "4" + (uuid "aa0a6938-423f-460f-a09a-613d848653d3") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U16") + (unit 3) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 49.53 228.6 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c15b18a0-9c29-454b-8bea-0ec18a51bf49") + (property "Reference" "#PWR068" + (at 49.53 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 46.99 229.87 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 49.53 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 49.53 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 49.53 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3e1a0894-07ae-4a70-902b-8728a6c4455e") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR068") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Regulator_Linear:LM7805_TO220") + (at 62.23 24.13 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c18341db-0b6a-426c-a143-af24ef423f00") + (property "Reference" "U14" + (at 62.23 18.0807 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM7805CT" + (at 62.23 20.5049 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 62.23 18.415 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.cn/PowerSolutions/document/MC7800-D.PDF" + (at 62.23 25.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 62.23 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C725349" + (at 62.23 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "LM7805CT" + (at 62.23 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "33a774f5-2bd1-44dc-b1ca-1ff586e7ad73") + ) + (pin "2" + (uuid "3c284809-ec9f-4fda-9b6a-ea325f4881c1") + ) + (pin "1" + (uuid "58463ff0-fbd7-4c76-997c-be6556632ad9") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U14") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 382.27 170.18 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c202c6e6-c7c5-44ac-a6f8-669a90224601") + (property "Reference" "R66" + (at 382.27 165.0195 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0" + (at 382.27 167.4438 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 382.27 171.958 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 382.27 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 382.27 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17888" + (at 382.27 170.18 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "1206S4J0000TDE" + (at 382.27 170.18 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c24128d8-1f1a-488f-8d53-9a8034430732") + ) + (pin "1" + (uuid "fc5fe9cd-c809-4e52-a1e3-91bef146a4d8") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R66") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 214.63 231.14 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "c26db767-1143-4bfc-bc02-6c1b5bb2986d") + (property "Reference" "TP12" + (at 217.932 235.9193 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "TestPoint" + (at 217.932 233.4951 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 214.63 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 214.63 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 214.63 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 214.63 231.14 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "bf7357a9-4842-495f-9752-4a61b034e24a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP12") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 190.5 127 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c331f122-088c-4cd0-959b-54b4b4cff0dd") + (property "Reference" "R40" + (at 195.6603 127 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0" + (at 193.2361 127 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 188.722 127 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 190.5 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 190.5 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17888" + (at 190.5 127 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "1206S4J0000TDE" + (at 190.5 127 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "4fd9795c-beea-444f-a691-87eed9dee29d") + ) + (pin "1" + (uuid "880f3bbb-57c8-4c95-ac08-58b8a5531720") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R40") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 36.83 24.13 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c44c51e7-8e1c-49a6-9bf6-fecd02692bf4") + (property "Reference" "#PWR012" + (at 36.83 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 36.83 19.05 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 36.83 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 36.83 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 36.83 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7a0eb818-4de2-460d-a2fa-09a18aa86b42") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR012") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 72.39 102.87 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c4a96ea6-41cd-468a-8e4c-741ea4f9b9be") + (property "Reference" "C22" + (at 72.39 96.5667 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 72.39 98.9909 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 76.2 101.9048 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 72.39 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 72.39 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 72.39 102.87 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 72.39 102.87 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d3651ec5-9390-47aa-bc79-496d9a626292") + ) + (pin "1" + (uuid "3da3dcea-3556-451c-ba21-21dc1fc7f6fa") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C22") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Amplifier_Operational:MC33078") + (at 321.31 175.26 180) + (unit 2) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c5997762-7ddb-4389-931c-1aa158b5d9ed") + (property "Reference" "U6" + (at 321.31 184.4843 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MC33078" + (at 321.31 182.0601 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 321.31 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.com/pub/Collateral/MC33078-D.PDF" + (at 321.31 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 321.31 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C2057560" + (at 321.31 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "MC33078DR" + (at 321.31 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b08a0fe3-0c2d-49cc-89ed-7b8b972917aa") + ) + (pin "4" + (uuid "044156db-f394-4fe3-8e56-8a68229a60af") + ) + (pin "7" + (uuid "ddd1dc7f-e48c-4be9-84bb-56f54c65b7f8") + ) + (pin "8" + (uuid "1ddd0488-1a70-4666-b876-c65e3429cb7f") + ) + (pin "6" + (uuid "d0f5dd9e-c737-49ff-a5d0-900ccf6ad25e") + ) + (pin "5" + (uuid "278f4a99-f32d-487d-9bed-3db9ca5316d6") + ) + (pin "3" + (uuid "f82c28e7-e51f-431d-9d44-61e592fc560f") + ) + (pin "2" + (uuid "7060689d-235c-45e2-8cff-1ab4e5227905") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U6") + (unit 2) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 121.92 96.52 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c59db8d6-776b-4990-81d4-46264caf6960") + (property "Reference" "C29" + (at 121.92 102.8233 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 121.92 100.3991 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 125.73 97.4852 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 121.92 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 121.92 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 121.92 96.52 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 121.92 96.52 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c159a86e-3d32-40d9-8e8c-a8e6cccaf32a") + ) + (pin "1" + (uuid "cd4fe443-eb76-4281-94ac-443122d8b62c") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C29") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 80.01 53.34 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c645da4c-81a4-40c8-bb9e-d5919b1a7835") + (property "Reference" "#PWR09" + (at 80.01 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 80.01 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 80.01 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 80.01 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 80.01 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0aaf0566-a848-4fb4-a8f7-6cb59593bffa") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR09") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 33.02 167.64 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c6679af3-6cd5-4901-ba13-4eeea64bc18c") + (property "Reference" "#PWR089" + (at 33.02 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 33.02 162.56 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 33.02 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 33.02 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 33.02 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e57de7ca-9190-4d49-819f-377f924f3e64") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR089") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 21.59 213.36 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c6a5ec2f-799a-483b-996f-795fc1edfc1b") + (property "Reference" "J6" + (at 19.0499 214.2789 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "RF_OUT" + (at 24.384 202.184 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 21.59 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 21.59 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 21.59 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 21.59 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CONSMA001-G" + (at 21.59 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "81347db8-6f53-4284-ae7e-a4af20acb1a2") + ) + (pin "2" + (uuid "8c808be4-0431-4cf9-9435-cdd6a3076da7") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 372.11 205.74 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c73a785d-f6cd-464d-bbb8-8201f0751d32") + (property "Reference" "R44" + (at 372.11 200.5797 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10k" + (at 372.11 203.0039 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 372.11 207.518 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 372.11 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 372.11 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 372.11 205.74 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 372.11 205.74 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "06bd2691-05bf-4a08-bcc4-d0be46c05927") + ) + (pin "1" + (uuid "a0648805-9b56-4a94-a1c4-da7128fa7848") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R44") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 322.58 59.69 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c8377519-e405-464b-add7-a151f724c18f") + (property "Reference" "C5" + (at 320.04 57.15 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "105pF 50V" + (at 326.39 63.5 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 318.77 58.7248 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 322.58 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 322.58 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1884" + (at 322.58 59.69 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CL31C101JGFNNNE" + (at 322.58 59.69 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "523cd165-401c-4438-8cea-97d786d854e9") + ) + (pin "1" + (uuid "818d221f-46c6-40b3-a0ca-e77de1da0e41") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Amplifier_Operational:MC33078") + (at 321.31 210.82 180) + (unit 2) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c86df541-0aeb-419e-b075-7ac18a94754d") + (property "Reference" "U8" + (at 321.31 220.0443 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MC33078" + (at 321.31 217.6201 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 321.31 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.com/pub/Collateral/MC33078-D.PDF" + (at 321.31 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 321.31 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C2057560" + (at 321.31 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "MC33078DR" + (at 321.31 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b08a0fe3-0c2d-49cc-89ed-7b8b972917ab") + ) + (pin "4" + (uuid "044156db-f394-4fe3-8e56-8a68229a60b1") + ) + (pin "7" + (uuid "a28fc044-9ebd-434a-a3ab-fffad1df3ec6") + ) + (pin "8" + (uuid "1ddd0488-1a70-4666-b876-c65e3429cb81") + ) + (pin "6" + (uuid "510ccc4a-3872-4d65-819f-d4ae0736704a") + ) + (pin "5" + (uuid "3bcd3b4b-4142-42e0-b793-9e5e25d1303f") + ) + (pin "3" + (uuid "f82c28e7-e51f-431d-9d44-61e592fc5610") + ) + (pin "2" + (uuid "7060689d-235c-45e2-8cff-1ab4e5227906") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U8") + (unit 2) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 248.92 59.69 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c906b9be-9c5f-4f33-89bd-77c04ebdeeba") + (property "Reference" "#PWR026" + (at 248.92 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 248.92 63.8231 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 248.92 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 248.92 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 248.92 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "61733c65-000e-487e-8bd7-87222c5e5d5b") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR026") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 248.92 34.29 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c9a08a05-b2b4-4515-bdf7-fca4a65ad8d4") + (property "Reference" "C4" + (at 251.841 35.5021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10nF 50V" + (at 251.841 33.0779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 247.9548 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 248.92 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 248.92 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1846" + (at 248.92 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C103K5RAC7210" + (at 248.92 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a42aacd1-c0a3-4adf-ac11-4c68d9c3b791") + ) + (pin "1" + (uuid "d7a4e42d-20ca-427f-87f2-ad6079619d0d") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 190.5 63.5 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c9e9f4a8-3c7a-4e1c-a7cc-27a06d1d978d") + (property "Reference" "L1" + (at 190.5 58.8502 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "FB" + (at 190.5 61.2745 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 190.5 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 190.5 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 190.5 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C74486" + (at 190.5 63.5 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "HZ1206E601R-10" + (at 190.5 63.5 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "20239859-a46a-43be-bf51-487810a0902d") + ) + (pin "2" + (uuid "df28b633-b84c-4c76-8aff-7e7c85ca7527") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 360.68 66.04 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "cb01545b-d846-492d-8a1f-22db74359dbb") + (property "Reference" "L2" + (at 360.68 61.3904 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "FB" + (at 360.68 63.8146 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 360.68 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 360.68 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 360.68 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C74486" + (at 360.68 66.04 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "HZ1206E601R-10" + (at 360.68 66.04 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "23c86226-a809-40d6-a1d5-2daa809baa91") + ) + (pin "2" + (uuid "71410ff8-5172-4eeb-9896-288d697ac914") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 67.31 102.87 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "ccfd5155-b814-4b89-8f85-cde5af9ba7ac") + (property "Reference" "TP4" + (at 65.913 104.9599 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "TestPoint" + (at 67.31 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 72.39 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 72.39 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 67.31 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 67.31 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5d72d88e-6c14-43c6-9679-7dbe18e6cd9d") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Amplifier_Operational:MC33078") + (at 146.05 257.81 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "cd64490d-0941-4aa4-8700-7a7a248a68f1") + (property "Reference" "U16" + (at 146.05 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM358B" + (at 146.05 250.19 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 146.05 257.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.com/pub/Collateral/MC33078-D.PDF" + (at 146.05 257.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 146.05 257.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1850238" + (at 146.05 257.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "LM358BIDR" + (at 146.05 257.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "6" + (uuid "8b2179e2-30d1-40c1-903e-b401af42aa79") + ) + (pin "5" + (uuid "57180fcd-2fb6-4525-9661-537a9bb80fb1") + ) + (pin "2" + (uuid "825b70b2-c176-444b-bb53-ecb4ead45b84") + ) + (pin "7" + (uuid "222ef63a-90bc-44c5-8d63-d5c658bc48e1") + ) + (pin "1" + (uuid "a0c7b821-6e49-4606-8ac7-2234e032ffd2") + ) + (pin "8" + (uuid "fc857c94-c483-431e-af64-014d21709e00") + ) + (pin "3" + (uuid "5dfbe698-0cca-4de9-82f7-a71e9afb5227") + ) + (pin "4" + (uuid "aa0a6938-423f-460f-a09a-613d848653d4") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U16") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Amplifier_Operational:MC33078") + (at 363.22 234.95 270) + (unit 3) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ce484b45-0c5c-4b7a-88d3-bd3a22291ffa") + (property "Reference" "U8" + (at 363.22 228.3927 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MC33078" + (at 363.22 230.8169 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 363.22 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.com/pub/Collateral/MC33078-D.PDF" + (at 363.22 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 363.22 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C2057560" + (at 363.22 234.95 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "MC33078DR" + (at 363.22 234.95 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b08a0fe3-0c2d-49cc-89ed-7b8b972917ac") + ) + (pin "4" + (uuid "a99774a1-8584-4ef0-8a8a-6d70c5613232") + ) + (pin "7" + (uuid "ddd1dc7f-e48c-4be9-84bb-56f54c65b7fa") + ) + (pin "8" + (uuid "a91c9373-f2bd-45cb-9be7-fb98cda4050e") + ) + (pin "6" + (uuid "d0f5dd9e-c737-49ff-a5d0-900ccf6ad260") + ) + (pin "5" + (uuid "278f4a99-f32d-487d-9bed-3db9ca5316d8") + ) + (pin "3" + (uuid "f82c28e7-e51f-431d-9d44-61e592fc5611") + ) + (pin "2" + (uuid "7060689d-235c-45e2-8cff-1ab4e5227907") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U8") + (unit 3) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 360.68 179.07 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "cf507d18-4bb1-4f55-bfd5-016cfd1dc81b") + (property "Reference" "C39" + (at 365.76 176.53 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10uF 50V" + (at 365.76 181.61 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 361.6452 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 360.68 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 360.68 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C13585" + (at 360.68 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C106K4PACTU" + (at 360.68 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a46173af-6db6-4980-a7bd-9ca99422ef69") + ) + (pin "1" + (uuid "4c4a2d20-33bf-4b86-8802-23f3d85fd105") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C39") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 304.8 44.45 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "cf56b80d-9932-45c6-80b0-65f58a86b6b1") + (property "Reference" "R5" + (at 304.8 39.2897 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "5k1" + (at 304.8 41.7139 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 304.8 46.228 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 304.8 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 304.8 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C26033" + (at 304.8 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "ERJ-8ENF5101V" + (at 304.8 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d8eef05b-7db1-4d70-aa45-e36c9dab7a00") + ) + (pin "1" + (uuid "6931772f-c5ab-41c3-ab18-288b63bc65d5") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 396.24 170.18 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d1fce359-88ef-456a-8f7f-aeda00ea4c89") + (property "Reference" "#PWR055" + (at 396.24 176.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 398.78 171.45 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 396.24 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 396.24 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 396.24 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b19f486e-084b-47f8-91dc-70c0d38c5d2a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR055") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 330.2 29.21 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d220bc8e-e7da-444e-a985-66067e87adf4") + (property "Reference" "R2" + (at 330.2 24.0497 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "5k1" + (at 330.2 26.4739 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 330.2 30.988 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 330.2 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 330.2 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C26033" + (at 330.2 29.21 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "ERJ-8ENF5101V" + (at 330.2 29.21 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6026437a-c463-4dd5-b6e7-03d236b6e393") + ) + (pin "1" + (uuid "23c6f52d-5153-4226-aa17-16d13d196077") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 304.8 92.71 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d50d1298-e07d-4ce9-8890-aba3c44564b9") + (property "Reference" "R17" + (at 304.8 87.5497 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "5k1" + (at 304.8 89.9739 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 304.8 94.488 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 304.8 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 304.8 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C26033" + (at 304.8 92.71 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "ERJ-8ENF5101V" + (at 304.8 92.71 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "9f56e144-8f52-4098-8ad7-5e0f6510a0fa") + ) + (pin "1" + (uuid "1ce6ecde-e339-4631-9782-2dbd8755618e") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R17") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 278.13 60.96 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d6b605de-f379-4cab-a0ff-601a37f31c99") + (property "Reference" "R9" + (at 279.908 59.7479 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10k" + (at 279.908 62.1721 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 276.352 60.96 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 278.13 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 278.13 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 278.13 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 278.13 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "2ced29a9-04e9-49ca-8f99-f0297d600346") + ) + (pin "1" + (uuid "0ff6b985-bb52-4e77-ae36-82931f2748a0") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole_Pad") + (at 152.4 57.15 270) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d6cc8226-8999-475a-aacc-a7ee3bb3716c") + (property "Reference" "H1" + (at 156.21 57.15 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "~" + (at 156.21 58.3621 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3_Pad" + (at 152.4 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 152.4 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 152.4 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 152.4 57.15 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "858a42ce-e885-49e7-82d0-dce712517983") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "H1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 281.94 109.22 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d6eaeb5f-9282-45a2-892e-49c8162a7da1") + (property "Reference" "R23" + (at 283.718 108.0079 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10k" + (at 283.718 110.4321 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 283.718 109.22 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 281.94 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 281.94 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 281.94 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 281.94 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a7035397-d318-4d99-a497-3d2f5991ecc5") + ) + (pin "1" + (uuid "29587686-bcc8-4f97-ae26-b06740823c40") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R23") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 148.59 50.8 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "d842fef4-a027-430c-9f28-fee9793190e3") + (property "Reference" "G5" + (at 149.86 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 148.59 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 153.67 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 153.67 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 148.59 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "48f3c58f-1aef-4d01-a2b9-761ea71a8d8d") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "G5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 248.92 82.55 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d87bf78f-d0b8-4a18-a61d-31f15b64cb4b") + (property "Reference" "C17" + (at 251.841 83.7621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10nF 50V" + (at 251.841 81.3379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 247.9548 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 248.92 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 248.92 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1846" + (at 248.92 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C103K5RAC7210" + (at 248.92 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "2288a02a-22e5-4630-a653-6f0ecccd5232") + ) + (pin "1" + (uuid "3fd1eab0-f79c-4f66-b3d3-cf15177777d7") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C17") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 309.88 38.1 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d9a20272-5259-43f6-afee-c864e54d25a8") + (property "Reference" "#PWR034" + (at 309.88 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 312.42 39.37 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 309.88 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 309.88 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 309.88 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "913cc275-4e79-4eda-b1b6-1f2db34098ad") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR034") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 81.28 91.44 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d9f4b443-e813-4985-8db3-c2c0ef016b4b") + (property "Reference" "#PWR014" + (at 81.28 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 81.28 95.5731 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 81.28 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 81.28 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 81.28 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e3da5e5e-7722-465b-afec-543a36074be5") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR014") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 140.97 86.36 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "da9d9f10-e820-4f3e-8019-31a36c3c8d4c") + (property "Reference" "C12" + (at 135.89 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10uF 50V" + (at 135.89 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 140.0048 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 140.97 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 140.97 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C13585" + (at 140.97 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C106K4PACTU" + (at 140.97 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b1c7534c-1054-478d-a8b8-0833730e3e8b") + ) + (pin "1" + (uuid "d670bb65-4197-40a4-902f-e4b1cf461c0c") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C12") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 234.95 176.53 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "daa0a771-8031-4197-9813-0123fb8e8e35") + (property "Reference" "C31" + (at 237.49 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 238.76 177.8 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 235.9152 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 234.95 176.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 234.95 176.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 234.95 176.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 234.95 176.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "089f36a7-75e2-40cc-b462-ce9132e0fe45") + ) + (pin "1" + (uuid "09b61c0b-02e2-4e2e-ad7f-a247f3ca74d9") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C31") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 214.63 220.98 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "dada0933-3645-4ff8-a106-f85b8e3ebd22") + (property "Reference" "TP8" + (at 217.932 216.2007 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "TestPoint" + (at 217.932 218.6249 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 214.63 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 214.63 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 214.63 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 214.63 220.98 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "61e1dae2-1a73-4cf0-b0f2-b0fca1a9ce43") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 138.43 137.16 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "dadccb5a-70ed-446c-b44f-3c63a517a5d2") + (property "Reference" "#PWR087" + (at 138.43 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 142.24 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 138.43 137.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 138.43 137.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 138.43 137.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "dfe09d94-cb9d-450a-bfd5-cbc63097115a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR087") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 368.3 214.63 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "db621c88-864c-4856-8718-4a63943f7b2a") + (property "Reference" "C54" + (at 375.92 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10nF 50V" + (at 379.73 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 369.2652 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 368.3 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 368.3 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1846" + (at 368.3 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C103K5RAC7210" + (at 368.3 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ebe5742e-a0a2-4b17-bdc6-b0d31db5a09c") + ) + (pin "1" + (uuid "1bfd555f-a625-47a6-acc2-26885eff493f") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C54") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 281.94 163.83 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "dbbfead1-b859-4ff7-9640-24fdb8224fd5") + (property "Reference" "C34" + (at 285.75 161.29 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.2uF 50V" + (at 292.1 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 282.9052 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 281.94 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 281.94 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1857" + (at 281.94 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "12065C204KAT4A" + (at 281.94 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f532ab03-22ab-4df0-9d2b-dd64e314450b") + ) + (pin "1" + (uuid "cf019267-d89f-4d65-a026-24de0494faec") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C34") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 243.84 41.91 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "dcf3d7ed-0a34-4fe2-b67a-7a5f225cb230") + (property "Reference" "C2" + (at 242.6279 38.989 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1uF 50V" + (at 245.0521 38.989 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 240.03 42.8752 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 243.84 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 243.84 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1848" + (at 243.84 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CL31B105KBHNNNE" + (at 243.84 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c9783667-af08-4dee-bffe-4f481d837bb2") + ) + (pin "1" + (uuid "2977b2af-ba41-4b0c-8fd4-cb855f82c7ca") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 113.03 226.06 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "def4a76e-7c98-4860-bf6d-7f340e558711") + (property "Reference" "#PWR064" + (at 113.03 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 112.014 230.632 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 113.03 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 113.03 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 113.03 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "95cddf3b-8b8a-476d-b6e1-f4b0330f8ef6") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR064") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 134.62 250.19 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "dff7c554-8dcc-4c0a-830a-3baa1fd2eeb4") + (property "Reference" "R57" + (at 134.62 245.0297 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "330R" + (at 134.62 247.4539 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 134.62 248.412 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 134.62 250.19 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 134.62 250.19 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17930" + (at 134.62 250.19 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-3300ELF" + (at 134.62 250.19 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1608d832-dbd5-401f-a144-c40dd6526570") + ) + (pin "1" + (uuid "10b36334-9b31-4a64-8da7-f2d89dada818") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R57") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 297.18 175.26 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e05af967-e093-4b0a-ba3e-7015cdfa7ca8") + (property "Reference" "R33" + (at 297.18 170.0997 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "49R9 1%" + (at 297.18 172.5239 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 297.18 177.038 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 297.18 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 297.18 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C2984401" + (at 297.18 175.26 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CRCW120649R9FKEAC" + (at 297.18 175.26 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "26d18810-6108-4ba6-a174-3088643c4390") + ) + (pin "1" + (uuid "a91e8241-c74f-4b97-9bb7-450d197b8886") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R33") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 281.94 182.88 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e090b4ac-6b94-4572-8e94-70b8cb0f62bc") + (property "Reference" "#PWR049" + (at 281.94 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 279.4 184.15 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 281.94 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 281.94 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 281.94 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "13638495-f493-4250-8b85-4e2cf066ab22") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR049") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 340.36 236.22 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e1adddd0-69d7-44da-9f6a-69a3098c21b2") + (property "Reference" "C60" + (at 344.17 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10uF 50V" + (at 345.44 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 341.3252 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 340.36 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 340.36 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C13585" + (at 340.36 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C106K4PACTU" + (at 340.36 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3656f2ae-41c7-4a03-ba54-1c190adf8d98") + ) + (pin "1" + (uuid "9f7dacaa-f646-49ee-a967-732ec5665a5e") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C60") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 314.96 44.45 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e220e02e-32dc-4eb7-8b63-02caa2bfbede") + (property "Reference" "R6" + (at 314.96 39.2897 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "5k1" + (at 314.96 41.7139 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 314.96 46.228 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 314.96 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 314.96 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C26033" + (at 314.96 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "ERJ-8ENF5101V" + (at 314.96 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a91fc436-b5e3-4641-a193-c39f123edc9a") + ) + (pin "1" + (uuid "24dc465c-cacf-4b22-9fc3-8bfb946efa5c") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 78.74 31.75 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e2d8cdab-7303-40ad-b7cb-d50a49fbb54e") + (property "Reference" "#PWR08" + (at 78.74 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 78.74 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 78.74 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 78.74 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 78.74 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c983237c-14ef-4435-abfb-f6e097cde4d7") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR08") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 217.17 243.84 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e3114bbc-e60d-404f-ab31-b66bcd40332f") + (property "Reference" "#PWR059" + (at 217.17 247.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 220.98 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 217.17 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 217.17 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 217.17 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b0160bbf-6289-44a6-bc50-4b4db4490be1") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR059") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 146.05 60.96 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e5320d15-16ac-447e-8ace-a75a472d3276") + (property "Reference" "#PWR098" + (at 146.05 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 146.05 65.0931 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 146.05 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 146.05 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 146.05 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5ffadab5-e282-4ebc-b96f-48963a02f1ba") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR098") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 147.32 209.55 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e7520ce3-ed83-447d-b463-ba3f313f3814") + (property "Reference" "#PWR071" + (at 147.32 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 144.78 210.82 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 147.32 209.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 147.32 209.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 147.32 209.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "d9d8aadd-2002-4298-acdb-165798cffa21") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR071") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Interface_Expansion:MCP23017_SO") + (at 76.2 149.86 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e8d4f36d-250e-4ece-b6eb-55f5f794fcef") + (property "Reference" "U21" + (at 78.3941 122.8557 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MCP23017_SO" + (at 78.3941 125.2799 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_SO:SOIC-28W_7.5x17.9mm_P1.27mm" + (at 81.28 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "http://ww1.microchip.com/downloads/en/DeviceDoc/20001952C.pdf" + (at 81.28 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "" + (at 76.2 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C47023" + (at 76.2 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "MCP23017-E/SO" + (at 76.2 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "11" + (uuid "36c0ce86-55e2-4fce-8047-c521f48148a2") + ) + (pin "2" + (uuid "c9849b6d-ab68-4d36-a7f8-8c83139c3970") + ) + (pin "20" + (uuid "2a397fe0-a314-4014-bb48-4b64f6594396") + ) + (pin "8" + (uuid "957b96b4-ea38-49ec-af9e-f23fc16a4e1d") + ) + (pin "6" + (uuid "c695b995-66d4-42be-bce6-cda42d744805") + ) + (pin "14" + (uuid "e64bd861-c2e9-49ab-a62b-7ed8c6865219") + ) + (pin "12" + (uuid "816dc487-c785-4797-a333-41badecf26cd") + ) + (pin "10" + (uuid "49de937c-bcba-4c71-a7a1-3846d8d0cf5d") + ) + (pin "23" + (uuid "7136e7db-c8c6-4ee7-a3d9-6a1d97c35a04") + ) + (pin "1" + (uuid "51ccf59f-fc2c-4328-9e0d-3269a07fba28") + ) + (pin "13" + (uuid "73336566-2f3d-4c0e-9fc4-4d5efc37c78f") + ) + (pin "15" + (uuid "37ea89ea-f137-4726-9df7-c3d7ed8ce1d3") + ) + (pin "19" + (uuid "4aeb791e-6bed-473b-a132-9ffce523e07f") + ) + (pin "24" + (uuid "0a3f2461-ae6c-4188-8be4-285822f3b125") + ) + (pin "4" + (uuid "b0c07c42-5032-402a-bf04-b7072f96ae3d") + ) + (pin "25" + (uuid "22834713-daed-46a1-b445-08997bc7d794") + ) + (pin "9" + (uuid "84be2e88-67f6-46ba-9867-e559ccabc87d") + ) + (pin "27" + (uuid "25e4c289-7707-407b-ae57-447b0df56afc") + ) + (pin "26" + (uuid "49112000-fc19-44e6-8edd-12125b005383") + ) + (pin "21" + (uuid "a8b66304-c3e9-41bc-8199-ff02f56ada97") + ) + (pin "7" + (uuid "9343d10a-f6ea-4e03-b2f1-7d872fb36c22") + ) + (pin "22" + (uuid "bba10463-3099-49f3-9373-4f7914799677") + ) + (pin "16" + (uuid "02160482-504d-4d18-b656-fd26cf864631") + ) + (pin "5" + (uuid "6d322584-086c-4e54-9f85-673d81fa417f") + ) + (pin "28" + (uuid "566e1612-1a8d-45e6-94b7-f78b4ddba647") + ) + (pin "17" + (uuid "4117a529-d0f4-423b-971e-d068024f3148") + ) + (pin "18" + (uuid "52ae4bf3-1589-41b3-82ac-b69addb58f0c") + ) + (pin "3" + (uuid "864b0cb2-d86d-4cac-9d26-1a1614ec23b7") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U21") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 287.02 80.01 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e95e9a0a-5932-4561-9cdd-6fbf1887961a") + (property "Reference" "C25" + (at 288.036 77.978 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 281.432 82.804 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 286.0548 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 287.02 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 287.02 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 287.02 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 287.02 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "2018c1e7-94da-4486-bdf7-b0731dc2eec6") + ) + (pin "1" + (uuid "d7b45827-a9d9-4d6b-bd6c-4ee65bf07dad") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C25") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 281.94 198.12 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ea5ca553-6c2c-40a0-b0c0-f379e0450739") + (property "Reference" "C44" + (at 285.75 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.2uF 50V" + (at 292.1 200.66 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 282.9052 201.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 281.94 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 281.94 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1857" + (at 281.94 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "12065C204KAT4A" + (at 281.94 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "32e1a030-e7f2-4668-867a-3d4a14a346a4") + ) + (pin "1" + (uuid "f8ba71d2-5405-46a2-8a3a-615a17151da0") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C44") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 161.29 220.98 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "eae97adc-08fe-4d87-83d3-d54ca09a3d79") + (property "Reference" "C43" + (at 167.64 219.71 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.1uF 50V" + (at 165.1 217.17 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 157.48 221.9452 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 161.29 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 161.29 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C24497" + (at 161.29 220.98 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C104K5RACTU" + (at 161.29 220.98 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5878c8d8-593c-4c85-a02b-c0eb0d9b1023") + ) + (pin "1" + (uuid "2a8786af-be99-419d-b070-ad54465f7433") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C43") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 368.3 179.07 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "eb9275c3-76e9-4a1c-bfc2-2b9443afb621") + (property "Reference" "C37" + (at 375.92 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10nF 50V" + (at 379.73 180.34 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 369.2652 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 368.3 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 368.3 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1846" + (at 368.3 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C103K5RAC7210" + (at 368.3 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "9c1dc0e7-6b9c-48e2-9956-4be1d28b37ec") + ) + (pin "1" + (uuid "b00cdef1-9064-404e-a5c1-520cf77a307e") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C37") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:74CBTLV3253PWRE4") + (at 248.92 195.58 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "eb97c7e1-04f6-4fce-9845-c066b45f3620") + (property "Reference" "U4" + (at 251.1141 173.6557 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "74CBTLV3253DR" + (at 240.03 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_SO:SOIC-16_3.9x9.9mm_P1.27mm" + (at 250.19 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74cbtlv3253.pdf" + (at 248.92 216.535 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 248.92 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C543079" + (at 248.92 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "SN74CBTLV3253DR" + (at 248.92 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "13" + (uuid "2898c71f-936f-4721-b00d-5a7e6fbc41c0") + ) + (pin "8" + (uuid "e03ac9b6-12d2-4682-bbed-e33078d80265") + ) + (pin "5" + (uuid "5d076366-de60-4ab0-8ff0-3ed4e77582e5") + ) + (pin "11" + (uuid "8cbe3e57-4c61-4a2a-87cc-b39b47bf8aa4") + ) + (pin "1" + (uuid "8b3748c3-062a-4468-a4eb-4403f06183d8") + ) + (pin "7" + (uuid "e399d336-63c2-4130-8520-7932527a4f37") + ) + (pin "12" + (uuid "90e9a52b-15cf-43fb-8f12-2bd83cf234de") + ) + (pin "6" + (uuid "8a86d0c7-138d-4794-9823-f46b256d0d95") + ) + (pin "9" + (uuid "61d74313-f2d6-42c2-8f3b-75197fcc0c44") + ) + (pin "3" + (uuid "2816cf9b-fd15-4f0e-9e59-f464e60b7f7d") + ) + (pin "10" + (uuid "c80181c6-d673-4e29-8e46-5d7623260b2f") + ) + (pin "15" + (uuid "df3b861e-2c54-42db-bd50-af9dc8258b24") + ) + (pin "2" + (uuid "08f697e5-49d3-46ff-aeb3-966a81139421") + ) + (pin "14" + (uuid "3c8e9c97-ceeb-4dfd-8bad-ed055c77bb01") + ) + (pin "4" + (uuid "38fbba16-a1f2-4e70-ae68-078cc3e82d57") + ) + (pin "16" + (uuid "9861c74f-f376-4a5d-a35b-60f1a811c1b7") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 326.39 67.31 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ebf208f8-00bd-4934-9a5e-4bf3ff78c0eb") + (property "Reference" "#PWR038" + (at 326.39 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 328.93 68.58 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 326.39 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 326.39 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 326.39 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "35f05dd2-7159-4e34-a427-897221199f22") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR038") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 139.7 241.3 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ec34d6d2-9e4f-43c4-8638-a4b3f2ddc7d1") + (property "Reference" "L10" + (at 139.7 245.9496 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1.5uH" + (at 139.7 243.5254 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 139.7 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 139.7 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 139.7 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C395022" + (at 139.7 241.3 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "LQM31PN1R5M00L" + (at 139.7 241.3 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "df57f313-2fd6-4c80-beb4-acb443c25fa2") + ) + (pin "2" + (uuid "8f5f05ef-886a-41b8-87f5-20cfcf73c58a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 137.16 38.1 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "ed5dee6c-9f5c-4874-8b38-e5aa9b1a5923") + (property "Reference" "G4" + (at 138.43 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 137.16 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 142.24 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 142.24 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 137.16 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 137.16 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7a6b5e65-5aba-4351-abe6-147c3e91dd22") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "G4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 351.79 198.12 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "eda242cc-c9c2-41f8-b445-a04b2f8b53b7") + (property "Reference" "C46" + (at 346.71 199.39 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2.2nF 50V" + (at 345.44 201.93 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 355.6 199.0852 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 351.79 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 351.79 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C326631" + (at 351.79 198.12 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "GRM3195C1H222JA01D" + (at 351.79 198.12 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "59801cbb-d824-457d-af42-8bb2bf55a0bc") + ) + (pin "1" + (uuid "c20cac89-1784-4c73-89b5-572ca96b305d") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C46") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 281.94 215.9 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ee0119e5-c026-41f4-9528-5781b696a7d1") + (property "Reference" "C50" + (at 285.75 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "0.2uF 50V" + (at 292.1 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 282.9052 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 281.94 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 281.94 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1857" + (at 281.94 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "12065C204KAT4A" + (at 281.94 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "cb04f9a7-1d75-4b11-b011-3e096f12b8d5") + ) + (pin "1" + (uuid "f7f01a35-3d54-4208-982a-0e076a1b5e2d") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C50") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 243.84 90.17 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "efb7fcf8-8dd8-411a-a759-9534c411e1fc") + (property "Reference" "C15" + (at 242.6279 87.249 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1uF 50V" + (at 245.0521 87.249 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 240.03 91.1352 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 243.84 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 243.84 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1848" + (at 243.84 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CL31B105KBHNNNE" + (at 243.84 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5b436df4-db7b-47ec-a24b-0db776290256") + ) + (pin "1" + (uuid "3f59cc6e-656f-4d2d-acc7-834a38e1bd91") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 139.7 55.88 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "f0a0dbef-e94b-4cbc-979a-04e93ac10be5") + (property "Reference" "G2" + (at 135.89 53.34 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "TestPoint" + (at 142.24 57.15 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 139.7 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 139.7 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 139.7 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "" + (at 139.7 55.88 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "9be1fbaa-503f-47e4-9b27-772fd008c9ef") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "G2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 256.54 95.25 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f0bb27c2-3ef0-49c1-bc1d-2dd84178b812") + (property "Reference" "R22" + (at 256.54 100.4103 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100R" + (at 256.54 97.9861 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 256.54 93.472 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 256.54 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 256.54 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17901" + (at 256.54 95.25 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1000ELF" + (at 256.54 95.25 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3e9f528c-6507-4ee4-ae25-76c90c3a1f6d") + ) + (pin "1" + (uuid "d26bf84b-6e11-4de2-b679-902bcdbb0006") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R22") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 336.55 245.11 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f52996e5-a9f3-4c11-bfa2-ec0a4445f9b8") + (property "Reference" "#PWR047" + (at 336.55 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 334.01 246.38 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 336.55 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 336.55 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 336.55 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "11240f50-9976-4e07-b34c-c35f228c48b8") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR047") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 76.2 118.11 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f6f0ac24-69c8-4f8a-87c1-64a68cf3434b") + (property "Reference" "#PWR092" + (at 76.2 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 72.39 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 76.2 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 76.2 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 76.2 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "416117cc-8670-44a1-ad9e-6d8fc1208c28") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR092") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 175.26 208.28 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f72438df-2fb4-4cc4-a953-a9c0de427a4a") + (property "Reference" "#PWR077" + (at 175.26 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 172.72 209.55 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 175.26 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 175.26 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 175.26 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3e8a95d1-1fbd-46b5-9661-20918a3c6f68") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR077") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Amplifier_Operational:MC33078") + (at 347.98 172.72 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f7325f83-a118-458c-8b74-f04390b81633") + (property "Reference" "U6" + (at 347.98 181.9443 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MC33078" + (at 347.98 179.5201 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 347.98 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.com/pub/Collateral/MC33078-D.PDF" + (at 347.98 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 347.98 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C2057560" + (at 347.98 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "MC33078DR" + (at 347.98 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b08a0fe3-0c2d-49cc-89ed-7b8b972917ad") + ) + (pin "4" + (uuid "044156db-f394-4fe3-8e56-8a68229a60b2") + ) + (pin "7" + (uuid "ddd1dc7f-e48c-4be9-84bb-56f54c65b7fb") + ) + (pin "8" + (uuid "1ddd0488-1a70-4666-b876-c65e3429cb82") + ) + (pin "6" + (uuid "d0f5dd9e-c737-49ff-a5d0-900ccf6ad261") + ) + (pin "5" + (uuid "278f4a99-f32d-487d-9bed-3db9ca5316d9") + ) + (pin "3" + (uuid "f82c28e7-e51f-431d-9d44-61e592fc5612") + ) + (pin "2" + (uuid "7060689d-235c-45e2-8cff-1ab4e5227908") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Amplifier_Operational:MC33078") + (at 332.74 41.91 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f85b7038-4c50-4954-9ad7-81fcfda25615") + (property "Reference" "U107" + (at 332.74 51.1343 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "OPA2209" + (at 332.74 48.7101 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 332.74 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/opa2209.pdf" + (at 332.74 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 332.74 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C2057330" + (at 332.74 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "OPA2209AIDR" + (at 332.74 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "cb9d96e0-16e2-4c49-ba9e-6fbc7fecf925") + ) + (pin "6" + (uuid "54ee0ecc-e626-4a25-9e4a-e46b92559c5d") + ) + (pin "3" + (uuid "afdd1e38-2469-483d-a93e-a88cd981d051") + ) + (pin "4" + (uuid "a81a1a81-8f0f-4ad8-a30e-188050bb57b1") + ) + (pin "8" + (uuid "504c6d13-f351-4f9d-8cc7-d29f1899f6a8") + ) + (pin "2" + (uuid "40c07fc5-733e-4598-85f0-5c69fca669fe") + ) + (pin "7" + (uuid "f0ff8adc-5fbe-473e-a802-e38e5f9c3da9") + ) + (pin "1" + (uuid "2ef09dcb-ad12-46f7-a336-f426be899087") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U107") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 143.51 78.74 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f8e67bcb-6681-4f1d-a2c8-4e014a73bc38") + (property "Reference" "L7" + (at 140.208 76.454 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "FB" + (at 143.51 76.5145 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 143.51 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 143.51 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 143.51 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C74486" + (at 143.51 78.74 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "HZ1206E601R-10" + (at 143.51 78.74 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7478e6b6-0396-4496-8b63-42ba057b802d") + ) + (pin "2" + (uuid "f0eb2769-855e-45ba-9947-8c2e8754a7b1") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 130.81 245.11 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f9a93493-5bee-4f13-b780-3cee86d41197") + (property "Reference" "R54" + (at 125.6497 245.11 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100R" + (at 128.0739 245.11 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 129.032 245.11 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 130.81 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 130.81 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17901" + (at 130.81 245.11 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1000ELF" + (at 130.81 245.11 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "fcf359c3-f695-4025-a0a6-602f467ac739") + ) + (pin "1" + (uuid "7577b93a-4d48-4fe9-b5e5-5fdb7b217c88") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R54") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Transformer:ADT1-1") + (at 55.88 97.79 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fb0e5f9f-ce13-459f-b823-9fcfa432e308") + (property "Reference" "TR1" + (at 55.88 106.9635 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "ADT1-1" + (at 55.88 104.5393 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "RF_Mini-Circuits:Mini-Circuits_CD542_H2.84mm" + (at 55.88 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.minicircuits.com/pdfs/ADT1-1+.pdf" + (at 55.88 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 55.88 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C2683432" + (at 55.88 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "ADT1-1+" + (at 55.88 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "6" + (uuid "d85dcd14-be97-44b5-997a-2611a93605a0") + ) + (pin "1" + (uuid "d67cf125-1f2e-402e-8c83-50868e658df5") + ) + (pin "3" + (uuid "569690e9-d7b3-4439-89e0-48ea1ca44983") + ) + (pin "4" + (uuid "7fadee16-fddc-43c7-9326-2c41c42e919d") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TR1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 111.76 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "fb5cfb45-1841-4469-a7a0-95acb8eb967d") + (property "Reference" "#PWR013" + (at 111.76 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 111.76 105.7331 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 111.76 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 111.76 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 111.76 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0d005e7e-280d-46d9-99ce-c986b8e4a06e") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR013") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 92.71 125.73 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fb8563d4-92ba-46b3-a5c8-68c2ba5c389d") + (property "Reference" "#PWR091" + (at 92.71 132.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 95.25 127 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 92.71 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 92.71 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 92.71 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "85a57e60-c9d5-44b4-9717-d8008a0c5bd7") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR091") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 210.82 147.32 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fb8a2b38-3fa2-40ec-8405-143bdd3a6b4e") + (property "Reference" "#PWR083" + (at 210.82 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 213.36 148.59 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 210.82 147.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 210.82 147.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 210.82 147.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "13f24da8-0ae0-445c-97a6-84e5dbe7597e") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR083") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 198.12 168.91 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "fbcf09a2-da86-476a-b4c7-49e47e671b0c") + (property "Reference" "#PWR058" + (at 198.12 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 198.12 173.0431 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 198.12 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 198.12 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 198.12 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "521b8392-4bf5-44f5-945e-4a9e7d2c0940") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR058") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 325.12 165.1 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "fbf4f2d6-fe27-44b7-8dc3-25021312e655") + (property "Reference" "R29" + (at 325.12 159.9397 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10k 1%" + (at 325.12 162.3639 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 325.12 166.878 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 325.12 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 325.12 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C17902" + (at 325.12 165.1 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CR1206-FX-1002ELF" + (at 325.12 165.1 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c84b25db-5f98-4d3f-9dd5-8910d99df7dd") + ) + (pin "1" + (uuid "c1f2d2b3-4463-47b6-8d89-52acbafa884f") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R29") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 69.85 88.9 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "fc10910d-fc5d-4497-a5af-5ecefa3a0bd6") + (property "Reference" "#PWR04" + (at 69.85 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 69.85 93.0331 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 69.85 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 69.85 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 69.85 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ce197a7b-f925-4753-a849-4ccdca2afd03") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR04") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 322.58 96.52 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fc56e61b-8ffc-4a76-87f1-79dbcde2a221") + (property "Reference" "C19" + (at 319.659 95.3079 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "180pF 50V" + (at 319.659 97.7321 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 323.5452 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 322.58 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 322.58 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C527293" + (at 322.58 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C181J5GAC7800" + (at 322.58 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a3f78a81-42aa-4472-9dd2-f3ce73286662") + ) + (pin "1" + (uuid "43b5f722-6dda-4e7c-99c0-9e293867f5f1") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C19") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 295.91 234.95 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fcc70075-2049-4608-b1a9-3654f81a7426") + (property "Reference" "#PWR044" + (at 295.91 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 293.37 236.22 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 295.91 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 295.91 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 295.91 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4ea5b934-891f-44cf-b788-8ca9e8b87661") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR044") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 147.32 96.52 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "fcc8166c-1f63-45e0-af28-0b4b752370ec") + (property "Reference" "L4" + (at 148.5873 95.3079 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "1.5uH" + (at 148.5873 97.7321 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 147.32 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 147.32 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 147.32 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C395022" + (at 147.32 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "LQM31PN1R5M00L" + (at 147.32 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0425dc9a-b762-40dd-9239-d2a85af03b0c") + ) + (pin "2" + (uuid "65156a50-535f-4dba-8121-a5e9fd81bc6a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 243.84 46.99 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fe164ae0-dcca-4349-802d-5ddc25918d2e") + (property "Reference" "C9" + (at 242.6279 49.911 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1uF 50V" + (at 245.0521 49.911 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 240.03 46.0248 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 243.84 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 243.84 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1848" + (at 243.84 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "CL31B105KBHNNNE" + (at 243.84 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "17fdbba6-8724-43ca-9831-fac3eb20924e") + ) + (pin "1" + (uuid "fe38ca9d-1d24-414f-ab84-5d8ff4a2ad06") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 248.92 54.61 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ff464d46-eb32-4f6a-9f52-c013f7a3040e") + (property "Reference" "C10" + (at 251.841 53.3979 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10nF 50V" + (at 251.841 55.8221 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 247.9548 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 248.92 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 248.92 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "LCSC" "C1846" + (at 248.92 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PN" "C1206C103K5RAC7210" + (at 248.92 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "882a7e0c-1edb-422e-8b90-257176b645b0") + ) + (pin "1" + (uuid "cebbca19-d6a2-4398-9ecb-e19b92776e61") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 185.42 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ffb553db-6895-4357-8ca7-4cd85176c9d2") + (property "Reference" "#PWR018" + (at 185.42 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 185.42 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 185.42 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 185.42 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 185.42 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ae287de2-22fd-4678-882f-6f8626a4558d") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR018") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 297.18 66.04 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ffd62074-7491-475d-966d-58c9c2b14db3") + (property "Reference" "#PWR030" + (at 297.18 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 297.18 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 297.18 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 297.18 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 297.18 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "a1a53a48-1ed6-45aa-9129-55c276e85a3a") + ) + (instances + (project "T41-RF-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR030") + (unit 1) + ) + ) + ) + ) + (sheet_instances + (path "/" + (page "1") + ) + ) + (embedded_fonts no) +) diff --git a/wiki/raw/T41-exciter-filter-board.kicad_sch b/wiki/raw/T41-exciter-filter-board.kicad_sch new file mode 100644 index 0000000..395a770 --- /dev/null +++ b/wiki/raw/T41-exciter-filter-board.kicad_sch @@ -0,0 +1,39127 @@ +(kicad_sch + (version 20231120) + (generator "eeschema") + (generator_version "8.0") + (uuid "56a77fe5-f7a5-414c-a0f7-d659071572ee") + (paper "A3") + (title_block + (title "T41 Exciter Filter Board") + (date "2024-08-25") + (rev "V 012.06") + (comment 1 " KiCad version by Oliver King KI3P") + (comment 2 "By Al Peter AC8GY & Bill Schmidt K9HZ") + ) + (lib_symbols + (symbol "74xGxx:74LVC1G04" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 0 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "74LVC1G04" + (at 5.08 -7.62 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" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Single NOT Gate, Low-Voltage CMOS" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Single Gate NOT LVC CMOS" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOT?23* Texas?R-PDSO-G5?DCK* Texas?R-PDSO-N5?DRL* Texas?X2SON*0.8x0.8mm*P0.48mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "74LVC1G04_0_1" + (polyline + (pts + (xy -7.62 6.35) (xy -7.62 -6.35) (xy 5.08 0) (xy -7.62 6.35) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "74LVC1G04_1_1" + (pin input line + (at -15.24 0 0) + (length 7.62) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -5.08 -10.16 90) + (length 5.08) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output inverted + (at 12.7 0 180) + (length 7.62) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -5.08 10.16 270) + (length 5.08) + (name "VCC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Connector:Conn_Coaxial" + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0.254 3.048 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_Coaxial" + (at 2.921 0 90) + (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" "coaxial connector (BNC, SMA, SMB, SMC, Cinch/RCA, LEMO, ...)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "BNC SMA SMB SMC LEMO coaxial connector CINCH RCA MCX MMCX U.FL UMRF" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "*BNC* *SMA* *SMB* *SMC* *Cinch* *LEMO* *UMRF* *MCX* *U.FL*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_Coaxial_0_1" + (arc + (start -1.778 -0.508) + (mid 0.2311 -1.8066) + (end 1.778 0) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -2.54 0) (xy -0.508 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -2.54) (xy 0 -1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 0 0) + (radius 0.508) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 1.778 0) + (mid 0.2099 1.8101) + (end -1.778 0.508) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Conn_Coaxial_1_1" + (pin passive line + (at -5.08 0 0) + (length 2.54) + (name "In" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -5.08 90) + (length 2.54) + (name "Ext" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Connector:Screw_Terminal_01x02" + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Screw_Terminal_01x02" + (at 0 -5.08 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" "Generic screw terminal, single row, 01x02, script generated (kicad-library-utils/schlib/autogen/connector/)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "screw terminal" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TerminalBlock*:*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Screw_Terminal_01x02_1_1" + (rectangle + (start -1.27 1.27) + (end 1.27 -3.81) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (circle + (center 0 -2.54) + (radius 0.635) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.5334 -2.2098) (xy 0.3302 -3.048) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.5334 0.3302) (xy 0.3302 -0.508) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.3556 -2.032) (xy 0.508 -2.8702) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.3556 0.508) (xy 0.508 -0.3302) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 0 0) + (radius 0.635) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Connector:TestPoint" + (pin_numbers hide) + (pin_names + (offset 0.762) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "TP" + (at 0 6.858 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "TestPoint" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 5.08 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 5.08 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "test point" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "test point tp" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Pin* Test*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "TestPoint_0_1" + (circle + (center 0 3.302) + (radius 0.762) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "TestPoint_1_1" + (pin passive line + (at 0 0 90) + (length 2.54) + (name "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Device:C" + (pin_numbers hide) + (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) + ) + ) + ) + ) + ) + ) + (symbol "Device:C_Polarized" + (pin_numbers hide) + (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_Polarized" + (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" "Polarized 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" "CP_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "C_Polarized_0_1" + (rectangle + (start -2.286 0.508) + (end 2.286 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.778 2.286) (xy -0.762 2.286) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 2.794) (xy -1.27 1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 2.286 -0.508) + (end -2.286 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + ) + (symbol "C_Polarized_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) + ) + ) + ) + ) + ) + ) + (symbol "Device:D_Zener" + (pin_numbers hide) + (pin_names + (offset 1.016) hide) + (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_Zener" + (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" "Zener diode" + (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_Zener_0_1" + (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) (xy -0.762 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 "D_Zener_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) + ) + ) + ) + ) + ) + ) + (symbol "Device:L" + (pin_numbers hide) + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "L" + (at -1.27 0 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "L" + (at 1.905 0 90) + (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" "Inductor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "inductor choke coil reactor magnetic" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Choke_* *Coil* Inductor_* L_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "L_0_1" + (arc + (start 0 -2.54) + (mid 0.6323 -1.905) + (end 0 -1.27) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -1.27) + (mid 0.6323 -0.635) + (end 0 0) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 0) + (mid 0.6323 0.635) + (end 0 1.27) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 1.27) + (mid 0.6323 1.905) + (end 0 2.54) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "L_1_1" + (pin passive line + (at 0 3.81 270) + (length 1.27) + (name "1" + (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 "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Device:R" + (pin_numbers hide) + (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) + ) + ) + ) + ) + ) + ) + (symbol "Interface_Expansion:MCP23017_SO" + (pin_names + (offset 1.016) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -11.43 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MCP23017_SO" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-28W_7.5x17.9mm_P1.27mm" + (at 5.08 -25.4 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "http://ww1.microchip.com/downloads/en/DeviceDoc/20001952C.pdf" + (at 5.08 -27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "16-bit I/O expander, I2C, interrupts, w pull-ups, SOIC-28" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "I2C parallel port expander" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOIC*7.5x17.9mm*P1.27mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MCP23017_SO_0_1" + (rectangle + (start -12.7 22.86) + (end 12.7 -22.86) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "MCP23017_SO_1_1" + (pin bidirectional line + (at 17.78 20.32 180) + (length 5.08) + (name "GPB0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -27.94 90) + (length 5.08) + (name "VSS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at -12.7 15.24 0) + (length 5.08) hide + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -17.78 17.78 0) + (length 5.08) + (name "SCK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -17.78 20.32 0) + (length 5.08) + (name "SDA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at -12.7 12.7 0) + (length 5.08) hide + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -17.78 -20.32 0) + (length 5.08) + (name "A0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -17.78 -17.78 0) + (length 5.08) + (name "A1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -17.78 -15.24 0) + (length 5.08) + (name "A2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -17.78 -2.54 0) + (length 5.08) + (name "~{RESET}" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin tri_state line + (at -17.78 5.08 0) + (length 5.08) + (name "INTB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "19" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 17.78 180) + (length 5.08) + (name "GPB1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin tri_state line + (at -17.78 2.54 0) + (length 5.08) + (name "INTA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "20" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -2.54 180) + (length 5.08) + (name "GPA0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "21" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -5.08 180) + (length 5.08) + (name "GPA1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "22" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -7.62 180) + (length 5.08) + (name "GPA2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "23" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -10.16 180) + (length 5.08) + (name "GPA3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "24" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -12.7 180) + (length 5.08) + (name "GPA4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "25" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -15.24 180) + (length 5.08) + (name "GPA5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "26" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -17.78 180) + (length 5.08) + (name "GPA6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "27" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -20.32 180) + (length 5.08) + (name "GPA7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "28" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 15.24 180) + (length 5.08) + (name "GPB2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 12.7 180) + (length 5.08) + (name "GPB3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 10.16 180) + (length 5.08) + (name "GPB4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 7.62 180) + (length 5.08) + (name "GPB5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 5.08 180) + (length 5.08) + (name "GPB6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 2.54 180) + (length 5.08) + (name "GPB7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 27.94 270) + (length 5.08) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Jumper:SolderJumper_2_Open" + (pin_names + (offset 0) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "JP" + (at 0 2.032 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SolderJumper_2_Open" + (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" "Solder Jumper, 2-pole, open" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "solder jumper SPST" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SolderJumper*Open*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "SolderJumper_2_Open_0_1" + (arc + (start -0.254 1.016) + (mid -1.2656 0) + (end -0.254 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -0.254 1.016) + (mid -1.2656 0) + (end -0.254 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy -0.254 1.016) (xy -0.254 -1.016) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.254 1.016) (xy 0.254 -1.016) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0.254 -1.016) + (mid 1.2656 0) + (end 0.254 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0.254 -1.016) + (mid 1.2656 0) + (end 0.254 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + ) + (symbol "SolderJumper_2_Open_1_1" + (pin passive line + (at -3.81 0 0) + (length 2.54) + (name "A" + (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 "B" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Mechanical:MountingHole_Pad" + (pin_numbers hide) + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "H" + (at 0 6.35 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MountingHole_Pad" + (at 0 4.445 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" "Mounting Hole with connection" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "mounting hole" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "MountingHole*Pad*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MountingHole_Pad_0_1" + (circle + (center 0 1.27) + (radius 1.27) + (stroke + (width 1.27) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "MountingHole_Pad_1_1" + (pin input line + (at 0 -2.54 90) + (length 2.54) + (name "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "RF_Switch:MASWSS0179" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -7.62 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 3.81 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_SMD:SOT-23-6" + (at 0 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 0 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Macom GaAs RF SPDT switch, DC-2GHz, 0.6/22dB loss/isolation, SOT-26 (SOT-23-6)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "RF SWITCH SPDT" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOT?23*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MASWSS0179_0_1" + (circle + (center -3.048 2.54) + (radius 0.2794) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -3.175 -3.81) (xy -2.54 -3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -2.794 2.54) (xy 2.921 5.207) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.905 -3.81) (xy -1.27 -3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.635 -3.81) (xy 0 -3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -3.175) (xy 0 -2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -1.905) (xy 0 -1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -0.635) (xy 0 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 0.635) (xy 0 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 1.905) (xy 0 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 3.175) (xy 0 3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 3.048 0) + (radius 0.2794) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 3.175 5.207) + (radius 0.2794) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 7.62 -7.62) + (end -7.62 6.35) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "MASWSS0179_1_1" + (pin passive line + (at 10.16 5.08 180) + (length 2.54) + (name "RF1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 2.54 -10.16 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 10.16 0 180) + (length 2.54) + (name "RF2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -5.08 0) + (length 2.54) + (name "V2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -10.16 2.54 0) + (length 2.54) + (name "RFC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -2.54 0) + (length 2.54) + (name "V1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Regulator_Linear:LM1117T-3.3" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -3.81 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM1117T-3.3" + (at 0 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Horizontal_TabDown" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/symlink/lm1117.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "800mA Low-Dropout Linear Regulator, 3.3V fixed output, TO-220" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "linear regulator ldo fixed positive" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO?220*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "LM1117T-3.3_0_1" + (rectangle + (start -5.08 -5.08) + (end 5.08 1.905) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "LM1117T-3.3_1_1" + (pin power_in line + (at 0 -7.62 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_out line + (at 7.62 0 180) + (length 2.54) + (name "VO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -7.62 0 0) + (length 2.54) + (name "VI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "T41_Library:IDC_2x5" + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 1.27 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "IDC_2x5" + (at 1.27 -7.62 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" "Generic connector, double row, 02x05, top/bottom pin numbering scheme (row 1: 1...pins_per_row, row2: pins_per_row+1 ... num_pins), script generated (kicad-library-utils/schlib/autogen/connector/)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_2x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "IDC_2x5_1_1" + (rectangle + (start -1.27 -4.953) + (end 0 -5.207) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -2.413) + (end 0 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 1.27) + (end 0 -1.27) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 2.667) + (end 0 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 5.207) + (end 0 4.953) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 6.35) + (end 3.81 -6.35) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (rectangle + (start 3.81 -4.953) + (end 2.54 -5.207) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 -2.413) + (end 2.54 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 0.127) + (end 2.54 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 2.667) + (end 2.54 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 5.207) + (end 2.54 4.953) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 5.08 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 -5.08 180) + (length 3.81) + (name "Pin_10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 5.08 180) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 2.54 180) + (length 3.81) + (name "Pin_4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 0 180) + (length 3.81) + (name "Pin_6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 -2.54 180) + (length 3.81) + (name "Pin_8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -5.08 0) + (length 3.81) + (name "Pin_9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "power:+12V" + (power) + (pin_names + (offset 0) + ) + (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" "+12V" + (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 \"+12V\"" + (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 "+12V_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 0) (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) + ) + ) + ) + (symbol "+12V_1_1" + (pin power_in line + (at 0 0 90) + (length 0) hide + (name "+12V" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "power:+3V3" + (power) + (pin_names + (offset 0) + ) + (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" "+3V3" + (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 \"+3V3\"" + (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 "+3V3_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 0) (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) + ) + ) + ) + (symbol "+3V3_1_1" + (pin power_in line + (at 0 0 90) + (length 0) hide + (name "+3V3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "power:GND" + (power) + (pin_names + (offset 0) + ) + (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) hide + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + ) + (junction + (at 303.53 29.21) + (diameter 0) + (color 0 0 0 0) + (uuid "00d05ef0-cb67-4559-95cf-7470ffc98ea9") + ) + (junction + (at 358.14 101.6) + (diameter 0) + (color 0 0 0 0) + (uuid "01117c16-a013-4465-8539-88db9006c36c") + ) + (junction + (at 158.75 171.45) + (diameter 0) + (color 0 0 0 0) + (uuid "018de083-f4a8-42d8-929e-a623ed69b2b3") + ) + (junction + (at 128.27 204.47) + (diameter 0) + (color 0 0 0 0) + (uuid "025d1833-27ee-4486-82ac-af2fe3022921") + ) + (junction + (at 109.22 74.93) + (diameter 0) + (color 0 0 0 0) + (uuid "03508898-e767-4d4a-808c-b068bb68bb66") + ) + (junction + (at 104.14 60.96) + (diameter 0) + (color 0 0 0 0) + (uuid "044a10e5-b277-43ef-a454-c6676279696f") + ) + (junction + (at 153.67 91.44) + (diameter 0) + (color 0 0 0 0) + (uuid "04c975fb-a948-4ce2-bed9-899dff469848") + ) + (junction + (at 158.75 170.18) + (diameter 0) + (color 0 0 0 0) + (uuid "054d5eab-3e72-4f1b-8042-b8c9b01f603f") + ) + (junction + (at 158.75 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "069968cb-0db4-4474-8c5e-1cc7b934b17c") + ) + (junction + (at 344.17 88.9) + (diameter 0) + (color 0 0 0 0) + (uuid "079e94a4-2fe5-4397-aff3-dbfe14e04f51") + ) + (junction + (at 212.09 146.05) + (diameter 0) + (color 0 0 0 0) + (uuid "0835c126-447c-4e20-82e6-299e10fd69ee") + ) + (junction + (at 109.22 91.44) + (diameter 0) + (color 0 0 0 0) + (uuid "09ad834e-a214-4759-985a-03e14455401a") + ) + (junction + (at 107.95 138.43) + (diameter 0) + (color 0 0 0 0) + (uuid "0a8a65ff-b26e-47c7-bd44-fc4655003a4b") + ) + (junction + (at 133.35 104.14) + (diameter 0) + (color 0 0 0 0) + (uuid "0aab87d1-53a9-425a-903f-76b632e3773b") + ) + (junction + (at 358.14 71.12) + (diameter 0) + (color 0 0 0 0) + (uuid "0b30293a-5db1-4ed4-964f-3c390a67fcde") + ) + (junction + (at 104.14 74.93) + (diameter 0) + (color 0 0 0 0) + (uuid "0cd57385-bef5-4859-9ac4-c3817818b9e6") + ) + (junction + (at 332.74 63.5) + (diameter 0) + (color 0 0 0 0) + (uuid "1282bde1-d3a7-4d46-91cc-a8014a5763d7") + ) + (junction + (at 128.27 30.48) + (diameter 0) + (color 0 0 0 0) + (uuid "13b8c03d-d458-435d-a641-b03c0ad6008f") + ) + (junction + (at 120.65 204.47) + (diameter 0) + (color 0 0 0 0) + (uuid "1565eb05-23d8-4b1e-950f-adc0d688a798") + ) + (junction + (at 109.22 35.56) + (diameter 0) + (color 0 0 0 0) + (uuid "16e67029-8c41-46f0-8e5a-8da508cd4532") + ) + (junction + (at 107.95 74.93) + (diameter 0) + (color 0 0 0 0) + (uuid "1707b8f2-23d8-4ae7-9632-c41f671f318f") + ) + (junction + (at 303.53 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "1a0f0d12-09c0-4b75-b259-356d823a393a") + ) + (junction + (at 144.78 60.96) + (diameter 0) + (color 0 0 0 0) + (uuid "1af51435-87bb-4b3e-ae5f-71010c772ca1") + ) + (junction + (at 222.25 262.89) + (diameter 0) + (color 0 0 0 0) + (uuid "1b8a4b1a-6ae3-460e-97bd-8b199ba66300") + ) + (junction + (at 109.22 170.18) + (diameter 0) + (color 0 0 0 0) + (uuid "1d6a844a-0c69-452f-a66f-7258edb93341") + ) + (junction + (at 308.61 43.18) + (diameter 0) + (color 0 0 0 0) + (uuid "1e6ebeeb-2d85-4380-bd9f-8fb3ba3719b8") + ) + (junction + (at 120.65 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "1f4df4f0-b5b6-4cca-808d-bdac4afb0e89") + ) + (junction + (at 300.99 215.9) + (diameter 0) + (color 0 0 0 0) + (uuid "22255dbb-9e6e-474c-8ff4-d32ed1c63a37") + ) + (junction + (at 133.35 138.43) + (diameter 0) + (color 0 0 0 0) + (uuid "2228a16c-ac22-48b8-9118-49889ebe824b") + ) + (junction + (at 331.47 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "22b6e045-369d-4f6d-996b-2a195e930478") + ) + (junction + (at 212.09 187.96) + (diameter 0) + (color 0 0 0 0) + (uuid "232d6999-a7eb-4459-99a0-55240cb73301") + ) + (junction + (at 158.75 195.58) + (diameter 0) + (color 0 0 0 0) + (uuid "23babaea-dfff-4036-ae14-29c4f0481ed4") + ) + (junction + (at 153.67 138.43) + (diameter 0) + (color 0 0 0 0) + (uuid "2450c44b-4f62-414c-bdb5-87b69926d398") + ) + (junction + (at 104.14 44.45) + (diameter 0) + (color 0 0 0 0) + (uuid "24cc05a4-3894-488a-ad40-2b9947098829") + ) + (junction + (at 308.61 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "25a67cdb-0f21-4f0a-b51a-d294629e248a") + ) + (junction + (at 133.35 30.48) + (diameter 0) + (color 0 0 0 0) + (uuid "25b69280-859a-4f51-856c-a0e38fb6d0f1") + ) + (junction + (at 327.66 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "25d192af-f199-40d5-9268-1d1f9c443999") + ) + (junction + (at 387.35 245.11) + (diameter 0) + (color 0 0 0 0) + (uuid "26632dd1-cd1e-44c3-a43b-1cd56c248855") + ) + (junction + (at 158.75 30.48) + (diameter 0) + (color 0 0 0 0) + (uuid "26a27677-b9b2-4db6-8303-3fb8de26b668") + ) + (junction + (at 109.22 124.46) + (diameter 0) + (color 0 0 0 0) + (uuid "26dff520-6965-49ec-add8-9a2a36821d0d") + ) + (junction + (at 109.22 138.43) + (diameter 0) + (color 0 0 0 0) + (uuid "28f26be7-1f89-416a-840b-02a4e505c47b") + ) + (junction + (at 320.04 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "299f09d3-0601-4062-b86f-07610263d790") + ) + (junction + (at 109.22 190.5) + (diameter 0) + (color 0 0 0 0) + (uuid "2a77886a-5761-405a-8f6e-e035da2df6e7") + ) + (junction + (at 133.35 129.54) + (diameter 0) + (color 0 0 0 0) + (uuid "2ace26d2-0b72-4eba-a47b-fc83e355ab74") + ) + (junction + (at 158.75 157.48) + (diameter 0) + (color 0 0 0 0) + (uuid "2d58672c-916c-4fa5-942f-d1fcf30b13fa") + ) + (junction + (at 300.99 224.79) + (diameter 0) + (color 0 0 0 0) + (uuid "2dd21ee4-7818-4226-924a-4aa3cec828e2") + ) + (junction + (at 120.65 224.79) + (diameter 0) + (color 0 0 0 0) + (uuid "2e0c8336-3a1f-4583-b598-28bbc4440ae0") + ) + (junction + (at 353.06 29.21) + (diameter 0) + (color 0 0 0 0) + (uuid "2e5b7e5e-2f5e-4e15-8f42-e56605306ccb") + ) + (junction + (at 327.66 88.9) + (diameter 0) + (color 0 0 0 0) + (uuid "2f10abbd-3f8b-42d3-83e3-c79b6866841d") + ) + (junction + (at 53.34 222.25) + (diameter 0) + (color 0 0 0 0) + (uuid "30777071-4827-4e57-99d0-bafd956e798e") + ) + (junction + (at 104.14 30.48) + (diameter 0) + (color 0 0 0 0) + (uuid "31aaa9d8-736e-4376-8915-dc2e4112478f") + ) + (junction + (at 120.65 74.93) + (diameter 0) + (color 0 0 0 0) + (uuid "3359c847-6ff6-48b4-b7b5-f6b79481a04c") + ) + (junction + (at 353.06 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "33bbf278-015f-4ee7-ac17-322edefbc4a9") + ) + (junction + (at 212.09 154.94) + (diameter 0) + (color 0 0 0 0) + (uuid "34c0bdc4-1bd8-44de-a793-9a55a6b96743") + ) + (junction + (at 327.66 102.87) + (diameter 0) + (color 0 0 0 0) + (uuid "357d65d9-a952-4774-bf1c-b7dff9401ccf") + ) + (junction + (at 128.27 91.44) + (diameter 0) + (color 0 0 0 0) + (uuid "357f09d8-ac8d-4c84-b709-1588d6824469") + ) + (junction + (at 157.48 44.45) + (diameter 0) + (color 0 0 0 0) + (uuid "35892413-4448-4e1a-b088-a7fa660833a6") + ) + (junction + (at 358.14 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "35fdbdd1-8e16-4bfe-99a0-9e51dfe21105") + ) + (junction + (at 153.67 190.5) + (diameter 0) + (color 0 0 0 0) + (uuid "3810d3cb-106c-44a5-afcf-4a71fe572b8e") + ) + (junction + (at 332.74 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "381c6cac-256b-472b-aec2-72e4aa16eba1") + ) + (junction + (at 133.35 60.96) + (diameter 0) + (color 0 0 0 0) + (uuid "3890840c-5f93-42fa-8242-5f41f18b18ee") + ) + (junction + (at 326.39 165.1) + (diameter 0) + (color 0 0 0 0) + (uuid "398a6bf2-a15f-4ec4-bb55-4755e99c4142") + ) + (junction + (at 144.78 190.5) + (diameter 0) + (color 0 0 0 0) + (uuid "3bb1a145-a78b-418d-b4da-259db62df470") + ) + (junction + (at 167.64 224.79) + (diameter 0) + (color 0 0 0 0) + (uuid "3bf3075b-931c-40a9-b915-9548c8761d52") + ) + (junction + (at 326.39 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "3c9d1b5a-028c-4576-a3a2-238c10204ca6") + ) + (junction + (at 365.76 182.88) + (diameter 0) + (color 0 0 0 0) + (uuid "3d1db416-7496-4ba9-bbe2-354a8b6e724e") + ) + (junction + (at 152.4 60.96) + (diameter 0) + (color 0 0 0 0) + (uuid "3f5376b3-ec26-448b-bec2-56f5fef931ad") + ) + (junction + (at 119.38 124.46) + (diameter 0) + (color 0 0 0 0) + (uuid "4114e235-2017-448c-9b7c-238e1145e7e0") + ) + (junction + (at 279.4 262.89) + (diameter 0) + (color 0 0 0 0) + (uuid "41b004d8-fb5f-4b9d-ab47-4fe3aae60da5") + ) + (junction + (at 109.22 44.45) + (diameter 0) + (color 0 0 0 0) + (uuid "41c1f889-7877-4970-9b43-0ccade240836") + ) + (junction + (at 290.83 210.82) + (diameter 0) + (color 0 0 0 0) + (uuid "43c6fee4-9d66-4d22-a7db-c77295591116") + ) + (junction + (at 365.76 200.66) + (diameter 0) + (color 0 0 0 0) + (uuid "440acbc9-2def-4e0c-b37b-d81223e8a6f3") + ) + (junction + (at 109.22 104.14) + (diameter 0) + (color 0 0 0 0) + (uuid "4454e311-d0aa-424b-a682-7fcabe1eeda2") + ) + (junction + (at 109.22 30.48) + (diameter 0) + (color 0 0 0 0) + (uuid "44c2cdde-8d69-483e-8c7d-5fbe891789fb") + ) + (junction + (at 133.35 96.52) + (diameter 0) + (color 0 0 0 0) + (uuid "4937232a-b66d-42e4-915f-b93d3e966f3c") + ) + (junction + (at 53.34 187.96) + (diameter 0) + (color 0 0 0 0) + (uuid "4cb94db8-9fba-46af-9cfc-6234cd610639") + ) + (junction + (at 158.75 60.96) + (diameter 0) + (color 0 0 0 0) + (uuid "4cb9ffa3-b6fd-42fb-adac-c0192a3fb9a5") + ) + (junction + (at 132.08 138.43) + (diameter 0) + (color 0 0 0 0) + (uuid "4d9ef20b-ba9c-45ce-9cbb-947dd012a071") + ) + (junction + (at 295.91 201.93) + (diameter 0) + (color 0 0 0 0) + (uuid "4f266234-11ae-4a4f-b8fb-e0091d3bba2e") + ) + (junction + (at 320.04 43.18) + (diameter 0) + (color 0 0 0 0) + (uuid "50eb3d73-4155-40ba-8557-275532144fba") + ) + (junction + (at 267.97 270.51) + (diameter 0) + (color 0 0 0 0) + (uuid "52183d78-0b18-405f-b274-9ef2a19cfe76") + ) + (junction + (at 119.38 91.44) + (diameter 0) + (color 0 0 0 0) + (uuid "521ec85d-7f56-498f-8797-6db7f0ca776c") + ) + (junction + (at 212.09 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "526d3516-dda7-4f29-a2cd-5081b93152e2") + ) + (junction + (at 152.4 30.48) + (diameter 0) + (color 0 0 0 0) + (uuid "534518b1-aecd-4896-b63e-d9bffce104d3") + ) + (junction + (at 104.14 157.48) + (diameter 0) + (color 0 0 0 0) + (uuid "538941c0-82a0-4c5e-b5d3-4b4af06ef764") + ) + (junction + (at 303.53 88.9) + (diameter 0) + (color 0 0 0 0) + (uuid "5394fa7d-bd68-45a0-a236-a3b6218c6a32") + ) + (junction + (at 318.77 88.9) + (diameter 0) + (color 0 0 0 0) + (uuid "554db381-68ca-4afa-8706-a7d6b9941887") + ) + (junction + (at 358.14 43.18) + (diameter 0) + (color 0 0 0 0) + (uuid "5b5f2da2-6ba8-47c5-9b61-d77bbb701c0e") + ) + (junction + (at 153.67 157.48) + (diameter 0) + (color 0 0 0 0) + (uuid "5c122f5f-516e-4c55-8565-ea0f7e454c87") + ) + (junction + (at 157.48 74.93) + (diameter 0) + (color 0 0 0 0) + (uuid "5d483bdd-c7a0-4938-ad89-1c99df052e14") + ) + (junction + (at 104.14 204.47) + (diameter 0) + (color 0 0 0 0) + (uuid "5d55c780-6fc5-46ee-8e12-15a1d1e4131e") + ) + (junction + (at 308.61 34.29) + (diameter 0) + (color 0 0 0 0) + (uuid "5dbc5335-41c2-41f9-bc0b-8053babfcbe5") + ) + (junction + (at 107.95 44.45) + (diameter 0) + (color 0 0 0 0) + (uuid "5f03da33-40a1-42ae-9028-d80b74e0c814") + ) + (junction + (at 104.14 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "5f978c45-0e91-4c79-ad2d-ee0bbe9d52b4") + ) + (junction + (at 119.38 30.48) + (diameter 0) + (color 0 0 0 0) + (uuid "5f99155c-83dc-4718-b230-f70268c908c8") + ) + (junction + (at 358.14 63.5) + (diameter 0) + (color 0 0 0 0) + (uuid "60a135e0-65b4-4e8a-99ce-948b8f6acccb") + ) + (junction + (at 260.35 262.89) + (diameter 0) + (color 0 0 0 0) + (uuid "610758c8-52f2-4c9c-8125-3e7637859752") + ) + (junction + (at 356.87 43.18) + (diameter 0) + (color 0 0 0 0) + (uuid "617e99b8-cd76-4994-9d18-56d2be458184") + ) + (junction + (at 128.27 124.46) + (diameter 0) + (color 0 0 0 0) + (uuid "61c71038-83e2-4d3f-8dbc-95f7a61b7693") + ) + (junction + (at 133.35 157.48) + (diameter 0) + (color 0 0 0 0) + (uuid "61e89f1f-c2f5-49c7-969a-9a733bf47c90") + ) + (junction + (at 153.67 171.45) + (diameter 0) + (color 0 0 0 0) + (uuid "63febd10-a67b-4123-9755-d20d299930a4") + ) + (junction + (at 53.34 88.9) + (diameter 0) + (color 0 0 0 0) + (uuid "64d3ee84-c0e5-46bd-8b22-5f780c0fa2c3") + ) + (junction + (at 109.22 96.52) + (diameter 0) + (color 0 0 0 0) + (uuid "675899e3-5d24-4461-98e2-b296f93a42bc") + ) + (junction + (at 158.75 162.56) + (diameter 0) + (color 0 0 0 0) + (uuid "683a07dd-2208-4329-b253-91949af2a02f") + ) + (junction + (at 53.34 27.94) + (diameter 0) + (color 0 0 0 0) + (uuid "6890cf8d-c8a9-4c76-9bcf-9c1bdf06cb69") + ) + (junction + (at 327.66 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "68a96d77-328a-4477-8806-76f5f26cc073") + ) + (junction + (at 158.75 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "68d0bc25-c897-4823-a040-c713aace6849") + ) + (junction + (at 331.47 102.87) + (diameter 0) + (color 0 0 0 0) + (uuid "692120ed-6c37-4558-b75e-afaf58bb6982") + ) + (junction + (at 133.35 162.56) + (diameter 0) + (color 0 0 0 0) + (uuid "6a782233-a498-4356-b524-cbea5b81537c") + ) + (junction + (at 128.27 138.43) + (diameter 0) + (color 0 0 0 0) + (uuid "6ac0dfe9-9413-4931-bab9-6c1a6505a700") + ) + (junction + (at 127 157.48) + (diameter 0) + (color 0 0 0 0) + (uuid "6cc45090-0c65-4783-b683-ce03025678fa") + ) + (junction + (at 290.83 201.93) + (diameter 0) + (color 0 0 0 0) + (uuid "6d193e36-1d76-44d8-be3b-f2c17f719d79") + ) + (junction + (at 308.61 102.87) + (diameter 0) + (color 0 0 0 0) + (uuid "6df6a760-dbcf-4721-a90c-d20811ee23e6") + ) + (junction + (at 232.41 270.51) + (diameter 0) + (color 0 0 0 0) + (uuid "6f486ac5-2ae9-420f-9367-7f3fb562cc43") + ) + (junction + (at 358.14 88.9) + (diameter 0) + (color 0 0 0 0) + (uuid "6fb26177-725f-42f0-83f6-c818e439ff2b") + ) + (junction + (at 358.14 34.29) + (diameter 0) + (color 0 0 0 0) + (uuid "6ff8031e-8636-4ecb-b485-eef544e5217c") + ) + (junction + (at 119.38 190.5) + (diameter 0) + (color 0 0 0 0) + (uuid "7377f9bf-f399-4486-88f1-2df18e51bdc2") + ) + (junction + (at 128.27 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "74946cc1-5be9-47cb-94ea-e9721669d3fd") + ) + (junction + (at 318.77 29.21) + (diameter 0) + (color 0 0 0 0) + (uuid "759fecff-1ae5-4cb8-8fda-346c533b4fdd") + ) + (junction + (at 167.64 252.73) + (diameter 0) + (color 0 0 0 0) + (uuid "7735cfca-619c-4ce6-84c7-bcb274171a36") + ) + (junction + (at 351.79 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "78a846b0-1ebf-4d81-bfa5-40eed6aa183a") + ) + (junction + (at 327.66 43.18) + (diameter 0) + (color 0 0 0 0) + (uuid "78d5d787-6a9b-4952-93a1-8b24a3a15631") + ) + (junction + (at 326.39 224.79) + (diameter 0) + (color 0 0 0 0) + (uuid "7943068d-7b23-4265-822b-900ce74a7d96") + ) + (junction + (at 158.75 91.44) + (diameter 0) + (color 0 0 0 0) + (uuid "7c45f38d-0ae6-4c1d-b4b8-fcca62b9e87a") + ) + (junction + (at 127 30.48) + (diameter 0) + (color 0 0 0 0) + (uuid "7cca1d75-e911-4c79-85f5-a691c068b259") + ) + (junction + (at 153.67 124.46) + (diameter 0) + (color 0 0 0 0) + (uuid "7d4452d5-1abc-4424-925a-154e4ae607ae") + ) + (junction + (at 327.66 29.21) + (diameter 0) + (color 0 0 0 0) + (uuid "805fc43b-6edc-40b3-87bf-2ba03ce1c13e") + ) + (junction + (at 157.48 138.43) + (diameter 0) + (color 0 0 0 0) + (uuid "822ee75d-de37-4a4e-a561-37a0d8aefe58") + ) + (junction + (at 158.75 96.52) + (diameter 0) + (color 0 0 0 0) + (uuid "8280e895-19ea-4d3c-b90d-f0ab700aec37") + ) + (junction + (at 307.34 43.18) + (diameter 0) + (color 0 0 0 0) + (uuid "82ef6d3a-dfd8-435f-9f8c-9b0f12bb7993") + ) + (junction + (at 104.14 190.5) + (diameter 0) + (color 0 0 0 0) + (uuid "836883d3-9b99-400a-b3c0-aeb2598478ce") + ) + (junction + (at 353.06 88.9) + (diameter 0) + (color 0 0 0 0) + (uuid "84f2326a-59c7-46a6-8bbc-2f7ab081936e") + ) + (junction + (at 109.22 129.54) + (diameter 0) + (color 0 0 0 0) + (uuid "851863a6-d633-4709-84d9-1b3bac7bb88f") + ) + (junction + (at 127 124.46) + (diameter 0) + (color 0 0 0 0) + (uuid "8550ede8-0b91-4f66-a37c-bebe3efc798d") + ) + (junction + (at 144.78 124.46) + (diameter 0) + (color 0 0 0 0) + (uuid "86d4ed27-12ec-4a64-afd9-3ff5c90a0ecb") + ) + (junction + (at 133.35 74.93) + (diameter 0) + (color 0 0 0 0) + (uuid "87290cdf-1efa-47c7-9b8d-fb8bb65cdef1") + ) + (junction + (at 133.35 170.18) + (diameter 0) + (color 0 0 0 0) + (uuid "87f2c592-d14f-4783-b0a4-6afe5faf8745") + ) + (junction + (at 326.39 29.21) + (diameter 0) + (color 0 0 0 0) + (uuid "89d1871e-4b18-4b55-b307-05078abd22ab") + ) + (junction + (at 133.35 124.46) + (diameter 0) + (color 0 0 0 0) + (uuid "8a880895-d727-4876-8c08-15d573c4c2ac") + ) + (junction + (at 133.35 35.56) + (diameter 0) + (color 0 0 0 0) + (uuid "8bfc2655-f26c-4a00-b740-be15f732c276") + ) + (junction + (at 133.35 44.45) + (diameter 0) + (color 0 0 0 0) + (uuid "8c8dd2df-414e-4173-b810-0f840904b559") + ) + (junction + (at 133.35 91.44) + (diameter 0) + (color 0 0 0 0) + (uuid "8d077ce6-6a85-4a87-9ed9-75c0082128d3") + ) + (junction + (at 128.27 190.5) + (diameter 0) + (color 0 0 0 0) + (uuid "8f65b8fd-64a2-4606-8373-7247756007d6") + ) + (junction + (at 158.75 129.54) + (diameter 0) + (color 0 0 0 0) + (uuid "907abaea-725c-45b2-bd81-2cede36ec1ba") + ) + (junction + (at 53.34 234.95) + (diameter 0) + (color 0 0 0 0) + (uuid "91c4e8d3-3e6f-4909-8b87-0cf6156e29e8") + ) + (junction + (at 308.61 88.9) + (diameter 0) + (color 0 0 0 0) + (uuid "925acb37-1968-444f-aaf3-44b5670567b3") + ) + (junction + (at 128.27 157.48) + (diameter 0) + (color 0 0 0 0) + (uuid "9464d12d-34ae-4d28-a6da-3a9a485f0c91") + ) + (junction + (at 326.39 162.56) + (diameter 0) + (color 0 0 0 0) + (uuid "9507364a-a8f3-447f-9885-ec77503b7fec") + ) + (junction + (at 128.27 74.93) + (diameter 0) + (color 0 0 0 0) + (uuid "956c01b5-963c-4b79-bfd8-910b2d017750") + ) + (junction + (at 53.34 121.92) + (diameter 0) + (color 0 0 0 0) + (uuid "96f181b8-702d-46ab-be35-52dee08d92ca") + ) + (junction + (at 133.35 203.2) + (diameter 0) + (color 0 0 0 0) + (uuid "97788d21-89e3-4cab-9e5b-15cf1c4760ce") + ) + (junction + (at 152.4 91.44) + (diameter 0) + (color 0 0 0 0) + (uuid "97899fdd-d42d-4b21-bca1-567c30322d9e") + ) + (junction + (at 326.39 88.9) + (diameter 0) + (color 0 0 0 0) + (uuid "9884be48-3c17-4e37-af11-2fde5f66afbb") + ) + (junction + (at 144.78 30.48) + (diameter 0) + (color 0 0 0 0) + (uuid "98dea15f-be69-4fc2-a5ac-5f942632c144") + ) + (junction + (at 351.79 29.21) + (diameter 0) + (color 0 0 0 0) + (uuid "994b4ff6-73cb-46bf-aa76-2e1be205a72c") + ) + (junction + (at 303.53 102.87) + (diameter 0) + (color 0 0 0 0) + (uuid "9d36ce55-ddd7-41b7-ab3a-dd0ee946e479") + ) + (junction + (at 133.35 204.47) + (diameter 0) + (color 0 0 0 0) + (uuid "a0fcf7aa-a661-4580-8630-2084b04c5946") + ) + (junction + (at 153.67 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "a1fa254d-444a-43a9-bd96-04a2b749c44e") + ) + (junction + (at 255.27 26.67) + (diameter 0) + (color 0 0 0 0) + (uuid "a245e728-69e9-40ee-b44b-ba6ff286ddb8") + ) + (junction + (at 250.19 270.51) + (diameter 0) + (color 0 0 0 0) + (uuid "a3aa5de2-d96b-4789-a32e-1068a5e129cd") + ) + (junction + (at 105.41 224.79) + (diameter 0) + (color 0 0 0 0) + (uuid "a3f1e140-385c-4833-a1d0-67c6b9e7e5e1") + ) + (junction + (at 53.34 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "a489f4ca-6ded-4ef0-b7fc-ecf352b82164") + ) + (junction + (at 297.18 162.56) + (diameter 0) + (color 0 0 0 0) + (uuid "a5a091fa-6819-4cfe-b72d-daa237fdf693") + ) + (junction + (at 353.06 102.87) + (diameter 0) + (color 0 0 0 0) + (uuid "aaf9c6f3-7967-4522-b4e3-ed57218246b2") + ) + (junction + (at 158.75 204.47) + (diameter 0) + (color 0 0 0 0) + (uuid "abc03691-9cd5-4671-af16-c031d407820a") + ) + (junction + (at 104.14 171.45) + (diameter 0) + (color 0 0 0 0) + (uuid "ac47b4b5-699e-42a8-a498-c0a9ac2e664e") + ) + (junction + (at 344.17 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "ad40fcb4-1b81-4bfd-a06a-75156758c7c5") + ) + (junction + (at 153.67 60.96) + (diameter 0) + (color 0 0 0 0) + (uuid "adb2d3ff-4355-40d6-9f20-09c01b814e0e") + ) + (junction + (at 144.78 91.44) + (diameter 0) + (color 0 0 0 0) + (uuid "add0b94d-509b-48b1-a17b-9c26b3ffaa75") + ) + (junction + (at 109.22 204.47) + (diameter 0) + (color 0 0 0 0) + (uuid "ae2bf112-722b-49e4-a605-970c35e5add8") + ) + (junction + (at 152.4 124.46) + (diameter 0) + (color 0 0 0 0) + (uuid "afc89ea9-5cc2-42e2-8270-2ac623eae72d") + ) + (junction + (at 109.22 203.2) + (diameter 0) + (color 0 0 0 0) + (uuid "b0792f84-503d-4f14-9f7e-f295247b0c1a") + ) + (junction + (at 308.61 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "b08badc0-cd83-4c7d-8a91-6c09fd35c613") + ) + (junction + (at 302.26 162.56) + (diameter 0) + (color 0 0 0 0) + (uuid "b0e43ae0-40d4-4ee8-aa80-00ebe768def8") + ) + (junction + (at 133.35 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "b26424e6-3284-482e-bb99-97e0c61498e7") + ) + (junction + (at 358.14 102.87) + (diameter 0) + (color 0 0 0 0) + (uuid "b2f9b2ed-ac2f-46d6-b450-320fad47c12b") + ) + (junction + (at 274.32 262.89) + (diameter 0) + (color 0 0 0 0) + (uuid "b3a6bd18-39b3-4448-8de6-169762cb7381") + ) + (junction + (at 132.08 74.93) + (diameter 0) + (color 0 0 0 0) + (uuid "b5d47eb4-1195-4835-ab27-9c4de9eecb7a") + ) + (junction + (at 152.4 157.48) + (diameter 0) + (color 0 0 0 0) + (uuid "b6063bec-3d9d-4a8b-8cd4-8d3c567429b2") + ) + (junction + (at 158.75 104.14) + (diameter 0) + (color 0 0 0 0) + (uuid "b678ce79-278c-45a8-90d9-66a7302729c0") + ) + (junction + (at 212.09 88.9) + (diameter 0) + (color 0 0 0 0) + (uuid "b78a97c0-ae2e-4cab-91bb-c1fd7b05e197") + ) + (junction + (at 307.34 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "b7a20e72-5a6e-48ec-aa70-3310eb68b50f") + ) + (junction + (at 232.41 262.89) + (diameter 0) + (color 0 0 0 0) + (uuid "b94181c6-43c6-4be4-87c0-70bac1591e7e") + ) + (junction + (at 119.38 60.96) + (diameter 0) + (color 0 0 0 0) + (uuid "ba111105-1686-458b-87a1-d025b6580a86") + ) + (junction + (at 132.08 44.45) + (diameter 0) + (color 0 0 0 0) + (uuid "ba587219-0a83-43a4-aa0d-a7c068539228") + ) + (junction + (at 128.27 171.45) + (diameter 0) + (color 0 0 0 0) + (uuid "bb0b2573-b71e-45eb-bdd4-e69e7a3b1820") + ) + (junction + (at 127 91.44) + (diameter 0) + (color 0 0 0 0) + (uuid "bcef8167-83fa-4b97-b958-ba34d20281bf") + ) + (junction + (at 308.61 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "c06ae363-b727-41c9-a659-f74f2de6b719") + ) + (junction + (at 53.34 154.94) + (diameter 0) + (color 0 0 0 0) + (uuid "c0a74cd2-1f1b-4e4e-ab5e-07df97ee573b") + ) + (junction + (at 158.75 35.56) + (diameter 0) + (color 0 0 0 0) + (uuid "c14cad5a-2024-48c0-8126-2d1b6d136b66") + ) + (junction + (at 158.75 124.46) + (diameter 0) + (color 0 0 0 0) + (uuid "c2829dca-8e32-4ce5-8d04-352a4f9069fb") + ) + (junction + (at 153.67 204.47) + (diameter 0) + (color 0 0 0 0) + (uuid "c3223040-29ac-4927-81e2-c26839e02673") + ) + (junction + (at 109.22 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "c3f77916-6731-4427-a5ee-73f9360f94fc") + ) + (junction + (at 109.22 60.96) + (diameter 0) + (color 0 0 0 0) + (uuid "c6f18433-d600-4885-b10c-c64d1a423976") + ) + (junction + (at 308.61 29.21) + (diameter 0) + (color 0 0 0 0) + (uuid "c7766371-167f-4337-a806-5653b89941aa") + ) + (junction + (at 158.75 138.43) + (diameter 0) + (color 0 0 0 0) + (uuid "c8ce479e-caff-46a5-95bd-e99593519178") + ) + (junction + (at 303.53 43.18) + (diameter 0) + (color 0 0 0 0) + (uuid "c9518f36-0269-49ef-8646-73169a67053b") + ) + (junction + (at 351.79 88.9) + (diameter 0) + (color 0 0 0 0) + (uuid "ca062b0a-0281-4081-abf0-10ed8be019b0") + ) + (junction + (at 104.14 138.43) + (diameter 0) + (color 0 0 0 0) + (uuid "cc4f502f-a8c4-4196-82fd-b8fa8029d46d") + ) + (junction + (at 133.35 190.5) + (diameter 0) + (color 0 0 0 0) + (uuid "cc52aa2b-77da-43fe-9f30-8806539cc341") + ) + (junction + (at 127 60.96) + (diameter 0) + (color 0 0 0 0) + (uuid "cf226418-1fc4-4564-be03-326d046af72b") + ) + (junction + (at 358.14 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "cfc5bc9b-b242-4081-8926-b0c0cfdc365f") + ) + (junction + (at 109.22 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "d02b15b0-2c55-41a6-942b-3c157b441e20") + ) + (junction + (at 158.75 203.2) + (diameter 0) + (color 0 0 0 0) + (uuid "d0537e55-0734-46b6-84bf-3a1fd8294c68") + ) + (junction + (at 109.22 195.58) + (diameter 0) + (color 0 0 0 0) + (uuid "d07f81b9-1279-4cb4-9b74-fd79f1b945a0") + ) + (junction + (at 34.29 255.27) + (diameter 0) + (color 0 0 0 0) + (uuid "d0d814d3-a1d7-486f-87c0-3727b78b4d4a") + ) + (junction + (at 119.38 157.48) + (diameter 0) + (color 0 0 0 0) + (uuid "d19d3023-3e80-4909-977c-36dc367e155d") + ) + (junction + (at 133.35 195.58) + (diameter 0) + (color 0 0 0 0) + (uuid "d2b41c05-f762-42ca-b93b-aa45f07128d3") + ) + (junction + (at 212.09 121.92) + (diameter 0) + (color 0 0 0 0) + (uuid "d2c1f674-d9d2-4259-bc8a-eac1437c083a") + ) + (junction + (at 109.22 171.45) + (diameter 0) + (color 0 0 0 0) + (uuid "d2f26c8c-ef77-410c-a1d6-bcb3330e678e") + ) + (junction + (at 353.06 43.18) + (diameter 0) + (color 0 0 0 0) + (uuid "d313352b-dd6e-4629-83ec-33748363eb07") + ) + (junction + (at 120.65 171.45) + (diameter 0) + (color 0 0 0 0) + (uuid "d34934d2-ddd9-4828-9fe4-c5eb4ff94f32") + ) + (junction + (at 133.35 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "d3c83419-f636-42b9-a219-631dd417bdfb") + ) + (junction + (at 332.74 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "d4581619-7f21-44ef-8761-b2e59128a5ae") + ) + (junction + (at 331.47 43.18) + (diameter 0) + (color 0 0 0 0) + (uuid "d4e40cec-caac-4797-9f9c-42fad47b35a9") + ) + (junction + (at 158.75 44.45) + (diameter 0) + (color 0 0 0 0) + (uuid "d4fa2b6f-c4a7-40f8-ba79-a60694ec25d2") + ) + (junction + (at 153.67 44.45) + (diameter 0) + (color 0 0 0 0) + (uuid "d766eb97-b326-4e96-b770-c6da9782c42b") + ) + (junction + (at 152.4 190.5) + (diameter 0) + (color 0 0 0 0) + (uuid "d8f3ce09-81a9-492f-9205-82b3470c29a5") + ) + (junction + (at 127 190.5) + (diameter 0) + (color 0 0 0 0) + (uuid "d92e1b11-fbcc-4f36-86e6-a35f65897ed7") + ) + (junction + (at 320.04 102.87) + (diameter 0) + (color 0 0 0 0) + (uuid "d9a65c36-6e29-4d14-a57b-05ea76513677") + ) + (junction + (at 133.35 171.45) + (diameter 0) + (color 0 0 0 0) + (uuid "db65c6c7-c311-4792-96dc-3c68d31dd1b2") + ) + (junction + (at 255.27 55.88) + (diameter 0) + (color 0 0 0 0) + (uuid "dcb573a5-3b34-4c2c-9eb3-ae41a24e2bc3") + ) + (junction + (at 109.22 162.56) + (diameter 0) + (color 0 0 0 0) + (uuid "dccb7b87-3c01-4302-b444-d564f3213bf6") + ) + (junction + (at 344.17 29.21) + (diameter 0) + (color 0 0 0 0) + (uuid "e0582934-ad89-48be-b6d3-d387968622c5") + ) + (junction + (at 332.74 102.87) + (diameter 0) + (color 0 0 0 0) + (uuid "e10cfac6-dc57-4401-bb26-bea53213c6c8") + ) + (junction + (at 104.14 91.44) + (diameter 0) + (color 0 0 0 0) + (uuid "e1c3e94d-57cf-4736-8ec2-58a74c65a04e") + ) + (junction + (at 332.74 29.21) + (diameter 0) + (color 0 0 0 0) + (uuid "e25307dc-a395-4870-8c5a-b7fa81b4dcc6") + ) + (junction + (at 120.65 44.45) + (diameter 0) + (color 0 0 0 0) + (uuid "e3f0d6cf-4eb9-4881-b55c-367c1d2e37d0") + ) + (junction + (at 303.53 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "e6f09e53-ebb3-41c8-a8bf-cf98aed33d52") + ) + (junction + (at 158.75 74.93) + (diameter 0) + (color 0 0 0 0) + (uuid "e799a41e-5d21-4d6c-bd55-35bcb2fa3b2e") + ) + (junction + (at 153.67 74.93) + (diameter 0) + (color 0 0 0 0) + (uuid "e8198c18-37ae-4d41-a9c8-3b3ad2fb3780") + ) + (junction + (at 260.35 270.51) + (diameter 0) + (color 0 0 0 0) + (uuid "ea1ac0a4-4d61-4d83-9012-f774e302fa54") + ) + (junction + (at 153.67 30.48) + (diameter 0) + (color 0 0 0 0) + (uuid "ea513a68-aee2-4ee8-bede-b7b5cfaea2c2") + ) + (junction + (at 358.14 29.21) + (diameter 0) + (color 0 0 0 0) + (uuid "eac90802-7e38-413d-ba84-11c15bb0044b") + ) + (junction + (at 332.74 34.29) + (diameter 0) + (color 0 0 0 0) + (uuid "ed52574d-8022-456d-ab74-7e4159546da8") + ) + (junction + (at 128.27 60.96) + (diameter 0) + (color 0 0 0 0) + (uuid "ed57a74c-dbe1-44d1-a0cc-629dbda2c01c") + ) + (junction + (at 120.65 138.43) + (diameter 0) + (color 0 0 0 0) + (uuid "ee309651-0730-41c8-afd2-fafec65c8e02") + ) + (junction + (at 332.74 88.9) + (diameter 0) + (color 0 0 0 0) + (uuid "eeb13fcf-b23d-464d-9e48-864cdacfd214") + ) + (junction + (at 318.77 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "efa9b7a5-ecf9-491b-9315-1e0c488eb349") + ) + (junction + (at 358.14 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "efc01265-dbfb-4aee-8800-e083812b0caa") + ) + (junction + (at 295.91 213.36) + (diameter 0) + (color 0 0 0 0) + (uuid "f2ab48e5-a9fa-489a-9929-684bdec23cb5") + ) + (junction + (at 332.74 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "f2dc2964-262b-41da-b182-ced81ff9213b") + ) + (junction + (at 144.78 157.48) + (diameter 0) + (color 0 0 0 0) + (uuid "f502c572-715d-4e28-8b3c-2c22133a5007") + ) + (junction + (at 104.14 124.46) + (diameter 0) + (color 0 0 0 0) + (uuid "f5350528-b0b9-433c-9ec0-7d8e50a9cb47") + ) + (junction + (at 308.61 63.5) + (diameter 0) + (color 0 0 0 0) + (uuid "f8476bd7-cf62-44d3-9bdd-74875aec1629") + ) + (junction + (at 308.61 101.6) + (diameter 0) + (color 0 0 0 0) + (uuid "f854773c-47dd-48d4-93ad-0da94aa654ea") + ) + (junction + (at 406.4 86.36) + (diameter 0) + (color 0 0 0 0) + (uuid "f890003c-566a-43a8-acf1-e8452a98711b") + ) + (junction + (at 332.74 43.18) + (diameter 0) + (color 0 0 0 0) + (uuid "f8c139d2-5e8c-424e-af8d-da20aee7b392") + ) + (junction + (at 158.75 190.5) + (diameter 0) + (color 0 0 0 0) + (uuid "f947106f-80b8-4c4a-b7a3-329f531737f6") + ) + (junction + (at 128.27 44.45) + (diameter 0) + (color 0 0 0 0) + (uuid "faa61997-4930-47cb-84b4-f34693d4eb16") + ) + (junction + (at 353.06 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "fb199430-92ca-45dd-a006-2a4d834b93f1") + ) + (junction + (at 295.91 224.79) + (diameter 0) + (color 0 0 0 0) + (uuid "fc47e1f8-0712-484c-b7de-b5dcc68de11a") + ) + (junction + (at 406.4 55.88) + (diameter 0) + (color 0 0 0 0) + (uuid "feed9fa9-262b-4f19-bbd9-dd4ee2192a12") + ) + (junction + (at 109.22 157.48) + (diameter 0) + (color 0 0 0 0) + (uuid "ff7170dd-6e72-480c-b348-128120a1a55d") + ) + (no_connect + (at 308.61 190.5) + (uuid "0d7422ec-e0ad-4c41-8637-484d91904b7f") + ) + (no_connect + (at 344.17 215.9) + (uuid "69752a8b-fe0d-48af-be8d-4e0e91be800d") + ) + (no_connect + (at 280.67 179.07) + (uuid "8c789f83-8dd3-4b6d-b0b1-bbd8143d435d") + ) + (no_connect + (at 280.67 181.61) + (uuid "b3a276c4-a06b-4765-8c28-b618a0081aa2") + ) + (no_connect + (at 344.17 213.36) + (uuid "b6b259ce-c899-4545-b73d-f2bdb7e15833") + ) + (no_connect + (at 267.97 179.07) + (uuid "bb71ac78-b326-4cd1-8a72-30e0231f3e4e") + ) + (no_connect + (at 308.61 193.04) + (uuid "c4b1988c-42c8-47f8-8d95-5114dd479060") + ) + (no_connect + (at 267.97 181.61) + (uuid "d4797f12-02dd-4827-b383-7a376ca0acf7") + ) + (no_connect + (at 344.17 210.82) + (uuid "da3d61f9-55b4-4084-a530-faa427448d53") + ) + (no_connect + (at 344.17 208.28) + (uuid "da6f0b6e-0823-4d24-a2d8-153e8b18b32f") + ) + (no_connect + (at 280.67 184.15) + (uuid "e1447078-1b76-4c14-9675-9970e955f15c") + ) + (no_connect + (at 280.67 186.69) + (uuid "f6189988-13d1-40ad-a6f7-7d7ba550adb8") + ) + (wire + (pts + (xy 77.47 271.78) (xy 74.93 271.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "00572998-ccb4-4c97-9b08-ecfcec907a6a") + ) + (wire + (pts + (xy 327.66 72.39) (xy 320.04 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "00840d44-4215-45e1-b9fb-bbdecd4ea555") + ) + (wire + (pts + (xy 303.53 41.91) (xy 303.53 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "00e0a047-9e13-433a-b18d-244e810e09bf") + ) + (wire + (pts + (xy 133.35 73.66) (xy 133.35 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "00f53a07-3486-4e3a-b469-991a713f8829") + ) + (wire + (pts + (xy 351.79 22.86) (xy 351.79 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "010bd468-76f7-4469-8f06-60051dc19159") + ) + (wire + (pts + (xy 168.91 30.48) (xy 173.99 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "01f5db62-cfb1-48a1-ac84-e9fedaa0dec0") + ) + (wire + (pts + (xy 118.11 91.44) (xy 119.38 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "020ffc38-ef89-4ef6-9c5b-6f7e695fbfc1") + ) + (wire + (pts + (xy 295.91 224.79) (xy 300.99 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "02482c27-7a0f-4545-88b6-71be6bb80e2e") + ) + (wire + (pts + (xy 34.29 255.27) (xy 27.94 255.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "02f9aeab-7ca1-4446-8a96-0f022809d701") + ) + (wire + (pts + (xy 107.95 203.2) (xy 109.22 203.2) + ) + (stroke + (width 0) + (type default) + ) + (uuid "030e3448-8e7c-4c72-b490-7209f15ee781") + ) + (wire + (pts + (xy 290.83 224.79) (xy 295.91 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "030fbf7e-36d7-4a42-96b3-51f62156a1d9") + ) + (wire + (pts + (xy 128.27 190.5) (xy 133.35 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "038d5d66-e242-406a-9cbf-580c5d745988") + ) + (wire + (pts + (xy 143.51 91.44) (xy 144.78 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "040602a3-1db6-43b5-9094-f7a2f33deb16") + ) + (wire + (pts + (xy 194.31 58.42) (xy 200.66 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "041dffda-2ee4-47f0-90fa-786891fcf75e") + ) + (wire + (pts + (xy 327.66 72.39) (xy 331.47 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "04311b5e-f2c1-4a0a-9082-8551d8ad25ba") + ) + (wire + (pts + (xy 76.2 44.45) (xy 104.14 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0468e2ea-bdde-4b21-9617-503168c72ea9") + ) + (wire + (pts + (xy 332.74 34.29) (xy 332.74 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "04989a3a-6deb-43dd-b255-20b116bafa9f") + ) + (wire + (pts + (xy 358.14 63.5) (xy 358.14 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "051994fe-214e-4d78-802c-1efd0cc4378f") + ) + (wire + (pts + (xy 260.35 262.89) (xy 274.32 262.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0740d5e6-3745-426c-a1f4-413bd405be3d") + ) + (wire + (pts + (xy 331.47 64.77) (xy 331.47 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "09705ddc-17a5-4e2a-9bf8-74081d0e9c38") + ) + (wire + (pts + (xy 128.27 60.96) (xy 133.35 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "099f0b70-6fc2-4a00-9789-88ef8f484361") + ) + (wire + (pts + (xy 104.14 30.48) (xy 109.22 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "09d3ed1f-8735-467a-bca6-ea185d7357ba") + ) + (wire + (pts + (xy 152.4 24.13) (xy 152.4 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "09d80fa2-0edf-4c31-950b-edc956478773") + ) + (wire + (pts + (xy 128.27 96.52) (xy 128.27 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0a205258-f8d0-4b1e-bb92-2cbf916faea7") + ) + (wire + (pts + (xy 128.27 129.54) (xy 128.27 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0a4774f3-d130-459c-8685-923a74e12fd2") + ) + (wire + (pts + (xy 153.67 129.54) (xy 153.67 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0b224b1e-d564-4ecc-90df-38588f488f7e") + ) + (wire + (pts + (xy 63.5 222.25) (xy 68.58 222.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0b433aeb-2050-48ac-92a0-a96e2c1f7937") + ) + (wire + (pts + (xy 353.06 193.04) (xy 344.17 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0b63d4f2-381c-40df-836d-cf6f4e1c0927") + ) + (wire + (pts + (xy 393.7 55.88) (xy 397.51 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0bb1470f-aa31-40d1-95fa-dfcc6078d6c1") + ) + (wire + (pts + (xy 104.14 60.96) (xy 109.22 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0bd5fa67-c2e2-4d1f-9df5-96afc431c2ea") + ) + (wire + (pts + (xy 133.35 35.56) (xy 133.35 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0c19a6f9-c05d-4f93-b0d2-59467a35fdb3") + ) + (wire + (pts + (xy 158.75 104.14) (xy 158.75 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0c7d3218-197d-41c3-bc12-031e8dec9200") + ) + (wire + (pts + (xy 143.51 124.46) (xy 144.78 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0cbad7f0-9657-477e-8ea4-1ccbf9f1e0e4") + ) + (wire + (pts + (xy 194.31 127) (xy 195.58 127) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0d21da6a-4c2f-4e95-882b-3e660dc5c083") + ) + (wire + (pts + (xy 132.08 66.04) (xy 133.35 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0d4778c3-6650-45a4-9914-adc840266682") + ) + (wire + (pts + (xy 132.08 104.14) (xy 133.35 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0e5c44b0-0251-49d1-9bd8-d83775f5b03d") + ) + (wire + (pts + (xy 356.87 199.39) (xy 353.06 199.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0f2cdc25-d222-474f-9162-e980b74bd2d9") + ) + (wire + (pts + (xy 133.35 43.18) (xy 133.35 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0f9e2d34-aee8-46f7-9d52-7e232c02eadc") + ) + (wire + (pts + (xy 365.76 184.15) (xy 365.76 182.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0fd48fc9-04f7-41c9-bc3b-bfb9d32754a1") + ) + (wire + (pts + (xy 168.91 35.56) (xy 173.99 35.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "10028c15-28d4-4385-b35b-6bec3edcc61e") + ) + (wire + (pts + (xy 153.67 252.73) (xy 167.64 252.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "100a5f5a-8b5d-4570-a2e2-798b04439a2b") + ) + (wire + (pts + (xy 128.27 124.46) (xy 127 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "104d3f2c-c6ac-4432-906d-afef001384ba") + ) + (wire + (pts + (xy 104.14 190.5) (xy 109.22 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1113e3f3-029d-42be-8371-ad5fcc3495c3") + ) + (wire + (pts + (xy 128.27 74.93) (xy 132.08 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "113f7c6b-1c25-4864-b0dc-296dd83191c0") + ) + (wire + (pts + (xy 128.27 204.47) (xy 133.35 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "11958cfe-9ecb-46d6-8411-fe92be0cb792") + ) + (wire + (pts + (xy 267.97 86.36) (xy 264.16 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "11b9acac-812f-404c-86bb-bda8dd51e386") + ) + (wire + (pts + (xy 53.34 88.9) (xy 53.34 121.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "14669193-d468-4c00-ac69-f0fe56a51e28") + ) + (wire + (pts + (xy 307.34 71.12) (xy 307.34 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "14ac0439-667e-4155-ada6-54cddaa84b20") + ) + (wire + (pts + (xy 326.39 165.1) (xy 326.39 167.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "16d03f34-2ef0-47a7-9cba-2f60c4eeb0af") + ) + (wire + (pts + (xy 158.75 129.54) (xy 158.75 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "16ea430c-faf3-4fbe-b6eb-431c437a6afc") + ) + (wire + (pts + (xy 327.66 88.9) (xy 326.39 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "17f20b1a-b0f4-45fe-b973-5bd6be0893a1") + ) + (wire + (pts + (xy 201.93 273.05) (xy 201.93 275.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "18575ca1-73b1-48e6-912c-44fe863ad717") + ) + (wire + (pts + (xy 356.87 93.98) (xy 358.14 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "18f0eb2f-e1f2-4197-850d-4bf603e467a1") + ) + (wire + (pts + (xy 168.91 99.06) (xy 173.99 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "19014f9a-e12d-4da3-a57b-82e468a06c19") + ) + (wire + (pts + (xy 153.67 30.48) (xy 158.75 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1946743b-7db4-478c-a7a7-bad2360bb087") + ) + (wire + (pts + (xy 318.77 52.07) (xy 318.77 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "194989b9-b6be-4455-b2e4-91423eaecf4d") + ) + (wire + (pts + (xy 281.94 189.23) (xy 280.67 189.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1980dc3d-f7d9-4b47-91f7-46aee888e1f6") + ) + (wire + (pts + (xy 353.06 184.15) (xy 353.06 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1ac1c725-ef80-4eb6-ba40-99453b201483") + ) + (wire + (pts + (xy 332.74 93.98) (xy 332.74 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1b2e7563-8226-4f6c-91e2-e029efbcdf33") + ) + (wire + (pts + (xy 303.53 29.21) (xy 308.61 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1ba5a69a-6c39-41b9-93ea-0bec8060169f") + ) + (wire + (pts + (xy 53.34 222.25) (xy 55.88 222.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1c642a00-11aa-4020-a953-b704c51a4233") + ) + (wire + (pts + (xy 133.35 162.56) (xy 133.35 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1c779a0e-09ef-4b22-b843-7a6b5fcdceac") + ) + (wire + (pts + (xy 292.1 175.26) (xy 292.1 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1c882b4d-b618-41a6-a5de-ac0f87ada2f9") + ) + (wire + (pts + (xy 295.91 209.55) (xy 295.91 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1d4b8a27-5174-43f2-8960-6a6841db4772") + ) + (wire + (pts + (xy 307.34 63.5) (xy 308.61 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1f0b0809-3444-4448-8272-245205679052") + ) + (wire + (pts + (xy 118.11 190.5) (xy 119.38 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1f467a08-c767-4fad-b3de-948e90fdfbac") + ) + (wire + (pts + (xy 358.14 93.98) (xy 358.14 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1f9ee5f8-9998-43b1-bc10-1748dd942c23") + ) + (wire + (pts + (xy 153.67 104.14) (xy 153.67 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1ff294ab-191f-44e7-90e5-affc60c7dc03") + ) + (wire + (pts + (xy 344.17 52.07) (xy 344.17 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "20a4fa1d-3acb-43c0-a0f1-2a249d0204cd") + ) + (wire + (pts + (xy 109.22 44.45) (xy 109.22 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2141e985-9e4b-48d6-b07c-13e2300df29d") + ) + (wire + (pts + (xy 153.67 60.96) (xy 152.4 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "214b42bd-ba79-4212-ac4f-2848e1b7d4c9") + ) + (wire + (pts + (xy 53.34 27.94) (xy 53.34 12.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "223216fb-16a0-4f7b-806e-e559566e2b13") + ) + (wire + (pts + (xy 368.3 66.04) (xy 373.38 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "240184ce-c288-43a7-8c80-7f2e56cb02f0") + ) + (wire + (pts + (xy 144.78 252.73) (xy 146.05 252.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2442e2dc-c301-4fa1-b913-df7545577fb0") + ) + (wire + (pts + (xy 104.14 195.58) (xy 104.14 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "244e23cd-36c5-43fd-a532-c876f8a13b6a") + ) + (wire + (pts + (xy 128.27 30.48) (xy 127 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "24de1726-df22-477e-8122-0bd116df1d2a") + ) + (wire + (pts + (xy 67.31 193.04) (xy 67.31 200.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2509b33c-9ed3-4e79-825c-14d4c7339e2b") + ) + (wire + (pts + (xy 353.06 29.21) (xy 358.14 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "25aeacec-7d3e-4df0-a566-ade6d32888bd") + ) + (wire + (pts + (xy 120.65 204.47) (xy 109.22 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "26431254-33e1-4502-9480-e7d9aad26e9c") + ) + (wire + (pts + (xy 67.31 63.5) (xy 67.31 68.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2666f0f7-3c9e-4acf-a279-57eb9e4a521c") + ) + (wire + (pts + (xy 327.66 102.87) (xy 331.47 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2682e290-f589-4999-a4be-6ab6190702d1") + ) + (wire + (pts + (xy 119.38 184.15) (xy 119.38 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2694cca7-56e0-4b95-81ad-b971802ff615") + ) + (wire + (pts + (xy 326.39 82.55) (xy 326.39 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "27eb7baf-1bf8-43ba-8e5a-ed7d039a1aef") + ) + (wire + (pts + (xy 356.87 43.18) (xy 358.14 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "27f0528e-727c-401b-adcd-3ddc4d59fa4c") + ) + (wire + (pts + (xy 153.67 105.41) (xy 158.75 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "287af918-d873-45ab-82c4-ff288405e0e2") + ) + (wire + (pts + (xy 152.4 54.61) (xy 152.4 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "28ea5c4b-0288-43b0-8371-dfed5562440d") + ) + (wire + (pts + (xy 307.34 41.91) (xy 307.34 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "29414ec0-6ba4-45ff-8b4d-0a02c814056c") + ) + (wire + (pts + (xy 60.96 227.33) (xy 68.58 227.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "29ae5bd7-7e74-468a-a99c-7c36be3fe7cd") + ) + (wire + (pts + (xy 303.53 58.42) (xy 308.61 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "29d7b89e-c1e0-4e91-b8e7-913cc0a43cbd") + ) + (wire + (pts + (xy 368.3 96.52) (xy 373.38 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2a0e4b60-b3ef-4597-8b1f-47118db9c8ac") + ) + (wire + (pts + (xy 158.75 129.54) (xy 157.48 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2a5227e2-7a85-4d75-a053-12af6776993b") + ) + (wire + (pts + (xy 128.27 157.48) (xy 133.35 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2ac9a3ee-63bc-4158-b6f9-474bf1d8cc67") + ) + (wire + (pts + (xy 214.63 91.44) (xy 215.9 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2adf3b94-a332-421f-ad29-47751d82f983") + ) + (wire + (pts + (xy 327.66 43.18) (xy 331.47 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2af17f5f-25d2-449d-922b-af1ba98a9b99") + ) + (wire + (pts + (xy 303.53 34.29) (xy 303.53 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2b0e6db8-ba1b-4b82-813b-57d8e6df2852") + ) + (wire + (pts + (xy 300.99 215.9) (xy 308.61 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2b184912-64cb-4b6c-ad02-3d3f04fcacfa") + ) + (wire + (pts + (xy 128.27 203.2) (xy 128.27 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2b54888d-59b8-4947-92f0-72e4a7f46601") + ) + (wire + (pts + (xy 143.51 157.48) (xy 144.78 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2b7dff9c-e782-42d0-ae3b-8b352a1d7e95") + ) + (wire + (pts + (xy 153.67 74.93) (xy 157.48 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2b8302ad-bd03-483d-b4fa-d67376e10007") + ) + (wire + (pts + (xy 332.74 165.1) (xy 326.39 165.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2d1d616f-f68a-4dd2-8e96-5dc091f5b9bb") + ) + (wire + (pts + (xy 327.66 71.12) (xy 327.66 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2df019de-470f-4b3b-90e0-f5489531b86e") + ) + (wire + (pts + (xy 255.27 55.88) (xy 255.27 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2eebbc78-c3a9-4dd8-a734-c9b35e3de2ac") + ) + (wire + (pts + (xy 76.2 138.43) (xy 104.14 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2ef5882d-8d67-46d2-a45d-8ece761a9fe7") + ) + (wire + (pts + (xy 118.11 60.96) (xy 119.38 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2efa58fe-1de1-439d-a371-90f1d76687ae") + ) + (wire + (pts + (xy 104.14 204.47) (xy 109.22 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2f05786a-ab75-4e95-98b0-fbea8f14bee4") + ) + (wire + (pts + (xy 356.87 41.91) (xy 356.87 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2f2ecf52-d768-40ce-b042-e62c1aea3310") + ) + (wire + (pts + (xy 327.66 93.98) (xy 327.66 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2f42826e-5150-4f06-a847-087e60fb7cd5") + ) + (wire + (pts + (xy 104.14 66.04) (xy 104.14 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3045d969-5519-4a37-9028-1f15578981f9") + ) + (wire + (pts + (xy 368.3 88.9) (xy 373.38 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "314cf5ee-5bf2-4bb0-ac86-d41fb341de7c") + ) + (wire + (pts + (xy 53.34 234.95) (xy 53.34 245.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "323d8f30-f347-46da-b8d7-9431016ee894") + ) + (wire + (pts + (xy 406.4 86.36) (xy 406.4 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "327124b4-58f7-4fbc-80c6-bfc988ac8c04") + ) + (wire + (pts + (xy 256.54 86.36) (xy 255.27 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "32be88a2-c846-4240-9a7f-682ea87fb4c2") + ) + (wire + (pts + (xy 308.61 88.9) (xy 309.88 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "32c62383-f589-4ef0-aeea-c74828a36466") + ) + (wire + (pts + (xy 194.31 121.92) (xy 200.66 121.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3324211c-78c9-4f9a-a3f9-299b608517a8") + ) + (wire + (pts + (xy 105.41 224.79) (xy 120.65 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "343f33d6-67bd-40da-9be3-069e1c0f767a") + ) + (wire + (pts + (xy 158.75 66.04) (xy 158.75 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "34c41f77-e555-4d3a-aeed-950196958d9f") + ) + (wire + (pts + (xy 128.27 204.47) (xy 120.65 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "34f8944f-00c8-424c-b008-d09641971de3") + ) + (wire + (pts + (xy 109.22 105.41) (xy 109.22 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3514e124-5112-4baa-9678-a2af66609dc7") + ) + (wire + (pts + (xy 332.74 63.5) (xy 332.74 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "362c7a03-1d6f-41cd-857c-72afdaad04a9") + ) + (wire + (pts + (xy 214.63 262.89) (xy 222.25 262.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "36fa5d8f-7d2b-4b57-92b5-4957e4991734") + ) + (wire + (pts + (xy 128.27 30.48) (xy 133.35 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "37bdaf4d-e5ed-4ab7-921f-b4436ad52b15") + ) + (wire + (pts + (xy 326.39 160.02) (xy 326.39 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "38766fc7-3090-4919-b50c-045488f1a7ea") + ) + (wire + (pts + (xy 168.91 198.12) (xy 173.99 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "38ecefe1-56d0-4209-8c29-cc55dcfd65cd") + ) + (wire + (pts + (xy 144.78 270.51) (xy 146.05 270.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "392ba919-c602-45b5-bf91-352c7bda931f") + ) + (wire + (pts + (xy 295.91 223.52) (xy 295.91 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "39821d94-c703-4c1f-bca4-fd950574caf2") + ) + (wire + (pts + (xy 128.27 138.43) (xy 132.08 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "39996dbe-0713-413d-adbd-cecccdd2bc43") + ) + (wire + (pts + (xy 54.61 255.27) (xy 54.61 261.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "39e03731-a1cf-4771-a132-22cc960ff21a") + ) + (wire + (pts + (xy 326.39 223.52) (xy 326.39 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3a1f0776-bc07-4ca8-8d72-baba7c621d70") + ) + (wire + (pts + (xy 132.08 137.16) (xy 132.08 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3aaf867e-e6df-4923-a7d8-e32bd011858a") + ) + (wire + (pts + (xy 57.15 27.94) (xy 53.34 27.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3b26f7a6-8558-49e8-bd77-af7395243be2") + ) + (wire + (pts + (xy 302.26 162.56) (xy 302.26 167.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3b3df2de-8840-4b70-8406-b8b1803aa3c2") + ) + (wire + (pts + (xy 168.91 190.5) (xy 173.99 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3b64a3df-57cd-44ae-be2e-5aee2732307b") + ) + (wire + (pts + (xy 68.58 58.42) (xy 64.77 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3befc8d6-da57-40c8-9c97-3651e1637867") + ) + (wire + (pts + (xy 214.63 60.96) (xy 215.9 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3c207d5c-9b1a-44fd-9fc9-50aac89551bf") + ) + (wire + (pts + (xy 186.69 137.16) (xy 186.69 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3c23797d-f571-4c3e-8f60-b82a11ffa2c7") + ) + (wire + (pts + (xy 340.36 165.1) (xy 341.63 165.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3dbc6e0e-8365-4f48-918d-da726b9759c0") + ) + (wire + (pts + (xy 158.75 96.52) (xy 158.75 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3edc332e-7edc-4d55-8b74-a942ad2569df") + ) + (wire + (pts + (xy 11.43 160.02) (xy 16.51 160.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f6771c3-b99b-4b2d-b4eb-79a9151ac612") + ) + (wire + (pts + (xy 120.65 224.79) (xy 167.64 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f6bc4f8-aab3-428a-9a13-345af08bcc6a") + ) + (wire + (pts + (xy 104.14 74.93) (xy 107.95 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f6c6d86-f9b3-4d22-a6eb-fd1d8b8bd6c3") + ) + (wire + (pts + (xy 342.9 58.42) (xy 344.17 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3fa4fd6a-0665-40b4-bbc0-633a92147038") + ) + (wire + (pts + (xy 119.38 269.24) (xy 124.46 269.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3fe1441a-4169-4f1f-81e5-e9658c340782") + ) + (wire + (pts + (xy 132.08 44.45) (xy 133.35 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3ff01154-0f1f-41c7-99bf-1a8d5863e41a") + ) + (wire + (pts + (xy 128.27 91.44) (xy 127 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4005ecde-95d8-4234-b404-1bd7fdce10d9") + ) + (wire + (pts + (xy 320.04 72.39) (xy 308.61 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4091474e-2c44-4a6c-bcee-dda51628c9e1") + ) + (wire + (pts + (xy 53.34 187.96) (xy 57.15 187.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "41a2dcc7-914d-4508-988e-5b34398465a8") + ) + (wire + (pts + (xy 153.67 157.48) (xy 158.75 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "41b118b8-393c-4b5d-9617-70bf1df9de1d") + ) + (wire + (pts + (xy 275.59 43.18) (xy 303.53 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "42994d9b-82f6-455d-9dc0-22bc2b171952") + ) + (wire + (pts + (xy 67.31 160.02) (xy 67.31 165.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "434fdbdb-da90-4830-a1f3-e7214093075a") + ) + (wire + (pts + (xy 53.34 222.25) (xy 53.34 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "438c35e9-a1cc-4694-8dd9-0c1b26d4460f") + ) + (wire + (pts + (xy 120.65 74.93) (xy 120.65 76.2) + ) + (stroke + (width 0) + (type default) + ) + (uuid "442e40d6-7889-4205-94ce-79375a99fad0") + ) + (wire + (pts + (xy 153.67 30.48) (xy 152.4 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "44950b23-326b-45a6-9aca-f698012b3cf0") + ) + (wire + (pts + (xy 327.66 43.18) (xy 320.04 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4520b4c7-5794-4935-a3fb-0decd662b252") + ) + (wire + (pts + (xy 76.2 237.49) (xy 76.2 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "456fc51c-dc4a-4b4d-ac36-65feb9cc967c") + ) + (wire + (pts + (xy 356.87 184.15) (xy 353.06 184.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "45d90c84-0ce7-47a9-a1f1-ee52a04ce07c") + ) + (wire + (pts + (xy 128.27 195.58) (xy 128.27 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "45dedb85-5ca3-46c9-b662-4b798e507600") + ) + (wire + (pts + (xy 208.28 121.92) (xy 212.09 121.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "45e793ec-9076-4fc8-adaa-757a346285a2") + ) + (wire + (pts + (xy 167.64 252.73) (xy 171.45 252.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4604d52b-6018-47ef-8bec-bc0c99c44f24") + ) + (wire + (pts + (xy 194.31 88.9) (xy 200.66 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4619927c-a942-4a0b-8a04-c4ff24c53c22") + ) + (wire + (pts + (xy 119.38 118.11) (xy 119.38 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "46398402-b4ad-40e7-9132-eb5dfaf9f037") + ) + (wire + (pts + (xy 76.2 170.18) (xy 76.2 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "46c13973-c7fd-4b70-bcfd-2883e09987b9") + ) + (wire + (pts + (xy 267.97 55.88) (xy 264.16 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "474253a7-da54-4818-b7a9-71f4d8331667") + ) + (wire + (pts + (xy 157.48 195.58) (xy 158.75 195.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "478444d3-c625-4a1c-819d-a83c8eaa1a41") + ) + (wire + (pts + (xy 186.69 104.14) (xy 186.69 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "47e1567a-aba5-4771-9ccd-b3a0baacd886") + ) + (wire + (pts + (xy 57.15 121.92) (xy 53.34 121.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4824f072-48b8-45bd-9548-10c34087c92c") + ) + (wire + (pts + (xy 303.53 93.98) (xy 303.53 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "484f61c6-9122-4948-a8ce-3943ab0f46f8") + ) + (wire + (pts + (xy 34.29 255.27) (xy 45.72 255.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "48c2b60f-51ef-408e-bf55-a2fcb99810a8") + ) + (wire + (pts + (xy 128.27 105.41) (xy 120.65 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "491b409f-fc3e-4a53-8a8a-65de8fb5d03a") + ) + (wire + (pts + (xy 327.66 101.6) (xy 327.66 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4aa7b3ce-6622-47ef-a3de-8051381b789c") + ) + (wire + (pts + (xy 394.97 91.44) (xy 394.97 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4b83b75b-2f3c-4762-8db7-b8777e8775b8") + ) + (wire + (pts + (xy 194.31 27.94) (xy 200.66 27.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4b8b48ad-793e-4cb3-aa61-f21b6880ef6e") + ) + (wire + (pts + (xy 353.06 198.12) (xy 344.17 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4c094619-ab7b-4c6c-a85b-9b7313e097af") + ) + (wire + (pts + (xy 208.28 88.9) (xy 212.09 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4ca0f842-eee4-4381-a71a-07d6c418a161") + ) + (wire + (pts + (xy 342.9 29.21) (xy 344.17 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4cc354f3-349f-4e22-80ac-db0e1a4683e7") + ) + (wire + (pts + (xy 107.95 66.04) (xy 109.22 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4d057da0-b824-4333-8a99-1e1f5ef281c4") + ) + (wire + (pts + (xy 128.27 171.45) (xy 133.35 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4d22eb04-6eb1-4cd0-bb69-db4d93e31461") + ) + (wire + (pts + (xy 364.49 184.15) (xy 365.76 184.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4d5db853-8302-4216-95af-07594fd4182b") + ) + (wire + (pts + (xy 153.67 190.5) (xy 152.4 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4d7813b5-2763-4f76-afb6-66ab183c07d0") + ) + (wire + (pts + (xy 358.14 41.91) (xy 358.14 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4de3dbf1-1f50-4536-a3de-6f164b008280") + ) + (wire + (pts + (xy 67.31 127) (xy 67.31 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4de492be-fa35-4181-b1a0-d12f660220c4") + ) + (wire + (pts + (xy 368.3 58.42) (xy 373.38 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4e3b88a6-9282-404f-a627-b53d67c1d6a3") + ) + (wire + (pts + (xy 12.7 93.98) (xy 16.51 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4ece2561-1e78-4a18-81ba-b9bd8f2f13a3") + ) + (wire + (pts + (xy 12.7 227.33) (xy 16.51 227.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4f3835c8-fcf6-4048-8612-8015e0dcd4ff") + ) + (wire + (pts + (xy 107.95 104.14) (xy 109.22 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4fb14546-7aec-433a-b331-1410b7b79f09") + ) + (wire + (pts + (xy 128.27 171.45) (xy 120.65 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4fc9fdb9-b4ab-4d7f-aa4f-b64e5c43db1c") + ) + (wire + (pts + (xy 201.93 262.89) (xy 207.01 262.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "502e2e49-77c1-44fd-a49d-ca212d2e10d2") + ) + (wire + (pts + (xy 153.67 44.45) (xy 157.48 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "50377ad4-4feb-4f10-bdf1-dc5cad223099") + ) + (wire + (pts + (xy 109.22 74.93) (xy 109.22 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "503dceb9-83c0-486d-845d-434590dd8cb1") + ) + (wire + (pts + (xy 109.22 138.43) (xy 109.22 137.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "505fbf4a-e196-4fdf-a524-890e7788be33") + ) + (wire + (pts + (xy 153.67 171.45) (xy 133.35 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5092b28e-7175-4b5c-9cae-f3188deb43b4") + ) + (wire + (pts + (xy 107.95 74.93) (xy 109.22 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "50a7769f-7d52-42ce-8319-e2ea1a5b2607") + ) + (wire + (pts + (xy 88.9 30.48) (xy 96.52 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "520534d6-8811-4a7c-ba37-4aae43303cf3") + ) + (wire + (pts + (xy 288.29 88.9) (xy 295.91 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "52630088-6e9c-46f9-a22c-908377256348") + ) + (wire + (pts + (xy 107.95 162.56) (xy 109.22 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5293d348-efda-4d6f-ba3e-60d40f7f5153") + ) + (wire + (pts + (xy 303.53 72.39) (xy 307.34 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "52f4fa6f-6da9-4c1b-8e16-131d294846f9") + ) + (wire + (pts + (xy 128.27 73.66) (xy 128.27 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "53621175-0996-4a36-a988-21b7d8a0d14f") + ) + (wire + (pts + (xy 158.75 137.16) (xy 158.75 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "537b02df-8004-4cef-b698-5857d912f064") + ) + (wire + (pts + (xy 77.47 264.16) (xy 77.47 245.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5414368b-7fe4-47cd-8d46-d73441f9d254") + ) + (wire + (pts + (xy 128.27 74.93) (xy 120.65 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "544a5e93-6cca-4ddf-a76d-79c4e69921a1") + ) + (wire + (pts + (xy 194.31 33.02) (xy 195.58 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "54eb533a-5c11-464a-9666-fba573bdabdf") + ) + (wire + (pts + (xy 105.41 242.57) (xy 105.41 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5512cdc5-a6c1-4c73-bfb8-bbb868b01fbf") + ) + (wire + (pts + (xy 119.38 151.13) (xy 119.38 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "55b7b13a-b9b0-4ccd-8aa5-1a331031720d") + ) + (wire + (pts + (xy 39.37 276.86) (xy 41.91 276.86) + ) + (stroke + (width 0) + (type default) + ) + (uuid "55ebb1e4-9ddf-4549-b6b5-c426abe5377d") + ) + (wire + (pts + (xy 133.35 91.44) (xy 135.89 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "56e46cff-bdd2-44c8-afcc-453086a6f5e3") + ) + (wire + (pts + (xy 307.34 101.6) (xy 308.61 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "56f9bd76-40d1-44ce-8b38-3fb19a5b273a") + ) + (wire + (pts + (xy 133.35 66.04) (xy 133.35 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "575e7560-3bfe-4ae4-a032-b53ac765e26e") + ) + (wire + (pts + (xy 250.19 270.51) (xy 232.41 270.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "57784079-99a6-419f-9ed4-8b4259abe0d7") + ) + (wire + (pts + (xy 222.25 270.51) (xy 232.41 270.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "57e9198e-a44b-4107-b0f1-83c4a326fcf2") + ) + (wire + (pts + (xy 107.95 138.43) (xy 109.22 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "58405da5-43f2-419b-b9c5-dec6771b822e") + ) + (wire + (pts + (xy 302.26 175.26) (xy 308.61 175.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "585807fe-2f17-4888-99cb-38b143250cf0") + ) + (wire + (pts + (xy 34.29 245.11) (xy 34.29 255.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "58ca993d-52db-4bc5-8532-31a022eed636") + ) + (wire + (pts + (xy 76.2 74.93) (xy 104.14 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "59144b1c-4da5-46fa-a72d-199161a2d2ca") + ) + (wire + (pts + (xy 53.34 154.94) (xy 53.34 187.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "59b4885f-db34-4064-a4bd-c09edde9a073") + ) + (wire + (pts + (xy 109.22 96.52) (xy 109.22 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "59cf4da4-4b41-484e-9b47-b673dc51e460") + ) + (wire + (pts + (xy 153.67 96.52) (xy 153.67 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "59f03e1f-3643-45e0-9537-78749656c66f") + ) + (wire + (pts + (xy 153.67 170.18) (xy 153.67 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5a0d7fa4-d893-4c59-b39b-6c7fe6013239") + ) + (wire + (pts + (xy 109.22 162.56) (xy 109.22 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5a17b49e-7de6-44d7-a4a9-b52ca9361ec1") + ) + (wire + (pts + (xy 153.67 190.5) (xy 158.75 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5a1f2ce8-bd4c-46a1-add8-b6d881b04d0b") + ) + (wire + (pts + (xy 107.95 195.58) (xy 109.22 195.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5a7aa667-08c1-4b8f-92ed-89086ad1cc5d") + ) + (wire + (pts + (xy 153.67 204.47) (xy 133.35 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5a7ef2db-c342-4630-b6fc-f78da38c4510") + ) + (wire + (pts + (xy 186.69 43.18) (xy 186.69 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5ab74cb4-c7b3-4519-b2d6-f12f646c1f39") + ) + (wire + (pts + (xy 128.27 137.16) (xy 128.27 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5ae4bbc2-41e9-45cc-bb0d-4462dfe64c61") + ) + (wire + (pts + (xy 320.04 43.18) (xy 308.61 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5b938842-1621-4949-9cf1-f7999b97cdd3") + ) + (wire + (pts + (xy 68.58 88.9) (xy 64.77 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5bbf433b-5b94-49d1-9437-4472f4795f35") + ) + (wire + (pts + (xy 152.4 184.15) (xy 152.4 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5c114894-40ee-4736-aa8f-82715ec12109") + ) + (wire + (pts + (xy 353.06 102.87) (xy 332.74 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5cadda7c-b299-4ac3-ac96-d2c587547381") + ) + (wire + (pts + (xy 64.77 121.92) (xy 68.58 121.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5cef1a6c-c2b9-416d-9933-0aaa65e8a44b") + ) + (wire + (pts + (xy 68.58 160.02) (xy 67.31 160.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5d30e00d-6484-4dbf-add6-694e23e8fe0b") + ) + (wire + (pts + (xy 201.93 262.89) (xy 201.93 270.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5d52d1d0-0bc3-4bd4-9e94-9ddf02ebdb63") + ) + (wire + (pts + (xy 109.22 204.47) (xy 109.22 203.2) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5d6897cb-1fa5-49ee-ae9a-6d7afa720c11") + ) + (wire + (pts + (xy 358.14 29.21) (xy 360.68 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5dfd3199-4aff-49e1-a425-180c9065c9e5") + ) + (wire + (pts + (xy 104.14 129.54) (xy 104.14 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5e492c70-9845-47eb-a348-be4096213a6b") + ) + (wire + (pts + (xy 158.75 74.93) (xy 186.69 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5e9b4c3c-01e3-4bb7-9b51-c2c4375d5bd5") + ) + (wire + (pts + (xy 331.47 93.98) (xy 332.74 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5eb8b42d-9c71-421c-8b37-02bf93f7d99a") + ) + (wire + (pts + (xy 67.31 33.02) (xy 67.31 36.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5f4d81be-ba26-430c-8376-9ce8da40ded3") + ) + (wire + (pts + (xy 386.08 72.39) (xy 358.14 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5fafe827-91f6-4546-9b05-4dc99aaf5997") + ) + (wire + (pts + (xy 157.48 66.04) (xy 158.75 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5fce5332-d7fa-4dde-a0d0-7c917ede9a90") + ) + (wire + (pts + (xy 76.2 137.16) (xy 76.2 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "60245791-b643-4800-9df4-5c0d13f2c458") + ) + (wire + (pts + (xy 128.27 138.43) (xy 120.65 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6031c300-09d1-4924-986c-3ed7229b35c6") + ) + (wire + (pts + (xy 267.97 60.96) (xy 266.7 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6086a306-276c-4be3-9c30-f9c3c90a67ac") + ) + (wire + (pts + (xy 295.91 201.93) (xy 300.99 201.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "60a834de-23bb-4c07-b028-051542fe035d") + ) + (wire + (pts + (xy 168.91 60.96) (xy 173.99 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6150c982-b507-4d5c-89da-c25fb064cc56") + ) + (wire + (pts + (xy 365.76 200.66) (xy 368.3 200.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "619910f7-af9e-40c3-a2f1-56e50db8bd28") + ) + (wire + (pts + (xy 144.78 184.15) (xy 144.78 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6200ee32-8ea6-4531-a6c5-4a09611503c2") + ) + (wire + (pts + (xy 212.09 121.92) (xy 212.09 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "622f675a-5c37-44dc-9149-af530b96cbee") + ) + (wire + (pts + (xy 386.08 102.87) (xy 358.14 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6289e77e-37f8-4443-84ee-1c65df337971") + ) + (wire + (pts + (xy 275.59 102.87) (xy 303.53 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "62c08075-2fed-4e04-8e50-439ffe0cee12") + ) + (wire + (pts + (xy 109.22 74.93) (xy 120.65 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "62e0d2e2-fccd-47bc-a566-ec11d4e3f85b") + ) + (wire + (pts + (xy 132.08 195.58) (xy 133.35 195.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6343c716-163d-4c3a-a6f8-db817d5449c2") + ) + (wire + (pts + (xy 267.97 26.67) (xy 264.16 26.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6364c4b8-57d0-422b-b5f2-f065278d5a44") + ) + (wire + (pts + (xy 208.28 58.42) (xy 212.09 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "63b5bb4f-6985-4edf-b6fe-46601bc96604") + ) + (wire + (pts + (xy 194.31 193.04) (xy 195.58 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "63c438e1-bfdb-41e2-832e-a1dec1cb1a41") + ) + (wire + (pts + (xy 34.29 234.95) (xy 34.29 237.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "63f900ae-270d-4cac-a303-0e582284d745") + ) + (wire + (pts + (xy 144.78 54.61) (xy 144.78 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6433ca9a-5adc-4826-9513-b703dda07526") + ) + (wire + (pts + (xy 143.51 60.96) (xy 144.78 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "659e9139-c296-46e5-b03e-7acf065c78a9") + ) + (wire + (pts + (xy 64.77 187.96) (xy 68.58 187.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "65db657d-4e49-44b0-89fd-717cbf0f8b9f") + ) + (wire + (pts + (xy 290.83 201.93) (xy 295.91 201.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "661b0a9f-39ca-4db3-9006-eaed76b6148c") + ) + (wire + (pts + (xy 353.06 199.39) (xy 353.06 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "66a82d2b-d56c-48bf-ac1d-b294926c5bca") + ) + (wire + (pts + (xy 275.59 71.12) (xy 275.59 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6717666b-d98f-4735-a301-cba4c0e7eeba") + ) + (wire + (pts + (xy 133.35 203.2) (xy 133.35 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "67a442b3-5f18-47d7-8796-1415e1801060") + ) + (wire + (pts + (xy 303.53 88.9) (xy 308.61 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "68404f5f-7096-4cbe-9a62-d467f005b101") + ) + (wire + (pts + (xy 297.18 177.8) (xy 308.61 177.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "68d2aa87-7975-4eb3-a0c8-eb65172e73ff") + ) + (wire + (pts + (xy 208.28 27.94) (xy 212.09 27.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "69387a5b-2cbf-4a04-a053-8042ccf56b8b") + ) + (wire + (pts + (xy 76.2 104.14) (xy 76.2 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "694dd439-4a30-4d2f-9be5-6268dfcaeccd") + ) + (wire + (pts + (xy 133.35 104.14) (xy 133.35 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "69723ea4-d39d-411d-b9e7-54f876a88df2") + ) + (wire + (pts + (xy 158.75 157.48) (xy 161.29 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "69a91f84-586e-46f4-9439-3e84797680c7") + ) + (wire + (pts + (xy 195.58 93.98) (xy 195.58 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6a5347b4-3ea3-47ac-9e5f-02c7cd8e7d49") + ) + (wire + (pts + (xy 128.27 44.45) (xy 132.08 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6a55b56e-5df9-425a-80b7-734e588f5015") + ) + (wire + (pts + (xy 68.58 93.98) (xy 67.31 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6a7f3119-fd6a-491c-986e-d9446c26b9f0") + ) + (wire + (pts + (xy 168.91 96.52) (xy 173.99 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6b5c770a-1e66-40f3-9a0f-b3dc1b8bd378") + ) + (wire + (pts + (xy 292.1 167.64) (xy 292.1 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6bf8c054-7e3e-413f-ad98-ffeb0a15db01") + ) + (wire + (pts + (xy 107.95 137.16) (xy 107.95 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6c87f8f0-efe3-48f1-a810-2da3826f9da5") + ) + (wire + (pts + (xy 153.67 171.45) (xy 158.75 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6ca666c3-14dd-4384-b5b6-8a6befc5ee5a") + ) + (wire + (pts + (xy 133.35 44.45) (xy 153.67 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6d2c6632-ee16-4f3f-a813-afcf78569f7e") + ) + (wire + (pts + (xy 255.27 26.67) (xy 256.54 26.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6d8ba5ce-7ac5-424f-a9a2-6ee71e9a99b8") + ) + (wire + (pts + (xy 12.7 127) (xy 16.51 127) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6e46866e-9337-4625-ac2a-5124a809cb1f") + ) + (wire + (pts + (xy 74.93 269.24) (xy 91.44 269.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6e553b53-d0ee-48fc-b541-7c739d6266e7") + ) + (wire + (pts + (xy 307.34 93.98) (xy 308.61 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6e72c095-53fc-49c2-abca-94344a7f081b") + ) + (wire + (pts + (xy 318.77 82.55) (xy 318.77 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6ebb8e39-d27c-4b3b-a003-2a31ff908b8d") + ) + (wire + (pts + (xy 331.47 63.5) (xy 332.74 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6f264b80-7781-4fdc-9ba0-06ff182293f3") + ) + (wire + (pts + (xy 353.06 58.42) (xy 351.79 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6f3411e9-958a-4190-82e7-06c9032b769e") + ) + (wire + (pts + (xy 307.34 72.39) (xy 308.61 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6f7b7883-98d4-403b-8071-841b3d6a852d") + ) + (wire + (pts + (xy 127 184.15) (xy 127 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6fdd8786-b205-4edf-b190-ee16c5af2c58") + ) + (wire + (pts + (xy 353.06 29.21) (xy 351.79 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6fe0dd74-adb0-47b4-b5e1-f72a99d96c72") + ) + (wire + (pts + (xy 153.67 60.96) (xy 158.75 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "705c8e4f-2907-44b0-bf8a-4e30e4f644f6") + ) + (wire + (pts + (xy 104.14 44.45) (xy 107.95 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7170c1d5-a785-4a4e-bd11-4366e3d42068") + ) + (wire + (pts + (xy 53.34 58.42) (xy 53.34 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "71a6a227-fcf2-4c05-81f8-832fd4f2db4e") + ) + (wire + (pts + (xy 386.08 41.91) (xy 386.08 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "722e62e5-a586-4a34-a39d-d3322146177c") + ) + (wire + (pts + (xy 104.14 171.45) (xy 109.22 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "72db1412-62e4-451e-91a4-d6822709aa43") + ) + (wire + (pts + (xy 308.61 210.82) (xy 290.83 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "730149b3-4ebe-46e2-97b0-1abf13c76542") + ) + (wire + (pts + (xy 132.08 203.2) (xy 133.35 203.2) + ) + (stroke + (width 0) + (type default) + ) + (uuid "73c40ca7-a610-43c8-b0f0-65e6a1ecb2c9") + ) + (wire + (pts + (xy 153.67 162.56) (xy 153.67 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "74bc8b35-d3f1-4d60-acc3-1b90582f4253") + ) + (wire + (pts + (xy 368.3 93.98) (xy 373.38 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "75179c72-6acf-48fd-bac9-11f936261d64") + ) + (wire + (pts + (xy 358.14 71.12) (xy 358.14 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7528b8b5-eb69-4650-8af3-edfd8af79263") + ) + (wire + (pts + (xy 353.06 102.87) (xy 358.14 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "75b0a768-4e35-485c-bc0c-6a95d242f9b7") + ) + (wire + (pts + (xy 358.14 58.42) (xy 360.68 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "75e3c6d9-3eb8-4d6c-9f42-04b5c2aa231e") + ) + (wire + (pts + (xy 133.35 129.54) (xy 133.35 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "75f0c38e-6ec8-4d1e-be73-357f03289188") + ) + (wire + (pts + (xy 195.58 127) (xy 195.58 132.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "760527b8-dd3e-4c53-8837-9d4844d7a4c3") + ) + (wire + (pts + (xy 157.48 137.16) (xy 157.48 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "766f76d3-530c-4517-a702-ba5c31e35c82") + ) + (wire + (pts + (xy 308.61 29.21) (xy 309.88 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "76beb541-7098-46f5-97f5-e92e9f0a77bd") + ) + (wire + (pts + (xy 387.35 240.03) (xy 387.35 245.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "770d069e-2a54-430a-9eb5-65e02858fc9f") + ) + (wire + (pts + (xy 153.67 105.41) (xy 133.35 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7799ffb3-1af6-4111-8376-7468e94516d0") + ) + (wire + (pts + (xy 158.75 43.18) (xy 158.75 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "77fa4bed-df8f-48c4-9ad6-6ed75b810ff6") + ) + (wire + (pts + (xy 208.28 154.94) (xy 212.09 154.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7808262d-0fd9-48d9-aac7-87aa60d5bbf4") + ) + (wire + (pts + (xy 158.75 162.56) (xy 158.75 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7827078c-c8be-4f16-a0cd-963a4bb0deb6") + ) + (wire + (pts + (xy 118.11 157.48) (xy 119.38 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "78627d2d-b33a-4580-ba73-811c2380b333") + ) + (wire + (pts + (xy 351.79 52.07) (xy 351.79 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "78a8ec55-fe4b-44fc-a721-71de3fa385cb") + ) + (wire + (pts + (xy 128.27 66.04) (xy 128.27 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "78d2aaf7-4155-43f2-b16b-14c73f937a3d") + ) + (wire + (pts + (xy 109.22 129.54) (xy 109.22 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7a13f951-fe91-4447-bf90-88add4db3bda") + ) + (wire + (pts + (xy 292.1 162.56) (xy 297.18 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7a1683df-90fd-4bef-a9e7-6899c253aad4") + ) + (wire + (pts + (xy 353.06 101.6) (xy 353.06 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7a71e3bc-364b-4e41-9a04-564c0808729e") + ) + (wire + (pts + (xy 195.58 33.02) (xy 195.58 36.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7ad42445-71e4-4a73-bfee-d9f68cb5f7cf") + ) + (wire + (pts + (xy 76.2 105.41) (xy 104.14 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7b0938be-4981-416d-a9fd-824bc8e17ce4") + ) + (wire + (pts + (xy 127 54.61) (xy 127 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7b24cbed-8d5e-4ab3-b574-6db949577915") + ) + (wire + (pts + (xy 57.15 154.94) (xy 53.34 154.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7cf66947-c737-4ba9-91cb-2f4a21574242") + ) + (wire + (pts + (xy 405.13 86.36) (xy 406.4 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7dfddd27-b264-45a8-b2e6-1e5670ce6563") + ) + (wire + (pts + (xy 57.15 88.9) (xy 53.34 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7e0ca985-4739-4716-8a7a-ad4f342a78a7") + ) + (wire + (pts + (xy 107.95 73.66) (xy 107.95 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7e462c12-51de-43c3-8e23-3cac0c688bb6") + ) + (wire + (pts + (xy 353.06 88.9) (xy 351.79 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7eaaa706-549a-4e21-b276-7bce0265f983") + ) + (wire + (pts + (xy 250.19 270.51) (xy 260.35 270.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7ebc0f79-68fb-449d-a7a4-ac31a68cf01f") + ) + (wire + (pts + (xy 132.08 35.56) (xy 133.35 35.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7ebfa51c-5ee7-4871-9363-63fe58caffb2") + ) + (wire + (pts + (xy 212.09 88.9) (xy 212.09 121.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7f5584b8-4c4c-422e-8205-4c276467624f") + ) + (wire + (pts + (xy 302.26 162.56) (xy 326.39 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7fba6730-3809-4e59-b49b-db0431497eaf") + ) + (wire + (pts + (xy 128.27 35.56) (xy 128.27 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7ffa7de7-38b8-4cf3-915a-6203aba793b6") + ) + (wire + (pts + (xy 157.48 35.56) (xy 158.75 35.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "804deee9-d734-449c-9276-a04c47547664") + ) + (wire + (pts + (xy 332.74 29.21) (xy 335.28 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "80a2446b-5ab7-4b71-8b56-2e265035d0f2") + ) + (wire + (pts + (xy 320.04 43.18) (xy 320.04 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "81f35a6b-d517-4226-871f-738fbc49ef3c") + ) + (wire + (pts + (xy 120.65 105.41) (xy 109.22 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8274b8f6-e44b-4406-bbd0-b3704d3191f6") + ) + (wire + (pts + (xy 168.91 38.1) (xy 173.99 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "82a11718-5892-451b-aef4-04bb740ef424") + ) + (wire + (pts + (xy 128.27 43.18) (xy 128.27 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "82acb556-794f-4743-b976-05b294af999f") + ) + (wire + (pts + (xy 104.14 35.56) (xy 104.14 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "82fe7529-5477-4ae4-9ec8-6a4aef086972") + ) + (wire + (pts + (xy 290.83 209.55) (xy 290.83 210.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "83b162f1-ee4e-4494-a0ac-afa1cf4238e5") + ) + (wire + (pts + (xy 394.97 31.75) (xy 394.97 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "840a49e3-c508-4347-bfe1-e0f51dbbe1f2") + ) + (wire + (pts + (xy 405.13 55.88) (xy 406.4 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "843ca707-403e-4810-9b17-50facd30a714") + ) + (wire + (pts + (xy 255.27 26.67) (xy 255.27 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "847dd254-d6b7-45e9-8bd6-ec43b823ae18") + ) + (wire + (pts + (xy 127 24.13) (xy 127 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8480510e-cfaa-4ce7-92a3-cbed03fb5adf") + ) + (wire + (pts + (xy 132.08 73.66) (xy 132.08 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8557e9ce-3aef-4c28-93a0-9d1e85a0886f") + ) + (wire + (pts + (xy 104.14 124.46) (xy 109.22 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "858de453-7993-4f0f-85f1-026f4cbc9faf") + ) + (wire + (pts + (xy 77.47 245.11) (xy 53.34 245.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8654c03b-86be-4989-9a44-1322f0ef481e") + ) + (wire + (pts + (xy 297.18 162.56) (xy 302.26 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "86701196-bc9a-412f-bdba-29a83a7fe60b") + ) + (wire + (pts + (xy 406.4 55.88) (xy 406.4 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "86a9e6e3-f118-431d-9a9d-7490d6935a8e") + ) + (wire + (pts + (xy 153.67 66.04) (xy 153.67 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "86b321da-9aa1-40e9-bee9-1a810805896c") + ) + (wire + (pts + (xy 104.14 104.14) (xy 104.14 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "870e4b4e-2c9d-497a-8b7b-dc9eec87bb81") + ) + (wire + (pts + (xy 327.66 29.21) (xy 332.74 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "871b2a12-376b-4fed-90a6-8bddaf76c77b") + ) + (wire + (pts + (xy 266.7 91.44) (xy 266.7 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "871b6bf0-23ef-4986-83c9-f2277e57bc47") + ) + (wire + (pts + (xy 317.5 58.42) (xy 318.77 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8782488a-760c-45b9-a2f7-e27c9cd3a0ab") + ) + (wire + (pts + (xy 157.48 44.45) (xy 158.75 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "87ca18a4-bd81-4e23-8ec2-94ba045115e0") + ) + (wire + (pts + (xy 266.7 31.75) (xy 266.7 35.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "87fdb011-00df-41ab-b423-6ba843c94004") + ) + (wire + (pts + (xy 350.52 200.66) (xy 344.17 200.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8835146d-87fc-41ab-b1e6-bde9c5854ffe") + ) + (wire + (pts + (xy 166.37 129.54) (xy 173.99 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8897c6d4-970e-49e0-9209-a4322f3c42af") + ) + (wire + (pts + (xy 350.52 181.61) (xy 350.52 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "89589d0c-2410-41e1-9ff7-cb070f166721") + ) + (wire + (pts + (xy 104.14 96.52) (xy 104.14 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8994c977-5b49-4ce3-96da-bebe1d2e06ba") + ) + (wire + (pts + (xy 119.38 54.61) (xy 119.38 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "89b53363-c76d-4fe0-9999-e65394b0877b") + ) + (wire + (pts + (xy 133.35 138.43) (xy 132.08 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8a5368ae-5f8e-4e48-83c9-25be541a3fef") + ) + (wire + (pts + (xy 157.48 74.93) (xy 158.75 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8aed0df2-a474-4756-b7e7-94f8d33504fd") + ) + (wire + (pts + (xy 128.27 190.5) (xy 127 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8b50aee4-8961-4b26-993c-33b55d0a3fec") + ) + (wire + (pts + (xy 68.58 127) (xy 67.31 127) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8b7d80f9-67d7-4f99-97ae-fd53bc55abbe") + ) + (wire + (pts + (xy 327.66 29.21) (xy 326.39 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8b9fc1a8-041e-4789-a6c0-19d27aa8a4c4") + ) + (wire + (pts + (xy 158.75 170.18) (xy 158.75 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8c01b493-fc19-43c6-ade7-df421ffb9ed5") + ) + (wire + (pts + (xy 104.14 157.48) (xy 109.22 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8c08da68-e1b1-4b30-8a9e-50f065691f46") + ) + (wire + (pts + (xy 195.58 193.04) (xy 195.58 196.85) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8c38aa83-fac8-4fb9-bca0-9f5a4f81c488") + ) + (wire + (pts + (xy 186.69 203.2) (xy 186.69 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8c726500-2e8c-4906-930a-5cfb3c553e62") + ) + (wire + (pts + (xy 326.39 162.56) (xy 326.39 165.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8c7f9cac-8832-4cbf-9d44-05920b0377a9") + ) + (wire + (pts + (xy 144.78 151.13) (xy 144.78 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8cfb4a6a-6d09-466f-8bf4-43e166b70b51") + ) + (wire + (pts + (xy 186.69 73.66) (xy 186.69 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8d0fd2be-011a-44e8-bf24-c354b8bb4e0d") + ) + (wire + (pts + (xy 317.5 88.9) (xy 318.77 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8d1d5661-64e4-4210-b993-add84015efe7") + ) + (wire + (pts + (xy 308.61 93.98) (xy 308.61 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8dc779e8-d174-40e9-aecf-83ac8801e9df") + ) + (wire + (pts + (xy 76.2 43.18) (xy 76.2 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8e60b564-6e54-453f-b03b-71f61d377b94") + ) + (wire + (pts + (xy 68.58 193.04) (xy 67.31 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8e63400c-d37f-43d5-8a00-a5a6b7b74565") + ) + (wire + (pts + (xy 12.7 193.04) (xy 16.51 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8e799ebc-1a0b-4046-b2a8-ecfe44385c3e") + ) + (wire + (pts + (xy 104.14 203.2) (xy 104.14 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8ea8995a-9dcc-4672-ae63-95d0d8116c1f") + ) + (wire + (pts + (xy 157.48 162.56) (xy 158.75 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8f7d9a6a-dfa4-4f88-ba98-d855e85db079") + ) + (wire + (pts + (xy 153.67 203.2) (xy 153.67 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8f8f9d7f-45b4-47ac-a0df-e1b5386d0607") + ) + (wire + (pts + (xy 76.2 171.45) (xy 104.14 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "905790ed-0312-4c53-b9e1-3ec858ce6d84") + ) + (wire + (pts + (xy 195.58 160.02) (xy 195.58 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "909b238a-44d1-479b-ab4b-514c398a770b") + ) + (wire + (pts + (xy 332.74 58.42) (xy 335.28 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "90aaecbf-a6c1-4b51-a3cc-7b12d74cdad4") + ) + (wire + (pts + (xy 168.91 157.48) (xy 173.99 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9138ce9a-ab64-437c-b355-bb395b29b076") + ) + (wire + (pts + (xy 88.9 91.44) (xy 96.52 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "92fa210a-3742-4388-946f-7cc43ebf0022") + ) + (wire + (pts + (xy 406.4 146.05) (xy 212.09 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "930f8391-d429-4ceb-aa9b-7225c1611d9d") + ) + (wire + (pts + (xy 153.67 124.46) (xy 158.75 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "93600000-dbee-4122-9d7e-dd22af0695c9") + ) + (wire + (pts + (xy 158.75 91.44) (xy 161.29 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "939ec537-74e5-476d-988e-37a642822f91") + ) + (wire + (pts + (xy 212.09 187.96) (xy 212.09 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "93b5a317-e16f-4aaf-819e-9f8ffcc6bfd7") + ) + (wire + (pts + (xy 387.35 245.11) (xy 389.89 245.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "942b3b68-7437-484b-bfe3-5a6ca780a84c") + ) + (wire + (pts + (xy 393.7 26.67) (xy 397.51 26.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9497863c-b7d1-44e4-b16e-88655b123665") + ) + (wire + (pts + (xy 67.31 93.98) (xy 67.31 97.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "955273e5-58c7-481b-88da-39729365c4b2") + ) + (wire + (pts + (xy 297.18 175.26) (xy 297.18 177.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "95b620ac-fbb9-4700-b083-83d9d171d66a") + ) + (wire + (pts + (xy 288.29 201.93) (xy 290.83 201.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "95c9ae1c-45e3-4161-9730-b3a72471ba96") + ) + (wire + (pts + (xy 353.06 43.18) (xy 332.74 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "95f85d8a-1f4e-4e3f-bc1f-22c10c6e381c") + ) + (wire + (pts + (xy 344.17 82.55) (xy 344.17 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "95f8d69a-35cd-4d65-987d-1c1de028da27") + ) + (wire + (pts + (xy 109.22 44.45) (xy 120.65 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "96077e41-3b9e-46ef-9d64-f9c0b2df8640") + ) + (wire + (pts + (xy 365.76 201.93) (xy 364.49 201.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "960bf62d-c98b-47c8-bb82-0f8d7fab0564") + ) + (wire + (pts + (xy 153.67 204.47) (xy 158.75 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "96a40230-2f17-4774-ac3e-ab1cbd72d24b") + ) + (wire + (pts + (xy 194.31 187.96) (xy 200.66 187.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "96b9fb51-a8c1-48f1-a795-3b0d535a5723") + ) + (wire + (pts + (xy 274.32 262.89) (xy 279.4 262.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "974f2b99-03d3-468e-97ab-5ca59c93ea87") + ) + (wire + (pts + (xy 353.06 88.9) (xy 358.14 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "978e4093-a98a-4735-b592-c58ae88d9549") + ) + (wire + (pts + (xy 308.61 34.29) (xy 308.61 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "978f5807-f879-4a7a-96f4-e7f659efeff2") + ) + (wire + (pts + (xy 303.53 101.6) (xy 303.53 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9841d429-bc98-41f9-a614-e13adb044f85") + ) + (wire + (pts + (xy 68.58 33.02) (xy 67.31 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "999c44dd-1c7a-408f-a753-8d7b195fae22") + ) + (wire + (pts + (xy 308.61 72.39) (xy 308.61 71.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "99ff5c4b-ddaf-4393-ae30-48f5f7ef5e0e") + ) + (wire + (pts + (xy 308.61 213.36) (xy 295.91 213.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9a31e0c8-2bd4-4da8-aea3-5a39a80f5847") + ) + (wire + (pts + (xy 167.64 224.79) (xy 167.64 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9a5c20d6-ed3a-435b-ac3d-c2b419208534") + ) + (wire + (pts + (xy 257.81 262.89) (xy 260.35 262.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9af8e77f-b056-49bc-8a64-527b59e751b5") + ) + (wire + (pts + (xy 264.16 189.23) (xy 267.97 189.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9b55b8ff-fab5-4678-b2d1-163007eb8537") + ) + (wire + (pts + (xy 295.91 213.36) (xy 295.91 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9b6e95e2-08bd-41f8-b7bd-d596d64e1478") + ) + (wire + (pts + (xy 119.38 85.09) (xy 119.38 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9b6f5219-d695-4235-9cd3-71d2f1937920") + ) + (wire + (pts + (xy 60.96 242.57) (xy 105.41 242.57) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9bbc7ddc-b5bc-4766-b1d3-f16ad51d99a1") + ) + (wire + (pts + (xy 57.15 58.42) (xy 53.34 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9c38eee9-531f-414a-a4ff-2c4019fd1402") + ) + (wire + (pts + (xy 118.11 266.7) (xy 124.46 266.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9dde27ef-d46f-4ae7-8442-97233cd8bc3f") + ) + (wire + (pts + (xy 326.39 22.86) (xy 326.39 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9ddf2e48-2c55-4b86-9171-50e86e8faaeb") + ) + (wire + (pts + (xy 308.61 58.42) (xy 309.88 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9e0de8c9-9fc2-4eb2-bb89-f0fbbad1420b") + ) + (wire + (pts + (xy 405.13 26.67) (xy 406.4 26.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9e682906-d407-4a63-81b5-5dda5a664b83") + ) + (wire + (pts + (xy 167.64 238.76) (xy 167.64 252.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9e8d8469-dafd-4f6c-9470-40d179cb2d7d") + ) + (wire + (pts + (xy 76.2 203.2) (xy 76.2 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9f243148-e71e-41c7-a96b-dd11c857af2c") + ) + (wire + (pts + (xy 327.66 58.42) (xy 326.39 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9f741997-06bb-4d00-9ccd-f3323433c857") + ) + (wire + (pts + (xy 120.65 224.79) (xy 120.65 261.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9f94f234-c7f3-4c78-903c-fd5b40e214b2") + ) + (wire + (pts + (xy 128.27 124.46) (xy 133.35 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9fd870f4-1cc9-4212-892d-66a24f1f2d86") + ) + (wire + (pts + (xy 365.76 181.61) (xy 364.49 181.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a01d0bb2-7164-456e-bbad-d74a47b2781c") + ) + (wire + (pts + (xy 157.48 104.14) (xy 158.75 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a0a7ac1c-6eb1-45ac-b20d-af6d90e618e0") + ) + (wire + (pts + (xy 109.22 35.56) (xy 109.22 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a14b8c87-a4d6-42c3-8dd1-5d5a0ebc7bda") + ) + (wire + (pts + (xy 365.76 200.66) (xy 365.76 201.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a17553d9-989e-4dfb-967c-1d0778d6c648") + ) + (wire + (pts + (xy 168.91 124.46) (xy 173.99 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a1ea0b5f-a2a9-4644-9845-fbe168c9635e") + ) + (wire + (pts + (xy 88.9 157.48) (xy 96.52 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a21b2cf7-e5a8-48bc-8e61-05d3f7b6e1b9") + ) + (wire + (pts + (xy 327.66 102.87) (xy 320.04 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a2a7b8d1-bbfb-443c-b067-924962a2d582") + ) + (wire + (pts + (xy 144.78 85.09) (xy 144.78 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a2b8644a-860e-4937-808f-8d0733482775") + ) + (wire + (pts + (xy 158.75 35.56) (xy 158.75 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a33097b4-6607-40a6-8aa1-509e6fddc2bb") + ) + (wire + (pts + (xy 166.37 165.1) (xy 173.99 165.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a3689b7a-468f-4499-b4f1-c426a07452bd") + ) + (wire + (pts + (xy 133.35 137.16) (xy 133.35 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a3cef1b9-bc99-41df-958d-22148f678604") + ) + (wire + (pts + (xy 53.34 12.7) (xy 255.27 12.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a3e9546c-8202-40d4-a020-32d753d7077b") + ) + (wire + (pts + (xy 120.65 44.45) (xy 120.65 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a481e45f-1d9f-445b-bab6-f523e8d089d9") + ) + (wire + (pts + (xy 358.14 34.29) (xy 358.14 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a49e9ff4-4234-43ab-89e5-2b888e651cb5") + ) + (wire + (pts + (xy 358.14 101.6) (xy 358.14 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a5305c7b-a958-49c5-ad82-0917f11a1ca3") + ) + (wire + (pts + (xy 331.47 72.39) (xy 332.74 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a55efa22-7c28-4ebe-8791-e223ee62ca3e") + ) + (wire + (pts + (xy 288.29 58.42) (xy 295.91 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a5a708f4-8c0d-4aa0-b783-a1f9fb0e3a95") + ) + (wire + (pts + (xy 153.67 73.66) (xy 153.67 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a6353919-92be-46e3-85e3-4623cafe5f2b") + ) + (wire + (pts + (xy 353.06 72.39) (xy 332.74 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a6662442-f978-43f7-ac09-99254680027a") + ) + (wire + (pts + (xy 132.08 96.52) (xy 133.35 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a6a30b8e-0da0-4a04-b65f-2f4d143bc150") + ) + (wire + (pts + (xy 132.08 170.18) (xy 133.35 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a7087f73-ce32-4602-ad4e-1b85c67990bf") + ) + (wire + (pts + (xy 120.65 171.45) (xy 109.22 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a72c7cb8-5b33-4a40-87bd-d2f1eaf32949") + ) + (wire + (pts + (xy 303.53 71.12) (xy 303.53 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a8f32861-b4e8-4aaa-9be7-54124f546f94") + ) + (wire + (pts + (xy 109.22 124.46) (xy 110.49 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a8fd7f73-0793-4435-b1b4-decb7a092482") + ) + (wire + (pts + (xy 356.87 34.29) (xy 358.14 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a937c218-82d4-457e-bc32-ec976887ccc9") + ) + (wire + (pts + (xy 133.35 195.58) (xy 133.35 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a9485a60-f149-4e45-bb23-b48c7352afc8") + ) + (wire + (pts + (xy 109.22 30.48) (xy 110.49 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a9dfd807-82b4-49af-8fec-d0b3635602b3") + ) + (wire + (pts + (xy 208.28 187.96) (xy 212.09 187.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a9e42290-4e47-426c-8518-2d20a4b0dbf5") + ) + (wire + (pts + (xy 144.78 270.51) (xy 144.78 264.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aa090460-8da6-4230-8535-0a3d42becebb") + ) + (wire + (pts + (xy 12.7 63.5) (xy 16.51 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aa83c5ba-0370-4a44-8890-57124f0164a2") + ) + (wire + (pts + (xy 267.97 91.44) (xy 266.7 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ab8377b9-1beb-441e-9520-9510c14de240") + ) + (wire + (pts + (xy 53.34 27.94) (xy 53.34 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ab8aae7f-b6e0-4e79-902b-5bc1fce33bd1") + ) + (wire + (pts + (xy 128.27 157.48) (xy 127 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ab9244d6-cc11-404b-8083-665c4e5dc61a") + ) + (wire + (pts + (xy 356.87 101.6) (xy 358.14 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ab972f17-cf01-4413-8f2e-21874488a549") + ) + (wire + (pts + (xy 255.27 12.7) (xy 255.27 26.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "abbb28a2-fd39-4c96-a1f8-bf300795ef79") + ) + (wire + (pts + (xy 368.3 29.21) (xy 373.38 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "abe49012-551c-4377-8075-f09c41484d12") + ) + (wire + (pts + (xy 166.37 132.08) (xy 173.99 132.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ac17461d-ba51-4022-9ca8-981e0c226d6e") + ) + (wire + (pts + (xy 300.99 224.79) (xy 300.99 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ace868be-9d37-4f8d-a54a-050dc2573407") + ) + (wire + (pts + (xy 331.47 43.18) (xy 332.74 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ad942112-a2a1-4fc5-ae0a-3b1dba43916d") + ) + (wire + (pts + (xy 119.38 24.13) (xy 119.38 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ae0b362f-9bd0-4e39-9048-ad562f85d335") + ) + (wire + (pts + (xy 124.46 261.62) (xy 120.65 261.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ae4feeb4-1207-4dce-abfc-1f2815d39274") + ) + (wire + (pts + (xy 158.75 195.58) (xy 158.75 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aed36059-c920-4311-a1da-782e3f49351b") + ) + (wire + (pts + (xy 300.99 209.55) (xy 300.99 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aef28547-d720-4728-9a97-1a161d14a5ba") + ) + (wire + (pts + (xy 331.47 95.25) (xy 331.47 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aefd08e7-0460-4f33-b6b8-a66ad9f668a8") + ) + (wire + (pts + (xy 368.3 36.83) (xy 373.38 36.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "af3a0003-85f6-4224-8f8e-4e1e7c7ebdc4") + ) + (wire + (pts + (xy 158.75 203.2) (xy 158.75 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "afa5d131-ba3f-4f7d-ae30-9f97e1e7b039") + ) + (wire + (pts + (xy 152.4 118.11) (xy 152.4 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "afdb64c7-6592-40da-a930-df3366c3037c") + ) + (wire + (pts + (xy 351.79 82.55) (xy 351.79 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "afe18a0c-e296-4f6c-9eec-b836df86f7b0") + ) + (wire + (pts + (xy 307.34 43.18) (xy 308.61 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b118a72c-60aa-4138-9494-aebea8c1fde6") + ) + (wire + (pts + (xy 327.66 58.42) (xy 332.74 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b281b849-a1af-47f6-9019-fb12575774c2") + ) + (wire + (pts + (xy 44.45 271.78) (xy 46.99 271.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b2a2f93c-b9fb-4dba-99dc-f7ac052b9c80") + ) + (wire + (pts + (xy 318.77 22.86) (xy 318.77 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b32074d3-a561-48f0-afc9-2d254504e33e") + ) + (wire + (pts + (xy 353.06 58.42) (xy 358.14 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b32f4966-b12d-4d09-9dd7-2a35e5a6e7bb") + ) + (wire + (pts + (xy 152.4 85.09) (xy 152.4 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b35c32c5-fcac-4cd2-a46f-8b0c2d6d7557") + ) + (wire + (pts + (xy 186.69 171.45) (xy 158.75 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b3beabed-c64f-43d4-ac56-2c27480c65af") + ) + (wire + (pts + (xy 157.48 203.2) (xy 158.75 203.2) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b41e5ef5-a093-4b44-8fe9-7e207e4dc073") + ) + (wire + (pts + (xy 353.06 43.18) (xy 356.87 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b41f189f-823a-415f-bf63-9e612b846b1f") + ) + (wire + (pts + (xy 158.75 190.5) (xy 161.29 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b478bbfe-f73e-402a-86e2-1af2337576d0") + ) + (wire + (pts + (xy 74.93 264.16) (xy 77.47 264.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b48251be-e17a-470c-b0eb-6b79198bce4a") + ) + (wire + (pts + (xy 128.27 104.14) (xy 128.27 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b4fbcc4f-9f9e-4ba0-8470-6ed8170e617d") + ) + (wire + (pts + (xy 118.11 124.46) (xy 119.38 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b5261094-d089-4bd0-abfe-34afc6181138") + ) + (wire + (pts + (xy 326.39 224.79) (xy 300.99 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b5b8cb7e-3dfd-46ab-b2a0-c85beaec3a2c") + ) + (wire + (pts + (xy 132.08 74.93) (xy 133.35 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b64f6c7b-fbd3-4b17-9e62-6dcba378e406") + ) + (wire + (pts + (xy 261.62 184.15) (xy 267.97 184.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b65ceaf9-020e-4dfb-86ac-77aa5c7fa756") + ) + (wire + (pts + (xy 128.27 162.56) (xy 128.27 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b6dd885f-7c6e-4471-885d-48aeaa829318") + ) + (wire + (pts + (xy 406.4 55.88) (xy 406.4 26.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b6e83b97-6535-4fdb-82aa-c9c7fc27a6f5") + ) + (wire + (pts + (xy 327.66 41.91) (xy 327.66 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b6f5d49b-aa65-4bae-9043-38edebd26dfb") + ) + (wire + (pts + (xy 157.48 73.66) (xy 157.48 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b77a4d7e-b944-459f-b431-9a5e26cf01f9") + ) + (wire + (pts + (xy 107.95 170.18) (xy 109.22 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b7f45742-dfbe-45ca-91aa-cf850eeda440") + ) + (wire + (pts + (xy 109.22 138.43) (xy 120.65 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b8d366be-12b0-403e-91cf-cd5dd0cbee4a") + ) + (wire + (pts + (xy 132.08 162.56) (xy 133.35 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b9aa4136-bdf0-47d3-b7c0-71096e038a54") + ) + (wire + (pts + (xy 166.37 162.56) (xy 173.99 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bc221c05-5809-4398-a69c-cd124ba3c497") + ) + (wire + (pts + (xy 128.27 44.45) (xy 120.65 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bcfa447f-01e7-4ea4-880d-fd783e74ff0d") + ) + (wire + (pts + (xy 356.87 71.12) (xy 358.14 71.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bda48b00-1ada-484b-8a67-b0ebfcce9fe3") + ) + (wire + (pts + (xy 109.22 195.58) (xy 109.22 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bdaece21-1f5c-49f2-a7ec-8be28530823f") + ) + (wire + (pts + (xy 266.7 60.96) (xy 266.7 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bdd61e3a-2ab9-4bfa-b577-967326bb556d") + ) + (wire + (pts + (xy 275.59 41.91) (xy 275.59 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "be2d2b27-1f30-429c-b58e-782e4100549d") + ) + (wire + (pts + (xy 317.5 29.21) (xy 318.77 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bf3b6b61-b823-48cb-95db-cfccb683dbd1") + ) + (wire + (pts + (xy 53.34 187.96) (xy 53.34 222.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bfd6a5ad-ade9-4fc5-826b-fef87b68d714") + ) + (wire + (pts + (xy 327.66 63.5) (xy 327.66 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c047db87-cee8-46e7-b90f-7ca04654329e") + ) + (wire + (pts + (xy 365.76 182.88) (xy 365.76 181.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c0c55cfa-74c7-40af-8fa6-3acf078678a5") + ) + (wire + (pts + (xy 356.87 63.5) (xy 358.14 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c11d7039-28e0-49ad-ad7e-038220910fe2") + ) + (wire + (pts + (xy 167.64 224.79) (xy 212.09 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c191be2b-3203-45c0-b6e0-540bf66909e3") + ) + (wire + (pts + (xy 158.75 138.43) (xy 157.48 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c1c67d50-10c3-44d8-82cb-e2eeb5f2f3d4") + ) + (wire + (pts + (xy 222.25 262.89) (xy 232.41 262.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c218d28a-ff94-48e5-adaf-472d78c22516") + ) + (wire + (pts + (xy 109.22 66.04) (xy 109.22 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c222a776-5eaf-44e4-8789-97ef8564f014") + ) + (wire + (pts + (xy 104.14 105.41) (xy 109.22 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c2365da3-e4b3-430f-826b-975a843ad638") + ) + (wire + (pts + (xy 331.47 102.87) (xy 332.74 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c29dd966-8af4-4461-a1d5-a0d89279d59e") + ) + (wire + (pts + (xy 368.3 34.29) (xy 373.38 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c2c86660-21e2-47e4-ab34-598149daaf22") + ) + (wire + (pts + (xy 153.67 270.51) (xy 157.48 270.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c310f088-bcd5-469c-a6fd-ad50baa4fd5b") + ) + (wire + (pts + (xy 320.04 72.39) (xy 320.04 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c345afa5-aee3-4d2d-b5fa-f827e0663d39") + ) + (wire + (pts + (xy 120.65 204.47) (xy 120.65 205.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c4772298-420c-4cb8-8897-c2711e2213ce") + ) + (wire + (pts + (xy 104.14 43.18) (xy 104.14 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c4cb0bb4-086c-46e1-aaae-d8f47c3b2f93") + ) + (wire + (pts + (xy 368.3 63.5) (xy 373.38 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c4f3e3a1-86d4-4947-8180-8fae3c8c4baf") + ) + (wire + (pts + (xy 344.17 22.86) (xy 344.17 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c51254f1-e6c0-4cce-be47-92acab3e22c2") + ) + (wire + (pts + (xy 260.35 270.51) (xy 267.97 270.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c51bba16-774e-4c5e-846a-43078ce5737b") + ) + (wire + (pts + (xy 120.65 138.43) (xy 120.65 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c532f309-6580-4da2-a1ef-63ac86dd0835") + ) + (wire + (pts + (xy 275.59 72.39) (xy 303.53 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c5b0fd2a-49be-49e9-aab4-3526a1c39564") + ) + (wire + (pts + (xy 158.75 124.46) (xy 161.29 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c638ad1c-6920-4d0b-9e09-9b3d2f90755a") + ) + (wire + (pts + (xy 158.75 60.96) (xy 161.29 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c68e7e76-eb03-401f-8b49-51d179fef956") + ) + (wire + (pts + (xy 320.04 102.87) (xy 320.04 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c8845da5-186a-4461-aed5-6e6b0e24a0ea") + ) + (wire + (pts + (xy 356.87 201.93) (xy 350.52 201.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c8f19f8a-a377-4701-9b67-a427d14853ca") + ) + (wire + (pts + (xy 168.91 66.04) (xy 173.99 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c9291907-744e-4c6c-9bbb-2a6b0cc0df9e") + ) + (wire + (pts + (xy 393.7 91.44) (xy 394.97 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c98eed74-ef86-4fe4-8160-49d4f939af87") + ) + (wire + (pts + (xy 386.08 101.6) (xy 386.08 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c9ee3b40-0cd2-47f9-a99c-0ce6d8d30d05") + ) + (wire + (pts + (xy 290.83 210.82) (xy 290.83 215.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ca30a92d-5b69-48d6-a767-c0b7081a7e1b") + ) + (wire + (pts + (xy 109.22 91.44) (xy 110.49 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ca37b2c0-9326-470a-800f-cb9a931db359") + ) + (wire + (pts + (xy 153.67 43.18) (xy 153.67 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cac6fd61-e397-4a44-ad17-493e050cfc28") + ) + (wire + (pts + (xy 356.87 181.61) (xy 350.52 181.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cb6c89b1-f276-4a43-9249-61894bbd781b") + ) + (wire + (pts + (xy 127 151.13) (xy 127 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cb7ee9bb-acdd-47f0-bf3d-c401309747da") + ) + (wire + (pts + (xy 34.29 234.95) (xy 53.34 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ccb516ee-7e2c-4395-a70b-0b0d25e8f62c") + ) + (wire + (pts + (xy 194.31 93.98) (xy 195.58 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ccc623b6-8978-4a36-b08c-c0b19fe26383") + ) + (wire + (pts + (xy 194.31 160.02) (xy 195.58 160.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cee446b6-5a69-4463-94e8-32818cfa7680") + ) + (wire + (pts + (xy 133.35 30.48) (xy 135.89 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cf2396ce-e7fc-40a9-bdcc-75d381ffb851") + ) + (wire + (pts + (xy 153.67 137.16) (xy 153.67 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d0ccc08f-eafd-4aba-8305-70fae5cdbbf2") + ) + (wire + (pts + (xy 12.7 33.02) (xy 16.51 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d0d8080e-c873-49e8-bcab-85cd32863c9a") + ) + (wire + (pts + (xy 212.09 27.94) (xy 212.09 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d0f3117c-cba3-4890-af38-27531b241eea") + ) + (wire + (pts + (xy 168.91 68.58) (xy 173.99 68.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d12774ba-7e6b-49c1-8b7b-5f077d457b42") + ) + (wire + (pts + (xy 133.35 170.18) (xy 133.35 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d141f7f2-fff6-438d-9e0b-fb351307a975") + ) + (wire + (pts + (xy 365.76 182.88) (xy 368.3 182.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d172ffd9-92ba-478d-b3bb-49e5e0dc81e4") + ) + (wire + (pts + (xy 157.48 96.52) (xy 158.75 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d1bfbaf4-0156-4727-b5b1-f7e76d07f81d") + ) + (wire + (pts + (xy 358.14 88.9) (xy 360.68 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d215656a-5a3a-443a-a757-e473ecc4f84e") + ) + (wire + (pts + (xy 107.95 35.56) (xy 109.22 35.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d282ce34-6a73-400f-baba-dcf5d2682118") + ) + (wire + (pts + (xy 132.08 43.18) (xy 132.08 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d29c3baa-5b15-44ca-be72-f4dd42d986cf") + ) + (wire + (pts + (xy 144.78 118.11) (xy 144.78 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d3adb404-b92c-4359-8163-1676662e4ff6") + ) + (wire + (pts + (xy 303.53 102.87) (xy 308.61 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d487f0d3-b63a-4a26-85e9-f4e17b243228") + ) + (wire + (pts + (xy 194.31 63.5) (xy 195.58 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d527fb43-922f-4440-93ad-7a26a845c59f") + ) + (wire + (pts + (xy 275.59 101.6) (xy 275.59 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d53017c3-f4b3-4dde-9454-094d9424cfe1") + ) + (wire + (pts + (xy 195.58 63.5) (xy 195.58 69.85) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d53bec65-7c1b-4af2-a143-f4386f0f7bae") + ) + (wire + (pts + (xy 186.69 105.41) (xy 158.75 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d5af6987-55cc-4754-b25f-3859ee086c8e") + ) + (wire + (pts + (xy 353.06 41.91) (xy 353.06 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d5f17ad6-b91f-4a89-ba68-7ef6db682de8") + ) + (wire + (pts + (xy 158.75 44.45) (xy 186.69 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d614d969-87ac-4417-82f1-0925db0754d4") + ) + (wire + (pts + (xy 186.69 170.18) (xy 186.69 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d66a1de0-3fa8-4ee5-a732-cd95ad0571c2") + ) + (wire + (pts + (xy 53.34 121.92) (xy 53.34 154.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d699dc59-5601-4099-83ba-ca1c53567979") + ) + (wire + (pts + (xy 120.65 105.41) (xy 120.65 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d6e49fa4-07d5-4791-bbcb-3b061aad4d88") + ) + (wire + (pts + (xy 213.36 31.75) (xy 215.9 31.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d737014a-9810-44e2-a875-dcd340d1a7c4") + ) + (wire + (pts + (xy 327.66 34.29) (xy 327.66 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d7aee198-9451-4c7c-bef7-daf7e97181c6") + ) + (wire + (pts + (xy 128.27 105.41) (xy 133.35 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d7c726ed-056c-4d1b-9197-31e2de1271f3") + ) + (wire + (pts + (xy 104.14 162.56) (xy 104.14 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d85d5617-cee1-4d03-af58-a1965df9565c") + ) + (wire + (pts + (xy 307.34 34.29) (xy 308.61 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d86e441b-f4b7-4c91-9141-018224252791") + ) + (wire + (pts + (xy 153.67 138.43) (xy 157.48 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d8e2ea9c-5e38-447a-a762-339cd95aafaf") + ) + (wire + (pts + (xy 104.14 73.66) (xy 104.14 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d961d6cc-569a-4314-a7a2-2dc747866dec") + ) + (wire + (pts + (xy 297.18 162.56) (xy 297.18 167.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "da081548-885c-4204-9d87-d1b9462c00e5") + ) + (wire + (pts + (xy 60.96 236.22) (xy 60.96 242.57) + ) + (stroke + (width 0) + (type default) + ) + (uuid "da090def-2bd9-4b44-96ba-2be21d49a038") + ) + (wire + (pts + (xy 133.35 190.5) (xy 135.89 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "da94cb8b-b8b4-412b-8ad0-905c526213b8") + ) + (wire + (pts + (xy 342.9 88.9) (xy 344.17 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "daacc7b5-c28f-40c3-934a-f257facb710f") + ) + (wire + (pts + (xy 109.22 171.45) (xy 109.22 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "db6e7d71-d527-463a-b2fe-47f7769d8277") + ) + (wire + (pts + (xy 107.95 129.54) (xy 109.22 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dc50fb6c-5068-4fd2-9d13-65cc384fcc58") + ) + (wire + (pts + (xy 144.78 252.73) (xy 144.78 259.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dc910c3e-2f67-46e2-aada-1dd2079b036d") + ) + (wire + (pts + (xy 332.74 101.6) (xy 332.74 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dc9a8626-d030-40c3-b307-29a2555c9e98") + ) + (wire + (pts + (xy 104.14 138.43) (xy 107.95 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dc9bea4e-231a-436d-8948-9769744194f8") + ) + (wire + (pts + (xy 127 85.09) (xy 127 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dcb5aee1-d530-45a0-929b-e23a7efddcb6") + ) + (wire + (pts + (xy 303.53 43.18) (xy 307.34 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dcca93f9-d5bf-4efe-83a4-a41a9cb1ccf9") + ) + (wire + (pts + (xy 320.04 102.87) (xy 308.61 102.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dd01f430-2c4d-4010-8fa8-14958edbd28e") + ) + (wire + (pts + (xy 68.58 63.5) (xy 67.31 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dd235bd6-3e09-4ca0-b388-72cb82894a6c") + ) + (wire + (pts + (xy 386.08 71.12) (xy 386.08 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dd92984e-01e3-4672-bae5-a77f1fbfa053") + ) + (wire + (pts + (xy 256.54 55.88) (xy 255.27 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dda7858e-051e-4bb4-b5bd-f441fe0d89a4") + ) + (wire + (pts + (xy 332.74 88.9) (xy 335.28 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "de604cd6-36b1-485a-9db9-02c839790c52") + ) + (wire + (pts + (xy 158.75 73.66) (xy 158.75 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "de8672d4-ac76-46d8-8981-e26e71c0b52f") + ) + (wire + (pts + (xy 107.95 43.18) (xy 107.95 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "deee5f43-178b-4e11-a278-ad7f9a8f2bb2") + ) + (wire + (pts + (xy 350.52 201.93) (xy 350.52 200.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "df96c854-a480-4d80-966e-090eae0cf3bc") + ) + (wire + (pts + (xy 153.67 91.44) (xy 158.75 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dfbc62e7-1685-401d-8345-da92796a4aa0") + ) + (wire + (pts + (xy 212.09 154.94) (xy 212.09 187.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dfd84416-1876-4777-a268-cc860bb6de6e") + ) + (wire + (pts + (xy 353.06 34.29) (xy 353.06 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e00233c9-896f-49f0-ac00-a4558fca317d") + ) + (wire + (pts + (xy 68.58 154.94) (xy 64.77 154.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e009fa00-3bc7-43f7-8099-9c7bd60de697") + ) + (wire + (pts + (xy 107.95 44.45) (xy 109.22 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e00bb7db-b400-4ae9-81cd-5b92a4caad9e") + ) + (wire + (pts + (xy 389.89 240.03) (xy 387.35 240.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e0832e88-135d-4283-97f1-6e34ee7af98c") + ) + (wire + (pts + (xy 153.67 195.58) (xy 153.67 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e0da4729-25df-4703-9441-73cb3ded4296") + ) + (wire + (pts + (xy 327.66 88.9) (xy 332.74 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e17a9a5b-d0d2-4745-815b-f6d702356462") + ) + (wire + (pts + (xy 133.35 96.52) (xy 133.35 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e1b1f515-b797-4cd7-851c-6de33702c22a") + ) + (wire + (pts + (xy 132.08 129.54) (xy 133.35 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e22cf6d9-4884-4af8-a0bf-e207de704cad") + ) + (wire + (pts + (xy 158.75 30.48) (xy 161.29 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e2356bc3-990b-4c02-91dd-17cb3d4159a7") + ) + (wire + (pts + (xy 157.48 170.18) (xy 158.75 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e262a4d1-b492-41cd-a5c8-ac63c78d971f") + ) + (wire + (pts + (xy 144.78 24.13) (xy 144.78 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e287b035-ae95-4841-8347-25e816c97722") + ) + (wire + (pts + (xy 88.9 60.96) (xy 96.52 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e29d8415-9ee3-481f-b570-aedaa6f2a28b") + ) + (wire + (pts + (xy 288.29 29.21) (xy 295.91 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e43bbb64-3ddd-4867-b508-8250c420ed57") + ) + (wire + (pts + (xy 353.06 93.98) (xy 353.06 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e48ea045-ecd3-47f0-8148-f8e4035cf461") + ) + (wire + (pts + (xy 308.61 102.87) (xy 308.61 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e4c337d7-04a9-4e0f-bb4f-0ff53ab951a8") + ) + (wire + (pts + (xy 308.61 63.5) (xy 308.61 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e4caf65b-2b99-4475-a083-7e1668d42ca6") + ) + (wire + (pts + (xy 331.47 35.56) (xy 331.47 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e4cbbeaa-0123-419d-8889-59fca95d4f1a") + ) + (wire + (pts + (xy 212.09 146.05) (xy 212.09 154.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e5b575c6-bce0-4640-9062-983a12473953") + ) + (wire + (pts + (xy 128.27 170.18) (xy 128.27 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e652183b-5811-4b30-a601-2263e7cc587d") + ) + (wire + (pts + (xy 133.35 157.48) (xy 135.89 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e6a70034-3ca8-47ea-b4a6-a1027ac6f7fa") + ) + (wire + (pts + (xy 109.22 190.5) (xy 110.49 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e712d8da-afab-4f5b-8ee2-f01a717889c6") + ) + (wire + (pts + (xy 386.08 43.18) (xy 358.14 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e7159eb4-f19f-4091-8f1c-9e3a71116ce5") + ) + (wire + (pts + (xy 332.74 41.91) (xy 332.74 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e7248c97-13c0-4bb1-b0e0-96ad7ef3a034") + ) + (wire + (pts + (xy 353.06 63.5) (xy 353.06 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e731dfa0-41c4-4512-b90d-63674e8532c4") + ) + (wire + (pts + (xy 332.74 71.12) (xy 332.74 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e78aff2f-7e14-4dfb-b7a9-9b932c83a3bf") + ) + (wire + (pts + (xy 331.47 34.29) (xy 332.74 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e79a54ce-b480-4c7b-9c9d-97aa6efa5ca4") + ) + (wire + (pts + (xy 153.67 35.56) (xy 153.67 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e7e88604-3cfe-4fd9-91ae-e34b88ce3936") + ) + (wire + (pts + (xy 133.35 60.96) (xy 135.89 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e88a0659-1f2a-4526-afcf-aa3cc1893042") + ) + (wire + (pts + (xy 158.75 138.43) (xy 186.69 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e8c99727-2d12-43e8-9f08-caca637b2983") + ) + (wire + (pts + (xy 326.39 52.07) (xy 326.39 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ea007331-faa3-41a4-a3dd-d75e530493f2") + ) + (wire + (pts + (xy 128.27 91.44) (xy 133.35 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ea3b1d33-a3eb-48c0-8d7a-a849ae1feaf5") + ) + (wire + (pts + (xy 143.51 190.5) (xy 144.78 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eaef49b8-7378-4577-8c6f-560225c8799a") + ) + (wire + (pts + (xy 194.31 154.94) (xy 200.66 154.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eb5fe744-f84a-417f-ba8f-02751bc3d342") + ) + (wire + (pts + (xy 104.14 137.16) (xy 104.14 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eb70632f-d791-4e20-b9a0-2d569c83abbd") + ) + (wire + (pts + (xy 212.09 58.42) (xy 212.09 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ebef4726-3c28-4a18-ac60-cc5ba4d473ed") + ) + (wire + (pts + (xy 168.91 91.44) (xy 173.99 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ebf64746-9c53-41bc-8e13-0856d876443e") + ) + (wire + (pts + (xy 353.06 71.12) (xy 353.06 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ec00dbab-590c-4520-8c42-3c6736ce3ff0") + ) + (wire + (pts + (xy 143.51 30.48) (xy 144.78 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ec3ddac4-05d2-4604-8279-6a614fffbf57") + ) + (wire + (pts + (xy 109.22 60.96) (xy 110.49 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ec7854a7-820a-475e-a06b-ab849b6029a1") + ) + (wire + (pts + (xy 267.97 31.75) (xy 266.7 31.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ede7a10c-af52-4bf8-84a3-d3091abfcc49") + ) + (wire + (pts + (xy 128.27 60.96) (xy 127 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ee53f869-e200-4fcd-8326-204a2cdb72b8") + ) + (wire + (pts + (xy 53.34 255.27) (xy 54.61 255.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ef1c1028-4dd5-4b5b-a0a7-d42003643d15") + ) + (wire + (pts + (xy 88.9 190.5) (xy 96.52 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ef5f3a3d-9122-46f8-9920-53a5062dfdf2") + ) + (wire + (pts + (xy 157.48 43.18) (xy 157.48 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f044fa13-b9cc-4bc9-9191-44f0a790eeb1") + ) + (wire + (pts + (xy 279.4 262.89) (xy 287.02 262.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f0c4ad81-7ec5-496d-a526-63c199bbb323") + ) + (wire + (pts + (xy 60.96 228.6) (xy 60.96 227.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f1229856-937f-4c7e-b0aa-d23731476352") + ) + (wire + (pts + (xy 350.52 190.5) (xy 344.17 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f129c435-6c1e-4318-bfc4-5138e799c157") + ) + (wire + (pts + (xy 303.53 63.5) (xy 303.53 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f138e190-7dad-4d8d-ba2c-b01775fa063f") + ) + (wire + (pts + (xy 76.2 204.47) (xy 104.14 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f13c2016-b812-4363-9361-91862cc77a8c") + ) + (wire + (pts + (xy 54.61 271.78) (xy 54.61 266.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f14c1d66-f5a2-4f3d-bf81-5a5d31b0671d") + ) + (wire + (pts + (xy 290.83 223.52) (xy 290.83 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f2bba19f-18af-46ce-b177-dc798cf336cd") + ) + (wire + (pts + (xy 153.67 124.46) (xy 152.4 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f2c25e65-8e54-446d-9352-a5e25b8c432c") + ) + (wire + (pts + (xy 232.41 262.89) (xy 242.57 262.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f33c7404-00a6-461f-a6c5-0f51870c1bdc") + ) + (wire + (pts + (xy 120.65 171.45) (xy 120.65 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f43fdcd3-6afa-4c37-b3ff-2fe31259c36d") + ) + (wire + (pts + (xy 292.1 198.12) (xy 308.61 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f44d5e7b-67ff-42ba-9051-ef95ab9a459d") + ) + (wire + (pts + (xy 393.7 31.75) (xy 394.97 31.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f490754d-12e9-4cbf-9869-cf2eb2b5d4e7") + ) + (wire + (pts + (xy 88.9 224.79) (xy 96.52 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f4e3cdfb-7b0e-49f5-b1e6-90002b90d886") + ) + (wire + (pts + (xy 393.7 60.96) (xy 394.97 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f5125822-d3b7-466c-8610-3ae44e1ca4fc") + ) + (wire + (pts + (xy 186.69 204.47) (xy 158.75 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f520d277-3844-4855-894b-f06b4650d468") + ) + (wire + (pts + (xy 267.97 270.51) (xy 279.4 270.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f558dde1-f011-45d6-a876-2d4746525f80") + ) + (wire + (pts + (xy 168.91 195.58) (xy 173.99 195.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f5638b1e-237e-4cff-8683-c229b220aaeb") + ) + (wire + (pts + (xy 109.22 157.48) (xy 110.49 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f5b11aa4-28d5-47a7-a51d-1fd0f0aa1568") + ) + (wire + (pts + (xy 365.76 199.39) (xy 365.76 200.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f6112106-133d-41b1-aa0a-853286324842") + ) + (wire + (pts + (xy 308.61 43.18) (xy 308.61 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f6aabd56-d424-48a0-825e-daf647d23214") + ) + (wire + (pts + (xy 133.35 74.93) (xy 153.67 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f7f99557-bfe4-41fa-a29a-619db8457f3e") + ) + (wire + (pts + (xy 104.14 224.79) (xy 105.41 224.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f80b2dc0-d313-4eaf-8d37-567867e133bb") + ) + (wire + (pts + (xy 133.35 138.43) (xy 153.67 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f954c69e-8a51-42d3-89f5-9fde3bd90d29") + ) + (wire + (pts + (xy 261.62 186.69) (xy 267.97 186.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f9a88cf3-ab38-4aee-ae1e-98a341e7e2c6") + ) + (wire + (pts + (xy 133.35 124.46) (xy 135.89 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f9ca0db0-edf7-4ece-9c8e-06d167172fa3") + ) + (wire + (pts + (xy 364.49 199.39) (xy 365.76 199.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fa135eaf-247b-4d3e-8ea3-47f7b98a2225") + ) + (wire + (pts + (xy 104.14 91.44) (xy 109.22 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fa41e5bf-be4c-4ffe-9fc2-30b02063d5af") + ) + (wire + (pts + (xy 153.67 91.44) (xy 152.4 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fa547ea9-7c45-43b5-ab45-8daaeea5b1e5") + ) + (wire + (pts + (xy 394.97 60.96) (xy 394.97 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fa97231c-f1ad-4996-a9b3-6f9b6ba497d0") + ) + (wire + (pts + (xy 152.4 151.13) (xy 152.4 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fb2c183b-5a96-4d81-8780-7ccc1521d929") + ) + (wire + (pts + (xy 127 118.11) (xy 127 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fb480108-75a7-4fe0-8a47-8e418b5eae91") + ) + (wire + (pts + (xy 76.2 73.66) (xy 76.2 74.93) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fb59d010-e3e9-4b4f-bda3-e163c25677f5") + ) + (wire + (pts + (xy 68.58 27.94) (xy 64.77 27.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fba41acc-b750-4229-b719-eed9b0a32a00") + ) + (wire + (pts + (xy 88.9 124.46) (xy 96.52 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fc72cf68-e3cc-435e-9355-58f37c0b3dab") + ) + (wire + (pts + (xy 393.7 86.36) (xy 397.51 86.36) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fd4f286d-de7d-4c59-8791-b4e4f059a348") + ) + (wire + (pts + (xy 118.11 30.48) (xy 119.38 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fd86d81d-e325-45c7-b0d7-5c3b58c07548") + ) + (wire + (pts + (xy 353.06 72.39) (xy 358.14 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fe2139e2-37bd-4dcf-bef4-6efa19bb0ae3") + ) + (wire + (pts + (xy 153.67 157.48) (xy 152.4 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ff02927d-4080-4842-af22-27efed9c2e70") + ) + (wire + (pts + (xy 107.95 96.52) (xy 109.22 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ff0e52c3-30e6-4798-bfc7-886b57105658") + ) + (wire + (pts + (xy 104.14 170.18) (xy 104.14 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ffb16add-aade-4d5b-baee-9d95024b2723") + ) + (rectangle + (start 35.56 247.65) + (end 166.37 284.48) + (stroke + (width 0.5) + (type dash) + (color 194 0 0 1) + ) + (fill + (type none) + ) + (uuid 1dc2a9f5-9c3c-441f-85e8-7c727bcc2768) + ) + (circle + (center 167.64 234.95) + (radius 5.08) + (stroke + (width 0.5) + (type dot) + (color 194 0 0 1) + ) + (fill + (type none) + ) + (uuid 1e9152b3-6b27-4417-a404-201473d1e375) + ) + (circle + (center 34.29 241.3) + (radius 5.08) + (stroke + (width 0.5) + (type dot) + (color 194 0 0 1) + ) + (fill + (type none) + ) + (uuid 5cc10355-770f-463f-a77f-2f623ef8ae84) + ) + (text_box "BPF Band Select" + (exclude_from_sim no) + (at 256.54 153.67 0) + (size 135.89 76.2) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + ) + (uuid "3adc5071-0d47-478c-9196-a2d6d15a9f30") + ) + (text_box "Power" + (exclude_from_sim no) + (at 196.85 255.27 0) + (size 101.6 27.94) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + ) + (uuid "71c26b51-ecc5-4619-8280-19caf2320766") + ) + (text_box "Board mounting holes" + (exclude_from_sim no) + (at 383.54 233.68 0) + (size 22.86 17.78) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left top) + ) + (uuid "f1d6dd69-0318-4348-8d0c-20213ee5a508") + ) + (text "16T T37-0 9\"" + (exclude_from_sim no) + (at 334.264 105.918 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "01ce6250-cf42-4f76-9163-b1bb2614828e") + ) + (text "22T T37-1 12\"\n" + (exclude_from_sim no) + (at 123.698 52.324 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "04ac2df1-ae7e-488c-a7ae-48c2cb013f3b") + ) + (text "34T T37-0 18\"" + (exclude_from_sim no) + (at 105.664 77.724 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "062d2bb7-6cac-49f6-b02a-1d443c085404") + ) + (text "18T T37-10 10\"" + (exclude_from_sim no) + (at 124.206 149.606 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "0d096e1d-dc3f-4332-b4a0-3df0fb5637fc") + ) + (text "34T T37-0 18\"" + (exclude_from_sim no) + (at 132.588 47.244 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "0f5ce337-7693-4395-a0e4-df32d92fe810") + ) + (text "20m" + (exclude_from_sim no) + (at 59.69 85.09 0) + (effects + (font + (size 3 3) + (bold yes) + ) + (justify left bottom) + ) + (uuid "1442a1c7-8713-4ce6-9447-ab9ef28aa01f") + ) + (text "June 1 2024: VK3PE Corrected wire length for L91 and L95\nJuly 30 2024: VK3PE Added some notes\nAugust 25 2024: KI3P Clarified instructions in red box" + (exclude_from_sim no) + (at 196.342 241.3 0) + (effects + (font + (size 3 3) + (color 255 42 21 1) + ) + (justify left) + ) + (uuid "15c44bdc-76a1-44fa-b74b-3c77635a1dae") + ) + (text "Added for backwards compatibility \nwith V010/V011 LPF boards and V012 \nsecond receiver operation. Only \npopulate if using V012 2nd receiver \nor with V010/V011 LPF boards." + (exclude_from_sim no) + (at 77.978 258.318 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + (color 194 0 0 1) + ) + (justify left bottom) + ) + (uuid "16c702d7-6153-4cde-a3dc-e7ff0e869afd") + ) + (text "22T T37-10 12\"" + (exclude_from_sim no) + (at 123.444 116.332 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "1974dbc3-069b-4593-9c92-b01c35a7ab48") + ) + (text "22T T37-0 12\"" + (exclude_from_sim no) + (at 308.61 105.664 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "27333a49-8b94-47ca-b762-1124a927651e") + ) + (text "26T T37-6 14\"" + (exclude_from_sim no) + (at 307.848 45.974 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "36e33092-95ca-4a1a-b06a-e287bd63d195") + ) + (text "17T T37-0 9\"" + (exclude_from_sim no) + (at 106.934 141.224 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "39fe27ba-30fa-4fab-9cc8-1150981532f0") + ) + (text "9T T37-0 5\"\n" + (exclude_from_sim no) + (at 109.474 207.772 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "3a3ef804-98b6-4103-8d9a-916e5363990b") + ) + (text "16T T37-0 9\"\n" + (exclude_from_sim no) + (at 131.064 108.458 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "3c305dec-eeea-4821-a213-e2ef116430ee") + ) + (text "6m" + (exclude_from_sim no) + (at 59.69 184.15 0) + (effects + (font + (size 3 3) + (bold yes) + ) + (justify left bottom) + ) + (uuid "45894874-f2fb-47af-96c7-5a773bc2daa9") + ) + (text "14t FT37-61 14\"" + (exclude_from_sim no) + (at 323.088 19.812 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "46b149cd-d74e-48bc-b56e-42cf72f74d78") + ) + (text "ALL TOROIDS WOUND WITH #28 WIRE 0.32mm" + (exclude_from_sim no) + (at 294.64 121.666 0) + (effects + (font + (size 3 3) + (color 255 27 14 1) + ) + ) + (uuid "4c7e39fd-fc1b-493b-80d5-ffaff26b545b") + ) + (text "27T T37-6 14\"" + (exclude_from_sim no) + (at 123.952 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "5b76859b-42b9-4785-b9e2-b8ca06201421") + ) + (text "38T T37-10 20\"" + (exclude_from_sim no) + (at 322.834 80.772 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "65548de0-06b9-4372-9266-6e42cbf751db") + ) + (text "26T T37-0 14\"" + (exclude_from_sim no) + (at 134.366 77.978 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "68d74f4d-d171-49b7-9bef-ec1bd0990eaf") + ) + (text "13T T37-0 7\"" + (exclude_from_sim no) + (at 134.112 174.498 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "70cb1d48-da91-4e7b-9225-8c7205947b67") + ) + (text "13T T37-0 7\"" + (exclude_from_sim no) + (at 133.35 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "78dca7e5-3277-4dbb-86f0-fab9a49c41a6") + ) + (text "12/10m" + (exclude_from_sim no) + (at 57.15 151.13 0) + (effects + (font + (size 3 3) + (bold yes) + ) + (justify left bottom) + ) + (uuid "85baf692-3338-4c82-a87f-b88da927a0d6") + ) + (text "17T T37-10 11\"" + (exclude_from_sim no) + (at 123.444 181.356 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "8d31bceb-06c2-4a6c-82aa-36e4d7f08e9e") + ) + (text "18T T37-10 10\"" + (exclude_from_sim no) + (at 306.832 75.438 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "8f7c50a6-2e39-4065-8a33-7ceef32ce292") + ) + (text "A2 A1 A0 ADDR\n0 0 0 0x20\n0 0 1 0x21\n0 1 0 0x22\n0 1 1 0x23\n1 0 0 0x24\n1 0 1 0x25\n1 1 0 0x26\n1 1 1 0x27" + (exclude_from_sim no) + (at 269.24 226.06 0) + (effects + (font + (face "Courier New") + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "98858c27-7182-4797-8e06-dbd77df0b0c4") + ) + (text "1.5nF+100p" + (exclude_from_sim no) + (at 321.056 101.6 0) + (effects + (font + (size 1.27 1.27) + (color 255 60 32 1) + ) + ) + (uuid "9a068f12-1f7b-4400-8b29-4b111668bc51") + ) + (text "RFCONTROL SIGNALS:\nRxTx: H=Tx, L=Rx" + (exclude_from_sim no) + (at 259.08 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "ad2b74a4-a849-4c86-bc2f-688e28884bbf") + ) + (text "From BANDS \nconnector on Main" + (exclude_from_sim no) + (at 257.81 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "b1ab3246-c5e5-47ce-8668-62c8adf7b40f") + ) + (text "25T T37-1 13\"" + (exclude_from_sim no) + (at 323.342 50.546 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "b8a2cb38-78e8-4f9e-838b-7d30dfa33733") + ) + (text "ADDRESS SELECT" + (exclude_from_sim no) + (at 267.97 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "c02fc485-a891-44f2-ab34-0cee43ed319f") + ) + (text "21T T37-0 11\"\n" + (exclude_from_sim no) + (at 106.172 108.712 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "c039a6a9-04ea-4b77-843f-799fec957ee2") + ) + (text "30m" + (exclude_from_sim no) + (at 259.08 82.55 0) + (effects + (font + (size 3 3) + (bold yes) + ) + (justify left bottom) + ) + (uuid "c41c2b12-a8cd-4b6c-b6ac-a2af4a22e70a") + ) + (text "16T T37-0 9\"" + (exclude_from_sim no) + (at 108.204 175.006 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "c4a4cb89-8734-4b1e-8afb-088b05d9908a") + ) + (text "17/15m" + (exclude_from_sim no) + (at 59.69 118.11 0) + (effects + (font + (size 3 3) + (bold yes) + ) + (justify left bottom) + ) + (uuid "c57b8cf6-30a1-461e-aa29-a51d47dd2ba7") + ) + (text "Solder JP10 and JP11 closed\nif using V012 LPF boards and\nsingle receiver" + (exclude_from_sim no) + (at 130.81 237.49 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + (color 194 0 0 1) + ) + (justify left bottom) + ) + (uuid "c814ce7f-dc1c-46f4-a07b-9c239ce74a8f") + ) + (text "160m" + (exclude_from_sim no) + (at 259.08 22.86 0) + (effects + (font + (size 3 3) + (bold yes) + ) + (justify left bottom) + ) + (uuid "ce74f367-813c-4b7e-82dd-c677299a9a16") + ) + (text "7T T37-0 4\"" + (exclude_from_sim no) + (at 134.62 207.518 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "d061bf6a-d207-4233-a44d-13184be8850f") + ) + (text "10T T37-2 6\"" + (exclude_from_sim no) + (at 332.994 75.438 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "d0899d03-f2c1-4254-a036-c069339c0939") + ) + (text "40m" + (exclude_from_sim no) + (at 59.69 54.61 0) + (effects + (font + (size 3 3) + (bold yes) + ) + (justify left bottom) + ) + (uuid "e2021364-447f-43a6-9a32-3345dcea20a8") + ) + (text "26T T37-1 14\"" + (exclude_from_sim no) + (at 124.206 21.336 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "e5226392-313c-4fd6-85bd-d0b42d96c643") + ) + (text "20T T37-10 11\"" + (exclude_from_sim no) + (at 106.68 47.244 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "ebef6ca2-635f-4156-9181-aa59d6abeca0") + ) + (text "60m" + (exclude_from_sim no) + (at 259.08 52.07 0) + (effects + (font + (size 3 3) + (bold yes) + ) + (justify left bottom) + ) + (uuid "f43a9414-554c-4d96-a9f6-cb9a5fddbd57") + ) + (text "Bypass" + (exclude_from_sim no) + (at 76.454 214.122 0) + (effects + (font + (size 3 3) + (bold yes) + ) + (justify left bottom) + ) + (uuid "f447dec4-006d-4783-8f5b-a980900acfe1") + ) + (text "80m" + (exclude_from_sim no) + (at 59.69 24.13 0) + (effects + (font + (size 3 3) + (bold yes) + ) + (justify left bottom) + ) + (uuid "f4e6bbdc-2ce9-4846-80d3-d7d8bf68ebde") + ) + (text "20t T37-10 11\"" + (exclude_from_sim no) + (at 334.01 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "f83d9208-bcb3-4b55-8ed1-37a39b6ac0c4") + ) + (label "160m" + (at 344.17 177.8 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "0297f3b7-e31b-4bc1-bf53-ecb774b838e3") + ) + (label "RRF17" + (at 170.18 60.96 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "03e09ecf-73fa-4189-82c0-af57c4492aff") + ) + (label "RF56" + (at 153.67 190.5 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "044b1827-5e5d-4b9d-8670-38e12e002e55") + ) + (label "~{6m}" + (at 88.9 198.12 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "04a0d980-3863-44a2-88cc-5d0f0f694445") + ) + (label "RRF203" + (at 67.31 130.81 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "04daa615-c2ff-4c85-9ee5-ce32f1d796a6") + ) + (label "60m" + (at 344.17 175.26 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "04fdd947-5009-45e3-9d87-9557e5434c47") + ) + (label "RF93" + (at 153.67 270.51 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "05c1d74b-84f6-4686-a6a2-b96e6043a843") + ) + (label "30m" + (at 214.63 91.44 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "05d01b87-2488-4a96-ad52-19c5de937bc5") + ) + (label "12{slash}10m" + (at 11.43 160.02 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "05f1134b-62cf-4284-88a7-08178483ddee") + ) + (label "RF85" + (at 342.9 88.9 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "05fbf74e-2fb8-4354-9f79-3810461a3d91") + ) + (label "80m" + (at 344.17 180.34 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "06251911-b64b-4fc1-9720-859464354888") + ) + (label "~{40m}" + (at 88.9 68.58 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "09104b0b-3e4f-4f19-9b6e-013f0d587919") + ) + (label "RF44" + (at 130.81 157.48 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "0adf7705-0492-484e-baab-d415439b0476") + ) + (label "~{20m}" + (at 44.45 93.98 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "0ae857c7-e78f-4945-a33b-b3a100d2b124") + ) + (label "SDA2" + (at 303.53 175.26 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "0aff4d31-b06c-4fed-9358-e722a5d7d1c0") + ) + (label "~{80m}" + (at 88.9 38.1 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "0b9f0793-b6a2-438b-986c-28cd2c611a76") + ) + (label "RRF27" + (at 170.18 91.44 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "0d7108d6-2124-4199-af84-1d52d4f1fad6") + ) + (label "160m" + (at 288.29 34.29 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "0e5fcd37-72e9-4f7a-8205-4896555db040") + ) + (label "RRF87" + (at 369.57 88.9 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "0f58363b-a252-4b2b-b25f-c40403770e1b") + ) + (label "12{slash}10m" + (at 88.9 162.56 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "0f6fe827-b0a3-4d47-963d-c4e0a7ffb843") + ) + (label "160m" + (at 368.3 34.29 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "11bb4d8e-c683-46a8-bf57-07d731ccad50") + ) + (label "RF14" + (at 130.81 60.96 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "139abdba-f0dc-4f96-a6bb-a2b330a31f9d") + ) + (label "RRF48" + (at 196.85 154.94 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "15625098-0d01-4c29-8961-32a83eda21e4") + ) + (label "RF75" + (at 342.9 58.42 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "16cca897-9e60-4b11-ac83-0b5952fe6d2f") + ) + (label "RF91" + (at 157.48 252.73 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "16f96d14-8c8a-4d8f-9140-a6f78fbf8204") + ) + (label "60m" + (at 288.29 63.5 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "17a83cfb-dd9a-4538-901e-4ce51327d920") + ) + (label "RRF30" + (at 64.77 121.92 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "187d1a5d-8a80-424a-b8e2-de3f1cd3dd86") + ) + (label "~{30m}" + (at 288.29 96.52 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "1a72d460-96eb-4116-8dc6-4b9b9eaf199a") + ) + (label "12{slash}10m" + (at 166.37 162.56 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "1c8e3a6d-ae45-4e8b-acbf-3ecdb9da5d05") + ) + (label "RRF40" + (at 64.77 154.94 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "1d101742-04f4-4023-bd7b-aa7219a26347") + ) + (label "RF90" + (at 39.37 255.27 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "1ffd295b-db7b-4b8f-90b1-f3a6d65eedaf") + ) + (label "RRF207" + (at 195.58 67.31 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "23beae88-609b-4aee-88f0-1055baa44bf8") + ) + (label "RF65" + (at 342.9 29.21 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "263ddf0f-a351-406c-b742-9396bcbdf139") + ) + (label "RRF216" + (at 394.97 63.5 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "280892df-6a5c-4034-b7e4-703b1dc948c9") + ) + (label "~{NF}" + (at 44.45 227.33 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "2811f9fb-642b-4a1b-a5e6-98ef63ae1382") + ) + (label "17{slash}15m" + (at 166.37 129.54 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "2813ad66-fdfc-4043-ad6f-dac5683994c8") + ) + (label "~{17{slash}15m}" + (at 88.9 132.08 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "2a5d3e82-4ed8-4474-8337-bdc61cd40176") + ) + (label "RRF28" + (at 196.85 88.9 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "2c8eef5c-548e-4a33-8ecc-0103e29ecc53") + ) + (label "RRF217" + (at 394.97 95.25 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "2d242fce-4a17-4494-b07d-27edf2adaaf4") + ) + (label "~{6m}" + (at 44.45 193.04 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "2fec4bef-d983-48bc-8bf7-cdd36aae1eb4") + ) + (label "~{20m}" + (at 88.9 99.06 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "30115c94-0cdf-4476-b6eb-82986c122f46") + ) + (label "12{slash}10m" + (at 368.3 200.66 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "3028d095-c7ac-465d-aacc-714fd7bb9e2c") + ) + (label "80m" + (at 88.9 35.56 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "3087c65f-b463-4ed4-9d36-7d310a9e7312") + ) + (label "10m" + (at 344.17 200.66 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "31d800fa-e2ff-4455-b76a-b44e87bd92a9") + ) + (label "SCL2" + (at 261.62 186.69 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "32544368-9ce9-439e-90f6-df9d1f96df9a") + ) + (label "RF32" + (at 106.68 124.46 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "32d07d73-24f9-47e6-af9e-860c0a9741b0") + ) + (label "RRF57" + (at 170.18 190.5 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "35087ea4-ae2e-4fc5-8d3f-4f23bdbb7e13") + ) + (label "~{6m}" + (at 168.91 198.12 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "35f8bef5-7432-4717-b2f4-4377a10f0280") + ) + (label "RF12" + (at 106.68 60.96 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "363d84bf-bdf3-4673-aade-33518ccd228f") + ) + (label "RRF37" + (at 170.18 124.46 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "3714ff83-77c6-47c2-924e-3edcd46b142e") + ) + (label "6m" + (at 344.17 203.2 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "3755cd2f-bc09-4488-9248-cf442f450a7a") + ) + (label "RRF68" + (at 396.24 26.67 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "380e32d6-e280-4846-97db-cfa9456fb851") + ) + (label "40m" + (at 168.91 66.04 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "38859cdd-2d57-405e-b895-a11fa0f48ac3") + ) + (label "RF55" + (at 143.51 190.5 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "3959319c-9e32-4ad8-ad1b-f0522f85189b") + ) + (label "RRF11" + (at 91.44 60.96 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "39f1ef45-6dd7-4637-b506-d5d495a06444") + ) + (label "RF53" + (at 118.11 190.5 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "3b23186e-5db6-4172-b2bb-e360d4b766b0") + ) + (label "RRF88" + (at 396.24 86.36 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "3e8581bf-8d8e-4b99-bf77-a8ef98dfa0b9") + ) + (label "RRF202" + (at 67.31 96.52 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "3f7ea31c-596c-46bc-9fe8-88e895cd1ffa") + ) + (label "RF63" + (at 317.5 29.21 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "42495e41-b77a-479f-b24c-b52dcbe69a4c") + ) + (label "RF72" + (at 306.07 58.42 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "4385c308-c7e7-4d32-9811-96aed8277199") + ) + (label "RRF101" + (at 90.17 224.79 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "43a7d635-aa63-496e-853b-c033112540fd") + ) + (label "~{60m}" + (at 243.84 60.96 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "46b61d8e-5a25-4e99-8e65-c687a95aa3ff") + ) + (label "RRF70" + (at 264.16 55.88 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "47417a9a-19d6-418a-a00b-16ad803b4380") + ) + (label "RRF51" + (at 91.44 190.5 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "481d8306-da83-4d58-b829-2bdaf4dfd872") + ) + (label "160m" + (at 213.36 31.75 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "49299ca4-3ecc-46f6-828e-4fd7cf2d36d0") + ) + (label "RRF205" + (at 67.31 196.85 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "49d35fb9-dae2-4568-81fa-97c28d56acbb") + ) + (label "RF25" + (at 143.51 91.44 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "4b3f948b-10c6-4dcf-8353-937ff67c4bda") + ) + (label "RRF93" + (at 144.78 264.16 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "4b60698b-96bd-4c9d-8a2c-62538a47aefa") + ) + (label "RRF47" + (at 170.18 157.48 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "4cbb5ef9-da57-445c-813e-c9deb2ab9568") + ) + (label "RRF211" + (at 195.58 194.31 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "4f95d376-260a-403e-aa9b-7e4f566eaa40") + ) + (label "RF62" + (at 306.07 29.21 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "5003d6b2-b8e5-4b83-8d50-65bb75c5b495") + ) + (label "~{160m}" + (at 243.84 31.75 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "503409a0-b37a-429f-9791-83bfc63a0317") + ) + (label "80m" + (at 168.91 35.56 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "5145205d-f9bb-4672-a615-fe8f7bfea8d2") + ) + (label "RF82" + (at 306.07 88.9 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "539e26af-c145-41cd-8c8b-1f0f5fef6bdd") + ) + (label "RRF206" + (at 195.58 35.56 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "540e3e61-2e69-4a86-a36e-34edd769830f") + ) + (label "RF36" + (at 153.67 124.46 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "54c6bfb1-46a9-46a7-924b-d527eafac9d8") + ) + (label "RRF201" + (at 67.31 66.04 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "56be3450-7097-4f90-b529-95552612c626") + ) + (label "RRF10" + (at 64.77 58.42 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "5b74e8f0-7a80-4275-931d-8b1da0d04989") + ) + (label "RRF21" + (at 91.44 91.44 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "5d247f48-9c7f-4261-a659-fc4b5757ab93") + ) + (label "NF" + (at 88.9 229.87 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "5f112ef7-0c4f-4521-a61c-64023731dac6") + ) + (label "RRF80" + (at 264.16 86.36 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "5fa6fef2-77f8-4193-9796-a3fb36fefe8c") + ) + (label "RRF60" + (at 264.16 26.67 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "660f5c81-6cf6-4be6-b3d9-c230c594f68d") + ) + (label "~{20m}" + (at 168.91 99.06 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "67cc2e27-7ead-4ebe-982e-377f98eed3ca") + ) + (label "RF3" + (at 118.11 30.48 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "695fed60-42cf-4585-9d90-41f9041ccfba") + ) + (label "~{12{slash}10m}" + (at 166.37 165.1 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "6b7096fe-3726-4b21-b179-ab7f47a4717a") + ) + (label "RRF1" + (at 91.44 30.48 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "70f11327-b944-4615-a037-c016bce2765c") + ) + (label "RRF208" + (at 195.58 95.25 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "73944096-f35d-40ee-aee0-db309a31fb49") + ) + (label "~{60m}" + (at 288.29 66.04 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "73b70cb6-307d-4b02-aadc-f619aa504ee1") + ) + (label "~{80m}" + (at 168.91 38.1 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "745dc865-d2a5-4255-81b1-c89da43a6e3a") + ) + (label "RRF100" + (at 64.77 227.33 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "7582f25f-bede-4adb-9f0f-231d9d6d0503") + ) + (label "RF64" + (at 330.2 29.21 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "795d67a5-01a8-433f-8023-cd467b1909dd") + ) + (label "RF4" + (at 130.81 30.48 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "797dc674-3339-4d84-be4e-89cc8f7eb5c3") + ) + (label "RRF81" + (at 290.83 88.9 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "7b41067b-feb3-408b-abde-86b4720b771b") + ) + (label "NF" + (at 344.17 205.74 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "7b89128b-6ddd-4105-bbf3-0b329dc9fbed") + ) + (label "NF" + (at 12.7 227.33 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "7ff7d811-c2ab-4839-841f-2d69f2892973") + ) + (label "RF5" + (at 143.51 30.48 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "8171c527-6451-4271-8329-e9febd2d6ab4") + ) + (label "RF24" + (at 130.81 91.44 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "85418e36-09bc-4ea7-8954-7503d0eec20d") + ) + (label "RF35" + (at 143.51 124.46 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "89a6936f-52ae-445b-be8f-21e72f3b4fe8") + ) + (label "~{80m}" + (at 44.45 33.02 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "8a796ff5-9e24-4825-bae1-0d3c1a6c5a47") + ) + (label "RF83" + (at 317.5 88.9 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "8c01ec77-04d5-42f7-be59-9e801051ec83") + ) + (label "40m" + (at 88.9 66.04 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "8e705def-92e5-4bc6-8bda-418ec080fd05") + ) + (label "20m" + (at 168.91 96.52 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "8f69a5a4-48de-4343-81c5-4af7b4cb67e1") + ) + (label "~{60m}" + (at 368.3 66.04 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "906bf8f6-a6a5-414b-a5b5-2a2edd404dbd") + ) + (label "17{slash}15m" + (at 12.7 127 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "938badbb-d8b9-412b-a567-619e52bd2887") + ) + (label "RRF7" + (at 170.18 30.48 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "93c1ddf4-ac69-4568-921d-2ecf4a72f377") + ) + (label "40m" + (at 344.17 182.88 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "948cb2e1-7f3f-4be3-b145-8f84c35bf067") + ) + (label "RRF67" + (at 369.57 29.21 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "9539d491-9bcc-4c92-a918-63be4b1d829d") + ) + (label "RRF50" + (at 64.77 187.96 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "95922fc5-63c9-4bfd-8569-816dabe32943") + ) + (label "RF43" + (at 118.11 157.48 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "97591604-988f-43dc-b1ae-57112c68395a") + ) + (label "~{160m}" + (at 368.3 36.83 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "97af8236-1587-4f69-85dc-45b2d74cf335") + ) + (label "RXTX" + (at 86.36 269.24 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "9903f399-fab8-41db-8e69-3f62af4987a2") + ) + (label "RRF58" + (at 196.85 187.96 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "99e6c63d-7ccb-434a-88b0-4f655016954e") + ) + (label "20m" + (at 12.7 93.98 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "9b099cb2-8a8c-42dd-afe5-563ccb5e2d45") + ) + (label "RRF38" + (at 196.85 121.92 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "9c2bad9c-2e4c-47dc-8541-180f020426e5") + ) + (label "RRF209" + (at 195.58 129.54 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "9c7267b6-dffb-48e2-94e8-c5235a7e7054") + ) + (label "RF33" + (at 118.11 124.46 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "9cfa13e0-0229-4adb-97ee-47c6a211f1ab") + ) + (label "RF74" + (at 330.2 58.42 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "9ef53178-6701-4a92-9712-02f420f7ed00") + ) + (label "60m" + (at 214.63 60.96 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "9fb01a85-307c-4764-acf3-d49fc1c5f6e3") + ) + (label "RF6" + (at 153.67 30.48 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "a0b361dd-e5b4-47b3-88b1-6c864cbd2c25") + ) + (label "RRF0" + (at 64.77 27.94 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "a1e61942-4747-489b-8552-5f81b53f2c0d") + ) + (label "RRF212" + (at 266.7 34.29 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "a1f35b16-95ad-45c4-a299-660e1a783722") + ) + (label "~{17{slash}15m}" + (at 44.45 127 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "a2e32024-60c5-47e1-b275-82d3caa3e567") + ) + (label "RRF215" + (at 394.97 33.02 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "a317bc68-0135-40fa-829e-341a74735401") + ) + (label "15m" + (at 344.17 193.04 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "a32beffa-a910-4d5c-8c2a-c43e94ed091d") + ) + (label "17{slash}15m" + (at 88.9 129.54 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "a37b2a54-b570-4cf1-8270-9a28abf60191") + ) + (label "~{NF}" + (at 88.9 232.41 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "a48191de-bea7-434d-b845-7bb298fe2ace") + ) + (label "RF46" + (at 153.67 157.48 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "a4fdd286-0cb1-4baf-bcda-c1df4666dfc7") + ) + (label "6m" + (at 88.9 195.58 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "a71db1c8-0c00-4ba4-9f39-749208491580") + ) + (label "~{RXTX}" + (at 77.47 271.78 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "a7feba25-9415-4f01-82af-b8351dddaaec") + ) + (label "17{slash}15m" + (at 368.3 182.88 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "a8034fd8-2bd2-4ddc-8a27-6c73c4879706") + ) + (label "RF22" + (at 106.68 91.44 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "a9ab35d1-f897-4800-89cb-dccae37f3312") + ) + (label "RF34" + (at 130.81 124.46 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "a9fbbacc-ed2f-4e55-84dc-0e4ab48a112d") + ) + (label "RF42" + (at 106.68 157.48 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "aa2d3eec-4e19-4327-b941-35ea4695efdc") + ) + (label "RF86" + (at 353.06 88.9 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "adc200b8-93cc-4243-b261-41fab3a4034d") + ) + (label "RRF90" + (at 54.61 255.27 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "addee49a-4b5c-40fc-b93c-d1d14ae6695d") + ) + (label "12m" + (at 344.17 198.12 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "af4870e4-9099-44f6-a0a0-a5f08493e353") + ) + (label "40m" + (at 12.7 63.5 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "af49fc2f-e769-4c5f-afd9-f8851a911574") + ) + (label "RRF8" + (at 196.85 27.94 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "af9c7e29-f148-45d5-bedb-b0b054f1a494") + ) + (label "RF76" + (at 353.06 58.42 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "afd689c6-e1aa-4f15-a97e-e0e7237d91cf") + ) + (label "RF26" + (at 153.67 91.44 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "b0d75593-5178-4337-81e6-4043181344c4") + ) + (label "SCL2" + (at 302.26 177.8 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "b0f92526-81d9-4ee3-a105-cfcc5eee5b4f") + ) + (label "6m" + (at 168.91 195.58 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "b12a24fa-f75f-4690-8626-8991ac49309d") + ) + (label "RXTX" + (at 281.94 189.23 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "b32d089b-f4f7-48b9-8595-43623e5897c7") + ) + (label "RF23" + (at 118.11 91.44 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "b4c3be68-02bd-4680-a893-5662da583bf2") + ) + (label "~{12{slash}10m}" + (at 44.45 160.02 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "b569b63e-53c8-4e29-9f7b-cb7d67db4fab") + ) + (label "RRF213" + (at 266.7 63.5 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "b65f6729-48d6-4979-9645-ab5d0a468818") + ) + (label "RRF61" + (at 290.83 29.21 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "b745a12f-d8d2-434b-8f75-aa564025c45e") + ) + (label "30m" + (at 344.17 185.42 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "b931696b-7a9f-4d94-8e39-558612a611cb") + ) + (label "RFIN" + (at 53.34 176.53 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "b93979bc-66c9-4937-a1c9-ef986d2066a2") + ) + (label "RRF71" + (at 290.83 58.42 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "bb55b28e-21e7-4161-b87f-3b21091357a2") + ) + (label "RRF210" + (at 195.58 161.29 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "bcbe95ca-4950-4e48-82f2-757d8b7a613b") + ) + (label "SDA2" + (at 261.62 184.15 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "be8591a7-f1e3-423b-a367-50bdf83582e4") + ) + (label "20m" + (at 344.17 187.96 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "c049246d-e334-4991-ba62-1b778dfa0703") + ) + (label "80m" + (at 12.7 33.02 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "c097a925-6bb2-4347-8f77-0bb229bbfb90") + ) + (label "RF52" + (at 106.68 190.5 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "c1fe84ad-b8f7-4a2d-8933-37698fad4e65") + ) + (label "RF73" + (at 317.5 58.42 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "c289bdf7-e40a-4b2a-9f7d-a2d4d1b2fad6") + ) + (label "~{30m}" + (at 368.3 96.52 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "c53fa21a-1640-479f-a510-86fefd067a73") + ) + (label "RRF92" + (at 144.78 252.73 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "c59b250c-6466-4f3d-84b6-05295eeefdf3") + ) + (label "20m" + (at 88.9 96.52 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "c9698e6e-77e5-440f-8996-dac3b160b557") + ) + (label "17m" + (at 344.17 190.5 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "ca89dab9-09ed-4c03-bab5-343cac3df3c6") + ) + (label "30m" + (at 368.3 93.98 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "caea6a17-1327-4b4b-9855-ef409cc5089c") + ) + (label "~{RXTX}" + (at 119.38 269.24 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "cbff1649-53f5-42f6-a760-cf27587fcceb") + ) + (label "RF84" + (at 330.2 88.9 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "cc32819d-ba6f-47d6-b072-2eec7c8b0feb") + ) + (label "RF45" + (at 143.51 157.48 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "cdb52ebb-3430-4f78-a4cb-7e394a93cbee") + ) + (label "6m" + (at 12.7 193.04 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "d045f329-888f-43d3-ba21-0b254211c7c7") + ) + (label "RRF91" + (at 54.61 270.51 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "d247f8a1-f4d6-4609-aad5-8fb498fa38e1") + ) + (label "~{40m}" + (at 44.45 63.5 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "d2df90bf-3dd7-4729-9c58-52c31dc7ede4") + ) + (label "RRF41" + (at 91.44 157.48 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "d424f52d-6adb-4231-88f5-fd441eefa886") + ) + (label "~{17{slash}15m}" + (at 166.37 132.08 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "d4792042-6fad-4aaa-83de-123e4e10bfcf") + ) + (label "RF66" + (at 353.06 29.21 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "d6f60a6d-a93f-4501-806e-5193a6a2cf3c") + ) + (label "RF54" + (at 130.81 190.5 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "d74e98af-0604-423f-9a54-067d84e22fbd") + ) + (label "30m" + (at 288.29 93.98 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "d924bcd9-ce6b-4c06-8cdf-219e77f3f3bd") + ) + (label "RRF250" + (at 64.77 222.25 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "dad07d26-4a28-4671-9524-dd868891e808") + ) + (label "RF92" + (at 45.72 271.78 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "db4c82d1-1d14-4274-9e9e-bd9bc217c270") + ) + (label "RRF78" + (at 396.24 55.88 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "dc7f55f2-444a-49c4-aa4e-4bff0bee501b") + ) + (label "RRF20" + (at 64.77 88.9 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "e0c0c9d7-3201-43fd-b2a4-0c17ad90cd69") + ) + (label "RF16" + (at 153.67 60.96 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "e19a19a0-356f-4815-8b98-796dcc576152") + ) + (label "RRF77" + (at 369.57 58.42 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "e61891e9-122e-4a9a-b49a-0493f260e536") + ) + (label "~{12{slash}10m}" + (at 88.9 165.1 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "e78b2fa4-beab-4342-920f-edefa29443fb") + ) + (label "RRF200" + (at 67.31 35.56 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "e90691fd-9d43-4b1a-93ef-c3c442a52244") + ) + (label "~{40m}" + (at 168.91 68.58 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "ea848601-7a9d-4c6d-aa4b-e972b9b33599") + ) + (label "RFOUT" + (at 212.09 177.8 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "ec0d21c6-99a7-4162-8189-d8255f4f14d2") + ) + (label "~{160m}" + (at 288.29 36.83 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "ec4b6e44-c001-42de-8809-a581e1ba929a") + ) + (label "RRF214" + (at 266.7 93.98 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "ece8b32d-7ec0-4f0d-8610-49fc5d29428b") + ) + (label "RXTX" + (at 118.11 266.7 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "ef90f07d-871c-4338-9b11-d3393e3ccfa8") + ) + (label "RF2" + (at 106.68 30.48 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "f114ab23-fdbb-4ffe-b52c-7dadce9cf64f") + ) + (label "RF13" + (at 118.11 60.96 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "f2f79b3e-a579-423a-8cfb-b13cffd3a763") + ) + (label "RF15" + (at 143.51 60.96 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "f729b08e-2bc8-4931-91df-c19b8d034533") + ) + (label "RRF204" + (at 67.31 163.83 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "f92cbc75-4e06-44e6-bfac-7aa0acb5dfaf") + ) + (label "RRF18" + (at 195.58 58.42 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "f945dde7-bd35-4563-9b6f-81e96b0ac769") + ) + (label "~{30m}" + (at 243.84 91.44 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "faeabd2b-f8c1-4661-aef1-3d70f0d01468") + ) + (label "RRF31" + (at 91.44 124.46 0) + (fields_autoplaced yes) + (effects + (font + (size 0.8 0.8) + ) + (justify left bottom) + ) + (uuid "fee830e2-ba14-4289-baca-a64030e5805f") + ) + (label "60m" + (at 368.3 63.5 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + (bold yes) + ) + (justify left bottom) + ) + (uuid "ff0c757d-d3e0-4f4a-b553-0dcab2b5a92c") + ) + (symbol + (lib_id "power:+3V3") + (at 26.67 83.82 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "00cb6abc-b4d9-4ae0-ab10-22d116f82f22") + (property "Reference" "#PWR019" + (at 26.67 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 26.67 79.6869 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 26.67 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 26.67 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 26.67 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "953445e4-d4bf-47a1-9e2f-e68743b87537") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR019") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:IDC_2x5") + (at 273.05 184.15 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "00cde0dd-0315-4dda-be2a-d07fb3a69253") + (property "Reference" "J4" + (at 274.32 173.6557 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Bands" + (at 274.32 176.0799 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x05_P2.54mm_Vertical" + (at 273.05 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 273.05 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 273.05 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 273.05 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "A-2939" + (at 273.05 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "9" + (uuid "950cb65c-4eb6-4072-83de-d51e37bdf77f") + ) + (pin "5" + (uuid "56aa08bd-5040-4d5f-9da4-f910369d55d7") + ) + (pin "2" + (uuid "dfd30883-2ff8-4b85-80f2-654eadea94e1") + ) + (pin "4" + (uuid "af5529cc-7e6c-4e91-8c04-4da7241f456b") + ) + (pin "6" + (uuid "c9637990-9e33-4930-9598-be18862d5cde") + ) + (pin "10" + (uuid "08201e9b-ab6b-4070-95d0-0c0788d52399") + ) + (pin "7" + (uuid "36caa3bd-1d65-49a9-9da3-0f8a7bf5052b") + ) + (pin "3" + (uuid "5b11ece8-d33d-4a20-bfa4-915948d2d97a") + ) + (pin "1" + (uuid "53bd8dc1-1563-463e-b7e2-feb4d5801c09") + ) + (pin "8" + (uuid "27a132d4-6178-4bce-a053-6525c88689fb") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "J4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 26.67 203.2 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "01dfb6f2-7e2f-4f3d-8593-5796d333d122") + (property "Reference" "#PWR035" + (at 26.67 209.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 24.13 204.47 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 26.67 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 26.67 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 26.67 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fdac55f1-dedb-47c0-8c6d-86bb9174b8f8") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR035") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 320.04 44.45 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "022e9e96-fdd7-4769-a29a-33099c2b490a") + (property "Reference" "#PWR049" + (at 320.04 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 317.5 45.72 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 320.04 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 320.04 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 320.04 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "cbfb1148-ebdb-432d-b0e9-2bdc2ccaf031") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR049") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xGxx:74LVC1G04") + (at 106.68 269.24 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "027da0e5-1951-43d6-8471-66582231b223") + (property "Reference" "U37" + (at 107.95 261.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SN74LVC1G04DCK" + (at 111.76 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:SOT-SC70" + (at 106.68 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 106.68 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 106.68 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "595-SN74LVC1G04DCKR" + (at 106.68 269.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f44d1d41-582c-4f4e-949b-11a1355f3672") + ) + (pin "4" + (uuid "092e16e2-73de-472c-866b-a53e43f21d06") + ) + (pin "3" + (uuid "5b563841-d752-46a6-9db4-b61927319795") + ) + (pin "5" + (uuid "311352c9-e710-4adf-9755-3a30974bfc98") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U37") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 149.86 252.73 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "030690ee-7998-44a7-b008-a80ed9843685") + (property "Reference" "C8" + (at 149.86 259.0333 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 149.86 256.6091 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 153.67 253.6952 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 149.86 252.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 149.86 252.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 149.86 252.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "8caedc56-d308-4ba8-97ba-c15a338b9045") + ) + (pin "1" + (uuid "340640ee-d8e5-47a1-ad92-e6fc95289ccb") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xGxx:74LVC1G04") + (at 31.75 93.98 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "03290803-d8b9-4618-ab43-b03802135c40") + (property "Reference" "U8" + (at 33.02 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SN74LVC1G04DCK" + (at 36.83 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:SOT-SC70" + (at 31.75 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 31.75 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 31.75 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "595-SN74LVC1G04DCKR" + (at 31.75 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "da488ece-789e-4ba6-85b1-dfcdcd710fd4") + ) + (pin "4" + (uuid "9bc4e42e-faf9-476e-a94b-39d98a64eff6") + ) + (pin "3" + (uuid "5776f11b-b420-403e-89b2-a66223f8b704") + ) + (pin "5" + (uuid "57ffc76a-47fa-4008-ba30-3a72df56a117") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 394.97 38.1 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "03ab32ec-525e-48af-b239-f6ffe46f1a9e") + (property "Reference" "C24" + (at 401.2733 38.1 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 398.8491 38.1 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 395.9352 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 394.97 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 394.97 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 394.97 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "fee20db7-5bbc-45b5-ad9a-9f3351d0c394") + ) + (pin "1" + (uuid "f6704de9-f317-4271-96c5-58cb887375ea") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C24") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 123.19 24.13 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "053d8999-0321-4874-990b-35d8fabb9569") + (property "Reference" "L30" + (at 124.4021 22.8628 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 121.9779 22.8628 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 123.19 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 123.19 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "168dd8f2-d79e-4ff2-ba36-ace03fe8c6b8") + ) + (pin "1" + (uuid "5cbbb56c-7cba-4c5b-9f32-ca41f00cb40d") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L30") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 327.66 38.1 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0554801b-917f-471a-a171-aac7cdbc18dc") + (property "Reference" "C94" + (at 324.739 36.8879 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "5.7 nF" + (at 324.739 39.3121 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 328.6252 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 327.66 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 327.66 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 327.66 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "76d15ea2-b026-40d5-a00e-975aa212281b") + ) + (pin "1" + (uuid "f169d150-de73-43a4-bc1c-bef720a26fd6") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C94") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 100.33 224.79 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "05f9464f-37c2-4c30-a912-3667590cd082") + (property "Reference" "C701" + (at 100.33 218.4867 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 100.33 220.9109 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 104.14 223.8248 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 100.33 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 100.33 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 100.33 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a4cc2e47-b80f-4bc8-945a-ca7b1f435b86") + ) + (pin "1" + (uuid "65a062b3-dcdd-442c-8b0a-0e49da88aff8") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C701") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 165.1 190.5 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0667bcef-f9b3-4e58-8e85-63f943de44dc") + (property "Reference" "C607" + (at 165.1 184.1967 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 165.1 186.6209 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 168.91 189.5348 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 165.1 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 165.1 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 165.1 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3773cbfa-4679-4781-bb10-7b482336b502") + ) + (pin "1" + (uuid "4ef8d4b4-2884-4fcf-b92a-4c6ff0e87f9b") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C607") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 264.16 189.23 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "06b21d06-9b25-4cc0-9059-50540fbe3115") + (property "Reference" "#PWR03" + (at 264.16 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 261.62 190.5 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 264.16 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 264.16 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 264.16 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3a718805-ec50-4bc5-a06f-67c04bdac211") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR03") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xGxx:74LVC1G04") + (at 31.75 193.04 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "07af3215-c59f-4eaf-a940-cbb727589073") + (property "Reference" "U17" + (at 33.02 185.42 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SN74LVC1G04DCK" + (at 36.83 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:SOT-SC70" + (at 31.75 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 31.75 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 31.75 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "595-SN74LVC1G04DCKR" + (at 31.75 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "80e23957-6553-4d09-b454-633dcefd54ec") + ) + (pin "4" + (uuid "7864ba3c-a699-4a0a-a2b4-0bcf1ac4683a") + ) + (pin "3" + (uuid "6c8337d0-fb43-4051-b92d-58f86e00f8b4") + ) + (pin "5" + (uuid "c4993544-e778-4d24-87bc-dbe713c37d94") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U17") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 226.06 50.8 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0820f204-70e8-4a4a-96b1-a4afca5cc8c2") + (property "Reference" "#PWR051" + (at 226.06 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 226.06 46.6669 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 226.06 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 226.06 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 226.06 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "9e60deaa-5962-419e-88a2-9087fe869b93") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR051") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 132.08 199.39 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "08eaf519-f18f-4c2a-af2a-200f018a084e") + (property "Reference" "L19" + (at 130.8128 198.1779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 130.8128 200.6021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 132.08 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 132.08 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 132.08 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ed7f2af9-ba76-4f8f-b23b-cf09fd322263") + ) + (pin "1" + (uuid "62793916-ed38-4fbd-acde-34f79e52c00a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L19") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 26.67 116.84 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "091534a8-8ce7-43d8-aa16-8f3e67b672e3") + (property "Reference" "#PWR024" + (at 26.67 120.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 26.67 112.7069 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 26.67 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 26.67 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 26.67 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "bb0592dc-1fc9-40cb-be18-2c2e35a52c1e") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR024") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 22.86 255.27 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "09242ad9-869f-49fe-aa92-4c769a17bc66") + (property "Reference" "J2" + (at 24.13 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "FROM EXCITE" + (at 29.21 248.92 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 22.86 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 22.86 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 22.86 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 22.86 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 22.86 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "d1ec9935-bd12-4e48-9d03-4e5607d93389") + ) + (pin "2" + (uuid "479f78e4-17a0-4892-ac88-37dfa63510a6") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "J2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 67.31 137.16 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0936f7c5-590b-4484-9279-17be9266727a") + (property "Reference" "C12" + (at 61.0067 137.16 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 63.4309 137.16 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 66.3448 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 67.31 137.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 67.31 137.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 67.31 137.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "4ea1465a-c511-4814-97e2-4bcf861c7e92") + ) + (pin "1" + (uuid "004066b1-e906-4c9e-b1b8-72a7bad1faf0") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C12") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 148.59 151.13 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "0a0451a2-04a8-4248-a2f7-a4490749bed2") + (property "Reference" "L39" + (at 149.8021 149.8628 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 147.3779 149.8628 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 148.59 151.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 148.59 151.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 151.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ffc9a61b-d7fb-499d-a020-4239381001b4") + ) + (pin "1" + (uuid "a7158ec5-1f88-4904-8898-93a7d67b8568") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L39") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 195.58 135.89 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0a865345-828f-4ad0-886b-85b026902f83") + (property "Reference" "C18" + (at 201.8833 135.89 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 199.4591 135.89 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 196.5452 132.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 195.58 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 195.58 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 195.58 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "086e0726-7c0b-4770-b780-b3f8c3bc503e") + ) + (pin "1" + (uuid "4316bad4-1dd2-4270-af49-bd52c76ca9fc") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C18") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 133.35 199.39 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0bfc0a98-c629-4d47-9d81-a1df73005772") + (property "Reference" "L603" + (at 134.62 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "24 nH" + (at 134.62 200.66 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 133.35 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 133.35 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 133.35 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "28e86a1f-6646-4546-afa7-ca709002d64c") + ) + (pin "2" + (uuid "183023bb-71ea-493b-a725-332f617f6f9b") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L603") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 267.97 270.51 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0c98e7b1-60ed-4812-8e84-1432fc5886af") + (property "Reference" "#PWR05" + (at 267.97 276.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 267.97 275.59 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 267.97 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 267.97 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 267.97 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "9378b035-f45f-446c-9729-53c5edbbcfe1") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR05") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 148.59 190.5 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0ce5053b-910b-4de3-a992-4eb6fc7076ec") + (property "Reference" "L604" + (at 148.59 185.42 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "720 nH" + (at 148.59 187.96 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 148.59 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 148.59 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "96ff6ecd-90ce-4230-b6b5-e183b68fdcbd") + ) + (pin "2" + (uuid "643695f9-d483-447f-87f2-60bfd0519939") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L604") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 313.69 29.21 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0dc34aa4-0aae-4727-8105-bf2b71b60f93") + (property "Reference" "C93" + (at 316.23 22.86 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "580 pF" + (at 317.5 25.4 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 309.88 30.1752 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 313.69 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 313.69 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 313.69 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "dbda545c-948b-4d5f-84e0-73d04363c5b0") + ) + (pin "1" + (uuid "8489036c-e314-4a5d-886e-d4ce200944f3") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C93") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 308.61 67.31 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0dc98d25-a688-4c0b-a891-a5b4bb53bfb6") + (property "Reference" "L191" + (at 309.8772 66.0979 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "840 nH" + (at 309.8772 68.5221 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 308.61 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 308.61 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 308.61 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5818c050-20f8-4ecc-8755-1550031daf33") + ) + (pin "2" + (uuid "efe04bf8-3f7f-4589-b63e-b4db9109d98a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L191") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 109.22 69.85 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0df7a47d-a967-4cd7-a83a-9d4f55011f3c") + (property "Reference" "L201" + (at 110.4872 68.6379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "560 nH" + (at 110.4872 71.0621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 109.22 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 109.22 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 109.22 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8955d96b-7f49-4487-8cd6-e57c0c56674b") + ) + (pin "2" + (uuid "6170a1d5-a4e6-4894-a1e9-0d55d420c8c6") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L201") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 60.96 88.9 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "108992bc-1417-4780-a4df-650cc92f19e7") + (property "Reference" "C300" + (at 60.96 95.2033 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 60.96 92.7791 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 64.77 89.8652 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 60.96 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 60.96 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 60.96 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "46e08f92-c9ab-4a66-b931-235cb8b501be") + ) + (pin "1" + (uuid "b5bac939-b19b-4ecd-b313-59273f0efa75") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C300") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 290.83 262.89 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1143ac05-e0c5-4f2d-80a5-b9dcd2a3cb85") + (property "Reference" "L2" + (at 288.29 264.16 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "FB" + (at 288.29 260.35 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 290.83 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 290.83 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 290.83 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "875-HZ1206E601R-10" + (at 290.83 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ec2a0fea-3f85-48dd-9eba-55c6301b8c4c") + ) + (pin "2" + (uuid "90ef6e14-6458-4cf7-aa84-760d5feeabac") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 123.19 91.44 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "117c46b9-8f89-4278-8d1e-73cd6825eac4") + (property "Reference" "L302" + (at 123.19 86.7904 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "2.2 uH" + (at 123.19 89.2146 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 123.19 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 123.19 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "51f27494-9d87-496e-bf36-a5a223afa3e3") + ) + (pin "2" + (uuid "46ced13c-cb58-4218-8e6d-c78df12edb82") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L302") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 100.33 124.46 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "11dda471-4080-487e-8d41-1ed5f119d67f") + (property "Reference" "C401" + (at 100.33 118.1567 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 100.33 120.5809 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 104.14 123.4948 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 100.33 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 100.33 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 100.33 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "4b2d28c6-2741-477b-95ba-02b311d7785c") + ) + (pin "1" + (uuid "6383ff55-ce23-405b-957c-5f7b72fc8d90") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C401") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 26.67 237.49 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "12fa0e20-feb3-45d2-98bc-85d5977d3603") + (property "Reference" "#PWR040" + (at 26.67 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 24.13 238.76 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 26.67 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 26.67 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 26.67 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4bfb38f0-e0fa-49e5-a195-8707692e67fb") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR040") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 184.15 127 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "140109ab-5429-4d30-b7b0-d005e81f99bb") + (property "Reference" "U13" + (at 184.15 116.5057 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 184.15 118.9299 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 184.15 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 184.15 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 184.15 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 184.15 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "8dda98de-e0b6-4665-9364-cb735f7334c5") + ) + (pin "6" + (uuid "239d98de-7564-4afc-8db4-e7818e742aee") + ) + (pin "4" + (uuid "c2505134-a46b-4949-9337-6273b764da65") + ) + (pin "1" + (uuid "5d0620c3-ade4-4f0b-99aa-353efd2f1751") + ) + (pin "2" + (uuid "65755069-cd69-4075-a229-ce4eeb06d6b3") + ) + (pin "3" + (uuid "6c416425-9a26-4d6c-aa73-796f1ca6abed") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 60.96 154.94 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "151edde7-04bf-4db7-96dc-bc08cecf8033") + (property "Reference" "C500" + (at 60.96 161.2433 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 60.96 158.8191 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 64.77 155.9052 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 60.96 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 60.96 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 60.96 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "28943ed1-5acb-4ce8-88a4-942e1a66ec60") + ) + (pin "1" + (uuid "846e3970-a44b-4d05-8699-b17c4fa031fa") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C500") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 327.66 97.79 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "162a39d8-ed52-459e-9a4c-238effe5e5a9") + (property "Reference" "C294" + (at 324.739 96.5779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1.9 nF" + (at 324.739 99.0021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 328.6252 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 327.66 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 327.66 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 327.66 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "585ea207-3635-4d97-93e9-26c6b1e95617") + ) + (pin "1" + (uuid "693b376e-48fb-4481-b20c-1b01e578b8fd") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C294") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 327.66 67.31 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "164d161c-b28d-4332-82d3-8855e6673932") + (property "Reference" "C194" + (at 324.739 66.0979 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2.5 nF" + (at 324.739 68.5221 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 328.6252 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 327.66 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 327.66 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 327.66 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e0022f0b-3cd6-43e3-b833-fadd848517f1") + ) + (pin "1" + (uuid "7ce323f5-ee0f-41f4-b3f2-f26e4833d945") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C194") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 308.61 38.1 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "1654cc3f-0ccd-496e-9ec5-8d917b827884") + (property "Reference" "L91" + (at 309.8772 36.8879 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "2 uH" + (at 309.8772 39.3121 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 308.61 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 308.61 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 308.61 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e17e43c7-c96a-4d04-a721-4cd0f6c8b9c4") + ) + (pin "2" + (uuid "c9b3d236-7ae0-4a00-a54d-761a4f088a78") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L91") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 394.97 100.33 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "166303fd-2161-4690-9d32-b164081ad65f") + (property "Reference" "C26" + (at 401.2733 100.33 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 398.8491 100.33 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 395.9352 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 394.97 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 394.97 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 394.97 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "cd48f1b0-cd17-4027-84c4-64e4929b7ff4") + ) + (pin "1" + (uuid "06fad67e-426b-4e52-a8ac-23c5db83d13e") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C26") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 101.6 259.08 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "17545a02-9e98-4859-82ef-5e009984584a") + (property "Reference" "#PWR09" + (at 101.6 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 101.6 254.9469 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 101.6 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 101.6 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 101.6 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "af313dfa-8933-4f21-857f-f2bd158d6fa0") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR09") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 41.91 276.86 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "18217454-d85a-4719-8b11-1298299bf9a6") + (property "Reference" "#PWR01" + (at 41.91 283.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 39.37 278.13 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 41.91 276.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 41.91 276.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 41.91 276.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "37d8310b-fbb6-4afb-9ecd-d0525fc3d810") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR01") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 78.74 227.33 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1915a154-6250-4565-a35a-161d2edafc70") + (property "Reference" "U21" + (at 78.74 216.8357 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 78.74 219.2599 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 78.74 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 78.74 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 78.74 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 78.74 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "400e2e16-0533-4573-a4ef-013212e9fae5") + ) + (pin "6" + (uuid "4b9c1172-1524-4aea-aab0-476dbff9efaa") + ) + (pin "4" + (uuid "b44974a4-e6a6-4c68-a8c2-a9af0c54a021") + ) + (pin "1" + (uuid "15def029-eb56-4992-90c5-7f71e56d8891") + ) + (pin "2" + (uuid "74a62d78-9e17-4e1e-9fa5-e52093b97c75") + ) + (pin "3" + (uuid "afb08eac-c197-4f91-bb90-d3969b52f356") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U21") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 358.14 38.1 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "199661ad-f18c-4584-8f5a-8b6d3c2d2d8a") + (property "Reference" "L95" + (at 359.4072 36.8879 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "2 uH" + (at 359.4072 39.3121 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 358.14 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 358.14 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 358.14 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5d7fca93-60fc-432c-aa89-118546c51867") + ) + (pin "2" + (uuid "0fb1edf0-c91e-4849-a923-f287624afb73") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L95") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xGxx:74LVC1G04") + (at 231.14 91.44 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1ae5e12e-1b68-48f1-8498-e0d1481aa237") + (property "Reference" "U29" + (at 232.41 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SN74LVC1G04DCK" + (at 236.22 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:SOT-SC70" + (at 231.14 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 231.14 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 231.14 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "595-SN74LVC1G04DCKR" + (at 231.14 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ba5c0ad2-3ee4-4851-8fea-3dd612e6f085") + ) + (pin "4" + (uuid "2f108dc9-539a-4506-9081-0a51509ead73") + ) + (pin "3" + (uuid "8b6f389d-9a1e-4118-a8b4-1b33ae4a929c") + ) + (pin "5" + (uuid "5eedfa8f-1a9b-46cc-98dc-f66cb9864d6c") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U29") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 195.58 204.47 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1ba6bca7-0a7b-46ee-8a69-e5059ed58633") + (property "Reference" "#PWR038" + (at 195.58 210.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 198.12 205.74 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 195.58 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 195.58 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 195.58 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "dbad6850-e1b7-4c4f-8eeb-d796498c4041") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR038") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 148.59 157.48 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "1de2fc91-7aaf-4991-b091-b743e9a048e9") + (property "Reference" "L504" + (at 148.59 152.8304 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "820 nH" + (at 148.59 155.2546 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 148.59 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 148.59 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b8207458-10df-4264-a77b-c85fcc5eb492") + ) + (pin "2" + (uuid "2ac28c07-b01e-460a-a0aa-cab04d0d4607") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L504") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 132.08 69.85 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "1de8e54a-6471-4c1f-9213-0b4be591ada6") + (property "Reference" "L7" + (at 130.8128 68.6379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 130.8128 71.0621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 132.08 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 132.08 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 132.08 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e6f54448-b628-455c-982c-0056ff775bcb") + ) + (pin "1" + (uuid "74b03031-0acc-4bbb-8eb0-7bfe63f06c4e") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 165.1 157.48 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "2039a4de-5f24-4c16-9b2d-30d756181de1") + (property "Reference" "C507" + (at 165.1 151.1767 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 165.1 153.6009 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 168.91 156.5148 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 165.1 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 165.1 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 165.1 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "fca81156-3560-49c9-b293-7067759cc7b7") + ) + (pin "1" + (uuid "8160a514-5c5e-427d-b15c-05ec8330e8f5") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C507") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 204.47 27.94 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "206ecebd-9079-4e86-a52b-2e2bd32601c1") + (property "Reference" "C108" + (at 204.47 34.2433 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 204.47 31.8191 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 208.28 28.9052 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 204.47 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 204.47 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 204.47 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3270330f-de90-4395-82db-245d0cac625f") + ) + (pin "1" + (uuid "8bbd66c0-dfa9-428f-bbad-86dc3845bb0f") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C108") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 279.4 266.7 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "20de7694-5a03-4287-901d-80ae7acdc708") + (property "Reference" "C4" + (at 282.321 265.4879 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 282.321 267.9121 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 280.3652 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 279.4 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 279.4 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 279.4 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "06dc9fc0-70ef-42c3-b278-c9a639bb2d71") + ) + (pin "1" + (uuid "82673adf-e1e9-4783-baa0-e20199f5a17e") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 339.09 29.21 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "21671a81-0252-4985-bb40-316118f4494d") + (property "Reference" "C95" + (at 341.63 22.86 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "580 pF" + (at 342.9 25.4 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 335.28 30.1752 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 339.09 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 339.09 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 339.09 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "bdba0e80-95d2-42de-bf8b-593f6c856ff5") + ) + (pin "1" + (uuid "339f4951-860e-41ef-8542-8bf223092d1a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C95") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 307.34 38.1 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "22a1c680-e575-4cfe-b7b3-c95e86ba56fa") + (property "Reference" "L23" + (at 306.0728 36.8879 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 307.975 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 307.34 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 307.34 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 307.34 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "9b877b3e-fe8f-4454-9566-c4b99348f958") + ) + (pin "1" + (uuid "d5e02e6e-2221-45d1-ba13-6a7edbfecc2a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L23") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 226.06 81.28 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "246c1439-fc41-4bbd-b6dc-07ed7a7a89db") + (property "Reference" "#PWR056" + (at 226.06 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 226.06 77.1469 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 226.06 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 226.06 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 226.06 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1b638926-51b5-4ff9-b7f2-cc202f053d6f") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR056") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 347.98 58.42 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "2530615d-d6e3-432f-8008-7138c914b589") + (property "Reference" "L194" + (at 347.98 53.7704 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "5.2 uH" + (at 347.98 56.1946 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 347.98 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 347.98 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 347.98 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "478c5c74-44ae-4af2-872b-742cb7b7597f") + ) + (pin "2" + (uuid "c66b13a7-3ac0-4b20-abf9-4368bd87689b") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L194") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 78.74 63.5 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "269cb597-4082-427d-abc9-d4fc02aa88cd") + (property "Reference" "U6" + (at 78.74 53.0057 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 78.74 55.4299 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 78.74 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 78.74 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 78.74 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 78.74 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "8c01d4c5-ab5f-435f-8786-6653d5a8f24f") + ) + (pin "6" + (uuid "feee951b-1b6a-4108-b668-5c5b3a4c5ab1") + ) + (pin "4" + (uuid "43f10acf-4f88-4d84-86f0-9d036ddcd0bc") + ) + (pin "1" + (uuid "62cdb78a-abf5-49a8-a17b-2a39fbb8ab76") + ) + (pin "2" + (uuid "a42d1240-5631-47a5-91e7-b677c68c538c") + ) + (pin "3" + (uuid "1db0e7c6-b738-434e-92b8-a83128773bcf") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 158.75 100.33 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "27988936-6ca5-480e-985f-6b862f5fc557") + (property "Reference" "L305" + (at 160.0172 99.1179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "220 nH" + (at 160.0172 101.5421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 158.75 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 158.75 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 158.75 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "94585a89-f422-4300-9766-4977be527d5b") + ) + (pin "2" + (uuid "80484c3b-ed91-493a-b945-03741dfca53a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L305") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 274.32 262.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "284138e9-2e5c-40fb-ab1a-4d4e07d5d463") + (property "Reference" "TP15" + (at 275.717 258.3759 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 275.717 260.8001 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 279.4 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 279.4 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 274.32 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 274.32 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ab95491b-dc9d-485a-b0a4-3c4b7f5db483") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "TP15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 358.14 67.31 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "28eb6215-2d59-4c7c-9444-f04ae039039f") + (property "Reference" "L195" + (at 359.4072 66.0979 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "840 nH" + (at 359.4072 68.5221 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 358.14 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 358.14 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 358.14 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "77ad08cf-6b10-4ee6-b6c0-9b70cfa400b7") + ) + (pin "2" + (uuid "8474805b-2117-4547-a2e1-e625f577901c") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L195") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 364.49 58.42 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "2b0e243b-22bb-41bd-ae7f-a4fc390a0fd8") + (property "Reference" "C197" + (at 364.49 52.1167 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 364.49 54.5409 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 368.3 57.4548 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 364.49 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 364.49 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 364.49 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c3f1ed27-d37a-4663-821f-d17cef9ad1bf") + ) + (pin "1" + (uuid "4d8c901b-5088-4cec-a030-2fae6d4dd650") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C197") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 232.41 266.7 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "2b4b3561-e3c1-49e4-bbe9-81aab862860c") + (property "Reference" "C2" + (at 235.331 265.4879 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 235.331 267.9121 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 233.3752 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 232.41 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 232.41 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 232.41 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "24930b84-6fc5-468e-8e1f-6711276253f4") + ) + (pin "1" + (uuid "2a36b7e3-add5-4a3d-93e4-2eb19d964d0d") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 184.15 93.98 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2bf480d9-a69f-4c73-abe2-da343d5943af") + (property "Reference" "U10" + (at 184.15 83.4857 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 184.15 85.9099 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 184.15 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 184.15 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 184.15 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 184.15 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "5ca7e98e-260e-41f1-ba58-a6e5a48307dd") + ) + (pin "6" + (uuid "5c3b8980-f202-4915-bf0c-46dbd153b4eb") + ) + (pin "4" + (uuid "c2a5726a-9c49-472e-8494-446f1b3a571e") + ) + (pin "1" + (uuid "2e8c1ce7-de82-4b72-abf6-3cb0f4fde5cb") + ) + (pin "2" + (uuid "02597375-a52e-4927-877d-7c2c9d679f1c") + ) + (pin "3" + (uuid "17a3fcdd-2da0-4c9b-927c-0eea3c5ca0b4") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 148.59 30.48 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "2dcd5f2f-3e25-446c-b030-8f7a6de6aa8f") + (property "Reference" "L104" + (at 148.59 25.8304 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "5.6 uH" + (at 148.59 28.2546 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 148.59 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 148.59 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "9462038f-0610-4e46-b906-3885923b8d7b") + ) + (pin "2" + (uuid "00a96e33-363d-4822-a0ee-1c84c42ea134") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L104") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 67.31 140.97 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2ea0879e-ffa0-4f84-8605-a5e500aecbba") + (property "Reference" "#PWR026" + (at 67.31 147.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 64.77 142.24 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 67.31 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 67.31 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 67.31 140.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3c1f7e6f-dd6a-4649-a2cc-7a5fc969de33") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR026") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 353.06 97.79 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2efa9e26-195a-4a9a-b972-28d695107de7") + (property "Reference" "C296" + (at 350.139 96.5779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1.0 nF" + (at 350.139 99.0021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 354.0252 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 353.06 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 353.06 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 353.06 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d3e2d497-454c-4430-aaf9-df8bae805a97") + ) + (pin "1" + (uuid "c56c57c4-bd69-4005-9377-892496e9e095") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C296") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 67.31 101.6 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2f1272f9-0edd-4cc2-a60c-f4cb6940c2bc") + (property "Reference" "C11" + (at 61.0067 101.6 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 63.4309 101.6 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 66.3448 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 67.31 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 67.31 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 67.31 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b26e0632-6c73-407a-bd7b-98c5af2f59db") + ) + (pin "1" + (uuid "e9ac7b0e-a88d-4527-8b55-b52bd8c9608e") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 123.19 190.5 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "302ea8aa-d70d-4405-bfa3-f7ef4231b6f8") + (property "Reference" "L602" + (at 123.19 185.42 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "720 nH" + (at 123.19 187.96 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 123.19 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 123.19 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "57e950aa-9857-43aa-be45-acdda4ec25df") + ) + (pin "2" + (uuid "8012bbf2-eedb-4b19-bacd-79329d790e28") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L602") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 195.58 200.66 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "31c594c7-1175-48fe-a2c5-e0393960528d") + (property "Reference" "C20" + (at 201.8833 200.66 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 199.4591 200.66 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 196.5452 196.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 195.58 200.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 195.58 200.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 195.58 200.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b5318879-6c38-4f63-a637-5649e2cb6fa6") + ) + (pin "1" + (uuid "0c7b9221-09ae-45d1-9dc3-245601e07381") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C20") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 128.27 39.37 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3317fd17-51a3-406d-b204-92b74a5342dc") + (property "Reference" "C104" + (at 125.349 38.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "3 nF" + (at 125.349 40.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 129.2352 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 128.27 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 128.27 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 128.27 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "066b33e6-1a0d-424b-8b56-0f33dcaa20fd") + ) + (pin "1" + (uuid "90e20e31-d8cb-4388-b0f1-5aaa27a29d53") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C104") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 78.74 127 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3386d1c4-09de-4b19-9a84-6ec59e2fb040") + (property "Reference" "U12" + (at 78.74 116.5057 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 78.74 118.9299 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 78.74 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 78.74 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 78.74 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 78.74 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "c6c02b35-8588-466d-bdac-aaf19e41a131") + ) + (pin "6" + (uuid "dbd2f3eb-de89-48aa-95e8-e5ac79e51646") + ) + (pin "4" + (uuid "d07d8d48-2a1f-42b2-8af0-fc5888080f42") + ) + (pin "1" + (uuid "aeb800ef-3a1d-47f0-bcd4-54972483e38a") + ) + (pin "2" + (uuid "00038536-a0e8-4bee-a58e-2578bdf14872") + ) + (pin "3" + (uuid "49bb81fe-7cb4-4380-92d8-097c339b8543") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U12") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 60.96 27.94 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "340aa873-0ce2-45c9-bb11-113223f6f406") + (property "Reference" "C100" + (at 60.96 34.2433 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 60.96 31.8191 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 64.77 28.9052 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 60.96 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 60.96 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 60.96 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ca182e0a-410e-4c12-b553-cee98c1327f9") + ) + (pin "1" + (uuid "85c14e63-a458-4812-bc80-8bb6a3ddb09a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C100") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 67.31 208.28 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "355b9f23-22c5-4f2e-8a50-29af5a0c320e") + (property "Reference" "#PWR036" + (at 67.31 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 64.77 209.55 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 67.31 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 67.31 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 67.31 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4240eb95-3e62-48df-95cd-e1ef16064727") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR036") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 123.19 118.11 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "362cb966-8d09-491c-b449-8b9ea0e0b9db") + (property "Reference" "L36" + (at 124.4021 116.8428 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 121.9779 116.8428 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 123.19 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 123.19 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "918521ee-814e-4283-b05f-a1fd28b55b23") + ) + (pin "1" + (uuid "8e538190-9371-4bcf-93ff-9651cae251b7") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L36") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 107.95 199.39 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "36755677-301d-4348-a5a9-35d7bf3cb543") + (property "Reference" "L18" + (at 106.6828 198.1779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 106.6828 200.6021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 107.95 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 107.95 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 107.95 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "9e8a22a4-49c2-4134-9e70-294cf2ed275b") + ) + (pin "1" + (uuid "0f2f81cf-94cf-4b89-9df5-2b14cfa1cc5c") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L18") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 157.48 100.33 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "36a3069e-e169-4353-bf23-42f5ed1a1278") + (property "Reference" "L11" + (at 156.2128 99.1179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 156.2128 101.5421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 157.48 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 157.48 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 157.48 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "55a8fc8e-41e3-42c7-8b99-3a521d52aeda") + ) + (pin "1" + (uuid "ee528cbf-36de-4704-87d1-e3f1fc563f2d") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 158.75 39.37 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "372983ad-b4fb-44e0-b520-73b161305821") + (property "Reference" "L105" + (at 160.0172 38.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "1 uH" + (at 160.0172 40.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 158.75 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 158.75 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 158.75 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ab274945-820f-49ec-8ad9-0fd8e2ae337d") + ) + (pin "2" + (uuid "bc41b2de-0013-4104-9e81-8c8b0a2aced1") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L105") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 278.13 91.44 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "38078296-eecd-4899-834c-1db76864f445") + (property "Reference" "U30" + (at 278.13 80.9457 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 278.13 83.3699 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 278.13 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 278.13 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 278.13 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 278.13 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "46101339-e898-4f90-8b42-e403f36c0b8f") + ) + (pin "6" + (uuid "456fe3c8-830c-4831-bae0-8a618877d23e") + ) + (pin "4" + (uuid "f21de1f3-4b6c-442f-a105-1b0325fa350f") + ) + (pin "1" + (uuid "1bdd9bd2-c7d9-4ec9-86e6-23edfdc4afcb") + ) + (pin "2" + (uuid "2507b987-b3e4-481c-a499-7313b7fda6ff") + ) + (pin "3" + (uuid "1b2d3fe4-93d6-44c8-bb47-7ee9029bc733") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U30") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 347.98 82.55 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "387da95c-e087-43cf-9663-ab2afa409367") + (property "Reference" "L47" + (at 349.1921 81.2828 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 346.7679 81.2828 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 347.98 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 347.98 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 347.98 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b9a3124a-c355-45fc-b840-4c2f3f7ad299") + ) + (pin "1" + (uuid "a85c9f87-4dda-46f0-a016-2b609ef0665f") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L47") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 123.19 85.09 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "395a69ba-e993-4725-8d7c-34ff7a80fcf2") + (property "Reference" "L34" + (at 124.4021 83.8228 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 121.9779 83.8228 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 123.19 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 123.19 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c848bc5f-7c65-4491-a602-0e95dadbd160") + ) + (pin "1" + (uuid "6725fe47-5556-4a1e-ae45-bf5c9df1b342") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L34") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 295.91 219.71 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "39a828b1-cca8-4ef1-a3e8-41e497c8a734") + (property "Reference" "R2" + (at 295.91 220.98 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 298.45 220.98 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 297.688 219.71 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 295.91 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 295.91 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "652-CR1206FX-2201ELF" + (at 295.91 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d515ee0a-eecf-46d3-9750-0f2046b4e3b8") + ) + (pin "1" + (uuid "99d47e0b-45c2-4cf2-95bb-0ae8141d4d91") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "R2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 368.3 204.47 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3c03ae57-3ece-4b8b-9f8a-b4d6dabba195") + (property "Reference" "R8" + (at 370.586 203.454 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 369.824 205.486 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 370.078 204.47 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 368.3 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 368.3 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "652-CR1206FX-2201ELF" + (at 368.3 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3f1ae628-8b82-4ab6-88cf-af98ab6b68d9") + ) + (pin "1" + (uuid "0e92fb79-10c4-4adc-9596-e0872a5b98df") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "R8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 100.33 30.48 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3c10f987-8639-4071-988d-6efe26b09d58") + (property "Reference" "C101" + (at 100.33 24.1767 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 100.33 26.6009 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 104.14 29.5148 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 100.33 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 100.33 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 100.33 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "de38c835-4486-4346-bc47-e9937e9331ee") + ) + (pin "1" + (uuid "f3b98b76-ac41-4b3d-9674-1c5f5d820bc9") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C101") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 290.83 219.71 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3e6c630f-e5f9-4e6c-8150-66d2e0b1ff48") + (property "Reference" "R3" + (at 290.83 220.98 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 293.37 220.98 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 292.608 219.71 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 290.83 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 290.83 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "652-CR1206FX-2201ELF" + (at 290.83 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "8254481f-4daf-4171-b592-f9ff3f561e72") + ) + (pin "1" + (uuid "50bc90c9-1d22-467f-840a-de4a94cdfb86") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "R3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 339.09 58.42 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3e98d564-cfeb-4c75-aec5-b5f28092609b") + (property "Reference" "C195" + (at 341.63 52.07 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "195 pF" + (at 342.9 54.61 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 335.28 59.3852 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 339.09 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 339.09 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 339.09 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f06507b4-ac7d-465a-b677-d16f0f9ba1c9") + ) + (pin "1" + (uuid "83dbe47f-b6f2-4971-8eec-4f7b084fe21b") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C195") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 120.65 205.74 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3eee5693-3b33-4272-ab93-91b0664cd303") + (property "Reference" "#PWR037" + (at 120.65 212.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 118.11 207.01 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 120.65 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 120.65 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 120.65 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b5b8c6f3-727e-4f17-8d35-b41f86331494") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR037") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 139.7 91.44 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3eff3fac-6f66-4649-98e2-12865ef74f6b") + (property "Reference" "C305" + (at 142.24 85.09 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "75 pF" + (at 143.51 87.63 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 135.89 92.4052 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 139.7 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 139.7 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 139.7 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "08574a50-a5fa-48a6-a6a2-33b7818fbea4") + ) + (pin "1" + (uuid "abb36a0a-128b-433a-ac7b-5ba2d630babc") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C305") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 107.95 166.37 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "3fc4a484-020e-489a-903c-d654724d0e30") + (property "Reference" "L15" + (at 106.6828 165.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 106.6828 167.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 107.95 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 107.95 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 107.95 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "cf93b5aa-a028-4fa9-8f35-0d83cff6ee75") + ) + (pin "1" + (uuid "72ab61fc-64d6-4682-977c-a7bf844c6103") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 107.95 69.85 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "4217870b-9a02-4fc3-b6f1-c47ac41f79e2") + (property "Reference" "L6" + (at 106.6828 68.6379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 106.6828 71.0621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 107.95 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 107.95 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 107.95 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "2da18157-553c-4e6b-bc9f-9e998bc70cea") + ) + (pin "1" + (uuid "81ae1775-fa97-4804-8daa-0fdcf7550bb0") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:D_Zener") + (at 360.68 184.15 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "42231040-d73d-450f-a4aa-16c23d8440b6") + (property "Reference" "D2" + (at 360.68 189.5643 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "BAS70H,115" + (at 360.68 187.1401 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Diode_SMD:D_SOD-123F" + (at 360.68 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 360.68 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 360.68 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "771-BAS70H-T/R" + (at 360.68 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 360.68 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6ff4aeed-ea3b-487f-95ca-182005edd76c") + ) + (pin "1" + (uuid "e85e6fc4-5bb8-436b-a2a7-60af066472d6") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "D2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 100.33 157.48 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "42eef67c-d5db-4464-b042-8b8ab2b303f8") + (property "Reference" "C501" + (at 100.33 151.1767 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 100.33 153.6009 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 104.14 156.5148 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 100.33 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 100.33 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 100.33 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d9909e90-a017-4200-a96f-5833049a8978") + ) + (pin "1" + (uuid "034a0f75-28c2-4de2-bdab-d1c8ca904fa4") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C501") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 67.31 105.41 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4334b1d2-7e40-4159-9cc1-78e066a6a59a") + (property "Reference" "#PWR021" + (at 67.31 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 64.77 106.68 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 67.31 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 67.31 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 67.31 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "217d8665-87d6-4a51-89e9-b18611930a4f") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR021") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 67.31 172.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "43405475-c55d-44d6-b79b-fe853553a5d8") + (property "Reference" "#PWR031" + (at 67.31 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 64.77 173.99 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 67.31 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 67.31 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 67.31 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b6984124-41dd-49af-92f0-988e0b7838c3") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR031") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 303.53 67.31 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "436e9748-fa8e-4735-8ac7-c2a9bb9fed90") + (property "Reference" "C192" + (at 300.609 66.0979 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1.2 nF" + (at 300.609 68.5221 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 304.4952 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 303.53 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 303.53 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 303.53 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "759b0bed-e064-4d4b-bae1-15cac7c95943") + ) + (pin "1" + (uuid "6d659dfa-7178-48d5-bf4e-cd2212de949f") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C192") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 364.49 29.21 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4409183d-f9c4-4c80-9426-c84713a64077") + (property "Reference" "C97" + (at 364.49 22.9067 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 364.49 25.3309 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 368.3 28.2448 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 364.49 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 364.49 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 364.49 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5fe10b74-ed2a-4231-8f3f-5a36f7f0c080") + ) + (pin "1" + (uuid "f41e6397-ae26-42b2-993e-1d429811b385") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C97") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 60.96 232.41 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "44e300c3-aa52-428a-af9d-e9b679299ffe") + (property "Reference" "C700" + (at 67.2633 232.41 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 64.8391 232.41 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 61.9252 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 60.96 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 60.96 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 60.96 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "890a04c3-5db2-425a-ab17-527cc431e207") + ) + (pin "1" + (uuid "be6e8fda-53e0-4bca-be3b-5c039aef6718") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C700") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 176.53 252.73 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "464e1161-c552-4549-85c1-eface94a999d") + (property "Reference" "J1" + (at 175.26 248.92 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TO PA" + (at 179.07 250.19 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 176.53 252.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 176.53 252.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 176.53 252.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 176.53 252.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 176.53 252.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "77feacc7-34d2-4d9a-9332-47f916273d4f") + ) + (pin "2" + (uuid "3de4e03e-3d48-4c78-96d6-bf88a5207ee9") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "J1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 153.67 39.37 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "479cc10c-eb7f-474d-aa86-4e8f23f5d14a") + (property "Reference" "C106" + (at 150.749 38.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1.8 nF" + (at 150.749 40.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 154.6352 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 153.67 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 153.67 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 153.67 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "05db7ff5-cfe4-4c7f-aca0-57339341f5d9") + ) + (pin "1" + (uuid "b0b3bd79-886b-40c1-8307-fbec82e94e73") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C106") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 307.34 67.31 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "486d24cc-18f9-41a5-89c4-c321cc54e2ee") + (property "Reference" "L26" + (at 306.0728 66.0979 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 307.975 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 307.34 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 307.34 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 307.34 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e82b1ebe-8f99-42fb-b5f3-5ac27dfb245c") + ) + (pin "1" + (uuid "20cecef6-f20e-41b2-9ced-cafd5eb40ce0") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L26") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 303.53 38.1 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4a142ff2-8397-4255-973c-e82e178b7faf") + (property "Reference" "C92" + (at 300.609 36.8879 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "3.1 nF" + (at 300.609 39.3121 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 304.4952 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 303.53 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 303.53 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 303.53 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "159fa332-062f-4034-b6cf-8799f9949244") + ) + (pin "1" + (uuid "7ce1b733-796f-49f6-aa0e-503930d0ab71") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C92") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 120.65 76.2 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4a87f4f6-b712-4aff-8e91-36879b99095c") + (property "Reference" "#PWR017" + (at 120.65 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 118.11 77.47 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 120.65 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 120.65 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 120.65 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8b3eb896-327e-4b3f-af65-933bc6145efe") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR017") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 322.58 52.07 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "4c42cd88-9cbf-462c-9769-81a5e94b7fe5") + (property "Reference" "L44" + (at 323.7921 50.8028 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 321.3679 50.8028 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 322.58 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 322.58 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 322.58 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "01520724-9291-497d-8aa7-279674fe40ea") + ) + (pin "1" + (uuid "7031739b-8383-4d35-96d3-211e710e8935") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L44") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 132.08 133.35 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "4c570ce3-c4a7-4a1a-88da-038c4e02892d") + (property "Reference" "L13" + (at 130.8128 132.1379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 130.8128 134.5621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 132.08 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 132.08 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 132.08 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "446b98e7-7f44-4c3d-84fe-1f5ce622b5dd") + ) + (pin "1" + (uuid "c1ec1e2b-a8c5-4dfa-ab5e-c132f4a608d2") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 294.64 262.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4cf218c4-ced0-4ce2-a439-c78d8b126480") + (property "Reference" "#PWR06" + (at 294.64 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 294.64 258.7569 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 294.64 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 294.64 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 294.64 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "26585383-1e77-45a7-8568-cbee1fbce634") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR06") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 139.7 30.48 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4d4a82b9-9e58-4a92-bbff-34512080e6b4") + (property "Reference" "C105" + (at 142.24 24.13 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "300 pF" + (at 143.51 26.67 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 135.89 31.4452 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 139.7 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 139.7 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 139.7 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "693f31ce-ccc8-469e-8ae0-6596b4d5a7cb") + ) + (pin "1" + (uuid "3aa6265a-89ae-43b5-b059-51b5e7d57ac5") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C105") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 165.1 91.44 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4e29bb14-0fc2-4e33-bdbf-9855216cf64d") + (property "Reference" "C307" + (at 165.1 85.1367 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 165.1 87.5609 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 168.91 90.4748 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 165.1 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 165.1 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 165.1 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e72279ba-651e-4cca-8dbf-ad7e1063af5f") + ) + (pin "1" + (uuid "40f0efa2-d53b-4ef0-acad-0b49d4bba4e9") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C307") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 109.22 133.35 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4f165c0c-2fa2-4f38-bfb2-53a2b081179d") + (property "Reference" "L401" + (at 110.4872 132.1379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "150 nH" + (at 110.4872 134.5621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 109.22 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 109.22 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 109.22 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "2aaf85bb-b4c3-48c3-8267-8c498db6a95b") + ) + (pin "2" + (uuid "02b737b5-c4cc-47ff-b1ef-d7f7c3d815d1") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L401") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 104.14 166.37 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "528e1f3a-26ba-46fb-92c4-a90428f4a9c8") + (property "Reference" "C502" + (at 101.219 165.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "300 pF" + (at 101.219 167.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 105.1052 162.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 104.14 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 104.14 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 104.14 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "9c58fe45-3818-4c45-91f0-8a7a628b3901") + ) + (pin "1" + (uuid "7521decc-81c0-4fce-ae78-d151ef01f0cb") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C502") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 139.7 124.46 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "550447ec-cea5-48d5-a6ed-d762105080cc") + (property "Reference" "C405" + (at 142.24 118.11 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "51 pF" + (at 143.51 120.65 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 135.89 125.4252 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 139.7 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 139.7 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 139.7 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "7da393ab-6528-4d57-8bb0-4f941c93b075") + ) + (pin "1" + (uuid "8cd17308-5594-45e1-b7ab-371caf17f2c0") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C405") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 133.35 69.85 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5581d0fe-c83b-4861-9cfc-97ad9cbd648a") + (property "Reference" "L203" + (at 134.6172 68.6379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "330 nH" + (at 134.6172 71.0621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 133.35 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 133.35 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 133.35 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "91cddf79-73c3-408e-9d00-ce99893e5421") + ) + (pin "2" + (uuid "1d89fd62-236f-451e-993d-ac2a9eb40970") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L203") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 120.65 106.68 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5595847f-b7b6-4ff6-808b-3207b5be856a") + (property "Reference" "#PWR022" + (at 120.65 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 118.11 107.95 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 120.65 106.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 120.65 106.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 120.65 106.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "93fd0b1f-8bd4-441a-9961-094d828e570d") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR022") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 266.7 39.37 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5656cfac-a698-4da7-9a44-f1eb161238be") + (property "Reference" "C21" + (at 260.3967 39.37 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 262.8209 39.37 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 265.7348 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 266.7 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 266.7 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 266.7 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b40747e1-cce9-4f37-802f-eb7dcea0fd45") + ) + (pin "1" + (uuid "c9ecf38d-42e1-4d8a-b1eb-1b697f56ca29") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C21") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:D_Zener") + (at 360.68 199.39 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "573999de-4183-4817-82a2-9290ce7ed417") + (property "Reference" "D3" + (at 360.68 193.9757 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "BAS70H,115" + (at 360.68 196.3999 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Diode_SMD:D_SOD-123F" + (at 360.68 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 360.68 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 360.68 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "771-BAS70H-T/R" + (at 360.68 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 360.68 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3541d6b1-e252-457a-88cf-30f44445337c") + ) + (pin "1" + (uuid "5e83246d-c005-4f00-aed9-79c32291d506") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "D3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 148.59 184.15 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "57a60750-6dd7-45c8-a1c8-beccd27af7fd") + (property "Reference" "L41" + (at 149.8021 182.8828 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 147.3779 182.8828 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 148.59 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 148.59 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b32ce685-046e-455e-9f80-74926024e1f1") + ) + (pin "1" + (uuid "b7cf1f75-d29f-413c-8551-f8e47febd361") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L41") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 222.25 262.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "57cd1745-9e0e-484e-a2fd-91ca567d0af0") + (property "Reference" "#PWR08" + (at 222.25 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 222.25 257.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 222.25 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 222.25 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 222.25 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "941e86c3-9968-46d2-a785-24c7b2de52f1") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR08") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 158.75 199.39 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "589dc2e4-84a5-42d4-bc1b-59104bb7cda5") + (property "Reference" "L605" + (at 160.0173 198.1779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "39 nH" + (at 160.0173 200.6021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 158.75 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 158.75 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 158.75 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f3716be9-8bc6-4289-885e-f9c21df863d6") + ) + (pin "2" + (uuid "557924e5-843d-4884-a2e0-6c6792e08f16") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L605") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 394.97 104.14 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "58f70335-fa62-408e-8033-a21674418898") + (property "Reference" "#PWR060" + (at 394.97 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 397.51 105.41 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 394.97 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 394.97 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 394.97 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "2e6f9c0a-2d26-4ac8-b798-c9efdcd34ec7") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR060") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 49.53 255.27 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5a22e6d1-3773-4d21-8580-b98329300aff") + (property "Reference" "C5" + (at 49.53 261.5733 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 49.53 259.1491 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 53.34 256.2352 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 49.53 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 49.53 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 49.53 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "93f15017-778c-466c-82d7-fbc620e37607") + ) + (pin "1" + (uuid "7d7f9a92-5590-46eb-bd1d-06685f51d5e8") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 210.82 262.89 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5a7a2b5b-e172-40d3-b92e-9388ae0ce3c0") + (property "Reference" "L1" + (at 210.82 258.2404 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10uH 20%" + (at 210.82 260.6646 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Inductor_SMD:L_Bourns-SRN6028" + (at 210.82 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 210.82 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 210.82 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "81-1264EY-100MP3" + (at 210.82 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ce17c9ba-c722-458f-a59d-67772083b34f") + ) + (pin "2" + (uuid "42638f1f-46ee-46de-8425-08c7c11b9101") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 165.1 30.48 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5b3c976d-d7ce-4ad4-8e8d-55612780e0f8") + (property "Reference" "C107" + (at 165.1 24.1767 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 165.1 26.6009 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 168.91 29.5148 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 165.1 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 165.1 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 165.1 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3d6ef66d-b500-42fd-aacf-572d5586c8ea") + ) + (pin "1" + (uuid "e382ba63-4f6b-4709-9fec-09280aa342ee") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C107") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 107.95 133.35 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "5c1bbcc3-b8c0-4847-8cb6-1f2d354eee8e") + (property "Reference" "L12" + (at 106.6828 132.1379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 106.6828 134.5621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 107.95 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 107.95 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 107.95 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f766d869-14ca-4b9e-9db4-83b04c869692") + ) + (pin "1" + (uuid "c25cc68d-da1e-4453-bf0a-cbb88de277a6") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L12") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 123.19 124.46 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5cbe3dcb-d830-4263-9273-6ece5a19b86f") + (property "Reference" "L402" + (at 123.19 119.8104 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1.2 uH" + (at 123.19 122.2346 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 123.19 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 123.19 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1a3756fa-9a30-441f-835d-b25931c1e9a1") + ) + (pin "2" + (uuid "52e8dcce-e834-4600-accc-754f33828167") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L402") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 60.96 187.96 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5cfc5011-7f3a-4a51-b96e-9baad7735026") + (property "Reference" "C600" + (at 60.96 194.2633 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 60.96 191.8391 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 64.77 188.9252 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 60.96 187.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 60.96 187.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 60.96 187.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "89eb69d7-9d23-4e1f-b9a0-e30cf58b16d4") + ) + (pin "1" + (uuid "fb79aacd-f381-4de7-a035-dd98d666ad86") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C600") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 153.67 133.35 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5e2c3ffb-8675-498d-9d84-c18055420162") + (property "Reference" "C406" + (at 150.749 132.1379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "390 pF" + (at 150.749 134.5621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 154.6352 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 153.67 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 153.67 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 153.67 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "44fe921a-db14-4d34-bcfb-858af2531c56") + ) + (pin "1" + (uuid "be10a70a-20db-4e96-8260-32cdf3221d44") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C406") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 158.75 69.85 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5ffa8486-1739-46a8-a88e-3387ff2adda7") + (property "Reference" "L205" + (at 160.0172 68.6379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "560 nH" + (at 160.0172 71.0621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 158.75 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 158.75 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 158.75 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "079c4e06-dd52-44ac-80db-40603638e051") + ) + (pin "2" + (uuid "77e8e8bb-d00e-41c3-b9d0-67b480336ab3") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L205") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 302.26 171.45 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "605172b1-2ddf-4c40-9cf3-84891c43c9fd") + (property "Reference" "R5" + (at 300.8742 167.64 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 298.45 167.64 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 304.038 171.45 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 302.26 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 302.26 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "652-CR1206FX-2201ELF" + (at 302.26 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "01cac5ab-a8aa-471c-b320-1ecf8c5f7c52") + ) + (pin "1" + (uuid "ecece484-4442-48a7-9671-2e8ff91380e9") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "R5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 26.67 170.18 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "61b34fe4-25f2-4d87-9f14-9a04dc5b47be") + (property "Reference" "#PWR030" + (at 26.67 176.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 24.13 171.45 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 26.67 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 26.67 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 26.67 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b5eef9ea-ca94-436b-86de-cbacb7cdf23e") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR030") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 288.29 201.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "62254d6f-eb80-44c7-8a29-07333f8e13a0") + (property "Reference" "#PWR069" + (at 288.29 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 288.29 197.7969 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 288.29 201.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 288.29 201.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 288.29 201.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "83f8a968-69b4-4491-9fca-6794a1e5661f") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR069") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 26.67 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "636bf7cf-9303-4833-b658-5c50f1fd9bff") + (property "Reference" "#PWR015" + (at 26.67 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 24.13 74.93 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 26.67 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 26.67 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 26.67 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4cad835f-401e-484e-8ed8-53682df8fee5") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR015") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 201.93 275.59 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "640da293-dcff-40de-8902-104dab30dc13") + (property "Reference" "#PWR07" + (at 201.93 281.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 201.93 280.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 201.93 275.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 201.93 275.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 201.93 275.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "2852b7ed-262c-414e-8fb7-00d5d6fc0aa6") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR07") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 100.33 91.44 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "647833e6-4d69-45c8-ab96-20934a4dcb5f") + (property "Reference" "C301" + (at 100.33 85.1367 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 100.33 87.5609 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 104.14 90.4748 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 100.33 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 100.33 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 100.33 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "0c2c0bb8-de5f-434b-a1de-16dd38201145") + ) + (pin "1" + (uuid "032cc818-91df-47a5-beae-75dc628f3f88") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C301") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:D_Zener") + (at 360.68 181.61 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "64cea4ab-f910-414b-8d62-310314f8b469") + (property "Reference" "D1" + (at 360.68 176.1957 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "BAS70H,115" + (at 360.68 178.6199 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Diode_SMD:D_SOD-123F" + (at 360.68 181.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 360.68 181.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 360.68 181.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "771-BAS70H-T/R" + (at 360.68 181.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 360.68 181.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "744d261b-09c2-491f-813b-d0c864f1df3a") + ) + (pin "1" + (uuid "7ba1e1fe-0349-40da-9ace-deeaf68f0b97") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "D1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xGxx:74LVC1G04") + (at 31.75 127 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "669670cd-433e-4dcd-b441-8840e402e63d") + (property "Reference" "U11" + (at 33.02 119.38 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SN74LVC1G04DCK" + (at 36.83 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:SOT-SC70" + (at 31.75 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 31.75 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 31.75 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "595-SN74LVC1G04DCKR" + (at 31.75 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "dad485c0-49ff-41db-8c5e-3153b039066a") + ) + (pin "4" + (uuid "aae42e2c-4968-4986-ba87-e6eddb3f0559") + ) + (pin "3" + (uuid "68ea3c32-489c-45ac-918d-27831d50f189") + ) + (pin "5" + (uuid "7fe89660-d754-4bce-a116-3ef8f3bec8ba") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 322.58 58.42 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "66a6bc3e-059a-4577-afd4-2626772a04f3") + (property "Reference" "L192" + (at 322.58 53.7704 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "5.2 uH" + (at 322.58 56.1946 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 322.58 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 322.58 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 322.58 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "71318b6c-82b4-4ba0-912f-472aa5cc4949") + ) + (pin "2" + (uuid "dca6bdd8-af6e-48c2-84a2-53562d17aa28") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L192") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 157.48 69.85 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "671861df-59b3-491e-b045-eeaf70ddc460") + (property "Reference" "L8" + (at 156.2128 68.6379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 156.2128 71.0621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 157.48 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 157.48 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 157.48 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "fcd801af-3da8-43ee-91fc-8a0cb402e3d7") + ) + (pin "1" + (uuid "b8aa974c-341b-4d98-a61c-d4e790f7e262") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 60.96 58.42 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "67cc50d5-f49e-442f-b89b-5ef9d2da8790") + (property "Reference" "C200" + (at 60.96 64.7233 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 60.96 62.2991 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 64.77 59.3852 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 60.96 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 60.96 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 60.96 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "00dd8a0e-4b2e-4431-b663-e9dee3b25926") + ) + (pin "1" + (uuid "9eafb398-b849-47eb-b150-28fd5ba35123") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C200") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 162.56 270.51 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "680c0ad1-c835-4dd1-b177-ec55e1c3430e") + (property "Reference" "J6" + (at 161.29 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "FROM LPF" + (at 156.21 264.16 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 162.56 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 162.56 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 162.56 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 162.56 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 162.56 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "783ff13c-1b8d-42dc-b37a-4ea78de7fa22") + ) + (pin "2" + (uuid "3ddcbe03-c80f-4804-90a0-09eeee3752df") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "J6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 401.32 55.88 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "695f83f6-0b36-4cb9-bdbe-8733c9eb5034") + (property "Reference" "C198" + (at 401.32 62.1833 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 401.32 59.7591 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 405.13 56.8452 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 401.32 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 401.32 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 401.32 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "586a9c3b-39b5-414e-b917-109423e1316e") + ) + (pin "1" + (uuid "7a60052e-d1bc-4a23-b3e9-34400812114d") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C198") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 226.06 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "69ec8ef5-0364-4d93-9ba3-47f61ef3f2e7") + (property "Reference" "#PWR057" + (at 226.06 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 223.52 102.87 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 226.06 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 226.06 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 226.06 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6d8eca32-b242-40b2-9d23-5dde2c1376a3") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR057") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 195.58 77.47 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6b33e24d-5db9-4ab1-98e8-79aabd001917") + (property "Reference" "#PWR018" + (at 195.58 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 198.12 78.74 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 195.58 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 195.58 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 195.58 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0b880e5e-5438-4b4b-8331-d198aefd7d5b") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR018") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 67.31 40.64 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6c75c44a-f83e-459a-bf5e-65f1844865df") + (property "Reference" "C9" + (at 61.0067 40.64 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 63.4309 40.64 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 66.3448 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 67.31 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 67.31 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 67.31 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "67b10dd3-a715-432c-aa1a-5775a338085a") + ) + (pin "1" + (uuid "9930bd29-9e26-4200-a57d-af363d495c17") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 307.34 97.79 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "6c9e349c-6f5a-4957-9dfe-13223d097a71") + (property "Reference" "L29" + (at 306.0728 96.5779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 307.975 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 307.34 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 307.34 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 307.34 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "cd2cc941-4b7c-477c-b4e2-f78e6433430e") + ) + (pin "1" + (uuid "5d312e9d-3616-46e7-beb7-a1e1886346cf") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L29") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 299.72 58.42 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "6d82c55f-8ad5-4c40-ae9a-af770789f25b") + (property "Reference" "C191" + (at 299.72 52.1167 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 299.72 54.5409 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 303.53 57.4548 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 299.72 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 299.72 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 299.72 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5e85b36e-2f1a-41af-925c-a74ee8f86b58") + ) + (pin "1" + (uuid "797bda05-bfcc-41cc-a909-c498b23f5e47") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C191") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 59.69 222.25 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6df1c031-3459-49a8-87df-ffe98805505a") + (property "Reference" "C27" + (at 59.69 215.9467 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 58.166 218.44 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 55.88 221.2848 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 59.69 222.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 59.69 222.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 59.69 222.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "4ff75dd9-0583-4679-925f-bfeaa798a932") + ) + (pin "1" + (uuid "d4fe8c1d-62e3-4fcb-a5c3-6116a8cdedf4") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C27") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 353.06 67.31 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6ee7964a-691c-4c7b-b19f-8e547c61deae") + (property "Reference" "C196" + (at 350.139 66.0979 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1.2 nF" + (at 350.139 68.5221 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 354.0252 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 353.06 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 353.06 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 353.06 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a3c947ce-c657-4a35-982e-36053931ac17") + ) + (pin "1" + (uuid "b6e9edf6-8c9a-420c-b499-3a401c6c7b6f") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C196") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 153.67 69.85 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6ef6b44e-0e9c-4570-bd2e-060cfd91c0a6") + (property "Reference" "C206" + (at 150.749 68.6379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1.2 nF" + (at 150.749 71.0621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 154.6352 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 153.67 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 153.67 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 153.67 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "8028559b-4c7c-4528-ad85-53bd682d1a11") + ) + (pin "1" + (uuid "c0c78495-9d04-481f-84b7-05baf8cedeac") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C206") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 336.55 165.1 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6f074b9d-7c8c-45f0-b5ce-a2b055dc2dea") + (property "Reference" "C41" + (at 337.82 158.75 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 337.82 161.29 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 332.74 164.1348 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 336.55 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 336.55 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "581-12065F104K4" + (at 336.55 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 336.55 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "64bb9632-dc09-45da-80eb-7af790f450f0") + ) + (pin "1" + (uuid "da669374-5122-48d6-ba50-4d9fc61c91f0") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C41") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 303.53 97.79 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6fb0e36b-ec48-44af-b4c2-d10a41637426") + (property "Reference" "C292" + (at 300.609 96.5779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1.0 nF" + (at 300.609 99.0021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 304.4952 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 303.53 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 303.53 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 303.53 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "832339d4-a50b-492e-8736-6ee3dcf6d423") + ) + (pin "1" + (uuid "8000ea96-796e-4783-be9d-c9bc733a39f3") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C292") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 368.3 208.28 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "703a4440-59c4-4351-b4d1-e9c65fbb7171") + (property "Reference" "#PWR061" + (at 368.3 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 370.84 209.55 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 368.3 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 368.3 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 368.3 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3ac64eb1-9ad1-4201-a195-787272493f7f") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR061") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 139.7 190.5 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7084e76e-8ac7-4ef3-8010-44a4b19e49a1") + (property "Reference" "C605" + (at 142.24 184.15 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "13 pF" + (at 143.51 186.69 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 135.89 191.4652 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 139.7 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 139.7 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 139.7 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "fece065d-85e6-42b4-a745-3dca5e5c1c46") + ) + (pin "1" + (uuid "52bb5d81-fca8-4447-a8a6-27e0b00a8cf6") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C605") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 109.22 166.37 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "71283322-6da2-415f-ab84-1cf4d78e0f5b") + (property "Reference" "L501" + (at 110.4872 165.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "120 nH" + (at 110.4872 167.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 109.22 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 109.22 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 109.22 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ee8a76f5-4c12-4313-85a0-56c9e5d9a042") + ) + (pin "2" + (uuid "cb16400f-cbb6-461c-b359-2a1b17f0aafe") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L501") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 120.65 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "71322b5f-a13f-468a-8001-512420504693") + (property "Reference" "#PWR04" + (at 120.65 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 118.11 46.99 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 120.65 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 120.65 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 120.65 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e78be438-76bc-40e2-8245-65bce6156846") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR04") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 76.2 238.76 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "72ac7ae6-7251-4773-aa4b-7b8d6fbeffd4") + (property "Reference" "#PWR042" + (at 76.2 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 73.66 240.03 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 76.2 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 76.2 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 76.2 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f8187e8a-116e-43c3-979f-fdcf92303ec9") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR042") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 107.95 100.33 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "73f9107b-a93e-4971-9496-a539c3b57377") + (property "Reference" "L9" + (at 106.6828 99.1179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 106.6828 101.5421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 107.95 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 107.95 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 107.95 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3491788b-e2f2-48f3-a63d-5ceca46d7414") + ) + (pin "1" + (uuid "792b4fa1-aff0-4fd4-9eee-82f4412a4d51") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 104.14 100.33 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "74ebff50-d064-42be-b954-9e29f6954a63") + (property "Reference" "C302" + (at 101.219 99.1179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "750 pF" + (at 101.219 101.5421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 105.1052 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 104.14 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 104.14 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 104.14 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c49be3d1-9b92-43a2-94bf-233a64b1445f") + ) + (pin "1" + (uuid "e2c2afec-f2bc-4eb6-a76d-e7c6b2b3d899") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C302") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 339.09 88.9 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "75a230d8-da1e-41cc-a516-f28ca132f4f3") + (property "Reference" "C295" + (at 341.63 82.55 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "68 pF" + (at 342.9 85.09 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 335.28 89.8652 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 339.09 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 339.09 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 339.09 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5a9db47d-4f32-4126-8278-8703c443b923") + ) + (pin "1" + (uuid "b3793f09-afe0-411c-91b7-fd0c1954c14d") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C295") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 356.87 97.79 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "75cae675-aed2-4389-8183-bc6703e79f8b") + (property "Reference" "L27" + (at 355.6028 96.5779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 357.505 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 356.87 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 356.87 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 356.87 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b1f4166e-ec90-4c3a-9913-fb15f56d4e81") + ) + (pin "1" + (uuid "3f700d86-cb67-4367-8cde-9381d0dcaf35") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L27") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 383.54 91.44 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "772a0927-b91a-4206-9c08-52b7b685a735") + (property "Reference" "U31" + (at 383.54 80.9457 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 383.54 83.3699 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 383.54 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 383.54 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 383.54 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 383.54 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "3ddf8534-d430-461e-9941-6eb558943101") + ) + (pin "6" + (uuid "9475b5f8-d716-4aab-9554-4912b2ddbb39") + ) + (pin "4" + (uuid "495e74ea-98e7-4aea-ab56-4ae628e7aca1") + ) + (pin "1" + (uuid "6476c998-0a2a-42ce-83f4-73547dde3531") + ) + (pin "2" + (uuid "723c3cb1-2a91-48d6-8c61-30a578e1e503") + ) + (pin "3" + (uuid "23e1dd76-300e-46ab-a491-dcfab4d473ce") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U31") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 139.7 157.48 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "78e25187-e904-41d9-ac90-84fdb1bb0789") + (property "Reference" "C505" + (at 142.24 151.13 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "43 pF" + (at 143.51 153.67 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 135.89 158.4452 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 139.7 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 139.7 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 139.7 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "98af917a-f18d-4d92-a91c-20cdaa07f216") + ) + (pin "1" + (uuid "f5784b26-3261-4969-bc36-a8723262a02f") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C505") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 123.19 184.15 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "79aec0d3-0444-4d02-9fdc-985fb2120860") + (property "Reference" "L40" + (at 124.4021 182.8828 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 121.9779 182.8828 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 123.19 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 123.19 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "83ebd435-d195-467b-8465-48a8bb499a28") + ) + (pin "1" + (uuid "c14c6438-6a27-438d-8d31-09828df791cd") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L40") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 326.39 224.79 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "79d7ddbb-7237-4467-875b-2891fb18596b") + (property "Reference" "#PWR064" + (at 326.39 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 328.93 226.06 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 326.39 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 326.39 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 326.39 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3b3f4ce4-f032-4f3d-8799-2720cc4473fc") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR064") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 78.74 33.02 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7b43ce34-d777-4ac3-ac61-729985c3169b") + (property "Reference" "U3" + (at 78.74 22.5257 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 78.74 24.9499 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 78.74 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 78.74 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 78.74 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 78.74 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "734f62d2-e51b-4aa4-9e42-d3e982752b9b") + ) + (pin "6" + (uuid "fd6feaa6-4636-425c-9501-5a1201abf352") + ) + (pin "4" + (uuid "40a770a9-b865-41b4-8cb6-0ccfe1d80f2d") + ) + (pin "1" + (uuid "a82d2e0b-e059-454b-b220-52845a3d3be3") + ) + (pin "2" + (uuid "b7151b48-a699-4836-8e15-3b0e0e89ac6b") + ) + (pin "3" + (uuid "f16861dc-89ac-435a-be7e-9be59403adad") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 383.54 60.96 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7b7686cc-2fdc-44eb-abdf-aabc3fcaa721") + (property "Reference" "U28" + (at 383.54 50.4657 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 383.54 52.8899 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 383.54 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 383.54 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 383.54 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 383.54 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "e3587d06-74e8-4d61-955f-c38c200385cc") + ) + (pin "6" + (uuid "098e506e-32c7-4540-8bc4-d92d25d8498d") + ) + (pin "4" + (uuid "3d0d7f06-c2ac-4874-9503-8447f29962d6") + ) + (pin "1" + (uuid "97723cc6-0f1f-4b2a-a2cb-c46afc7edf28") + ) + (pin "2" + (uuid "416ba743-ff3e-4b44-ade5-1de085300cbd") + ) + (pin "3" + (uuid "71839a2e-3b25-4da3-8f94-12053f372aea") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U28") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 50.8 271.78 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7baeef63-7dd4-42f4-b206-69a105c95b20") + (property "Reference" "C6" + (at 50.8 278.0833 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 50.8 275.6591 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 54.61 272.7452 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 50.8 271.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 50.8 271.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 50.8 271.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "afd1b9c4-a5f2-4beb-9f96-69f5de431ec3") + ) + (pin "1" + (uuid "f013d041-10d4-4618-999c-6dc4b5069363") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole_Pad") + (at 392.43 240.03 270) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "7bb5af28-2ba9-4c78-9aaa-bf1dfe84301a") + (property "Reference" "H1" + (at 396.24 240.03 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "~" + (at 396.24 241.2421 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "MountingHole:MountingHole_4.3mm_M4_DIN965_Pad" + (at 392.43 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 392.43 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 392.43 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 392.43 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 392.43 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b2c7bdea-f875-4a85-a859-3d16ecb29b15") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "H1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 134.62 264.16 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7cad5eee-2e47-47fd-99e3-d025d78e5a65") + (property "Reference" "U36" + (at 134.62 253.6657 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 134.62 256.0899 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 134.62 261.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 134.62 261.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 134.62 264.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 134.62 264.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "c1fc72be-9971-404d-8fef-2c1afe59fdd4") + ) + (pin "6" + (uuid "170bc5dc-7d97-4478-a210-686fbc33d22e") + ) + (pin "4" + (uuid "27913879-6f3d-4c03-ab24-87e0dda0aaae") + ) + (pin "1" + (uuid "f4c357ac-5895-415a-946c-9c9ed5372a7d") + ) + (pin "2" + (uuid "e89808bc-053b-4381-beab-2d259d7a916f") + ) + (pin "3" + (uuid "47cf028f-ead9-4283-8575-ea3a6472850b") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U36") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 195.58 44.45 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7d2f2101-75ea-444a-83d8-c4c8c25896ff") + (property "Reference" "#PWR011" + (at 195.58 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 198.12 45.72 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 195.58 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 195.58 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 195.58 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "efde7888-fc6d-4088-94d9-fe05eec9dfc9") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR011") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 67.31 204.47 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7e23e46d-fbc0-43c5-8a43-f59cdf036335") + (property "Reference" "C14" + (at 61.0067 204.47 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 63.4309 204.47 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 66.3448 208.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 67.31 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 67.31 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 67.31 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "8e6dbea1-cf91-4e9c-87cb-80e12d07ce47") + ) + (pin "1" + (uuid "38c20451-f23c-499b-9ca8-952e7573620c") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C14") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 148.59 24.13 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "7e68277f-e589-41c6-ba2d-53831651fb13") + (property "Reference" "L31" + (at 149.8021 22.8628 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 147.3779 22.8628 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 148.59 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 148.59 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "49a52f64-317b-4e79-92ca-295eb3741668") + ) + (pin "1" + (uuid "d459ed3b-4554-44b3-9cda-34a6670874a0") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L31") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 67.31 44.45 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7ef35350-3266-4419-9dcb-aaab5e8fc112") + (property "Reference" "#PWR010" + (at 67.31 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 64.77 45.72 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 67.31 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 67.31 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 67.31 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5f1edf5c-9dd1-48ce-af13-8a2f278464f9") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR010") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 26.67 53.34 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "7f12f7c2-7b26-4458-af19-45d6b8276bb8") + (property "Reference" "#PWR014" + (at 26.67 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 26.67 49.2069 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 26.67 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 26.67 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 26.67 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4658e493-9b19-4e19-9662-762d6d686eda") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR014") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 184.15 193.04 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7fc91830-fc74-498f-9673-842bfbe12003") + (property "Reference" "U19" + (at 184.15 182.5457 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 184.15 184.9699 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 184.15 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 184.15 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 184.15 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 184.15 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "e426d5bf-c657-4973-a642-93ff0f3aebdd") + ) + (pin "6" + (uuid "3eaf43c8-a689-4454-89b1-f3bb1f3b959c") + ) + (pin "4" + (uuid "888ada58-3f4e-4ad5-9b90-b62fe930f2d7") + ) + (pin "1" + (uuid "6126ea0e-fa12-4b16-859c-cf1fd8f59f01") + ) + (pin "2" + (uuid "9ee37809-c31a-4987-9090-84935eee8ae7") + ) + (pin "3" + (uuid "8e10fbef-a111-412b-bf19-df5c53fbf86a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U19") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 266.7 99.06 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "801ba944-f765-4e28-9609-8a53dda70fab") + (property "Reference" "C23" + (at 260.3967 99.06 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 262.8209 99.06 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 265.7348 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 266.7 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 266.7 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 266.7 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "bb683667-a5f6-4298-8477-9f31c2b22213") + ) + (pin "1" + (uuid "2ea48faa-f153-41f3-8481-049ff1ba2fa1") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C23") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 347.98 22.86 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "804ad77f-5d5f-458c-b355-352ea1bcabfd") + (property "Reference" "L43" + (at 349.1921 21.5928 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 346.7679 21.5928 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 347.98 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 347.98 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 347.98 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ff4f19b0-ad8b-4113-85e9-339864a656a3") + ) + (pin "1" + (uuid "c856009e-f30b-4dd3-a3e3-490c8afccbe6") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L43") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 204.47 121.92 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "80a7a11c-e408-4458-81e7-14c5eec7472e") + (property "Reference" "C408" + (at 204.47 128.2233 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 204.47 125.7991 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 208.28 122.8852 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 204.47 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 204.47 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 204.47 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5736e8d8-f133-4ee4-a817-4d867ae11481") + ) + (pin "1" + (uuid "1e15daa9-a77e-4ace-a236-95436fa8a21c") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C408") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 299.72 88.9 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "80bc6212-469e-4e0b-8067-1a884007189c") + (property "Reference" "C291" + (at 299.72 82.5967 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 299.72 85.0209 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 303.53 87.9348 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 299.72 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 299.72 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 299.72 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "caa54cde-6747-4a13-b4ba-40a730d3d209") + ) + (pin "1" + (uuid "80064950-571f-409e-a19d-7d53d7866809") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C291") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 67.31 168.91 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "81380a7c-55ae-45ee-b903-af1472bd3eba") + (property "Reference" "C13" + (at 61.0067 168.91 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 63.4309 168.91 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 66.3448 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 67.31 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 67.31 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 67.31 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "03ec6f1f-d385-4597-9541-216852168ea8") + ) + (pin "1" + (uuid "dd6f2013-341c-428e-8d5b-19209bc8e81d") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 104.14 69.85 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "83e939ae-b2f4-4f7c-9459-14dfa4afc16c") + (property "Reference" "C202" + (at 101.219 68.6379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1.2 nF" + (at 101.219 71.0621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 105.1052 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 104.14 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 104.14 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 104.14 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c7a77c6d-d578-450a-ab7b-c3ffd6c1f6d8") + ) + (pin "1" + (uuid "077db8f7-9495-4ad6-9e5c-814bc29c114b") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C202") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xGxx:74LVC1G04") + (at 231.14 31.75 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "85253f67-6a4f-4a7d-b4c6-2a6b052ddcee") + (property "Reference" "U23" + (at 232.41 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SN74LVC1G04DCK" + (at 236.22 21.59 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:SOT-SC70" + (at 231.14 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 231.14 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 231.14 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "595-SN74LVC1G04DCKR" + (at 231.14 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c18d374c-a00c-4875-99ad-55e933c3bbfe") + ) + (pin "4" + (uuid "6d1d35af-6dbc-4c9a-9c3b-5cd04598000c") + ) + (pin "3" + (uuid "38b265c4-f916-4e1e-83b4-7d4f08748e4f") + ) + (pin "5" + (uuid "065e35fd-b2ac-42ab-8e90-e0cc1560a19c") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U23") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 195.58 171.45 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "86e33683-5e97-4a0b-a49d-fe810cac414a") + (property "Reference" "#PWR033" + (at 195.58 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 198.12 172.72 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 195.58 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 195.58 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 195.58 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c3e1d447-f51d-4c6f-8cf2-806c52e25236") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR033") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 100.33 190.5 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "87358c73-aab0-465f-9952-a8e5f26f2f25") + (property "Reference" "C601" + (at 100.33 184.1967 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 100.33 186.6209 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 104.14 189.5348 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 100.33 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 100.33 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 100.33 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "62ce0179-14d7-4d2e-bb2e-c45e6e2d76f0") + ) + (pin "1" + (uuid "7d278053-6f30-426f-8626-57ac82323ad7") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C601") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 67.31 72.39 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8998bd52-3a1b-4f6b-bc99-e34679f08d74") + (property "Reference" "C10" + (at 61.0067 72.39 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 63.4309 72.39 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 66.3448 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 67.31 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 67.31 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 67.31 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6e769b20-d61e-4d84-94a6-245b40dea7f7") + ) + (pin "1" + (uuid "786bd00d-c419-431d-84fb-dee87c86629b") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 123.19 54.61 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "8a52b8c3-4798-4299-9449-2becbe6d6212") + (property "Reference" "L32" + (at 124.4021 53.3428 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 121.9779 53.3428 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 123.19 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 123.19 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1f67aa82-ed52-48aa-9b55-bf21ddef81e3") + ) + (pin "1" + (uuid "d5fc557d-0cd3-4132-aac4-cd84a249ce82") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L32") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 308.61 97.79 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "8ac17f89-e3c5-4bec-9ded-32603b67dced") + (property "Reference" "L291" + (at 309.8772 96.5779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "245 nH" + (at 309.8772 99.0021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 308.61 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 308.61 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 308.61 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c0a3adbc-0037-4053-a4f1-ba42ec7d4d14") + ) + (pin "2" + (uuid "9d997b0b-e952-4678-ba33-3114dd5fe221") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L291") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xGxx:74LVC1G04") + (at 31.75 33.02 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8b2a09c1-dcf6-4264-91b0-ae7cc85c68f2") + (property "Reference" "U2" + (at 33.02 25.4 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SN74LVC1G04DCK" + (at 36.83 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:SOT-SC70" + (at 31.75 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 31.75 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 31.75 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "595-SN74LVC1G04DCKR" + (at 31.75 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "39383cba-61a1-4de7-bd3b-5248a354b1df") + ) + (pin "4" + (uuid "6a11dc15-3523-4f2b-baaa-180edbf51107") + ) + (pin "3" + (uuid "be54cda1-9807-4eaa-a855-cd3a96cf0193") + ) + (pin "5" + (uuid "8eec0f02-b5dc-4649-9a7e-88ac24ed4a4c") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 320.04 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8b8a1187-0eaa-47ad-9c5c-69b6ede0c302") + (property "Reference" "#PWR054" + (at 320.04 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 317.5 74.93 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 320.04 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 320.04 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 320.04 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "2813c8d7-87e3-48b8-a8c6-1b5182a9cd88") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR054") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xGxx:74LVC1G04") + (at 31.75 63.5 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8b9dfe83-36c5-42ff-9b43-b6ef28db6613") + (property "Reference" "U5" + (at 33.02 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SN74LVC1G04DCK" + (at 36.83 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:SOT-SC70" + (at 31.75 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 31.75 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 31.75 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "595-SN74LVC1G04DCKR" + (at 31.75 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5627a583-6e1e-429f-bb24-7bb3a41cec0c") + ) + (pin "4" + (uuid "5e35edcb-1e60-470f-9f37-664a4b9be79d") + ) + (pin "3" + (uuid "493e5ea7-7246-47ce-9f8b-8f8cf1dc2a51") + ) + (pin "5" + (uuid "c9032056-7905-4767-b6c6-f3dd971859d6") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 153.67 100.33 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8cee4f43-7ec5-42f5-8ea2-4de15017af6f") + (property "Reference" "C306" + (at 150.749 99.1179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "750 pF" + (at 150.749 101.5421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 154.6352 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 153.67 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 153.67 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 153.67 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d5a5131f-bc97-40ef-9af9-d1bfc1c5de98") + ) + (pin "1" + (uuid "2d18e86a-ac42-475c-abcf-3c8f5f29c446") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C306") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 204.47 187.96 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8db36bda-b487-479c-9008-dec1002f6f0e") + (property "Reference" "C608" + (at 204.47 194.2633 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 204.47 191.8391 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 208.28 188.9252 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 204.47 187.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 204.47 187.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 204.47 187.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "95cb391f-72db-4bb6-b803-2c83475bc797") + ) + (pin "1" + (uuid "a93f646c-e160-420e-ad3d-f9b0c09baf6f") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C608") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 364.49 88.9 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "8e42629a-4d36-4959-be4d-d6a98a8b24e4") + (property "Reference" "C297" + (at 364.49 82.5967 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 364.49 85.0209 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 368.3 87.9348 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 364.49 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 364.49 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 364.49 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "853ee617-d4aa-43ae-927f-3356309b862e") + ) + (pin "1" + (uuid "38058dda-fcd8-4a57-9770-0f4a4217d7ec") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C297") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 26.67 182.88 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "8ed661a5-24c3-4fd8-82d5-3bdd6869ec0a") + (property "Reference" "#PWR034" + (at 26.67 186.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 26.67 178.7469 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 26.67 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 26.67 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 26.67 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "49a05eea-c29d-49dd-870c-97361c2eb345") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR034") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 133.35 39.37 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "8fb2cfa3-923e-4052-b142-52c61df9d503") + (property "Reference" "L103" + (at 134.6172 38.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "560 nH" + (at 134.6172 40.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 133.35 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 133.35 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 133.35 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f406c9b3-367b-4a4b-8424-24a0eedd58d1") + ) + (pin "2" + (uuid "5454fde1-7ec2-4ac2-8a6b-bda61b5dae19") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L103") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 184.15 160.02 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "90606b27-7996-45c3-bfd8-fef9b6531260") + (property "Reference" "U16" + (at 184.15 149.5257 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 184.15 151.9499 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 184.15 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 184.15 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 184.15 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 184.15 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "d13e5487-58d4-4f92-bc64-fe6e54cb5c54") + ) + (pin "6" + (uuid "1d8734ad-5c01-4330-8676-7477592f1549") + ) + (pin "4" + (uuid "3804ea33-3650-4de0-a458-a8e34aa98071") + ) + (pin "1" + (uuid "dbbbcaa8-e9e1-4130-bbfb-fed17d8f6941") + ) + (pin "2" + (uuid "2dfcdedc-4eda-453d-bcc3-60ceb9fad193") + ) + (pin "3" + (uuid "0b231fea-7d6a-49c1-885a-141997b8417b") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U16") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 347.98 29.21 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "9060a45d-5633-41e7-be50-6521a5c92161") + (property "Reference" "L94" + (at 347.98 24.5604 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "11 uH" + (at 347.98 26.9846 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 347.98 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 347.98 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 347.98 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5bbc7f60-f54e-44bd-82d5-1d19d0aadef5") + ) + (pin "2" + (uuid "e7b4f259-29ba-41d1-ad33-85bb5ec16bbf") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L94") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 60.96 121.92 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9073a28f-c092-4d9a-9f0d-9a9f85f922ef") + (property "Reference" "C400" + (at 60.96 128.2233 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 60.96 125.7991 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 64.77 122.8852 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 60.96 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 60.96 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 60.96 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "55d14c3f-d4e3-4426-9f52-5f485a77ede7") + ) + (pin "1" + (uuid "2a896203-6516-4100-b2ed-e0b1b3a7f2d7") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C400") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 123.19 60.96 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "915c7783-1619-4ea8-965a-a68f8812ce9c") + (property "Reference" "L202" + (at 123.19 56.3104 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "3.9 uH" + (at 123.19 58.7346 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 123.19 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 123.19 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "a7c95eca-688d-425e-9fed-57f60ff5dcae") + ) + (pin "2" + (uuid "262d6f2b-4fd2-4870-bae7-cc770d6db63d") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L202") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 157.48 133.35 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "916058a2-f462-4fcd-93fa-970aa03bd325") + (property "Reference" "L14" + (at 156.2128 132.1379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 156.2128 134.5621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 157.48 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 157.48 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 157.48 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "de9ef7fc-b541-4d28-8d8a-d2e922af1bee") + ) + (pin "1" + (uuid "15dffc5c-3f22-4a0a-9d6a-81e64abb4f97") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L14") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 195.58 100.33 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "917e1ef3-5a6a-4c37-b497-ef6ff274ff94") + (property "Reference" "C17" + (at 201.8833 100.33 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 199.4591 100.33 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 196.5452 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 195.58 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 195.58 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 195.58 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "7d10f252-6fc3-4ac5-af76-c3bac8d3d8f2") + ) + (pin "1" + (uuid "6943ebff-3c99-4bf0-a3d4-d8cae38d1b5a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C17") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 132.08 100.33 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "93ade777-b30b-4cf4-b9b4-8e33cc99a99e") + (property "Reference" "L10" + (at 130.8128 99.1179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 130.8128 101.5421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 132.08 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 132.08 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 132.08 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "0f4d9c30-d0cd-4de1-918e-5106a10f85b4") + ) + (pin "1" + (uuid "f1c13755-a161-417d-86cc-2e1767d0adea") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 114.3 190.5 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "96ac0541-43c7-4a68-82a4-744af7ef6e66") + (property "Reference" "C603" + (at 116.84 184.15 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "13 pF" + (at 118.11 186.69 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 110.49 191.4652 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 114.3 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 114.3 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 114.3 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "335dac49-e0fc-4742-b4c5-3d6668dada73") + ) + (pin "1" + (uuid "5c541902-f930-4634-80dc-e617ef78c300") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C603") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 383.54 31.75 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "99c824b4-280e-47c1-86a4-49ea26aea34e") + (property "Reference" "U25" + (at 383.54 21.2557 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 383.54 23.6799 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 383.54 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 383.54 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 383.54 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 383.54 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "7afd26f0-e442-45fd-b32d-6c5c05615989") + ) + (pin "6" + (uuid "501c691d-0d00-43a6-9091-310d85ebbd65") + ) + (pin "4" + (uuid "1eb301b5-86ac-4e64-a390-3be03a049960") + ) + (pin "1" + (uuid "559e2eb8-1f05-4c0f-aeec-698d507044bd") + ) + (pin "2" + (uuid "bded63cb-c514-4bef-ba10-d07f57d0a674") + ) + (pin "3" + (uuid "eb989cf8-a3bf-44cf-be9d-439cb65b542f") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U25") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 299.72 29.21 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "9a42576b-75bc-4018-b766-b23307bb6168") + (property "Reference" "C91" + (at 299.72 22.9067 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 299.72 25.3309 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 303.53 28.2448 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 299.72 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 299.72 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 299.72 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "10340da5-131f-4e54-a51c-46d487a05ba2") + ) + (pin "1" + (uuid "bca44694-c2e0-45d6-99b8-ec266ffc148e") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C91") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 64.77 266.7 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9ab010e4-c5a0-466c-98b1-bd8cf08c210f") + (property "Reference" "U1" + (at 64.77 256.2057 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 64.77 258.6299 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 64.77 264.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 64.77 264.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 64.77 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 64.77 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "308e1634-b126-4adc-b231-0ac59599925a") + ) + (pin "6" + (uuid "98292076-ab01-4e17-b244-c457aebcb7ea") + ) + (pin "4" + (uuid "00b8ac95-97bf-4c22-aa0c-14963dbf29b9") + ) + (pin "1" + (uuid "6d0876b2-e53c-4aad-b836-12aaa741e638") + ) + (pin "2" + (uuid "9d9f70ac-de50-4f58-acc9-6ef49d37da68") + ) + (pin "3" + (uuid "632228dd-3847-4755-bf81-009b828e6e8a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Jumper:SolderJumper_2_Open") + (at 295.91 205.74 90) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (uuid "9b4256a6-6110-4240-898c-5ff80af280bd") + (property "Reference" "JP3" + (at 298.45 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "SolderJumper_2_Open" + (at 293.3009 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm" + (at 295.91 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 295.91 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 295.91 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 295.91 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "4fad0015-2c59-419f-981b-68ca41e40ab3") + ) + (pin "1" + (uuid "510820ae-42a3-4100-8055-109d097bcb82") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "JP3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 67.31 76.2 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9d07f97b-7975-4aa8-abc3-40e178ae0131") + (property "Reference" "#PWR016" + (at 67.31 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 64.77 77.47 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 67.31 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 67.31 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 67.31 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1787c3a1-f795-4586-b00b-64e5010b3164") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR016") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 114.3 30.48 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9f8a95e4-030b-4ffd-a7ba-b2f1f410536a") + (property "Reference" "C103" + (at 116.84 24.13 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "300 pF" + (at 118.11 26.67 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 110.49 31.4452 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 114.3 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 114.3 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 114.3 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "85bde469-7221-4b79-a135-84e3d4b74bc5") + ) + (pin "1" + (uuid "fe7bc297-a87a-41af-8e6a-0e61e6be1718") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C103") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 109.22 39.37 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "a0d01c02-0427-4b3c-9f0f-b464416bd7af") + (property "Reference" "L101" + (at 110.4872 38.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "1 uH" + (at 110.4872 40.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 109.22 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 109.22 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 109.22 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "12fa2207-f178-4b15-b09a-fa6131d2fac0") + ) + (pin "2" + (uuid "57ab296d-ea37-4d45-8ed9-e32ba11b94e4") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L101") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 114.3 124.46 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a1ee78c8-ef4e-45db-a39b-608734ae35b5") + (property "Reference" "C403" + (at 116.84 118.11 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "51 pF" + (at 118.11 120.65 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 110.49 125.4252 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 114.3 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 114.3 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 114.3 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "7bd08496-009a-49e3-96d0-7247cd8958a4") + ) + (pin "1" + (uuid "679ce25b-5ad5-493a-ad8d-f4dae194477e") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C403") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xGxx:74LVC1G04") + (at 31.75 160.02 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a4c47583-b723-458d-8eef-ed85f0d769a8") + (property "Reference" "U14" + (at 33.02 152.4 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SN74LVC1G04DCK" + (at 36.83 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:SOT-SC70" + (at 31.75 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 31.75 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 31.75 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "595-SN74LVC1G04DCKR" + (at 31.75 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "24a25084-2e85-4826-94c7-e5ee835dd1ec") + ) + (pin "4" + (uuid "2384f52a-974c-4035-a218-58ef000aa9a3") + ) + (pin "3" + (uuid "ba5c3207-4e0b-4487-9fdc-a4b20293ca45") + ) + (pin "5" + (uuid "c8c06ecd-8384-40c3-8d51-7c27e6c83e9a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U14") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 322.58 22.86 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "a511e73b-fe2f-4f8f-83e6-870438eb4305") + (property "Reference" "L42" + (at 323.7921 21.5928 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 321.3679 21.5928 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 322.58 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 322.58 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 322.58 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c80b05f4-ffda-41c3-a01d-4a114bffac11") + ) + (pin "1" + (uuid "ff1eb168-5333-42a9-8057-cda84c7f35c7") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L42") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 331.47 68.58 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "a5b9195a-f51d-4909-8c92-985b276e89bb") + (property "Reference" "L25" + (at 330.2028 67.3679 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 332.105 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 331.47 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 331.47 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 331.47 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6c13ae52-25c3-418d-863b-04c0e5bca4be") + ) + (pin "1" + (uuid "18878515-bcfe-4863-bd61-2531d6a7acb3") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L25") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 162.56 275.59 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a70de81e-4073-4d68-b5e6-5a5e9dcfda3f") + (property "Reference" "#PWR02" + (at 162.56 281.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 160.02 276.86 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 162.56 275.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 162.56 275.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 162.56 275.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "20776632-a1b5-40a1-9941-8a7549d6fdb6") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR02") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 78.74 160.02 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a82c3919-96e9-48be-8ec8-c4ed698f5c7f") + (property "Reference" "U15" + (at 78.74 149.5257 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 78.74 151.9499 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 78.74 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 78.74 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 78.74 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 78.74 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "3d0e8312-a001-4a91-aa6a-cdfaabef3ed5") + ) + (pin "6" + (uuid "82760f6f-fb80-4ee4-93b6-ff09fd4d9454") + ) + (pin "4" + (uuid "a6a42e13-ddc0-4384-b0e4-e25e0d072e2c") + ) + (pin "1" + (uuid "a595acd1-d2ac-48f6-87e1-6f6b8f83232b") + ) + (pin "2" + (uuid "55d4ae9c-030b-4de3-a1a8-e1e87ea2d8b7") + ) + (pin "3" + (uuid "949666f3-7529-4cea-a93d-165cf8fa6559") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 132.08 166.37 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "a8373a46-8b3d-45f8-a1bd-0343a3f96c0e") + (property "Reference" "L16" + (at 130.8128 165.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 130.8128 167.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 132.08 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 132.08 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 132.08 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "10a29139-10c2-444c-a3ba-03d94277d1a5") + ) + (pin "1" + (uuid "60af876f-3e8a-4dc3-afbe-db940fbe782b") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L16") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 26.67 43.18 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a85ee24b-b168-45be-93d5-80656fffad3d") + (property "Reference" "#PWR013" + (at 26.67 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 24.13 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 26.67 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 26.67 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 26.67 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "88d66b59-e551-48a1-b66f-cece25bfaecc") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR013") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 300.99 219.71 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a959a0c0-3976-4799-9ab7-cf58e3da2730") + (property "Reference" "R1" + (at 300.99 220.98 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 303.53 220.98 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 302.768 219.71 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 300.99 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 300.99 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "652-CR1206FX-2201ELF" + (at 300.99 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "37b42823-271e-4b17-8ab5-c48cd14b7a5e") + ) + (pin "1" + (uuid "427fbf5d-8e74-4c19-95a2-fabd949f862a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "R1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 292.1 171.45 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a9f8ac4a-7acb-45a5-9e25-ac41156bd9ba") + (property "Reference" "R6" + (at 290.7142 167.64 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 288.29 167.64 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 293.878 171.45 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 292.1 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 292.1 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "652-CR1206FX-2201ELF" + (at 292.1 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "4ae32b87-bded-4cec-b8e7-df26a1a96bfa") + ) + (pin "1" + (uuid "1cedb46a-16f3-470c-82d2-e01893bf41aa") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "R6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 114.3 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "aa74b7bc-4033-4511-ad79-a3e3128f4609") + (property "Reference" "C203" + (at 116.84 54.61 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "180 pF" + (at 118.11 57.15 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 110.49 61.9252 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 114.3 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 114.3 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 114.3 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6c2d8380-3f7a-4c24-8bf0-b99c7293e116") + ) + (pin "1" + (uuid "42fc5d7c-883a-4e39-ac30-cd5c9ec81f9f") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C203") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 137.16 274.32 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "aa80efdd-e3c7-4b66-a296-3bdb96241bb5") + (property "Reference" "#PWR071" + (at 137.16 280.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 134.62 275.59 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 137.16 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 137.16 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 137.16 274.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "85f7f641-b1d5-4e85-a38e-f6115ba433ed") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR071") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 128.27 133.35 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ac26ffc5-1284-488b-8fd4-ff89c4d5a43a") + (property "Reference" "C404" + (at 125.349 132.1379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "680 pF" + (at 125.349 134.5621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 129.2352 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 128.27 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 128.27 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 128.27 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "706ba762-acd4-4359-b761-7fb2db9a00cd") + ) + (pin "1" + (uuid "8e3a2466-70a9-4377-aea2-9da24861c674") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C404") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Screw_Terminal_01x02") + (at 207.01 270.51 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "acbc57ee-b3ae-478f-a97d-3ff4071000b2") + (property "Reference" "J3" + (at 209.042 270.5679 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "12-13.8V" + (at 209.042 272.9921 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "TerminalBlock:TerminalBlock_bornier-2_P5.08mm" + (at 207.01 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 207.01 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 207.01 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "538-39880-4302" + (at 207.01 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "99504299-ac90-44a1-a6b1-4db213d5ef7a") + ) + (pin "2" + (uuid "f249257d-93c0-4841-b1af-4eee965e01bb") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "J3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 128.27 100.33 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ad829f47-7d9a-4b19-b211-fbecb5cd57aa") + (property "Reference" "C304" + (at 125.349 99.1179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1.3 nF" + (at 125.349 101.5421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 129.2352 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 128.27 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 128.27 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 128.27 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a25de6fe-ab9d-4393-ba53-b8fb598ebf9f") + ) + (pin "1" + (uuid "b46ef9e1-e3bc-4a86-898d-414bf8448e21") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C304") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 195.58 40.64 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b005f619-fa97-4d9c-956c-e371a739640d") + (property "Reference" "C15" + (at 201.8833 40.64 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 199.4591 40.64 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 196.5452 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 195.58 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 195.58 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 195.58 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c986f35f-a9e3-4eba-942e-8476a2baaffa") + ) + (pin "1" + (uuid "cdc97bb2-ffd2-474c-a47d-9dfd46c6a6d1") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xGxx:74LVC1G04") + (at 31.75 227.33 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b0d8f4d7-db61-4041-84a8-ce12b1cb4114") + (property "Reference" "U20" + (at 33.02 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SN74LVC1G04DCK" + (at 36.83 217.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:SOT-SC70" + (at 31.75 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 31.75 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 31.75 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "595-SN74LVC1G04DCKR" + (at 31.75 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ab97b5ff-b00c-4b60-937f-da0c184d34da") + ) + (pin "4" + (uuid "999a7dd1-77e5-43de-adce-7236a60f5b18") + ) + (pin "3" + (uuid "7614642c-442b-4088-830d-90a5c5826e1f") + ) + (pin "5" + (uuid "e17b77fd-afe6-4136-bf96-931f73b07a08") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U20") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 157.48 39.37 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "b2e53fcc-1ece-40a2-92ea-4b812b334895") + (property "Reference" "L5" + (at 156.2128 38.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 156.2128 40.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 157.48 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 157.48 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 157.48 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d2f80e41-88d7-4b73-b1a2-d6eddd81df0d") + ) + (pin "1" + (uuid "137a706a-406e-4086-a002-1b1d9211d678") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 132.08 39.37 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "b2fa16d7-67b6-4386-8a2b-6f3b8fbe0b19") + (property "Reference" "L4" + (at 130.8128 38.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 130.8128 40.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 132.08 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 132.08 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 132.08 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "95a164a1-a734-4622-bb41-e32d15c9a7db") + ) + (pin "1" + (uuid "a7c8d71e-9163-41e0-b9ca-ad01df6e98f5") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 104.14 133.35 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b3803943-f473-4db2-a06f-a10d96b3e9d4") + (property "Reference" "C402" + (at 101.219 132.1379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "390 pF" + (at 101.219 134.5621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 105.1052 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 104.14 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 104.14 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 104.14 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "8fe59f43-0399-49ad-ad09-3a4f8216ccc4") + ) + (pin "1" + (uuid "ac7ad34d-7344-4820-b698-3e484de1bf2c") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C402") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 204.47 58.42 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b4edd278-864a-46c2-9995-ce8a7cab377f") + (property "Reference" "C208" + (at 204.47 64.7233 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 204.47 62.2991 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 208.28 59.3852 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 204.47 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 204.47 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 204.47 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c6091e4b-9e4a-47cf-8db7-87487bcd4f81") + ) + (pin "1" + (uuid "6cced154-7bd2-4961-abdf-dda4d246ae28") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C208") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 176.53 257.81 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b70b0ec9-9d16-4c70-959e-fbe008fbb4e8") + (property "Reference" "#PWR044" + (at 176.53 264.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 173.99 259.08 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 176.53 257.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 176.53 257.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 176.53 257.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0fabe346-544c-4c83-b212-ddaef648d075") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR044") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 104.14 39.37 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b8b913e9-96be-4fd3-9f09-32da53ee478e") + (property "Reference" "C102" + (at 101.219 38.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1.8 nF" + (at 101.219 40.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 105.1052 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 104.14 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 104.14 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 104.14 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e4a0b939-4dbd-402f-b3ee-c6d4798039f7") + ) + (pin "1" + (uuid "ea87f7bc-157e-46de-802a-219814253b58") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C102") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 157.48 199.39 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "b8bf12b2-9e3d-4552-8275-1eda5c272464") + (property "Reference" "L20" + (at 156.2128 198.1779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 156.2128 200.6021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 157.48 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 157.48 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 157.48 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "21d8d090-afd5-48fa-8f34-467672d6c5e9") + ) + (pin "1" + (uuid "31e5103b-0ec3-4fc9-92ce-ef3439a3fe6d") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L20") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 347.98 88.9 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b9a5bb64-483b-4dec-8b15-fc9aeb95723d") + (property "Reference" "L294" + (at 347.98 84.2504 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "3.6 uH" + (at 347.98 86.6746 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 347.98 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 347.98 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 347.98 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "192749c9-6524-4825-8e85-891674985be8") + ) + (pin "2" + (uuid "333d0493-1381-47c3-b481-e1d4eb650be6") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L294") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 184.15 63.5 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b9a786ad-818c-473e-8ab8-af4659f26d1e") + (property "Reference" "U7" + (at 184.15 53.0057 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 184.15 55.4299 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 184.15 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 184.15 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 184.15 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 184.15 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "6ad3b4d6-1dd4-4976-9da0-b955af339b19") + ) + (pin "6" + (uuid "c6e8801f-d02b-4e9d-86e0-a3913dcd50e7") + ) + (pin "4" + (uuid "f4e300c0-e3d3-442d-a120-b701fda1df97") + ) + (pin "1" + (uuid "a1ba6658-d3cf-4763-bd12-c2ce2533a1e3") + ) + (pin "2" + (uuid "babbd8f0-8af7-4f4b-bd5f-496ed83c0798") + ) + (pin "3" + (uuid "e8f504b1-e40b-42c3-be8a-a80f5253e298") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 313.69 88.9 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ba13694d-96cc-47cd-8551-26e2bfbe44fe") + (property "Reference" "C293" + (at 316.23 82.55 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "68 pF" + (at 317.5 85.09 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 309.88 89.8652 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 313.69 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 313.69 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 313.69 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "97d7dd56-8859-47ec-8c29-71db46579631") + ) + (pin "1" + (uuid "9e45089b-2935-4fd2-ba92-fb345756a9ad") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C293") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 195.58 139.7 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ba2011ba-a32d-42f0-a8a2-37b8986e1a95") + (property "Reference" "#PWR028" + (at 195.58 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 198.12 140.97 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 195.58 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 195.58 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 195.58 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5ff1504c-d995-4643-9a7c-99b087953942") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR028") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 278.13 60.96 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ba325d62-a64c-441c-938f-5a2a46139c67") + (property "Reference" "U27" + (at 278.13 50.4657 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 278.13 52.8899 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 278.13 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 278.13 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 278.13 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 278.13 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "b981ee71-4a5e-4b81-bff9-6accf3670670") + ) + (pin "6" + (uuid "4209db37-8bb9-4346-b04e-5c9107dc1c61") + ) + (pin "4" + (uuid "c09479fc-b39b-4db3-b138-992c49add882") + ) + (pin "1" + (uuid "2a6d661e-a2df-4929-be4b-c842ae7724fa") + ) + (pin "2" + (uuid "19a6998c-9a3e-400a-8fc8-dff8dfd9716a") + ) + (pin "3" + (uuid "f8b93541-e3f6-44e3-ae0b-17d0c8409c2d") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U27") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C_Polarized") + (at 260.35 266.7 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "baa1f231-e52b-4d64-a4d0-798cf0552ac2") + (property "Reference" "C3" + (at 263.271 264.5989 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "470uF 25V" + (at 263.271 267.0231 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_THT:CP_Radial_D10.0mm_P5.00mm" + (at 261.3152 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 260.35 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 260.35 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "667-ECA-1EM471" + (at 260.35 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "85583bfb-a8b8-4354-989a-3ee627be49e6") + ) + (pin "1" + (uuid "cd4240ca-9063-43b2-b843-d7624a073a5a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 109.22 100.33 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "babcc716-da31-4857-9d17-a97273d23e98") + (property "Reference" "L301" + (at 110.4872 99.1179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "220 nH" + (at 110.4872 101.5421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 109.22 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 109.22 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 109.22 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b2559ee1-939d-403d-93af-6624bdb5cb7f") + ) + (pin "2" + (uuid "f0016aed-ef11-454f-89b5-4395e946d98a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L301") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 368.3 186.69 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "bb2d6c00-36dc-49a6-918c-a6a299258496") + (property "Reference" "R7" + (at 370.586 185.674 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 369.824 187.706 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 370.078 186.69 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 368.3 186.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 368.3 186.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "652-CR1206FX-2201ELF" + (at 368.3 186.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "0eb48c25-9d47-48c9-8eac-564967f049fb") + ) + (pin "1" + (uuid "defbb125-812c-4054-aae2-b5e21623b49f") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "R7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 26.67 22.86 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "bb3a4ad0-44e6-40e5-a507-9c389eb561cc") + (property "Reference" "#PWR012" + (at 26.67 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 26.67 18.7269 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 26.67 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 26.67 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 26.67 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "af9e2f80-a050-45af-949d-81fdeb2abd1f") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR012") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 148.59 60.96 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "bb905444-af5f-4686-b46f-008e319d8dc8") + (property "Reference" "L204" + (at 148.59 56.3104 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "3.9 uH" + (at 148.59 58.7346 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 148.59 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 148.59 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "92718142-2539-4c53-b96f-f6492992634b") + ) + (pin "2" + (uuid "69282db0-059d-4a3d-ba0d-ff005bce9ef1") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L204") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 387.35 245.11 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "bbe077b9-375f-43f1-a17c-902eb31b6289") + (property "Reference" "#PWR045" + (at 387.35 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 387.35 249.2431 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 387.35 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 387.35 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 387.35 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "140ba323-fa7a-4839-955a-9fff50fc1990") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR045") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 133.35 166.37 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "be36d94c-d46b-46ee-9469-906b2614a1bd") + (property "Reference" "L503" + (at 134.6173 165.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "82 nH" + (at 134.6173 167.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 133.35 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 133.35 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 133.35 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "51c238c2-6eb4-4d95-8b04-a47b17e9e99e") + ) + (pin "2" + (uuid "107ae31a-0140-471a-b9dc-49bd7a1f76e0") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L503") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 114.3 91.44 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "be9ed157-22f3-468a-b2a2-4929ee0539c3") + (property "Reference" "C303" + (at 116.84 85.09 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "75 pF" + (at 118.11 87.63 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 110.49 92.4052 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 114.3 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 114.3 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 114.3 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "91c6b11c-b7e0-4040-bf56-076c6ad0f20a") + ) + (pin "1" + (uuid "230b9e47-d137-4173-a692-07b28fc7073b") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C303") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 356.87 38.1 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "bf71f69c-bf30-4bba-8a20-10a269f45c3c") + (property "Reference" "L21" + (at 355.6028 36.8879 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 357.505 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 356.87 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 356.87 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 356.87 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3612fad7-e290-4765-b2ac-2e7b0aeecdba") + ) + (pin "1" + (uuid "07250391-cab0-467d-b267-e442a39f308d") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L21") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 26.67 217.17 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "bf87ee13-505d-4c50-aace-c7da56efdb57") + (property "Reference" "#PWR039" + (at 26.67 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 30.226 214.884 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 26.67 217.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 26.67 217.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 26.67 217.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f5aec988-55ef-4b6c-aa08-a73cfb458901") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR039") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 347.98 52.07 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "bfd38731-c79b-4a14-b364-372ead90daaf") + (property "Reference" "L45" + (at 349.1921 50.8028 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 346.7679 50.8028 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 347.98 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 347.98 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 347.98 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d70db2b5-46e4-4d84-9731-e2334a4f10c3") + ) + (pin "1" + (uuid "653cbf09-7f57-46c0-9fe1-5ae481083d0a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L45") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 266.7 72.39 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c0ccc94e-b404-4332-9340-c75db95c0f9e") + (property "Reference" "#PWR053" + (at 266.7 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 264.16 73.66 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 266.7 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 266.7 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 266.7 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0e89e069-c523-4416-8d5f-93e96b92a73e") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR053") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 128.27 69.85 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c16e3415-aa85-412f-8790-b6786a872856") + (property "Reference" "C204" + (at 125.349 68.6379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2 nF" + (at 125.349 71.0621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 129.2352 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 128.27 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 128.27 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 128.27 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "7ba0e5ac-7c98-4132-ad77-94e7f45be536") + ) + (pin "1" + (uuid "d8ca089b-d27b-4c92-be1e-499da6b0c556") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C204") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 331.47 39.37 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "c2304032-9629-42d0-baf5-4a1a9303f25d") + (property "Reference" "L22" + (at 330.2028 38.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 332.105 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 331.47 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 331.47 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 331.47 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1fb829ab-77d6-4702-aa7a-20c110cc463f") + ) + (pin "1" + (uuid "ac857bc4-2e05-46be-a0b5-ef35348a16ff") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L22") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 148.59 54.61 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "c2ccf770-492a-4cd4-bb4a-af33ef39f849") + (property "Reference" "L33" + (at 149.8021 53.3428 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 147.3779 53.3428 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 148.59 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 148.59 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1da91fc9-7c65-4112-a1a4-038af695b84d") + ) + (pin "1" + (uuid "3b82147d-d1b0-4c8e-b920-2cac8b4a0de2") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L33") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 184.15 33.02 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c4d45f4a-1da6-4bca-bb11-1c89f92514f5") + (property "Reference" "U4" + (at 184.15 22.5257 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 184.15 24.9499 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 184.15 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 184.15 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 184.15 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 184.15 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "85cd47a0-fe4a-4a49-a31b-56b3f06f2b25") + ) + (pin "6" + (uuid "78c96635-2205-443f-9e31-98ae208e1231") + ) + (pin "4" + (uuid "7abcba95-8ede-4f9e-a2cf-199d3bf84bdf") + ) + (pin "1" + (uuid "0df9700a-1b38-4496-b471-e871f3a42e6d") + ) + (pin "2" + (uuid "aa126edf-17a9-40b3-8a88-ea6879c0b490") + ) + (pin "3" + (uuid "00128a23-9eae-4966-acb1-743d4883dab8") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 332.74 38.1 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c55acb44-9630-45a4-af8f-3f687105c2e2") + (property "Reference" "L93" + (at 334.0072 36.8879 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "1 uH" + (at 334.0072 39.3121 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 332.74 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 332.74 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 332.74 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "efc3ec39-5bb2-4259-96f6-ef2a1b3dbf60") + ) + (pin "2" + (uuid "58cff100-51a0-4510-9879-76456e017a44") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L93") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 62.23 276.86 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c6cf46c6-4c02-4a6e-b90b-373f3531beaf") + (property "Reference" "#PWR072" + (at 62.23 283.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 59.69 278.13 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 62.23 276.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 62.23 276.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 62.23 276.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e2d26622-0715-419a-b039-6e5bb13bd7f2") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR072") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 148.59 85.09 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "c8c36259-05f1-4f6f-ac2a-433e6383eeb9") + (property "Reference" "L35" + (at 149.8021 83.8228 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 147.3779 83.8228 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 148.59 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 148.59 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "bce8cf4b-d574-4cae-860a-16077566a039") + ) + (pin "1" + (uuid "5eb2a7a2-0dcf-4c15-92fb-93e46002a0cd") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L35") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 128.27 166.37 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c9760e08-2dae-46cb-b53d-c371da609d72") + (property "Reference" "C504" + (at 125.349 165.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "510 pF" + (at 125.349 167.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 129.2352 162.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 128.27 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 128.27 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 128.27 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "2aab4959-041b-4559-995f-be9e000ced04") + ) + (pin "1" + (uuid "499cec88-3c40-4bdf-92bb-25f33fd5cee7") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C504") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 26.67 149.86 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "cadae2ee-f5ca-4055-9b2d-f98108c16269") + (property "Reference" "#PWR029" + (at 26.67 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 26.67 145.7269 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 26.67 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 26.67 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 26.67 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "055d1061-a3cc-4efa-a4de-ad830578d5f9") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR029") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 104.14 199.39 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "cb05ddd4-7ebb-4b93-8b3b-81ae7bce8e2b") + (property "Reference" "C602" + (at 101.219 198.1779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "240 pF" + (at 101.219 200.6021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 105.1052 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 104.14 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 104.14 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 104.14 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "339313d2-16cc-4ffb-899c-ab36bc6766cc") + ) + (pin "1" + (uuid "c980a09a-e3ef-4c52-b3dc-e2d54fcc4755") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C602") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 153.67 166.37 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "cbeb3187-6ac6-47e7-8fbc-9db11f498dd5") + (property "Reference" "C506" + (at 150.749 165.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "300 pF" + (at 150.749 167.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 154.6352 162.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 153.67 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 153.67 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 153.67 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "4b414250-58e6-441b-89ce-9946bc554f60") + ) + (pin "1" + (uuid "eaa5177d-4354-45da-bf77-ec5c9842dcbd") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C506") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 148.59 124.46 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ccef1fa5-27ec-47af-b905-9ba079fb7d99") + (property "Reference" "L404" + (at 148.59 119.8104 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1.2 uH" + (at 148.59 122.2346 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 148.59 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 148.59 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "14bdea16-b6fb-41d9-a730-24c88c771ca7") + ) + (pin "2" + (uuid "b37393ed-0b42-4c0b-b565-1564797980a9") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L404") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 332.74 67.31 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "cd2ba727-e3f4-457b-a59f-38bcac593090") + (property "Reference" "L193" + (at 334.0072 66.0979 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "400 nH" + (at 334.0072 68.5221 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 332.74 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 332.74 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 332.74 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "62cb27e6-ea8d-4845-9ba7-7567ae0d616e") + ) + (pin "2" + (uuid "652de6e6-a096-4ca9-93d5-fa43cd5997f0") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L193") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 226.06 41.91 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ce0bedb2-f42c-43a8-bcb6-17b3e1a2e40b") + (property "Reference" "#PWR047" + (at 226.06 48.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 223.52 43.18 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 226.06 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 226.06 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 226.06 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "cfcc6220-5ff5-4a56-bab3-09ed73b31aaa") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR047") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Jumper:SolderJumper_2_Open") + (at 290.83 205.74 90) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (uuid "ce89803d-b345-4a8a-98ba-4c9650019bbe") + (property "Reference" "JP4" + (at 293.37 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "SolderJumper_2_Open" + (at 288.2209 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm" + (at 290.83 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 290.83 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 290.83 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 290.83 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "499b30df-b447-4849-8ec7-4bf14d7e94d5") + ) + (pin "1" + (uuid "fe77b55e-d799-47c6-846f-32437fef1407") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "JP4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 401.32 26.67 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ce8bfaf7-015e-4e10-8a06-0f0d59a5d425") + (property "Reference" "C98" + (at 401.32 32.9733 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 401.32 30.5491 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 405.13 27.6352 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 401.32 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 401.32 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 401.32 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f52acc4b-4f33-4b4b-afbd-bcc1d47b8d7a") + ) + (pin "1" + (uuid "fb1b4521-e0aa-493a-9f3d-695b9d90de4c") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C98") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 165.1 60.96 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "cf5927cc-079c-4712-88b0-c0fbfa5b66fe") + (property "Reference" "C207" + (at 165.1 54.6567 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 165.1 57.0809 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 168.91 59.9948 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 165.1 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 165.1 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 165.1 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "44f57525-6420-4f78-8322-df3ae3ee6e08") + ) + (pin "1" + (uuid "2ec69f94-a618-4db6-a6d0-8081cf7912c2") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C207") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "74xGxx:74LVC1G04") + (at 231.14 60.96 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "cfefc58e-4108-45d3-9f9c-858348b8351a") + (property "Reference" "U26" + (at 232.41 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SN74LVC1G04DCK" + (at 236.22 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:SOT-SC70" + (at 231.14 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf" + (at 231.14 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 231.14 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "595-SN74LVC1G04DCKR" + (at 231.14 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "854e9463-6f6c-4624-9e2d-353976223a16") + ) + (pin "4" + (uuid "7c3fa971-afb5-4afe-81bc-18b9d7bc2db8") + ) + (pin "3" + (uuid "166f648f-15ce-4308-9451-cd178845dd8d") + ) + (pin "5" + (uuid "9e73c656-7350-46a0-94b8-79312c793c3e") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U26") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 204.47 88.9 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d0ad51f4-1d6a-4bea-baaf-eed16ec36370") + (property "Reference" "C308" + (at 204.47 95.2033 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 204.47 92.7791 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 208.28 89.8652 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 204.47 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 204.47 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 204.47 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "8183399d-c2da-4558-8782-a97a6f543e02") + ) + (pin "1" + (uuid "186f44ec-4532-42d3-a786-688f665146c7") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C308") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 195.58 104.14 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d0e40b72-058f-4136-82a0-662354c3e307") + (property "Reference" "#PWR023" + (at 195.58 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 198.12 105.41 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 195.58 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 195.58 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 195.58 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fa7148c8-16c0-4814-9b7f-90dc478ec0dd") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR023") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 109.22 199.39 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d247bb65-7515-4e55-941d-98910a11ff27") + (property "Reference" "L601" + (at 110.4873 198.1779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "39 nH" + (at 110.4873 200.6021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 109.22 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 109.22 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 109.22 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8bbf3059-2a98-47d9-9429-6798b8034e6c") + ) + (pin "2" + (uuid "c1b2cc58-38f8-444f-a66e-771b43838ea1") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L601") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Jumper:SolderJumper_2_Open") + (at 167.64 234.95 90) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (uuid "d28a7d93-0fe9-44c5-b657-6889bd423f57") + (property "Reference" "JP11" + (at 170.18 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "SolderJumper_2_Open" + (at 165.0309 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm" + (at 167.64 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 167.64 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 167.64 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 167.64 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "8c021c01-3b0d-41d1-8a4e-9bc3df391838") + ) + (pin "1" + (uuid "838db0e6-bfe7-4646-bba1-4e8d40149f77") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "JP11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 123.19 151.13 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "d32e172e-db59-47b0-be54-8d83b797a810") + (property "Reference" "L38" + (at 124.4021 149.8628 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 121.9779 149.8628 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 123.19 151.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 123.19 151.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 151.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "81b03fc6-bee8-4658-a4e6-0a3641207771") + ) + (pin "1" + (uuid "ecae1f61-5ee3-48f2-82d4-bdf236cc698d") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L38") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Interface_Expansion:MCP23017_SO") + (at 326.39 195.58 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d3f0f76e-fb15-493e-ae2f-8bcd89392086") + (property "Reference" "U35" + (at 328.5841 168.5757 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MCP23017_SO" + (at 328.5841 170.9999 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_SO:SOIC-28W_7.5x17.9mm_P1.27mm" + (at 331.47 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "http://ww1.microchip.com/downloads/en/DeviceDoc/20001952C.pdf" + (at 331.47 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "" + (at 326.39 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "579-MCP23017-E/SO" + (at 326.39 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 326.39 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "7" + (uuid "096b290c-76b0-4edb-8151-b0fc822f9193") + ) + (pin "16" + (uuid "33e27bc2-446c-4143-b7ab-c0b1b32accb3") + ) + (pin "5" + (uuid "4f796db6-56bb-4af8-a064-8214326fd160") + ) + (pin "12" + (uuid "08cf3573-35ae-4d18-82e8-400f749d69f1") + ) + (pin "9" + (uuid "c14b2515-51e3-4a2c-9be8-e969880314e4") + ) + (pin "17" + (uuid "588dc2b3-c104-4ebd-b3a4-623b5da7a7de") + ) + (pin "23" + (uuid "c168e2ea-66a2-4dd3-a6d1-e47f1141cea0") + ) + (pin "4" + (uuid "228161d4-b6db-4ed1-9f3a-d41b8d72ddc9") + ) + (pin "28" + (uuid "76f59fba-45c3-42bd-bca7-20f9f1e09d83") + ) + (pin "22" + (uuid "300b7123-3328-444f-87c1-a61f0d719eae") + ) + (pin "18" + (uuid "f6146295-b64b-4f89-8b50-0fd86468bc10") + ) + (pin "8" + (uuid "67a655ad-ad8b-46d8-b306-2c149344fd0f") + ) + (pin "24" + (uuid "d7cf4416-ea28-4878-9828-ec6b78b229c0") + ) + (pin "15" + (uuid "d387c5a4-dd33-4f5d-a792-e5d85c5383ad") + ) + (pin "3" + (uuid "0f8894c7-cb79-411a-810a-b8b11baffbf5") + ) + (pin "14" + (uuid "0fcd9ac5-95ac-45cc-85cf-fe1a6f75eee6") + ) + (pin "25" + (uuid "25d7407d-db25-4be0-9bd9-3ccca0e8f263") + ) + (pin "6" + (uuid "b8eec671-380a-450a-a84b-77e0bd751e8a") + ) + (pin "27" + (uuid "cc99382f-7e5a-45c1-aadf-4ee7d41e2cba") + ) + (pin "20" + (uuid "aae41598-1a1a-4b9f-87f6-f43948cdae4b") + ) + (pin "21" + (uuid "2a506398-ae4a-459c-bc6b-59b8ca30d44d") + ) + (pin "10" + (uuid "09bf5714-145c-4674-9b05-0219676ebe3c") + ) + (pin "19" + (uuid "a9d4eeee-ee25-4e7b-9449-33da160dc8dd") + ) + (pin "26" + (uuid "b7902f14-aa59-4ac1-8a53-1d0476e3fb4d") + ) + (pin "1" + (uuid "e3ca8f19-9a1c-4e6c-895a-4ccbe4d6614c") + ) + (pin "2" + (uuid "00caaeac-df89-4195-977c-e570447abc90") + ) + (pin "11" + (uuid "911729ee-cf46-47cd-a845-72a89b820ba7") + ) + (pin "13" + (uuid "b9e9ab2b-f64f-42c6-8016-53b1efc76423") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U35") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 120.65 172.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d3f894ca-ad27-4a96-9cf1-75a87066176d") + (property "Reference" "#PWR032" + (at 120.65 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 118.11 173.99 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 120.65 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 120.65 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 120.65 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "be61562f-daec-4a42-a6d7-72f53f0e28b6") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR032") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Jumper:SolderJumper_2_Open") + (at 300.99 205.74 90) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (uuid "d496d9a8-29f5-48e2-b3fb-a158159120a9") + (property "Reference" "JP2" + (at 303.53 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "SolderJumper_2_Open" + (at 298.3809 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm" + (at 300.99 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 300.99 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 300.99 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 300.99 205.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a8a34f2a-6cba-432a-8c1a-6bdb745e21fa") + ) + (pin "1" + (uuid "2cee55fd-8c4f-4d41-82cd-f60497f0d674") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "JP2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 332.74 97.79 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d50232b8-04c4-4204-b9af-12fe95fbc38c") + (property "Reference" "L293" + (at 334.0072 96.5779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "132 nH" + (at 334.0072 99.0021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 332.74 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 332.74 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 332.74 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7ad97561-1757-4d28-81c4-ae43593dc34f") + ) + (pin "2" + (uuid "25d44390-dd5a-43bd-9398-8233c33206c2") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L293") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C_Polarized") + (at 222.25 266.7 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d66166a2-3b9c-45cf-93cf-abbcf5d7d4d3") + (property "Reference" "C1" + (at 219.329 264.5989 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "470uF 25V" + (at 219.329 267.0231 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_THT:CP_Radial_D10.0mm_P5.00mm" + (at 221.2848 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 222.25 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 222.25 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "667-ECA-1EM471" + (at 222.25 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "875dee1c-4a8d-4e82-b600-d05c0dc063d8") + ) + (pin "1" + (uuid "f7889ebe-5df1-4b7f-89e8-5089b87c8895") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:D_Zener") + (at 360.68 201.93 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d6ca9aee-62f2-4196-8c34-72215c3cbc12") + (property "Reference" "D4" + (at 360.68 207.3443 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "BAS70H,115" + (at 360.68 204.9201 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Diode_SMD:D_SOD-123F" + (at 360.68 201.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 360.68 201.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 360.68 201.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "771-BAS70H-T/R" + (at 360.68 201.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 360.68 201.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3ae3313b-bb2f-440e-9ec7-154545588d14") + ) + (pin "1" + (uuid "8a72b7cf-ed50-4ff7-ab1a-a9a437aabc21") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "D4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 322.58 29.21 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d8294a63-3e30-48d6-8eef-00b0a23ba99b") + (property "Reference" "L92" + (at 322.58 24.5604 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "11 uH" + (at 322.58 26.9846 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 322.58 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 322.58 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 322.58 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e97303c8-ea3f-4e74-abbe-ef31736ab754") + ) + (pin "2" + (uuid "c6c0a2a0-31e7-4fd1-91fa-878e9400bcda") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L92") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 100.33 60.96 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d844249b-3a7c-45a5-be81-dd76d43ef9d0") + (property "Reference" "C201" + (at 100.33 54.6567 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 100.33 57.0809 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 104.14 59.9948 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 100.33 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 100.33 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 100.33 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c48cd75b-96ed-4839-972d-e2ca6a99b6c1") + ) + (pin "1" + (uuid "d467ac83-0196-4178-80db-27ab6c933705") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C201") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 133.35 100.33 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d8678786-62ca-4e22-9a82-c3957f85e011") + (property "Reference" "L303" + (at 134.6172 99.1179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "120 nH" + (at 134.6172 101.5421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 133.35 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 133.35 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 133.35 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "72d66ea1-9b7c-4225-bc4d-758a5032f342") + ) + (pin "2" + (uuid "d817417d-bd0b-492a-a98c-4f9ee14626a5") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L303") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 157.48 166.37 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "d8bd8b61-7048-4834-a4fc-1e0bf34279a3") + (property "Reference" "L17" + (at 156.2128 165.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 156.2128 167.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 157.48 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 157.48 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 157.48 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "fc4926a3-59c9-4126-b673-3675ecd3e4b0") + ) + (pin "1" + (uuid "2a73062b-0475-4df7-a297-cbf80c604ff8") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L17") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 394.97 68.58 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d97525c6-ca4f-41d5-832f-ac3e2e5c25e5") + (property "Reference" "C25" + (at 401.2733 68.58 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 398.8491 68.58 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 395.9352 64.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 394.97 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 394.97 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 394.97 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1aa1ea74-1e97-42d8-abbe-8c0bebb83227") + ) + (pin "1" + (uuid "2597b47a-bd4a-4765-9939-0b0082844405") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C25") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 165.1 124.46 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d9dab577-f992-4c3c-b141-73805b63326b") + (property "Reference" "C407" + (at 165.1 118.1567 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 165.1 120.5809 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 168.91 123.4948 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 165.1 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 165.1 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 165.1 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "cc82a62a-e41f-4d1e-ab41-58759d2053f8") + ) + (pin "1" + (uuid "d22068de-621c-4047-bc9a-c8eaf45d2a2e") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C407") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 394.97 41.91 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "da173986-e417-494d-a3ad-bc836756206e") + (property "Reference" "#PWR050" + (at 394.97 48.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 397.51 43.18 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 394.97 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 394.97 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 394.97 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "49643b19-d878-4297-92dc-0d520ff5c44a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR050") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 266.7 43.18 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "dadf5234-01a5-4373-aab4-5d7e6b1c3ec1") + (property "Reference" "#PWR048" + (at 266.7 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 269.24 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 266.7 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 266.7 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 266.7 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "47c065bd-1b87-4a53-a1ea-3b6648d83693") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR048") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Jumper:SolderJumper_2_Open") + (at 34.29 241.3 90) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (uuid "deaaa031-1c1b-4e8d-b808-68ce254dd200") + (property "Reference" "JP10" + (at 36.83 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "SolderJumper_2_Open" + (at 31.6809 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm" + (at 34.29 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 34.29 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 34.29 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 34.29 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "76c93503-c27c-4f89-9d47-c1ac0589ca49") + ) + (pin "1" + (uuid "7b033c6d-1110-4bda-97d0-f324ff5f4666") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "JP10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 266.7 102.87 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "df4aff20-dcc5-418e-851b-40f93f0b7683") + (property "Reference" "#PWR058" + (at 266.7 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 264.16 104.14 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 266.7 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 266.7 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 266.7 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "29c26987-6373-410b-b538-20b2a07c4529") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR058") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 260.35 26.67 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e234d398-0a98-45f3-b4c7-d730e96fa1fb") + (property "Reference" "C90" + (at 260.35 32.9733 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 260.35 30.5491 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 264.16 27.6352 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 260.35 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 260.35 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 260.35 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "8bb46e1f-5104-4c17-9374-7765d3a34f76") + ) + (pin "1" + (uuid "07b3aef2-725f-4fb7-8bf8-a435529ac2b9") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C90") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 278.13 31.75 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e33e1b3d-6510-4215-95bf-bd147ff67155") + (property "Reference" "U24" + (at 278.13 21.2557 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 278.13 23.6799 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 278.13 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 278.13 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 278.13 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 278.13 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "1b83b65f-0c02-4715-9546-310eeb05e57a") + ) + (pin "6" + (uuid "95f54d12-f7bf-4ad7-9060-befd3f27ce83") + ) + (pin "4" + (uuid "0952b4b3-a8a3-4f02-b3de-ce6ccbb4724e") + ) + (pin "1" + (uuid "63d00f03-1426-47de-92aa-f142e092ed8a") + ) + (pin "2" + (uuid "5b0e75dc-173e-4bc7-83cc-5f71c9d1530b") + ) + (pin "3" + (uuid "934bc675-1c13-4757-85e3-2a84b5305a77") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U24") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 26.67 137.16 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e35fbd42-5eab-4783-93c1-06c58d92870b") + (property "Reference" "#PWR025" + (at 26.67 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 24.13 138.43 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 26.67 137.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 26.67 137.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 26.67 137.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7e14b90d-e5cc-41dc-90a8-8f420a775df6") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR025") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 260.35 86.36 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e49aef5d-4388-4f5b-922f-e92505886ccb") + (property "Reference" "C290" + (at 260.35 92.6633 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 260.35 90.2391 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 264.16 87.3252 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 260.35 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 260.35 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 260.35 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e4128bb4-3848-434d-9d5c-d437fec12362") + ) + (pin "1" + (uuid "ce8a36e3-932e-46ea-b057-3b6b0bf98ffa") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C290") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 195.58 73.66 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e587b21b-d3eb-42b2-987d-148f2f3b5682") + (property "Reference" "C16" + (at 201.8833 73.66 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 199.4591 73.66 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 196.5452 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 195.58 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 195.58 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 195.58 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "2cd4fab5-4117-4370-a679-f111dafff504") + ) + (pin "1" + (uuid "2c174b54-8082-4e3f-b768-ff171294e62b") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C16") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 158.75 166.37 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e6d0ce9b-7ce8-4704-baf7-5faabada4b5f") + (property "Reference" "L505" + (at 160.0172 165.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "120 nH" + (at 160.0172 167.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 158.75 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 158.75 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 158.75 166.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fad4a7ad-82c5-407a-a041-4351be5873b7") + ) + (pin "2" + (uuid "47fc1526-ea65-4fa3-b42c-5200dd31df3a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L505") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 356.87 67.31 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "e6e10eeb-b69b-4bed-bfc3-3acf0bb5d3de") + (property "Reference" "L24" + (at 355.6028 66.0979 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 357.505 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 356.87 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 356.87 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 356.87 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "8ea84711-93fe-4ac0-9c1f-2c43ebb08164") + ) + (pin "1" + (uuid "0f9a2135-26fe-42f5-90f2-e79284472d3b") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L24") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 260.35 55.88 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e7a6663a-c555-41de-9b25-76352346f742") + (property "Reference" "C190" + (at 260.35 62.1833 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 260.35 59.7591 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 264.16 56.8452 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 260.35 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 260.35 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 260.35 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6832d219-95f2-459d-8509-045edd16bbfb") + ) + (pin "1" + (uuid "34d3af27-2772-4ca8-89f7-247911e022a1") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C190") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_Coaxial") + (at 39.37 271.78 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e7e74e87-d298-4828-8ac9-d71603a73abe") + (property "Reference" "J5" + (at 40.64 267.97 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TO RECEIVE" + (at 45.72 265.43 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_Coaxial:SMA_Amphenol_901-144_Vertical" + (at 39.37 271.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" " ~" + (at 39.37 271.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 39.37 271.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "712-CONSMA001-G" + (at 39.37 271.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 39.37 271.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "eb0a60c5-a0c5-4b9d-91a8-beae8f058f97") + ) + (pin "2" + (uuid "f53d0270-90cc-4f46-ac25-aaa621d1a395") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "J5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 326.39 160.02 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e80abe49-bda2-46f2-ae29-ccfcb83461a1") + (property "Reference" "#PWR067" + (at 326.39 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 326.39 155.8869 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 326.39 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 326.39 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 326.39 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c093bfe0-5b40-4b15-9723-1c355d716399") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR067") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 153.67 199.39 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e80f0eae-6ef8-49ed-9f7d-e1afe9ed03a5") + (property "Reference" "C606" + (at 150.749 198.1779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "240 pF" + (at 150.749 200.6021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 154.6352 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 153.67 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 153.67 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 153.67 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "14005e00-c069-413a-8f62-e9b9b66874c6") + ) + (pin "1" + (uuid "342a786e-5576-4d50-be62-c136ce0de394") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C606") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 149.86 270.51 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e823f907-72ca-45c4-a98d-96a6950a516d") + (property "Reference" "C7" + (at 149.86 276.8133 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 149.86 274.3891 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 153.67 271.4752 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 149.86 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 149.86 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 149.86 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5b80a7ea-d474-47cd-a2f2-46023e1f97d8") + ) + (pin "1" + (uuid "9b9654de-50ad-4901-8c25-7d50b92b146a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 322.58 88.9 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e86efc4b-9cf7-4429-b2ea-3e995a82d13a") + (property "Reference" "L292" + (at 322.58 84.2504 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "3.6 uH" + (at 322.58 86.6746 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 322.58 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 322.58 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 322.58 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c42ec59a-7eeb-4388-8a89-deabd7fc456a") + ) + (pin "2" + (uuid "abf39fb5-3928-4182-805d-1ca1524d8453") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L292") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 78.74 193.04 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e9978715-2307-49e0-b23b-c2cfc97caf25") + (property "Reference" "U18" + (at 78.74 182.5457 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 78.74 184.9699 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 78.74 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 78.74 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 78.74 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 78.74 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "68c105e6-115b-4885-8a1f-8a00741d016e") + ) + (pin "6" + (uuid "e4911e29-baa8-4330-b8ae-f864d03f75aa") + ) + (pin "4" + (uuid "d97f2495-f300-491b-ac0b-100f44f7c538") + ) + (pin "1" + (uuid "2d4e3061-9231-4f57-a24d-e15aa6d0ca07") + ) + (pin "2" + (uuid "6eec8f6f-e6da-472e-9635-c8e0dc46a58a") + ) + (pin "3" + (uuid "286e3f6b-fdd6-4f14-8120-042f710af042") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U18") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF_Switch:MASWSS0179") + (at 78.74 93.98 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e9a8c266-a125-43a5-b1c2-3bd57aca697b") + (property "Reference" "U9" + (at 78.74 83.4857 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MASWSS0179" + (at 78.74 85.9099 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:MASWSS0179-SOT-26" + (at 78.74 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://cdn.macom.com/datasheets/MASWSS0179.pdf" + (at 78.74 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 78.74 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "937-MASWSS0179-T" + (at 78.74 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "e6053148-e5cd-4791-ada3-18d5ae8b71c7") + ) + (pin "6" + (uuid "ff8525cf-6001-443f-9036-2ec6ba853f7a") + ) + (pin "4" + (uuid "5912191d-8c6b-4e0f-945d-c8e90fac7776") + ) + (pin "1" + (uuid "f19b1357-1f2a-4044-979f-c611eb1ab06b") + ) + (pin "2" + (uuid "8235cd6d-e0d2-47b5-93bc-c49ab64c1339") + ) + (pin "3" + (uuid "c5a5b817-ad8a-401a-8916-993a3c7f1fbe") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole_Pad") + (at 392.43 245.11 270) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e9b18aef-8346-463f-9517-b47935b51000") + (property "Reference" "H2" + (at 396.24 245.11 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "~" + (at 396.24 246.3221 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "MountingHole:MountingHole_4.3mm_M4_DIN965_Pad" + (at 392.43 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 392.43 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 392.43 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 392.43 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "taydaelectronics.com" "" + (at 392.43 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "aa2a7f3c-838c-4061-82c6-50798682534b") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "H2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 195.58 167.64 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e9ddc879-a4e3-4c02-b3dc-879f499dfb26") + (property "Reference" "C19" + (at 201.8833 167.64 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 199.4591 167.64 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 196.5452 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 195.58 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 195.58 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 195.58 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "efe9f273-22e9-4c5c-9bdc-27458a8aa303") + ) + (pin "1" + (uuid "d2cc1001-11e7-4b1f-9fd5-e5f094a32bc2") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C19") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 401.32 86.36 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ea44e803-da22-432b-98e7-0b878cd1ab98") + (property "Reference" "C298" + (at 401.32 92.6633 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 401.32 90.2391 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 405.13 87.3252 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 401.32 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 401.32 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 401.32 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "af1a3d12-9e5a-41de-87d5-0a311d090d52") + ) + (pin "1" + (uuid "cbd7134a-27c8-4568-bf45-af36f9ba848a") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C298") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 148.59 118.11 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "ea87a49f-e55f-4873-92c6-bc5b13dc3745") + (property "Reference" "L37" + (at 149.8021 116.8428 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 147.3779 116.8428 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 148.59 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 148.59 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b5e85604-0c4d-48b2-9280-c4d478196f51") + ) + (pin "1" + (uuid "99d56ce1-b605-4288-95f6-901045cf6b3d") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L37") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 123.19 157.48 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "eb418cdc-f598-4581-ba26-f849497247c5") + (property "Reference" "L502" + (at 123.19 152.8304 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "820 nH" + (at 123.19 155.2546 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 123.19 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 123.19 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1255ca96-a19b-488b-a65f-441b31950320") + ) + (pin "2" + (uuid "d5003dd7-5ede-434d-9d19-da30ae988a9e") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L502") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 341.63 165.1 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ecced4af-25bc-412f-b8ef-38e2a1596863") + (property "Reference" "#PWR068" + (at 341.63 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 344.17 166.37 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 341.63 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 341.63 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 341.63 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "062b8b66-d76c-4d6a-899e-4f914f5558f9") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR068") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 204.47 154.94 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "edb91561-3bdf-4bb2-9d9e-13d03f16f9be") + (property "Reference" "C508" + (at 204.47 161.2433 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 204.47 158.8191 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 208.28 155.9052 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 204.47 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 204.47 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 204.47 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "20a45c21-0663-40c3-bfa0-7cf088e60eca") + ) + (pin "1" + (uuid "1c304d39-0e67-4cb3-a365-9e7ac9a23b86") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C508") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 358.14 97.79 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ee04b08c-94bf-44e9-922b-84b7c3602958") + (property "Reference" "L295" + (at 359.4072 96.5779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "245 nH" + (at 359.4072 99.0021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 358.14 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 358.14 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 358.14 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7efd13f5-895a-4982-bfb5-916fe4323264") + ) + (pin "2" + (uuid "f4c86cf1-01a5-4820-8937-654e49511796") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L295") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 331.47 99.06 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "f1069162-1058-462b-8ea4-113904717e92") + (property "Reference" "L28" + (at 330.2028 97.8479 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 332.105 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 331.47 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 331.47 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 331.47 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3b84d180-4019-4ea0-924f-8319c1cc7aec") + ) + (pin "1" + (uuid "1221ccfc-26b3-47dc-bbaf-c8c540318f5f") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L28") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 226.06 71.12 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f247add4-3d0c-445e-8c2c-4a90ce940b5f") + (property "Reference" "#PWR052" + (at 226.06 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 223.52 72.39 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 226.06 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 226.06 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 226.06 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f5df16f6-26f3-4abc-8aa4-fac82c0aac4c") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR052") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 120.65 139.7 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f27a4f11-e67d-4c52-b5f8-e522b6db7970") + (property "Reference" "#PWR027" + (at 120.65 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 118.11 140.97 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 120.65 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 120.65 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 120.65 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ed1f7fab-90b7-49d3-8fa9-10ce8a82f14e") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR027") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 22.86 260.35 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f2e33e0a-c28a-4451-aa88-a236a69ae334") + (property "Reference" "#PWR043" + (at 22.86 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 20.32 261.62 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 22.86 260.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 22.86 260.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 22.86 260.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fbda67eb-90da-4b46-8957-b66597a529ed") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR043") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 148.59 91.44 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "f3abcc48-4170-49ab-a917-f47e0824bf6c") + (property "Reference" "L304" + (at 148.59 86.7904 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "2.2 uH" + (at 148.59 89.2146 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 148.59 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 148.59 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7d758d61-c992-48fd-8421-0ef7b8c5409f") + ) + (pin "2" + (uuid "14486fb1-7a16-41b3-ab9a-50971995c9e8") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L304") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 313.69 58.42 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f4794f95-b0ed-47a4-9e47-c45de6244d11") + (property "Reference" "C193" + (at 316.23 52.07 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "195 pF" + (at 317.5 54.61 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 309.88 59.3852 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 313.69 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 313.69 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 313.69 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "035420e2-a66b-4e04-96d1-b818f8b635b7") + ) + (pin "1" + (uuid "33a6d14d-9624-46d2-9894-5d80c69603d3") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C193") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 266.7 68.58 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f55b7e11-0011-4f31-8a07-7786e5cecca8") + (property "Reference" "C22" + (at 260.3967 68.58 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF 50V" + (at 262.8209 68.58 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 265.7348 64.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 266.7 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 266.7 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "C1206C104K5RACTU" + (at 266.7 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3193238c-3afd-47fb-82d6-5c7bb146a878") + ) + (pin "1" + (uuid "1b1428a1-cc9e-4289-977d-ec4d0482ea77") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C22") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Regulator_Linear:LM1117T-3.3") + (at 250.19 262.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "f5ab2bfb-797a-43aa-a70c-83f3e74c8bf5") + (property "Reference" "U22" + (at 250.19 256.8407 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM1117T-3.3" + (at 250.19 259.2649 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 250.19 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/symlink/lm1117.pdf" + (at 250.19 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 250.19 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "926-LM1117T-3.3/NOPB" + (at 250.19 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "2147d464-073d-4620-b51e-8e1aa3ecfb7c") + ) + (pin "2" + (uuid "eb6993d5-90f5-4494-b03b-d121bb461761") + ) + (pin "1" + (uuid "d539a7ed-cc7e-4ba0-a07a-4fcdc202dfc3") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "U22") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 139.7 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f727be65-d5d7-4e63-be38-12fac8bef94b") + (property "Reference" "C205" + (at 142.24 54.61 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "180 pF" + (at 143.51 57.15 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 135.89 61.9252 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 139.7 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 139.7 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 139.7 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e15d36b1-330e-485f-849d-627ec8f83a7e") + ) + (pin "1" + (uuid "2865fdc4-36d5-4157-bdac-54f8ce85c531") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C205") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 322.58 82.55 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "f8fccbd5-8944-4139-bf3b-20061e520932") + (property "Reference" "L46" + (at 323.7921 81.2828 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 321.3679 81.2828 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 322.58 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 322.58 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 322.58 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "48038eb1-0029-4581-ba82-b893b43b7ef9") + ) + (pin "1" + (uuid "15ff1249-fc08-4d60-8d20-35b2fdebc40b") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L46") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 297.18 171.45 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f931086c-1dab-4142-9798-05b9d5bd411f") + (property "Reference" "R4" + (at 295.7942 167.64 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "2k2" + (at 293.37 167.64 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 298.958 171.45 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 297.18 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 297.18 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "652-CR1206FX-2201ELF" + (at 297.18 171.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1303058a-4c1c-42b5-9968-9d3c2544da0c") + ) + (pin "1" + (uuid "dd80018c-8a4c-4a9a-ab37-b893e6a38384") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "R4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 353.06 38.1 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f9723a76-24e3-4126-b56f-751196871ca8") + (property "Reference" "C96" + (at 350.139 36.8879 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "3.1 nF" + (at 350.139 39.3121 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 354.0252 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 353.06 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 353.06 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 353.06 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3c4d4c15-63aa-40a9-b954-e863f537ed28") + ) + (pin "1" + (uuid "4c4a70cc-3d72-45e4-a226-a75b3f672d1d") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C96") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 158.75 133.35 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "f97d3cc1-e3f3-405d-8e7b-d130f186a5d3") + (property "Reference" "L405" + (at 160.0172 132.1379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "150 nH" + (at 160.0172 134.5621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 158.75 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 158.75 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 158.75 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1caf7c30-a74f-455a-ba5b-4d04a2147710") + ) + (pin "2" + (uuid "4d4f1381-40d1-46d4-9369-74827b08f027") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L405") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 123.19 30.48 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "fa1c046c-a65a-425c-831c-22f3889ace29") + (property "Reference" "L102" + (at 123.19 25.8304 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "5.6 uH" + (at 123.19 28.2546 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 123.19 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 123.19 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "a9db9819-f2d5-40af-b0a9-79dad6950ffe") + ) + (pin "2" + (uuid "faca7b9c-7a54-4a87-9d09-f7da6f51e983") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L102") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 368.3 190.5 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fa49ecaa-3943-40ab-85c0-98418be4e28f") + (property "Reference" "#PWR041" + (at 368.3 196.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 370.84 191.77 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 368.3 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 368.3 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 368.3 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0e864b53-f4e2-4dad-ae31-730efae14208") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR041") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 101.6 279.4 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fa7aad51-a534-4cf9-9d0f-a631c796ca39") + (property "Reference" "#PWR070" + (at 101.6 285.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 99.06 280.67 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 101.6 279.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 101.6 279.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 101.6 279.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "a74cc7ac-6046-4f3a-aa32-ce0f13242603") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR070") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 128.27 199.39 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fa837279-53fd-4103-afae-e0c78e0e60b6") + (property "Reference" "C604" + (at 125.349 198.1779 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "380 pF" + (at 125.349 200.6021 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 129.2352 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 128.27 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 128.27 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 128.27 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "673e39bf-63cf-4736-bf3f-77109b5cf297") + ) + (pin "1" + (uuid "330c2f2c-2ca4-4ca5-b31d-8155be4d2c73") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C604") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 107.95 39.37 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (uuid "fc86cce0-7dc9-4b73-906b-53981d964017") + (property "Reference" "L3" + (at 106.6828 38.1579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Value" "L" + (at 106.6828 40.5821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Inductor_SMD:L_1206_3216Metric" + (at 107.95 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 107.95 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 107.95 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ddf1610b-3378-4b62-b588-2a708e450daa") + ) + (pin "1" + (uuid "206a355a-f89f-40ce-9dda-9df802298c76") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 26.67 104.14 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fc9238b6-af0b-4a0c-8a24-8beebb2c93ba") + (property "Reference" "#PWR020" + (at 26.67 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 24.13 105.41 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 26.67 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 26.67 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 26.67 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f4bdace1-2a2d-4e98-b40a-b0d8baea8fa0") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR020") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 133.35 133.35 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "fcdc7294-158f-4f4b-8528-d0f6c297f3b2") + (property "Reference" "L403" + (at 134.6173 132.1379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "82 nH" + (at 134.6173 134.5621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "T41_Library:FT37-toroid-vertical" + (at 133.35 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 133.35 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 133.35 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c48c7900-5288-420b-a295-6fea5563cc7d") + ) + (pin "2" + (uuid "c020a41f-ca5e-40c7-a0db-0fc0b6787113") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "L403") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 320.04 105.41 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fd14d205-b188-4154-9b6b-265b8d6ef962") + (property "Reference" "#PWR059" + (at 320.04 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 322.58 106.68 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 320.04 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 320.04 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 320.04 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "62b17d9a-9c20-4aa2-bcee-8b48dea9a418") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR059") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 394.97 72.39 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fdf69b47-6d36-46ff-8d4d-b9a72881fe00") + (property "Reference" "#PWR055" + (at 394.97 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 397.51 73.66 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 394.97 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 394.97 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 394.97 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "24db4020-7130-4e72-9056-8ec6f2324a01") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR055") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 114.3 157.48 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ff379642-9b0e-451d-8a65-83105bb5489b") + (property "Reference" "C503" + (at 116.84 151.13 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "43 pF" + (at 118.11 153.67 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 110.49 158.4452 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 114.3 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 114.3 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser Part Number" "" + (at 114.3 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5a31eeae-982d-4659-a2a9-ee70fe10105c") + ) + (pin "1" + (uuid "a5e23b79-3563-4452-b9c2-df4acbd2aa95") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "C503") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 226.06 21.59 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ffb221ad-476d-41e6-886b-5393b7b0a50f") + (property "Reference" "#PWR046" + (at 226.06 25.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 226.06 17.4569 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 226.06 21.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 226.06 21.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 226.06 21.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8f82c6ee-1809-4326-8bf1-323dc8dac50d") + ) + (instances + (project "T41-exciter-filter-board" + (path "/56a77fe5-f7a5-414c-a0f7-d659071572ee" + (reference "#PWR046") + (unit 1) + ) + ) + ) + ) + (sheet_instances + (path "/" + (page "1") + ) + ) +) diff --git a/wiki/raw/T41-main-board-V012.kicad_sch b/wiki/raw/T41-main-board-V012.kicad_sch new file mode 100644 index 0000000..e7876ac --- /dev/null +++ b/wiki/raw/T41-main-board-V012.kicad_sch @@ -0,0 +1,29581 @@ +(kicad_sch + (version 20231120) + (generator "eeschema") + (generator_version "8.0") + (uuid "3c4b9d3b-a516-4fd7-b325-b74c836dee65") + (paper "A3") + (title_block + (title "T41 Main Board") + (date "2024-04-26") + (rev "V012.6") + (comment 1 " Transcribed to KiCAD by OG King-KI3P") + (comment 2 "By Al Peter-AD8GY, Updated by WJ Schmidt-K9HZ") + (comment 3 "Changed part and orientation for Q1") + ) + (lib_symbols + (symbol "Audio:PCM5102" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -10.16 13.97 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "PCM5102" + (at 3.81 13.97 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm" + (at -1.27 19.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/symlink/pcm5102.pdf" + (at -1.27 19.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "2VRMS DirectPath, 112dB Audio Stereo DAC with 32-bit, 384kHz PCM Interface, TSSOP-20" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "audio dac 2ch 32bit 384kHz" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TSSOP*4.4x6.5mm*P0.65mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "PCM5102_0_1" + (rectangle + (start -10.16 12.7) + (end 10.16 -15.24) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "PCM5102_1_1" + (pin passive line + (at -2.54 15.24 270) + (length 2.54) + (name "CPVDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 -5.08 0) + (length 2.54) + (name "DEMP" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 -2.54 0) + (length 2.54) + (name "FLT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 2.54 0) + (length 2.54) + (name "SCK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 5.08 0) + (length 2.54) + (name "BCK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 7.62 0) + (length 2.54) + (name "DIN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 10.16 0) + (length 2.54) + (name "LRCK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 -10.16 0) + (length 2.54) + (name "FMT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 -7.62 0) + (length 2.54) + (name "XSMT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 -10.16 180) + (length 2.54) + (name "LDOO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -17.78 90) + (length 2.54) + (name "DGND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "19" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 2.54 180) + (length 2.54) + (name "CAPP" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 15.24 270) + (length 2.54) + (name "DVDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "20" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -2.54 -17.78 90) + (length 2.54) + (name "CPGND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 -5.08 180) + (length 2.54) + (name "CAPM" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 12.7 -12.7 180) + (length 2.54) + (name "VNEG" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 12.7 10.16 180) + (length 2.54) + (name "OUTL" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 12.7 7.62 180) + (length 2.54) + (name "OUTR" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 2.54 15.24 270) + (length 2.54) + (name "AVDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 2.54 -17.78 90) + (length 2.54) + (name "AGND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Connector:Conn_01x02_Socket" + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x02_Socket" + (at 0 -5.08 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" "Generic connector, single row, 01x02, script generated" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_locked" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_1x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_01x02_Socket_1_1" + (arc + (start 0 -2.032) + (mid -0.5058 -2.54) + (end 0 -3.048) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 -2.54) (xy -0.508 -2.54) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 0) (xy -0.508 0) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 0.508) + (mid -0.5058 0) + (end 0 -0.508) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Connector:Conn_01x03_Socket" + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x03_Socket" + (at 0 -5.08 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" "Generic connector, single row, 01x03, script generated" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_locked" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_1x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_01x03_Socket_1_1" + (arc + (start 0 -2.032) + (mid -0.5058 -2.54) + (end 0 -3.048) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 -2.54) (xy -0.508 -2.54) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 0) (xy -0.508 0) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 2.54) (xy -0.508 2.54) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 0.508) + (mid -0.5058 0) + (end 0 -0.508) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 3.048) + (mid -0.5058 2.54) + (end 0 2.032) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Connector:TestPoint" + (pin_numbers hide) + (pin_names + (offset 0.762) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "TP" + (at 0 6.858 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "TestPoint" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 5.08 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 5.08 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "test point" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "test point tp" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Pin* Test*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "TestPoint_0_1" + (circle + (center 0 3.302) + (radius 0.762) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "TestPoint_1_1" + (pin passive line + (at 0 0 90) + (length 2.54) + (name "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Connector_Audio:AudioJack3_SwitchTR" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 8.89 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "AudioJack3_SwitchTR" + (at 0 6.35 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" "Audio Jack, 3 Poles (Stereo / TRS), Switched TR Poles (Normalling)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "audio jack receptacle stereo headphones phones TRS connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Jack*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "AudioJack3_SwitchTR_0_1" + (rectangle + (start -5.08 -5.08) + (end -6.35 -7.62) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 0.508 -0.254) (xy 0.762 -0.762) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.778 -5.334) (xy 2.032 -5.842) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -5.08) (xy 0.635 -5.715) (xy 1.27 -5.08) (xy 2.54 -5.08) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 -7.62) (xy 1.778 -7.62) (xy 1.778 -5.334) (xy 1.524 -5.842) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 -2.54) (xy 0.508 -2.54) (xy 0.508 -0.254) (xy 0.254 -0.762) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.905 -5.08) (xy -1.27 -5.715) (xy -0.635 -5.08) (xy -0.635 0) (xy 2.54 0) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 2.54) (xy -2.54 2.54) (xy -2.54 -5.08) (xy -3.175 -5.715) (xy -3.81 -5.08) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 2.54 3.81) + (end -5.08 -10.16) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "AudioJack3_SwitchTR_1_1" + (pin passive line + (at 5.08 0 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "R" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -2.54 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "RN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 2.54 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "S" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -5.08 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "T" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -7.62 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "TN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Connector_Generic:Conn_01x01" + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x01" + (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" "Generic connector, single row, 01x01, script generated (kicad-library-utils/schlib/autogen/connector/)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_1x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_01x01_1_1" + (rectangle + (start -1.27 0.127) + (end 0 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 1.27) + (end 1.27 -1.27) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Connector_Generic:Conn_01x02" + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x02" + (at 0 -5.08 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" "Generic connector, single row, 01x02, script generated (kicad-library-utils/schlib/autogen/connector/)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_1x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_01x02_1_1" + (rectangle + (start -1.27 -2.413) + (end 0 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 0.127) + (end 0 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 1.27) + (end 1.27 -3.81) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Connector_Generic:Conn_01x03" + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x03" + (at 0 -5.08 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" "Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector/)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_1x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_01x03_1_1" + (rectangle + (start -1.27 -2.413) + (end 0 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 0.127) + (end 0 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 2.667) + (end 0 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 3.81) + (end 1.27 -3.81) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (pin passive line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Device:C" + (pin_numbers hide) + (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) + ) + ) + ) + ) + ) + ) + (symbol "Device:C_Polarized" + (pin_numbers hide) + (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_Polarized" + (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" "Polarized 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" "CP_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "C_Polarized_0_1" + (rectangle + (start -2.286 0.508) + (end 2.286 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.778 2.286) (xy -0.762 2.286) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 2.794) (xy -1.27 1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 2.286 -0.508) + (end -2.286 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + ) + (symbol "C_Polarized_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) + ) + ) + ) + ) + ) + ) + (symbol "Device:D_Zener" + (pin_numbers hide) + (pin_names + (offset 1.016) hide) + (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_Zener" + (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" "Zener diode" + (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_Zener_0_1" + (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) (xy -0.762 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 "D_Zener_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) + ) + ) + ) + ) + ) + ) + (symbol "Device:L" + (pin_numbers hide) + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "L" + (at -1.27 0 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "L" + (at 1.905 0 90) + (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" "Inductor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "inductor choke coil reactor magnetic" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Choke_* *Coil* Inductor_* L_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "L_0_1" + (arc + (start 0 -2.54) + (mid 0.6323 -1.905) + (end 0 -1.27) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 -1.27) + (mid 0.6323 -0.635) + (end 0 0) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 0) + (mid 0.6323 0.635) + (end 0 1.27) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 1.27) + (mid 0.6323 1.905) + (end 0 2.54) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "L_1_1" + (pin passive line + (at 0 3.81 270) + (length 1.27) + (name "1" + (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 "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Device:LED" + (pin_numbers hide) + (pin_names + (offset 1.016) hide) + (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 "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 -1.27 -1.27) (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) + ) + ) + (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 -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) + ) + ) + ) + (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) + ) + ) + ) + ) + ) + ) + (symbol "Device:R" + (pin_numbers hide) + (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) + ) + ) + ) + ) + ) + ) + (symbol "Diode:1N4007" + (pin_numbers hide) + (pin_names hide) + (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" "1N4007" + (at 0 -2.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Diode_THT:D_DO-41_SOD81_P10.16mm_Horizontal" + (at 0 -4.445 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.vishay.com/docs/88503/1n4001.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "1000V 1A General Purpose Rectifier Diode, DO-41" + (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" "D*DO?41*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "1N4007_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 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) (xy -1.27 0) (xy 1.27 1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "1N4007_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) + ) + ) + ) + ) + ) + ) + (symbol "MCU_Microchip_ATtiny:ATtiny85-20S" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -12.7 13.97 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + ) + (property "Value" "ATtiny85-20S" + (at 2.54 -13.97 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + ) + ) + (property "Footprint" "Package_SO:SOIC-8W_5.3x5.3mm_P1.27mm" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://ww1.microchip.com/downloads/en/DeviceDoc/atmel-2586-avr-8-bit-microcontroller-attiny25-attiny45-attiny85_datasheet.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "20MHz, 8kB Flash, 512B SRAM, 512B EEPROM, debugWIRE, SOIC-8W" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "AVR 8bit Microcontroller tinyAVR" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SOIC*5.3x5.3mm*P1.27mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "ATtiny85-20S_0_1" + (rectangle + (start -12.7 -12.7) + (end 12.7 12.7) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "ATtiny85-20S_1_1" + (pin bidirectional line + (at 15.24 -5.08 180) + (length 2.54) + (name "~{RESET}/PB5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 15.24 0 180) + (length 2.54) + (name "XTAL1/PB3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 15.24 -2.54 180) + (length 2.54) + (name "XTAL2/PB4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -15.24 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 15.24 7.62 180) + (length 2.54) + (name "AREF/PB0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 15.24 5.08 180) + (length 2.54) + (name "PB1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 15.24 2.54 180) + (length 2.54) + (name "PB2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 15.24 270) + (length 2.54) + (name "VCC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Mechanical:MountingHole_Pad" + (pin_numbers hide) + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "H" + (at 0 6.35 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MountingHole_Pad" + (at 0 4.445 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" "Mounting Hole with connection" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "mounting hole" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "MountingHole*Pad*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MountingHole_Pad_0_1" + (circle + (center 0 1.27) + (radius 1.27) + (stroke + (width 1.27) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "MountingHole_Pad_1_1" + (pin input line + (at 0 -2.54 90) + (length 2.54) + (name "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Motor:Fan" + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "M" + (at 2.54 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Fan" + (at 2.54 -2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + ) + ) + (property "Footprint" "" + (at 0 0.254 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0.254 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Fan" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Fan Motor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "PinHeader*P2.54mm* TerminalBlock*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Fan_0_1" + (arc + (start -2.54 -0.508) + (mid 0.0028 0.9121) + (end 0 3.81) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -5.08) (xy 0 -4.572) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -2.2352) (xy 0 -2.6416) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 4.2672) (xy 0 4.6228) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 4.572) (xy 0 5.08) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 0 1.016) + (radius 3.2512) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 0 3.81) + (mid 0.053 0.921) + (end 2.54 -0.508) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 2.54 -0.508) + (mid 0 1.0618) + (end -2.54 -0.508) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Fan_1_1" + (pin passive line + (at 0 7.62 270) + (length 2.54) + (name "+" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -5.08 90) + (length 2.54) + (name "-" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Regulator_Linear:AP7384-50V" + (pin_names + (offset 0.254) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -3.81 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "AP7384-50V" + (at 0 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-92_Inline_Wide" + (at 0 5.715 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.diodes.com/assets/Datasheets/AP7384.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "50mA Low Dropout Voltage Regulator, Fixed Output 5V, Wide Input Voltage Range 40V, TO-92" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "50mA LDO Regulator Fixed Positive" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO?92*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "AP7384-50V_0_1" + (rectangle + (start -5.08 1.905) + (end 5.08 -5.08) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "AP7384-50V_1_1" + (pin power_out line + (at 7.62 0 180) + (length 2.54) + (name "VO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -7.62 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -7.62 0 0) + (length 2.54) + (name "VI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Regulator_Linear:LM1117T-3.3" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -3.81 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM1117T-3.3" + (at 0 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Horizontal_TabDown" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/symlink/lm1117.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "800mA Low-Dropout Linear Regulator, 3.3V fixed output, TO-220" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "linear regulator ldo fixed positive" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO?220*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "LM1117T-3.3_0_1" + (rectangle + (start -5.08 -5.08) + (end 5.08 1.905) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "LM1117T-3.3_1_1" + (pin power_in line + (at 0 -7.62 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_out line + (at 7.62 0 180) + (length 2.54) + (name "VO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -7.62 0 0) + (length 2.54) + (name "VI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Regulator_Linear:LM7805_TO220" + (pin_names + (offset 0.254) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -3.81 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM7805_TO220" + (at 0 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 0 5.715 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.cn/PowerSolutions/document/MC7800-D.PDF" + (at 0 -1.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Positive 1A 35V Linear Regulator, Fixed Output 5V, TO-220" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Voltage Regulator 1A Positive" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO?220*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "LM7805_TO220_0_1" + (rectangle + (start -5.08 1.905) + (end 5.08 -5.08) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "LM7805_TO220_1_1" + (pin power_in line + (at -7.62 0 0) + (length 2.54) + (name "VI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -7.62 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_out line + (at 7.62 0 180) + (length 2.54) + (name "VO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Switch:SW_Push" + (pin_numbers hide) + (pin_names + (offset 1.016) hide) + (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) + ) + ) + (polyline + (pts + (xy 2.54 1.27) (xy -2.54 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 2.032 0) + (radius 0.508) + (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) + ) + ) + ) + ) + ) + ) + (symbol "T41:IDC_2x3" + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 1.27 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "IDC_2x3" + (at 1.27 -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 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Generic connector, double row, 02x05, top/bottom pin numbering scheme (row 1: 1...pins_per_row, row2: pins_per_row+1 ... num_pins), script generated (kicad-library-utils/schlib/autogen/connector/)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_2x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "IDC_2x3_1_1" + (rectangle + (start -1.27 0) + (end 0 -0.254) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 3.81) + (end 0 1.27) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 5.207) + (end 0 4.953) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 6.35) + (end 3.81 -1.27) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (rectangle + (start 3.81 0.127) + (end 2.54 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 2.667) + (end 2.54 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 5.207) + (end 2.54 4.953) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 5.08 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 5.08 180) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 2.54 180) + (length 3.81) + (name "Pin_4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 0 180) + (length 3.81) + (name "Pin_6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "T41:IDC_2x5" + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 1.27 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "IDC_2x5" + (at 1.27 -7.62 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" "Generic connector, double row, 02x05, top/bottom pin numbering scheme (row 1: 1...pins_per_row, row2: pins_per_row+1 ... num_pins), script generated (kicad-library-utils/schlib/autogen/connector/)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_2x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "IDC_2x5_1_1" + (rectangle + (start -1.27 -4.953) + (end 0 -5.207) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -2.413) + (end 0 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 1.27) + (end 0 -1.27) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 2.667) + (end 0 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 5.207) + (end 0 4.953) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 6.35) + (end 3.81 -6.35) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (rectangle + (start 3.81 -4.953) + (end 2.54 -5.207) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 -2.413) + (end 2.54 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 0.127) + (end 2.54 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 2.667) + (end 2.54 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 5.207) + (end 2.54 4.953) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 5.08 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 -5.08 180) + (length 3.81) + (name "Pin_10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 5.08 180) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 2.54 180) + (length 3.81) + (name "Pin_4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 0 180) + (length 3.81) + (name "Pin_6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 -2.54 180) + (length 3.81) + (name "Pin_8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -5.08 0) + (length 3.81) + (name "Pin_9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "T41:PCM1808PW" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 0 13.97 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "PCM1808PW" + (at 0 11.43 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:TSSOP-14_4.4x5mm_P0.65mm" + (at 0 -13.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/pcm1808.pdf" + (at 0 -17.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "24-Bit, 96-kHz Sampling, Advanced Segment, Audio Stereo Digital-to-Analog Converter, SW Control, TSSOP-14" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "audio dac 2ch 24bit 96kHz" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "SSOP*5.3x10.2mm*P0.65mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "PCM1808PW_0_1" + (rectangle + (start -7.62 10.16) + (end 7.62 -10.16) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "PCM1808PW_1_1" + (pin input line + (at -10.16 7.62 0) + (length 2.54) + (name "VREF" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 10.16 -2.54 180) + (length 2.54) + (name "MD0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 10.16 0 180) + (length 2.54) + (name "MD1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 10.16 2.54 180) + (length 2.54) + (name "FMT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 10.16 5.08 180) + (length 2.54) + (name "VIN_L" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 10.16 7.62 180) + (length 2.54) + (name "VIN_R" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -10.16 5.08 0) + (length 2.54) + (name "AGND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -10.16 2.54 0) + (length 2.54) + (name "VCC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -10.16 0 0) + (length 2.54) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -10.16 -2.54 0) + (length 2.54) + (name "DGND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -10.16 -5.08 0) + (length 2.54) + (name "SCKI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -10.16 -7.62 0) + (length 2.54) + (name "LRCK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 10.16 -7.62 180) + (length 2.54) + (name "BCK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 10.16 -5.08 180) + (length 2.54) + (name "DOUT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "T41:Teensy4.1" + (pin_names + (offset 1.016) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 0 64.77 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Teensy4.1" + (at 0 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at -10.16 10.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at -10.16 10.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Teensy4.1_0_0" + (polyline + (pts + (xy -22.86 -6.35) (xy 22.86 -6.35) + ) + (stroke + (width 0) + (type solid) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -17.78 -26.67) (xy -17.78 -13.97) + ) + (stroke + (width 0) + (type solid) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 17.78 -9.525) (xy 17.78 -24.765) + ) + (stroke + (width 0) + (type solid) + ) + (fill + (type none) + ) + ) + (text "(250mA max)" + (at 11.43 49.53 0) + (effects + (font + (size 1.016 1.016) + ) + ) + ) + (text "(3.6v to 5.5v)" + (at 11.43 54.61 0) + (effects + (font + (size 1.016 1.016) + ) + ) + ) + (text "Ethernet" + (at 15.875 -17.145 900) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (text "Host" + (at -13.97 -20.32 900) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (text "USB" + (at -15.875 -20.32 900) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin bidirectional line + (at -27.94 31.75 0) + (length 5.08) + (name "8_TX2_IN1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 29.21 0) + (length 5.08) + (name "9_OUT1C" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 26.67 0) + (length 5.08) + (name "10_CS_MQSR" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 24.13 0) + (length 5.08) + (name "11_MOSI_CTX1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 21.59 0) + (length 5.08) + (name "12_MISO_MQSL" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -27.94 19.05 0) + (length 5.08) + (name "3V3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 16.51 0) + (length 5.08) + (name "24_A10_TX6_SCL2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 13.97 0) + (length 5.08) + (name "25_A11_RX6_SDA2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 11.43 0) + (length 5.08) + (name "26_A12_MOSI1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 8.89 0) + (length 5.08) + (name "27_A13_SCK1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "19" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 6.35 0) + (length 5.08) + (name "28_RX7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "20" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 3.81 0) + (length 5.08) + (name "29_TX7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "21" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 1.27 0) + (length 5.08) + (name "30_CRX3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "22" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 -1.27 0) + (length 5.08) + (name "31_CTX3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "23" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 -3.81 0) + (length 5.08) + (name "32_OUT1B" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "24" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 -3.81 180) + (length 5.08) + (name "33_MCLK2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "25" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 -1.27 180) + (length 5.08) + (name "34_RX8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "26" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 1.27 180) + (length 5.08) + (name "35_TX8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "27" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 3.81 180) + (length 5.08) + (name "36_CS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "28" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 6.35 180) + (length 5.08) + (name "37_CS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "29" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 8.89 180) + (length 5.08) + (name "38_CS1_IN1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "30" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 11.43 180) + (length 5.08) + (name "39_MISO1_OUT1A" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "31" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 13.97 180) + (length 5.08) + (name "40_A16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "32" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 16.51 180) + (length 5.08) + (name "41_A17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "33" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 21.59 180) + (length 5.08) + (name "13_SCK_LED" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "35" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 24.13 180) + (length 5.08) + (name "14_A0_TX3_SPDIF_OUT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "36" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 26.67 180) + (length 5.08) + (name "15_A1_RX3_SPDIF_IN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "37" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 29.21 180) + (length 5.08) + (name "16_A2_RX4_SCL1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "38" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 31.75 180) + (length 5.08) + (name "17_A3_TX4_SDA1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "39" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 34.29 180) + (length 5.08) + (name "18_A4_SDA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "40" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 36.83 180) + (length 5.08) + (name "19_A5_SCL" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "41" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 39.37 180) + (length 5.08) + (name "20_A6_TX5_LRCLK1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "42" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 41.91 180) + (length 5.08) + (name "21_A7_RX5_BCLK1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "43" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 44.45 180) + (length 5.08) + (name "22_A8_CTX1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "44" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 46.99 180) + (length 5.08) + (name "23_A9_CRX1_MCLK1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "45" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 27.94 49.53 180) + (length 5.08) + (name "3V3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "46" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 27.94 52.07 180) + (length 5.08) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "47" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 27.94 54.61 180) + (length 5.08) + (name "VIN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "48" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 44.45 0) + (length 5.08) + (name "3_LRCLK2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_out line + (at -27.94 -15.24 0) + (length 5.08) + (name "5V" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "55" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 -17.78 0) + (length 5.08) + (name "D-" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "56" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 -20.32 0) + (length 5.08) + (name "D+" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "57" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -27.94 -22.86 0) + (length 5.08) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "58" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -27.94 -25.4 0) + (length 5.08) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "59" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 41.91 0) + (length 5.08) + (name "4_BCLK2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 -22.86 180) + (length 5.08) + (name "R+" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "60" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 -20.32 180) + (length 5.08) + (name "LED" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "61" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 -17.78 180) + (length 5.08) + (name "T-" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "62" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 -15.24 180) + (length 5.08) + (name "T+" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "63" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 27.94 -12.7 180) + (length 5.08) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "64" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 -10.16 180) + (length 5.08) + (name "R-" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "65" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 39.37 0) + (length 5.08) + (name "5_IN2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 36.83 0) + (length 5.08) + (name "6_OUT1D" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 34.29 0) + (length 5.08) + (name "7_RX2_OUT1A" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (symbol "Teensy4.1_0_1" + (rectangle + (start -22.86 60.96) + (end 22.86 -27.94) + (stroke + (width 0) + (type solid) + ) + (fill + (type none) + ) + ) + (rectangle + (start -20.32 -1.27) + (end -20.32 -1.27) + (stroke + (width 0) + (type solid) + ) + (fill + (type none) + ) + ) + ) + (symbol "Teensy4.1_1_1" + (pin power_in line + (at -27.94 54.61 0) + (length 5.08) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 52.07 0) + (length 5.08) + (name "0_RX1_CRX2_CS1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 49.53 0) + (length 5.08) + (name "1_TX1_CTX2_MISO1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 27.94 19.05 180) + (length 5.08) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "34" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -27.94 46.99 0) + (length 5.08) + (name "2_OUT2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "T41:Teensy_Audio_Adaptor" + (pin_names + (offset 1.016) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 3.81 17.78 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Teensy_Audio_Adaptor" + (at 3.81 15.24 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at -10.16 -25.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at -10.16 -25.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Teensy_Audio_Adaptor_0_1" + (rectangle + (start -19.05 13.97) + (end 19.05 -11.43) + (stroke + (width 0) + (type solid) + ) + (fill + (type none) + ) + ) + ) + (symbol "Teensy_Audio_Adaptor_1_0" + (pin output line + (at -7.62 -16.51 90) + (length 5.08) + (name "Q" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -24.13 -5.08 0) + (length 5.08) + (name "SDA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -24.13 -7.62 0) + (length 5.08) + (name "SCL" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "19" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 0 -16.51 90) + (length 5.08) + (name "I" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -24.13 -2.54 0) + (length 5.08) + (name "MCLK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "23" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 7.62 -16.51 90) + (length 5.08) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 15.24 -16.51 90) + (length 5.08) + (name "Mic" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (symbol "Teensy_Audio_Adaptor_1_1" + (pin bidirectional line + (at -24.13 2.54 0) + (length 5.08) + (name "LRCLK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "20" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -24.13 0 0) + (length 5.08) + (name "BCLK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "21" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -24.13 7.62 0) + (length 5.08) + (name "Tx" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -24.13 5.08 0) + (length 5.08) + (name "Rx" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "T41_Library:EA-T220-38E" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "H" + (at 16.51 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + ) + ) + (property "Value" "EA-T220-38E" + (at 16.51 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + ) + ) + (property "Footprint" "EAT22038E" + (at 16.51 -94.92 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ohmite.com/assets/docs/sink_e.pdf?r=false" + (at 16.51 -194.92 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Description" "OHMITE - EA-T220-38E - HEATSINK, TO-220, 38.1MM, BLACK" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Height" "38.35" + (at 16.51 -394.92 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Mouser Part Number" "588-EA-T220-38E" + (at 16.51 -494.92 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Mouser Price/Stock" "https://www.mouser.co.uk/ProductDetail/Ohmite/EA-T220-38E?qs=6weo7U0lPxCX9kcQhGcuZQ%3D%3D" + (at 16.51 -594.92 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Manufacturer_Name" "Ohmite" + (at 16.51 -694.92 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Manufacturer_Part_Number" "EA-T220-38E" + (at 16.51 -794.92 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (symbol "EA-T220-38E_1_1" + (rectangle + (start 5.08 2.54) + (end 15.24 -5.08) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (pin passive line + (at 0 0 0) + (length 5.08) + (name "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -2.54 0) + (length 5.08) + (name "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "T41_Library:IDC_2x4" + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 1.27 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "IDC_2x4" + (at 1.27 -7.62 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" "Generic connector, double row, 02x05, top/bottom pin numbering scheme (row 1: 1...pins_per_row, row2: pins_per_row+1 ... num_pins), script generated (kicad-library-utils/schlib/autogen/connector/)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_2x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "IDC_2x4_1_1" + (rectangle + (start -1.27 -2.413) + (end 0 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 2.54) + (end 0 0) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 5.207) + (end 0 4.953) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 6.35) + (end 3.81 -3.81) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (rectangle + (start 3.81 -2.413) + (end 2.54 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 0.127) + (end 2.54 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 2.667) + (end 2.54 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.81 5.207) + (end 2.54 4.953) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 5.08 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 5.08 180) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 2.54 180) + (length 3.81) + (name "Pin_4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 0 180) + (length 3.81) + (name "Pin_6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 -2.54 180) + (length 3.81) + (name "Pin_8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Transistor_FET:2N7000" + (pin_names hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "Q" + (at 5.08 1.905 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "2N7000" + (at 5.08 0 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-92_Inline" + (at 5.08 -1.905 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.vishay.com/docs/70226/70226.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "0.2A Id, 200V Vds, N-Channel MOSFET, 2.6V Logic Level, TO-92" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "N-Channel MOSFET Logic-Level" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO?92*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "2N7000_0_1" + (polyline + (pts + (xy 0.254 0) (xy -2.54 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.254 1.905) (xy 0.254 -1.905) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 -1.27) (xy 0.762 -2.286) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 0.508) (xy 0.762 -0.508) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 2.286) (xy 0.762 1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 2.54) (xy 2.54 1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 -2.54) (xy 2.54 0) (xy 0.762 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 -1.778) (xy 3.302 -1.778) (xy 3.302 1.778) (xy 0.762 1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.016 0) (xy 2.032 0.381) (xy 2.032 -0.381) (xy 1.016 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 2.794 0.508) (xy 2.921 0.381) (xy 3.683 0.381) (xy 3.81 0.254) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 3.302 0.381) (xy 2.921 -0.254) (xy 3.683 -0.254) (xy 3.302 0.381) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 1.651 0) + (radius 2.794) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 2.54 -1.778) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (circle + (center 2.54 1.778) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + ) + (symbol "2N7000_1_1" + (pin passive line + (at 2.54 -5.08 90) + (length 2.54) + (name "S" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -5.08 0 0) + (length 2.54) + (name "G" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 2.54 5.08 270) + (length 2.54) + (name "D" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Transistor_FET:IRF4905" + (pin_names hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "Q" + (at 5.08 1.905 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "IRF4905" + (at 5.08 0 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 5.08 -1.905 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "http://www.infineon.com/dgdl/irf4905.pdf?fileId=5546d462533600a4015355e32165197c" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "-74A Id, -55V Vds, Single P-Channel HEXFET Power MOSFET, 20mOhm Ron, TO-220AB" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Single P-Channel HEXFET Power MOSFET" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO?220*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "IRF4905_0_1" + (polyline + (pts + (xy 0.254 0) (xy -2.54 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.254 1.905) (xy 0.254 -1.905) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 -1.27) (xy 0.762 -2.286) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 0.508) (xy 0.762 -0.508) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 2.286) (xy 0.762 1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 2.54) (xy 2.54 1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 -2.54) (xy 2.54 0) (xy 0.762 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 1.778) (xy 3.302 1.778) (xy 3.302 -1.778) (xy 0.762 -1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.286 0) (xy 1.27 0.381) (xy 1.27 -0.381) (xy 2.286 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 2.794 -0.508) (xy 2.921 -0.381) (xy 3.683 -0.381) (xy 3.81 -0.254) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 3.302 -0.381) (xy 2.921 0.254) (xy 3.683 0.254) (xy 3.302 -0.381) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 1.651 0) + (radius 2.794) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 2.54 -1.778) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (circle + (center 2.54 1.778) + (radius 0.254) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + ) + (symbol "IRF4905_1_1" + (pin input line + (at -5.08 0 0) + (length 2.54) + (name "G" + (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 "D" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 2.54 -5.08 90) + (length 2.54) + (name "S" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "power:+12P" + (power) + (pin_names + (offset 0) + ) + (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" "+12P" + (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 \"+12P\"" + (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 "+12P_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 0) (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) + ) + ) + ) + (symbol "+12P_1_1" + (pin power_in line + (at 0 0 90) + (length 0) hide + (name "+12P" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "power:+12V" + (power) + (pin_names + (offset 0) + ) + (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" "+12V" + (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 \"+12V\"" + (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 "+12V_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 0) (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) + ) + ) + ) + (symbol "+12V_1_1" + (pin power_in line + (at 0 0 90) + (length 0) hide + (name "+12V" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "power:+3V3" + (power) + (pin_names + (offset 0) + ) + (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" "+3V3" + (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 \"+3V3\"" + (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 "+3V3_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 0) (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) + ) + ) + ) + (symbol "+3V3_1_1" + (pin power_in line + (at 0 0 90) + (length 0) hide + (name "+3V3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "power:+5V" + (power) + (pin_names + (offset 0) + ) + (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" "+5V" + (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 \"+5V\"" + (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 "+5V_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 0) (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) + ) + ) + ) + (symbol "+5V_1_1" + (pin power_in line + (at 0 0 90) + (length 0) hide + (name "+5V" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "power:GND" + (power) + (pin_names + (offset 0) + ) + (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) hide + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + ) + (junction + (at 154.94 152.4) + (diameter 0) + (color 0 0 0 0) + (uuid "0239eca1-805c-431e-ab1f-55abee9c46c2") + ) + (junction + (at 153.67 85.09) + (diameter 0) + (color 0 0 0 0) + (uuid "078e7ff1-e21c-459e-accb-c5bcf9d7c58d") + ) + (junction + (at 39.37 110.49) + (diameter 0) + (color 0 0 0 0) + (uuid "11e0187b-b2c1-4e0d-990d-807b83cc740d") + ) + (junction + (at 182.88 219.71) + (diameter 0) + (color 0 0 0 0) + (uuid "1480cfc0-5c3e-40a9-9311-48295f85030d") + ) + (junction + (at 41.91 198.12) + (diameter 0) + (color 0 0 0 0) + (uuid "1879a9de-c29f-4fc8-bb36-5b4463c0ec12") + ) + (junction + (at 236.22 232.41) + (diameter 0) + (color 0 0 0 0) + (uuid "1be99910-ee7b-46c9-85c1-7a1642e42d92") + ) + (junction + (at 107.95 236.22) + (diameter 0) + (color 0 0 0 0) + (uuid "1ed7707b-169c-4ace-9fa0-36fe682a50d7") + ) + (junction + (at 161.29 48.26) + (diameter 0) + (color 0 0 0 0) + (uuid "1f2dd448-ad5a-43fa-80fe-08cedd109ffe") + ) + (junction + (at 107.95 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "214a78fe-e5e0-4955-834a-ba06c68f0f85") + ) + (junction + (at 165.1 223.52) + (diameter 0) + (color 0 0 0 0) + (uuid "22633509-cff5-4ed5-a469-92ef5694e452") + ) + (junction + (at 156.21 209.55) + (diameter 0) + (color 0 0 0 0) + (uuid "2646d410-314f-4507-a405-ed2877d3f1aa") + ) + (junction + (at 222.25 45.72) + (diameter 0) + (color 0 0 0 0) + (uuid "2777e675-08bd-4396-92c9-3ea6f6abc8c9") + ) + (junction + (at 228.6 67.31) + (diameter 0) + (color 0 0 0 0) + (uuid "29021509-fd53-44c0-9962-0f2ab58f27ae") + ) + (junction + (at 187.96 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "296b9f83-2f7d-48f4-a0e8-684d2f11c183") + ) + (junction + (at 45.72 220.98) + (diameter 0) + (color 0 0 0 0) + (uuid "2dac7344-3055-4b61-837d-ff622742502f") + ) + (junction + (at 194.31 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "2e17bfef-74f0-43ce-a3b9-9cc38018ffe8") + ) + (junction + (at 200.66 109.22) + (diameter 0) + (color 0 0 0 0) + (uuid "30b2e534-8002-4943-9af7-07caa99849c1") + ) + (junction + (at 199.39 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "316b9fec-5c01-454e-8df1-714109ba129b") + ) + (junction + (at 171.45 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "33246895-d02e-444f-9d0a-415e2841a565") + ) + (junction + (at 161.29 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "364add15-5ef3-44e4-95d0-e2586c363096") + ) + (junction + (at 130.81 48.26) + (diameter 0) + (color 0 0 0 0) + (uuid "3f6d13a0-cc5c-480e-8794-2d4cdc14a2c8") + ) + (junction + (at 50.8 220.98) + (diameter 0) + (color 0 0 0 0) + (uuid "420d7a3b-b380-4934-8855-b7fad5dac582") + ) + (junction + (at 66.04 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "43cc58a7-f99f-4945-9911-f1c308adfef1") + ) + (junction + (at 138.43 67.31) + (diameter 0) + (color 0 0 0 0) + (uuid "465b888e-78e8-45b9-91bf-05203c6a7863") + ) + (junction + (at 222.25 67.31) + (diameter 0) + (color 0 0 0 0) + (uuid "4b8bf84e-385f-4d06-a486-7b0af18178be") + ) + (junction + (at 115.57 59.69) + (diameter 0) + (color 0 0 0 0) + (uuid "4d17b456-56fa-41ef-8f1e-da3e576446c6") + ) + (junction + (at 128.27 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "4ed6ea7d-b41d-4d12-804c-24878ad0c9c0") + ) + (junction + (at 193.04 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "507750d5-1411-44e9-be4f-c73078210889") + ) + (junction + (at 208.28 209.55) + (diameter 0) + (color 0 0 0 0) + (uuid "512d7c74-9168-4ed4-9b5e-35acbd63ad5f") + ) + (junction + (at 124.46 67.31) + (diameter 0) + (color 0 0 0 0) + (uuid "530ee5cf-d923-4b76-a4a1-e1a0150fc26d") + ) + (junction + (at 210.82 219.71) + (diameter 0) + (color 0 0 0 0) + (uuid "548239d9-96d6-4c98-8b92-4dc693e9997c") + ) + (junction + (at 200.66 125.73) + (diameter 0) + (color 0 0 0 0) + (uuid "557c9fd3-0eb2-4a62-8b19-41df8dcc4df7") + ) + (junction + (at 205.74 209.55) + (diameter 0) + (color 0 0 0 0) + (uuid "5aa34f2e-2999-48d5-8c8c-bfbc4b7f9ad7") + ) + (junction + (at 236.22 240.03) + (diameter 0) + (color 0 0 0 0) + (uuid "5d07673b-5b9f-447f-9f37-5f55dac06864") + ) + (junction + (at 172.72 182.88) + (diameter 0) + (color 0 0 0 0) + (uuid "5e388ff1-53ba-4ce4-8084-769357d82acc") + ) + (junction + (at 41.91 228.6) + (diameter 0) + (color 0 0 0 0) + (uuid "5f4ac3d2-51d5-42d4-aecf-bb00106fccf2") + ) + (junction + (at 154.94 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "5fdf21f4-307b-4d74-afa5-1915169db52e") + ) + (junction + (at 137.16 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "6227d269-a350-496b-a2b2-1a68e223e4d1") + ) + (junction + (at 158.75 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "63cca2d8-c368-49fe-8bf3-e123b2ead67d") + ) + (junction + (at 82.55 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "63e9b8f9-6f65-461f-918d-dc1238f33fed") + ) + (junction + (at 71.12 219.71) + (diameter 0) + (color 0 0 0 0) + (uuid "6a0ebd5b-9ab7-454e-ab28-5d3feef8fcc9") + ) + (junction + (at 58.42 161.29) + (diameter 0) + (color 0 0 0 0) + (uuid "6a6cf1d6-837a-4bfc-afb6-63bff77165e7") + ) + (junction + (at 102.87 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "6ca4b67c-4a8f-4c72-933c-024190e9c0f3") + ) + (junction + (at 158.75 209.55) + (diameter 0) + (color 0 0 0 0) + (uuid "73d7269f-d39f-4fff-82e5-1b301d64292a") + ) + (junction + (at 306.07 46.99) + (diameter 0) + (color 0 0 0 0) + (uuid "797c640e-5649-4f06-8c36-564de4f0906c") + ) + (junction + (at 45.72 236.22) + (diameter 0) + (color 0 0 0 0) + (uuid "7cd51be5-b7bd-47e2-9f86-f8d1188e81d6") + ) + (junction + (at 162.56 111.76) + (diameter 0) + (color 0 0 0 0) + (uuid "89798211-3e2e-44a3-a1e4-2321a59b880e") + ) + (junction + (at 264.16 59.69) + (diameter 0) + (color 0 0 0 0) + (uuid "8adfcc33-0f3e-49df-a554-40246d890724") + ) + (junction + (at 185.42 172.72) + (diameter 0) + (color 0 0 0 0) + (uuid "8b54da32-cd92-4ae0-a279-2a38412edfe9") + ) + (junction + (at 156.21 219.71) + (diameter 0) + (color 0 0 0 0) + (uuid "8b78bf8c-7942-4acc-b226-a18953ae5c4a") + ) + (junction + (at 222.25 59.69) + (diameter 0) + (color 0 0 0 0) + (uuid "8e3ccf5e-3272-4e80-a8c9-778ed5501597") + ) + (junction + (at 180.34 238.76) + (diameter 0) + (color 0 0 0 0) + (uuid "8eb7a143-5c53-4d33-a7b8-24575143a521") + ) + (junction + (at 165.1 109.22) + (diameter 0) + (color 0 0 0 0) + (uuid "9183ad8e-6bb7-4bd1-86d5-079a69cac60e") + ) + (junction + (at 161.29 67.31) + (diameter 0) + (color 0 0 0 0) + (uuid "9186e09f-484e-4766-bcc2-108f39d5c155") + ) + (junction + (at 203.2 59.69) + (diameter 0) + (color 0 0 0 0) + (uuid "95717b33-3830-41d3-be87-b51fd233cb9a") + ) + (junction + (at 196.85 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "96380cf6-4df2-46bc-a71f-016ce90e3e39") + ) + (junction + (at 45.72 243.84) + (diameter 0) + (color 0 0 0 0) + (uuid "9da93241-46c2-49b3-beb5-ed6291ed27bb") + ) + (junction + (at 111.76 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "a536b65f-8320-4bb0-8b55-7b7641b57818") + ) + (junction + (at 181.61 172.72) + (diameter 0) + (color 0 0 0 0) + (uuid "a68da249-85e2-45b5-8da2-723cb3e60200") + ) + (junction + (at 236.22 223.52) + (diameter 0) + (color 0 0 0 0) + (uuid "a8022ca3-f31b-4fe6-93a7-c38da4465b13") + ) + (junction + (at 91.44 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "a85f5548-1f3b-4f13-be75-20184e0115ff") + ) + (junction + (at 198.12 177.8) + (diameter 0) + (color 0 0 0 0) + (uuid "aaa86790-1d11-4a85-bd63-eb542c4be9ce") + ) + (junction + (at 240.03 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "ac11f944-2b90-4033-a7b7-aa8467c164c5") + ) + (junction + (at 193.04 67.31) + (diameter 0) + (color 0 0 0 0) + (uuid "acea53f4-066b-42be-8568-b1db057fc412") + ) + (junction + (at 66.04 57.15) + (diameter 0) + (color 0 0 0 0) + (uuid "afe48336-d4e9-44eb-85b2-87a4834c03f7") + ) + (junction + (at 196.85 67.31) + (diameter 0) + (color 0 0 0 0) + (uuid "b2675ce4-a751-402f-bbcd-e5a6986212dd") + ) + (junction + (at 181.61 209.55) + (diameter 0) + (color 0 0 0 0) + (uuid "b29577e9-27db-4b4b-857d-afb86d4dd93a") + ) + (junction + (at 222.25 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "b759e0f5-ff9f-4610-871f-58d29b9ba9c3") + ) + (junction + (at 168.91 54.61) + (diameter 0) + (color 0 0 0 0) + (uuid "bfc720ee-708e-41d6-bf3a-00a557b36f2d") + ) + (junction + (at 66.04 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "c117591a-48bc-4081-81d8-ede361572da9") + ) + (junction + (at 186.69 129.54) + (diameter 0) + (color 0 0 0 0) + (uuid "c3a40a78-ce5d-47ff-af02-430a49c885a9") + ) + (junction + (at 128.27 48.26) + (diameter 0) + (color 0 0 0 0) + (uuid "c714a063-b32f-4012-b148-ae3ea377c1c0") + ) + (junction + (at 226.06 259.08) + (diameter 0) + (color 0 0 0 0) + (uuid "c8eaa132-e8a5-4655-abf3-5a8c552cdcec") + ) + (junction + (at 175.26 172.72) + (diameter 0) + (color 0 0 0 0) + (uuid "cb64ace1-825c-4118-aef3-8e6a310fbe34") + ) + (junction + (at 198.12 261.62) + (diameter 0) + (color 0 0 0 0) + (uuid "ccb5f72b-b833-4ef3-9a47-fbef79c9f813") + ) + (junction + (at 180.34 243.84) + (diameter 0) + (color 0 0 0 0) + (uuid "cd855952-9ea6-4e87-ad50-2e1805276a43") + ) + (junction + (at 88.9 168.91) + (diameter 0) + (color 0 0 0 0) + (uuid "ce0e6433-d11c-4d17-9287-c3a786d03295") + ) + (junction + (at 199.39 261.62) + (diameter 0) + (color 0 0 0 0) + (uuid "ce74f9ee-3682-4c61-9e70-dfb680f86fe3") + ) + (junction + (at 356.87 62.23) + (diameter 0) + (color 0 0 0 0) + (uuid "d2101ab8-d83c-4d6f-9b35-118376df4f76") + ) + (junction + (at 218.44 59.69) + (diameter 0) + (color 0 0 0 0) + (uuid "d547b4aa-3d0b-4e4d-9851-472b5710672c") + ) + (junction + (at 222.25 251.46) + (diameter 0) + (color 0 0 0 0) + (uuid "da16c163-42c0-4e7c-99ad-7f2b9a27ef9a") + ) + (junction + (at 50.8 236.22) + (diameter 0) + (color 0 0 0 0) + (uuid "db6a322d-5c3a-4825-8b92-40ec375509f4") + ) + (junction + (at 240.03 59.69) + (diameter 0) + (color 0 0 0 0) + (uuid "def83167-1728-492d-a792-65f5c6dfed2a") + ) + (junction + (at 82.55 238.76) + (diameter 0) + (color 0 0 0 0) + (uuid "e368875e-6c84-4bad-a93e-2f4e436ad435") + ) + (junction + (at 82.55 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "e48d5b2b-1d38-4e6d-b72a-394bb787e172") + ) + (junction + (at 264.16 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "e7965570-eff5-4358-8339-4e6f81e6afa3") + ) + (junction + (at 57.15 104.14) + (diameter 0) + (color 0 0 0 0) + (uuid "ec3918d7-28e0-4971-95cd-45149d83a286") + ) + (junction + (at 142.24 48.26) + (diameter 0) + (color 0 0 0 0) + (uuid "efb9affa-2652-4a0a-8d42-a69af3d2bb9b") + ) + (junction + (at 45.72 198.12) + (diameter 0) + (color 0 0 0 0) + (uuid "f1a7cfbd-f194-4529-8a25-1ad1aabb24e2") + ) + (junction + (at 185.42 209.55) + (diameter 0) + (color 0 0 0 0) + (uuid "f2448b5c-7b6c-4cd3-a6f0-3b0e002c71df") + ) + (junction + (at 87.63 171.45) + (diameter 0) + (color 0 0 0 0) + (uuid "f2d5b706-922b-4555-9591-1855c3d5ea70") + ) + (junction + (at 82.55 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "f5788e1c-dc95-47d1-b16c-f241ab7df066") + ) + (junction + (at 88.9 171.45) + (diameter 0) + (color 0 0 0 0) + (uuid "f5cfe9f7-b3d2-4af9-9259-5b8bb61e2be9") + ) + (junction + (at 227.33 45.72) + (diameter 0) + (color 0 0 0 0) + (uuid "f85d0364-e803-4117-b8d5-2b462e491b24") + ) + (junction + (at 72.39 227.33) + (diameter 0) + (color 0 0 0 0) + (uuid "f8806081-c6ef-435f-a674-5d6618e65229") + ) + (junction + (at 210.82 67.31) + (diameter 0) + (color 0 0 0 0) + (uuid "ff362bcc-2a01-45ba-a240-504191252c9f") + ) + (no_connect + (at 248.92 160.02) + (uuid "009d8398-b31d-426f-95e8-4570e5f82cdb") + ) + (no_connect + (at 153.67 187.96) + (uuid "00a33290-e1b7-405e-bba4-ff60b23b257e") + ) + (no_connect + (at 44.45 53.34) + (uuid "05cd2203-bf39-4f38-8a92-1057033e8496") + ) + (no_connect + (at 354.33 39.37) + (uuid "098acbae-40bf-43a6-af91-675288b93f1d") + ) + (no_connect + (at 43.18 119.38) + (uuid "09d3ea10-8924-4a7a-895e-ed00e5e912e1") + ) + (no_connect + (at 74.93 170.18) + (uuid "113cff83-5629-4881-8b58-bacd5c4a8e65") + ) + (no_connect + (at 270.51 144.78) + (uuid "1389e1dc-8a17-4cea-bf25-ff2775d74930") + ) + (no_connect + (at 248.92 165.1) + (uuid "326cbddd-2b46-4298-b32e-b329c4f4c452") + ) + (no_connect + (at 88.9 127) + (uuid "35260bd5-c36a-4d15-9f4c-cb10ad04923a") + ) + (no_connect + (at 123.19 229.87) + (uuid "3b776231-51c5-4926-bf23-1fe788845511") + ) + (no_connect + (at 378.46 72.39) + (uuid "4ad2c7fc-8685-4682-9dae-d24ebdacb945") + ) + (no_connect + (at 57.15 53.34) + (uuid "5dbb039b-83c4-4fcb-a05f-f5d1eae549bd") + ) + (no_connect + (at 354.33 33.02) + (uuid "60c97fa8-8528-41cd-ba78-9fc6a869c78c") + ) + (no_connect + (at 74.93 157.48) + (uuid "64c862f4-fb7a-4e9c-ae1a-88995721f743") + ) + (no_connect + (at 250.19 185.42) + (uuid "7353f505-8f87-4b6c-838c-f50bb5924e7f") + ) + (no_connect + (at 88.9 116.84) + (uuid "76e090ea-b7de-4dff-97e2-d844d0dc3bfd") + ) + (no_connect + (at 255.27 144.78) + (uuid "7c44faea-e47b-47e5-b705-e618af7a072a") + ) + (no_connect + (at 378.46 85.09) + (uuid "82347eaa-3452-49f5-bc12-5b108ee13b97") + ) + (no_connect + (at 186.69 165.1) + (uuid "837941d5-2e59-4f85-b428-a0612eaa4b56") + ) + (no_connect + (at 264.16 232.41) + (uuid "8dd45729-e25b-4220-92ec-0f3ef2bc9850") + ) + (no_connect + (at 250.19 190.5) + (uuid "979cf7ea-e6d2-4f4f-acdd-47eb64c7e031") + ) + (no_connect + (at 264.16 227.33) + (uuid "a626673a-a69a-4717-b59c-e0ee7dc037a1") + ) + (no_connect + (at 199.39 165.1) + (uuid "a62b9c9a-c584-4ae7-9a74-84d6e6a1d0fa") + ) + (no_connect + (at 55.88 119.38) + (uuid "b78c5e8c-72e5-4dd7-899b-5d7d6c80d6a2") + ) + (no_connect + (at 278.13 144.78) + (uuid "bdb1ddb7-a014-4d49-a205-97f2a73c8988") + ) + (no_connect + (at 262.89 144.78) + (uuid "cf266941-af06-4c0a-a0a7-a3856e7bc1c8") + ) + (no_connect + (at 199.39 148.59) + (uuid "d51918b5-9661-45ca-86b8-18d5f97ce472") + ) + (no_connect + (at 186.69 153.67) + (uuid "d74ab22a-3d08-4736-8cd3-a8f782bd6f24") + ) + (no_connect + (at 199.39 116.84) + (uuid "de1c7941-6547-46bc-a0a9-4878c9512cfb") + ) + (no_connect + (at 354.33 30.48) + (uuid "e0b33954-4624-4b8d-866a-51ffe5896739") + ) + (no_connect + (at 354.33 41.91) + (uuid "e142851c-3896-4127-b9ab-f1bd928f007d") + ) + (no_connect + (at 123.19 224.79) + (uuid "e1503b9d-5053-43e8-9e64-63ee0729dc83") + ) + (wire + (pts + (xy 82.55 238.76) (xy 85.09 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "00bc97b2-4475-4a05-970c-13ef7cb85b48") + ) + (wire + (pts + (xy 82.55 38.1) (xy 91.44 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "012da651-37ae-4870-b0c9-21c13589e694") + ) + (wire + (pts + (xy 138.43 67.31) (xy 161.29 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "018c7cf6-1c44-403e-92e9-5d8bfae7002f") + ) + (wire + (pts + (xy 226.06 259.08) (xy 228.6 259.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "01bc4744-787c-41d1-9b07-fde47075763c") + ) + (wire + (pts + (xy 49.53 53.34) (xy 49.53 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "025d47e6-0b2f-4e60-a468-51b2c2d08f61") + ) + (wire + (pts + (xy 218.44 20.32) (xy 222.25 20.32) + ) + (stroke + (width 0) + (type default) + ) + (uuid "027be3e8-a084-4921-9b77-7bb862a0d6e0") + ) + (wire + (pts + (xy 36.83 110.49) (xy 39.37 110.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "02c58252-69ab-4e24-82e4-a27976083866") + ) + (wire + (pts + (xy 88.9 106.68) (xy 76.2 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0424b21f-9863-4181-aa3a-179144f08875") + ) + (wire + (pts + (xy 193.04 67.31) (xy 196.85 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "04f1795e-87da-4a76-916b-a590fa5909da") + ) + (wire + (pts + (xy 137.16 38.1) (xy 154.94 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "064ae8cd-07d4-4f09-b5d0-a4a4559d1c62") + ) + (wire + (pts + (xy 222.25 20.32) (xy 222.25 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "06c9b215-6e86-4dbf-9519-6f5e400e1f29") + ) + (wire + (pts + (xy 115.57 227.33) (xy 123.19 227.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0715961e-dcc3-48e1-adfa-659707f4199a") + ) + (wire + (pts + (xy 234.95 130.81) (xy 238.76 130.81) + ) + (stroke + (width 0) + (type default) + ) + (uuid "07ca4c04-f258-4632-8ecb-970873bd0edc") + ) + (wire + (pts + (xy 250.19 182.88) (xy 252.73 182.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "08edfd56-617a-441f-a112-5900e9a6f463") + ) + (wire + (pts + (xy 222.25 251.46) (xy 228.6 251.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "08f9d98f-4bcc-4caf-80a8-0ab2f08fda8d") + ) + (wire + (pts + (xy 157.48 156.21) (xy 157.48 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "092eb761-e8ec-47b4-b593-7c6968d57123") + ) + (wire + (pts + (xy 200.66 173.99) (xy 185.42 173.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "09fad92d-dcd3-4b36-90a9-bf04821ce791") + ) + (wire + (pts + (xy 102.87 53.34) (xy 91.44 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0a5263ee-b77a-47d9-9773-66c7e9d77f63") + ) + (wire + (pts + (xy 148.59 85.09) (xy 153.67 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0a7bbe4b-67e2-436f-8903-e56f33b7011d") + ) + (wire + (pts + (xy 111.76 38.1) (xy 115.57 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0b30ba96-6073-4f2b-a85b-f9858e99f189") + ) + (wire + (pts + (xy 66.04 57.15) (xy 69.85 57.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0b7858fa-4fdf-4a5f-99d1-0f755060bc0f") + ) + (wire + (pts + (xy 203.2 20.32) (xy 199.39 20.32) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0baf29cf-fc05-4107-a23a-8dd88bfee5d8") + ) + (wire + (pts + (xy 57.15 109.22) (xy 55.88 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0cc2421d-e9bc-4ec8-b51f-b2acbb005dba") + ) + (wire + (pts + (xy 85.09 228.6) (xy 85.09 218.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0ced0f05-b4bb-4625-97e1-0d4e2275c718") + ) + (wire + (pts + (xy 186.69 128.27) (xy 185.42 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0d628e7e-4930-4234-8cd8-b1dfc68dad3e") + ) + (polyline + (pts + (xy 276.86 182.88) (xy 276.86 144.78) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "0d9c1216-c88f-41d6-ae77-77d3eedab03c") + ) + (wire + (pts + (xy 54.61 161.29) (xy 58.42 161.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0dd010ef-2f13-493b-92f3-04d709a43331") + ) + (wire + (pts + (xy 124.46 67.31) (xy 138.43 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0dd415bd-5f9a-4030-affa-9a39164ae059") + ) + (wire + (pts + (xy 50.8 220.98) (xy 63.5 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0def2965-ae0b-42b1-aaa7-4a05e003d344") + ) + (wire + (pts + (xy 144.78 142.24) (xy 148.59 142.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0e4e1de7-2200-4d45-97b2-c39b574675f8") + ) + (wire + (pts + (xy 69.85 114.3) (xy 55.88 114.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0ea5b878-8394-47ed-82bc-6460b06ae800") + ) + (wire + (pts + (xy 222.25 59.69) (xy 240.03 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "10fe9295-56d4-403d-8cce-bdef49543fd1") + ) + (wire + (pts + (xy 199.39 175.26) (xy 200.66 175.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "11907b69-918d-4fb1-a889-6658125a31d0") + ) + (polyline + (pts + (xy 262.89 162.56) (xy 265.43 162.56) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "12ef5ec2-00cf-49cc-bb37-b147f1d5c959") + ) + (wire + (pts + (xy 199.39 38.1) (xy 199.39 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1341341c-a057-4052-914e-78ec9b8cb1be") + ) + (wire + (pts + (xy 66.04 38.1) (xy 82.55 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1421b20a-4891-4d51-81b3-37a48f0c4ed8") + ) + (wire + (pts + (xy 201.93 153.67) (xy 199.39 153.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "14eb8d5e-5bcb-41d2-8137-825cc9a1dfbf") + ) + (wire + (pts + (xy 86.36 166.37) (xy 88.9 166.37) + ) + (stroke + (width 0) + (type default) + ) + (uuid "17275713-ae01-4695-baeb-f9be6d30f195") + ) + (wire + (pts + (xy 194.31 38.1) (xy 196.85 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1733e7ad-1b15-496d-b361-435c88d68244") + ) + (wire + (pts + (xy 203.2 38.1) (xy 199.39 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "17f308f5-d87b-4634-98a7-511bfd319c79") + ) + (wire + (pts + (xy 162.56 111.76) (xy 186.69 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1825725b-f657-4e25-bc1f-4c08f1d4d3de") + ) + (wire + (pts + (xy 115.57 59.69) (xy 116.84 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1849b078-ae49-4811-abbe-d782ecf663f0") + ) + (wire + (pts + (xy 91.44 49.53) (xy 91.44 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "18d0c2c6-23cb-4f2a-a095-7b04f17107ba") + ) + (wire + (pts + (xy 171.45 38.1) (xy 187.96 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1916c783-19af-426e-97e9-9364e0408d71") + ) + (wire + (pts + (xy 264.16 237.49) (xy 259.08 237.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "19bb300c-0fda-42b5-8d76-9947f7c38e23") + ) + (wire + (pts + (xy 255.27 223.52) (xy 255.27 229.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1a2a5da3-a0c6-45ed-b079-9367b6387196") + ) + (wire + (pts + (xy 199.39 138.43) (xy 214.63 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1ac93a1c-f86a-4ad0-a335-cb2f101080dc") + ) + (wire + (pts + (xy 198.12 261.62) (xy 199.39 261.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1af5c862-2e83-493f-a9ca-7b41f69b299f") + ) + (wire + (pts + (xy 57.15 111.76) (xy 55.88 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1af8bba4-f8be-45bf-9c3b-61d655ec385d") + ) + (wire + (pts + (xy 175.26 172.72) (xy 181.61 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1b76752d-8dc1-4a6b-ae11-922567c6e947") + ) + (wire + (pts + (xy 168.91 182.88) (xy 172.72 182.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1caabf43-e6db-45e9-bf0f-e878c64391a9") + ) + (wire + (pts + (xy 200.66 177.8) (xy 200.66 175.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1ce0d513-473d-449d-9de8-c9586d34aa55") + ) + (wire + (pts + (xy 162.56 101.6) (xy 163.83 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1d089419-51d6-421e-a088-c1f8459d71e5") + ) + (wire + (pts + (xy 144.78 109.22) (xy 165.1 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1da0be6a-8b71-4b82-8458-20bef8bce318") + ) + (wire + (pts + (xy 82.55 49.53) (xy 82.55 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1dee0c93-abf6-4119-bba9-a1a1e09d7458") + ) + (wire + (pts + (xy 95.25 38.1) (xy 91.44 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1e24e992-3687-4f42-8816-e1467dc08913") + ) + (wire + (pts + (xy 45.72 236.22) (xy 50.8 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1e53add6-a820-47fb-a486-5fefb9c3cafc") + ) + (wire + (pts + (xy 224.79 223.52) (xy 224.79 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1f27e30c-39ae-4b6c-9a1a-d74880bbdae5") + ) + (wire + (pts + (xy 168.91 172.72) (xy 175.26 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1fce2066-2619-4053-800b-83e1f31e8520") + ) + (wire + (pts + (xy 124.46 48.26) (xy 124.46 54.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "20455df3-e302-4133-a1d1-62dd0aefff5c") + ) + (wire + (pts + (xy 45.72 181.61) (xy 45.72 186.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2105c645-d3d8-4a07-9ef6-3e2e3ef6c98d") + ) + (wire + (pts + (xy 87.63 171.45) (xy 87.63 168.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "215de846-cac6-4c3d-ae72-0f936260c26b") + ) + (wire + (pts + (xy 214.63 167.64) (xy 212.09 167.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "21b586b9-6bbb-4ade-a159-1ccf276d1631") + ) + (wire + (pts + (xy 193.04 57.15) (xy 193.04 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "21e3c76b-961b-4620-9091-6110f2cfa945") + ) + (wire + (pts + (xy 148.59 91.44) (xy 148.59 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2227f427-c7c9-41ee-8a28-fb4850f7c740") + ) + (wire + (pts + (xy 195.58 259.08) (xy 195.58 261.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "224d6812-69bc-49df-8e9b-378a224b4714") + ) + (wire + (pts + (xy 180.34 238.76) (xy 180.34 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "22c7fd19-7895-4c24-b27e-ac4d5fb8034d") + ) + (wire + (pts + (xy 49.53 58.42) (xy 66.04 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "23e10732-697d-4d4c-a8c7-99c3e1917694") + ) + (wire + (pts + (xy 81.28 124.46) (xy 88.9 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2419619e-bf74-40e9-84e1-9feaafda913f") + ) + (wire + (pts + (xy 185.42 125.73) (xy 200.66 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "24ee84c1-886a-4fc7-9678-a36c1323266e") + ) + (wire + (pts + (xy 254 154.94) (xy 254 160.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "263f8385-35ce-4d60-a949-1ed35d3f64c6") + ) + (wire + (pts + (xy 124.46 64.77) (xy 124.46 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "26836e32-3942-475d-9e59-dacec24aaf85") + ) + (wire + (pts + (xy 175.26 172.72) (xy 175.26 173.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "27407d62-89fd-413a-9335-c9af67d320db") + ) + (wire + (pts + (xy 57.15 111.76) (xy 57.15 110.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "28743abd-2ae0-449f-bd34-46f492509da4") + ) + (wire + (pts + (xy 115.57 227.33) (xy 115.57 228.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "28a44d81-abf8-4edc-9004-51535a8ffcf4") + ) + (wire + (pts + (xy 144.78 147.32) (xy 148.59 147.32) + ) + (stroke + (width 0) + (type default) + ) + (uuid "28a45226-9d67-4592-9d46-70881fa6d655") + ) + (wire + (pts + (xy 144.78 106.68) (xy 148.59 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2942eac3-e3d5-4802-bc81-5b2d54d599c2") + ) + (polyline + (pts + (xy 262.89 144.78) (xy 262.89 151.13) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "2a472eb2-86f0-4c81-9c16-b2ac98837482") + ) + (wire + (pts + (xy 185.42 209.55) (xy 195.58 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2a76d6bf-7054-4f28-bc75-b57438a1d481") + ) + (wire + (pts + (xy 161.29 48.26) (xy 165.1 48.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2a9c4dd5-0113-4b1f-9a38-be78f8ff3d26") + ) + (wire + (pts + (xy 68.58 137.16) (xy 88.9 137.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2c67be65-3930-4522-bf81-3020f1be0c7c") + ) + (wire + (pts + (xy 210.82 251.46) (xy 222.25 251.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2c8a0581-86b5-47f0-8e62-32bd29dffaa3") + ) + (wire + (pts + (xy 158.75 209.55) (xy 165.1 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2cc97a63-53c0-4421-a66b-1e7274ee3a67") + ) + (wire + (pts + (xy 168.91 233.68) (xy 185.42 233.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2cef6a0f-bc52-4f30-9c49-b90c80daa3d7") + ) + (wire + (pts + (xy 166.37 134.62) (xy 144.78 134.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2dfb4490-08b3-4313-bd76-934feee00605") + ) + (wire + (pts + (xy 123.19 234.95) (xy 123.19 237.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2e532183-646f-4935-a831-70bc369a6777") + ) + (wire + (pts + (xy 34.29 101.6) (xy 34.29 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2eaf62ff-55c6-455b-83b6-50befaabbc7e") + ) + (wire + (pts + (xy 68.58 219.71) (xy 71.12 219.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2eb4499f-0eff-434d-a496-27c0f8376bd1") + ) + (wire + (pts + (xy 147.32 170.18) (xy 147.32 166.37) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2ec1b797-7178-4458-8413-f2d01ae95213") + ) + (wire + (pts + (xy 144.78 121.92) (xy 148.59 121.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2ece5369-46b2-4633-80cb-d552b8129f30") + ) + (wire + (pts + (xy 128.27 48.26) (xy 130.81 48.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2edd34b1-2e9e-43b5-b427-7a44a45dc2ce") + ) + (wire + (pts + (xy 199.39 135.89) (xy 201.93 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2efba857-c646-4f2b-80bb-53df46abc49b") + ) + (wire + (pts + (xy 63.5 233.68) (xy 85.09 233.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2f8290c1-0ae5-4d33-83c8-65c5206468f3") + ) + (wire + (pts + (xy 186.69 129.54) (xy 199.39 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2fd2d846-bb6a-4fea-bed9-7d1db201f832") + ) + (wire + (pts + (xy 88.9 85.09) (xy 83.82 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3000c14e-d904-4f2e-a8ae-ba89fcfac95b") + ) + (wire + (pts + (xy 199.39 167.64) (xy 204.47 167.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "30407f92-1225-46d4-8a93-d08889c9f8ee") + ) + (wire + (pts + (xy 60.96 181.61) (xy 60.96 186.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "30b025c5-f0b3-4560-b334-ee814598a833") + ) + (wire + (pts + (xy 105.41 243.84) (xy 105.41 247.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "31989088-fa19-4e15-8f58-d08a95672ade") + ) + (wire + (pts + (xy 185.42 175.26) (xy 185.42 177.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "31b6904e-a68d-4b1a-b864-34d5bbbbc7a3") + ) + (wire + (pts + (xy 59.69 105.41) (xy 59.69 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3222d651-c482-4c56-97d4-d74d1e7b17f6") + ) + (wire + (pts + (xy 73.66 149.86) (xy 88.9 149.86) + ) + (stroke + (width 0) + (type default) + ) + (uuid "32c70c0e-5c66-407e-ba07-18e156138022") + ) + (wire + (pts + (xy 264.16 229.87) (xy 255.27 229.87) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3377cb27-a42e-4563-aec1-6ad061ce4d7e") + ) + (wire + (pts + (xy 193.04 38.1) (xy 193.04 49.53) + ) + (stroke + (width 0) + (type default) + ) + (uuid "358aa415-49bf-4b48-8c90-6ca938c8d283") + ) + (wire + (pts + (xy 134.62 193.04) (xy 140.97 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "35b57b8b-9aac-4d1e-87b5-2317a5d84724") + ) + (wire + (pts + (xy 151.13 161.29) (xy 144.78 161.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3644a792-75a8-4b0b-b4a1-299292ed016d") + ) + (wire + (pts + (xy 41.91 198.12) (xy 45.72 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "370d6bb3-80e4-49e6-9c0a-bcec4fb85077") + ) + (wire + (pts + (xy 76.2 106.68) (xy 76.2 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3714f137-7c20-48ae-a81b-4c1117f86939") + ) + (wire + (pts + (xy 255.27 240.03) (xy 251.46 240.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "37db2082-2e11-4f13-b2fa-a9974298bb44") + ) + (wire + (pts + (xy 31.75 181.61) (xy 31.75 186.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "37e82e10-d4c9-4828-870d-97bf2c14c76d") + ) + (wire + (pts + (xy 186.69 130.81) (xy 186.69 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "383fa33a-f75e-43e0-83a4-61f835367207") + ) + (wire + (pts + (xy 54.61 153.67) (xy 57.15 153.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "38cbc589-2a40-49ba-8a0d-46f4723a2f58") + ) + (wire + (pts + (xy 41.91 153.67) (xy 35.56 153.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "393d6648-6a5f-409e-800c-856552c06bcf") + ) + (wire + (pts + (xy 57.15 104.14) (xy 59.69 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3aa62b10-f4d8-4d3f-b3ba-7473f9fb5b03") + ) + (polyline + (pts + (xy 264.16 157.48) (xy 264.16 152.4) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "3bc98fca-4412-4471-bb64-82316b96ef33") + ) + (wire + (pts + (xy 168.91 173.99) (xy 168.91 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3c2dcee6-4b3f-432a-8ea7-43307dc92fce") + ) + (wire + (pts + (xy 105.41 233.68) (xy 107.95 233.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3c7fd64f-5b54-4adc-989a-67810f212d50") + ) + (wire + (pts + (xy 200.66 125.73) (xy 200.66 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3cb833db-d26f-4416-9616-8432b231c355") + ) + (wire + (pts + (xy 41.91 158.75) (xy 30.48 158.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3ccef5b3-d99f-4d34-97c4-2d5bf53ac6d7") + ) + (wire + (pts + (xy 132.08 195.58) (xy 140.97 195.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3cec12df-6280-4a66-854d-1c9d7ad5da89") + ) + (wire + (pts + (xy 306.07 46.99) (xy 322.58 46.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3d0cf3a7-1a80-42f8-aa81-59ad760f7b5c") + ) + (wire + (pts + (xy 40.64 220.98) (xy 45.72 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3d8a806b-f8d4-46e8-9c63-7dc88c2c158e") + ) + (wire + (pts + (xy 181.61 209.55) (xy 185.42 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3dd9cfbe-550a-4291-900b-1474acb78899") + ) + (wire + (pts + (xy 111.76 49.53) (xy 111.76 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3df0abd5-d892-4ad1-b22c-937cfcca7dc4") + ) + (wire + (pts + (xy 38.1 144.78) (xy 88.9 144.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "402a429a-4249-4652-a76a-28a56e20c6df") + ) + (wire + (pts + (xy 160.02 171.45) (xy 144.78 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "413efb46-7a85-47aa-8c22-73e5d56c721f") + ) + (wire + (pts + (xy 180.34 243.84) (xy 180.34 246.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4143394a-3f09-4cd1-aea6-7f5b7795447b") + ) + (wire + (pts + (xy 81.28 121.92) (xy 88.9 121.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "414a9f10-d41a-40a5-b096-763ee6407d3d") + ) + (wire + (pts + (xy 181.61 129.54) (xy 186.69 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4153ce53-9121-4524-b7be-da6fa04ffb53") + ) + (wire + (pts + (xy 40.64 104.14) (xy 40.64 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "416bf6b6-691a-4204-8110-c2b97a6c42aa") + ) + (wire + (pts + (xy 40.64 228.6) (xy 41.91 228.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "41709e57-5471-48d3-9168-4fbdbadb0d91") + ) + (wire + (pts + (xy 201.93 114.3) (xy 199.39 114.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "41c54caa-d231-4452-b5b6-7db5de55bd7f") + ) + (wire + (pts + (xy 165.1 104.14) (xy 165.1 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4239ef75-7786-48f7-9cf7-d11b7ef6fa78") + ) + (wire + (pts + (xy 130.81 48.26) (xy 130.81 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "429772b5-2a25-42ff-a70a-d9ecc72a8ce9") + ) + (wire + (pts + (xy 34.29 101.6) (xy 88.9 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "44f36e02-53f8-4cce-a1f2-df5c52d802d2") + ) + (wire + (pts + (xy 327.66 30.48) (xy 331.47 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "467f35f9-7ac3-4cda-bcb1-a77e2add2fc3") + ) + (wire + (pts + (xy 138.43 64.77) (xy 138.43 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "46e2e718-d3a6-4cee-b8cd-57debf4082bb") + ) + (wire + (pts + (xy 91.44 38.1) (xy 91.44 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "472530ab-f333-4c98-8157-e672dfca5870") + ) + (wire + (pts + (xy 77.47 153.67) (xy 80.01 153.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "47ad5aba-9845-4fb3-86c7-625b5c7e8d94") + ) + (wire + (pts + (xy 33.02 114.3) (xy 33.02 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "489ac9fb-6dd3-4173-a9e7-a0a524671ecc") + ) + (wire + (pts + (xy 82.55 53.34) (xy 85.09 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4a1a271d-dc16-48e6-a13b-e059ce65cf1a") + ) + (wire + (pts + (xy 35.56 139.7) (xy 88.9 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4a825c4a-be15-41c2-aa06-dd7217a5e302") + ) + (wire + (pts + (xy 210.82 238.76) (xy 215.9 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4b1d569f-d3f4-4e9a-9e10-5be9b94e7f34") + ) + (wire + (pts + (xy 234.95 135.89) (xy 238.76 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4bd96f87-f260-49fc-a563-c8f73fb171ba") + ) + (wire + (pts + (xy 148.59 54.61) (xy 168.91 54.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4d4dc410-7b2a-46e5-9329-59ab145cc7a1") + ) + (wire + (pts + (xy 165.1 109.22) (xy 186.69 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4da72512-da68-47f6-b4dc-d55dd6fbcbae") + ) + (wire + (pts + (xy 123.19 232.41) (xy 115.57 232.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4daf9c62-8a8d-4813-9378-aee8d6bc58d0") + ) + (wire + (pts + (xy 196.85 67.31) (xy 196.85 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4e209846-2220-4c5c-834c-777b9d63bcb0") + ) + (wire + (pts + (xy 160.02 168.91) (xy 160.02 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4e66b4b0-a66e-476c-80b9-601330c30cbe") + ) + (wire + (pts + (xy 212.09 209.55) (xy 208.28 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4f10f1a2-237a-4572-abf0-2ba9b6064a5d") + ) + (wire + (pts + (xy 160.02 156.21) (xy 160.02 151.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4f4984fa-fb63-488d-a146-86d2a065d8fd") + ) + (wire + (pts + (xy 30.48 158.75) (xy 30.48 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4fc0dcce-7d59-42de-bbcb-bb4b4722cfb2") + ) + (wire + (pts + (xy 199.39 20.32) (xy 199.39 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "50bc681b-7509-4a59-8439-3b2c18195b3d") + ) + (wire + (pts + (xy 41.91 156.21) (xy 33.02 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "50e974b1-e2e7-4336-bb3c-d269d874d810") + ) + (wire + (pts + (xy 68.58 158.75) (xy 68.58 137.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5138d44c-3926-4be7-8c2d-a0a2dcb7d9ec") + ) + (wire + (pts + (xy 306.07 54.61) (xy 306.07 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5274582f-197e-4b85-bfbe-653441ed6ef6") + ) + (wire + (pts + (xy 179.07 209.55) (xy 181.61 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5311d678-0c8a-438e-836d-8d09ea9d0601") + ) + (wire + (pts + (xy 200.66 125.73) (xy 203.2 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5425857d-fc11-4a06-8859-81ea1b28d89c") + ) + (wire + (pts + (xy 64.77 134.62) (xy 88.9 134.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "54b6f013-9cd9-4bfd-a04a-602bf0a87ff9") + ) + (wire + (pts + (xy 151.13 168.91) (xy 151.13 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "54ee2283-cdb9-4cc8-8c93-ba2dbb8c4e7f") + ) + (wire + (pts + (xy 130.81 48.26) (xy 142.24 48.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "556706b0-a691-465f-b397-afb749de2e31") + ) + (wire + (pts + (xy 160.02 151.13) (xy 144.78 151.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5599604b-0a73-4e8b-9b5d-4b8c4b68396f") + ) + (wire + (pts + (xy 163.83 139.7) (xy 144.78 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "55b5e7ea-c209-4e65-986c-aadb7ced8592") + ) + (wire + (pts + (xy 227.33 45.72) (xy 240.03 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5637f307-16cd-4b39-83c5-1e615318f24f") + ) + (wire + (pts + (xy 33.02 132.08) (xy 88.9 132.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5648e686-1463-4c42-af62-dc5fb09af42d") + ) + (wire + (pts + (xy 222.25 259.08) (xy 226.06 259.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5662da34-480f-414a-826c-2ce339bf6575") + ) + (wire + (pts + (xy 66.04 57.15) (xy 66.04 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "581c3a64-8928-4072-8e70-895f0ca4fcd0") + ) + (wire + (pts + (xy 260.35 185.42) (xy 260.35 187.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5890efea-92e8-4152-8615-0bde88755a9a") + ) + (wire + (pts + (xy 311.15 30.48) (xy 314.96 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "593b2c44-9db7-4528-a7d4-c83bd9d422d2") + ) + (wire + (pts + (xy 105.41 241.3) (xy 113.03 241.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "59ebbc36-f722-4ead-b58d-4bf850a85508") + ) + (wire + (pts + (xy 198.12 209.55) (xy 198.12 226.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5a80ffec-b62c-4930-839c-9d922c019b44") + ) + (wire + (pts + (xy 128.27 38.1) (xy 128.27 39.37) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5ad36326-4c00-49d0-a1e7-a3efb8828827") + ) + (wire + (pts + (xy 64.77 156.21) (xy 64.77 134.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5b5f4f79-94fe-4a0c-ae0b-cad9c83a41d6") + ) + (wire + (pts + (xy 250.19 180.34) (xy 260.35 180.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5bdc03ad-7d5e-4d15-89e3-4e95594a5f04") + ) + (wire + (pts + (xy 110.49 38.1) (xy 111.76 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5c4de4cc-5111-4f18-99bf-1d6a11920c54") + ) + (wire + (pts + (xy 80.01 170.18) (xy 85.09 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5d2a02e6-16be-4d9b-a436-4fd97e1ac8e8") + ) + (wire + (pts + (xy 210.82 233.68) (xy 217.17 233.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5d8f9743-5e65-4e22-a46e-104edb90c74c") + ) + (wire + (pts + (xy 54.61 151.13) (xy 54.61 147.32) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5ddfd0cf-bb96-4ca4-8254-411150523da5") + ) + (wire + (pts + (xy 176.53 119.38) (xy 186.69 119.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5e90f225-da4b-4149-a370-a0e41f1146bd") + ) + (wire + (pts + (xy 156.21 219.71) (xy 158.75 219.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "601ed941-4771-4726-b4e0-b2ff5238ba5b") + ) + (wire + (pts + (xy 87.63 171.45) (xy 88.9 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6083dd20-a601-4bc7-84a9-6fcec7709c6f") + ) + (wire + (pts + (xy 74.93 260.35) (xy 74.93 255.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "610a9550-411d-4aaa-92fb-705b6cae2571") + ) + (wire + (pts + (xy 186.69 175.26) (xy 185.42 175.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "610e4c56-5f93-48fc-a50a-4bb4fedf39f2") + ) + (wire + (pts + (xy 186.69 148.59) (xy 186.69 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "61836976-80a3-4669-b15c-ec0e9466ad1f") + ) + (polyline + (pts + (xy 265.43 162.56) (xy 265.43 151.13) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "628add7d-292d-4e49-b71d-7ace9fd0539d") + ) + (polyline + (pts + (xy 26.67 72.39) (xy 26.67 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "62af7b0b-ff15-4c47-95c5-33c76d1b28d7") + ) + (wire + (pts + (xy 166.37 138.43) (xy 166.37 134.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "62dd3e5d-aa29-43ef-a347-deec7a6bcaf2") + ) + (wire + (pts + (xy 257.81 38.1) (xy 264.16 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "62f7e01d-20f3-43cc-b577-4bd22f3c2ab4") + ) + (wire + (pts + (xy 38.1 161.29) (xy 38.1 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6354cefd-6663-48b1-acdd-8a0443b06ebd") + ) + (wire + (pts + (xy 236.22 223.52) (xy 224.79 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "64fe941a-b229-4872-97ca-316cf55a2d24") + ) + (wire + (pts + (xy 180.34 251.46) (xy 185.42 251.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "66497ec2-5756-4b5f-b67f-dc1cd5699320") + ) + (wire + (pts + (xy 82.55 163.83) (xy 88.9 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6654900a-5866-4b5f-84bc-81bdb78a99b8") + ) + (wire + (pts + (xy 153.67 195.58) (xy 156.21 195.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "667cc034-1274-4d21-8857-7d2e2c6ec016") + ) + (wire + (pts + (xy 176.53 231.14) (xy 185.42 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6688a0e1-c68c-4593-a8df-dfdf7e50f35b") + ) + (wire + (pts + (xy 80.01 114.3) (xy 88.9 114.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "66f0b758-fda9-4c3a-b3aa-81475aeade42") + ) + (wire + (pts + (xy 311.15 33.02) (xy 314.96 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6742ad22-bc66-4d85-8e34-c2c8f404aca8") + ) + (wire + (pts + (xy 224.79 233.68) (xy 224.79 240.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "68197e53-edf0-4fe4-9ac5-bc0349233792") + ) + (wire + (pts + (xy 222.25 45.72) (xy 227.33 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6867336b-5e3d-4b62-b179-242131ea1833") + ) + (wire + (pts + (xy 306.07 45.72) (xy 306.07 46.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6892e5ed-222c-4033-a096-8f891d4dd28f") + ) + (wire + (pts + (xy 85.09 170.18) (xy 85.09 161.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "696523e3-2afa-49c1-afef-079960e7982b") + ) + (wire + (pts + (xy 201.93 119.38) (xy 199.39 119.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6997a059-72cf-4c89-a6f3-b091cc8643a4") + ) + (wire + (pts + (xy 200.66 261.62) (xy 200.66 259.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6a561bd2-80dd-4bf3-b8fe-ae63c20d49fe") + ) + (wire + (pts + (xy 144.78 99.06) (xy 148.59 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6aa7ff1b-aa8a-4df0-9022-071e820e2fad") + ) + (wire + (pts + (xy 195.58 189.23) (xy 181.61 189.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6ab75565-1eab-4727-9105-cf9117e82253") + ) + (wire + (pts + (xy 210.82 231.14) (xy 217.17 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6b0560b8-ece2-4f53-bc8b-67e117598070") + ) + (wire + (pts + (xy 41.91 151.13) (xy 38.1 151.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6b18c959-c339-4899-ad52-70c351986bbc") + ) + (wire + (pts + (xy 144.78 104.14) (xy 148.59 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6c68d385-0c49-4518-bb9b-b15bfd909661") + ) + (wire + (pts + (xy 144.78 132.08) (xy 152.4 132.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6c732d22-6d86-4bca-a0b0-39170cc905d7") + ) + (wire + (pts + (xy 234.95 120.65) (xy 238.76 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6cf116f0-d411-4ba1-bdf1-4e8704791964") + ) + (wire + (pts + (xy 161.29 66.04) (xy 161.29 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6d75db03-09f4-4ffe-89c4-f9b4864c0de9") + ) + (wire + (pts + (xy 210.82 219.71) (xy 212.09 219.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6d93fa98-2ba1-4797-ba1a-28b416913b53") + ) + (wire + (pts + (xy 210.82 246.38) (xy 215.9 246.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6edf3c83-d50c-4f3d-85d4-a1126546d832") + ) + (wire + (pts + (xy 123.19 38.1) (xy 128.27 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6f15281e-d836-43b6-bc0b-003c83c99dbd") + ) + (wire + (pts + (xy 45.72 194.31) (xy 45.72 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6f5e7039-ba7f-42ce-9fb3-e4ae628df0ff") + ) + (wire + (pts + (xy 168.91 181.61) (xy 168.91 182.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6fdf93d7-f508-4439-89ad-a5a796f0d099") + ) + (wire + (pts + (xy 46.99 53.34) (xy 46.99 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "70dc4953-4111-4dda-988c-ed4745b81a5d") + ) + (wire + (pts + (xy 200.66 111.76) (xy 199.39 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "71321a75-1bd9-4d77-97e6-d08657505100") + ) + (wire + (pts + (xy 234.95 133.35) (xy 238.76 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "71a85267-7824-4b95-918a-00eb81d56792") + ) + (wire + (pts + (xy 64.77 38.1) (xy 66.04 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "72aebaaf-181f-4ede-9190-13194b69d154") + ) + (wire + (pts + (xy 205.74 209.55) (xy 198.12 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "736aff6b-fba4-4491-9477-873ebb69871c") + ) + (wire + (pts + (xy 82.55 157.48) (xy 82.55 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "74130ae3-12f6-4122-b09e-893b015d04dd") + ) + (wire + (pts + (xy 55.88 116.84) (xy 76.2 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "74a35cb3-4997-4735-ad6e-11f23da385b1") + ) + (wire + (pts + (xy 255.27 234.95) (xy 255.27 240.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "74b85a5b-9836-41c8-bec2-05d914a1da25") + ) + (wire + (pts + (xy 186.69 146.05) (xy 181.61 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "760dd05e-8249-468a-b0ce-76298eedde2f") + ) + (wire + (pts + (xy 222.25 38.1) (xy 240.03 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "77be84cf-8dee-4423-9913-601580ac8868") + ) + (wire + (pts + (xy 148.59 124.46) (xy 144.78 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "77f27753-6c29-4031-9cf2-0d8e879e91eb") + ) + (wire + (pts + (xy 152.4 219.71) (xy 156.21 219.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7a18330d-7042-4de3-97cc-fd7bbf450d0a") + ) + (polyline + (pts + (xy 270.51 144.78) (xy 270.51 149.86) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "7a340735-7715-4049-b217-8ddb88bcc9a8") + ) + (wire + (pts + (xy 85.09 255.27) (xy 85.09 260.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7aa07c61-c7ea-4935-afac-7a5e264da730") + ) + (wire + (pts + (xy 195.58 261.62) (xy 198.12 261.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7aee4ed5-62d3-416b-afd9-9779610e9d75") + ) + (wire + (pts + (xy 168.91 54.61) (xy 187.96 54.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7b5e85be-f9c3-4ad2-a429-3ddb28c62c74") + ) + (wire + (pts + (xy 205.74 219.71) (xy 210.82 219.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7b63f312-2ca3-4da4-baec-82e68325654e") + ) + (wire + (pts + (xy 111.76 38.1) (xy 111.76 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7be9a385-6d87-4e59-9cf9-3c3ba4847d77") + ) + (wire + (pts + (xy 248.92 154.94) (xy 254 154.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7c1f1e2a-bd9a-457f-a8fd-646a00fd729e") + ) + (wire + (pts + (xy 87.63 168.91) (xy 88.9 168.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7ce37ca5-61f0-4d84-b51f-2646990625be") + ) + (wire + (pts + (xy 52.07 53.34) (xy 52.07 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7d6abde1-8e94-47fa-8b76-29e1f46621c1") + ) + (wire + (pts + (xy 107.95 233.68) (xy 107.95 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7d7d3c6b-5d0f-4348-80fe-4acbefef3267") + ) + (wire + (pts + (xy 205.74 212.09) (xy 205.74 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7e1df757-2b2c-4471-8e23-59d0c51be741") + ) + (wire + (pts + (xy 142.24 48.26) (xy 161.29 48.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7e493264-5f51-4497-9d27-78a0a82dc2db") + ) + (wire + (pts + (xy 66.04 58.42) (xy 66.04 57.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7e694a8c-ec2a-471e-912e-be0e7652f725") + ) + (wire + (pts + (xy 144.78 127) (xy 148.59 127) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7e6cf409-629f-4ca6-9dbe-00111f3b6a46") + ) + (wire + (pts + (xy 185.42 209.55) (xy 185.42 212.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7e7b573d-8d8f-40b6-bb0f-19937d1d17af") + ) + (wire + (pts + (xy 196.85 38.1) (xy 196.85 44.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7e8ec979-901c-4865-bbe6-06156f4541ca") + ) + (wire + (pts + (xy 30.48 129.54) (xy 88.9 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7f5375a6-f754-4b79-bd26-270a3853db80") + ) + (wire + (pts + (xy 40.64 236.22) (xy 45.72 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7f9a3a66-fcb9-40e2-8b87-126d66639414") + ) + (wire + (pts + (xy 69.85 104.14) (xy 88.9 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7fb291aa-ee28-401e-b8ea-51c58a157c39") + ) + (polyline + (pts + (xy 266.7 185.42) (xy 278.13 185.42) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "7fea7893-ca08-41eb-be59-6730c88f4fe6") + ) + (wire + (pts + (xy 66.04 52.07) (xy 69.85 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "80de50ed-e9a8-4946-92be-4e6396998341") + ) + (wire + (pts + (xy 199.39 109.22) (xy 200.66 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8163d202-590d-447c-bc38-4d70b89b99ea") + ) + (wire + (pts + (xy 151.13 163.83) (xy 144.78 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "82ea01ab-3492-4cc0-b438-0d3ff91376d2") + ) + (wire + (pts + (xy 153.67 193.04) (xy 156.21 193.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "835721e1-7cc5-4111-8153-c4d8f1c19a5d") + ) + (wire + (pts + (xy 87.63 175.26) (xy 87.63 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "83706097-2efe-401b-be3f-d41873a74297") + ) + (wire + (pts + (xy 77.47 157.48) (xy 77.47 153.67) + ) + (stroke + (width 0) + (type default) + ) + (uuid "84c12225-05e0-4c9d-b036-2f528646f797") + ) + (wire + (pts + (xy 147.32 158.75) (xy 147.32 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "857a9baa-b000-47f7-8052-863745a27996") + ) + (polyline + (pts + (xy 266.7 149.86) (xy 270.51 149.86) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "85a65eb3-c664-4281-a880-c09a32c03cc7") + ) + (wire + (pts + (xy 200.66 172.72) (xy 200.66 173.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "85cef97e-0ad8-4f59-b1f6-db5809f7b0be") + ) + (wire + (pts + (xy 181.61 189.23) (xy 181.61 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8664c82f-057e-4e43-879f-79eeea1ba9b3") + ) + (wire + (pts + (xy 86.36 172.72) (xy 86.36 166.37) + ) + (stroke + (width 0) + (type default) + ) + (uuid "86c0d231-5a21-49df-943c-6682418cc1f2") + ) + (wire + (pts + (xy 82.55 57.15) (xy 77.47 57.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8756834d-9bfe-46e7-a61e-18ec1cd04307") + ) + (wire + (pts + (xy 107.95 236.22) (xy 107.95 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "87a191db-9b28-4ffd-a4f7-ef076e8603b3") + ) + (wire + (pts + (xy 179.07 219.71) (xy 182.88 219.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "87d164fe-0515-4dba-8607-600875251a07") + ) + (wire + (pts + (xy 250.19 187.96) (xy 260.35 187.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8862beee-97b3-4a41-a17c-350b38cb45dc") + ) + (wire + (pts + (xy 60.96 194.31) (xy 60.96 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "888d9583-60f1-4408-b377-50f484a8a772") + ) + (wire + (pts + (xy 88.9 96.52) (xy 52.07 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "888fa776-cd45-486e-9148-a0ad9f49b868") + ) + (wire + (pts + (xy 180.34 135.89) (xy 186.69 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "88e4640e-6931-43d1-887c-5ceac27776b7") + ) + (wire + (pts + (xy 199.39 59.69) (xy 203.2 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8bea8884-2cea-4378-aab0-964a4f4c4936") + ) + (wire + (pts + (xy 147.32 40.64) (xy 171.45 40.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8c1b2779-34b6-4f60-bbc5-f03dd70d91f0") + ) + (wire + (pts + (xy 234.95 125.73) (xy 238.76 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8c57e276-66bb-4485-b345-34e868824cc9") + ) + (wire + (pts + (xy 60.96 161.29) (xy 60.96 173.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8cb96930-55c3-46d4-90bf-e25b1ac4f441") + ) + (wire + (pts + (xy 185.42 186.69) (xy 195.58 186.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8cc0a648-02ca-46e0-a893-06a261a153b0") + ) + (wire + (pts + (xy 259.08 237.49) (xy 259.08 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8cf1f8f2-dfaa-4f0b-a70b-2b6bcbdee1e5") + ) + (wire + (pts + (xy 165.1 48.26) (xy 165.1 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8e2984f3-229e-49af-b4c2-8c9510e24cc0") + ) + (wire + (pts + (xy 186.69 151.13) (xy 163.83 151.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8f2f2e65-f62f-4ec8-847d-a9a27a37358a") + ) + (wire + (pts + (xy 144.78 119.38) (xy 148.59 119.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8f78d680-8469-418f-92e9-5b55ff79f6a6") + ) + (wire + (pts + (xy 31.75 194.31) (xy 31.75 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9001738e-1089-411d-a833-3d8de682b579") + ) + (wire + (pts + (xy 199.39 151.13) (xy 201.93 151.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9157be7e-a295-4431-bd8d-bbc9944461f1") + ) + (wire + (pts + (xy 151.13 156.21) (xy 151.13 161.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "92ab5b39-bfc4-4b9b-8214-6a0c03942136") + ) + (wire + (pts + (xy 154.94 152.4) (xy 157.48 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "93dbb355-c296-4ffd-bed4-a7fba49f432e") + ) + (wire + (pts + (xy 185.42 172.72) (xy 186.69 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9515dfa9-2ffe-4aa1-b38c-712b768fa0b9") + ) + (wire + (pts + (xy 69.85 114.3) (xy 69.85 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "95d89b95-900d-49b6-87a3-34ee295eb4a0") + ) + (wire + (pts + (xy 58.42 166.37) (xy 58.42 168.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "974c41af-41f3-453a-a838-6e0349b6a087") + ) + (wire + (pts + (xy 165.1 223.52) (xy 165.1 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "97666b57-a187-4e49-a779-4368e0ec14bf") + ) + (wire + (pts + (xy 199.39 38.1) (xy 196.85 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "99c2ac5f-dbec-4c06-86b1-53fbbf1eece8") + ) + (wire + (pts + (xy 200.66 226.06) (xy 200.66 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9a81d6ea-704e-45e2-8fb2-e36857315adf") + ) + (polyline + (pts + (xy 264.16 152.4) (xy 255.27 152.4) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "9a888ccc-3971-49cc-98ad-190be444fb88") + ) + (wire + (pts + (xy 236.22 231.14) (xy 236.22 232.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9aecc728-4149-4481-a603-d81ee0192381") + ) + (wire + (pts + (xy 179.07 191.77) (xy 195.58 191.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9bff4de9-8950-4cfb-ac23-a51a260f5f19") + ) + (wire + (pts + (xy 173.99 114.3) (xy 186.69 114.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9e5a39df-cd4c-4be3-ae4f-1711f89b0134") + ) + (polyline + (pts + (xy 262.89 157.48) (xy 264.16 157.48) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "9f52354a-f8c7-4264-a094-56e152be463d") + ) + (wire + (pts + (xy 185.42 177.8) (xy 198.12 177.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9f5e22b0-38e1-461c-81a3-2a7cbf2f2583") + ) + (wire + (pts + (xy 41.91 161.29) (xy 38.1 161.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9ffb500a-8ad6-4cdd-9f31-4966bfcd7d29") + ) + (wire + (pts + (xy 144.78 114.3) (xy 148.59 114.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a00eeb5c-b7bd-428e-8ace-6a7eab8019db") + ) + (wire + (pts + (xy 74.93 241.3) (xy 85.09 241.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a0c77741-4d89-4451-9aaa-96baa9c94baa") + ) + (wire + (pts + (xy 41.91 228.6) (xy 50.8 228.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a0d93971-8160-496e-8401-80fc87a3f44a") + ) + (wire + (pts + (xy 45.72 220.98) (xy 50.8 220.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a2d2722e-c8ed-438d-826b-cba1fe3da80e") + ) + (wire + (pts + (xy 77.47 172.72) (xy 86.36 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a2f1c920-e02a-4da0-abf7-a28304dee2e8") + ) + (wire + (pts + (xy 162.56 101.6) (xy 162.56 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a3310236-251e-465f-a05b-b0bdc78dd2ea") + ) + (wire + (pts + (xy 144.78 158.75) (xy 147.32 158.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a46f00ab-ddba-4d20-b260-4b98f48e144f") + ) + (wire + (pts + (xy 322.58 49.53) (xy 322.58 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a4c69fff-1b9c-486f-a14a-c1b79f13cc24") + ) + (polyline + (pts + (xy 284.48 90.17) (xy 284.48 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a5590d02-6c2d-4622-80b3-919b9b5b779c") + ) + (wire + (pts + (xy 128.27 46.99) (xy 128.27 48.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a6bcbdb8-0b38-41e0-a8be-99402c7fcc82") + ) + (wire + (pts + (xy 40.64 104.14) (xy 57.15 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a6dd8b1e-c8d8-4e79-a996-d2c5efa190e6") + ) + (wire + (pts + (xy 201.93 133.35) (xy 199.39 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a7c7c71e-7809-4756-a87b-2cb182675b43") + ) + (wire + (pts + (xy 180.34 133.35) (xy 186.69 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a8065147-90e2-494c-906f-8e24c33768f2") + ) + (wire + (pts + (xy 185.42 173.99) (xy 185.42 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a8b7d69a-d201-4b4b-bcf1-a4db958046ec") + ) + (wire + (pts + (xy 205.74 209.55) (xy 208.28 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a98ca0c6-1a7c-410b-a19f-26b7482d0283") + ) + (wire + (pts + (xy 71.12 219.71) (xy 74.93 219.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a9d2c626-976e-4757-936e-fd156b1297de") + ) + (wire + (pts + (xy 264.16 59.69) (xy 269.24 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a9ea7988-4251-418a-8742-d45f4fa56fb3") + ) + (wire + (pts + (xy 144.78 151.13) (xy 144.78 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ab6d03c6-844a-45bd-bfe7-f618085a2d76") + ) + (wire + (pts + (xy 71.12 218.44) (xy 71.12 219.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "abc33da6-462b-4aa6-88a3-8e751adc485a") + ) + (wire + (pts + (xy 157.48 168.91) (xy 157.48 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ac79e835-1662-451d-82bb-403f678e2905") + ) + (wire + (pts + (xy 107.95 53.34) (xy 102.87 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ad26c99c-f6cd-49c9-8d26-0e550bae57a5") + ) + (wire + (pts + (xy 107.95 236.22) (xy 110.49 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "adadf770-146f-41c8-b585-810e2e8ddc9f") + ) + (wire + (pts + (xy 187.96 54.61) (xy 187.96 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ae410aa2-b7cc-4309-8636-b366da7e3139") + ) + (wire + (pts + (xy 147.32 152.4) (xy 154.94 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ae83c7f9-a8b8-40a0-ae4f-18f8d4436093") + ) + (wire + (pts + (xy 236.22 223.52) (xy 243.84 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aebe8145-8a71-4b1f-aa5c-a61556097e43") + ) + (wire + (pts + (xy 128.27 38.1) (xy 137.16 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "afb1d891-420a-461d-a371-420cd63ccf54") + ) + (wire + (pts + (xy 38.1 151.13) (xy 38.1 144.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b010b8a2-40c1-465d-8bf7-826f8f52f88b") + ) + (wire + (pts + (xy 54.61 147.32) (xy 88.9 147.32) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b0715963-8a6e-466a-9f03-9f44cb2af62d") + ) + (wire + (pts + (xy 157.48 170.18) (xy 147.32 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b0b06bde-6a3a-48cf-9c33-da49ac74e87e") + ) + (wire + (pts + (xy 152.4 209.55) (xy 152.4 212.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b0b3dac8-0381-4ee8-a4ea-f6a2b01cda89") + ) + (wire + (pts + (xy 105.41 255.27) (xy 105.41 260.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b12a4742-a3c0-4c55-a483-75aa983add84") + ) + (wire + (pts + (xy 181.61 170.18) (xy 186.69 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b240afad-d25a-40f8-bc41-5906035d8140") + ) + (wire + (pts + (xy 31.75 198.12) (xy 41.91 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b2a5e714-7d8b-47de-aa21-e93b6cc8dff9") + ) + (wire + (pts + (xy 154.94 38.1) (xy 160.02 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b30a6ae9-32d9-4705-afd2-a8064c8e5712") + ) + (wire + (pts + (xy 105.41 236.22) (xy 107.95 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b3420363-2487-4b21-8b03-3e1d7f7368e3") + ) + (wire + (pts + (xy 248.92 162.56) (xy 256.54 162.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b3b217ae-eee5-48de-8a7a-e1616074efe6") + ) + (wire + (pts + (xy 167.64 248.92) (xy 165.1 248.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b3c1de85-96c3-45a9-bceb-a0421532363f") + ) + (wire + (pts + (xy 181.61 172.72) (xy 185.42 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b4a39198-7554-400a-aa7a-4ac4b4bbb1f7") + ) + (wire + (pts + (xy 165.1 104.14) (xy 163.83 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b513c443-7a4a-4379-b88f-980eb8d72b95") + ) + (polyline + (pts + (xy 278.13 144.78) (xy 278.13 185.42) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "b75cc67f-fc28-48d8-960e-48fbb1c6a830") + ) + (wire + (pts + (xy 80.01 157.48) (xy 82.55 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b760140a-40fb-436d-8e92-036fb269fb28") + ) + (wire + (pts + (xy 137.16 38.1) (xy 137.16 40.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b7d15cb9-7606-4955-b1d0-8b93008e7a88") + ) + (wire + (pts + (xy 210.82 254) (xy 210.82 256.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b7f6d048-50da-476d-be11-f66bf7f86836") + ) + (wire + (pts + (xy 77.47 52.07) (xy 82.55 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b81e8c50-881e-4147-a4f5-c0a3e81435e2") + ) + (wire + (pts + (xy 200.66 109.22) (xy 203.2 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b85327a5-cb97-4884-b8ea-e360ca666095") + ) + (wire + (pts + (xy 228.6 67.31) (xy 240.03 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b86e9b24-5028-4164-9a0e-23aeafe360f7") + ) + (wire + (pts + (xy 163.83 151.13) (xy 163.83 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b87255e6-e1f8-4054-b2cd-5642022adc29") + ) + (wire + (pts + (xy 255.27 234.95) (xy 264.16 234.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b97c032e-cb9c-45f8-a2c9-7a73138b1443") + ) + (wire + (pts + (xy 33.02 99.06) (xy 88.9 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b9abb689-d043-4227-ac1b-e1a5c1956bda") + ) + (wire + (pts + (xy 43.18 109.22) (xy 40.64 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b9ffa115-4ef8-495a-b06c-3b7481777582") + ) + (wire + (pts + (xy 181.61 167.64) (xy 186.69 167.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ba1e6780-8186-48a0-858f-8e6a53d98545") + ) + (wire + (pts + (xy 147.32 166.37) (xy 144.78 166.37) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bb66854f-690a-4d7a-841c-ed645f8e312b") + ) + (wire + (pts + (xy 43.18 111.76) (xy 39.37 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bbada028-b85e-471b-9925-c86e820934b0") + ) + (wire + (pts + (xy 63.5 220.98) (xy 63.5 233.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "be10f429-8bc5-4644-becd-d72598c0fbe7") + ) + (wire + (pts + (xy 176.53 116.84) (xy 186.69 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bece3c0b-875f-4431-8aca-a4f022f80adb") + ) + (wire + (pts + (xy 144.78 149.86) (xy 148.59 149.86) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c006bc85-93e3-49a5-aa12-43c5539a93a2") + ) + (wire + (pts + (xy 46.99 59.69) (xy 115.57 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c0111be7-0663-4bd8-bfba-e53a2ef87826") + ) + (wire + (pts + (xy 212.09 212.09) (xy 212.09 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c023f1ec-667b-4ec7-a7ef-ef946aa0b0f9") + ) + (polyline + (pts + (xy 262.89 160.02) (xy 266.7 160.02) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "c03ebb0b-bec3-49c8-a5bc-2186afbd5627") + ) + (wire + (pts + (xy 153.67 85.09) (xy 158.75 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c0c42b47-0c2e-43fe-a9c1-1cce661dace6") + ) + (wire + (pts + (xy 107.95 238.76) (xy 105.41 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c11e15e2-f868-439c-9f4a-819b6ab791aa") + ) + (wire + (pts + (xy 161.29 52.07) (xy 161.29 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c1c767c9-630a-4b59-84f5-dc29be0e95ac") + ) + (wire + (pts + (xy 224.79 240.03) (xy 236.22 240.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c21d93f2-5e60-4f8c-bca3-505d0a0bce10") + ) + (wire + (pts + (xy 39.37 110.49) (xy 57.15 110.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c2481962-7067-4e1d-a61d-39b90d4a1b50") + ) + (wire + (pts + (xy 154.94 156.21) (xy 151.13 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c26c4fd0-3025-4e07-9b5c-5cc9dab351b1") + ) + (wire + (pts + (xy 40.64 243.84) (xy 45.72 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c2af10db-959c-4475-a0c6-f2bb08a7ae8c") + ) + (wire + (pts + (xy 158.75 212.09) (xy 158.75 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c2fdd888-5511-4ecb-9d53-676fc0fa35a3") + ) + (wire + (pts + (xy 175.26 182.88) (xy 175.26 181.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c319eccd-4ed6-4bf1-b91a-6ffdb9f1eb1c") + ) + (wire + (pts + (xy 198.12 177.8) (xy 200.66 177.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c4395837-ea32-409d-ba68-1eccd480f3b0") + ) + (wire + (pts + (xy 88.9 93.98) (xy 54.61 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c43b7733-f23d-4cee-a740-9224e08e1368") + ) + (wire + (pts + (xy 43.18 116.84) (xy 34.29 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c527c4a5-8fc5-402f-b721-7cd3b223f277") + ) + (wire + (pts + (xy 172.72 182.88) (xy 175.26 182.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c621ee91-8e5d-449f-a2af-c3816ff715c9") + ) + (wire + (pts + (xy 144.78 91.44) (xy 148.59 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c64a7bc2-2d39-4c87-b690-fb3230031e88") + ) + (wire + (pts + (xy 138.43 54.61) (xy 140.97 54.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c7209fe3-7090-4c5e-a8ad-d4049698a811") + ) + (wire + (pts + (xy 158.75 93.98) (xy 144.78 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c930fce5-c9ca-4965-bedf-87b8834986c1") + ) + (wire + (pts + (xy 82.55 38.1) (xy 82.55 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ca448719-f6bc-46e7-9dce-ef0821bfd316") + ) + (wire + (pts + (xy 255.27 223.52) (xy 251.46 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ca83c553-d1d5-43cd-ba1d-f5d312f3a887") + ) + (wire + (pts + (xy 144.78 101.6) (xy 148.59 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cb664e81-ae70-4cd0-b73c-e96a444c4d92") + ) + (wire + (pts + (xy 80.01 109.22) (xy 88.9 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cb7276d2-45f2-4a12-9114-7d7703613fa5") + ) + (wire + (pts + (xy 234.95 128.27) (xy 238.76 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cbb2967d-025a-400a-86ab-8f68f85080dc") + ) + (wire + (pts + (xy 264.16 38.1) (xy 269.24 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cd4741b1-1246-4186-84bf-b3d7eec70044") + ) + (wire + (pts + (xy 82.55 231.14) (xy 82.55 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cd9acfff-42d4-4572-9648-85805eb343de") + ) + (wire + (pts + (xy 200.66 170.18) (xy 199.39 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ce8f2d05-871a-44f1-9fba-772e3e1da305") + ) + (wire + (pts + (xy 165.1 248.92) (xy 165.1 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cef48c9b-cec3-4069-854e-8df74b3754d1") + ) + (wire + (pts + (xy 45.72 243.84) (xy 50.8 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cfa078d9-1d7d-4a51-ab42-d3e1b1eb03b1") + ) + (wire + (pts + (xy 171.45 40.64) (xy 171.45 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d094f008-6269-4c5f-ac54-cfc5babe2a6e") + ) + (wire + (pts + (xy 144.78 116.84) (xy 148.59 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d0ae21e1-7e47-4d46-af36-3884f2b8ac0a") + ) + (wire + (pts + (xy 153.67 190.5) (xy 156.21 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d10eba1c-929a-4705-9321-9e60301c649a") + ) + (wire + (pts + (xy 134.62 190.5) (xy 140.97 190.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d1292528-f9c8-4977-83bc-de54b26b4c23") + ) + (wire + (pts + (xy 170.18 38.1) (xy 171.45 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d1d1c518-1329-4962-8f19-04ccce2926fb") + ) + (wire + (pts + (xy 154.94 168.91) (xy 151.13 168.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d1f5c845-642b-4b92-a916-5dbba0c77faa") + ) + (wire + (pts + (xy 134.62 187.96) (xy 140.97 187.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d20d12e8-468d-4370-94b5-e72dd724d353") + ) + (wire + (pts + (xy 85.09 243.84) (xy 85.09 247.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d2bc2f9b-f653-4616-9199-0cf40983ed3b") + ) + (wire + (pts + (xy 255.27 59.69) (xy 264.16 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d5f1bd3b-5f57-46c3-8a9a-034ff6ac13ee") + ) + (wire + (pts + (xy 85.09 218.44) (xy 71.12 218.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d65f7b78-158c-45c9-8ca3-7e07b30348f1") + ) + (polyline + (pts + (xy 220.98 90.17) (xy 220.98 204.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d6b9dc5a-ca89-45b8-b1b1-f7f30a78428f") + ) + (wire + (pts + (xy 156.21 209.55) (xy 152.4 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d7a0bdda-6131-4549-92a3-456806b32074") + ) + (wire + (pts + (xy 50.8 236.22) (xy 85.09 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d7b7ef5b-d173-4766-8654-feaed3c189da") + ) + (wire + (pts + (xy 58.42 161.29) (xy 60.96 161.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d7e6f093-67a1-47b6-9dea-0e08b05c7aa9") + ) + (wire + (pts + (xy 214.63 96.52) (xy 144.78 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d7f6e0a1-d880-4018-b88c-d3ac9151aaea") + ) + (wire + (pts + (xy 58.42 161.29) (xy 58.42 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d8657b4d-d38f-4099-a3a8-6bdb4167f476") + ) + (wire + (pts + (xy 144.78 171.45) (xy 144.78 168.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d9528f96-db58-4719-81d1-d0377f9e62d2") + ) + (wire + (pts + (xy 193.04 38.1) (xy 194.31 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "da42bb1a-aa6c-40ca-b9b5-e94297744e16") + ) + (wire + (pts + (xy 105.41 231.14) (xy 115.57 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "da7a8042-ff3f-400e-a1ee-9ddcaefd7453") + ) + (wire + (pts + (xy 77.47 170.18) (xy 77.47 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "da923787-c55d-4bd5-a99e-749be4c49ccd") + ) + (wire + (pts + (xy 85.09 161.29) (xy 88.9 161.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "daad7cae-b397-4efc-bf24-63de76231c9e") + ) + (wire + (pts + (xy 88.9 168.91) (xy 88.9 171.45) + ) + (stroke + (width 0) + (type default) + ) + (uuid "db3375ff-8cd0-48ca-9ab6-058a4f5034af") + ) + (wire + (pts + (xy 115.57 228.6) (xy 105.41 228.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "db700962-831d-421f-8216-9145e761d7fa") + ) + (wire + (pts + (xy 168.91 52.07) (xy 168.91 54.61) + ) + (stroke + (width 0) + (type default) + ) + (uuid "db7d9c4c-60a2-41f5-bd70-0e77eade3a12") + ) + (wire + (pts + (xy 180.34 246.38) (xy 185.42 246.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dbb05916-df40-4e3c-af40-f0b2791547d2") + ) + (wire + (pts + (xy 195.58 209.55) (xy 195.58 226.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dbdd5eff-3152-461b-baae-dc008b11e949") + ) + (wire + (pts + (xy 200.66 128.27) (xy 199.39 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dc0dc459-c109-43fc-adf2-35672f7db528") + ) + (wire + (pts + (xy 177.8 238.76) (xy 180.34 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dd54225c-5a93-4ab2-952a-3d590d91a55f") + ) + (wire + (pts + (xy 161.29 48.26) (xy 161.29 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ddf299ec-49e2-4384-af0c-2617298f4172") + ) + (wire + (pts + (xy 356.87 62.23) (xy 359.41 62.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "de026ed2-780e-481b-bd93-d226a17e4d78") + ) + (wire + (pts + (xy 210.82 67.31) (xy 222.25 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "de222f6d-0fc0-4376-9d9d-d783a879d81c") + ) + (wire + (pts + (xy 234.95 123.19) (xy 238.76 123.19) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dfbbc5f8-8852-416a-b1bb-df79b4892cc8") + ) + (polyline + (pts + (xy 266.7 160.02) (xy 266.7 149.86) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "e0054c13-3ee2-4fbf-9c41-8a5fea8c8a22") + ) + (wire + (pts + (xy 168.91 170.18) (xy 173.99 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e0065482-2f30-4538-8d5c-f8d77e25fb5a") + ) + (wire + (pts + (xy 148.59 137.16) (xy 144.78 137.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e01799c8-7a57-4ca1-b688-6362aa863053") + ) + (wire + (pts + (xy 218.44 59.69) (xy 218.44 77.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e059b21b-93c9-4056-ba41-92d5644dda9f") + ) + (wire + (pts + (xy 214.63 138.43) (xy 214.63 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e0a81f7d-8e3c-45a6-857b-aa01390a37ae") + ) + (wire + (pts + (xy 185.42 238.76) (xy 180.34 238.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e0aabb94-20f2-4139-9c34-983635b23473") + ) + (wire + (pts + (xy 200.66 109.22) (xy 200.66 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e206dbfd-711b-4b97-9b45-f7addb33baea") + ) + (wire + (pts + (xy 72.39 227.33) (xy 74.93 227.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e26e188c-6355-46e8-8dd4-383ef741acd4") + ) + (wire + (pts + (xy 327.66 33.02) (xy 331.47 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e29977be-577c-4bf9-8de1-223ea61a431a") + ) + (wire + (pts + (xy 144.78 129.54) (xy 152.4 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e3708d7b-32a8-447e-867f-52c19c081aca") + ) + (wire + (pts + (xy 222.25 67.31) (xy 228.6 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e3a47d11-9c10-496e-a3b7-7dc118c8548e") + ) + (wire + (pts + (xy 210.82 45.72) (xy 222.25 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e3a81afe-567e-4786-a1d6-7b4abae2be81") + ) + (wire + (pts + (xy 165.1 223.52) (xy 200.66 223.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e3af10fd-979b-45f6-98eb-b99fff59bfaf") + ) + (wire + (pts + (xy 240.03 38.1) (xy 250.19 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e5924541-6a75-4152-bc72-6b5c73164481") + ) + (wire + (pts + (xy 158.75 209.55) (xy 156.21 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e60bfa00-2a69-4967-aabc-14e7a28932c6") + ) + (wire + (pts + (xy 68.58 227.33) (xy 72.39 227.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e65e0a6f-1083-4a0e-8ceb-f71bb9dab6bd") + ) + (wire + (pts + (xy 356.87 57.15) (xy 356.87 62.23) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e688566d-71b3-4b3e-9120-e2b42367bb32") + ) + (wire + (pts + (xy 88.9 91.44) (xy 88.9 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e6a098cf-060d-4069-a7c4-992d3853a843") + ) + (wire + (pts + (xy 199.39 172.72) (xy 200.66 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e6df9dd1-512b-4797-9ca2-512245950dbf") + ) + (wire + (pts + (xy 161.29 52.07) (xy 162.56 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e6eeba12-a2aa-4565-bc15-18c403fcec27") + ) + (wire + (pts + (xy 240.03 59.69) (xy 247.65 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e7f93f18-7a0c-47a6-8391-7dc5e7806892") + ) + (wire + (pts + (xy 187.96 38.1) (xy 193.04 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e82b0e8a-15c7-4c31-a744-6945b295a208") + ) + (wire + (pts + (xy 115.57 67.31) (xy 124.46 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e9198b00-5e10-4ed5-b04c-67867d01bf88") + ) + (wire + (pts + (xy 39.37 111.76) (xy 39.37 110.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e93a6c5a-f188-4180-81d0-6df756066924") + ) + (wire + (pts + (xy 198.12 259.08) (xy 198.12 261.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e98c2ab0-95e1-4a61-be5c-7b30dcc10efa") + ) + (wire + (pts + (xy 186.69 138.43) (xy 166.37 138.43) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ea11cd07-11a8-4693-a7a2-208cbee4e4c4") + ) + (wire + (pts + (xy 74.93 247.65) (xy 74.93 241.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eb915737-c0b8-42d7-b77c-c6a830c1be58") + ) + (wire + (pts + (xy 218.44 59.69) (xy 222.25 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ebaf72e5-9309-4f4f-9263-54005cb1de9a") + ) + (wire + (pts + (xy 254 160.02) (xy 256.54 160.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ebc0cbd1-2145-46b1-a5d1-9ce33dff5512") + ) + (wire + (pts + (xy 161.29 67.31) (xy 193.04 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eca89e5b-8e66-4d09-8de3-fd966549c187") + ) + (wire + (pts + (xy 210.82 67.31) (xy 196.85 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ece426e4-f10e-4207-a72c-07cd1c007a32") + ) + (wire + (pts + (xy 182.88 219.71) (xy 185.42 219.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ece722f8-60a7-45a9-aeef-8d3cd3557ecd") + ) + (wire + (pts + (xy 57.15 142.24) (xy 88.9 142.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ed0780da-3075-43b3-9fc9-1dfb374393ec") + ) + (wire + (pts + (xy 35.56 153.67) (xy 35.56 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ed4150c3-7207-4b10-98bf-caf5cf0963b6") + ) + (wire + (pts + (xy 248.92 157.48) (xy 256.54 157.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ed62d215-dba6-4952-ada0-43d7d0ad7b72") + ) + (polyline + (pts + (xy 255.27 144.78) (xy 255.27 152.4) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "edf07619-7c66-4738-b037-62402bf3b03f") + ) + (wire + (pts + (xy 144.78 144.78) (xy 148.59 144.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ee1aa644-df60-4504-b225-1a327909bc7f") + ) + (wire + (pts + (xy 158.75 93.98) (xy 158.75 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ee630879-03e1-4936-a70c-25dca04a7d1a") + ) + (wire + (pts + (xy 176.53 236.22) (xy 185.42 236.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ee8254a5-e9dc-417b-b627-55090056e03b") + ) + (wire + (pts + (xy 43.18 114.3) (xy 33.02 114.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eec094e2-d102-4da0-bfdb-7c9bdc8546c2") + ) + (polyline + (pts + (xy 265.43 151.13) (xy 262.89 151.13) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "f0f97499-9068-4b40-827c-16c15819579b") + ) + (wire + (pts + (xy 199.39 129.54) (xy 199.39 130.81) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f162bfbd-4c4d-4aba-adbb-e98eb7be3bde") + ) + (wire + (pts + (xy 82.55 231.14) (xy 85.09 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f1841bf4-a60d-434d-8ade-ed01238bd843") + ) + (wire + (pts + (xy 185.42 128.27) (xy 185.42 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f1c70ef0-863a-495d-9310-0bfa349b9629") + ) + (wire + (pts + (xy 54.61 53.34) (xy 54.61 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f1c9f039-a115-4ab1-8c72-4ec8ed72eff4") + ) + (wire + (pts + (xy 54.61 156.21) (xy 64.77 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f2e63331-1280-44e3-bb7e-03c0d3e0074e") + ) + (wire + (pts + (xy 111.76 53.34) (xy 107.95 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f314016b-568f-4920-81d1-a0381bc52cb3") + ) + (wire + (pts + (xy 33.02 156.21) (xy 33.02 132.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f480829f-dd63-4340-8288-f8d1e5dc11f5") + ) + (wire + (pts + (xy 115.57 232.41) (xy 115.57 231.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f4a05251-9f4d-46cd-ba63-459f7512eb14") + ) + (polyline + (pts + (xy 270.51 144.78) (xy 276.86 144.78) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "f522c829-5ede-4f06-a26b-e72662bd5bfd") + ) + (wire + (pts + (xy 82.55 53.34) (xy 82.55 57.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f7329c1b-b254-42ad-a487-ffaa5d22374e") + ) + (wire + (pts + (xy 180.34 243.84) (xy 185.42 243.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f787b8a1-fa38-470f-a280-43ba7901b1cf") + ) + (wire + (pts + (xy 57.15 153.67) (xy 57.15 142.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f7fd1a61-d83b-4200-b91a-b5d6a376a6a7") + ) + (wire + (pts + (xy 29.21 38.1) (xy 34.29 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f829fea3-a80e-42f5-a15e-15bfd1c6b362") + ) + (wire + (pts + (xy 236.22 240.03) (xy 243.84 240.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f87440b1-7f34-4b16-a0e5-74ffe44a41ab") + ) + (wire + (pts + (xy 80.01 111.76) (xy 88.9 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f895d59a-ce83-4d9d-aab5-1498e3ffb7c1") + ) + (wire + (pts + (xy 231.14 232.41) (xy 236.22 232.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f8aef85f-4aae-4afa-84db-ebef648d8536") + ) + (wire + (pts + (xy 199.39 261.62) (xy 200.66 261.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f9a7ee76-6415-4abf-ac9d-eb15e4e41d16") + ) + (polyline + (pts + (xy 266.7 182.88) (xy 276.86 182.88) + ) + (stroke + (width 0) + (type dash) + ) + (uuid "fa8beb94-2a65-4465-a00a-e8d2ac5b64f2") + ) + (wire + (pts + (xy 260.35 180.34) (xy 260.35 182.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fb893f3f-a160-40ae-afcf-e60d434b11e6") + ) + (wire + (pts + (xy 102.87 45.72) (xy 102.87 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fba8f82c-753f-487c-ade0-22ca61c1e1ab") + ) + (wire + (pts + (xy 179.07 212.09) (xy 179.07 209.55) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fbf28f72-2889-4542-94b1-af9198e08c1f") + ) + (wire + (pts + (xy 45.72 198.12) (xy 60.96 198.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fc2c9e24-27c7-4f75-997e-10fdeb3e7510") + ) + (wire + (pts + (xy 82.55 52.07) (xy 82.55 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fc69494b-8d41-4ce2-8f1a-5efc7a940e25") + ) + (wire + (pts + (xy 218.44 38.1) (xy 222.25 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fc78ba7d-d126-4756-ad49-6c6eaaa98a37") + ) + (wire + (pts + (xy 175.26 248.92) (xy 185.42 248.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fca85c6f-5724-4ae3-bb56-c8952b9f4476") + ) + (wire + (pts + (xy 359.41 57.15) (xy 356.87 57.15) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fd120123-b8cc-4030-af80-ac85b36e4fa8") + ) + (wire + (pts + (xy 57.15 104.14) (xy 57.15 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fe016a68-e3f9-4939-8810-92fcda37d020") + ) + (wire + (pts + (xy 81.28 119.38) (xy 88.9 119.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fe26b54f-08e0-48af-9f5c-db0e7740283c") + ) + (wire + (pts + (xy 124.46 48.26) (xy 128.27 48.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fef8e1b3-00a9-429c-b17a-176ea5a91d66") + ) + (wire + (pts + (xy 203.2 59.69) (xy 203.2 77.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ff12f196-334d-4890-b63a-d768778b4e4a") + ) + (wire + (pts + (xy 144.78 111.76) (xy 162.56 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ff2e2c7d-5640-4287-bdbf-b3f0f4188b5f") + ) + (wire + (pts + (xy 54.61 158.75) (xy 68.58 158.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ff33b7e6-b567-4211-a6d5-f06be0bf4b37") + ) + (wire + (pts + (xy 66.04 52.07) (xy 66.04 48.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ff5eb73e-ca46-42e0-bead-96a9d100f069") + ) + (circle + (center 277.495 154.94) + (radius 2.54) + (stroke + (width 0) + (type solid) + ) + (fill + (type none) + ) + (uuid 0e99c89a-41cf-4276-bf71-bed42eb1d92a) + ) + (circle + (center 265.43 154.94) + (radius 2.54) + (stroke + (width 0) + (type solid) + ) + (fill + (type none) + ) + (uuid acdd8009-2e99-4bed-8820-ae10d1006f4d) + ) + (text_box "Various other" + (exclude_from_sim no) + (at 284.48 12.7 0) + (size 109.22 77.47) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + ) + (justify right top) + ) + (uuid "37fc2224-0b43-4387-853c-8b40b4790778") + ) + (text_box "Voltage selection jumper" + (exclude_from_sim no) + (at 191.77 181.61 0) + (size 26.67 12.7) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + ) + (justify right top) + ) + (uuid "7fd04a4b-7820-4c27-9292-a1590baba279") + ) + (text_box "Heatsinks" + (exclude_from_sim no) + (at 351.79 17.78 0) + (size 33.02 29.21) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + ) + (uuid "9b83217e-c07b-42e9-b279-a7748c04d712") + ) + (text_box "Power section" + (exclude_from_sim no) + (at 170.18 12.7 0) + (size 114.3 77.47) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + ) + (justify right top) + ) + (uuid "ba1ce733-c4b1-41db-93d9-4d90c3c0f04d") + ) + (text_box "Digitize RF input" + (exclude_from_sim no) + (at 26.67 204.47 0) + (size 113.03 64.77) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + ) + (justify right top) + ) + (uuid "baa97cfd-fa8b-48b7-86ff-685367f0cb40") + ) + (text_box "Audio Output" + (exclude_from_sim no) + (at 139.7 204.47 0) + (size 144.78 64.77) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + ) + (justify right top) + ) + (uuid "c26e218d-d61a-4cb7-98fc-a6d1e5ec69c3") + ) + (text_box "Shutdown routine activation" + (exclude_from_sim no) + (at 26.67 21.59 0) + (size 121.92 50.8) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + ) + (justify right top) + ) + (uuid "c58a1389-f54e-47e6-a54d-734ae498e5b5") + ) + (text_box "Voltage\nreversal\nprotection" + (exclude_from_sim no) + (at 158.75 21.59 0) + (size 11.43 50.8) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + ) + (justify right top) + ) + (uuid "e0c9db2f-0877-4a37-8517-dcef6fea5afc") + ) + (text_box "Board mounting holes" + (exclude_from_sim no) + (at 351.79 50.8 0) + (size 33.02 17.78) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + ) + (uuid "f8dff638-d9c8-4d77-a669-507378d79194") + ) + (text "Mounted in 8 pin socket" + (exclude_from_sim no) + (at 38.1 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "1b9b1811-9c41-464a-9c2d-74ad8df0c97e") + ) + (text "MIC INPUT\nRing - PTT\nTop - MONO \n Audio" + (exclude_from_sim no) + (at 224.79 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "227ee8ed-4757-4bcc-b25a-8c8b2732d091") + ) + (text "<-OR->" + (exclude_from_sim no) + (at 164.338 22.098 0) + (effects + (font + (size 3 3) + (thickness 0.8) + (bold yes) + ) + (justify right bottom) + ) + (uuid "2460bf56-fc96-43c1-923e-8901266825ca") + ) + (text "RF IN\nRING - Q - VIN_L\nTIP - U - VIN_R" + (exclude_from_sim no) + (at 120.65 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "2860c20f-86f2-4d9c-8358-790e3eefbc1d") + ) + (text "I/Q OUTPUT\nRing - Q\nTip - I" + (exclude_from_sim no) + (at 223.52 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "5d83fdf7-da10-44c7-b5ac-8e8e50054761") + ) + (text "AUDIO OUT\nRING - RIGHT\nTIP - LEFT" + (exclude_from_sim no) + (at 264.16 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "657a6e99-dd43-4418-bf65-d744142d81ac") + ) + (text "L_out" + (exclude_from_sim no) + (at 260.35 137.16 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "6ca4b6f2-6565-49d7-8931-df92eca147c5") + ) + (text "Microcontroller and connectors" + (exclude_from_sim no) + (at 91.44 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "6e39e595-f0bd-41b9-a8ee-7c7e72fb2549") + ) + (text "\"Empty\" components to add PCB \nfootprints for bottom-side\nmounting option" + (exclude_from_sim no) + (at 219.71 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "87e2f759-d66f-4e9c-b35a-5dc1ba485888") + ) + (text "Off-board wires \nconnect J22 \nand J13 to \nTeensy Audio \nAdaptor" + (exclude_from_sim no) + (at 267.335 163.83 0) + (effects + (font + (size 0.75 0.75) + ) + (justify left bottom) + ) + (uuid "9507db4a-04d6-4c3f-9cb5-d6a27ad9653b") + ) + (text "Choose between \"Shutdown routine activation\"\nand \"Voltage reversal prevention\" sections\n\nPopulate only one!" + (exclude_from_sim no) + (at 123.19 20.32 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + ) + (justify left bottom) + ) + (uuid "9ea0e034-f13b-4a88-9a11-cd9933b24065") + ) + (text "RFCONTROL SIGNALS:\nRxTx: H=Tx, L=Rx\nXmit Mode: H=SSB, L=CW\nCW: H=ON, L=OFF" + (exclude_from_sim no) + (at 184.15 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "c9c3886f-f1bc-4a20-8675-1dcb222b98f8") + ) + (text "Exciter output and microphone input" + (exclude_from_sim no) + (at 247.65 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "d2bfcfe5-f45f-4f16-9669-07d07bd0fa6d") + ) + (text "R_out" + (exclude_from_sim no) + (at 252.73 137.16 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "d6f26caa-ba05-420b-8171-49755fd2a5df") + ) + (text "If using 3V3, replace \nR4 and R5 with 0R?" + (exclude_from_sim no) + (at 200.66 172.974 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.254) + (bold yes) + (color 255 0 0 1) + ) + (justify left) + ) + (uuid "eedad4b0-3d00-458f-8bd9-b705696edfa4") + ) + (label "Key1 in" + (at 134.62 190.5 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "0862031f-e2b4-4d45-87f5-90f88e2a7feb") + ) + (label "A21" + (at 156.21 190.5 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "0aa83aef-8fd9-4ff4-835b-76133498da29") + ) + (label "REF" + (at 73.66 137.16 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "0c027a64-5db0-4d63-a8c5-46399e06c8ec") + ) + (label "T+" + (at 148.59 161.29 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "119493fc-eb52-47db-9063-3ad35bd5b02f") + ) + (label "BAND2 (20m)" + (at 73.66 139.7 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "1ed92b86-677d-4095-8c0c-771877f1ce77") + ) + (label "R-" + (at 160.02 154.94 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "21a86ded-7286-4ee6-bfdc-559ac983f914") + ) + (label "BAND0 (80m)" + (at 73.66 144.78 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "24eec5e4-d696-4cae-a1b2-bd209c0ba68f") + ) + (label "PTT in" + (at 252.73 182.88 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "25390873-6efd-490a-812c-6ab8dc6d0461") + ) + (label "MISO" + (at 168.91 170.18 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "2ca2bf4d-8fa9-418f-85af-797dcf295feb") + ) + (label "RXTX" + (at 148.59 101.6 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "2e373220-9091-4fdb-9583-ee333d4dc812") + ) + (label "ADC_IN" + (at 80.01 109.22 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "30c01771-f5f0-40e7-b167-1bc134044618") + ) + (label "Xmit Mode" + (at 148.59 147.32 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "31f63846-f4f5-4d64-8fc6-63af6c4fc8e3") + ) + (label "SDA1" + (at 148.59 114.3 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "37329bf8-37f5-4ee4-b726-f32757c582fb") + ) + (label "Cal" + (at 148.59 137.16 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "3a8d950f-60ef-448e-9cc7-0a6d603b2090") + ) + (label "Key2 in" + (at 134.62 187.96 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "3afc3619-bc4f-4b2c-8659-df0fa22c02ab") + ) + (label "Rx" + (at 234.95 123.19 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "3d9c2242-52a0-40bf-ac76-9c5600de533b") + ) + (label "BCK" + (at 148.59 104.14 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "3ea3ea7a-4dfd-48b7-a5a9-33c4cbf9a599") + ) + (label "PTT in" + (at 177.8 151.13 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "42ec2fb6-3d27-4302-9474-f95802220e23") + ) + (label "PTT in" + (at 134.62 193.04 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "432ccf43-2a94-4af1-af05-ddeb170c9cb4") + ) + (label "Key2 in" + (at 148.59 144.78 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "441c284c-f112-4c34-b15c-ddf872efe09c") + ) + (label "RXTX" + (at 176.53 119.38 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "45ef34ce-4415-451b-8665-60d15c1066ce") + ) + (label "ADC_IN" + (at 113.03 241.3 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "48cba997-8a89-430a-a20d-d34fbbf00ca4") + ) + (label "TEENSY SHUTDOWN COMPLETE" + (at 53.34 96.52 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "4a68ad3f-afc9-4b54-835c-e63d9d5bf258") + ) + (label "CW on{slash}off" + (at 148.59 149.86 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "4a87785b-f588-48bb-9b1a-9024d6b43d58") + ) + (label "C{slash}S" + (at 200.66 170.18 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "4c516a1e-e951-4b89-bbd2-597164d907ac") + ) + (label "SCL2" + (at 73.66 129.54 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "4d26fe1f-6b53-4e0e-ba22-a60242f04184") + ) + (label "SCL" + (at 234.95 135.89 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "553389d1-a550-43de-9ab2-157d37148910") + ) + (label "LRCK" + (at 148.59 106.68 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "5858540e-6e23-4459-92fc-7de1a96cab07") + ) + (label "Matrix" + (at 180.34 138.43 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "60601c1a-f541-436a-b7c4-e0c8604f7f16") + ) + (label "MOSI" + (at 214.63 167.64 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "60ee79be-33d0-419d-af98-fedbce86c3d4") + ) + (label "R+" + (at 160.02 171.45 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "64e3d42e-8c3c-4559-9960-be90b27d10bf") + ) + (label "A22" + (at 156.21 193.04 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "6ca863c5-d12a-4ac1-95df-c34ff872ca22") + ) + (label "INT2" + (at 201.93 135.89 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "6d2f1f9f-9e04-48db-b741-7430ed4fd06f") + ) + (label "SCLK" + (at 148.59 124.46 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "6dbf804a-4aa7-45d0-93f5-abf6ccd3e86e") + ) + (label "BCK" + (at 234.95 128.27 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "7008aad9-2ec1-463f-a5d6-450adf263cf6") + ) + (label "Cal" + (at 201.93 119.38 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "70917d3b-3d35-4c54-b2b3-8ef248ec77ff") + ) + (label "SCL" + (at 148.59 109.22 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "7103c83d-cc17-415c-9c2c-3f649840f01c") + ) + (label "Key2 in" + (at 201.93 151.13 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "733c3bbf-a738-4723-9749-4a6005eaa19e") + ) + (label "LRCK" + (at 85.09 260.35 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "74fd3ff5-ca80-4a6c-978f-49a0faf522bd") + ) + (label "C{slash}S" + (at 81.28 119.38 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "78b5be81-e67a-435c-a1e0-0e2ee7c5bd1c") + ) + (label "CW on{slash}off" + (at 176.53 116.84 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "7ce159a8-f027-4c63-ac3e-a6b1bd15c8bf") + ) + (label "SDA" + (at 234.95 133.35 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "7d36b5d6-c967-4f93-afff-f919e0ebdc6c") + ) + (label "LRCK" + (at 176.53 231.14 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "7da148d1-fbdd-4ee0-ba04-3c70099936f7") + ) + (label "INT2" + (at 148.59 119.38 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "7e4eaef1-21a4-4501-bdc3-cebb395b5e78") + ) + (label "BCK" + (at 105.41 260.35 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "82e1abe6-23d6-4801-899e-68e5a9d1d779") + ) + (label "INT1" + (at 201.93 133.35 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "865b1ec2-b944-4d23-80c1-e2d3fc2fa72b") + ) + (label "SDA" + (at 148.59 111.76 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "889cfee1-608a-4651-ad6b-625ec3604575") + ) + (label "BAND1 (40m)" + (at 73.66 147.32 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "896fc9cc-85b5-4595-b51d-dd15952074fb") + ) + (label "CLK" + (at 74.93 260.35 180) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "8abdcc88-3bd0-4952-a2d9-82fed0c8ae94") + ) + (label "LED" + (at 147.32 170.18 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "8ee412a7-38ac-4c52-bfb6-d563d4f5c0c9") + ) + (label "CLK" + (at 148.59 99.06 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "931234bd-b9a6-4ac8-ab6a-a497572b26fb") + ) + (label "INT1" + (at 148.59 121.92 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "934d7c42-c1f4-43f4-b4b0-75a2916635be") + ) + (label "SCLK" + (at 181.61 167.64 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "96436926-2d9f-4329-bb7d-b3434cce8763") + ) + (label "LRCK" + (at 234.95 125.73 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "99978432-9873-4b42-a061-7795c90ce871") + ) + (label "D+" + (at 81.28 172.72 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "9af2beab-490e-4d9b-8920-5d8cfe3c821b") + ) + (label "MOSI" + (at 81.28 121.92 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "a265c227-2ff6-4d3c-83aa-af047ac20ca6") + ) + (label "SDA2" + (at 73.66 132.08 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "b665a8bd-3103-42a4-a7f9-2a41a8fa4ae9") + ) + (label "MISO" + (at 81.28 124.46 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "b6c2c05d-9aa1-47ff-a263-afebcfd701f2") + ) + (label "BAND3 (15m)" + (at 73.66 142.24 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "b990ef46-8f9f-4cfd-b2a2-4a6e5b651536") + ) + (label "RXTX" + (at 60.96 161.29 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "c00ab4c3-111c-4e18-910a-34fa3fa0a51f") + ) + (label "Key1 in" + (at 148.59 142.24 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "c65e4e29-8f47-4c31-85b4-45a8a827bfce") + ) + (label "Tx" + (at 80.01 111.76 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "ca522f77-864b-4e0e-a10d-b027522af889") + ) + (label "DAUDIO_OUT" + (at 73.66 149.86 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "cf593de3-b9d2-441d-97a4-1880935c3b4a") + ) + (label "DAUDIO_OUT" + (at 168.91 233.68 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "d68edbdb-0dd7-4c7f-ac69-7703ba3997fc") + ) + (label "FOR" + (at 73.66 134.62 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "d71fae38-0b32-4093-994d-1583b0c0e306") + ) + (label "A22" + (at 152.4 129.54 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "d7b9f742-3969-4d25-afaa-1ad1b338a172") + ) + (label "BCK" + (at 176.53 236.22 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "d9f62050-645f-42c5-8829-6ab84fac3b84") + ) + (label "A21" + (at 152.4 132.08 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "d9fb50ee-ebd7-4e35-b094-356d5efece21") + ) + (label "Key1 in" + (at 201.93 153.67 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "da26db04-d1f3-4028-b9f9-b672ddd10a95") + ) + (label "SCL1" + (at 180.34 133.35 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "df571941-7cb2-4cad-8129-d33662732939") + ) + (label "SDA1" + (at 180.34 135.89 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "eb847b74-6f0d-4d76-b375-5a161969e1ab") + ) + (label "CLK" + (at 234.95 130.81 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "ed65f634-333f-40fc-ba65-8684617fd350") + ) + (label "Xmit Mode" + (at 201.93 114.3 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "ed792d33-78ea-498d-9066-9b5220ed5d51") + ) + (label "T-" + (at 148.59 163.83 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "ef25cfab-4a6c-4092-a219-69f50e08e31d") + ) + (label "D-" + (at 82.55 157.48 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "f2394dd7-5987-4a49-a795-812ab4b2b41d") + ) + (label "Tx" + (at 234.95 120.65 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "f6f4f676-e341-4ef1-8956-d5fd4dab33f6") + ) + (label "SCL1" + (at 148.59 116.84 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "f846384e-007f-4c32-a1df-6c7bbe3baa47") + ) + (label "BEGIN TEENSY SHUTDOWN" + (at 63.5 93.98 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "f8924cb9-63ec-46fb-ba6a-333598cfd7ec") + ) + (label "Rx" + (at 80.01 114.3 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "f9659664-d7ab-47eb-a678-c902e0551a3b") + ) + (symbol + (lib_id "Connector:TestPoint") + (at 269.24 59.69 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "034a0cd2-4926-422e-8eb0-b56bd12745b5") + (property "Reference" "TP2" + (at 271.78 55.118 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 271.78 57.658 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 274.32 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 274.32 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 269.24 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 269.24 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "A-1298" + (at 269.24 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 269.24 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "a543b150-0f31-441d-b84a-f53a041dd9ba") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 185.42 215.9 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "03f58ad0-81a0-476f-b3e9-dd2c6a8864a4") + (property "Reference" "C25" + (at 189.23 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10uF 16V" + (at 186.69 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 186.3852 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 185.42 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 185.42 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "80-C1206C106K4P" + (at 185.42 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 185.42 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 185.42 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "670cadd7-bb84-4432-8c64-506ef213f97e") + ) + (pin "1" + (uuid "0e21dd00-a475-412f-bfe2-f295b18df071") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C25") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 59.69 105.41 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "042f167a-3c92-4b59-89a4-1b66f9746e7a") + (property "Reference" "#PWR01" + (at 59.69 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 63.5 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 59.69 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 59.69 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 59.69 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c242fba7-5eae-4ee2-8a36-305b12d1ce4d") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR01") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector_Audio:AudioJack3_SwitchTR") + (at 243.84 157.48 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "04582302-d9b5-4de1-979d-20ae5b2bc4ad") + (property "Reference" "J17" + (at 241.935 149.5257 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Ex_Out" + (at 241.935 151.9499 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:Jack_3.5mm_STX-3081_Horizontal" + (at 243.84 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 243.84 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 243.84 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "490-SJ1-3515N " + (at 243.84 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 243.84 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 243.84 157.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "RN" + (uuid "828d9958-195b-40be-9aa9-faf70d4e1fa3") + ) + (pin "T" + (uuid "d4225aef-ccc6-4503-8cc6-c0aad463cb9d") + ) + (pin "S" + (uuid "313d3dea-f9b2-441f-b61f-0099b50d9d57") + ) + (pin "R" + (uuid "1592e4b3-e83c-4026-a330-1b0a59c5c42f") + ) + (pin "TN" + (uuid "1d54d0b9-7887-42e3-bc4c-7726fd9516c2") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J17") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C_Polarized") + (at 193.04 53.34 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "048b6365-a59b-49ee-83db-d30c96c3c008") + (property "Reference" "C6" + (at 190.5 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "470uF 25V" + (at 190.5 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_THT:CP_Radial_D10.0mm_P5.00mm" + (at 192.0748 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 193.04 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 193.04 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "667-ECA-1EM471" + (at 193.04 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 193.04 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 193.04 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "16e91181-0588-48e6-9fea-90a2ea27e44b") + ) + (pin "1" + (uuid "e60d59a8-66ca-438a-89c0-beeccc69c54b") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Transistor_FET:IRF4905") + (at 165.1 40.64 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "049ea973-3f0f-41f1-9efe-e621dcc7cf6d") + (property "Reference" "Q1" + (at 161.29 43.18 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SUP90P06-09L" + (at 161.29 45.72 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 167.005 35.56 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.com/pdf/datasheet/fqp47p06-d.pdf" + (at 165.1 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "" + (at 165.1 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 165.1 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 165.1 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 165.1 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "7642498b-91ba-4155-a218-ecf87e50dedf") + ) + (pin "3" + (uuid "37f298d8-22a0-48d3-9008-2fb0217b357f") + ) + (pin "1" + (uuid "3e2852cc-05a9-4b69-9ffa-3443f40c3c5a") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "Q1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 152.4 215.9 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "054d7c1b-128d-4d65-8dcb-758e325ad1bb") + (property "Reference" "C14" + (at 146.05 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 142.24 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 153.3652 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 152.4 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 152.4 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "C1206C104K5RACTU" + (at 152.4 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 152.4 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 152.4 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5ca3fb3a-8f25-4666-9328-31f8c60b9e46") + ) + (pin "1" + (uuid "4bbecdc0-4644-42cf-bf0e-956ffadfbfbe") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C14") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 74.93 251.46 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "06ec42e3-3a94-4abb-b61c-86527ca39f09") + (property "Reference" "R6" + (at 77.47 251.46 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100R" + (at 80.01 251.46 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 76.708 251.46 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 74.93 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 74.93 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "652-CR1206FX-1000ELF" + (at 74.93 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 74.93 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 74.93 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "cf3fe07d-74df-4c82-9b39-176a81720be3") + ) + (pin "1" + (uuid "b6c7cdd2-ae2c-48d5-baa0-d9f7902db830") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:D_Zener") + (at 165.1 52.07 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (uuid "0761ed86-2063-4721-a88e-27e44366cf15") + (property "Reference" "D5" + (at 166.3121 54.102 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10V" + (at 163.8879 54.102 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Diode_SMD:D_SMA" + (at 165.1 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 165.1 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 165.1 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "78-MMSZ5240C-E3-08" + (at 165.1 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 165.1 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 165.1 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "02f52931-fa5f-4516-9525-987b6764cf2a") + ) + (pin "2" + (uuid "099d8e3b-691e-4f36-a832-cf93323c6645") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "D5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 115.57 63.5 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "07bbfddc-ffeb-4d7b-8dfd-c7a882979834") + (property "Reference" "R2" + (at 118.11 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10K" + (at 118.11 64.77 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 113.792 63.5 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 115.57 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 115.57 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "CRCW120610K0FKEB" + (at 115.57 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 115.57 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 115.57 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f14c4c9d-0fb0-4cd1-8876-8ea4abb76b8d") + ) + (pin "1" + (uuid "d5759a88-3c3a-4ef0-acb7-3f7ffa90afff") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 215.9 242.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "09fb7e2f-b968-4a8f-8599-3d2f9706ad85") + (property "Reference" "C29" + (at 219.71 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "2.2uF 16V" + (at 217.17 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 216.8652 246.38 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 215.9 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 215.9 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "80-C1206C225K5R" + (at 215.9 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 215.9 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 215.9 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "90933072-017f-4b31-952e-21f760534e92") + ) + (pin "1" + (uuid "0c808741-1cc1-4751-846a-ed7b83118c60") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C29") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 82.55 238.76 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0a380bdd-7dc8-48ce-9215-1742b7625531") + (property "Reference" "#PWR017" + (at 82.55 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 78.74 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 82.55 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 82.55 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 82.55 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "97b269d3-557f-49eb-ba49-a7452cb26a8b") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR017") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 45.72 243.84 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0acdcfb7-ea1c-4417-b8d3-28ef4b3ccac8") + (property "Reference" "#PWR020" + (at 45.72 250.19 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 45.72 248.92 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 45.72 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 45.72 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 45.72 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "9f908cc2-4ae2-48a0-986a-b50d12f5a800") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR020") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 85.09 53.34 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0b5f006b-5553-4616-8eca-edb21daafe53") + (property "Reference" "#PWR015" + (at 85.09 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 85.09 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 85.09 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 85.09 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 85.09 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fab37f1f-a343-49bf-9e75-cc51905bb74e") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR015") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 240.03 63.5 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0b805e27-5453-4732-a757-157994f1ce08") + (property "Reference" "C8" + (at 243.84 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 243.84 64.77 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 240.9952 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 240.03 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 240.03 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "C1206C104K5RACTU" + (at 240.03 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 240.03 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 240.03 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6caec6ee-9f74-4d6d-90c2-c71813dc8df5") + ) + (pin "1" + (uuid "084b5dc4-3c62-49ed-aaba-811e6cdc0966") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Switch:SW_Push") + (at 66.04 43.18 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0fcd2219-81cb-4a63-8d34-2214074f8456") + (property "Reference" "SW1" + (at 71.12 43.18 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "ON-OFF BUTTON" + (at 67.31 40.64 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical" + (at 71.12 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 71.12 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 66.04 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 66.04 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "A-4720" + (at 66.04 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 66.04 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5ede3d1e-2d6d-4453-a2ae-4fd321c201b2") + ) + (pin "1" + (uuid "5b3d60a3-c539-4f09-80dd-6bed125f2a52") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "SW1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41:IDC_2x5") + (at 191.77 133.35 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0fcec4c1-373b-40d3-8256-774a50bcbaa8") + (property "Reference" "J5" + (at 193.04 122.8557 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Front Panel" + (at 193.04 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x05_P2.54mm_Vertical" + (at 191.77 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 191.77 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 191.77 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 191.77 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "A-2939" + (at 191.77 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 191.77 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b28c1c1d-d7df-4c9e-af27-0a3baaab161c") + ) + (pin "9" + (uuid "7d30653a-58c5-4211-bb6e-bec983813da3") + ) + (pin "1" + (uuid "364d3cdd-24a1-4f13-ad51-a0fa34ced9df") + ) + (pin "6" + (uuid "cf564678-a771-49b2-990d-0ff81ed19092") + ) + (pin "4" + (uuid "90804fd3-67d0-431e-8763-e7bb075f1b69") + ) + (pin "5" + (uuid "a1232ef3-7b92-49c6-ba81-6ef0e81ae9cf") + ) + (pin "3" + (uuid "f6747946-318a-4cfc-b6e6-11e2bab6e67d") + ) + (pin "10" + (uuid "898b064d-1d89-458a-8b1d-b70a9bcdea8e") + ) + (pin "8" + (uuid "ef448979-3908-4151-9345-87ccc4aa3ab9") + ) + (pin "7" + (uuid "11e75348-c493-4e8a-894b-3d11fceb90de") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Regulator_Linear:LM1117T-3.3") + (at 210.82 59.69 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "1076a160-2fc8-48a7-87c5-54c02c210b9f") + (property "Reference" "U3" + (at 210.82 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM1117T-3.3" + (at 210.82 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 210.82 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/symlink/lm1117.pdf" + (at 210.82 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 210.82 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "926-LM1117T-3.3/NOPB" + (at 210.82 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 210.82 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 210.82 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "4e856064-f410-4982-8b08-a4d5fd7418dd") + ) + (pin "2" + (uuid "013b6a8a-bec8-487e-8373-236b64df5ff6") + ) + (pin "1" + (uuid "17044a74-bf15-4002-809a-5f98903c2125") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:EA-T220-38E") + (at 354.33 39.37 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "12252b89-9b25-4eee-b7c5-b9baa052d438") + (property "Reference" "H8" + (at 370.332 39.4279 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "EA-T220-38E" + (at 370.332 41.8521 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "EAT22038E" + (at 370.84 134.29 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ohmite.com/assets/docs/sink_e.pdf?r=false" + (at 370.84 234.29 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Description" "" + (at 354.33 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Height" "38.35" + (at 370.84 434.29 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Mouser Part Number" "588-EA-T220-38E" + (at 370.84 534.29 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Mouser Price/Stock" "https://www.mouser.co.uk/ProductDetail/Ohmite/EA-T220-38E?qs=6weo7U0lPxCX9kcQhGcuZQ%3D%3D" + (at 370.84 634.29 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Manufacturer_Name" "Ohmite" + (at 370.84 734.29 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Manufacturer_Part_Number" "EA-T220-38E" + (at 370.84 834.29 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (pin "2" + (uuid "82006236-1a6e-4be7-a099-da1b8f528d2c") + ) + (pin "1" + (uuid "9dba621e-083e-4b52-99de-a761f138a259") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "H8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 74.93 223.52 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "12e7474b-461c-4021-ae9d-53ee86696986") + (property "Reference" "C27" + (at 76.2 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10uF 16V" + (at 73.66 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 75.8952 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 74.93 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 74.93 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "80-C1206C106K4P" + (at 74.93 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 74.93 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 74.93 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "91cb64bc-b6ca-48f2-9331-195ebd0373d6") + ) + (pin "1" + (uuid "1d0aac11-25e9-4a7a-abb9-2c5aed715fb6") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C27") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 40.64 240.03 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1400b6d8-1dd4-4d51-9294-773f3e105a57") + (property "Reference" "C19" + (at 33.02 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 27.94 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 41.6052 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 40.64 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 40.64 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "C1206C104K5RACTU" + (at 40.64 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 40.64 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 40.64 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "591875c6-aec2-418a-9015-d5f34a949143") + ) + (pin "1" + (uuid "b73ece82-cf5c-4e5a-b568-dc5056d90df0") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C19") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 196.85 48.26 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "14958baa-fb6b-4ad7-a139-c14d848671a6") + (property "Reference" "C3" + (at 200.66 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 200.66 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 197.8152 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 196.85 48.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 196.85 48.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "C1206C104K5RACTU" + (at 196.85 48.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 196.85 48.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 196.85 48.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "66bb862c-7331-4cac-8b17-d29d0d167aef") + ) + (pin "1" + (uuid "41bf3267-286b-4e00-ba14-d50365760fba") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Transistor_FET:2N7000") + (at 135.89 59.69 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1541e101-b2a0-4519-9759-93108fe121b2") + (property "Reference" "Q2" + (at 129.54 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "2N7000" + (at 129.54 64.77 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-92_Inline" + (at 140.97 61.595 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.vishay.com/docs/70226/70226.pdf" + (at 135.89 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "" + (at 135.89 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "512-2N7000BU" + (at 135.89 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 135.89 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 135.89 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "311085ef-5102-4f18-9384-b67b528516b4") + ) + (pin "3" + (uuid "d3432b5a-e44e-47f8-a860-696fd27f7d93") + ) + (pin "2" + (uuid "b57da23c-cc23-4645-a799-821352f4abb0") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "Q2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Transistor_FET:2N7000") + (at 121.92 59.69 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "168cdc80-9c09-4687-8c20-9b0517959f34") + (property "Reference" "Q3" + (at 114.3 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "2N7000" + (at 114.3 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-92_Inline" + (at 127 61.595 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.vishay.com/docs/70226/70226.pdf" + (at 121.92 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "" + (at 121.92 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "512-2N7000BU" + (at 121.92 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 121.92 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 121.92 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "2b6e0eeb-2ca7-412a-b691-66606427fb2a") + ) + (pin "3" + (uuid "e799e75c-13fd-4151-a822-907eed6651cb") + ) + (pin "2" + (uuid "a004041a-ef8f-43ab-a697-3176f708331c") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "Q3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 312.42 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "193608d9-6fef-469e-87fe-46b038dcf99e") + (property "Reference" "#PWR059" + (at 312.42 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 312.42 77.7931 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 312.42 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 312.42 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 312.42 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "d7dc66c2-8fc2-4858-9ae2-1146448e3a51") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR059") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 210.82 85.09 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1a583fd2-0097-4d75-8496-c8908d4bb911") + (property "Reference" "#PWR063" + (at 210.82 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 213.36 86.36 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 210.82 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 210.82 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 210.82 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ce1fa87f-c041-4fa9-b856-d681143b827b") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR063") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 228.6 255.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1a5b6086-3dc2-4ee7-9430-67b58269608b") + (property "Reference" "C21" + (at 232.41 254 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10uF 16V" + (at 229.87 257.81 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 229.5652 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 228.6 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 228.6 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "80-C1206C106K4P" + (at 228.6 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 228.6 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 228.6 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "fdbf452e-9af6-4242-a2af-ba0602d2879d") + ) + (pin "1" + (uuid "81fcb4a9-e7c2-4320-8ebc-901569716e60") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C21") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:IDC_2x4") + (at 146.05 193.04 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "1a630add-fa59-41c8-a556-78038bc50105") + (property "Reference" "J3" + (at 147.32 182.5457 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Acc" + (at 147.32 184.9699 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x04_P2.54mm_Vertical" + (at 146.05 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 146.05 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 146.05 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 146.05 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "A-2948" + (at 146.05 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 146.05 193.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "0a33e121-905d-46cb-b433-415133e2353b") + ) + (pin "3" + (uuid "fea65fb9-c64b-4790-a9d5-85355e27480c") + ) + (pin "4" + (uuid "ffe43f27-e592-4e13-bcd4-c88e7d8f1471") + ) + (pin "5" + (uuid "554988e3-b766-4a9f-b294-e4f2246ff439") + ) + (pin "6" + (uuid "de89a52c-f962-4171-9505-76ce4e8489b2") + ) + (pin "7" + (uuid "ee59010e-5ccd-432a-86ac-cc92b5c37dba") + ) + (pin "1" + (uuid "e9d6f549-9ac5-4f4e-a38b-18e4dab30c47") + ) + (pin "8" + (uuid "84e55c03-74d0-43b2-95cc-983669fe7810") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 306.07 50.8 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "1c67ed2f-4970-4b5f-8b0a-99b616b8ea76") + (property "Reference" "C31" + (at 309.88 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 309.88 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 307.0352 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 306.07 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 306.07 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "C1206C104K5RACTU" + (at 306.07 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 306.07 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 306.07 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "9230b1cd-8874-4cc3-b4e9-796ba23fd93d") + ) + (pin "1" + (uuid "7bf5948f-abee-4dcc-9ca0-d6afef15a214") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C31") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 180.34 251.46 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "204df534-b26b-4f10-9403-3e3c6e1d6264") + (property "Reference" "#PWR029" + (at 180.34 257.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 180.34 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 180.34 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 180.34 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 180.34 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "205f4760-dd8c-4539-a53c-6c23b0ae63b5") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR029") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 158.75 215.9 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "248b67de-6a11-4c4c-9793-1538aeea745a") + (property "Reference" "C15" + (at 162.56 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10uF 16V" + (at 160.02 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 159.7152 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 158.75 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 158.75 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "80-C1206C106K4P" + (at 158.75 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 158.75 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 158.75 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "db566d77-790c-4d62-bedb-bcf57b49f947") + ) + (pin "1" + (uuid "55d8d033-57d2-46a4-94a5-078acc1a3792") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 222.25 255.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "260bcea9-5fc0-416a-b663-ae3ae3b97aaf") + (property "Reference" "C20" + (at 215.9 254 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 213.36 256.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 223.2152 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 222.25 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 222.25 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "C1206C104K5RACTU" + (at 222.25 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 222.25 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 222.25 255.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c71feb69-7ea0-4a33-ac95-9ee156f50d86") + ) + (pin "1" + (uuid "839fca3a-5359-4cf8-84dc-4a972abe9fe0") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C20") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 356.87 62.23 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "29aa1a78-21d9-42a8-b3e1-5bbb38a08098") + (property "Reference" "#PWR053" + (at 356.87 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 356.87 66.3631 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 356.87 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 356.87 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 356.87 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0656e774-0cb7-41f3-ba01-f21f39574e26") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR053") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector_Audio:AudioJack3_SwitchTR") + (at 128.27 232.41 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2b532c7a-c08f-4973-b911-b7d3a16b71fb") + (property "Reference" "J15" + (at 130.175 240.3643 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Rec_In" + (at 130.175 237.9401 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:Jack_3.5mm_STX-3081_Horizontal" + (at 128.27 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 128.27 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 128.27 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "490-SJ1-3515N " + (at 128.27 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 128.27 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 128.27 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "RN" + (uuid "858042a2-e3aa-4e6b-9138-94338e6be9d6") + ) + (pin "T" + (uuid "1d223293-7568-4523-b9a5-6930f593d098") + ) + (pin "S" + (uuid "1031e7c2-bb16-434a-a7d6-0fa115f679c8") + ) + (pin "R" + (uuid "f53c3a10-f9cf-4251-97b6-dc89b7c35649") + ) + (pin "TN" + (uuid "0013d194-e1fc-4d97-b65b-bc24b9c3d3b5") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12P") + (at 331.47 30.48 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "2cb1dfd5-7288-413a-9db9-27cff74720a6") + (property "Reference" "#PWR054" + (at 331.47 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12P" + (at 331.47 25.4 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 331.47 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 331.47 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 331.47 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "45e9fc6d-b2ea-4841-8cfa-4b9b959dfed0") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR054") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector_Generic:Conn_01x03") + (at 261.62 160.02 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2d466fcd-f9b5-4408-afc4-ea94a2d518fd") + (property "Reference" "J22" + (at 261.62 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Header" + (at 261.62 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" + (at 261.62 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 261.62 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 261.62 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 261.62 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "A-6153" + (at 261.62 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 261.62 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "043bc1ad-073b-4690-bf11-d4890bbc9fe2") + ) + (pin "1" + (uuid "c6dde324-76cc-40b0-8c8c-b498ea9b75ad") + ) + (pin "2" + (uuid "cdcdcdc8-62ec-420d-9896-70eb75d0072c") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J22") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 110.49 236.22 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2f320628-02c0-4903-ab38-c37b595f1bfd") + (property "Reference" "#PWR016" + (at 110.49 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 114.3 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 110.49 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 110.49 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 110.49 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6431220f-c4e3-477c-952e-b67995356bed") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR016") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 31.75 190.5 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2fa9bf70-4335-49bd-9514-e5f893aa39ec") + (property "Reference" "R9" + (at 27.94 186.69 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1K" + (at 30.48 186.69 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 33.528 190.5 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 31.75 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 31.75 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "CRCW12061K00JNEAC" + (at 31.75 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 31.75 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 31.75 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "42c4965e-b00b-4c44-ba2b-f91ad1cdacea") + ) + (pin "1" + (uuid "2eea3582-1882-497f-91a9-d7c41aa7a015") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C_Polarized") + (at 222.25 63.5 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "318fc588-08c5-4ef9-be94-44a7f4e985c3") + (property "Reference" "C7" + (at 226.06 61.341 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "470uF 25V" + (at 226.06 63.881 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_THT:CP_Radial_D10.0mm_P5.00mm" + (at 223.2152 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 222.25 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 222.25 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "667-ECA-1EM471" + (at 222.25 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 222.25 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 222.25 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1dc767d0-a614-40b9-b8c8-524781d26b86") + ) + (pin "1" + (uuid "1d70c36f-32c2-40c9-8dd0-a8e4d457e8b9") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 29.21 38.1 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "32b1c61e-819e-45ba-b99a-c56d1153f7ba") + (property "Reference" "#PWR013" + (at 29.21 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 29.21 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 29.21 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 29.21 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 29.21 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "564c327b-b14b-4342-b9f7-6060b7979d95") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR013") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector_Generic:Conn_01x02") + (at 168.91 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "33a50555-ce9d-4608-b7de-c5d5a9c9d9a2") + (property "Reference" "J18" + (at 170.942 101.6579 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Conn_01x02" + (at 170.942 104.0821 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical" + (at 168.91 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 168.91 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 168.91 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 168.91 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 168.91 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 168.91 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "60329061-03a1-4e86-ac12-03faaa3abd56") + ) + (pin "2" + (uuid "869f908b-ebf2-40d3-9457-3d222f97e5d1") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J18") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 31.75 173.99 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "34030f41-a141-4a40-9bf3-76038edbe4d3") + (property "Reference" "#PWR05" + (at 31.75 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 31.75 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 31.75 173.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 31.75 173.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 31.75 173.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e99966ae-4bd7-428b-9f4a-1647e590d616") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR05") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 172.72 182.88 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3692c24b-a112-4467-8ff5-c1624159cb0e") + (property "Reference" "#PWR046" + (at 172.72 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 167.64 185.42 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 172.72 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 172.72 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 172.72 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7a861603-ef93-4c6f-b2cb-7678c292d95b") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR046") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 60.96 190.5 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "369a37c1-145e-402f-bc1f-f24553352674") + (property "Reference" "R14" + (at 57.15 186.69 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1K" + (at 59.69 186.69 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 62.738 190.5 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 60.96 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 60.96 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "CRCW12061K00JNEAC" + (at 60.96 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 60.96 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 60.96 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a95d9c30-7423-40c9-bd1f-c526fdead73b") + ) + (pin "1" + (uuid "a7dc6c90-482e-4835-9c4c-c96dabee1850") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R14") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 36.83 110.49 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3a0ba0ac-9556-4349-ba4c-e827529a4f88") + (property "Reference" "#PWR02" + (at 36.83 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 36.83 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 36.83 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 36.83 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 36.83 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "01daadea-d2e8-4b51-854a-bdf2e9fa55bd") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR02") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 179.07 191.77 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3aaf3ebc-adf3-4810-9752-fe52b1ba64c9") + (property "Reference" "#PWR048" + (at 179.07 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 179.07 186.69 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 179.07 191.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 179.07 191.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 179.07 191.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6c4cd5ff-37e0-4499-9a5f-48b5207188e7") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR048") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 254 38.1 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3ab8583d-be9c-4d25-aaad-051d3aff24ac") + (property "Reference" "L1" + (at 254 33.02 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10uH 20%" + (at 254 35.56 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Inductor_SMD:L_Bourns-SRN6028" + (at 254 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 254 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 254 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "81-1264EY-100MP3" + (at 254 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 254 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 254 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "15ebfe7e-59a4-4f5b-8284-2b47bdd1ceb9") + ) + (pin "2" + (uuid "7e349eb3-7b43-4dc4-8628-3d71d7b5e746") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 123.19 237.49 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3c6ec026-de38-4c19-bbe2-9eba9296c814") + (property "Reference" "#PWR018" + (at 123.19 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 123.19 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 123.19 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 123.19 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 123.19 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6742e843-55c8-4bff-ab53-18cc197f5d67") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR018") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12P") + (at 154.94 30.48 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3cb0059f-2635-40b9-a333-d0b78ee155bf") + (property "Reference" "#PWR010" + (at 154.94 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12P" + (at 154.94 25.4 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 154.94 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 154.94 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 154.94 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fc508d7f-bd92-41e7-890f-8f6ccb27dfb9") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR010") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 231.14 232.41 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3ccf0370-fad4-49a0-9e9d-993bfea3406d") + (property "Reference" "#PWR038" + (at 231.14 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 231.14 237.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 231.14 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 231.14 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 231.14 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fd1e4dd5-df70-4875-9a0e-68fb2e99d1b7") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR038") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 153.67 85.09 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3ee3aff3-6f18-4cce-983b-711caabe0410") + (property "Reference" "#PWR039" + (at 153.67 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 153.67 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 153.67 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 153.67 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 153.67 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8593ff04-b552-460d-a55d-b8b3a3f7abd5") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR039") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Diode:1N4007") + (at 119.38 38.1 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "40f60462-2920-400a-833a-e903a476d602") + (property "Reference" "D1" + (at 119.38 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1N4007" + (at 119.38 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Diode_SMD:D_SMA" + (at 119.38 42.545 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.vishay.com/docs/88503/1n4001.pdf" + (at 119.38 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 119.38 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "621-S1A-F" + (at 119.38 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 119.38 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 119.38 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6a756c13-83ec-43d0-adb9-e80e9b60648a") + ) + (pin "1" + (uuid "c3efcd63-3ffc-403f-b2c5-44f00e34d79c") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "D1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "MCU_Microchip_ATtiny:ATtiny85-20S") + (at 49.53 38.1 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "40fab2fd-0f32-4d6d-80e8-c00a6a250b7b") + (property "Reference" "U4" + (at 49.53 29.21 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "ATtiny85-20S" + (at 49.53 34.29 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_DIP:DIP-8_W7.62mm_Socket" + (at 49.53 38.1 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://ww1.microchip.com/downloads/en/DeviceDoc/atmel-2586-avr-8-bit-microcontroller-attiny25-attiny45-attiny85_datasheet.pdf" + (at 49.53 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 49.53 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "556-ATTINY85-20PU" + (at 49.53 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "A-001" + (at 49.53 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 49.53 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "d7f749a3-d6b4-4cad-b4b9-b79173dd59fb") + ) + (pin "3" + (uuid "c558a0ce-46c8-4fb9-8ab5-e5dbe262b448") + ) + (pin "8" + (uuid "0d958356-8f16-494d-9c4f-cb0bf90d3ec9") + ) + (pin "6" + (uuid "e6449a42-5d8f-4334-a931-9d501e789052") + ) + (pin "2" + (uuid "3da959f6-f2af-48ec-bc0d-f3b287bf7501") + ) + (pin "4" + (uuid "d3889020-0eb4-4df3-91d4-f3d16344fe01") + ) + (pin "7" + (uuid "b0bd6bd6-84f6-4aa7-a0f3-327dd7f7f4bc") + ) + (pin "1" + (uuid "26d8fb2a-5a37-4c92-a02b-5f20355023d5") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector_Generic:Conn_01x02") + (at 265.43 182.88 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "42c70f2a-d19d-4f81-aafa-602a20aa1407") + (property "Reference" "J13" + (at 262.89 187.96 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Header" + (at 261.62 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical" + (at 265.43 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 265.43 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 265.43 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 265.43 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "A-5773" + (at 265.43 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 265.43 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "0132042a-0ef9-40bc-86c6-99fde0f73638") + ) + (pin "1" + (uuid "58605715-4244-40fd-8508-8efa59b2bbea") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 199.39 261.62 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "433adfec-42c5-4159-b18e-cd4865d56747") + (property "Reference" "#PWR028" + (at 199.39 267.97 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 199.39 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 199.39 261.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 199.39 261.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 199.39 261.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "88838dc5-ed63-40c3-b6a3-efe4488339fa") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR028") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Regulator_Linear:AP7384-50V") + (at 102.87 38.1 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "457b9948-5bf4-4862-885d-62728af96b6f") + (property "Reference" "U2" + (at 102.87 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "AP7384-50V" + (at 102.87 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-92_Inline_Wide" + (at 102.87 32.385 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.diodes.com/assets/Datasheets/AP7384.pdf" + (at 102.87 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 102.87 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "AP7381-50V-A" + (at 102.87 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 102.87 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 102.87 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "55618fa5-66fe-4808-a22d-5276d47385ef") + ) + (pin "1" + (uuid "7686c1d6-2fd1-419c-9a5f-bc896900a04c") + ) + (pin "2" + (uuid "39fb14d6-977a-401f-b287-744f768b0a30") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 50.8 224.79 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "45943541-475a-4f0d-8849-b9bdb47c1e67") + (property "Reference" "C22" + (at 54.61 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10uF 16V" + (at 52.07 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 51.7652 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 50.8 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 50.8 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "80-C1206C106K4P" + (at 50.8 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 50.8 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 50.8 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "75efdd88-a19f-4b01-83be-e2db25085d87") + ) + (pin "1" + (uuid "30c93634-427c-4e89-8a72-f743398f1c15") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C22") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 158.75 93.98 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4617b3f9-501f-4b78-ba8e-d1777fdea3a2") + (property "Reference" "#PWR040" + (at 158.75 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 161.29 93.98 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 158.75 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 158.75 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 158.75 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e2a8b49a-e007-4693-83e1-59a0fc7c9b6c") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR040") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 198.12 177.8 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4721ef66-be4e-4c8a-a1a9-a58256c1dd46") + (property "Reference" "#PWR045" + (at 198.12 184.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 201.93 180.34 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 198.12 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 198.12 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 198.12 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c2c89b97-ea4e-4301-a43f-576dcbc50fdb") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR045") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector_Generic:Conn_01x02") + (at 53.34 163.83 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4bec987b-455c-486b-82de-f94384685496") + (property "Reference" "J10" + (at 51.308 163.8879 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Conn_01x02" + (at 51.308 166.3121 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical" + (at 53.34 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 53.34 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 53.34 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 53.34 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 53.34 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 53.34 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "32fc5d96-d8d1-49cd-af2d-e8416fe72db4") + ) + (pin "1" + (uuid "1fe637db-1bcb-4f0d-bd59-6049c4c744d2") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 173.99 114.3 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4ca35872-d46b-470d-b736-7e51695cf49c") + (property "Reference" "#PWR042" + (at 173.99 120.65 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 170.18 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 173.99 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 173.99 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 173.99 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6c1fc11e-3bec-4d3f-9064-250c756dbcc5") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR042") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 247.65 240.03 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4d631baa-949e-444b-b64a-5ebef5ef2599") + (property "Reference" "C30" + (at 247.65 233.7267 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10uF 16V" + (at 247.65 236.1509 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 251.46 239.0648 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 247.65 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 247.65 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "80-C1206C106K4P" + (at 247.65 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 247.65 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 247.65 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "d5920e8e-b4bb-4c08-b4f9-8a85cba20ef6") + ) + (pin "2" + (uuid "ddabd0bc-f839-4e24-9c96-d3bba9cbd039") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C30") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 156.21 195.58 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4ee7c7ef-6796-4a2d-b0f0-a4c845d2787a") + (property "Reference" "#PWR068" + (at 156.21 201.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 160.02 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 156.21 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 156.21 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 156.21 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "62658b9c-fed8-4d05-ae02-50436e6b70fa") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR068") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 264.16 38.1 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5373b5cc-b386-4927-8e30-c31b5c0499c7") + (property "Reference" "#PWR06" + (at 264.16 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 264.16 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 264.16 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 264.16 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 264.16 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f6415a35-2d05-49cd-8520-0947a7e54753") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR06") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 45.72 220.98 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5623d55b-4f27-46cd-a560-65fe91a4f23e") + (property "Reference" "#PWR021" + (at 45.72 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 45.72 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 45.72 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 45.72 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 45.72 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e59501fc-9d70-44b5-8274-6687204114d7") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR021") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 80.01 153.67 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "57885f4c-d706-489a-864c-aa32697828bb") + (property "Reference" "#PWR065" + (at 80.01 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 76.2 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 80.01 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 80.01 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 80.01 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5f3bd585-6466-4093-a254-3568d5660072") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR065") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41_Library:EA-T220-38E") + (at 354.33 30.48 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "57d953bd-cd7c-4afc-a26f-b53914f07e17") + (property "Reference" "H7" + (at 370.332 30.5379 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "EA-T220-38E" + (at 370.332 32.9621 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "EAT22038E" + (at 370.84 125.4 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ohmite.com/assets/docs/sink_e.pdf?r=false" + (at 370.84 225.4 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Description" "" + (at 354.33 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Height" "38.35" + (at 370.84 425.4 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Mouser Part Number" "588-EA-T220-38E" + (at 370.84 525.4 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Mouser Price/Stock" "https://www.mouser.co.uk/ProductDetail/Ohmite/EA-T220-38E?qs=6weo7U0lPxCX9kcQhGcuZQ%3D%3D" + (at 370.84 625.4 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Manufacturer_Name" "Ohmite" + (at 370.84 725.4 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (property "Manufacturer_Part_Number" "EA-T220-38E" + (at 370.84 825.4 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + (hide yes) + ) + ) + (pin "2" + (uuid "93544d93-edf0-40e9-8170-7dae356f136b") + ) + (pin "1" + (uuid "2d253612-cd32-4cf2-9546-379f8fbbc881") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "H7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41:IDC_2x5") + (at 46.99 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "58984bd9-2c09-48a0-adb6-39ee8a7d4187") + (property "Reference" "J12" + (at 48.26 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "BANDS" + (at 48.26 147.32 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x05_P2.54mm_Vertical" + (at 46.99 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 46.99 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 46.99 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 46.99 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "A-2939" + (at 46.99 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 46.99 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5910f9a3-774b-4faf-9f74-8ad141491c7f") + ) + (pin "9" + (uuid "c1d340a5-7314-4cf4-97ae-e5513b152782") + ) + (pin "1" + (uuid "65f21261-e304-4e46-81ef-074a0fe69e73") + ) + (pin "6" + (uuid "6d60477c-40b6-4b66-b525-30d3886d5cd3") + ) + (pin "4" + (uuid "3a427655-6f22-47f3-91ef-8efa6953d022") + ) + (pin "5" + (uuid "0c4fd299-b8a7-4404-b63f-27acae1d1266") + ) + (pin "3" + (uuid "436ab6c1-4f40-46da-80c6-fc4190112546") + ) + (pin "10" + (uuid "590ffb35-c5d3-452d-9bfa-a41bcd89151f") + ) + (pin "8" + (uuid "36171067-10d5-44a8-b350-366596c642eb") + ) + (pin "7" + (uuid "4b1989eb-3171-4ba6-801c-24bebb2b0d7e") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J12") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 144.78 54.61 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "58f319dc-0b9a-495d-84d0-ad895514cc13") + (property "Reference" "R15" + (at 144.78 59.7703 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "150R" + (at 144.78 57.3461 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 144.78 52.832 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 144.78 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 144.78 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "279-CRGCQ1206J150R" + (at 144.78 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 144.78 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 144.78 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "50d908c3-dbbe-4a12-ac97-7c88598fadb1") + ) + (pin "1" + (uuid "58612ac3-1269-4962-9b81-8461df89a20d") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 177.8 238.76 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "590d596d-40a1-47ef-9b3d-6aea923080e1") + (property "Reference" "#PWR052" + (at 177.8 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 177.8 242.8931 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 177.8 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 177.8 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 177.8 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "d944ea0b-fd5d-4e82-b535-c93453a69fcc") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR052") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 105.41 251.46 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "59a3ab7e-964a-44bd-8f4a-5e44b7ad51df") + (property "Reference" "R11" + (at 107.95 251.46 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100R" + (at 110.49 251.46 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 107.188 251.46 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 105.41 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 105.41 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "652-CR1206FX-1000ELF" + (at 105.41 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 105.41 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 105.41 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "c25c4f0a-5a04-4901-897e-d68831dd0769") + ) + (pin "1" + (uuid "521c7613-19c9-48be-a5de-38b6a63f0d51") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 148.59 127 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5a099660-52b6-486c-b077-1a66299c19db") + (property "Reference" "#PWR051" + (at 148.59 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 148.59 131.1331 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 148.59 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 148.59 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 148.59 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "923d2085-ba1b-4d71-8523-bc431a2d06ed") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR051") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 331.47 33.02 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5d6a7d2b-bf62-472c-87e5-1c275775bf1d") + (property "Reference" "#PWR056" + (at 331.47 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 331.47 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 331.47 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 331.47 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 331.47 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "cbe8a89d-008f-4012-a4d2-b7ad5b4457c6") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR056") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 205.74 215.9 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5e7d88a2-cc55-45f3-8364-d2eebf5de2f0") + (property "Reference" "C16" + (at 199.39 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 196.85 217.17 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 206.7052 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 205.74 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 205.74 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "C1206C104K5RACTU" + (at 205.74 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 205.74 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 205.74 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "84b03ec5-a395-4209-8981-104c8e9c52ba") + ) + (pin "1" + (uuid "7dad15f9-a841-4d1f-97fd-a82946161d35") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C16") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_01x02_Socket") + (at 327.66 46.99 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "61ce0ee8-fcfa-4de5-88cc-52c6552dea5b") + (property "Reference" "J2" + (at 328.93 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Fan1" + (at 328.93 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical" + (at 327.66 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 327.66 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 327.66 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 327.66 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "A-1312" + (at 327.66 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 327.66 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b18b0b44-ebca-4afb-8be7-1d396a6250ed") + ) + (pin "2" + (uuid "be401a3c-82a6-4b88-8a25-cf6627544454") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 156.21 219.71 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "6437d2d2-79a8-49c3-b85d-c8ea98c58f85") + (property "Reference" "#PWR031" + (at 156.21 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 156.21 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 156.21 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 156.21 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 156.21 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "42896926-dd80-4d97-b12f-8fbe6e47acdd") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR031") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 73.66 57.15 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "65d3772a-25b3-466c-a62f-5621a67147b2") + (property "Reference" "R3" + (at 77.47 53.34 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1K" + (at 77.47 55.88 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 73.66 58.928 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 73.66 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 73.66 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "CRCW12061K00JNEAC" + (at 73.66 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 73.66 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 73.66 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "534bdf77-c2ae-4b59-be6b-df3401bddda8") + ) + (pin "1" + (uuid "9263c384-c6ea-4c12-9684-9b07b98ee7a1") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 82.55 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "67ca00dc-d55e-4a65-a695-25b4f9084bd0") + (property "Reference" "C9" + (at 85.09 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 82.55 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 83.5152 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 82.55 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 82.55 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "C1206C104K5RACTU" + (at 82.55 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 82.55 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 82.55 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "7003c63e-b4de-465d-9646-f6add224fdb6") + ) + (pin "1" + (uuid "8ed1c0f4-4335-4e90-b959-6fc6cb82ef59") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:TestPoint") + (at 269.24 38.1 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "68d16323-ac90-49ad-9e00-a36496cf6221") + (property "Reference" "TP1" + (at 271.78 33.528 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "TestPoint" + (at 271.78 36.068 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 274.32 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 274.32 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 269.24 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 269.24 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "A-1298" + (at 269.24 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 269.24 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "72c5dbaf-6c7d-4b83-b667-282a060374ca") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "TP1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 181.61 129.54 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "68f35b41-7e42-4cff-a9f7-8f8ee197257e") + (property "Reference" "#PWR044" + (at 181.61 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 181.61 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 181.61 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 181.61 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 181.61 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0bb52af3-a8ed-4d43-a90e-ac73d4b3df3a") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR044") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 41.91 198.12 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "697f8477-d641-4e08-b2be-903828ecc56a") + (property "Reference" "#PWR014" + (at 41.91 204.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 41.91 203.2 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 41.91 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 41.91 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 41.91 198.12 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "685afae9-e423-4692-8110-17088ea3935a") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR014") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 168.91 177.8 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6aa56558-67e1-4b18-a634-11e0511dda8c") + (property "Reference" "C13" + (at 162.56 176.53 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 160.02 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 169.8752 181.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 168.91 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 168.91 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "C1206C104K5RACTU" + (at 168.91 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 168.91 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 168.91 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5c88e7e2-4830-487a-b92e-1d75b0dbc600") + ) + (pin "1" + (uuid "1c447345-7b2d-4163-a3fe-8e39a6f8b529") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 208.28 167.64 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6ae627b4-d19f-4928-8bae-009d0c9e7123") + (property "Reference" "R5" + (at 208.28 165.1 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "220R" + (at 208.28 162.56 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 208.28 165.862 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 208.28 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 208.28 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "279-CRGCQ1206J220R" + (at 208.28 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 208.28 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 208.28 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "251c1065-b45c-4b33-8866-50f5a7b13a9f") + ) + (pin "1" + (uuid "10195b1e-527f-45dd-8608-1dbe044e1bca") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector_Generic:Conn_01x01") + (at 307.34 73.66 180) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "6f95ee96-9f0c-44d5-b33f-b06460e9b3c9") + (property "Reference" "J19" + (at 307.34 68.2457 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x01" + (at 307.34 70.6699 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 307.34 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 307.34 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 307.34 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 307.34 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 307.34 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 307.34 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8e2c7671-9751-4356-acc0-fb66f8fea071") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J19") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Regulator_Linear:LM7805_TO220") + (at 210.82 20.32 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "70337f41-dcc5-4ecc-a40d-c82eca24546d") + (property "Reference" "U9" + (at 210.82 13.97 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM7805CT" + (at 210.82 16.51 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 210.82 14.605 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.cn/PowerSolutions/document/MC7800-D.PDF" + (at 210.82 21.59 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 210.82 20.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "926-LM7805CT/NOPB" + (at 210.82 20.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 210.82 20.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 210.82 20.32 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "2703fb99-5b18-45d6-ab8d-6eb9902672ab") + ) + (pin "2" + (uuid "6c12d86e-7605-48aa-a7a3-a4ede19a2b6a") + ) + (pin "1" + (uuid "9baccc04-043a-4147-8de3-c5ed57ce99c9") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 45.72 190.5 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "725c821b-cb8a-41f6-a417-320579bdc408") + (property "Reference" "R8" + (at 41.91 186.69 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1K" + (at 44.45 186.69 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 47.498 190.5 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 45.72 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 45.72 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "CRCW12061K00JNEAC" + (at 45.72 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 45.72 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 45.72 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b9484aa5-de84-4f7f-8019-3a9eb3ca933b") + ) + (pin "1" + (uuid "cf29f854-6af7-45c1-9cca-73fece901c65") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:LED") + (at 31.75 177.8 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "72dbc197-f6d0-4e3b-8e57-a766302bba6d") + (property "Reference" "D3" + (at 35.56 178.1175 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "LED" + (at 35.56 180.6575 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Diode_SMD:D_1206_3216Metric" + (at 31.75 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 31.75 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 31.75 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "645-599-0220-007F" + (at 31.75 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 31.75 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 31.75 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "503a8963-3ef8-4836-9e0e-4f8de93e328b") + ) + (pin "1" + (uuid "89b8603c-dd77-4499-b8fa-3b5a549ac324") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "D3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Audio:PCM5102") + (at 198.12 241.3 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "73269b71-beaf-405b-b9b0-1dafd3f65c2c") + (property "Reference" "U5" + (at 196.85 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "PCM5102" + (at 193.04 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm" + (at 196.85 222.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/symlink/pcm5102.pdf" + (at 196.85 222.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 198.12 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "595-PCM5102APWR" + (at 198.12 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 198.12 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 198.12 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "5" + (uuid "b20adeb2-ca94-4358-aa54-142f68dcf810") + ) + (pin "8" + (uuid "1a987550-43a1-4a8b-95ff-c37c8b60ff52") + ) + (pin "2" + (uuid "605b7f77-f3b4-4329-bfef-cf43859639bf") + ) + (pin "6" + (uuid "4d2002c8-8422-45d7-85f6-122815de5ffb") + ) + (pin "14" + (uuid "b711428a-3159-4ade-87c4-511df6f24235") + ) + (pin "1" + (uuid "c175e35f-eac2-404a-bb48-55d84e1fe9aa") + ) + (pin "13" + (uuid "97d44bfe-93a9-49e9-ab1e-e76d326c7ab3") + ) + (pin "9" + (uuid "c17904bf-a419-4a26-b19a-9ebd2204e8f0") + ) + (pin "10" + (uuid "a1829c2e-b6fb-4818-b355-4dce2f2d5367") + ) + (pin "11" + (uuid "51012e24-46b2-44eb-93df-20f45567b28c") + ) + (pin "12" + (uuid "35baa930-5bbf-465e-978b-c24e96bc2ba5") + ) + (pin "3" + (uuid "7828900d-dc89-41b6-81a3-0278ddf6f1b5") + ) + (pin "16" + (uuid "a3680923-bce3-4a4a-951b-d69c4aff339f") + ) + (pin "19" + (uuid "13e9197f-cfcf-49e6-9de1-92c60fa2fe8c") + ) + (pin "7" + (uuid "72645e00-b461-48a6-9e23-c1688ab53cc1") + ) + (pin "4" + (uuid "74e1307a-4a63-4f41-a0cb-305f5032bda2") + ) + (pin "15" + (uuid "54afd196-dcf6-4b40-8e26-9668de7234e0") + ) + (pin "20" + (uuid "c44201f9-e230-461e-beca-ad3e99848627") + ) + (pin "17" + (uuid "321ad53d-a063-4ec3-8f00-4acaa2a8d3aa") + ) + (pin "18" + (uuid "e145ec5b-b586-486f-871e-12c18f4fc7b5") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector_Audio:AudioJack3_SwitchTR") + (at 245.11 182.88 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "74df9d20-18b2-4f4f-a352-38b7fd9a6a07") + (property "Reference" "J16" + (at 243.205 174.9257 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Mic_In" + (at 243.205 177.3499 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:Jack_3.5mm_STX-3081_Horizontal" + (at 245.11 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 245.11 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 245.11 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "490-SJ1-3515N " + (at 245.11 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 245.11 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 245.11 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "RN" + (uuid "a99a42bc-0ce3-4801-8d5b-2cf511f5d15a") + ) + (pin "T" + (uuid "a4f66af5-5f6f-4a06-a007-7f7ab0adac0e") + ) + (pin "S" + (uuid "d099f1d5-52d3-4b58-81d7-672a9a80c7d0") + ) + (pin "R" + (uuid "835c1f6e-f102-4add-83ca-3b5c9898bc01") + ) + (pin "TN" + (uuid "444dfc78-b262-4e20-978c-9479d658599b") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J16") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector_Audio:AudioJack3_SwitchTR") + (at 269.24 234.95 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "760b170d-c028-47c1-8be8-24c0e5b09144") + (property "Reference" "J14" + (at 271.145 242.9043 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Rec_Out" + (at 271.145 240.4801 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:Jack_3.5mm_STX-3081_Horizontal" + (at 269.24 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 269.24 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 269.24 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "490-SJ1-3515N " + (at 269.24 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 269.24 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 269.24 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "RN" + (uuid "cde70b3b-1073-48b7-8734-215e016e4db0") + ) + (pin "T" + (uuid "17d18100-5d67-45c8-9157-6130595d4df2") + ) + (pin "S" + (uuid "21b5e927-5307-472f-89ed-c20ec978568d") + ) + (pin "R" + (uuid "d9404784-859b-4bcf-9a2d-eb9fba5b2907") + ) + (pin "TN" + (uuid "b5ea5e61-90d5-4f21-96f1-bba097af3692") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J14") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 210.82 264.16 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "768c65ff-675c-4948-b011-07f19dd17e2e") + (property "Reference" "#PWR037" + (at 210.82 270.51 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 214.63 266.7 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 210.82 264.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 210.82 264.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 210.82 264.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5f79e464-4012-4e0c-b687-5d0e51cddd3a") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR037") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 236.22 227.33 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "76950595-98c0-4812-bc47-3c883eede832") + (property "Reference" "C34" + (at 239.141 226.1179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "2.2nF" + (at 239.141 228.5421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 237.1852 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 236.22 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 236.22 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "80-C1206C222K5RAC" + (at 236.22 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 236.22 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 236.22 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "938d14bd-94b1-4d97-aae3-3525c76a84b4") + ) + (pin "2" + (uuid "0c31f110-ba62-4335-aeb8-69cfc04b2788") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C34") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41:IDC_2x5") + (at 191.77 170.18 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "77f861e2-eb49-403d-acaf-9d702f00110d") + (property "Reference" "J7" + (at 193.04 159.6857 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Display" + (at 193.04 162.1099 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x05_P2.54mm_Vertical" + (at 191.77 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 191.77 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 191.77 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 191.77 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "A-2939" + (at 191.77 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 191.77 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ef12d97c-4925-4ab7-af1d-85d2d0df222b") + ) + (pin "9" + (uuid "f4e43a59-38d4-4144-ac59-f4d77d500137") + ) + (pin "1" + (uuid "7839f111-d398-4ca0-b412-d17eb80e81a1") + ) + (pin "6" + (uuid "115aa4ba-8ecc-4a1a-bab7-ce3778f67c31") + ) + (pin "4" + (uuid "c93bf54e-4609-44ac-afe8-b91ee26b4c8e") + ) + (pin "5" + (uuid "6fcd61c3-fc0a-44ec-a397-acc399d8e6f3") + ) + (pin "3" + (uuid "2e422c3a-760e-40c8-a10b-60736bd03948") + ) + (pin "10" + (uuid "f5e74fc2-8664-4035-8f1d-ad7c15bbc8c1") + ) + (pin "8" + (uuid "5f76aab2-cbe9-4063-9c88-31b8d8f596af") + ) + (pin "7" + (uuid "81516e11-3dcc-42b2-b3e0-478da4780ccc") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 40.64 224.79 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7ba304df-37ef-49f1-8f7c-f115152db1b2") + (property "Reference" "C23" + (at 33.02 222.25 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 27.94 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 41.6052 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 40.64 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 40.64 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "C1206C104K5RACTU" + (at 40.64 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 40.64 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 40.64 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f0fdc80c-d08c-4077-ac6d-3facff9870a2") + ) + (pin "1" + (uuid "fd2b7ded-9529-4e3a-a26e-989f7c203475") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C23") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41:IDC_2x3") + (at 160.02 163.83 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "7cfaae50-aa0f-4202-bab8-d65d21b19a00") + (property "Reference" "J23" + (at 162.052 161.3479 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "Ethernet" + (at 162.052 163.7721 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x03_P2.54mm_Vertical" + (at 160.02 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 157.48 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 160.02 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "710-61200621621" + (at 160.02 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 160.02 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 160.02 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "6" + (uuid "56279976-1515-4c41-a387-0a41a1c85063") + ) + (pin "2" + (uuid "8dadec33-f823-484a-a58f-5eacbd60e3b6") + ) + (pin "4" + (uuid "d028ed33-590b-4f9e-b906-56763bbbfd92") + ) + (pin "1" + (uuid "3d7ab75d-c346-4e2a-8cb4-dd5d94fd3c8a") + ) + (pin "3" + (uuid "05101d81-8c04-496f-9276-4894a151ba2a") + ) + (pin "5" + (uuid "1656dde1-cc04-4184-b82b-c0f95f3b0eab") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J23") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41:IDC_2x5") + (at 48.26 114.3 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "7fba9b0a-f038-4eaf-8072-bda16c8c42f9") + (property "Reference" "J11" + (at 49.53 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "ENCODER" + (at 49.53 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x05_P2.54mm_Vertical" + (at 48.26 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 48.26 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 48.26 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 48.26 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "A-2939" + (at 48.26 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 48.26 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5f19288e-bf0e-4b6a-bda7-52a8821fed84") + ) + (pin "9" + (uuid "9b9e636b-729c-4bfb-83c5-1e553e0a2244") + ) + (pin "1" + (uuid "cc174f77-c2c8-4be0-b295-0419f1571f24") + ) + (pin "6" + (uuid "f98c20a7-0079-4361-9cde-ef2b362a96f7") + ) + (pin "4" + (uuid "f67c27aa-8ce3-4bb2-aea7-aa76ba36c936") + ) + (pin "5" + (uuid "6764f26e-7813-4c9f-b260-64fab26750df") + ) + (pin "3" + (uuid "faa97c44-2d0e-4ef6-94ea-cd9c629e9d88") + ) + (pin "10" + (uuid "d618ff00-0390-44ea-8699-c87300065518") + ) + (pin "8" + (uuid "b8cbc909-aa54-4e2f-a9a1-1344af587a12") + ) + (pin "7" + (uuid "ce17723b-ad16-4a6c-8d9b-7c2007e019e9") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector_Generic:Conn_01x02") + (at 306.07 33.02 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "80f108ad-e5c0-4b08-a4f5-6e2f9f5cdf44") + (property "Reference" "J1" + (at 306.07 25.0657 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "+12V" + (at 306.07 27.4899 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:PinHeader_1x02_P5.08mm_Vertical" + (at 306.07 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 306.07 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 306.07 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 306.07 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "A-662" + (at 306.07 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 306.07 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b267b1ec-ced3-4e0e-ab9c-9102eb688a52") + ) + (pin "2" + (uuid "96e6ad28-f12c-4139-a8a1-a30cc455c910") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 72.39 227.33 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "8433829e-6d49-43b2-97b9-33fe9bb30fe0") + (property "Reference" "#PWR023" + (at 72.39 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 72.39 232.41 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 72.39 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 72.39 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 72.39 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5eac83fa-13fc-4b56-8d95-6760c0d4a134") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR023") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 208.28 209.55 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "849e1db9-5cbf-4748-a45b-b9538c59d6bb") + (property "Reference" "#PWR032" + (at 208.28 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 210.82 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 208.28 209.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 208.28 209.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 208.28 209.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "eb01b8bf-04c0-4aae-8703-56aec6d32b0d") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR032") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 203.2 125.73 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "85892485-2b44-4101-950b-6edb17951a92") + (property "Reference" "#PWR043" + (at 203.2 132.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 203.2 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 203.2 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 203.2 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 203.2 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "32186749-9d1d-4a41-9694-7f3a685809fc") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR043") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 314.96 33.02 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "85aa4352-fd18-4642-9b2a-6256c33b7c86") + (property "Reference" "#PWR057" + (at 314.96 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 314.96 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 314.96 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 314.96 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 314.96 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "709f7c58-53f5-424e-b596-23e2388e836b") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR057") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector_Generic:Conn_01x01") + (at 307.34 83.82 180) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "85bd22ba-1dab-44c0-95f3-c2d9562b4eac") + (property "Reference" "J20" + (at 307.34 78.4057 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x01" + (at 307.34 80.8299 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 307.34 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 307.34 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 307.34 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 307.34 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 307.34 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 307.34 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b7bd53b1-9aa9-4aa4-a572-ac3111b2808b") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J20") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 181.61 146.05 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "89cbad2e-77d2-4d4d-8eae-888c7371a1c2") + (property "Reference" "#PWR049" + (at 181.61 152.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 181.61 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 181.61 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 181.61 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 181.61 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3a70daf0-6c77-465c-aea3-e7f6a249d1e1") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR049") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 85.09 251.46 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8ff7c292-c2ec-44a4-8bc6-f0b37e68c73d") + (property "Reference" "R12" + (at 87.63 251.46 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100R" + (at 90.17 251.46 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 86.868 251.46 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 85.09 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 85.09 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "652-CR1206FX-1000ELF" + (at 85.09 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 85.09 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 85.09 251.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "15e7ec2a-2ae4-4e0c-8ab5-507f290bee0b") + ) + (pin "1" + (uuid "85311655-873b-4e6d-b3cb-28dfd72dd2ee") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R12") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41:PCM1808PW") + (at 95.25 236.22 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "91127158-12cf-4f8c-8141-e4fca249e398") + (property "Reference" "U6" + (at 95.25 220.98 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "PCM1808PW" + (at 95.25 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:TSSOP-14_4.4x5mm_P0.65mm" + (at 95.25 250.19 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/pcm1808.pdf" + (at 95.25 254 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 95.25 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "595-PCM1808PW" + (at 95.25 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 95.25 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 95.25 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "13" + (uuid "0ba48d06-b7a7-4775-8495-2cdb55d8d536") + ) + (pin "14" + (uuid "591de6d7-f2ea-422b-839e-77621df9f70f") + ) + (pin "12" + (uuid "2fb4224b-7509-4ab2-a087-4299c445ca2f") + ) + (pin "2" + (uuid "f35bee71-840f-4d76-8241-61629034a9cc") + ) + (pin "3" + (uuid "0d3351a1-ccf6-4fcd-9cfb-0cda1f4bc90e") + ) + (pin "10" + (uuid "c9b12f8d-b36c-4bff-b602-84cba941414d") + ) + (pin "1" + (uuid "6ce70cd0-4357-436e-af39-f1434a724fba") + ) + (pin "5" + (uuid "996874fc-ecc9-4a4f-8d9f-b561ba621f93") + ) + (pin "4" + (uuid "0c74a4d7-dafb-4aec-a0a1-26225ba8ce8f") + ) + (pin "11" + (uuid "23e3b2f1-cde1-4d13-a1c1-cc3211b26753") + ) + (pin "7" + (uuid "a79f3cb4-4421-457b-a181-67e028393930") + ) + (pin "9" + (uuid "0ee5b60d-6651-448f-9396-86cee3b9c158") + ) + (pin "8" + (uuid "41fda257-7afd-454e-b206-1af8bc8d659f") + ) + (pin "6" + (uuid "4a2121bb-8ecf-485f-b918-412fa9d654d9") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole_Pad") + (at 361.95 57.15 270) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "9261f4c5-839a-4c33-a065-5a90ba320edf") + (property "Reference" "H5" + (at 365.76 57.15 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "~" + (at 365.76 58.3621 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "MountingHole:MountingHole_4.3mm_M4_DIN965_Pad" + (at 361.95 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 361.95 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 361.95 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 361.95 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 361.95 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 361.95 57.15 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fd4342f9-9f35-41f8-808f-009640104266") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "H5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 45.72 236.22 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "93d7474e-0100-402d-bd3b-1066fd889dac") + (property "Reference" "#PWR019" + (at 45.72 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 48.26 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 45.72 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 45.72 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 45.72 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "15bad419-a2c1-48da-ae2a-25c1d973bf3a") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR019") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 210.82 260.35 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "95fc2c1a-24d2-4cfc-ae61-c1b23a2bde24") + (property "Reference" "C28" + (at 213.36 260.35 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "2.2uF 16V" + (at 212.09 262.89 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 211.7852 264.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 210.82 260.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 210.82 260.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "80-C1206C225K5R" + (at 210.82 260.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 210.82 260.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 210.82 260.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "59f7afe9-a436-4e89-9cfc-e4244392c3b6") + ) + (pin "1" + (uuid "f4b7f49b-b7a7-4bea-9588-b52b00c5c8d9") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C28") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 50.8 240.03 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "964ab0c0-a191-4437-ae5f-33ff2ec83d1b") + (property "Reference" "C18" + (at 54.61 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10uF 16V" + (at 54.61 241.3 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 51.7652 243.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 50.8 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 50.8 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "80-C1206C106K4P" + (at 50.8 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 50.8 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 50.8 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "6ce42bf1-85c7-44af-b2c0-0ba4d17b871e") + ) + (pin "1" + (uuid "6edfafe3-360a-4b41-872b-1c420a369248") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C18") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 154.94 34.29 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "978244e4-b245-4808-b800-43572ad096ee") + (property "Reference" "L2" + (at 153.67 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "10uH 20%" + (at 166.37 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Inductor_SMD:L_Bourns-SRN6028" + (at 154.94 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 154.94 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 154.94 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "81-1264EY-100MP3" + (at 154.94 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 154.94 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 154.94 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "be6bcc21-ddc9-45eb-81c3-a7a2ae2043ee") + ) + (pin "2" + (uuid "7a4d9cb3-90d8-4eec-aa16-bea91316552c") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_01x03_Socket") + (at 200.66 189.23 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "97a6986c-5ad2-46f6-9170-91ba6c1577ab") + (property "Reference" "J8" + (at 201.93 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Display Voltage" + (at 201.93 187.96 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" + (at 200.66 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 200.66 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 200.66 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 200.66 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 200.66 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 200.66 189.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1ed93035-380d-4ef8-9a3b-ae05c64cd235") + ) + (pin "1" + (uuid "f90537ee-366c-4abe-836b-c9815cd8b194") + ) + (pin "3" + (uuid "b471f1f0-3b33-441b-a5fc-4dd27700ca02") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 87.63 175.26 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9830c855-4273-4ad3-8c09-845df975b5f2") + (property "Reference" "#PWR066" + (at 87.63 181.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 83.82 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 87.63 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 87.63 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 87.63 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "94119294-735c-4026-bbbe-a1e6ba1afacd") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR066") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:LED") + (at 60.96 177.8 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9cbc6729-70ae-448e-9714-02e3f31ccd5f") + (property "Reference" "D4" + (at 64.77 177.8 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "LED" + (at 64.77 180.6575 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Diode_SMD:D_1206_3216Metric" + (at 60.96 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 60.96 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 60.96 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "645-599-0220-007F" + (at 60.96 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 60.96 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 60.96 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b34e11f5-52e9-404f-8a22-561fb07fbf37") + ) + (pin "1" + (uuid "fc428ab1-9832-4b58-89da-a19945301708") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "D4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole_Pad") + (at 361.95 62.23 270) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "a09693b5-bc9a-478b-8f96-8eee23b0219a") + (property "Reference" "H6" + (at 365.76 62.23 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "~" + (at 365.76 63.4421 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "MountingHole:MountingHole_4.3mm_M4_DIN965_Pad" + (at 361.95 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 361.95 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 361.95 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 361.95 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 361.95 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 361.95 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f3c13bfd-bd47-455c-849e-91c6447355f7") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "H6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 264.16 59.69 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "a1686572-9323-403b-87cf-f144e61430ee") + (property "Reference" "#PWR07" + (at 264.16 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 264.16 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 264.16 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 264.16 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 264.16 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e3e18a98-c02d-4fe2-8ce3-978058dd97a5") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR07") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 158.75 88.9 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a1a1ac29-07aa-49f5-9be1-84baf5aff465") + (property "Reference" "C11" + (at 162.56 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 160.02 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 159.7152 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 158.75 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 158.75 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "C1206C104K5RACTU" + (at 158.75 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 158.75 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 158.75 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "16bf3072-96e5-45f6-bf39-206dfbf83e0e") + ) + (pin "1" + (uuid "78fd77c2-0abd-4667-8dd0-7a46e2606f08") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 185.42 186.69 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a56a1cf2-28ad-4934-8593-9c970eab29a6") + (property "Reference" "#PWR047" + (at 185.42 190.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 185.42 182.88 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 185.42 186.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 185.42 186.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 185.42 186.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "2bbfeb65-a17b-455a-8cd1-e034dc38df43") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR047") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C_Polarized") + (at 222.25 41.91 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "abbf3a1f-cc73-40d3-9eae-4da5531c2e00") + (property "Reference" "C1" + (at 226.06 39.751 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "470uF 25V" + (at 226.06 42.291 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_THT:CP_Radial_D10.0mm_P5.00mm" + (at 223.2152 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 222.25 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 222.25 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "667-ECA-1EM471" + (at 222.25 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 222.25 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 222.25 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "44329590-9fc4-40fa-8e18-c93b6e6bc50a") + ) + (pin "1" + (uuid "fdb88386-193b-49c4-8922-c987a4bd2893") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 259.08 238.76 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "abde7426-de07-4efe-8e48-cd8d6766ffd6") + (property "Reference" "#PWR027" + (at 259.08 245.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 257.81 242.57 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 259.08 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 259.08 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 259.08 238.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "821338f3-28fc-49e2-9379-a77721bd720b") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR027") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 175.26 177.8 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ac1f4fd7-7776-4a5e-9336-95046aa8f325") + (property "Reference" "C12" + (at 179.07 176.53 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10uF 16V" + (at 176.53 180.34 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 176.2252 181.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 175.26 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 175.26 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "80-C1206C106K4P" + (at 175.26 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 175.26 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 175.26 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f5dcc65c-681a-40f8-9a48-a7605cd5d3a3") + ) + (pin "1" + (uuid "28422591-cc89-401c-b63e-28ac43602d4b") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C12") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 171.45 248.92 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ad2912aa-d806-4ba9-b7ef-789f54368b8c") + (property "Reference" "R7" + (at 171.45 246.38 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "2K2" + (at 171.45 243.84 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 171.45 247.142 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 171.45 248.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 171.45 248.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "CRCW12062K20JNEAC" + (at 171.45 248.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 171.45 248.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 171.45 248.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1afbcd00-741a-4390-94c9-6b50c6062030") + ) + (pin "1" + (uuid "8508b1aa-24b0-4c00-a03c-2565f6178ad9") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 177.8 170.18 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "adaac335-f179-44a2-849e-7d3093795bba") + (property "Reference" "R4" + (at 177.8 167.64 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "220R" + (at 177.8 165.1 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 177.8 168.402 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 177.8 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 177.8 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "279-CRGCQ1206J220R" + (at 177.8 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 177.8 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 177.8 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5a0bc03b-ca63-48b1-8a2e-3db6099931b8") + ) + (pin "1" + (uuid "326edac3-adfd-42f5-8006-2dd10c92107b") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 323.85 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ae5ee808-4e4f-4405-8334-a97fe422b1f2") + (property "Reference" "#PWR061" + (at 323.85 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 323.85 77.7931 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 323.85 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 323.85 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 323.85 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "924d51bc-f1f7-44fc-abd2-421bdfe1b2b3") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR061") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 128.27 43.18 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b22b4591-7616-411d-9d77-b36e2c51f81f") + (property "Reference" "R1" + (at 130.81 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10K" + (at 130.81 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 126.492 43.18 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 128.27 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 128.27 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "CRCW120610K0FKEB" + (at 128.27 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 128.27 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 128.27 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d8beb851-4379-40f8-a654-10201eb6fcee") + ) + (pin "1" + (uuid "6bb1baa6-1152-4d9a-8113-f6891d247390") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:L") + (at 251.46 59.69 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b2858ee3-b68b-4fcb-afd3-6bc6da45cd05") + (property "Reference" "L3" + (at 251.46 54.61 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10uH 20%" + (at 251.46 57.15 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Inductor_SMD:L_Bourns-SRN6028" + (at 251.46 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 251.46 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 251.46 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "81-1264EY-100MP3" + (at 251.46 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 251.46 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 251.46 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "320f005b-acba-4c9a-a693-a70f65d917d9") + ) + (pin "2" + (uuid "cbc44ee1-8305-46bd-92aa-ca5e96138556") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "L3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 322.58 53.34 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b346306a-5ab6-4aa4-9c35-6a7e54e470ea") + (property "Reference" "#PWR026" + (at 322.58 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 322.58 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 322.58 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 322.58 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 322.58 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "2c281adc-9406-4752-9f0b-4df7583d7ee9") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR026") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 210.82 27.94 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b66e9758-3181-443e-8b6d-fc58b67666ee") + (property "Reference" "#PWR062" + (at 210.82 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 213.36 29.21 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 210.82 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 210.82 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 210.82 27.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "860e6b39-80be-4187-a320-63b46a6611ed") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR062") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 306.07 58.42 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b7f0cda8-f943-4dde-a0fa-349572e4bc94") + (property "Reference" "#PWR025" + (at 306.07 64.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 306.07 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 306.07 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 306.07 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 306.07 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6cb5121b-c231-4b28-9be6-674a8d24f80e") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR025") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 240.03 41.91 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "bc6ef2cb-a847-4253-b06d-215e6d6af04a") + (property "Reference" "C2" + (at 243.84 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 243.84 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 240.9952 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 240.03 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 240.03 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "C1206C104K5RACTU" + (at 240.03 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 240.03 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 240.03 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "1911a329-3138-421e-a60a-e1fbbd818077") + ) + (pin "1" + (uuid "77af9959-3811-4475-9b28-0446fbd54778") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Transistor_FET:IRF4905") + (at 142.24 43.18 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "be5997e2-6c82-4a9f-ad38-eac7aa5e5993") + (property "Reference" "Q4" + (at 139.954 34.544 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "SUP90P06-09L" + (at 138.938 36.576 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 140.335 38.1 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.com/pdf/datasheet/fqp47p06-d.pdf" + (at 142.24 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "" + (at 142.24 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 142.24 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 142.24 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 142.24 43.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "49a3dce0-1aa5-4725-b25c-417dc76eb2ee") + ) + (pin "3" + (uuid "4ee43b3a-2b5d-4f53-92cb-26a5d293824b") + ) + (pin "1" + (uuid "8cabd143-ed60-4282-9c66-3ab7122539e3") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "Q4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 45.72 173.99 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c0234e41-f097-48c0-8a15-58f9da8314d5") + (property "Reference" "#PWR04" + (at 45.72 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 45.72 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 45.72 173.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 45.72 173.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 45.72 173.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "79a6ba68-684f-4ed5-8d3e-fd04aae757cb") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR04") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Regulator_Linear:LM7805_TO220") + (at 210.82 38.1 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c18341db-0b6a-426c-a143-af24ef423f00") + (property "Reference" "U1" + (at 210.82 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM7805CT" + (at 210.82 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 210.82 32.385 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.onsemi.cn/PowerSolutions/document/MC7800-D.PDF" + (at 210.82 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 210.82 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "926-LM7805CT/NOPB" + (at 210.82 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 210.82 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 210.82 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "33a774f5-2bd1-44dc-b1ca-1ff586e7ad73") + ) + (pin "2" + (uuid "3c284809-ec9f-4fda-9b6a-ea325f4881c1") + ) + (pin "1" + (uuid "58463ff0-fbd7-4c76-997c-be6556632ad9") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 194.31 38.1 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c44c51e7-8e1c-49a6-9bf6-fecd02692bf4") + (property "Reference" "#PWR012" + (at 194.31 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 194.31 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 194.31 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 194.31 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 194.31 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7a0eb818-4de2-460d-a2fa-09a18aa86b42") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR012") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 156.21 209.55 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c56f9723-e98e-4143-bac7-d1722fb1f709") + (property "Reference" "#PWR030" + (at 156.21 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 158.75 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 156.21 209.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 156.21 209.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 156.21 209.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e4427925-2326-4cf3-bc26-1d197c7dbc00") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR030") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 314.96 30.48 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c57ef3dd-ae59-4baf-bae5-37103f1e86ef") + (property "Reference" "#PWR055" + (at 314.96 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 314.96 25.4 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 314.96 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 314.96 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 314.96 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b6d3f4fb-9a1c-425b-bc5c-05aa3fd0f932") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR055") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 228.6 67.31 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c645da4c-81a4-40c8-bb9e-d5919b1a7835") + (property "Reference" "#PWR09" + (at 228.6 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 228.6 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 228.6 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 228.6 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 228.6 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0aaf0566-a848-4fb4-a8f7-6cb59593bffa") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR09") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41:IDC_2x3") + (at 80.01 165.1 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c66e74fc-65dc-4547-aed1-c27c3ac6634c") + (property "Reference" "J24" + (at 82.042 162.6179 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "USBHost" + (at 82.042 165.0421 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x03_P2.54mm_Vertical" + (at 80.01 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 77.47 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 80.01 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "710-61200621621" + (at 80.01 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 80.01 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 80.01 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "6" + (uuid "80f56192-a530-4af8-81e6-3f3b37f6e2cd") + ) + (pin "2" + (uuid "1cc7b23a-96aa-4476-b788-0bff04a06dfd") + ) + (pin "4" + (uuid "96584c41-b262-4b59-8381-79f4f3169372") + ) + (pin "1" + (uuid "bb13ebc9-a7ad-48f9-bb47-dbf31aac1d63") + ) + (pin "3" + (uuid "e3ee5539-a8fc-49d8-be50-b746552a48e8") + ) + (pin "5" + (uuid "82d180c6-6efe-45c5-9ec6-4451f5b9f9c5") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J24") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+12V") + (at 306.07 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c840b78f-ce59-468a-abcb-036938a9bc41") + (property "Reference" "#PWR024" + (at 306.07 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+12V" + (at 306.07 40.64 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 306.07 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 306.07 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 306.07 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5223b46f-d450-4f7f-93f2-9cf8e51e74d2") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR024") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+3V3") + (at 181.61 209.55 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c88df2a5-08a3-40cb-95a3-bfc5090ec968") + (property "Reference" "#PWR035" + (at 181.61 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3V3" + (at 184.15 207.01 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 181.61 209.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 181.61 209.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 181.61 209.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "86cfce66-9b00-4618-9af9-fcd53ad17448") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR035") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 179.07 215.9 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c8e9029e-e013-446d-b299-50c3a90b24b5") + (property "Reference" "C24" + (at 172.72 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 168.91 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 180.0352 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 179.07 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 179.07 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "C1206C104K5RACTU" + (at 179.07 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 179.07 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 179.07 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d00e8fe8-7efa-49fc-be08-1d01483c1574") + ) + (pin "1" + (uuid "fdf6931f-0721-411f-9c30-f223a4e77abd") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C24") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 182.88 219.71 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "cb1f2572-3f94-44e7-b2e3-43d7008520f3") + (property "Reference" "#PWR034" + (at 182.88 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 182.88 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 182.88 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 182.88 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 182.88 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "de945683-f06e-4460-aef7-6b310654a676") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR034") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 210.82 219.71 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ccd52c5a-7d7a-4434-a982-0910ef9c530e") + (property "Reference" "#PWR033" + (at 210.82 226.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 210.82 224.79 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 210.82 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 210.82 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 210.82 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ef3226e9-11ad-473c-a408-0cabd1e0cf70") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR033") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 226.06 259.08 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ccfb07e8-18cc-4b86-8f92-9d83e95c222e") + (property "Reference" "#PWR036" + (at 226.06 265.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 226.06 264.16 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 226.06 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 226.06 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 226.06 259.08 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "03508cc9-4cc7-42ae-b754-c382536a7df4") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR036") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41:Teensy4.1") + (at 116.84 146.05 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "cd7159d6-1211-4e8a-b6c4-524f929682cd") + (property "Reference" "U8" + (at 116.84 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Teensy4.1" + (at 116.84 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:Teensy41" + (at 106.68 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 106.68 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 116.84 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 116.84 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 116.84 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "TEENSY41" + (at 116.84 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "38" + (uuid "79d6abc8-3acb-4a71-a78b-f342d64e4f13") + ) + (pin "61" + (uuid "62113e69-c785-45bf-9487-8d6887cfcb51") + ) + (pin "47" + (uuid "14b0d13d-b294-47b2-a09a-06d4fcf10e4b") + ) + (pin "9" + (uuid "84734a58-5e4a-4140-a4d5-02cb7c3e2e2b") + ) + (pin "18" + (uuid "509b2268-058c-40c3-9c79-2b67d7155d17") + ) + (pin "19" + (uuid "6defa762-c3cb-430b-8b5e-b467ad5e2d27") + ) + (pin "33" + (uuid "08441aa7-9176-4a7e-9988-cb7f1eea3499") + ) + (pin "7" + (uuid "245f6c57-6890-4856-9e68-4407c9f6eb43") + ) + (pin "3" + (uuid "9bcd5e3d-eb8d-4a09-8562-ec67c593fb8d") + ) + (pin "42" + (uuid "90ad113a-5012-429c-946f-865f6c085811") + ) + (pin "35" + (uuid "645e44eb-2392-4860-8b12-d53806e5447b") + ) + (pin "37" + (uuid "83472a33-0483-43ee-bdef-22b941724b79") + ) + (pin "24" + (uuid "cbb40062-01ee-4795-9d0d-39c04bbcf6af") + ) + (pin "31" + (uuid "22d83ad7-d7f2-41f1-855a-0ba8ff3798fa") + ) + (pin "15" + (uuid "6e163a82-365a-451f-81c7-0daf5d03e1b6") + ) + (pin "14" + (uuid "24d1fca7-cb9c-4388-bb9b-2b4cbdf9624d") + ) + (pin "8" + (uuid "ec11a79d-cfcd-4807-afb4-699c536ef888") + ) + (pin "63" + (uuid "21c31415-6ed5-4429-b9a9-5217919e37d7") + ) + (pin "17" + (uuid "c25eaca5-7577-4823-9325-f0c25ab3e404") + ) + (pin "10" + (uuid "8ef49a54-ed86-48fe-9261-05702b66d7d5") + ) + (pin "27" + (uuid "651e8690-27e4-429a-83e6-162e6f7af082") + ) + (pin "34" + (uuid "3ee5d135-389f-41d8-962d-22754d9b80cf") + ) + (pin "16" + (uuid "71be891d-6d83-4524-aabd-54eb7756906a") + ) + (pin "28" + (uuid "9b9db1e5-ab8f-4b71-8065-f88e20c77dc2") + ) + (pin "13" + (uuid "97a3ef3c-d586-48aa-8a2e-942fa5e2dd17") + ) + (pin "6" + (uuid "cef375ed-06e2-4f3e-842b-0504e85532d5") + ) + (pin "23" + (uuid "6ca199fc-a516-419c-8fd0-ef9194ea4b5e") + ) + (pin "25" + (uuid "e6f99728-94da-47ba-803f-3c8948cf9d2f") + ) + (pin "22" + (uuid "95f9f981-a094-411c-a25e-ad2e5876c3e7") + ) + (pin "20" + (uuid "664cbc04-055b-4a76-bd6f-d3df34678382") + ) + (pin "2" + (uuid "462c2874-b509-4205-bb4f-e255d605914a") + ) + (pin "29" + (uuid "61f8e172-108b-490b-a977-fff508940695") + ) + (pin "11" + (uuid "db501c9c-6318-435a-9476-de47252b463a") + ) + (pin "60" + (uuid "c1661b3e-2171-4260-9d47-8f0ddb6a17e0") + ) + (pin "26" + (uuid "aa804c32-3e84-4b47-a555-09462ee2bc91") + ) + (pin "21" + (uuid "6cd33f98-b7fb-4b40-96e8-2d8c723f9b8b") + ) + (pin "43" + (uuid "17184fc5-08ed-4608-8494-ee7a6f0c7032") + ) + (pin "32" + (uuid "2a64f04d-b582-4d0c-ac33-74e0db1cfa21") + ) + (pin "62" + (uuid "7c2b5e04-f907-4471-a3af-8f72b4174ebd") + ) + (pin "36" + (uuid "8850b049-9661-469e-9358-48d6b15d7f01") + ) + (pin "4" + (uuid "1499264a-e9d3-4171-b8ba-388a1f7d9ad1") + ) + (pin "41" + (uuid "0e78b325-a044-47b4-8eaf-5efee3eb1280") + ) + (pin "39" + (uuid "1d818f37-43a9-4839-8481-d0c0d00f5179") + ) + (pin "44" + (uuid "7ba7252c-df38-4b7c-9b2d-87369558d6c3") + ) + (pin "40" + (uuid "16d76d5d-76a4-4a48-b59e-c4db099e539a") + ) + (pin "58" + (uuid "f8ea81a5-5b75-4380-88ef-358213d52a92") + ) + (pin "12" + (uuid "66d243a9-3613-4635-86aa-596dd8e546fe") + ) + (pin "30" + (uuid "83fb9ef5-932a-4a51-9da5-3f18a36f553f") + ) + (pin "46" + (uuid "81cfe92e-62d2-41df-80af-65f2fb4f3695") + ) + (pin "1" + (uuid "056a5f39-50bc-489a-8f45-aea0f9688a38") + ) + (pin "65" + (uuid "e1b845bd-0faa-4c33-a0fc-f17ecd92ac43") + ) + (pin "45" + (uuid "27ec0422-4885-4137-8747-ac8536ecf435") + ) + (pin "64" + (uuid "fe687732-c8c6-4dcb-9c74-cca9ae055d42") + ) + (pin "57" + (uuid "2098e4ca-0790-479f-a890-008604a2bd2e") + ) + (pin "55" + (uuid "61220229-fbd9-4c0f-8260-5eb8b11b5998") + ) + (pin "48" + (uuid "c33db9f5-45b4-4430-8b53-c52daf28309a") + ) + (pin "56" + (uuid "4f9e6311-5a50-41c4-a200-d3ef2a662ad5") + ) + (pin "5" + (uuid "fd06b163-6105-4c2a-bf7f-2a949de52cc0") + ) + (pin "59" + (uuid "f608ae85-a2a2-425d-a20a-5fc1b4f661c2") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 220.98 233.68 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ce92d987-e9e2-40d2-84dc-53c321021ff6") + (property "Reference" "R10" + (at 220.98 236.22 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "470R" + (at 220.98 238.76 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 220.98 235.458 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 220.98 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 220.98 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "CRCW1206470RJNEAC" + (at 220.98 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 220.98 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 220.98 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "2b4f674b-7ee3-4796-b848-07da4273fc34") + ) + (pin "1" + (uuid "4e58de1b-5214-4da4-8891-7a5972699003") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 111.76 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ced616dd-d5a2-4fe5-809d-22f3facbc8d7") + (property "Reference" "C5" + (at 115.57 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "1uF 50V" + (at 115.57 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 112.7252 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 111.76 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 111.76 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "187-CL31B105KBHNNNE" + (at 111.76 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 111.76 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 111.76 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b41bd380-583f-47b4-8ad3-43ec768f38c8") + ) + (pin "1" + (uuid "58052d73-959b-4a95-a7c4-fd52e055819f") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 161.29 62.23 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "d02193b4-5d09-4de3-be9d-5c17f0f4f0f1") + (property "Reference" "R16" + (at 163.068 61.0179 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "100k" + (at 163.068 63.4421 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 159.512 62.23 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 161.29 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 161.29 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "71-CRCW1206100KFKEB" + (at 161.29 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 161.29 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 161.29 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "56caface-2db5-492c-876f-05b2537882dd") + ) + (pin "2" + (uuid "e1711c82-0112-4103-a834-29f52f97ff2c") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R16") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 73.66 52.07 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d199a61b-5ed8-4d9c-b6c0-65a8751e4408") + (property "Reference" "C10" + (at 81.28 50.8 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 81.28 48.26 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 77.47 51.1048 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 73.66 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 73.66 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "C1206C104K5RACTU" + (at 73.66 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 73.66 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 73.66 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "ea621965-380b-4b38-a299-ced01fd1273b") + ) + (pin "1" + (uuid "0a86feda-85eb-45b3-bd2b-a231b318b1bb") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41:Teensy_Audio_Adaptor") + (at 262.89 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board no) + (dnp no) + (uuid "d21c1a65-0f6f-47cc-9588-53831cb1238e") + (property "Reference" "U7" + (at 266.7 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Teensy_Audio_Adaptor" + (at 256.54 120.65 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at 252.73 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 252.73 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 262.89 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 262.89 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "A-4662" + (at 262.89 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "TEENSY4_AUDIO" + (at 262.89 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "21" + (uuid "e7e4e595-dc51-433b-a184-15ed77901e6f") + ) + (pin "7" + (uuid "941612fc-1832-4762-a485-61d47f16dfd4") + ) + (pin "20" + (uuid "69857eac-d24d-46d6-a697-bf745f523719") + ) + (pin "19" + (uuid "355f2527-7852-4dc2-a2a0-50928b854e22") + ) + (pin "3" + (uuid "d4b557f7-df0a-4d5e-a7ef-125a2356a26a") + ) + (pin "1" + (uuid "0569ce71-8590-4651-be6f-1f8117ba6aa5") + ) + (pin "2" + (uuid "285349f6-3283-4d3a-89e5-b69a1578c09d") + ) + (pin "23" + (uuid "20b7ffc2-575a-4c22-95d9-15a656377906") + ) + (pin "8" + (uuid "286050b0-e767-474f-8432-e38f33f25fe0") + ) + (pin "18" + (uuid "9ecbdc50-aaa9-49c3-b182-a676a5e39d9d") + ) + (pin "4" + (uuid "65092908-c4e0-4e14-b9f0-99b6b2f461cf") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 132.08 195.58 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d499cf5f-77f4-4248-9dea-463328a2ce12") + (property "Reference" "#PWR067" + (at 132.08 199.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 128.27 194.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 132.08 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 132.08 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 132.08 195.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "9d18b77e-3dd5-4292-b400-fb98cf87cc46") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR067") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 68.58 223.52 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d67d77ac-cbe8-4424-84e6-c61030ddeefe") + (property "Reference" "C26" + (at 66.04 213.36 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "0.1uF 50V" + (at 60.96 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 69.5452 227.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 68.58 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 68.58 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "C1206C104K5RACTU" + (at 68.58 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 68.58 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 68.58 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "2cf9fc30-1bba-436d-875b-e8744841eb4f") + ) + (pin "1" + (uuid "d4f9f356-19d9-41ce-b802-fb572db8cb67") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C26") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 107.95 53.34 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d8ba317e-972f-405a-9c1e-ddb6553a244a") + (property "Reference" "#PWR011" + (at 107.95 59.69 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 107.95 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 107.95 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 107.95 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 107.95 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ac4021e7-0aab-4ad9-b37a-47664ec9cf5a") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR011") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 203.2 109.22 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "dadef526-c2a7-4ee1-9905-8e7efaa489d2") + (property "Reference" "#PWR041" + (at 203.2 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 207.01 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 203.2 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 203.2 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 203.2 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5f33419a-eafa-42e1-94ab-bf54e1067fa8") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR041") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Motor:Fan") + (at 378.46 80.01 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board no) + (dnp no) + (fields_autoplaced yes) + (uuid "e174a3c1-cce5-4ce1-9e66-318907ec9025") + (property "Reference" "M1" + (at 382.4732 78.7979 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Fan" + (at 382.4732 81.2221 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at 378.46 79.756 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 378.46 79.756 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 378.46 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "664-AD0412HXK96XT1 " + (at 378.46 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 378.46 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 378.46 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "00268e93-4ce7-4270-bea6-35ab220a5335") + ) + (pin "1" + (uuid "4740e35a-1092-4f80-beff-0ea328203a6d") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "M1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 236.22 236.22 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e2a0fa17-5706-4ddd-8e8d-a5f7398ac7fc") + (property "Reference" "C32" + (at 239.141 235.0079 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "2.2nF" + (at 239.141 237.4321 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 237.1852 240.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 236.22 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 236.22 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "80-C1206C222K5RAC" + (at 236.22 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 236.22 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 236.22 236.22 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "de386dc6-4ba6-4141-af10-defbb317f743") + ) + (pin "2" + (uuid "c504b7e9-25f9-4d89-8cf8-c1f1c67b8aab") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C32") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 247.65 223.52 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e2b1f801-9bf9-4d2a-b740-be31186c7334") + (property "Reference" "C33" + (at 247.65 217.2167 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10uF 16V" + (at 247.65 219.6409 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 251.46 222.5548 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 247.65 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 247.65 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "80-C1206C106K4P" + (at 247.65 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 247.65 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 247.65 223.52 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "00a743c5-4c36-4b92-b014-3af18a4bfdea") + ) + (pin "2" + (uuid "b03c8037-4ada-4711-9c79-bf2f02a44105") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C33") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 227.33 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e2d8cdab-7303-40ad-b7cb-d50a49fbb54e") + (property "Reference" "#PWR08" + (at 227.33 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 227.33 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 227.33 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 227.33 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 227.33 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c983237c-14ef-4435-abfb-f6e097cde4d7") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR08") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41:IDC_2x3") + (at 191.77 153.67 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e38ffa3f-ef24-43d7-b294-180818bb5eaf") + (property "Reference" "J9" + (at 193.04 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Keys/PTT" + (at 193.04 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x03_P2.54mm_Vertical" + (at 191.77 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 191.77 151.13 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 191.77 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 191.77 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 191.77 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 191.77 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "6" + (uuid "a99cd7d0-7066-4f52-9eb5-eda3523bd2d3") + ) + (pin "2" + (uuid "e3f9c6e7-c7aa-4f54-b28b-2d5ec3b50c7f") + ) + (pin "4" + (uuid "2a6775ec-fa7b-49c2-b403-e8d160bd5023") + ) + (pin "1" + (uuid "b1b4aa28-cff6-4d27-984c-95dfebadedcd") + ) + (pin "3" + (uuid "a73e99cb-fee1-4a67-acb4-f7ffe917d8a5") + ) + (pin "5" + (uuid "f9fc2e58-e8ae-40f3-9cc1-2906310eb885") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 83.82 85.09 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e42dee9f-6d65-40b2-b5f4-6afdd00d7925") + (property "Reference" "#PWR050" + (at 83.82 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 83.82 89.2231 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 83.82 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 83.82 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 83.82 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "17ba429e-4d48-463a-905b-2339228d0af4") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR050") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 38.1 162.56 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e61512d4-f7ca-4185-972b-90f37d456764") + (property "Reference" "#PWR03" + (at 38.1 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 38.1 167.64 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 38.1 162.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 38.1 162.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 38.1 162.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ed7af3e4-b8ed-4bab-ac7d-beb65b540ebe") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR03") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector_Generic:Conn_01x02") + (at 322.58 33.02 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e694a2b0-f737-488a-b824-36210f4ba189") + (property "Reference" "J4" + (at 322.58 25.0657 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "12-13.8V" + (at 322.58 27.4899 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "T41_Library:PinHeader_1x02_P5.08mm_Vertical" + (at 322.58 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 322.58 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 322.58 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 322.58 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "A-662" + (at 322.58 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 322.58 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3392187e-0b02-4037-a7b3-8da1506e8cab") + ) + (pin "2" + (uuid "abefbdcf-0dc0-4d1c-a5d3-947710d23aad") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 91.44 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "eb62fb1c-b44a-4178-85b1-9e44c8046429") + (property "Reference" "C4" + (at 95.25 44.45 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10uF 16V" + (at 95.25 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 92.4052 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 91.44 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 91.44 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "80-C1206C106K4P" + (at 91.44 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 91.44 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 91.44 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "bac2b85c-fd8f-46f4-bbf5-699b706386b2") + ) + (pin "1" + (uuid "de4d3095-f800-4f59-8c33-11c0c82b3722") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:LED") + (at 45.72 177.8 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "eb6dc20f-9d1e-4d0f-a15d-44ada69bc360") + (property "Reference" "D2" + (at 49.53 178.1175 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "LED" + (at 49.53 180.6575 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Diode_SMD:D_1206_3216Metric" + (at 45.72 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 45.72 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 45.72 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "645-599-0220-007F" + (at 45.72 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 45.72 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 45.72 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b1b764a5-16c2-4ff5-ab9a-4b310a5fdcba") + ) + (pin "1" + (uuid "66fbe7f7-40c3-4b20-b8e2-d3485b733a33") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "D2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 212.09 215.9 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ebc2721e-976e-4c1d-9369-6fe7a85da047") + (property "Reference" "C17" + (at 215.9 214.63 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "10uF 16V" + (at 213.36 218.44 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_SMD:C_1206_3216Metric" + (at 213.0552 219.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 212.09 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 212.09 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "80-C1206C106K4P" + (at 212.09 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 212.09 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 212.09 215.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "16820c73-827c-4e3a-a88f-ce7b2220c1b1") + ) + (pin "1" + (uuid "f53d132e-718d-45f4-a655-aef91e56a7ee") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "C17") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "T41:IDC_2x5") + (at 191.77 114.3 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f2b148c6-43f3-47e1-a203-bd20dcf7c569") + (property "Reference" "J6" + (at 200.66 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "RF CONTROL" + (at 193.04 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x05_P2.54mm_Vertical" + (at 191.77 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 191.77 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 191.77 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 191.77 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "A-2939" + (at 191.77 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 191.77 114.3 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3b1ba286-7266-4920-8d1a-70f8a61c1519") + ) + (pin "9" + (uuid "a29b33ae-1f3f-48fa-82cf-f4ac88aacba6") + ) + (pin "1" + (uuid "a47449b8-16bb-4358-99f5-da7149847c2c") + ) + (pin "6" + (uuid "dbc50070-3cf6-44b4-bdf2-33b9f547bd30") + ) + (pin "4" + (uuid "6a541bf2-fbdd-4cce-8e15-8adbf29be1ef") + ) + (pin "5" + (uuid "eec1a9eb-5dae-4e8d-b9a8-79c413ec2d48") + ) + (pin "3" + (uuid "044b085e-75db-4efa-8a4d-5c88b4b7d4ad") + ) + (pin "10" + (uuid "4f846dd2-0d20-45c3-b616-2910acc66af7") + ) + (pin "8" + (uuid "274417f2-666c-4413-92d5-322f289f05fa") + ) + (pin "7" + (uuid "e395fb8c-2cd7-4663-9381-51a35e741be0") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 41.91 228.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "f2cd331d-5703-48a6-83cd-1447bd5e9ffc") + (property "Reference" "#PWR022" + (at 41.91 234.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 41.91 233.68 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 41.91 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 41.91 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 41.91 228.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "57395849-ec7b-4fc3-84d3-789a4e534cc5") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR022") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 58.42 168.91 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "f5bce3fe-ef39-4cf5-af46-74d222a7c0a8") + (property "Reference" "#PWR058" + (at 58.42 175.26 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 58.42 173.0431 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 58.42 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 58.42 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 58.42 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "492c3584-bbfa-4cde-8bcf-71b36aa17751") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR058") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Regulator_Linear:LM1117T-3.3") + (at 210.82 77.47 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp yes) + (fields_autoplaced yes) + (uuid "f69845bb-74db-4e47-9f67-0a4377a32cb5") + (property "Reference" "U10" + (at 210.82 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LM1117T-3.3" + (at 210.82 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-220-3_Vertical" + (at 210.82 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/symlink/lm1117.pdf" + (at 210.82 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 210.82 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "926-LM1117T-3.3/NOPB" + (at 210.82 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 210.82 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 210.82 77.47 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "16b17c02-0ca4-431d-a134-e3665ef98485") + ) + (pin "2" + (uuid "c7975eb9-d88f-47b6-b108-58e3f487a857") + ) + (pin "1" + (uuid "c3968d6d-18b1-4e7f-8f28-d19d20e8f88d") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "U10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 154.94 152.4 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f7119242-7bc5-4d3e-94a6-351ec54d263c") + (property "Reference" "#PWR064" + (at 154.94 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 151.13 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 154.94 152.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 154.94 152.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 154.94 152.4 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "98b4b5ea-6216-4a69-9ae0-28f7634a5f04") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR064") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 312.42 83.82 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "f8705089-e5c8-4e11-8af4-7626aef18510") + (property "Reference" "#PWR060" + (at 312.42 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 312.42 87.9531 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 312.42 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 312.42 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 312.42 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1d1dfdb9-fbd6-4700-b0da-9e6fcaf00116") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "#PWR060") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:R") + (at 220.98 231.14 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "fad4bbaf-c2ae-48b9-981d-dae44889d54a") + (property "Reference" "R13" + (at 220.98 228.6 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "470R" + (at 220.98 226.06 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_1206_3216Metric" + (at 220.98 229.362 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 220.98 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 220.98 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "CRCW1206470RJNEAC" + (at 220.98 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 220.98 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 220.98 231.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e1175e21-4e37-4bbb-bd6f-b94d5cd14518") + ) + (pin "1" + (uuid "1bff7f62-fd1c-4723-8bfb-f1aaf97621f5") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "R13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector_Generic:Conn_01x01") + (at 318.77 73.66 180) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "fd11efcb-58fc-4d57-89e5-54962e04522a") + (property "Reference" "J21" + (at 318.77 68.2457 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x01" + (at 318.77 70.6699 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" + (at 318.77 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 318.77 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 318.77 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Mouser" "" + (at 318.77 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Tayda" "" + (at 318.77 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "PJRC.com" "" + (at 318.77 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "07ee30bb-64aa-481d-b107-d4e40f7227cf") + ) + (instances + (project "T41-main-board-V012" + (path "/3c4b9d3b-a516-4fd7-b325-b74c836dee65" + (reference "J21") + (unit 1) + ) + ) + ) + ) + (sheet_instances + (path "/" + (page "1") + ) + ) +) diff --git a/wiki/raw/log.md b/wiki/raw/log.md new file mode 100644 index 0000000..9e582bc --- /dev/null +++ b/wiki/raw/log.md @@ -0,0 +1,11 @@ + +## [2026-06-14] decision | Mapped PE4312 attenuator control bits (MCP23017 U21 → PE4312) +Owner-confirmed + firmware-cross-checked. MCP23017 U21 (0x27): GPIOA → RX attenuator (RF-board +slot U3), GPIOB → TX attenuator (slot U11; U12 is the dual-clock daughter). PE4312 chip is U1 +within the daughterboard sheet. Low 6 GPIO bits = attenuation word: bit0→pin20 C0.5(0.5dB), +bit1→19 C1(1dB), bit2→17 C2(2dB), bit3→16 C4(4dB), bit4→15 C8(8dB), bit5→1 C16(16dB); PE4312 +pin18=GND. Matches firmware SetAttenuator round(2·atten_dB)&0x3F → writeGPIOA(RX)/writeGPIOB(TX) +(RFBoard.cpp:276,67-68,102-103). Note: owner said TX="U12" but schematic shows U11=attenuator +daughter / U12=dualclock daughter — wiki uses U11 (flagged for confirmation). Updated [[rf-board]] +(mapping table + resolved open Q), [[t41-ep-schematics]]; struck item in [[documentation-todos]]. +Remaining: upper MCP bits (GPA6/7,GPB6/7) function still untraced. diff --git a/wiki/roadmap/.gitkeep b/wiki/roadmap/.gitkeep new file mode 100644 index 0000000..a616556 --- /dev/null +++ b/wiki/roadmap/.gitkeep @@ -0,0 +1 @@ +# Roadmap pages: future-development plans, proposals, open questions. diff --git a/wiki/roadmap/development-backlog.md b/wiki/roadmap/development-backlog.md new file mode 100644 index 0000000..5d634fe --- /dev/null +++ b/wiki/roadmap/development-backlog.md @@ -0,0 +1,41 @@ +--- +title: Development Backlog +type: roadmap +status: draft +created: 2026-06-09 +updated: 2026-06-09 +tags: [development, backlog, features, github-issues, index] +source_refs: [] +related: ["[[documentation-todos]]", "[[transmit-spectrum]]", "[[manual-notch]]", "[[usb-audio]]", "[[openaudio-library]]"] +--- + +# Development Backlog + +Software-development tasks (features/proposals) for Phoenix, mirroring the open +[GitHub issues](https://github.com/KI3P/Phoenix/issues). Each has its own scoping page +describing **what needs to be done and the current state** — these are *task descriptions, +not solution designs*. The [[documentation-todos]] page tracks wiki/documentation work +separately. + +## Open issues (as of 2026-06-09) + +| Issue | Task | Status in code | Effort | Page | +|---|---|---|---|---| +| [#10](https://github.com/KI3P/Phoenix/issues/10) | See the transmit spectrum | **Largely built** (SSB + dual-VFO); needs verify + edge cases | Low–Med | [[transmit-spectrum]] | +| [#11](https://github.com/KI3P/Phoenix/issues/11) | Manual notch filter | Auto-notch scaffolding exists; manual mode unimplemented | Med | [[manual-notch]] | +| [#13](https://github.com/KI3P/Phoenix/issues/13) | Bi-directional USB audio | Under active debugging (in-tree docs); not yet wired in | Med–High | [[usb-audio]] | +| [#14](https://github.com/KI3P/Phoenix/issues/14) | Change OpenAudio library | Foundational; proposal to evaluate | High | [[openaudio-library]] | + +## Two natural tracks + +- **DSP/UI feature track** — [[transmit-spectrum]] (#10) and [[manual-notch]] (#11). Both + *extend existing partial backends*, are independent, and are lower-risk. Good near-term work. +- **Audio-plumbing track** — [[openaudio-library]] (#14) → [[usb-audio]] (#13). Foundational and + coupled; #14 likely enables/eases #13. Higher risk; design carefully and sequence together. + +## Notes +- The wiki documentation effort surfaced that **#10 and #11 already have partial backends** — + worth confirming scope before treating either as greenfield. +- Code/comment discrepancies and possible bugs found while documenting live in + [[documentation-todos]] (e.g. the LMS NR channel-routing note, the unit mislabels). Some may + deserve their own issues. diff --git a/wiki/roadmap/documentation-todos.md b/wiki/roadmap/documentation-todos.md new file mode 100644 index 0000000..183a2e8 --- /dev/null +++ b/wiki/roadmap/documentation-todos.md @@ -0,0 +1,213 @@ +--- +title: Documentation TODOs & Open Questions +type: roadmap +status: draft +created: 2026-06-08 +updated: 2026-06-14 +tags: [todo, open-questions, discrepancies, wiki-maintenance] +source_refs: [] +related: ["[[index]]", "[[iq-imbalance-correction]]", "[[multirate-decimation]]", "[[noise-reduction]]", "[[fast-convolution-filtering]]", "[[dsp-chain]]"] +--- + +# Documentation TODOs & Open Questions + +Running list of (a) wiki pages still needing work and (b) **code/comment discrepancies and +possible bugs** surfaced while writing the wiki. Items here are leads for future code reading, +hardware testing, or a question to the human. Resolve an item → fix the page, cite the +finding, and strike it from this list. + +This is a planning surface, not a defect tracker — but anything that looks like a **real bug** +is tagged **⚠ possible bug** so it stands out. + +## Code/comment discrepancies & possible bugs + +### Hardware (from T41-EP schematics, ingested 2026-06-14) +- ~~⚠ AD8307 (log) vs linear power math.~~ — **RESOLVED, not a bug (2026-06-14).** Net trace + + schematic-owner confirmation: AD8307 OUT (U14 fwd / U19 rev) → AD7991 CH0/CH1; REF3440 → + Vin3/Vref. The **default digital path already does the correct AD8307 log conversion** + (mV/25 − 84 → dBm → W, `LPFBoard.cpp:640-643`). The linear `(V·10)²/50` belongs to the + `USE_ANALOG_SWR` branch (linear diode detectors on Teensy pins 26/27, off by default). The + flag originated from a **wiki mis-attribution**, now corrected. → [[filter-boards]] +- ~~Phantom second SGTL5000.~~ — **RESOLVED (2026-06-14, schematic owner).** There is **one** + SGTL5000 (Teensy hat, `sgtl5000_teensy`): mic in **+** TX I/Q out. The `pcm5102_mainBoard` + object represents the **PCM5102 speaker DAC** (U5), and **PCM1808** (U6) is RX I/Q in. The + object being typed `AudioControlSGTL5000` is a **harmless mistype** — PCM5102/PCM1808 are + control-less I²S parts, so its `.enable()/.inputSelect()` calls are no-ops; the I²S data path + carries the audio. *Code clarity fix (retype/rename + drop the "two SGTL5000s" comment), not a + functional bug.* → [[hardware-platform]], [[t41-ep-schematics]] +- ~~**Net-tracing leads.**~~ — **ALL RESOLVED 2026-06-14/15** (owner-assisted): ATtiny85 purpose; + PE4312↔MCP23017 mapping; LPF band-code→decoder→relay + external filter board; U21 upper bits + (unused/NC); I²S/MCLK routing (MCLK=23/LRCLK=20/BCLK=21 shared; DAUDIO_OUT=32→PCM5102; + ADC_IN←PCM1808). Per-band LPF L/C→cutoff intentionally **out of scope** (owner). The remaining + non-schematic hardware items (PA bias/rails; per-band SWR cal vs. measured power = bench) are + not net traces. → [[hardware-platform]], [[rf-board]], [[filter-boards]] + +### DSP — I/Q calibration +- ~~**Tone offset vs. FFT bins.**~~ — **RESOLVED (2026-06-14).** The CW tone is set to + `band_center + SR[SampleRate].rate/4` (`HardwareSm.cpp:613`) = 48 kHz at the default 192 kHz + raw rate, so the "48 kHz above/below the LO" comment is correct. The "±6 kHz at 24 kHz" + premise was wrong: the PSD read here is the **192 kHz raw, 1×-zoom 512-bin display FFT** + (cal forces `spectrum_zoom = 0`, `HardwareSm.cpp:498`) → 375 Hz/bin, bin 256 = LO, so + ±Fs/4 = bins 128/384. Wanted = bin 384 (tone is Fs/4 *above* LO), image = bin 128. + → [[iq-imbalance-correction]] +- ~~**Separation metric units.**~~ — **RESOLVED (2026-06-14).** `psdnew` holds + `log10f_fast(magnitude)` (`DSP_FFT.cpp:144,186`), so `(upper − lower)` is a log₁₀ ratio and + the `×10` expresses sideband separation in **dB**. → [[iq-imbalance-correction]] +- **Correction-model completeness.** The RX/TX correction is single-axis (scale I only + + phase shear). Does this leave a residual image vs. a full 2×2 correction matrix, and is it + measurable at the achieved IRR? → [[iq-imbalance-correction]] + +### DSP — noise reduction +- ~~**⚠ possible bug:** `DSP.cpp:687` `arm_scale_f32(data->Q, 2, data->I, …)`~~ — **RESOLVED, + not a bug** (investigated 2026-06-08). `Xanr` writes its result to `data->Q` and leaves + `data->I` holding the pre-NR signal; downstream `InterpolateReceiveData` reads `data->I`, so + the line correctly copies the denoised `Q` into `I` with a 2× makeup gain (cf. ×30 for Kim). + The notch block at `DSP.cpp:930-933` uses the same `Xanr`→`copy(Q,I)` pattern. *Clarity nit + only:* the "Xanr outputs to Q while the chain treats I as primary" convention plus the magic + 2× are fragile — worth a code comment, not a fix. +- ~~**Auto-notch invocation.**~~ — **RESOLVED:** the auto/manual notch is `Xanr(&data, 1)` at + `DSP.cpp:930`, gated by `ED.ANR_notchOn == 1`, right after `NoiseReduction()`, followed by + `arm_copy_f32(data.Q, data.I, …)`. Distinct from the NR-mode `Xanr(&data, 0)` inside + `NoiseReduction`. → [[noise-reduction]] +- ~~**NR sample-rate comments.**~~ — **RESOLVED (2026-06-14).** Stale DD4WH comment, not a real + rate assumption. `Kim1_NR` runs at the **24 kHz** decimated RX rate (raw 192 kHz ÷ DF1·DF2 = + 4·2 = 8, `SDT.h:409-410`) → 24000/256 = **93.75 Hz/bin**. The `46.9Hz [12000Hz/256] @96kHz` + comment (`DSP_Noise.cpp:141,155`) is leftover Convolution-SDR text; the code divides by the + **live** `data->sampleRate_Hz / NR_FFT_L` so it is correct regardless. → [[noise-reduction]] + +### DSP — multirate / filtering +- ~~**TX vs RX filter design.**~~ — **RESOLVED (2026-06-14).** Primarily **heritage**, not a + deliberate determinism/latency choice. The fixed 48-tap tables are legacy DD4WH coefficients + (arrays named/commented "RXfilters", `DSP_FIR.cpp:174-175`) reused wholesale by the TX path; + RX *decimation* was refactored into the harris-formula runtime design. The runtime path's + rate-independence is dormant — `SampleRate` is hardcoded 192 kHz (`Globals.cpp:106`, never + reassigned), so RX recomputes identical coeffs each boot. (RX is a hybrid: decimation + runtime-sized; interpolation fixed 48/32 taps.) → [[multirate-decimation]] +- **Round-trip group delay.** Measure the RX decimate→convolve→interpolate latency against the + ~10 ms loop budget. → [[multirate-decimation]], [[real-time-constraints]] +- **Spectrum refresh floor.** Reconcile the `.ino`'s 200 ms spectrum figure with the measured + ~80 ms floor and the role of `NCHUNKS`. → [[real-time-constraints]], [[zoom-fft]] +- ~~**Zoom default mismatch.**~~ — **RESOLVED (2026-06-14).** Not a conflict: `Config.h:78 + ZOOM 3` is a **front-panel button-ID** macro (`Config.h:74-96`, dispatched as `case ZOOM:` + in `Loop.cpp:457,818`, which does `ED.spectrum_zoom++`), *not* a zoom level. Power-on zoom is + governed solely by `ED.spectrum_zoom` (default `1` = 2×, `SDT.h:274`; or a restored JSON + value). → [[zoom-fft]] + +### Units / naming +- ~~**VFO frequency unit mislabeled.**~~ — **FULLY RESOLVED (2026-06-16).** First the `RFBoard.h` + / `Tune.h` docstrings were corrected to centi-Hz (Hz × 100) on 2026-06-14; then the owner + completed the cross-file rename of every `_dHz` *symbol* (`GetTXRXFreq_dHz`, `frequency_dHz`, + etc.) to `_cHz`, eliminating the historical "decihertz" misnomer entirely. Wiki updated to + match. *Branch caveat (2026-06-16 lint):* the rename is **not yet on `encoder-i2c-speed`** — + that working tree still carries `_dHz` identifiers (docstrings already note the misnomer); the + wiki reflects the post-rename state and will line up when that branch merges. + → [[rf-board]], [[tune-frequency-control]] + +### Stale source comments +> **All items below FIXED IN SOURCE (2026-06-14)** — comment-only edits on branch +> `encoder-i2c-speed`, not yet committed. The wiki was already correct. +- ~~**CAT protocol: TS-480 vs TS-2000.**~~ — Fixed `CAT.h:25` "TS-2000" → "TS-480" (now + consistent with `CAT.cpp` and `code/docs/ts_480_pc.pdf`; ID020 = TS-480). → [[cat-control]] +- ~~**"EEPROM" is actually LittleFS+SD JSON.**~~ — Fixed the `.ino` header ("Load settings + from flash/SD…", "Storage.cpp/h: settings persistence … not true EEPROM", and the `ED` + blurb now notes the name is historical) and `Storage.cpp:675`. Type name `EEPROMData` left + as-is (historical). → [[persistent-config]] +- ~~**"TuneSm" does not exist.**~~ — Fixed `PhoenixSketch.ino` (TuneSm → HardwareSm in the + philosophy bullet, ASCII diagram, state-machine list, and module list) and `CLAUDE.md` + ("Frequency Control State" section + module/task lines). Both now state Tune.cpp is a + pure-function library and the tune state lives in HardwareSm. + → [[tune-frequency-control]], [[hardware-state-machine]] +- ~~**HardwareSm is hand-written, not generated.**~~ — Made explicit in `PhoenixSketch.ino` + (section intro + HardwareSm entry) and `HardwareSm.cpp` header ("hand-written, NOT generated + by StateSmith"). → [[hardware-state-machine]], [[state-machine-architecture]] +- ~~**`.ino` ModeSm state list.**~~ — Fixed: now "SSB_RECEIVE, SSB_TRANSMIT, CW_RECEIVE, six + CW_TRANSMIT_* keyer sub-states, and the CALIBRATE_* states (… there is no TUNE state)". + → [[mode-state-machine]] + +### DSP — AGC +- ~~**Soft-knee transfer curve.**~~ — **RESOLVED (2026-06-14).** Gain law `DSP.cpp:454` + produces three regions: flat limiting at `out_target` for `volts ≥ max_input`; a + linear-in-log soft knee (`out_target − slope_constant·log10(volts/max_input)`) for + `min_volts ≤ volts < max_input`; and constant `max_gain` below `min_volts`. `var_gain` is the + slope control — total output rise across the active range = `out_target·(1 − 1/var_gain)` + ≈ +3.5 dB at the default `var_gain = 1.5`. → [[agc-design]] +- ~~**n_tau vs MAX_N_TAU.**~~ — **RESOLVED (2026-06-14).** `MAX_N_TAU = 8` is a commented-out + worst-case constant (`SDT.h:615-617`), not used at runtime — it (with `MAX_SAMPLE_RATE` and + `MAX_TAU_ATTACK`) sizes the static `ring_buffsize = 24000·8·0.01+1 = 1921`. Operating + `n_tau = 4` → 96-sample (~4 ms) look-ahead at 24 kHz; ring is over-provisioned ~20×. + → [[agc-design]] + +## Pages still to write or promote + +> **Status (2026-06-08):** every firmware **module** page and all **9 theory spine** pages are +> drafts. What remains is *deeper-dive* content — new pages for subsystems that were only +> referenced, the per-page "Remaining:" gaps below, and hardware-measurement follow-ups. + +### Not yet written (new pages needed) +- ~~**CW processing**~~ — **done** ([[cw-processing]]: audio filter, hybrid correlation+Goertzel + tone detection, adaptive Morse decoder via flat tree + timing histograms, sidetone). Remaining: + reconcile the header "50–500 Hz" vs code "0.8–2.0 kHz" filter-width labels; decoder sample rate. +- ~~**Equalizer**~~ — **done** ([[audio-equalizer]]: parallel 14-band biquad filterbank, RX/TX + gains, alternating-sign reconstruction). Remaining: band centre-freq/Q table; gain range. +- ~~**Synchronous AM (SAM) detection**~~ — **done** ([[synchronous-am-detection]]: 2nd-order PLL + carrier recovery, fade leveler, carrier-offset readout). Remaining: exact zeta/tau constants. +- ~~**TX carrier-null calibration**~~ — **done** ([[tx-carrier-null]]: DC-offset LO-leakage + suppression + the dBc sweep). Remaining: DCOffset units / achievable dBc. +- ~~**Built-in test (BIT)**~~ — **done** ([[built-in-test]]: startup I²C presence flags → + status screen). Remaining: is it re-runnable / extensible to functional checks? +- ~~**Calibration sub-state-machines**~~ — **done** ([[calibration-state-machines]]: 3 identical + minimize-sweep SMs + PowerCalSm curve-fit, with state/event maps). Remaining: per-SM `Vars`; + whether the 3 identical SMs share one diagram. + +**All previously-listed "not yet written" pages are now drafts.** + +### Per-page "Remaining" gaps (deepen existing drafts) +- [[hardware-state-machine]]: full state maps of the 4 cal sub-SMs (above); + `RFCalTransmitIQSingleVFO` external-analyzer flow. +- [[rf-board]]: local Etherkit-Si5351 library modifications vs. upstream. +- [[filter-boards]]: full LPF band↔BCD table; directional-coupler / per-band power calibration. +- [[front-panel]]: per-button id→physical-label map; measured latency win from the branch. +- [[display-subsystem]]: waterfall colour-map / `psdnew`→pixel mapping; touch input; + `primaryMenu[8]` contents. +- [[cat-control]]: verify the `IF` status-string field layout vs. `code/docs/ts_480_pc.pdf`. +- [[persistent-config]]: JSON schema completeness; versioning/migration behaviour. +- Theory: deepen via hardware measurement (group delays, AGC transfer curve, IRR achieved). + +### Theory stubs → drafts +- ~~[[agc-design]]~~ — **done** (wdsp look-ahead AGC, hang state machine). +- ~~[[zoom-fft]]~~ — **done** (raw-192k IIR-decimate zoom; corrected the earlier "operates on + 24 kHz baseband" error — it does not). +- All nine theory spine pages are now drafts. Next: deepen via measurement/hardware, or start + CW-processing and equalizer pages (see below). + +### Firmware module stubs (have "To flesh out" checklists) +- ~~[[mode-state-machine]]~~ — **done** (full state hierarchy, event map, keyer timing, + paddle memory, calibration branch). +- ~~[[tune-frequency-control]]~~ — **done** (was the mis-named "tune-state-machine" stub; + Tune.cpp is a function library, not an SM — page retitled, all links updated). +- ~~[[hardware-state-machine]]~~ — **done** (RFHardwareState/TuneState mappings, T/R + switching, calibration orchestration). Remaining: full state maps of the 4 generated cal + sub-SMs. +- ~~[[ui-state-machine]]~~ — **done** (13 states, full transition map, DFE resolved). All + firmware state-machine pages are now drafts. +- ~~[[rf-board]]~~ — **done** (Si5351 quadrature VFO incl. the <3.2 MHz timed-delay path, + attenuators, T/R switching, cal loopback). Remaining: local Etherkit-lib modifications. +- ~~[[filter-boards]]~~ — **done** (BPF/LPF/back-end relays via shared hardwareRegister, AD7991 + SWR/power math). Remaining: full LPF band↔BCD table; coupler calibration. +- ~~[[front-panel]]~~ — **done** (2×MCP23017, Rotary_V12 encoders, two-tier ISR+1ms-timer + servicing = the encoder-i2c-speed branch design). Remaining: per-button id→label map. +- ~~[[display-subsystem]]~~ — **done** (Pane dirty-flag model, 13 home panes enumerated, + DrawDisplay router, VariableParameter editor + menu model). Remaining: waterfall colour-map / + pixel mapping, touch input, primaryMenu[8] contents. **All firmware module stubs now drafts.** +- ~~[[cat-control]]~~ — **done** (25-command dispatch table, transport, event/ED apply paths). + Remaining: verify `IF` status-string layout vs. `code/docs/ts_480_pc.pdf`. +- ~~[[persistent-config]]~~ — **done** (`ED` field groups, JSON-on-LittleFS+SD persistence, + ParamSave scratch). Remaining: JSON schema completeness + versioning/migration behavior. + +_(The "not yet written" pages are consolidated at the top of this section.)_ + +## How to use this list +When the human asks "what's left to document?" or "what looked wrong in the code?", start +here. When a code discrepancy is confirmed as a bug, note it here AND consider whether it +belongs in the actual issue tracker / a fix branch — the wiki records the *finding*, not the +fix. diff --git a/wiki/roadmap/manual-notch.md b/wiki/roadmap/manual-notch.md new file mode 100644 index 0000000..fa1ed3b --- /dev/null +++ b/wiki/roadmap/manual-notch.md @@ -0,0 +1,60 @@ +--- +title: "Dev: Manual Notch Filter (#11)" +type: roadmap +status: draft +created: 2026-06-09 +updated: 2026-06-09 +tags: [development, feature, notch, noise-reduction, lms, display, front-panel] +source_refs: [] +related: ["[[development-backlog]]", "[[noise-reduction]]", "[[display-subsystem]]", "[[front-panel]]", "[[main-loop]]", "[[persistent-config]]"] +--- + +# Dev: Manual Notch Filter (#11) + +**GitHub issue:** [KI3P/Phoenix#11](https://github.com/KI3P/Phoenix/issues/11) — *"Feature +request: manual notch filters"* + +> Goal (from the issue): add a **manual** notch as an alternative to the autonotch. The notch +> button cycles three states — **no notch / autonotch / manual notch**. In manual mode a line +> on the audio spectrum shows the notch location, moved by turning the **filter** knob. + +Scoping note — what exists vs. what's missing. Not a solution design. + +## Current state — auto-notch scaffolding exists, manual mode does not + +- **Engine:** the notch is the `Xanr` LMS adaptive filter ([[noise-reduction]]). Its signature + `Xanr(data, ANR_notch)` already *names* a manual mode (`0=off, 1=auto, 2=manual` per the + `DSP_Noise.h` doc), but **no `mode 2` / manual code path is implemented** (grep finds none). +- **State flag:** `ED.ANR_notchOn` ([[persistent-config]]) is currently **binary** — the notch + button toggles it 0↔1 (`Loop.cpp:545-548`), and DSP only acts on `== 1` + (`DSP.cpp:930` → `Xanr(&data, 1)`). +- **Display hook:** the home-screen settings pane already reflects `ANR_notchOn` + (`MainBoard_DisplayHome.cpp:1404-1413`). +- **CAT:** `ANR_notchOn` is also settable over CAT (`CAT.cpp:600`, the `NT` command, + [[cat-control]]). + +So the plumbing (button, flag, display indicator, DSP entry point, CAT) is in place for +auto-notch; **manual notch is genuinely new work.** + +## What remains to be done (to scope) +- **3-way state:** extend `ANR_notchOn` / the notch-button handler from 0↔1 to a 3-state cycle + (off / auto / manual). Note this changes a persisted `ED` field's meaning — mind migration + ([[persistent-config]]). +- **Manual DSP path:** implement the `Xanr` manual mode (a fixed-frequency notch) — the engine + hook exists but the behaviour does not. +- **Notch-frequency control:** bind the **filter encoder** ([[front-panel]]) to a notch-freq + parameter while in manual mode (it currently adjusts filter bandwidth — needs mode-aware + routing). +- **Display:** draw a vertical line at the notch frequency on the **audio-spectrum pane** + ([[display-subsystem]]); keep it in sync as the knob moves. +- **State storage:** where the manual notch frequency lives (new `ED` field?). +- **Interaction:** how manual-notch mode coexists with the filter knob's normal job, and with + the other NR options. + +## Reference +Russ's example cited in the issue: + + +## Relevant code & wiki +`DSP_Noise.cpp` (`Xanr`), `DSP.cpp:930`, `Loop.cpp:545`, `MainBoard_DisplayHome.cpp`. Wiki: +[[noise-reduction]], [[front-panel]], [[display-subsystem]], [[persistent-config]]. diff --git a/wiki/roadmap/openaudio-library.md b/wiki/roadmap/openaudio-library.md new file mode 100644 index 0000000..0b2d106 --- /dev/null +++ b/wiki/roadmap/openaudio-library.md @@ -0,0 +1,48 @@ +--- +title: "Dev: Change the OpenAudio Library (#14)" +type: roadmap +status: draft +created: 2026-06-09 +updated: 2026-06-09 +tags: [development, proposal, openaudio, audio-quality, dsp, architecture] +source_refs: [] +related: ["[[development-backlog]]", "[[dsp-chain]]", "[[usb-audio]]", "[[code-heritage]]", "[[real-time-constraints]]"] +--- + +# Dev: Change the OpenAudio Library (#14) + +**GitHub issue:** [KI3P/Phoenix#14](https://github.com/KI3P/Phoenix/issues/14) — *"Proposal: +Change Open Audio library"* + +> Goal (from the issue): adopt a technique to **improve audio quality** by changing the OpenAudio +> library usage. +> Ref: + +Scoping note — a proposal to evaluate, not a solution design. + +## Current state — OpenAudio underpins the whole audio chain + +- The real-time audio I/O and block scheduling rest on the **OpenAudio_ArduinoLibrary** + (`MainBoard_AudioIO`, [[dsp-chain]]) — it provides the 48/96/192 kHz block pipeline the DSP + chain consumes, and the update ISR whose NVIC priority (208) the front-panel servicing is + deliberately kept below ([[front-panel]], [[real-time-constraints]]). +- This is foundational, multi-author heritage code ([[code-heritage]]); a change here touches + buffering, sample rates, and timing assumptions across the DSP chain. + +## What remains to be done (to scope) +- Read the referenced groups.io technique and capture **what specifically** it changes (a + different library? a different OpenAudio configuration? a new block size / sample format?). +- Assess blast radius: which DSP stages, buffer sizes (`READ_BUFFER_SIZE`), and the 10 ms loop + budget ([[real-time-constraints]]) are affected. +- Relationship to USB audio ([[usb-audio]] #13): a library change may be a prerequisite or + enabler — sequence the two together. +- Define how "audio quality" improvement will be **measured** (the in-tree + `Transmit_Audio_Purity_Investigation.md` may be relevant). + +## Risk +Highest-risk / highest-blast-radius of the four open issues — it sits under everything in +[[dsp-chain]]. Worth a careful evaluation page before any implementation. + +## Relevant code & wiki +`MainBoard_AudioIO.cpp/.h`, the OpenAudio library; [[dsp-chain]], [[usb-audio]], +[[real-time-constraints]], [[code-heritage]]. diff --git a/wiki/roadmap/transmit-spectrum.md b/wiki/roadmap/transmit-spectrum.md new file mode 100644 index 0000000..8fb7f4d --- /dev/null +++ b/wiki/roadmap/transmit-spectrum.md @@ -0,0 +1,58 @@ +--- +title: "Dev: Transmit Spectrum Display (#10)" +type: roadmap +status: draft +created: 2026-06-09 +updated: 2026-06-09 +tags: [development, feature, transmit, spectrum, display, dual-vfo] +source_refs: [] +related: ["[[development-backlog]]", "[[dsp-chain]]", "[[zoom-fft]]", "[[tune-frequency-control]]", "[[hardware-state-machine]]", "[[display-subsystem]]"] +--- + +# Dev: Transmit Spectrum Display (#10) + +**GitHub issue:** [KI3P/Phoenix#10](https://github.com/KI3P/Phoenix/issues/10) — *"Feature +request: can we see the transmit spectrum?"* + +> Goal (from the issue): run the receive chain in parallel with the transmit chain and plot the +> transmit spectrum while transmitting. Some TX power leaks into the RX chain through the T/R +> switch, so a parallel RX-PSD can show what's being transmitted. + +This is a **scoping note** — what exists and what remains — not a solution design. + +## Current state — substantially implemented for SSB + dual-VFO + +While documenting the DSP and tuning code we found most of this already exists: +- **Parallel RX-PSD during TX:** `PerformSignalProcessing` calls `TransmitReceiveProcessing()` + in the `SSB_TRANSMIT` state when `HasDualVFOs()` (`DSP.cpp:53-55`). That routine reads the + IQ input, applies RF gain + I/Q correction, and runs `ZoomFFTExe(...)` to compute the + display PSD (`DSP.cpp:768-792`) — i.e. a truncated RX chain, PSD only, no audio demod. +- **Dedicated VFO placement:** `HandleTuneState(TuneSSBTX)` retunes the RX VFO to **freq/3** on + dual-VFO radios specifically "to watch the 3rd harmonic when displaying the transmit + spectrum" (`HardwareSm.cpp:662-666`, documented in [[tune-frequency-control]]). The + fundamental leaking through the T/R switch is too strong, so it monitors the 3rd harmonic. +- A separate filter/zoom config (`RXTXfilters`, `RXTXZoom`) exists for this path. + +So for the **common case (SSB, dual-VFO)** the TX spectrum is computed during transmit. See +[[dsp-chain]] and [[zoom-fft]]. + +## What remains to be done (to scope) +- **Verify the display actually renders it** and how — does the spectrum pane + ([[display-subsystem]]) show the TX PSD distinctly (label, colour, frequency axis) during TX? +- **3rd-harmonic presentation:** since the monitored signal is at freq/3, clarify how the axis + / readout is presented to the user so it isn't misleading. +- **CW transmit:** the dispatch only covers `SSB_TRANSMIT` (and cal states) — CW TX has no + TX-spectrum path. Is that wanted? +- **Single-VFO radios:** the whole path is gated by `HasDualVFOs()`; single-VFO hardware can't + self-monitor this way. Is any fallback desired? +- **Performance:** running a parallel PSD during TX adds load — confirm it fits the + [[real-time-constraints]] budget. + +## Relevant code & wiki +`DSP.cpp` (`TransmitReceiveProcessing`), `HardwareSm.cpp` (`HandleTuneState` TuneSSBTX), +`MainBoard_DisplayHome.cpp` (spectrum pane). Wiki: [[dsp-chain]], [[zoom-fft]], +[[tune-frequency-control]], [[hardware-state-machine]], [[display-subsystem]]. + +## Open questions +- Is this issue effectively *done* for the main case and just needs confirmation, or is the + rendering incomplete? (Needs a check on hardware / the display pane.) diff --git a/wiki/roadmap/usb-audio.md b/wiki/roadmap/usb-audio.md new file mode 100644 index 0000000..d81c99e --- /dev/null +++ b/wiki/roadmap/usb-audio.md @@ -0,0 +1,48 @@ +--- +title: "Dev: Bi-directional USB Audio (#13)" +type: roadmap +status: draft +created: 2026-06-09 +updated: 2026-06-09 +tags: [development, feature, usb, audio, digital-modes, openaudio] +source_refs: [] +related: ["[[development-backlog]]", "[[dsp-chain]]", "[[openaudio-library]]", "[[cat-control]]"] +--- + +# Dev: Bi-directional USB Audio (#13) + +**GitHub issue:** [KI3P/Phoenix#13](https://github.com/KI3P/Phoenix/issues/13) — *"Feature +request: bi-directional USB audio"* + +> Goal (from the issue): add the ability to **send and receive an audio stream over USB** — so a +> PC can pipe RX audio in and TX audio out (e.g. for digital modes / WSJT-X), complementing the +> existing CAT control ([[cat-control]]). +> Ref: + +Scoping note — not a solution design. + +## Current state — in active debugging, not yet a feature + +- The audio codec interface is `MainBoard_AudioIO` ([[dsp-chain]]); a grep finds **no USB-audio + endpoints** (`AudioInputUSB`/`AudioOutputUSB`) wired in there yet. +- There is substantial **investigation already underway** — several debug docs sit in the + working tree (`code/docs/USB_Audio_Debug_Guide.md`, `USB_Audio_RX_Diagnostics.md`, + `USB_Audio_TX_Debug_Report.md`, `USB_Audio_TX_Diagnostic_Plan.md`, `usb_audio_debug_18Jan26.md`, + `Transmit_Audio_Purity_Investigation.md`). **Start here** for context before designing. +- Teensy USB audio shares the USB device with serial; CAT already uses `SerialUSB1` (Dual + Serial). USB Audio + Dual Serial composite descriptor interactions are likely part of the + difficulty being debugged. + +## What remains to be done (to scope) +- Consolidate the findings from the in-tree debug docs into a concrete plan (those docs are the + primary source — read them first). +- Decide the USB device composition (audio + serial coexistence) and sample-rate/format. +- Route USB audio into/out of the DSP chain (RX audio → USB in; USB out → TX modulator), + including resampling to/from the internal rates ([[dsp-chain]] runs RX at 24 kHz, TX audio at + 12 kHz). +- Relationship to [[openaudio-library]] (#14): a library change may change the USB-audio path, + so sequence the two. + +## Relevant code & docs +`MainBoard_AudioIO.cpp/.h`; the `code/docs/USB_Audio_*` reports; [[dsp-chain]], +[[openaudio-library]]. diff --git a/wiki/sources/.gitkeep b/wiki/sources/.gitkeep new file mode 100644 index 0000000..39ce556 --- /dev/null +++ b/wiki/sources/.gitkeep @@ -0,0 +1 @@ +# One summary page per ingested source lands here (type: source). diff --git a/wiki/sources/t41-ep-schematics.md b/wiki/sources/t41-ep-schematics.md new file mode 100644 index 0000000..3e5e381 --- /dev/null +++ b/wiki/sources/t41-ep-schematics.md @@ -0,0 +1,134 @@ +--- +title: T41-EP Schematics (KiCad, V012-era) +type: source +status: draft +created: 2026-06-14 +updated: 2026-06-14 +tags: [hardware, schematic, kicad, t41-ep, source, bom] +source_refs: [] +related: ["[[hardware-platform]]", "[[i2c-bus-map]]", "[[rf-board]]", "[[filter-boards]]", "[[front-panel]]", "[[display-subsystem]]"] +--- + +# T41-EP Schematics (KiCad, V012-era) + +KiCad schematic files for the T41-EP board set (six dropped into `raw/` on 2026-06-14; the LPF +**filter** board added 2026-06-15 — seven total). These are the **first physical-hardware +source** ingested — until now the `hardware/` pages were inferred from firmware constants. +Schematics are authoritative for what is physically present; where they disagree with code +comments, the schematic wins (and the discrepancy is logged). + +> KiCad `.kicad_sch` are S-expression text. Facts below are extracted from `(property +> "Reference"/"Value" …)` symbol fields and net labels; exact pin-level nets were not fully +> traced. Component **values** (chip part numbers) are reliable; precise wiring claims that +> aren't net-confirmed are marked *(infer)*. +> +> ⚠ **Multiple board revisions exist and reference designators can differ between them** +> (e.g. the RF-board attenuators — see below). The files in `raw/` are the **V12.8 / "V012"** +> generation. The **electrical wiring and firmware are stable across revisions**, so prefer +> citing *function* (e.g. "RX attenuator") over a bare `U#`, and state the revision when a +> designator matters. + +## The six files / boards + +| File (`raw/…`) | Board | Role | +|---|---|---| +| `T41-main-board-V012.kicad_sch` | **Main board** | Teensy 4.1 compute, audio converters, power, all I/O fan-out | +| `T41-RF-board-V012.kicad_sch` | **RF board** | Quadrature mixer, LO + attenuator daughterboards, I/Q baseband amps | +| `T41-RF-board-Attenuator-daughterboard.kicad_sch` | **Attenuator daughterboard** | 2× PE4312 digital step attenuators | +| `DualClockLO.kicad_sch` | **Dual-clock LO daughterboard** | 2× Si5351A quadrature/independent LO | +| `T41-exciter-filter-board.kicad_sch` | **BPF / exciter-filter board** | Switched per-band band-pass filter banks | +| `K9HZ_100W_11band_LPF-Control.kicad_sch` | **LPF / 100 W PA control board** | Band decode, PA bias, antenna switching, SWR/power sensing | +| `K9HZ_100W_11band_LPF-Filter.kicad_sch` | **LPF filter board** | The actual per-band low-pass filters + their switching relays (added 2026-06-15) | + +## Main board (`T41-main-board-V012`) +- **U8 Teensy 4.1** (compute). **U7 Teensy Audio Adaptor** = the lone **SGTL5000** codec + (double-duty: mic in **+** TX I/Q out). **U6 PCM1808PW** (ADC) = **RX I/Q in**. **U5 PCM5102** + (DAC) = **speaker out**. So the audio path is **one SGTL5000 + PCM1808 + PCM5102** (owner- + confirmed). The firmware's `pcm5102_mainBoard` object represents U5 but is mistyped + `AudioControlSGTL5000`; since PCM parts have no I²C, its control calls are no-ops — a code + clarity fix, not a missing chip. → [[hardware-platform]] +- **U4 ATtiny85-20S** + **Q1/Q4 SUP90P06-09L** P-MOSFETs + **SW1 ON-OFF button** = soft + power-switching / housekeeping. +- Regulators: **U1/U9 LM7805** (+5 V), **U3/U10 LM1117-3.3** (+3.3 V), **U2 AP7384**; TO-220 + heatsinks (EA-T220-38E). Rails seen: +12V, +5V, +3V3. +- **Three I²C buses leave the Teensy**: net labels `SDA/SCL`, `SDA1/SCL1`, `SDA2/SCL2` + (= Wire/Wire1/Wire2 — confirms [[i2c-bus-map]]). +- Connectors: **J6 RF CONTROL** (→RF board), **J12 BANDS** (→filter boards), **J5 Front + Panel**, **J7 Display** + **J8 Display Voltage** (the RA8875 module is *off-board* — that is + why no RA8875 appears in the schematic), **J9 Keys/PTT**, **J16 Mic_In**, **J17 Ex_Out** + (TX I/Q to exciter), **J14/J15 Rec_Out/In**, **J11 ENCODER**, **J24 USBHost**, **J23 + Ethernet**, **J3 Acc**, **J4 12-13.8 V**. + +## RF board (`T41-RF-board-V012`) +- **U12 = T41_DualClock_Daughter** (the dual-Si5351 LO board) and **U3 + U11 = + T41_Attenuator_Daughter** (two PE4312 attenuator boards → RX and TX paths). +- **TR1 ADT1-1, TR2 ADT2-1T** RF transformers (mixer/balun); **U2 PSA-8A+** and **U13 + MAR-3SM+** MMIC gain blocks; **U7/U9 MASWSS0179** RF switches (T/R, cal loopback); + **U1/U4 74CBTLV3253** analog muxes (I/Q switching) *(infer: quadrature routing)*. +- I/Q baseband op-amps: **U6/U8 MC33078, U106 AD8599, U107 OPA2209, U16 LM358B**. +- **U21 MCP23017** (= 0x27, the RF-board GPIO that latches switch/attenuator control). +- Coax/headers: **J1 IQ_Out, J5 IQ_In** (to/from main-board codecs), **J2 RF_IN, J6 RF_OUT, + J3 RFControl**. + +## Attenuator daughterboard (`…Attenuator-daughterboard`) +- One **PE4312** per board (chip ref `U1` in this sheet) — 6-bit digital step attenuator, + **31.5 dB / 0.5 dB**. The hardware behind `SetRXAttenuation`/`SetTXAttenuation` ([[rf-board]]). +- **Designators are revision-dependent** (the wiring/firmware never changed): in **V12.8** (this + `raw/` schematic, PE4312 on daughterboards) **RX = U11, TX = U3** (U12 = dual-clock daughter); + in **prior revisions** (PE4312 on the RF board) **RX = U3, TX = U12**. +- **Control mapping (electrical, revision-independent; owner-confirmed 2026-06-14):** MCP23017 + (U21, 0x27) **GPIOA → RX attenuator**, **GPIOB → TX attenuator**, low 6 bits = attenuation + word: bit0→pin20 (C0.5), bit1→19 (C1), bit2→17 (C2), bit3→16 (C4), bit4→15 (C8), bit5→1 (C16); + PE4312 pin 18 = GND. Matches firmware `round(2·dB)&0x3F` exactly. → [[rf-board]] + +## Dual-clock LO daughterboard (`DualClockLO`) +- **2× Si5351A-B-GM** clock generators, **25 MHz reference** (ECS-TX053 TCXO + crystal), + 2k2 I²C pull-ups, **qwiic** connector. Confirms the dual-VFO 0x60/0x61 Si5351 hardware + ([[rf-board]], [[i2c-bus-map]]). + +## BPF / exciter-filter board (`T41-exciter-filter-board`) +- ~**22× MASWSS0179** RF switches + **SN74LVC1G04** inverters switch **per-band band-pass + L-C filter banks** (RX image rejection + TX). **U35 MCP23017** (= 0x24) does band select. +- Connectors: **J1 TO PA, J2 FROM EXCITE, J5 TO RECEIVE, J6 FROM LPF, J4 Bands**. + +## LPF / 100 W PA control board (`K9HZ_100W_11band_LPF-Control`) +- **Decode chain (owner net-trace 2026-06-15):** MCP23017 (U15, 0x25) → **U12 CD74HC4514** + 4→16 decoder (band BCD on GPIOB[0:3], A0–A3 = pins 2,3,21,22) → inverting **U9/U10 ULN2803** + → **external** band-LPF relays via **J24/J25** (selected line driven LOW; NF=Y15 bypass). + Antenna: GPIOB[4:5] → **U2 74HC237** → **U4 ULN2803** → **K4–K7**. 100 W PA: GPIOB[7] → spare + U4 channel → **K2/K3**. BPF RX/TX routing: GPIOA[0:1] → **U5/U6** (BPF between J15–J18). So the + on-board **K2–K7 are PA (K2/K3) + antenna (K4–K7)** — *not* the band LPFs (those are external). + Full BCD table + detail in [[filter-boards]]. +- **Power/SWR sensing** (net-traced + owner-confirmed 2026-06-14): the directional coupler + feeds **two AD8307 log detectors** — **U14 = forward, U19 = reflected** — whose log outputs + (`FWD_V`/`REF_V`) go to the **AD7991** I²C ADC (CH0/CH1). The ADC's reference is the + **REF3440 4.096 V** on Vin3/Vref (net `REF` = the *reference*, not "reflected"). The default + firmware path correctly converts these log voltages mV/25 − 84 → dBm → W + (`LPFBoard.cpp:640-643`); the linear `(V·10)²/50` formula is the separate `USE_ANALOG_SWR` + diode-detector path. → [[filter-boards]] +- PA control: **Q1 IRF630, L7808, TC4428**. Back-end connectors: **ANT-1…ANT-4**, **FROM + 100 W PA / TO 100 W PA**, **TO/FROM 20 W PA**, **TO XVTR**, **TR CTL**, **Bands**, + **KEY OUT**. + +## LPF filter board (`K9HZ_100W_11band_LPF-Filter`, added 2026-06-15) +The board holding the actual filters that the control board selects. +- **24× HF41F/12-ZS** relays = **2 per band** (input + output switch). **One dedicated LPF per + band** (11 bands) + a **BNF straight-through bypass** — not band-groups. +- Selected by **band-named control nets** `B160M…B6M, BNF` arriving on **J26/J27** (LPF CTRL + LOW/HI) from the control board's J24/J25. Each net appears 3× (2 relay coils + 1 connector pin). +- Each filter is a **7th-order LC ladder**: 3 series inductors (symmetric, outer pair equal + + distinct middle) + shunt caps. **33 inductors** (3 × 11); inductance descends with frequency + (5.21/4.73 µH at 160 m → 0.188/0.170 µH at 6 m). Caps 27 pF–2200 pF. +- Closes the band-select loop: control-board **U12 CD74HC4514 output Yn (n = band BCD)** → this + board's **B** relays → that band's filter. → [[filter-boards]] + +## What this source changed +- **Resolved:** one physical SGTL5000 (not two); RA8875 is off-board; PE4312 = the 31.5 dB/ + 0.5 dB attenuators; AD8307+AD7991 = the power/SWR chain; dual Si5351 confirmed. +- **Resolved (owner, 2026-06-14):** one SGTL5000 total (mic+TX I/Q); `pcm5102_mainBoard` = + the PCM5102 speaker DAC, mistyped `AudioControlSGTL5000` (no-op control calls). Code clarity + fix, not a bug. → [[hardware-platform]] +- **False alarm cleared (net trace, 2026-06-14):** the suspected "AD8307 log vs linear power + math" bug was a wiki error. The default digital path already does the correct log conversion; + the linear formula is the unrelated analog-diode path. → [[filter-boards]] +- Many component-level details added to [[rf-board]] and [[filter-boards]]. diff --git a/wiki/theory/.gitkeep b/wiki/theory/.gitkeep new file mode 100644 index 0000000..4fa392b --- /dev/null +++ b/wiki/theory/.gitkeep @@ -0,0 +1 @@ +# Theory pages: DSP/SDR concepts, the book, calibration, domain knowledge. diff --git a/wiki/theory/agc-design.md b/wiki/theory/agc-design.md new file mode 100644 index 0000000..4071e55 --- /dev/null +++ b/wiki/theory/agc-design.md @@ -0,0 +1,130 @@ +--- +title: AGC Design (wdsp look-ahead AGC) +type: concept +status: draft +created: 2026-06-08 +updated: 2026-06-14 +tags: [agc, gain-control, attack, decay, hang, look-ahead, wdsp] +source_refs: [] +related: ["[[theory-overview]]", "[[dsp-chain]]", "[[noise-reduction]]", "[[persistent-config]]"] +--- + +# AGC Design (wdsp look-ahead AGC) + +Automatic Gain Control keeps audio output roughly constant as received signal strength +varies over tens of dB. Phoenix uses the **wdsp** AGC (Warren Pratt NR0V's DSP library, +ported via DD4WH — [[code-heritage]]); the struct comment says so outright (`SDT.h:589`) and +the variable names match wdsp exactly. It's a **look-ahead** AGC with a hang state machine, +not a simple envelope-times-gain multiplier. + +Implementation: `AGCConfig` (`SDT.h:588`), `InitializeAGC()` (`DSP.cpp:238`), `AGC()` +(`DSP.cpp:313`). It runs at the decimated 24 kHz rate (`DSP.cpp:750`), positioned +**after the channel filter but before demodulation**: +`ConvolutionFilter → AGC → Demodulate` (`DSP.cpp:911-919`). So it acts on the **complex, +single-sideband-filtered baseband**, and its level detector uses the true analytic-signal +magnitude `sqrt(I²+Q²)` — the instantaneous envelope — which is exactly the right quantity to +ride gain on. [[noise-reduction]] runs *later*, on the demodulated audio. + +## The pieces of a good AGC *(general DSP)* + +1. **Envelope follower.** Track the signal magnitude with a one-pole leaky integrator. Each + time constant `τ` maps to a per-sample coefficient `α = 1 − exp(−1/(fs·τ))` — exactly the + form used throughout `InitializeAGC` (`DSP.cpp:275-299`). +2. **Fast attack, slow decay.** Gain must drop *instantly* when a strong signal arrives (or + it clips), but recover *slowly* (or the background "pumps"). Hence `tau_attack = 1 ms` vs. + `tau_decay = 50 ms … 2 s` depending on mode (`SDT.h:590-591`). +3. **Look-ahead.** If you compute gain from the signal you're *outputting*, attack is always + one step late → an overshoot transient escapes. wdsp delays the audio in a **ring buffer** + so the gain control can "see" a peak *before* it reaches the output and clamp it with zero + overshoot. This is the defining feature of this AGC. +4. **Hang.** After a signal stops (between syllables, between CW elements), hold the gain for + a "hang time" instead of immediately ramping up — otherwise the noise floor roars back + between words. Engaged only above `hang_thresh`. + +## How Phoenix implements it + +- **Delay-line / look-ahead.** A complex `ring` buffer with `out_index` lagging `in_index` by + `attack_buffsize = ceil(fs · n_tau · tau_attack)` samples (`DSP.cpp:273-274, 331-340`). The + output is the *delayed* sample; the gain is derived from the **peak over the look-ahead + window** `ring_max` (`DSP.cpp:350-363`). With `n_tau = 4`, `tau_attack = 1 ms`, fs = 24 kHz, + the look-ahead is `ceil(24000·4·0.001) = 96 samples` (~4 ms = 4 attack time-constants). + `n_tau` also corrects the target for the finite-buffer settling: `out_target = + out_targ·(1 − e^(−n_tau))·0.9999` (4 τ ⇒ within 1.8 % of `out_targ`). +- **`n_tau` vs `MAX_N_TAU`.** `MAX_N_TAU` is **not a live symbol** — it appears only as a + commented note `// #define MAX_N_TAU (8)` (with `MAX_SAMPLE_RATE 24000`, `MAX_TAU_ATTACK + 0.01`, `SDT.h:615-617`). Those three are the worst-case constants the static ring is + hand-sized for: `ring_buffsize = 24000·8·0.01 + 1 = 1921` samples (`SDT.h:618`). The ring is + thus over-provisioned ~20× vs the operating 96-sample look-ahead, so `n_tau`, `tau_attack`, or + fs can be raised up to those maxima without reallocating. The *operating* value is `n_tau = 4`. +- **Envelope magnitude.** `pmode = 1` → true magnitude `sqrt(I² + Q²)` of the complex sample + (`DSP.cpp:343-345`); `pmode = 0` would use the cheaper max(|I|,|Q|). +- **Two back-averages.** `fast_backaverage` and `hang_backaverage` (leaky integrators, + `DSP.cpp:347-348`) feed the decay/hang decisions. +- **State machine** (`DSP.cpp:368+`): state 0 attack, plus fast-decay, hang, and normal-decay + branches. A sudden drop larger than `pop_ratio × fast_backaverage` triggers a **fast-decay** + state (transient/"pop" handling, `DSP.cpp:374-376`); otherwise it either **hangs** + (`hang_backaverage > hang_level`) or does **normal decay**. +- **Max gain** comes from the per-band threshold: `max_gain = 10^(AGC_thresh/20)` + (`DSP.cpp:272`) — `AGC_thresh` lives per band in the `band` struct ([[persistent-config]]). + +## The gain law / soft-knee transfer curve + +Per output sample the gain multiplier is a single expression (`DSP.cpp:454`): +```c +mult = (out_target - slope_constant * fmin(0.0, log10f_fast(inv_max_input * volts))) / volts; +``` +where `volts` is the look-ahead peak envelope (`ring_max`-tracked), clamped to a floor of +`min_volts` (`DSP.cpp:447-448`). The init constants (`DSP.cpp:282-291`, defaults `SDT.h:594-596`: +`out_targ = max_input = 1.0`, `var_gain = 1.5`): +- `out_target = out_targ·(1 − e^(−n_tau))·0.9999 ≈ 0.9816` — the target output amplitude. +- `min_volts = out_target / (var_gain·max_gain)` — input floor below which AGC stops acting. +- `slope_constant = out_target·(1 − 1/var_gain) / log10(out_target / (max_input·var_gain·max_gain))`. + +Because the *output* amplitude is `volts·mult`, the multiply by `volts` cancels and the curve +becomes clean in three regions (input envelope → output amplitude): + +| Region | Input `volts` | Output `volts·mult` | Behaviour | +|---|---|---|---| +| **Limiting** | ≥ `max_input` (1.0) | `out_target` (flat) | `fmin` clamps the log term to 0 → output pinned at `out_target` regardless of input. Full compression. | +| **Soft knee** | `min_volts … max_input` | `out_target − slope_constant·log10(volts/max_input)` | **Linear-in-log(input)**: output falls by `slope_constant` per decade of input. | +| **Linear / max-gain** | < `min_volts` | `volts·max_gain` | `volts` clamped to `min_volts` → constant gain = `max_gain`; AGC inactive (`agc_action = 0`). | + +The knee is continuous: at `volts = min_volts` the soft-knee formula gives output +`= out_target/var_gain` and gain exactly `= max_gain`; at `volts = max_input` it gives +`out_target`. So **`var_gain` is the wdsp "slope" control**: the total output rise across the +whole active range is `out_target·(1 − 1/var_gain)`. With `var_gain = 1.5` that is +`0.9816·0.333 ≈ 0.327`, i.e. output climbs from `out_target/1.5 ≈ 0.654` at the max-gain point +to `≈ 0.982` at the limiting threshold — about **+3.5 dB** of deliberate output variation across +the AGC's range (a gentle knee, not a hard limiter). `var_gain = 1` would zero `slope_constant` +→ a hard knee (flat output right down to `min_volts`). `max_gain = 10^(AGC_thresh/20)` sets the +floor gain and hence the knee position via `min_volts`. + +## User-facing modes (`InitializeAGC`, `DSP.cpp:243-270`) + +| `ED.agc` | hangtime | tau_decay | hang_thresh | +|---|---|---|---| +| `AGCOff` | — | — (fixed gain ×20, `DSP.cpp:323`) | — | +| `AGCLong` | 2.0 s | 2.0 s | — | +| `AGCSlow` | 1.0 s | 0.5 s | — | +| `AGCMed` | 0.0 s | 0.25 s | — | +| `AGCFast` | 0.0 s | 0.05 s | 1.0 | + +`AGCOff` bypasses the whole machine and applies a constant `fixed_gain = 20.0`. + +## Ordering in the RX chain +`ConvolutionFilter → AGC → Demodulate → BandEQ → NoiseReduction` (`DSP.cpp:911-927`). AGC +acts on the **complex filtered signal before demodulation**, so it sees the clean +analytic-signal envelope rather than post-demod audio that NR/EQ have already reshaped. (My +earlier draft said NR ran before AGC — that was wrong; corrected 2026-06-08.) + +## Open questions +- Whether `AGC_thresh` is exposed live on the front panel / menus and its dB range. + +## Resolved +- **Soft-knee transfer curve.** Documented above: three regions (flat limiting ≥ `max_input`; + linear-in-log soft knee `min_volts…max_input` falling `slope_constant`/decade; constant + `max_gain` below `min_volts`). `var_gain` is the slope knob — total output rise across the + range = `out_target·(1 − 1/var_gain)` ≈ +3.5 dB at `var_gain = 1.5`. *(resolved 2026-06-14)* +- **`n_tau` vs `MAX_N_TAU`.** `MAX_N_TAU = 8` is a commented-out worst-case constant (not used + at runtime) baked into the static `ring_buffsize = 24000·8·0.01+1 = 1921` allocation; the + operating `n_tau = 4` gives a 96-sample (~4 ms) look-ahead at 24 kHz. *(resolved 2026-06-14)* diff --git a/wiki/theory/audio-equalizer.md b/wiki/theory/audio-equalizer.md new file mode 100644 index 0000000..afd1454 --- /dev/null +++ b/wiki/theory/audio-equalizer.md @@ -0,0 +1,64 @@ +--- +title: Audio Equalizer (14-band parallel filterbank) +type: concept +status: draft +created: 2026-06-09 +updated: 2026-06-09 +tags: [equalizer, eq, filterbank, biquad, audio, tx, rx] +source_refs: [] +related: ["[[theory-overview]]", "[[dsp-chain]]", "[[ssb-phasing-method]]", "[[display-subsystem]]", "[[persistent-config]]", "[[front-panel]]"] +--- + +# Audio Equalizer (14-band parallel filterbank) + +Phoenix has a **14-band graphic equalizer** applied to both receive audio and transmit audio, +letting the operator shape tone (e.g. tailor TX audio for punch, or RX audio for comfort). +Implemented in `BandEQ()` / `ApplyEQBandFilter()` (`DSP_FFT.cpp:787-836`). + +## How a graphic EQ works here *(general DSP)* +This is a **parallel constant-band filterbank**, not a chain of shelving filters: the audio is +run through **14 fixed band-pass biquad filters in parallel**, each output scaled by its band's +gain "slider", and the 14 scaled outputs are **summed** back into one signal. Moving a slider +boosts/cuts only that band's contribution to the sum. + +``` +audio ─┬─ band1 BPF ─×g1─┐ + ├─ band2 BPF ─×g2─┤ + │ ... ├─ Σ ─→ equalized audio + └─ band14 BPF ─×g14┘ +``` + +## Implementation +- **Band filters:** `EQ_Coeffs[14]` (`DSP_FIR.cpp:475`) — 14 fixed biquad-cascade coefficient + sets (`EQ_Band1Coeffs…EQ_Band14Coeffs`), `eqNumStages = 4` each, run with + `arm_biquad_cascade_df2T_f32`. +- **Separate RX/TX instances, shared coefficients:** `S_Rec[14]` and `S_Xmt[14]` filter states + both point at the same `EQ_Coeffs[i]` (`DSP_FFT.cpp:396-397`) — same bands, independent filter + memory for the two paths. +- **Per-band gains:** `ED.equalizerRec[14]` (RX) and `ED.equalizerXmt[14]` (TX), + [[persistent-config]]. Stored as integers, scaled `/100` (100 = unity), default all 100 (flat). +- **The summation** (`ApplyEQBandFilter`): each band filters `data->I` → `eqFiltBuffer`, scales + by `sign × gain`, and **accumulates** into `eqSumBuffer`; `BandEQ` zeroes the accumulator, + loops all 14 bands, then copies the sum back to `data->I`. +- **Alternating sign:** even-numbered bands are summed with `sign = −1` + (`DSP_FFT.cpp:788-789`). This phase-alternation across adjacent overlapping band-pass filters + is what makes the filterbank **reconstruct flat** at unity gain (adjacent bands would + otherwise add constructively and bump the response). +- **NaN guard:** the per-band filter state is checked and zeroed if it goes non-finite + (`DSP_FFT.cpp:797-798`) — same cold-boot/feedback robustness theme as elsewhere in the DSP. + +## Where it runs in the chain +- **RX:** `BandEQ(&data, &RXfilters, RX)` runs after demodulation (`DSP.cpp:924`, the RX order + in [[dsp-chain]]). +- **TX:** the same engine with `TXRX = TX` shapes the microphone audio in the transmit chain + ([[ssb-phasing-method]]) using the `equalizerXmt` gains. + +## User interface +Edited on the dedicated equalizer screen `MainBoard_DisplayEqualizer` (the UISm `EQUALIZER` +state, [[display-subsystem]]); the operator selects a band and adjusts its gain with the +front-panel encoder ([[front-panel]]). A toggle switches between editing the RX and TX curves. + +## Open questions +- The 14 band centre frequencies / Q (from `EQ_Band*Coeffs`) — tabulate them. +- Gain range of the `equalizerRec/Xmt` sliders (just 0–100, or boost above 100?). +- Confirm the RX-vs-TX edit toggle path (`ToggleRXTXEqualizerEdit` referenced in `Loop.cpp`). diff --git a/wiki/theory/fast-convolution-filtering.md b/wiki/theory/fast-convolution-filtering.md new file mode 100644 index 0000000..889f101 --- /dev/null +++ b/wiki/theory/fast-convolution-filtering.md @@ -0,0 +1,72 @@ +--- +title: Fast-Convolution (FFT Overlap) Filtering +type: concept +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [fft, convolution, overlap-save, filtering, channel-filter] +source_refs: [] +related: ["[[theory-overview]]", "[[iq-quadrature-sampling]]", "[[ssb-phasing-method]]", "[[multirate-decimation]]", "[[zoom-fft]]", "[[dsp-chain]]", "[[code-heritage]]"] +--- + +# Fast-Convolution (FFT Overlap) Filtering + +This is the radio's main **channel filter** and the reason the ancestor project was called +the *Teensy Convolution SDR* ([[code-heritage]]). Instead of a long time-domain FIR, Phoenix +filters by **multiplying in the frequency domain** — cheap, and trivially reconfigurable +(change the mask, not the taps). + +Implementation: `ConvolutionFilter()` (`DSP_FFT.cpp:685`), mask built by `InitFilterMask()` +/ `UpdateFIRFilterMask()` (`DSP_FFT.cpp:334`). + +## Why FFT filtering *(general DSP)* + +Convolution in time = multiplication in frequency. Filtering a block with an `N`-tap FIR +costs `O(N·L)` per `L` samples directly, but `O(L log L)` via FFT → multiply → IFFT. For the +sharp, narrow SSB/CW channel filters a radio wants (hundreds of taps), the FFT route wins +and lets the passband shape be an arbitrary, **complex, asymmetric mask** — which is what +makes single-sideband selection fall out for free ([[ssb-phasing-method]]). + +The equivalent FIR length here is `m_NumTaps = FFT_LENGTH/2 + 1 = 257` (`SDT.h:423`). + +## Overlap-save, as implemented + +Phoenix uses **50%-overlap overlap-save** with a 512-point complex FFT over 256-sample +blocks (block size = `READ_BUFFER_SIZE/DF = 2048/8 = 256`, at 24 kHz). Per block +(`DSP_FFT.cpp:705-772`): + +1. **Assemble 512-sample buffer**: first half = *previous* block's I/Q + (`last_sample_buffer_L/R`), second half = current block. The overlap carries the filter's + memory across block boundaries so there's no edge discontinuity. +2. **Forward FFT**: `FFT512Forward()` in place, interleaved `[re,im,…]`. +3. **Apply mask**: `arm_cmplx_mult_cmplx_f32(buffer, FIR_filter_mask, iFFT_buffer, 512)` — + one complex multiply per bin. The mask encodes bandwidth, low/high cut, **and** sideband. +4. **(Tap the spectrum)**: the magnitude² of the masked bins feeds the audio spectrum + display (`DSP_FFT.cpp:745-761`). +5. **Inverse FFT**: `FFT512Reverse()`. +6. **Discard-and-keep**: throw away the first 256 complex samples (the time-aliased part), + keep the last 256 as clean output (`DSP_FFT.cpp:768-772`). This discard is the defining + move of overlap-**save**. + +## The filter mask = the radio's selectivity + +`FIR_filter_mask` is a length-512 **complex** array. Because the baseband is complex +([[iq-quadrature-sampling]]), the mask need not be symmetric about DC, so: +- **Bandwidth / passband** comes from which bins are non-zero (driven by the band's + `FHiCut_Hz` / `FLoCut_Hz`, `DSP_FFT.cpp:362-364`). +- **Sideband (USB/LSB)** comes from *which half* (positive vs. negative bins) is passed. +- Recomputed only when filter settings change (`UpdateFIRFilterMask`), not per block — the + efficiency payoff over time-domain variable filters. + +## Gotchas captured in the code +- The overlap history buffers `last_sample_buffer_L/R` are `static DMAMEM`, which the Teensy + 4.x does **not** zero at cold boot. Uninitialized NaN/Inf there poisons the first FFT + frame and the NR feedback state, so they are explicitly `CLEAR_VAR`'d in + `InitializeFilters()` (`DSP_FFT.cpp:380-387`). This is a real bug that was fixed — see the + cold-power-cycle NR dropout history. + +## Connections +- Runs at the decimated 24 kHz rate — see [[multirate-decimation]] for how we get there and + back. +- The same FFT machinery, with extra IIR decimation up front, drives the [[zoom-fft]] + spectrum display. diff --git a/wiki/theory/iq-imbalance-correction.md b/wiki/theory/iq-imbalance-correction.md new file mode 100644 index 0000000..f75d558 --- /dev/null +++ b/wiki/theory/iq-imbalance-correction.md @@ -0,0 +1,136 @@ +--- +title: I/Q Imbalance Correction & Image Rejection +type: concept +status: draft +created: 2026-06-08 +updated: 2026-06-14 +tags: [iq, imbalance, image-rejection, calibration, amplitude, phase] +source_refs: [] +related: ["[[theory-overview]]", "[[iq-quadrature-sampling]]", "[[ssb-phasing-method]]", "[[hardware-state-machine]]", "[[dsp-chain]]", "[[persistent-config]]"] +--- + +# I/Q Imbalance Correction & Image Rejection + +Quadrature SDR assumes I and Q have **equal gain** and are **exactly 90° apart**. Real +mixers and codecs aren't perfect, so a fraction of the *unwanted* sideband leaks through as +an **image** — a mirror-frequency ghost. Since Phoenix selects sidebands purely by phase +cancellation ([[ssb-phasing-method]]), image suppression *is* sideband suppression, and it +lives or dies on how accurately I/Q is balanced. Phoenix corrects the residual error in +software, per band. + +## Why imbalance creates an image *(general DSP)* + +Write the complex baseband ([[iq-quadrature-sampling]]) as `z = I + jQ`. With a gain error +`g` on Q and a phase error `φ`, the measured signal is a mix of the true signal `z` and its +conjugate `z*`. The conjugate term is the **image**: a tone meant to sit at `+f` also appears +at `−f`. The leakage power relative to the wanted signal — the **image-rejection ratio +(IRR)** — depends on both errors. Rules of thumb: + +| Want IRR | Need amplitude error ≲ | Need phase error ≲ | +|---|---|---| +| ~40 dB | ~1 % (0.09 dB) | ~1° | +| ~50 dB | ~0.3 % | ~0.3° | +| ~60 dB | ~0.1 % | ~0.1° | + +Either error alone caps the IRR, so both must be corrected. The errors drift with +**frequency** (mixer/codec response), which is why Phoenix calibrates **per band**. + +## The correction model in code + +`ApplyIQCorrection()` (`DSP.cpp:206`) is deliberately a *simplified single-axis* model — its +own comment admits "to be honest: we only correct the amplitude of the I channel": + +```c +arm_scale_f32(data->I, amp_factor, data->I, data->N); // 1) amplitude: scale I only +IQPhaseCorrection(data->I, data->Q, phs_factor, data->N); // 2) phase: cross-mix channels +``` + +`IQPhaseCorrection()` (`DSP.cpp:186`) applies a small-angle **shear** — adding a fraction of +one channel into the other rotates the relative phase: +```c +if (factor < 0) Q += factor * I; // mix a bit of I into Q +else I += factor * Q; // mix a bit of Q into I +``` +So `amp_factor` (nominal **1.0**) trims gain, `phs_factor` (nominal **0.0**) trims phase. For +small errors this is a good linear approximation of the exact 2×2 correction matrix. + +Applied early in the chain, right after RF gain and before decimation/filtering +(`ReceiveProcessing`, `DSP.cpp:787`). + +## Per-band storage + +Four arrays in the `ED` struct ([[persistent-config]], `SDT.h:302-305`), one slot per band: +- **RX**: `IQAmpCorrectionFactor[]` (init 1), `IQPhaseCorrectionFactor[]` (init 0) +- **TX**: `IQXAmpCorrectionFactor[]`, `IQXPhaseCorrectionFactor[]` + +They survive power cycles and are restored at startup. + +## How calibration estimates the factors + +The RX routine (`HardwareSm_ReceiveIQCalibration.cpp`, driven by `ReceiveIQCalSm` +([[calibration-state-machines]]) in +[[hardware-state-machine]]) sets the **RX LO to the band center** and injects a **CW test +tone exactly `SampleRate/4` above it** via the cal loopback: +```c +SetRXVFOFrequency( band_center*100 ); // HardwareSm.cpp:609 — LO = band center +SetCWVFOFrequency( (band_center + SR[SampleRate].rate/4)*100 ); // line 613 — tone = LO + Fs/4 +``` +With the default raw rate `SampleRate = SAMPLE_RATE_192K` (`Globals.cpp:106`, +`SR[].rate = 192000`), `Fs/4 = 48 kHz` — **this is what "48 kHz above/below the LO" in the +code comment means**; it is not arbitrary, it is the [[iq-quadrature-sampling]] Fs/4 offset. + +The measurement uses the **512-bin spectrum-display FFT** (`psdnew[SPECTRUM_RES]`, +`SPECTRUM_RES = 512`), *not* the 24 kHz baseband. Cal forces **`spectrum_zoom = 0` (1×)** +(`HardwareSm.cpp:498`) so the FFT spans the full raw **192 kHz** → bin width = 192000/512 = +**375 Hz**, and the display is fftshifted with **bin 256 = LO** (confirmed by the TX routine +reading the carrier at `psdnew[256]`). The tone at LO+Fs/4 therefore lands at +bin 256 + 48000/375 = **bin 384** (the *wanted* product); its conjugate image mirrors to +bin 256 − 128 = **bin 128**. The objective maximized is the **sideband separation**: +```c +float32_t upper = psdnew[384]; // wanted tone (LO + Fs/4) — line 195 +float32_t lower = psdnew[128]; // image (LO − Fs/4) — line 196 +sideband_separation = (upper - lower) * 10; // line 197 +``` +The `×10` converts the metric to **decibels**: `psdnew` already holds a log10 magnitude +(`DSP_FFT.cpp:144,186` write `log10f_fast(...)`), so `(upper − lower)` is a base-10 +log *ratio* and ×10 turns it into dB (power-style 10·log₁₀). Maximizing it drives the image +(bin 128) down relative to the wanted tone (bin 384). +It then runs a **3-pass coordinate search** (`AdjustRXIQCalSetting`, line 142), alternating +amplitude (even iterations) and phase (odd): + +| Pass | Iterations | Step `Delta` | Range | +|---|---|---|---| +| Coarse | 0 (amp), 1 (phase) | 0.02 / 0.01 | full sweep | +| Medium | 2, 3 | 0.01 / 0.01 | ± a few steps about the coarse optimum | +| Fine | 4, 5 | 0.001 / 0.001 | ± steps about the medium optimum | + +Each pass **re-centers** on the previous optimum (`center[nextIndex] = maxSBS_parameter`, +line 154) and shrinks the step — a classic narrowing grid/coordinate descent. During the +search, measurements are IIR-smoothed (0.5/0.5) to fight noise; a final un-smoothed +measurement is taken at the optimum (line 198-204). The machine **auto-advances through all +bands** (`AdjustRXIQBand`, line 112), ~60 ms acquisition per point (line 98). + +The TX routine (`HardwareSm_TransmitIQCalibration.cpp`) is structurally the same, maximizing +sideband separation and writing the `IQX*` arrays. + +## Distinct from carrier null + +Image (sideband) correction is **not** the same as **carrier null / LO leakage**, which is a +DC-offset / leakage problem handled separately by `TransmitCarrierCalSm` +([[hardware-state-machine]]). Image = conjugate term; carrier = additive DC/LO feedthrough. + +## Open questions +- Whether the single-axis (I-only amplitude) model leaves a residual vs. a full 2×2 matrix, + and the achieved IRR per band (needs hardware measurement). + +## Resolved +- **Tone offset = Fs/4, not "~6 kHz".** The tone is placed `SR[SampleRate].rate/4` above the + band-center LO = 48 kHz at the default 192 kHz raw rate (`HardwareSm.cpp:613`). The earlier + "bins 128/384 at 24 kHz ⇒ ±6 kHz" reasoning was wrong: the PSD here is the 192 kHz raw, + 1×-zoom 512-bin display FFT (375 Hz/bin, bin 256 = LO), so ±Fs/4 = ±128 bins = bins 128/384. + The code comment is correct. *(resolved 2026-06-14)* +- **`×10` and `psdnew` units.** `psdnew` is `log10f_fast(magnitude)` (`DSP_FFT.cpp:144,186`), + so the bin difference is a log₁₀ ratio; ×10 expresses sideband separation in **dB**. + *(resolved 2026-06-14)* +- **Wanted/image bin direction.** Wanted product = **bin 384** (tone is Fs/4 *above* the LO), + image = **bin 128**; `(upper−lower)` is maximized to suppress the image. *(resolved 2026-06-14)* diff --git a/wiki/theory/iq-quadrature-sampling.md b/wiki/theory/iq-quadrature-sampling.md new file mode 100644 index 0000000..85a2d92 --- /dev/null +++ b/wiki/theory/iq-quadrature-sampling.md @@ -0,0 +1,69 @@ +--- +title: I/Q Quadrature Sampling & Complex Baseband +type: concept +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [iq, quadrature, complex-baseband, image, analytic-signal] +source_refs: [] +related: ["[[theory-overview]]", "[[ssb-phasing-method]]", "[[iq-imbalance-correction]]", "[[fast-convolution-filtering]]", "[[rf-board]]", "[[dsp-chain]]"] +--- + +# I/Q Quadrature Sampling & Complex Baseband + +The foundation of the whole radio. Phoenix is a **direct-conversion quadrature receiver**: +it mixes the RF signal down to (near) 0 Hz using two local-oscillator copies 90° apart, +producing two real streams **I** (in-phase) and **Q** (quadrature) that together form one +**complex** baseband signal `z[n] = I[n] + jQ[n]`. + +## Why complex? Sign of frequency + +*(general DSP)* A single real mixer folds frequencies symmetrically about the LO: a signal +at LO+5 kHz and one at LO−5 kHz both land at 5 kHz and become inseparable (the **image** +problem). Sampling in **quadrature** keeps the two apart because the complex exponential +`e^{jωn}` distinguishes positive from negative ω, whereas a real cosine cannot. + +Concretely, for a tone at offset `f` from the LO: +- `I[n] = cos(2π f n / fs)` +- `Q[n] = sin(2π f n / fs)` + +The **sign of `f`** survives only in the *relative phase* of Q vs. I (Q leads or lags I by +90°). A real-only receiver throws that away; the quadrature receiver keeps it, so signals +above and below the LO occupy **positive vs. negative frequencies** of the complex spectrum +and can be filtered independently. This is exactly what [[ssb-phasing-method]] exploits to +pick one sideband, and what the asymmetric filter mask in +[[fast-convolution-filtering]] does in the frequency domain. + +## How Phoenix represents it in code + +The unit of work is a `DataBlock` (`SDT.h:365`): +```c +struct DataBlock { uint32_t N; uint32_t sampleRate_Hz; float32_t *I; float32_t *Q; }; +``` +I and Q are carried as **separate parallel float arrays** throughout the chain (not an +interleaved complex array) until the FFT, where they are interleaved `[re,im,re,im,…]` for +the CMSIS-DSP complex FFT (`ConvolutionFilter`, `DSP_FFT.cpp:707-718`). + +- The hardware quadrature LO is the Si5351 on the [[rf-board]]; the codec digitizes I and Q + at **192 kHz** (`Globals.cpp:106`). +- A block is **2048 samples** (`READ_BUFFER_SIZE`, `SDT.h:175-178`), ≈10.7 ms — matching the + loop's [[real-time-constraints]]. +- After decimation to 24 kHz the notional sampled span is **−12 kHz … +12 kHz** around the + LO (`DSP_FFT.cpp:737`); the negative half is real RF, not a mathematical artifact. + +## The catch: imperfect quadrature + +The above assumes I and Q have exactly equal gain and exactly 90° separation. Real mixers +don't — amplitude/phase imbalance lets a fraction of the unwanted sideband leak through as +an **image**. Phoenix corrects this per band before filtering (`ApplyIQCorrection`, +`DSP.h:111`). See [[iq-imbalance-correction]]. + +## Spectral bookkeeping (worth memorizing) +At 24 kHz over a 512-point FFT, each bin is **24000/512 = 46.875 Hz** (`DSP_FFT.cpp:740`). +Positive frequencies occupy bins 1…129, negative frequencies bins 1023…895 +(`DSP_FFT.cpp:743-744`). The display plots DC…6 kHz = ¼ of the span = 128 bins. + +## See also +- [[ssb-phasing-method]] — using the sign-of-frequency property to select a sideband. +- [[fast-convolution-filtering]] — the complex frequency-domain filter that does it. +- [[zoom-fft]] — zooming the complex baseband for the spectrum display. diff --git a/wiki/theory/multirate-decimation.md b/wiki/theory/multirate-decimation.md new file mode 100644 index 0000000..5afbd11 --- /dev/null +++ b/wiki/theory/multirate-decimation.md @@ -0,0 +1,119 @@ +--- +title: Multirate Decimation & Interpolation +type: concept +status: draft +created: 2026-06-08 +updated: 2026-06-14 +tags: [decimation, interpolation, multirate, polyphase, fir, sample-rate] +source_refs: [] +related: ["[[theory-overview]]", "[[fast-convolution-filtering]]", "[[iq-quadrature-sampling]]", "[[dsp-chain]]", "[[real-time-constraints]]"] +--- + +# Multirate Decimation & Interpolation + +Phoenix digitizes at **192 kHz** but does its channel filtering at a much lower rate, then +brings audio back up to the output rate. Working at the lower rate is what makes the sharp +SSB/CW channel filter affordable: a narrow filter needs a transition band that is a *large +fraction* of Nyquist, which costs few taps at low fs and many at high fs. + +## Decimation = anti-alias filter + downsample *(general DSP)* + +Dropping the sample rate by `M` folds everything above the new Nyquist (`fs/M / 2`) back into +band. So you must **low-pass first** to kill anything that would alias onto the signal of +interest, *then* keep every `M`-th sample. Interpolation is the mirror image: insert `M−1` +zeros (which creates spectral **images**) then low-pass to remove them. + +CMSIS's `arm_fir_decimate_f32` / `arm_fir_interpolate_f32` are **polyphase**: they compute +only the samples that survive, so cost ∝ `numTaps × outputRate`, not input rate. + +## What Phoenix does + +| Path | Stages | Net | Result | Where | +|---|---|---|---|---| +| **RX** | ÷4 then ÷2 | **÷8** | 192 → 24 kHz | `DecimateRxStage1/2`, `SDT.h:407-411` | +| RX out | ×2 then ×4 | ×8 | 24 → 192 kHz | `FIR_int1/2`, `InterpolateReceiveData` `DSP.cpp:697` | +| **TX** | ÷4·÷2·÷2 | **÷16** | 192 → 12 kHz | `TransmitFilterConfig`, `SDT.h:537-553` | +| TX out | ×2·×2·×4 | ×16 | 12 → 192 kHz | same struct | + +RX decimation filters are **designed at runtime** (`InitializeDecimationFilter`, +`DSP_FIR.cpp:1284`) to a 9 kHz passband and **90 dB** stopband (`SDT.h:412-413`). TX instead +uses fixed precomputed 48-tap coefficient sets (`coeffs192K_10K_LPF_FIR`, etc., +`SDT.h:528-533`, `DSP_FFT.cpp:425-442`) — an asymmetry explained below. + +### Why RX designs taps at runtime but TX uses fixed tables +This is **primarily heritage / an incremental refactor, not a deliberate determinism or +latency choice.** The evidence: + +- **The fixed tables are legacy, and shared.** The arrays are named and commented for the + *receive* path — `// 48 Tap Kaiser 192KHz 8KHz Fc RXfilters Dec and Interpolation` + (`DSP_FIR.cpp:174-175`) — yet they are consumed by the **TX** chain + (`coeffs192K_10K_LPF_FIR` at `DSP_FFT.cpp:425`, etc.). They are the original DD4WH + Convolution-SDR coefficient sets ([[code-heritage]]). The RX *decimation* path was later + re-parametrized into `InitializeDecimationFilter` (harris tap-count + Kaiser design, + heap-allocated `malloc`, `DSP_FIR.cpp:1295-1300`); the TX path was built by **reusing the + legacy fixed tables wholesale**. + +- **The runtime path's only structural benefit — rate independence — is currently dormant.** + `InitializeDecimationFilter` derives both `n_dec_taps` and the coefficients from + `SR[SampleRate].rate`, so RX *could* retune to any rate in the `SR[]` table. But + `SampleRate` is set once to `SAMPLE_RATE_192K` (`Globals.cpp:106`) and **never reassigned** + anywhere in the firmware. So in practice RX also always runs at 192 kHz, and the runtime + design recomputes the **same** coefficients on every boot. TX's hardcoded `coeffs192K_*/ + 48K_*/12K_*` tables are simply 192 kHz-specific and would need replacing to change rate. + +- **Net trade-off as it stands:** TX = no heap, fully deterministic, but locked to its baked-in + 192 kHz cutoffs; RX = small init-time heap allocations, recomputed each boot — but to a + constant result, since the rate is fixed. + +**Nuance:** "RX designs at runtime, TX is fixed" over-simplifies. RX is itself a hybrid — only +RX *decimation* is fully runtime (harris-sized). RX *interpolation* uses **fixed tap counts +(48 and 32)** with coefficients still computed at runtime by `CalcFIRCoeffs` +(`DSP_FFT.cpp:401-403`). The cleaner framing is: **RX computes its coefficients at boot; TX +stores them as constants** — both at 192 kHz today. + +## The filter-length formula (and why two stages) + +`InitializeDecimationFilter` sizes each filter with the fred-harris estimate *(general DSP)*: +```c +n_fpass = BW / fs; // normalized passband edge +n_fstop = (fs/M - BW) / fs; // normalized stopband edge (protect BW past new Nyquist) +n_dec_taps = 1 + att_dB / (22 * (n_fstop - n_fpass)); // N ≈ A_stop / (22·Δf) +``` +The tap count is inversely proportional to the **normalized transition width** `Δf`. That is +the whole argument for splitting the rate change: + +Working it for Phoenix's RX (BW = 9 kHz, att = 90 dB): + +| Approach | M, fs in | Δf (norm.) | ~taps | runs at | cost ∝ taps×outRate | +|---|---|---|---|---|---| +| Stage 1 | 4, 192 kHz | 0.156 | ≈27 | 48 kHz out | ≈1.3 M | +| Stage 2 | 2, 48 kHz | 0.125 | ≈33 | 24 kHz out | ≈0.8 M | +| **Two-stage total** | | | ≈60 | | **≈2.1 M** | +| Single ÷8 | 8, 192 kHz | 0.031 | ≈132 | 24 kHz out | ≈3.2 M | + +A single ÷8 stage needs a far sharper (5×) filter because its transition band is squeezed +against the *final* 12 kHz Nyquist while still running at 192 kHz. Splitting lets the first +stage be lazy (wide transition, the new Nyquist is still 24 kHz) and only the last stage be +sharp — fewer taps, less memory, lower MAC load. *(Tap counts above are computed from the +formula, not read from code; exact values depend on integer rounding.)* + +## Implementation conventions +- **State-vector size = `numTaps + blockSize − 1`** (a CMSIS requirement) appears everywhere + here; see the annotated allocations in `SDT.h:494-508` and `DSP_FIR.cpp:1295-1296`. +- After ÷8, the RX block is 2048/8 = **256 samples** at 24 kHz — exactly the block size the + [[fast-convolution-filtering]] FFT expects. +- The whole cascade's group delay counts against the ~10 ms loop budget + ([[real-time-constraints]]). + +## Open questions +- Measured group delay of the RX decimate→filter→interpolate round trip. + +## Resolved +- **TX fixed taps vs RX runtime harris.** Primarily **heritage**, not a deliberate + determinism/latency choice: the fixed 48-tap tables are legacy DD4WH coefficients (the arrays + are even named/commented "RXfilters", `DSP_FIR.cpp:174-175`) reused wholesale by the TX path, + while RX *decimation* was refactored into the parametrized harris-formula design. The runtime + path's rate-independence is currently dormant — `SampleRate` is fixed at 192 kHz + (`Globals.cpp:106`, never reassigned), so RX recomputes the same coeffs every boot. RX is + itself a hybrid (decimation runtime-sized; interpolation fixed 48/32 taps, + `DSP_FFT.cpp:401-403`). *(resolved 2026-06-14)* diff --git a/wiki/theory/noise-reduction.md b/wiki/theory/noise-reduction.md new file mode 100644 index 0000000..c2c2cde --- /dev/null +++ b/wiki/theory/noise-reduction.md @@ -0,0 +1,122 @@ +--- +title: Noise Reduction Algorithms +type: concept +status: draft +created: 2026-06-08 +updated: 2026-06-14 +tags: [noise-reduction, nr, spectral-subtraction, lms, kim, ephraim-malah, auto-notch] +source_refs: [] +related: ["[[theory-overview]]", "[[agc-design]]", "[[dsp-chain]]", "[[fast-convolution-filtering]]"] +--- + +# Noise Reduction Algorithms + +Phoenix offers **three** selectable noise-reduction algorithms plus off, dispatched by +`NoiseReduction()` (`DSP.cpp:672`) on `ED.nrOptionSelect`. They span two completely +different families: **frequency-domain spectral gain** (Kim, Spectral) and a +**time-domain adaptive filter** (LMS). Implementations live in `DSP_Noise.cpp`. In the RX +chain NR runs on the **demodulated audio**, i.e. **after** AGC and demodulation and the band +EQ: `ConvolutionFilter → AGC → Demodulate → BandEQ → NoiseReduction` (`DSP.cpp:911-927`). + +| Option | Function | Family | Line | +|---|---|---|---| +| `NROff` | — | none | — | +| `NRKim` | `Kim1_NR()` | spectral subtraction (Kim & Ruwisch style), ×30 post-scale | `DSP.cpp:677` | +| `NRSpectral` | `SpectralNoiseReduction()` | decision-directed MMSE (Ephraim-Malah) | `DSP.cpp:682` | +| `NRLMS` | `Xanr()` | LMS adaptive filter / auto-notch | `DSP.cpp:685` | + +## 1. Spectral-gain NR *(general DSP)* + +Both `NRKim` and `NRSpectral` work the same way at a high level: take a short-time FFT of the +audio, **estimate the noise floor per frequency bin**, then apply a **real gain `0…1` per +bin** that attenuates bins dominated by noise and passes bins dominated by signal, then +inverse-FFT. They differ in how the gain is computed. + +### Kim1_NR (`DSP_Noise.cpp:134`) +- **256-point FFT** (`NR_FFT_L = 256`), **128-sample frame step** → 50% overlap, **Hann + window** (`line 192-194`), processed two half-blocks per call (`for k in 0..1`). +- Runs at the **24 kHz decimated RX rate** (raw 192 kHz ÷ DF1·DF2 = 4·2 = 8; `SDT.h:409-410`), + so the **bin bandwidth is 24000/256 = 93.75 Hz**. The in-code comment + `// bin BW is 46.9Hz [12000Hz / 256 bins] @96kHz` (`DSP_Noise.cpp:141,155`) is a **stale + DD4WH heritage artifact** — those are the *old* Convolution-SDR numbers (96 kHz input, + 12 kHz NR rate). The running code is rate-agnostic: it divides by the **live** + `data->sampleRate_Hz / NR_FFT_L` (`line 155-156`), so it is correct at 24 kHz despite the + comment. See [[code-heritage]]. +- A **VAD (voice-activity) bin range** is computed from the band's `FLoCut/FHiCut` + (`line 143-172`) so the gain is only shaped across the actual channel passband — bins + outside the audio filter are left alone. +- Smoothing/aggressiveness constants: `NR_alpha = 0.95`, `NR_KIM_K = 1.0`, `NR_PSI = 3.0` + (`DSP_Noise.cpp:43-44`). +- The DSP applies a **×30 gain** to the result afterward (`DSP.cpp:678-679`) to make up the + algorithm's level loss. + +### SpectralNoiseReduction (`DSP_Noise.cpp:387`) +The sophisticated one. Its own comment cites the literature: *"Based on Romanin et al. 2009, +Schmitt et al. 2002, and Gerkmann & Hendriks 2002"* (`line 361`). That is the +**decision-directed MMSE** lineage: +- **A-posteriori and a-priori SNR** per bin (`NR_SNR_post`, `NR_SNR_prio`), the a-priori SNR + smoothed by the decision-directed rule (`NR_alpha`). +- **Minimum-statistics / Gerkmann-Hendriks noise estimation** (`NR_Nest`). +- Per-bin gain `NR_G` with hysteresis (`NR_Hk_old`, `NR_Gts`). +This is the same family as the wdsp/DD4WH "spectral NR" and gives the least musical-noise of +the three. *(general DSP)* The classic failure mode of naive spectral subtraction is +**musical noise** — isolated random surviving bins that warble; the MMSE/decision-directed +approach exists specifically to suppress it. + +## 2. LMS adaptive filter — `Xanr()` (`DSP_Noise.cpp:302`) + +A single structure that does **both** noise reduction and auto-notch, selected by the +`ANR_notch` argument. It's an **adaptive line enhancer (ALE)**: predict the current sample +from a **decorrelation-delayed** copy of the signal using a 64-tap LMS filter. + +```c +y = Σ w[j]·d[idx]; // adaptive prediction (idx = in + j + ANR_delay) +error = d - y; // what the predictor could NOT predict +data->Q[i] = ANR_notch ? error // NOTCH: keep the unpredictable part → tone removed + : y; // NR: keep the predictable part → tonal/coherent kept +``` + +*(general DSP)* Over a decorrelation delay, **narrowband (tone-like)** components stay +correlated and are predictable; **broadband noise** is not. So `y` (prediction) isolates +tones and `error` (residual) removes them — hence the same engine is **auto-notch** for +heterodyne whistles/carriers (mode 1) and a coherent-signal enhancer (mode 0). It appears +**twice** in the RX chain: as `Xanr(data, 0)` inside `NoiseReduction()` (NR mode, +`DSP.cpp:685`), and as `Xanr(&data, 1)` (notch) at `DSP.cpp:930`, gated by `ED.ANR_notchOn`, +each followed by a copy of the result `Q → I` (see I/O contract below). + +### I/O contract (important, and a little surprising) +`Xanr` **reads `data->I`, writes its output to `data->Q`, and never modifies `data->I`**. But +everything downstream (`InterpolateReceiveData`, `DSP.cpp:700`) treats **`I`** as the primary +channel. So each `Xanr` call is followed by a `Q → I` copy that also folds in a makeup gain: +- NR mode: `arm_scale_f32(data->Q, 2, data->I, N)` (`DSP.cpp:687`) — 2× makeup, Q→I. +- Notch: `arm_copy_f32(data.Q, data.I, N)` (`DSP.cpp:932`) — plain Q→I. + +This *looks* like a `Q`/`I` mix-up but is correct (verified 2026-06-08): without it the +denoised signal in `Q` would be discarded. The commented-out `//arm_scale_f32(data->I, 1.5, +data->I,…)` next to line 687 is the buggy in-place variant they abandoned — it would have +scaled the *un-denoised* `I`. Treat the "Xanr outputs to Q" convention as a documented +gotcha. + +Parameters (`DSP_Noise.cpp:51-59`): `ANR_taps = 64`, `ANR_delay = 16`, step +`ANR_two_mu = 1e-4`, delay-line `ANR_DLINE_SIZE = 512`. The update is a **leaky normalized +LMS**: `w[j] = c0·w[j] + c1·d[idx]` with `c0 = 1 − 2µ·ngamma` (adaptive leakage) and +`c1 = 2µ·error/σ` (normalization by input energy `σ`, `line 345-350`). The leakage `ngamma` +is driven by an adaptive index `ANR_lidx` clamped to 120…200 (`line 337-343`) — this is the +wdsp "leak" control that trades convergence speed against stability. + +## Robustness notes captured in the code +- **NaN latch hazard.** `Xanr` sanitizes each input sample (`line 311-314`): a single + non-finite sample would otherwise be baked **permanently** into the adaptive weights and + never wash out. The spectral buffers are `DMAMEM` and `CLEAR_VAR`'d at init + (`DSP_Noise.cpp:112`) — the same cold-boot uninitialized-DMAMEM class of bug noted for the + convolution overlap buffers in [[fast-convolution-filtering]] (and fixed in the + "NR audio dropout after cold power cycle" change). + +## Open questions +- Where `ED.ANR_notchOn` and the manual-vs-auto notch choice are set in the UI. + +_Resolved 2026-06-08: the `DSP.cpp:687` `Q→I` 2× scale is correct, not a typo (see I/O +contract above); auto-notch is `Xanr(&data,1)` at `DSP.cpp:930`._ +_Resolved 2026-06-14: NR runs at the **24 kHz** decimated rate → 93.75 Hz/bin (256-pt FFT). +The `12000Hz … @96kHz` bin-BW comment is stale DD4WH text; the code uses the live sample rate +(`data->sampleRate_Hz / NR_FFT_L`) so it is correct regardless of the comment._ diff --git a/wiki/theory/ssb-phasing-method.md b/wiki/theory/ssb-phasing-method.md new file mode 100644 index 0000000..e58466d --- /dev/null +++ b/wiki/theory/ssb-phasing-method.md @@ -0,0 +1,89 @@ +--- +title: SSB by the Phasing (Hilbert) Method +type: concept +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [ssb, phasing, hilbert, usb, lsb, demodulation, modulation] +source_refs: [] +related: ["[[theory-overview]]", "[[iq-quadrature-sampling]]", "[[fast-convolution-filtering]]", "[[dsp-chain]]", "[[mode-state-machine]]"] +--- + +# SSB by the Phasing (Hilbert) Method + +Phoenix generates and demodulates single-sideband by the **phasing method** — *not* the +filter method and *not* the Weaver/third-method. The defining evidence is the ±45° Hilbert +FIR pair on transmit (`DSP_FFT.cpp:851`) and the asymmetric complex filter mask on receive. + +## The principle *(general DSP)* + +A real audio tone `cos(ω_a t)` contains **both** +ω_a and −ω_a. To transmit only one +sideband you must suppress one of them. The phasing method builds the **analytic signal** +— a complex signal whose spectrum is one-sided — by pairing the audio with its **Hilbert +transform** (a 90° phase shift at all frequencies): + +``` +analytic(t) = audio(t) + j·Hilbert{audio(t)} +``` + +Mixing this complex signal up against the quadrature LO places the audio on exactly one side +of the carrier. Choosing **+** or **−** for the j term (equivalently, swapping I/Q or +negating one) flips between **USB and LSB**. No steep analog/IF crystal filter is needed — +the sideband rejection comes from phase cancellation, which is why image/imbalance accuracy +matters so much ([[iq-imbalance-correction]]). + +## Transmit path in Phoenix + +`TransmitProcessing()` (`DSP.h:83`) → the relevant stage `HilbertTransform()` +(`DSP_FFT.cpp:851`): + +```c +// Operates at 12 kHz, 128-sample blocks +arm_fir_f32(&FIR_Hilbert_L, data->I, data->I, 128); // +45° FIR (coeffs_45) +arm_fir_f32(&FIR_Hilbert_R, data->Q, data->Q, 128); // −45° FIR (coeffs_neg_45) +``` + +Key implementation details: +- Rather than one 90° shifter plus a delay, Phoenix uses a **+45°/−45° pair** of 100-tap + FIRs (`FIR_Hilbert_coeffs_45` / `_neg_45`, `SDT.h:531-532`). Their *difference* is 90°, + and being symmetric about 0° keeps both branches' amplitude/group-delay matched — the + standard practical way to build a wideband Hilbert pair. +- Audio is decimated 192 kHz → **12 kHz** first (`TransmitFilterConfig` ÷4·÷2·÷2, + `SDT.h:537-553`); the Hilbert works over ~5 kHz BW at 12 kHz (`DSP_FFT.cpp:852`). +- Sideband choice is a one-line sign flip: `SidebandSelection()` negates I for USB, LSB is + the default (`DSP_FFT.cpp:864-869`). +- The quadrature pair is then interpolated back to 192 kHz and sent to the codec → Si5351 + quadrature mixer on the [[rf-board]]. + +## Receive path — phasing done in the frequency domain + +On RX, Phoenix doesn't run a separate time-domain Hilbert. Instead, sideband selection is +folded into the **fast-convolution filter mask** ([[fast-convolution-filtering]]). Because +the baseband is complex ([[iq-quadrature-sampling]]), one sideband is the positive-frequency +half and the other is the negative-frequency half of the FFT. The complex `FIR_filter_mask` +(`InitFilterMask`, `DSP_FFT.cpp`) passes only the wanted half. + +By the time `Demodulate()` (`DSP.cpp:629`) runs, the unwanted sideband is already gone, so +for USB/LSB it simply copies the real part to both output channels: +```c +case LSB: case USB: + arm_copy_f32(data->I, data->Q, data->N); // real part is the audio + break; +``` +(AM/SAM take different branches — magnitude estimation / synchronous detection.) The LSB vs. +USB distinction shows up earlier, in which FFT bins the mask keeps and which half the PSD is +read from (`DSP_FFT.cpp:748-754`). + +## Why this matters +- **Sideband rejection = phase accuracy.** Any I/Q amplitude/phase error reintroduces the + opposite sideband as an image → [[iq-imbalance-correction]], and the RX/TX I/Q calibration + routines in [[hardware-state-machine]]. +- Operating mode (USB/LSB/CW/AM/SAM) is owned by [[mode-state-machine]] via + `ED.modulation[ED.activeVFO]`. + +## Contrast with alternatives *(general DSP)* +- **Filter method**: generate DSB, cut one sideband with a steep filter. Simple but needs a + high-Q filter; Phoenix avoids it. +- **Weaver / third method**: mix audio to a low IF, low-pass, mix again. No wideband Hilbert + needed, but two extra mixers. Phoenix is **not** Weaver — confirm if any module hints + otherwise before claiming it. diff --git a/wiki/theory/synchronous-am-detection.md b/wiki/theory/synchronous-am-detection.md new file mode 100644 index 0000000..e28081b --- /dev/null +++ b/wiki/theory/synchronous-am-detection.md @@ -0,0 +1,72 @@ +--- +title: Synchronous AM Detection (SAM) +type: concept +status: draft +created: 2026-06-09 +updated: 2026-06-09 +tags: [sam, am, synchronous-detection, pll, carrier, demodulation, fading] +source_refs: [] +related: ["[[theory-overview]]", "[[ssb-phasing-method]]", "[[iq-quadrature-sampling]]", "[[dsp-chain]]", "[[display-subsystem]]", "[[code-heritage]]"] +--- + +# Synchronous AM Detection (SAM) + +Phoenix offers **SAM** as a demodulation mode alongside plain AM. `AMDecodeSAM()` +(`DSP.cpp:567`) is the classic DD4WH/wdsp synchronous detector ([[code-heritage]]), selected by +the `SAM` case in `Demodulate()` ([[dsp-chain]]). + +## Why synchronous detection *(general DSP)* +Plain **envelope AM** (the `AM` case uses a magnitude estimator, `AlphaBetaMag`) distorts badly +under **selective fading**, where the carrier fades independently of the sidebands — the +recovered audio tears up as the carrier drops. **Synchronous AM** instead **regenerates a clean, +steady carrier** locked to the incoming one with a PLL, then mixes coherently. Replacing the +faded carrier with a local steady reference makes detection robust to fading and reduces +distortion — the same reason BFO/product detection beats envelope detection. + +## How Phoenix does it — a 2nd-order PLL + +For each sample (`DSP.cpp:585-613`): +1. **NCO:** generate `Sin`/`Cos` at the current loop phase `phzerror` + (`arm_sin_f32`/`arm_cos_f32`). +2. **Mix** the complex baseband ([[iq-quadrature-sampling]]) against the NCO to get the in-phase + correlation `corr[0]` and quadrature error `corr[1]`, and the coherent `audio`. +3. **Phase detector:** `det = atan2(corr[1], corr[0])` (via `ApproxAtan2`) — the phase error + between the local NCO and the received carrier. +4. **Loop filter + NCO update** (2nd-order): + ``` + omega2 += g2 * det; // integrator → tracks frequency offset (clamped ±pll_fmax) + fil_out = g1 * det + omega2; // proportional + integral + phzerror += (prev fil_out); // NCO accumulates phase, wrapped mod 2π + ``` + The loop gains `g1`, `g2` are derived from the PLL **bandwidth `omegaN = 200`** and damping + `zeta`, and the frequency estimate `omega2` is clamped to **±`pll_fmax = 4000 Hz`** + (`DSP.cpp:579-582`). + +When locked, `omega2` *is* the carrier frequency offset, and the coherent `audio` is the +demodulated output. + +## Fade leveler +An optional **fade leveler** (`fade_leveler`) tracks two DC averages with time constants +`tauR`/`tauI` and re-inserts the difference (`DSP.cpp:594-598`) to even out amplitude as the +signal fades. + +## Carrier-offset readout +The detected offset is published for the UI: +``` +SAM_carrier = omega2 · fs / (2·2π); +SAM_carrier_freq_offset = 0.95·prev + 0.05·(10·SAM_carrier); // smoothed +``` +`GetSAMCarrierOffset()` returns it, and the home-screen **SAM-offset pane** displays it +([[display-subsystem]]) — so the operator can see how far the PLL has pulled and zero-beat the +tuning. + +## Relationship to other modes +- **AM** (envelope) vs **SAM** (synchronous) are both AM-family demods in `Demodulate()`. +- Distinct from SSB ([[ssb-phasing-method]]), which needs no carrier recovery (the sideband + *is* the signal). + +## Open questions +- Exact `zeta` value and the `tauR`/`tauI` fade-leveler constants (and `zeta_help`). +- Why the `×10` factor in the smoothed `SAM_carrier_freq_offset` (display scaling?). +- Whether SAM supports selectable sideband (DSB vs single-sideband SAM) — check the `corr` + combination. diff --git a/wiki/theory/theory-overview.md b/wiki/theory/theory-overview.md new file mode 100644 index 0000000..14b6d69 --- /dev/null +++ b/wiki/theory/theory-overview.md @@ -0,0 +1,71 @@ +--- +title: DSP / SDR Theory — Overview +type: overview +status: draft +created: 2026-06-08 +updated: 2026-06-08 +tags: [dsp, sdr, theory, iq, ssb, filtering] +source_refs: [] +related: ["[[iq-quadrature-sampling]]", "[[ssb-phasing-method]]", "[[fast-convolution-filtering]]", "[[multirate-decimation]]", "[[iq-imbalance-correction]]", "[[agc-design]]", "[[zoom-fft]]", "[[dsp-chain]]"] +--- + +# DSP / SDR Theory — Overview + +This is the **theory** spine for Phoenix: version-independent signal-processing concepts, +constructed from the codebase plus standard DSP fundamentals. (We do **not** have an +electronic copy of the Purdum & Peter T41 book; nothing here is sourced from it.) + +**Convention.** Claims that come from the code are cited as `file:line`. Claims that are +general DSP theory are marked *(general DSP)*. Where the two meet, the code citation pins +the specific choice and the theory explains why it works. + +## The signal path, end to end + +Phoenix is a **direct-conversion quadrature SDR**. The Si5351 produces a local oscillator at +(near) the operating frequency in two copies 90° apart; mixing the antenna signal against +them yields a complex **I/Q baseband** signal that is digitized and processed entirely in +software. Defaults (`Globals.cpp:106`, `SDT.h`): + +| Quantity | Value | Where | +|---|---|---| +| I/O sample rate | **192 kHz** | `SampleRate = SAMPLE_RATE_192K`, `Globals.cpp:106` | +| Block size | **2048** samples (≈10.7 ms) | `READ_BUFFER_SIZE = 128×16`, `SDT.h:175-178` | +| RX decimation | ÷4 then ÷2 = **÷8** → 24 kHz | `ReceiveFilterConfig`, `SDT.h:409-411` | +| TX decimation | ÷4·÷2·÷2 = **÷16** → 12 kHz | `TransmitFilterConfig`, `SDT.h:537-553` | +| FFT length | **512** | `FFT_LENGTH = SPECTRUM_RES`, `SDT.h:145-146` | + +This block size is exactly the ~10 ms real-time budget the firmware is built around — see +[[real-time-constraints]]. + +## Core concepts (each its own page) + +1. **[[iq-quadrature-sampling]]** — why complex baseband; how I/Q encodes both magnitude and + *sign* of frequency offset, enabling a single receiver to separate signals above and + below the LO. The foundation everything else rests on. +2. **[[ssb-phasing-method]]** — Phoenix demodulates and generates SSB by the **phasing + (Hilbert)** method, *not* Weaver or the filter method. RX `Demodulate()` and TX's ±45° + Hilbert FIR pair (`DSP_FFT.cpp:851`). +3. **[[fast-convolution-filtering]]** — the main channel filter is **FFT overlap fast + convolution** (the "Convolution SDR" namesake). `m_NumTaps = FFT_LENGTH/2+1` (`SDT.h:423`). +4. **[[multirate-decimation]]** — two-stage polyphase decimation/interpolation, and why + dropping to 24 kHz makes the channel filter cheap. +5. **[[iq-imbalance-correction]]** — per-band amplitude/phase correction for image rejection; + the theory behind RX/TX I/Q calibration. +6. **[[agc-design]]** — the wdsp-derived AGC (attack/decay, hang). +7. **[[zoom-fft]]** — spectrum-display zoom via IIR decimation before the FFT. +8. **[[noise-reduction]]** — Kim / MMSE-spectral / LMS-notch noise reduction. +9. **[[synchronous-am-detection]]** — SAM: a PLL recovers the carrier for fade-robust AM. +10. **[[audio-equalizer]]** — 14-band parallel filterbank shaping RX and TX audio. + +Plus CW receive (filter + adaptive Morse decoder) in [[cw-processing]] (a firmware page). + +## How theory maps to firmware + +The implementation lives in [[dsp-chain]] (`DSP.cpp`, `DSP_FFT.cpp`, `DSP_FIR.cpp`, +`DSP_Noise.cpp`, `DSP_CWProcessing.cpp`). The RX entry point is `ReceiveProcessing()` +(`DSP.h:63`); TX is `TransmitProcessing()` (`DSP.h:83`). + +## Heritage note +The FFT-convolution core descends from DD4WH's Teensy Convolution SDR — see +[[code-heritage]]. The AGC notes "taken from wdsp" (`SDT.h:589`), i.e. Warren Pratt NR0V's +DSP library, a common lineage in this community. diff --git a/wiki/theory/tx-carrier-null.md b/wiki/theory/tx-carrier-null.md new file mode 100644 index 0000000..46b3ac4 --- /dev/null +++ b/wiki/theory/tx-carrier-null.md @@ -0,0 +1,58 @@ +--- +title: TX Carrier Null (LO leakage suppression) +type: concept +status: draft +created: 2026-06-09 +updated: 2026-06-09 +tags: [carrier-null, lo-leakage, dc-offset, transmit, calibration] +source_refs: [] +related: ["[[theory-overview]]", "[[iq-imbalance-correction]]", "[[ssb-phasing-method]]", "[[hardware-state-machine]]", "[[rf-board]]", "[[persistent-config]]"] +--- + +# TX Carrier Null (LO leakage suppression) + +On a direct-conversion *transmitter*, a residual **carrier** can leak through at the LO +frequency even when the modulating audio is silent. Phoenix nulls it by injecting a small, +calibrated **DC offset** into the baseband I/Q. This is a **distinct** problem from I/Q image +([[iq-imbalance-correction]]): image = the *opposite sideband* (a conjugate term); carrier = +*LO feedthrough* sitting exactly at the suppressed-carrier frequency. + +## Why a DC offset nulls the carrier *(general DSP)* +After the quadrature mixer, a **constant (DC) component** on the baseband I/Q up-converts to a +tone at exactly the **LO/carrier frequency**. LO leakage and converter DC offsets put an +unwanted DC there. Adding an equal-and-opposite DC offset to I and Q cancels it — so the +transmitted carrier is suppressed. Two knobs (`DCOffsetI`, `DCOffsetQ`) cover both quadrature +axes of the leakage vector. + +## How Phoenix applies it +In the transmit output path, a per-band DC offset is added to the I and Q sample streams just +before they go to the codec (`DSP.cpp:1065-1067`): +```c +arm_offset_q15(sp_L2, ED.DCOffsetI[band], sp_L2, USB_BUFFER_SIZE); // I + offset +arm_offset_q15(sp_R2, ED.DCOffsetQ[band], sp_R2, USB_BUFFER_SIZE); // Q + offset +``` +`ED.DCOffsetI/Q[NUMBER_OF_BANDS]` are int16 per-band values in [[persistent-config]] (default +0). + +## Calibration — `TransmitCarrierCalSm` +The values are found by the transmit-carrier calibration routine +(`HardwareSm_TransmitCarrierCalibration.cpp`, driven by the `TransmitCarrierCalSm` sub-machine +in [[hardware-state-machine]]; state map in [[calibration-state-machines]]). It **sweeps `DCOffsetI` then `DCOffsetQ` to maximize carrier +suppression (dBc)** — the same narrowing coordinate-descent used for I/Q balance +([[iq-imbalance-correction]]): step each offset, measure the residual carrier via the RX path +(`GetTXCarrierVals`), keep the value giving the deepest null (`maxDBC` / `maxDBC_parameter`), +and auto-advance through all bands. Per-band because LO leakage varies with frequency. + +## The three TX calibrations, compared +| Calibration | Corrects | Knob(s) | `ED` field | +|---|---|---|---| +| TX I/Q balance | opposite-sideband **image** | amp + phase | `IQXAmp/XPhaseCorrectionFactor` | +| **TX carrier null** | **LO leakage / carrier** | DC offset I, Q | `DCOffsetI/Q` | +| Power | PA output level | attenuation/gain | `PowerCal_*` | + +All three are orchestrated by [[hardware-state-machine]] and run against the same TX hardware +([[rf-board]]). + +## Open questions +- Units/scale of `DCOffsetI/Q` (raw q15 counts) and the achievable suppression in dBc. +- How the residual carrier is measured during cal (which RX bin / path). diff --git a/wiki/theory/zoom-fft.md b/wiki/theory/zoom-fft.md new file mode 100644 index 0000000..2a8796a --- /dev/null +++ b/wiki/theory/zoom-fft.md @@ -0,0 +1,90 @@ +--- +title: Zoom FFT (Spectrum Display) +type: concept +status: draft +created: 2026-06-08 +updated: 2026-06-14 +tags: [fft, zoom, spectrum, waterfall, decimation, display, psd] +source_refs: [] +related: ["[[theory-overview]]", "[[fast-convolution-filtering]]", "[[multirate-decimation]]", "[[display-subsystem]]", "[[dsp-chain]]", "[[real-time-constraints]]"] +--- + +# Zoom FFT (Spectrum Display) + +The main spectrum/waterfall can **zoom** to show a narrower span at finer resolution without +a bigger FFT. The trick: low-pass and decimate the complex baseband *before* the FFT, so the +same 512 bins cover proportionally less bandwidth. Implementation: `ZoomFFTExe()` +(`DSP_FFT.cpp:581`), set up by `ZoomFFTPrep()` (`DSP_FFT.cpp:546`); output goes to the global +`psdnew` array consumed by the [[display-subsystem]]. + +## Two different spectra — don't confuse them +- **Band spectrum / waterfall** — `ZoomFFTExe` → `psdnew`. Computed from the **raw 192 kHz + I/Q** (full RF span), zoomable. *This page.* +- **Audio-passband spectrum** — computed inside `ConvolutionFilter` → `audioYPixel`, always at + the 24 kHz processing rate (46.875 Hz/bin). See [[fast-convolution-filtering]]. + +They run at different rates and serve different display panes. + +## Why decimate to zoom *(general DSP)* + +A 512-point FFT always produces 512 bins; the bin width is `Fsample/512`. To get *finer* bins +without a larger (slower) FFT, **lower the sample rate** feeding the FFT — but first low-pass +to prevent aliasing ([[multirate-decimation]]). Decimating by `2^zoom` divides both the span +and the bin width by `2^zoom`: you see less of the band, in more detail. + +## Zoom levels (`DSP_FFT.cpp:562-568`, `SDT.h:138-144`) + +`zoom_M = 1 << spectrum_zoom` (`DSP_FFT.cpp:548`): + +| `spectrum_zoom` | `zoom_M` | Effective Fsample | PSD bin width | +|---|---|---|---| +| 0 (`ZOOM_1`) | 1 | 192 kHz | **375 Hz** | +| 1 (`ZOOM_2`) | 2 | 96 kHz | 187.5 Hz | +| 2 (`ZOOM_4`) | 4 | 48 kHz | 93.75 Hz | +| 3 (`ZOOM_8`) | 8 | 24 kHz | 46.875 Hz | +| 4 (`ZOOM_16`) | 16 | 12 kHz | 23.4375 Hz | + +Note the base (zoom 1) resolution is **375 Hz/bin** = 192000/512, *not* the 46.875 Hz of the +audio FFT — a common point of confusion since both use a 512-point transform. + +## How it's implemented + +1. **Zoom 1 fast path**: no decimation, `CalcPSD512(I, Q)` directly (`DSP_FFT.cpp:583-586`). +2. **Otherwise**: anti-alias **IIR biquad** low-pass (`biquadZoomI/Q`, 4 stages) then + `decimate_f32` by `zoom_M` (`DSP_FFT.cpp:591-595`). The code notes it deliberately uses an + **IIR** filter, not the FIR decimator used in the audio chain — for a *magnitude* PSD + display, the IIR's non-linear phase doesn't matter, and it's cheaper. Per-zoom cutoff + coefficients come from `mag_coeffs[spectrum_zoom]` (`DSP_FFT.cpp:552`). +3. **Amplitude compensation**: each decimated sample is scaled by + `zoomMultiplierCoeff[spectrum_zoom]` (`DSP_FFT.cpp:604`) to keep PSD amplitude stable as + zoom changes (decimation + filtering otherwise alter the level). +4. **Ring-buffer accumulation for high zoom**: at zoom ≥ 8 a single 2048-sample call yields + `2048/zoom_M < 512` decimated samples, so they are accumulated into `FFT_ring_buffer_x/y` + across multiple calls; the PSD is computed only when 512 have collected + (`DSP_FFT.cpp:605-617`). `ZoomFFTExe` returns `false` on calls where no PSD was produced. + +## Timing interaction +Because high zoom needs several loop passes to fill the ring buffer before a PSD appears, the +**effective spectrum update rate slows with zoom** — directly relevant to the +[[spectrum-refresh-floor]] finding (redraw period ≈ `NCHUNKS × T_loop`, governed by `NCHUNKS` +and the per-frame draw cost, not `SPECTRUM_REFRESH_MS`). See [[real-time-constraints]]. + +## Defaults +Power-on zoom is governed **solely** by `ED.spectrum_zoom`, which defaults to **1** (`ZOOM_2`, +2× → 96 kHz span / 187.5 Hz bins; `SDT.h:274`), unless a saved value is restored from JSON +config (`Storage.cpp:276,501`, `… | ED.spectrum_zoom` fallback). + +`Config.h:78 #define ZOOM 3` is **unrelated** — it is the **front-panel button ID** for the +ZOOM button (button function index 3, under the "Front panel button functions" block, +`Config.h:74-96`), consumed as `case ZOOM:` in the event dispatch (`Loop.cpp:457,818`) where +pressing it does `ED.spectrum_zoom++`. It is not a zoom *level*. So there is no real +discrepancy — the earlier TODO conflated a button identifier with the zoom default. + +## Open questions +- Confirm how `mag_coeffs` cutoffs are chosen per zoom (passband vs. the new Nyquist). +- Exact relationship between `psdnew` bins and on-screen pixels in the [[display-subsystem]]. + +## Resolved +- **`Config.h ZOOM 3` vs `ED.spectrum_zoom = 1`.** Not a conflict: `ZOOM` is a button-ID + macro (`Config.h:74-96`, used in `Loop.cpp:457`), `ED.spectrum_zoom` is the actual zoom + level (default 1 = 2×). Power-on zoom = 1. *(resolved 2026-06-14)* From c95f9323f874e11cf7cdf32e72c2c9087e6cc8ab Mon Sep 17 00:00:00 2001 From: Oliver King Date: Tue, 16 Jun 2026 07:10:08 -0400 Subject: [PATCH 04/25] Unit and documentation fixes --- CLAUDE.md | 18 ++++++++--- code/src/PhoenixSketch/CAT.h | 2 +- code/src/PhoenixSketch/HardwareSm.cpp | 6 ++-- code/src/PhoenixSketch/PhoenixSketch.ino | 41 +++++++++++++++--------- code/src/PhoenixSketch/Storage.cpp | 2 +- code/src/PhoenixSketch/Tune.h | 4 +-- 6 files changed, 46 insertions(+), 27 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index c4fb1b5..29ef92f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -29,7 +29,7 @@ This is the **Phoenix SDR (Software Defined Radio)** project - firmware for a Te - **ModeSm.cpp/h**: Radio mode state machine (generated code) - **UISm.cpp/h**: User interface state machine (generated code) - **RFBoard.cpp/h**: RF hardware control and VFO management -- **Tune.cpp/h**: Frequency tuning and VFO control with state machine +- **Tune.cpp/h**: Frequency tuning math and VFO control (pure functions; the tune *state* lives in HardwareSm.cpp) - **DSP*.cpp/h**: Digital signal processing modules - **CAT.cpp/h**: Computer control interface - **FrontPanel*.cpp/h**: Physical front panel interface @@ -71,12 +71,16 @@ The project uses **StateSmith**-generated state machines for hardware control: - State transitions are event-driven and deterministic - All hardware state changes go through the state machines -### Frequency Control State Machine -The `Tune.cpp` module implements a frequency control state machine with three states: +### Frequency Control State +The frequency-control state machine lives in `HardwareSm.cpp` (`HandleTuneState`), not in +`Tune.cpp`. Its `TuneState` enum has three normal states (plus calibration variants): - **TuneReceive**: Sets SSB VFO for RX operation - **TuneSSBTX**: Sets SSB VFO for TX operation - **TuneCWTX**: Sets CW VFO with tone offset for TX operation +`Tune.cpp` itself is a pure-function library (frequency math + power-curve fitting), not a +state machine. + ### Real-time Constraints - Main loop must complete within 10ms to avoid audio buffer overflows - Interrupt-driven button handling with event queuing @@ -101,7 +105,7 @@ The `Tune.cpp` module implements a frequency control state machine with three st - **Adding new DSP functions**: Follow patterns in `DSP_*.cpp` files - **Modifying state machines**: Update `.drawio` diagrams and regenerate with StateSmith - **New hardware interfaces**: Create a `.cpp` and a `.h` file to hold hardware-specific code (look at `RFBoard.cpp` for an example) with corresponding tests -- **Frequency/tuning changes**: Work with the tune state machine in `Tune.cpp` +- **Frequency/tuning changes**: Work with the tune state machine (`HandleTuneState`) in `HardwareSm.cpp`; the frequency math helpers are in `Tune.cpp` ### Build Commands ```bash @@ -148,4 +152,8 @@ ctest -V - **RF**: Si5351 clock generator for VFO control - **Interface**: MCP23017 I2C GPIO expanders for front panel -This is a sophisticated embedded project combining real-time signal processing, state machine control, and comprehensive testing in the amateur radio domain. \ No newline at end of file +This is a sophisticated embedded project combining real-time signal processing, state machine control, and comprehensive testing in the amateur radio domain. + +## Knowledge Wiki + +The `wiki/` directory is an LLM-maintained knowledge base (firmware / theory / roadmap) following the "LLM Wiki" pattern. When ingesting sources, answering knowledge questions, or recording design decisions, work under `wiki/` and follow its schema in `wiki/CLAUDE.md`. The wiki is a reference and planning surface that is distinct from the codebase itself. \ No newline at end of file diff --git a/code/src/PhoenixSketch/CAT.h b/code/src/PhoenixSketch/CAT.h index 026d722..6f77cf3 100644 --- a/code/src/PhoenixSketch/CAT.h +++ b/code/src/PhoenixSketch/CAT.h @@ -22,7 +22,7 @@ If not, see . /** * @brief Poll and process CAT (Computer Aided Transceiver) serial commands - * @note Called from main loop to handle Kenwood TS-2000 protocol commands + * @note Called from main loop to handle Kenwood TS-480 protocol commands * @note Reads from SerialUSB1, buffers until semicolon terminator, parses and executes * @note Supports frequency control, mode changes, power settings, and debugging commands * @note Requires Tools->USB Type set to Dual Serial in Arduino IDE diff --git a/code/src/PhoenixSketch/HardwareSm.cpp b/code/src/PhoenixSketch/HardwareSm.cpp index 63fccec..bd4b209 100644 --- a/code/src/PhoenixSketch/HardwareSm.cpp +++ b/code/src/PhoenixSketch/HardwareSm.cpp @@ -35,12 +35,14 @@ If not, see . * - Handles user interaction and mode logic * - State changes triggered by button presses, PTT, keyer input * - * 2. RF Hardware States (managed by this module): + * 2. RF Hardware States (managed by this module — HardwareSm is hand-written, NOT + * generated by StateSmith): * - RFReceive: Configure hardware for receiving signals * - RFTransmit: Configure hardware for SSB transmission * - RFCWMark: CW transmission with carrier on (key down) * - RFCWSpace: CW transmission with carrier off (key up) - * - RFCalIQ: Calibration mode (not yet implemented) + * - RFCal* (e.g. RFCalReceiveIQ): calibration signal paths; these drive the four + * generated calibration sub-state-machines * * 3. Tune State Machine (frequency management): * - TuneReceive: Set VFO for RX with IF offset diff --git a/code/src/PhoenixSketch/PhoenixSketch.ino b/code/src/PhoenixSketch/PhoenixSketch.ino index ab3dd08..17c74d5 100644 --- a/code/src/PhoenixSketch/PhoenixSketch.ino +++ b/code/src/PhoenixSketch/PhoenixSketch.ino @@ -39,7 +39,8 @@ If not, see . * display are isolated into separate modules with clear interfaces. * * 2. **State Machine Control**: All hardware state changes flow through state - * machines (ModeSm, UISm, TuneSm) ensuring deterministic, predictable behavior. + * machines (ModeSm and UISm, generated by StateSmith; plus the hand-written + * HardwareSm) ensuring deterministic, predictable behavior. * * 3. **Real-Time Constraints**: The main loop must complete within 10ms to * prevent audio buffer overflows. Display updates are rate-limited. @@ -58,9 +59,9 @@ If not, see . * ├─────────────────────────────────────────────────────────────────────┤ * │ State Machines │ * │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ - * │ │ ModeSm │ │ UISm │ │ TuneSm │ │ - * │ │ (Operating │ │ (User │ │ (Frequency │ │ - * │ │ Modes) │ │ Interface) │ │ Control) │ │ + * │ │ ModeSm │ │ UISm │ │ HardwareSm │ │ + * │ │ (Operating │ │ (User │ │ (Hardware │ │ + * │ │ Modes) │ │ Interface) │ │ & Tuning) │ │ * │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ * │ │ │ │ │ * │ │ │ │ │ @@ -82,10 +83,12 @@ If not, see . * * STATE MACHINES * -------------- - * Generated by StateSmith from UML diagrams, these provide deterministic control: + * These provide deterministic control. ModeSm and UISm are generated by StateSmith from + * UML diagrams; HardwareSm is hand-written: * * **ModeSm** (ModeSm.cpp/h) - Operating mode control - * States: SSB_RECEIVE, SSB_TRANSMIT, CW_RECEIVE, CW_TRANSMIT, TUNE + * States: SSB_RECEIVE, SSB_TRANSMIT, CW_RECEIVE, six CW_TRANSMIT_* keyer sub-states, + * and the CALIBRATE_* states (see ModeSm.h; there is no TUNE state) * - Controls TX/RX switching, VFO selection, modulation routing * - Handles CW keyer timing and character generation * - Manages transmit timeouts and safety interlocks @@ -96,17 +99,22 @@ If not, see . * - Manages menu navigation hierarchy * - Handles parameter adjustment workflow * - * **TuneSm** (Tune.cpp/h) - Frequency control (this one isn't generated by StateSmith) - * States: TuneReceive, TuneSSBTX, TuneCWTX - * - Sets appropriate VFO for current mode - * - Applies CW tone offset in CW mode - * - Coordinates SSB I/Q or CW single-output VFO selection + * **HardwareSm** (HardwareSm.cpp/h) - Hardware & frequency control + * (hand-written, NOT generated by StateSmith) + * - Maps ModeSm operating modes onto concrete RF hardware states (RFReceive, + * RFTransmit, RFCWMark/Space, calibration paths) + * - Drives the TuneState transitions (TuneReceive, TuneSSBTX, TuneCWTX, plus + * calibration variants) in HandleTuneState(): VFO selection, Fs/4 shift, CW tone offset + * - Orchestrates the four generated calibration sub-state-machines + * + * NOTE: Tune.cpp/h is a pure-function library (frequency math + power-curve fit), NOT a + * state machine. The frequency-control state lives in HardwareSm, not in Tune.cpp. * * MAIN EXECUTION FLOW * ------------------- * 1. **setup()** (Globals.ino) * - Initialize hardware (display, audio, RF boards, front panel) - * - Load settings from EEPROM + * - Load settings from flash/SD storage (LittleFS + SD card) * - Start state machines * - Begin 1ms timer for state machine DO events * @@ -145,7 +153,7 @@ If not, see . * * **Radio Control:** * - ModeSm.cpp/h: Operating mode state machine (generated by StateSmith) - * - Tune.cpp/h: Frequency tuning state machine + * - Tune.cpp/h: Frequency tuning math (pure functions; not a state machine) * - CAT.cpp/h: Computer control protocol (Kenwood emulation) * * **Program Execution and Flow Control:** @@ -154,13 +162,14 @@ If not, see . * **Configuration:** * - Config.h: Pin definitions, constants, system configuration * - SDT.h: System data types and global state (ED structure) - * - Storage.cpp/h: EEPROM persistence for settings + * - Storage.cpp/h: settings persistence (JSON on LittleFS flash + SD card; not true EEPROM) * - Globals.cpp: Global variable definitions * * PERSITENT CONFIGURATION * ------------ - * The `ED` (EEPROM Data) structure in SDT.h holds the radio operating configuration. - * This persists across power cycles and is saved to EEPROM and SDCard (if present). + * The `ED` (EEPROMData) structure in SDT.h holds the radio operating configuration. + * (The name is historical — the Teensy 4.1 has no true EEPROM.) This persists across power + * cycles and is serialized as JSON to LittleFS program flash and the SD card (if present). * - Frequencies, band settings, filter parameters * - Volume, gain, AGC settings * - Display preferences, spectrum zoom diff --git a/code/src/PhoenixSketch/Storage.cpp b/code/src/PhoenixSketch/Storage.cpp index 5eb7f1c..5bcf509 100644 --- a/code/src/PhoenixSketch/Storage.cpp +++ b/code/src/PhoenixSketch/Storage.cpp @@ -672,7 +672,7 @@ void RestoreDataFromSDCard(void){ ED.PowerCal_20W_to_100W_threshold_W = doc["PowerCal_20W_to_100W_threshold_W"] | ED.PowerCal_20W_to_100W_threshold_W; - // Save the data to the EEPROM so that it matches + // Save the data to flash/SD storage so that it matches SaveDataToStorage(false); Serial.println("Config data restored successfully"); } diff --git a/code/src/PhoenixSketch/Tune.h b/code/src/PhoenixSketch/Tune.h index af60259..098361f 100644 --- a/code/src/PhoenixSketch/Tune.h +++ b/code/src/PhoenixSketch/Tune.h @@ -20,7 +20,7 @@ If not, see . /** * @brief Get effective TX/RX frequency for active VFO - * @return Effective TX/RX frequency in deci-Hertz (Hz × 100) + * @return Effective TX/RX frequency in centi-Hz (Hz × 100) * @note Combines center frequency, fine tune offset, and sample rate quarter-shift * @note Formula: (centerFreq - fineTune - sampleRate/4) × 100 */ @@ -37,7 +37,7 @@ int64_t GetTXRXFreq(uint8_t vfo); /** * @brief Get CW transmit frequency with tone offset applied - * @return CW transmit frequency in deci-Hertz (Hz × 100) + * @return CW transmit frequency in centi-Hz (Hz × 100) * @note Adds/subtracts CW tone offset from TX/RX frequency * @note Offset direction depends on sideband (LSB subtracts, USB adds) */ From bd3474d636cc1a9a0cd45c51cbf4042d7b5c558b Mon Sep 17 00:00:00 2001 From: Oliver King Date: Tue, 16 Jun 2026 08:20:51 -0400 Subject: [PATCH 05/25] =?UTF-8?q?Wiki=20lint:=20reconcile=20dHz=E2=86=92cH?= =?UTF-8?q?z=20pages=20after=20rename=20merge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Post-merge health-check of the wiki. The _dHz→_cHz rename (65e6bba) and the doc-fix commit (c95f932) are now on encoder-i2c-speed (source: 0 _dHz / 46 _cHz), closing the contradiction an earlier lint left open. - rf-board.md: drop the "not yet present on encoder-i2c-speed" branch caveat - tune-frequency-control.md: GetTXRXFreq_dHz/GetCWTXFreq_dHz → _cHz (4 refs), rewrite the "historical misnomer" prose to past tense - documentation-todos.md: mark the VFO-unit item reconciled; update the stale- comment block from "not yet committed" to committed & merged (c95f932) - bump updated: to 2026-06-16 on the three pages; append lint entry to log.md Co-Authored-By: Claude Opus 4.8 --- wiki/firmware/rf-board.md | 10 +++------- wiki/firmware/tune-frequency-control.md | 17 +++++++++-------- wiki/log.md | 19 +++++++++++++++++++ wiki/roadmap/documentation-todos.md | 13 +++++++------ 4 files changed, 38 insertions(+), 21 deletions(-) diff --git a/wiki/firmware/rf-board.md b/wiki/firmware/rf-board.md index 2ae6550..0f5322a 100644 --- a/wiki/firmware/rf-board.md +++ b/wiki/firmware/rf-board.md @@ -3,7 +3,7 @@ title: RF Board & Si5351 Quadrature VFO (RFBoard) type: module status: draft created: 2026-06-08 -updated: 2026-06-08 +updated: 2026-06-16 tags: [rf, si5351, vfo, quadrature, attenuator, tr-switch, hardware-abstraction] source_refs: [sources/t41-ep-schematics] related: ["[[overview]]", "[[rf-board-electronics]]", "[[tune-frequency-control]]", "[[hardware-state-machine]]", "[[filter-boards]]", "[[ssb-phasing-method]]", "[[iq-quadrature-sampling]]", "[[iq-imbalance-correction]]", "[[hardware-platform]]", "[[i2c-bus-map]]", "[[t41-ep-schematics]]"] @@ -68,12 +68,8 @@ The VFO frequency is carried in **Hz × 100 (centi-Hz, 0.01 Hz resolution)**: (`RFBoard.cpp:481`), matching the Etherkit `SI5351_FREQ_MULT = 100` and `HandleTuneState`'s `centerFreq*100`. The `_cHz` suffix names this correctly — these are centi-Hz. (Earlier code used a `_dHz`/"decihertz" naming, which was a misnomer; all uses have since been renamed to -`cHz`.) - -> Branch note (2026-06-16): the `_dHz`→`_cHz` symbol rename is **not yet present on -> `encoder-i2c-speed`** — that working tree still shows `_dHz` identifiers (docstrings already -> flag the misnomer). This page reflects the intended/renamed state; expect it to match once the -> rename branch merges. +`cHz`.) The rename merged onto `encoder-i2c-speed` on 2026-06-16, so source and wiki now +agree (0 `_dHz` / 46 `_cHz` occurrences in `code/src/PhoenixSketch/`). `SetFrequencyCorrectionFactor()` applies the crystal ppb correction (from frequency calibration, [[hardware-state-machine]]) via the Si5351 `set_correction`. diff --git a/wiki/firmware/tune-frequency-control.md b/wiki/firmware/tune-frequency-control.md index ea1af4f..4c9c4bf 100644 --- a/wiki/firmware/tune-frequency-control.md +++ b/wiki/firmware/tune-frequency-control.md @@ -3,7 +3,7 @@ title: Frequency Control & Tuning Math (Tune.cpp) type: module status: draft created: 2026-06-08 -updated: 2026-06-08 +updated: 2026-06-16 tags: [tuning, vfo, frequency, fs-over-4, cw-offset, fast-tune, power-calibration] source_refs: [] related: ["[[overview]]", "[[hardware-state-machine]]", "[[rf-board]]", "[[mode-state-machine]]", "[[iq-quadrature-sampling]]", "[[dsp-chain]]"] @@ -54,14 +54,15 @@ digital mix — multiplies are just ±1, ±j.) | Function | Returns | Notes | |---|---|---| | `GetTXRXFreq(vfo)` | Hz | `centerFreq − fineTune − Fs/4` for a VFO (`Tune.cpp:121`) | -| `GetTXRXFreq_dHz()` | **centi-Hz** (×100) | same, active VFO, in Si5351 resolution units (`Tune.cpp:110`) | -| `GetCWTXFreq_dHz()` | centi-Hz | TXRX ± CW tone offset; **LSB subtracts, USB adds** (`Tune.cpp:132`) | +| `GetTXRXFreq_cHz()` | **centi-Hz** (×100) | same, active VFO, in Si5351 resolution units (`Tune.cpp:110`) | +| `GetCWTXFreq_cHz()` | centi-Hz | TXRX ± CW tone offset; **LSB subtracts, USB adds** (`Tune.cpp:132`) | | `ResetTuning()` | — | fold `fineTune` into `centerFreq`, zero `fineTune` (recenter, same freq) (`Tune.cpp:146`) | | `GetBand(freq)` | band idx or −1 | linear search of `bands[]` (`Tune.cpp:159`) | -Frequencies are carried in **centi-Hz (Hz×100)** internally for Si5351 tuning resolution. (The -`_dHz` suffix and the source docstrings say "deci-Hz", but ×100 is **centi**-Hz — a historical -misnomer; see [[rf-board]] and [[documentation-todos]].) +Frequencies are carried in **centi-Hz (Hz×100)** internally for Si5351 tuning resolution. The +`_cHz` suffix and source docstrings now name this correctly; an earlier `_dHz`/"deci-Hz" naming +was a misnomer (×100 is **centi**-Hz) and was renamed across the source on 2026-06-16. See +[[rf-board]] and [[documentation-todos]]. ## Fine-tune control & limits — `AdjustFineTune()` (`Tune.cpp:37`) @@ -84,10 +85,10 @@ The actual "which formula → which VFO register" dispatch is `HandleTuneState() (`HardwareSm.cpp:639`), which also selects LPF/BPF band, antenna, PA, and refreshes the FIR mask before programming the VFO. Highlights: - `TuneReceive` → RX VFO = `centerFreq` (fine tune done in DSP). -- `TuneSSBTX` → TX VFO = `GetTXRXFreq_dHz()`; on dual-VFO radios the RX VFO is set to +- `TuneSSBTX` → TX VFO = `GetTXRXFreq_cHz()`; on dual-VFO radios the RX VFO is set to **freq/3** to watch the 3rd harmonic for the TX spectrum display (fundamental too strong) (`HardwareSm.cpp:662-666`). -- `TuneCWTX` → CW VFO = `GetCWTXFreq_dHz()` (tone offset applied). +- `TuneCWTX` → CW VFO = `GetCWTXFreq_cHz()` (tone offset applied). - `TuneCalReceiveIQ` / `TuneCalTransmitIQ` → calibration-specific VFO placement (TX-IQ offsets the TX VFO from RX so the image sits far from DC). See [[hardware-state-machine]], [[iq-imbalance-correction]]. diff --git a/wiki/log.md b/wiki/log.md index c9f8fba..9d22c74 100644 --- a/wiki/log.md +++ b/wiki/log.md @@ -666,3 +666,22 @@ Owner: the `_dHz`→`_cHz` rename is real but **not on `encoder-i2c-speed`** (un branch). Resolution: **keep the wiki at `_cHz`** and add a branch-caveat note to rf-board.md "Frequency units" and the documentation-todos entry, flagging that this working tree still shows `_dHz` and the pages will reconcile once the rename merges. Lint contradiction closed. + +## [2026-06-16] lint | full wiki health-check (post dHz→cHz merge) +Triggered after the `_dHz`→`_cHz` rename (`65e6bba`) and the doc-fix commit (`c95f932`) were +rebased/merged onto `encoder-i2c-speed`. **Structural:** 44 content pages — no orphans, no broken +inter-page links (only the schema-example `[[page-name]]`/`[[other-page]]` in CLAUDE.md and +historical `[[tune-state-machine]]`/`[[roadmap]]`/`[[theory]]` mentions inside log.md prose, all +expected/immutable). Frontmatter complete on every content page. +**Contradiction RESOLVED (was open from the two 2026-06-16 entries above):** source now shows +**0 `_dHz` / 46 `_cHz`** in `code/src/PhoenixSketch/`, so the rename the wiki described has +landed on this branch. Reconciled the three caveat-bearing pages: +- rf-board.md "Frequency units" — dropped the "not yet present on encoder-i2c-speed" branch note; + now states source & wiki agree. +- tune-frequency-control.md — renamed `GetTXRXFreq_dHz`/`GetCWTXFreq_dHz` → `_cHz` (4 refs) and + rewrote the "historical misnomer" prose to past tense. +- documentation-todos.md — "VFO frequency unit" item marked reconciled; "Stale source comments" + blockquote updated from "not yet committed" → committed & merged (`c95f932`). +`updated:` bumped to 2026-06-16 on all three. No remaining stale `_dHz` identifier claims. +**Suggested next:** promote the now-verified firmware pages from `draft`→`stable` (most are +draft); consider a dedicated power-calibration theory page (flagged in tune-frequency-control). diff --git a/wiki/roadmap/documentation-todos.md b/wiki/roadmap/documentation-todos.md index 183a2e8..f707ef2 100644 --- a/wiki/roadmap/documentation-todos.md +++ b/wiki/roadmap/documentation-todos.md @@ -3,7 +3,7 @@ title: Documentation TODOs & Open Questions type: roadmap status: draft created: 2026-06-08 -updated: 2026-06-14 +updated: 2026-06-16 tags: [todo, open-questions, discrepancies, wiki-maintenance] source_refs: [] related: ["[[index]]", "[[iq-imbalance-correction]]", "[[multirate-decimation]]", "[[noise-reduction]]", "[[fast-convolution-filtering]]", "[[dsp-chain]]"] @@ -98,14 +98,15 @@ is tagged **⚠ possible bug** so it stands out. / `Tune.h` docstrings were corrected to centi-Hz (Hz × 100) on 2026-06-14; then the owner completed the cross-file rename of every `_dHz` *symbol* (`GetTXRXFreq_dHz`, `frequency_dHz`, etc.) to `_cHz`, eliminating the historical "decihertz" misnomer entirely. Wiki updated to - match. *Branch caveat (2026-06-16 lint):* the rename is **not yet on `encoder-i2c-speed`** — - that working tree still carries `_dHz` identifiers (docstrings already note the misnomer); the - wiki reflects the post-rename state and will line up when that branch merges. + match. *Reconciled (2026-06-16):* the rename has now merged onto `encoder-i2c-speed` (0 `_dHz` + / 46 `_cHz` in `code/src/PhoenixSketch/`), so source and wiki agree — the earlier branch caveat + is closed. → [[rf-board]], [[tune-frequency-control]] ### Stale source comments -> **All items below FIXED IN SOURCE (2026-06-14)** — comment-only edits on branch -> `encoder-i2c-speed`, not yet committed. The wiki was already correct. +> **All items below FIXED IN SOURCE (2026-06-14)** — comment-only edits now **committed and +> merged** onto `encoder-i2c-speed` (commit `c95f932` "Unit and documentation fixes", 2026-06-16). +> The wiki was already correct. - ~~**CAT protocol: TS-480 vs TS-2000.**~~ — Fixed `CAT.h:25` "TS-2000" → "TS-480" (now consistent with `CAT.cpp` and `code/docs/ts_480_pc.pdf`; ID020 = TS-480). → [[cat-control]] - ~~**"EEPROM" is actually LittleFS+SD JSON.**~~ — Fixed the `.ino` header ("Load settings From 97d017c8db9791c6264b15501f0ce7a5d7eb7b01 Mon Sep 17 00:00:00 2001 From: Oliver King Date: Tue, 16 Jun 2026 17:02:05 -0400 Subject: [PATCH 06/25] Add rapid-tune audio mute & spectrum freeze option The encoder-i2c-speed branch made fast tuning responsive enough that a quick spin enqueues a tune event nearly every loop, reprogramming the VFO each time. At speed this produced glitchy audio and a jerky, half-drawn spectrum sweep. Add a compile-time option that masks both. New MUTE_ON_RAPID_TUNE option (Config.h) with engage/release thresholds: - Detection (Loop.cpp): NoteTuneActivity(bool) is called from the four HOME-state center/fine tune cases; it latches "rapid tuning" when the inter-event gap is short and auto-clears after an idle timeout. The idle subtraction is done in uint32_t so it wraps like the Teensy millis() (the host test mock returns a wider type). Exposes IsRapidTuning / IsRapidCenterTuning / IsRapidFineTuning. - Audio (DSP.cpp): AdjustVolume() mutes the output while rapid tuning, for both encoders. The spectrum PSD is computed upstream, so the trace is unaffected. - Spectrum (MainBoard_DisplayHome.cpp): Center Tune re-centers the VFO, so the whole trace + waterfall are frozen. Fine Tune leaves the center fixed, so the trace is held but the blue filter bar + cyan marker keep tracking: a clean bar-less backdrop is built once on L2 (BuildFrozenBackdrop) and each frequency change does a single L2->L1 BTE blit + StampTuningBar (refactored out of DrawBandWidthIndicatorBar), driven on freq change rather than the 50 ms refresh timer. Adds six host unit tests (Loop_test.cpp) covering engage/release, slow tuning, center-vs-fine classification, and switching encoders mid-spin. Wiki: new firmware/rapid-tune-mute-freeze.md plus cross-links from front-panel, tune-frequency-control, display-subsystem, main-loop, and spectrum-refresh-floor; index and log updated. Co-Authored-By: Claude Opus 4.8 --- code/src/PhoenixSketch/Config.h | 9 ++ code/src/PhoenixSketch/DSP.cpp | 10 +- code/src/PhoenixSketch/Loop.cpp | 54 ++++++++ code/src/PhoenixSketch/Loop.h | 39 ++++++ .../PhoenixSketch/MainBoard_DisplayHome.cpp | 96 +++++++++++++- code/test/Loop_test.cpp | 64 +++++++++ wiki/firmware/display-subsystem.md | 8 +- wiki/firmware/front-panel.md | 6 +- wiki/firmware/main-loop.md | 6 +- wiki/firmware/rapid-tune-mute-freeze.md | 121 ++++++++++++++++++ wiki/firmware/spectrum-refresh-floor.md | 2 +- wiki/firmware/tune-frequency-control.md | 8 +- wiki/index.md | 3 +- wiki/log.md | 19 +++ 14 files changed, 433 insertions(+), 12 deletions(-) create mode 100644 wiki/firmware/rapid-tune-mute-freeze.md diff --git a/code/src/PhoenixSketch/Config.h b/code/src/PhoenixSketch/Config.h index 6ec474d..ac8124b 100644 --- a/code/src/PhoenixSketch/Config.h +++ b/code/src/PhoenixSketch/Config.h @@ -43,6 +43,15 @@ If not, see . #define ENCODER_FACTOR 0.25F // use 0.25f with cheap encoders that have 4 detents per step, // for other encoders or libs we use 1.0f +// When the Center Tune or Fine Tune encoders are spun rapidly, the VFO is +// reprogrammed every loop, which produces audible glitches and a jerky spectrum +// sweep. Enabling MUTE_ON_RAPID_TUNE hides those artifacts: while rapid tuning is +// detected the output audio is muted and the spectrum/waterfall redraw is paused, +// both resuming automatically once tuning stops. Comment out to disable. +#define MUTE_ON_RAPID_TUNE +#define RAPID_TUNE_ENGAGE_MS 60 // gap (ms) below this between tune events = "spinning" +#define RAPID_TUNE_RELEASE_MS 180 // no tune event for this long (ms) = "done spinning" + // Direct coupled transmit //#define DIRECT_COUPLED_TX diff --git a/code/src/PhoenixSketch/DSP.cpp b/code/src/PhoenixSketch/DSP.cpp index 84ec725..beb881d 100644 --- a/code/src/PhoenixSketch/DSP.cpp +++ b/code/src/PhoenixSketch/DSP.cpp @@ -719,7 +719,15 @@ float32_t VolumeToAmplification(int32_t volume) { * Adjust the volume */ void AdjustVolume(DataBlock *data, ReceiveFilterConfig *RXfilters){ - arm_scale_f32(data->I, RXfilters->DF * VolumeToAmplification(ED.audioVolume), data->I, data->N); + float32_t gain = RXfilters->DF * VolumeToAmplification(ED.audioVolume); +#ifdef MUTE_ON_RAPID_TUNE + // Mute the output while a tune encoder is being spun fast, so the rapid VFO + // reprogramming is not heard as audio glitches. Resumes automatically when + // tuning stops (see IsRapidTuning() in Loop.cpp). + if (IsRapidTuning()) + gain = 0.0f; +#endif + arm_scale_f32(data->I, gain, data->I, data->N); } /** diff --git a/code/src/PhoenixSketch/Loop.cpp b/code/src/PhoenixSketch/Loop.cpp index ddeddec..41dcd21 100644 --- a/code/src/PhoenixSketch/Loop.cpp +++ b/code/src/PhoenixSketch/Loop.cpp @@ -356,6 +356,56 @@ void TimerInterrupt(void){ UISm_dispatch_event(&uiSM, UISm_EventId_DO); } +/////////////////////////////////////////////////////////////////////////////// +// Rapid-tuning detection +/////////////////////////////////////////////////////////////////////////////// +// When the Center Tune or Fine Tune encoders are spun quickly the tune events +// queue up and the VFO is reprogrammed on nearly every loop iteration, which +// produces audible glitches and a jerky spectrum sweep. We detect that condition +// here from the timing of consumed tune events; callers (the audio output stage +// and the spectrum redraw) use IsRapidTuning() to mute / pause until it ends. +#ifdef MUTE_ON_RAPID_TUNE +static uint32_t lastTuneEventMs = 0; +static bool rapidTuning = false; +static bool lastTuneWasFine = false; // true if the latest tune event was Fine Tune + +void NoteTuneActivity(bool fineTune){ + uint32_t now = millis(); + // A short gap since the previous tune event means the knob is being spun. + if ((now - lastTuneEventMs) < RAPID_TUNE_ENGAGE_MS) + rapidTuning = true; + lastTuneEventMs = now; + lastTuneWasFine = fineTune; +} + +bool IsRapidTuning(void){ + // Release the latch once tuning has been idle long enough. The subtraction is + // done in uint32_t so it wraps correctly (matching the Teensy millis() width; + // the host test mock returns a wider type, hence the explicit cast). + if (rapidTuning && (((uint32_t)millis() - lastTuneEventMs) > RAPID_TUNE_RELEASE_MS)) + rapidTuning = false; + return rapidTuning; +} + +bool IsRapidCenterTuning(void){ + // Center Tune re-centers the spectrum (it reprograms the VFO), so the whole + // trace/waterfall is frozen while it is spun fast. + return IsRapidTuning() && !lastTuneWasFine; +} + +bool IsRapidFineTuning(void){ + // Fine Tune leaves the center fixed and only slides the tuning marker, so the + // trace is frozen but the blue tuning bar keeps being redrawn at the new marker + // position (see the spectrum pane). + return IsRapidTuning() && lastTuneWasFine; +} +#else +void NoteTuneActivity(bool fineTune){ (void)fineTune; } +bool IsRapidTuning(void){ return false; } +bool IsRapidCenterTuning(void){ return false; } +bool IsRapidFineTuning(void){ return false; } +#endif + /////////////////////////////////////////////////////////////////////////////// // Code for handling button presses and state changes /////////////////////////////////////////////////////////////////////////////// @@ -1070,6 +1120,7 @@ void ConsumeInterrupt(void){ break; } // end of VOLUME_DECREASE, HOME state case (iCENTERTUNE_INCREASE):{ + NoteTuneActivity(false); ED.centerFreq_Hz[ED.activeVFO] += (int64_t)ED.freqIncrement; // Change the band if we tune out of the current band. However, // if we tune to a frequency outside the ham bands, keep the last @@ -1078,6 +1129,7 @@ void ConsumeInterrupt(void){ break; } case (iCENTERTUNE_DECREASE):{ + NoteTuneActivity(false); ED.centerFreq_Hz[ED.activeVFO] -= (int64_t)ED.freqIncrement; // check for minimum frequency supported by Si5351 quadrature signal generator if (ED.centerFreq_Hz[ED.activeVFO] < 250000) @@ -1086,10 +1138,12 @@ void ConsumeInterrupt(void){ break; } case (iFINETUNE_INCREASE):{ + NoteTuneActivity(true); AdjustFineTune(+1); break; } case (iFINETUNE_DECREASE):{ + NoteTuneActivity(true); AdjustFineTune(-1); break; } diff --git a/code/src/PhoenixSketch/Loop.h b/code/src/PhoenixSketch/Loop.h index 24122dc..b538ac5 100644 --- a/code/src/PhoenixSketch/Loop.h +++ b/code/src/PhoenixSketch/Loop.h @@ -146,4 +146,43 @@ size_t GetInterruptFifoSize(void); */ void SetupCWKeyInterrupts(void); +/** + * @brief Record that a Center Tune or Fine Tune event was just acted upon + * @param fineTune true if the event came from the Fine Tune encoder, false for Center Tune + * @note Drives rapid-tuning detection: if the gap since the previous tune event is + * below RAPID_TUNE_ENGAGE_MS, the rapid-tuning latch is set. The encoder source + * is remembered so the spectrum can keep tracking during Fine Tune. + * @note Call once per consumed center/fine tune interrupt. No-op when + * MUTE_ON_RAPID_TUNE is disabled at compile time. + */ +void NoteTuneActivity(bool fineTune); + +/** + * @brief Query whether the operator is currently spinning a tune encoder fast + * @return true while rapid tuning is in effect; false otherwise + * @note The latch auto-clears once no tune event has arrived for + * RAPID_TUNE_RELEASE_MS. Used to mute audio during rapid tuning. + * @note Always returns false when MUTE_ON_RAPID_TUNE is disabled at compile time. + */ +bool IsRapidTuning(void); + +/** + * @brief Query whether rapid tuning is in effect AND driven by the Center Tune encoder + * @return true only while spinning Center Tune fast; false for Fine Tune or when idle + * @note Center Tune re-centers the spectrum (reprograms the VFO), so the whole trace + * and waterfall are frozen while it is spun. + * @note Always returns false when MUTE_ON_RAPID_TUNE is disabled at compile time. + */ +bool IsRapidCenterTuning(void); + +/** + * @brief Query whether rapid tuning is in effect AND driven by the Fine Tune encoder + * @return true only while spinning Fine Tune fast; false for Center Tune or when idle + * @note Fine Tune keeps the center fixed and only slides the marker, so the spectrum + * pane holds the trace frozen but keeps redrawing the blue tuning bar at the + * new marker position. + * @note Always returns false when MUTE_ON_RAPID_TUNE is disabled at compile time. + */ +bool IsRapidFineTuning(void); + #endif // LOOP_H diff --git a/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp b/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp index cf6fbdf..7a2a63a 100644 --- a/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp +++ b/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp @@ -441,11 +441,11 @@ uint16_t pixels_per_s = 12; #define CLIP_AUDIO_PEAK 115 /** - * Draw Tuned Bandwidth on Spectrum Plot + * Stamp the tuning bar (filter-bandwidth highlight + cyan center marker) at the + * current tuned frequency onto whichever layer is currently selected for writing. + * Does not clear or switch layers - the caller owns the surface. */ -FASTRUN void DrawBandWidthIndicatorBar(void){ - tft.fillRect(0, SPECTRUM_TOP_Y + 20, MAX_WATERFALL_WIDTH+PaneSpectrum.x0, SPECTRUM_HEIGHT - 20, RA8875_BLACK); - tft.writeTo(L2); +FASTRUN void StampTuningBar(void){ float32_t pixel_per_khz = ((1 << ED.spectrum_zoom) * SPECTRUM_RES * 1000.0 / SR[SampleRate].rate); int16_t filterWidth = (int16_t)(((bands[ED.currentBand[ED.activeVFO]].FHiCut_Hz - bands[ED.currentBand[ED.activeVFO]].FLoCut_Hz) / 1000.0) * pixel_per_khz * 1.06); @@ -472,6 +472,15 @@ FASTRUN void DrawBandWidthIndicatorBar(void){ tft.drawFastVLine(vline, SPECTRUM_TOP_Y + 20, SPECTRUM_HEIGHT-25, RA8875_CYAN); } +/** + * Draw Tuned Bandwidth on Spectrum Plot + */ +FASTRUN void DrawBandWidthIndicatorBar(void){ + tft.fillRect(0, SPECTRUM_TOP_Y + 20, MAX_WATERFALL_WIDTH+PaneSpectrum.x0, SPECTRUM_HEIGHT - 20, RA8875_BLACK); + tft.writeTo(L2); + StampTuningBar(); +} + /** * Display filter bandwidth and dB scale information on the spectrum pane. */ @@ -779,6 +788,57 @@ FASTRUN void ShowSpectrum(void){ } } +#ifdef MUTE_ON_RAPID_TUNE +// State for the Fine Tune "frozen trace, moving bar" fast path. +static bool fineFreezeBackdropReady = false; // L2 holds a clean (bar-less) trace +static int64_t fineFreezeLastFreq = 0; // last marker freq we stamped + +/** + * Build the clean (bar-less) frozen-trace backdrop on the L2 back-buffer from + * pixelold[] (the per-column y values from the last completed sweep). Built once per + * Fine Tune freeze episode; every later bar update just blits this backdrop back to + * L1 to erase the old bar, which is far cheaper than repainting the whole trace. + */ +FASTRUN static void BuildFrozenBackdrop(void){ + tft.writeTo(L2); + tft.fillRect(0, SPECTRUM_TOP_Y + 20, MAX_WATERFALL_WIDTH + PaneSpectrum.x0, + SPECTRUM_HEIGHT - 20, RA8875_BLACK); + tft.drawRect(PaneSpectrum.x0-2, PaneSpectrum.y0, MAX_WATERFALL_WIDTH+5, SPECTRUM_HEIGHT, RA8875_YELLOW); + for (int16_t x = 1; x < MAX_WATERFALL_WIDTH; x++) + tft.drawLine(SPECTRUM_LEFT_X + x, pixelold[x-1], SPECTRUM_LEFT_X + x, pixelold[x], RA8875_YELLOW); + tft.writeTo(L1); +} + +/** + * Redraw the tuning bar over the *frozen* spectrum trace at the current Fine Tune + * position (FASTRUN - executes from RAM). + * + * Used while the Fine Tune knob is being spun fast: the center stays fixed, so the + * trace is held still (paused) and only the blue filter bar + cyan marker move to + * track where the operator is tuning. The first call builds a clean bar-less backdrop + * on L2; each call then hardware-blits that backdrop to L1 (erasing the previous bar) + * and stamps the bar at the current frequency on top. The waterfall is left frozen. + */ +FASTRUN void RedrawFrozenSpectrumWithBar(void){ + if (modeSM.state_id == ModeSm_StateId_SSB_TRANSMIT) return; + + if (!fineFreezeBackdropReady){ + BuildFrozenBackdrop(); + fineFreezeBackdropReady = true; + } + + // Restore the clean trace under the previous bar in one hardware BTE blit (L2->L1). + tft.BTE_move(SPECTRUM_LEFT_X, SPECTRUM_TOP_Y + 20, + MAX_WATERFALL_WIDTH, SPECTRUM_HEIGHT - 20, + SPECTRUM_LEFT_X, SPECTRUM_TOP_Y + 20, 2, 1); + while (tft.readStatus()) ; + + // Stamp the bar at the new tuned frequency directly on the visible layer. + tft.writeTo(L1); + StampTuningBar(); +} +#endif + // State tracking for spectrum pane updates static uint32_t oz = 8; static int64_t ocf = 0; @@ -789,6 +849,34 @@ static ModulationType omd = IQ; * Render the RF spectrum display pane with waterfall. */ void DrawSpectrumPane(void) { +#ifdef MUTE_ON_RAPID_TUNE + // While the Center Tune knob is being spun fast, freeze the spectrum/waterfall: + // the trace and overlay would otherwise re-center and clear on nearly every loop, + // producing a jerky, half-drawn sweep. Mark the pane stale so it gets one clean + // repaint once tuning stops, and leave the last frozen trace on screen until then. + if (IsRapidCenterTuning()){ + PaneSpectrum.stale = true; + fineFreezeBackdropReady = false; // any held fine-tune backdrop is now stale + tft.writeTo(L1); + return; + } + // While the Fine Tune knob is being spun fast, the center stays put, so hold the + // trace frozen (no re-sweep) and only move the blue tuning bar/marker so the + // operator can see where they are tuning. Redraw on every frequency change (not on + // the 50 ms refresh timer) - each update is a cheap hardware blit + bar stamp, so + // the bar tracks the knob with no perceptible lag. + if (IsRapidFineTuning()){ + PaneSpectrum.stale = true; // force a clean overlay repaint once tuning stops + int64_t f = GetTXRXFreq(ED.activeVFO); + if (!fineFreezeBackdropReady || f != fineFreezeLastFreq){ + RedrawFrozenSpectrumWithBar(); + fineFreezeLastFreq = f; + } + tft.writeTo(L1); + return; + } + fineFreezeBackdropReady = false; // not fine-tuning: drop any held backdrop +#endif if ((oz != ED.spectrum_zoom) || (ocf != ED.centerFreq_Hz[ED.activeVFO]) || (oft != ED.fineTuneFreq_Hz[ED.activeVFO]) || diff --git a/code/test/Loop_test.cpp b/code/test/Loop_test.cpp index 4c4cc08..a1974c1 100644 --- a/code/test/Loop_test.cpp +++ b/code/test/Loop_test.cpp @@ -2155,3 +2155,67 @@ TEST(Loop, TimeSyncNoDataLeavesClockUntouched) { CheckForSerialTimeSync(); EXPECT_FALSE(Teensy3Clock.wasSet); } + +/////////////////////////////////////////////////////////////////////////////// +// Rapid-tuning detection (MUTE_ON_RAPID_TUNE) +/////////////////////////////////////////////////////////////////////////////// +#ifdef MUTE_ON_RAPID_TUNE +// Drop out of the rapid-tuning latch into a known idle baseline. Jumping the +// mock clock past the release window and querying clears the static latch. +static void ResetRapidTune(void){ + AddMillisTime(RAPID_TUNE_RELEASE_MS + 50); + (void)IsRapidTuning(); +} + +TEST(Loop, RapidTuningEngagesOnFastEvents){ + ResetRapidTune(); + NoteTuneActivity(false); // baseline event (large gap, no latch) + NoteTuneActivity(false); // immediate follow-up: gap < engage threshold + EXPECT_TRUE(IsRapidTuning()); +} + +TEST(Loop, RapidTuningReleasesAfterIdle){ + ResetRapidTune(); + NoteTuneActivity(false); + NoteTuneActivity(false); + EXPECT_TRUE(IsRapidTuning()); + AddMillisTime(RAPID_TUNE_RELEASE_MS + 20); + EXPECT_FALSE(IsRapidTuning()); +} + +TEST(Loop, SlowTuningDoesNotEngage){ + ResetRapidTune(); + NoteTuneActivity(false); + AddMillisTime(RAPID_TUNE_ENGAGE_MS + 20); // gap above engage threshold + NoteTuneActivity(false); + EXPECT_FALSE(IsRapidTuning()); +} + +TEST(Loop, RapidCenterTuningFreezesWholeSpectrum){ + ResetRapidTune(); + NoteTuneActivity(false); // Center Tune + NoteTuneActivity(false); + EXPECT_TRUE(IsRapidTuning()); + EXPECT_TRUE(IsRapidCenterTuning()); // center tune -> whole trace + waterfall frozen + EXPECT_FALSE(IsRapidFineTuning()); +} + +TEST(Loop, RapidFineTuningTracksBarOnly){ + ResetRapidTune(); + NoteTuneActivity(true); // Fine Tune + NoteTuneActivity(true); + EXPECT_TRUE(IsRapidTuning()); // still mutes audio + EXPECT_FALSE(IsRapidCenterTuning()); // trace held frozen... + EXPECT_TRUE(IsRapidFineTuning()); // ...but the blue tuning bar keeps tracking +} + +TEST(Loop, TuneSourceUpdatesWhenSwitchingEncoders){ + ResetRapidTune(); + NoteTuneActivity(false); // start on Center Tune + NoteTuneActivity(false); + EXPECT_TRUE(IsRapidCenterTuning()); + NoteTuneActivity(true); // switch to Fine Tune mid-spin + EXPECT_TRUE(IsRapidFineTuning()); + EXPECT_FALSE(IsRapidCenterTuning()); +} +#endif // MUTE_ON_RAPID_TUNE diff --git a/wiki/firmware/display-subsystem.md b/wiki/firmware/display-subsystem.md index 285b79b..05ddc12 100644 --- a/wiki/firmware/display-subsystem.md +++ b/wiki/firmware/display-subsystem.md @@ -6,7 +6,7 @@ created: 2026-06-08 updated: 2026-06-08 tags: [display, ra8875, ui, spectrum, waterfall, menus, panes, stale-flags] source_refs: [] -related: ["[[overview]]", "[[ui-state-machine]]", "[[dsp-chain]]", "[[zoom-fft]]", "[[hardware-state-machine]]", "[[persistent-config]]"] +related: ["[[overview]]", "[[ui-state-machine]]", "[[dsp-chain]]", "[[zoom-fft]]", "[[hardware-state-machine]]", "[[persistent-config]]", "[[spectrum-refresh-floor]]", "[[rapid-tune-mute-freeze]]"] --- # Display Subsystem (RA8875) @@ -75,7 +75,11 @@ The main spectrum pane is fed by the **zoom FFT** display path ([[zoom-fft]], `p columns); the audio-spectrum pane by the channel-filter FFT in [[dsp-chain]] (`audioYPixel`). Refresh period is `≈ NCHUNKS × T_loop` — see [[spectrum-refresh-floor]] (governed by `NCHUNKS` and per-frame draw cost, not `SPECTRUM_REFRESH_MS`; shipped at 18.8 fps) and -[[real-time-constraints]]. +[[real-time-constraints]]. `DrawBandWidthIndicatorBar()` draws the blue filter-bandwidth bar + +cyan tuned-frequency marker over the trace; the bar-stamping math is factored into +`StampTuningBar()` so it can be reused. While a tune encoder is spun fast, +[[rapid-tune-mute-freeze]] hijacks `DrawSpectrumPane()` to freeze the sweep (and, for Fine Tune, +keep only the bar moving via a cheap L2→L1 blit of a held bar-less backdrop). ## Parameter editing & menus - **`VariableParameter`** (`MainBoard_Display.h:103`) — a type-safe editor (union over i8/i16/ diff --git a/wiki/firmware/front-panel.md b/wiki/firmware/front-panel.md index cd7dee4..3c80877 100644 --- a/wiki/firmware/front-panel.md +++ b/wiki/firmware/front-panel.md @@ -6,7 +6,7 @@ created: 2026-06-08 updated: 2026-06-08 tags: [front-panel, encoders, buttons, leds, mcp23017, i2c, interrupts, real-time, rotary] source_refs: [] -related: ["[[overview]]", "[[main-loop]]", "[[ui-state-machine]]", "[[mode-state-machine]]", "[[tune-frequency-control]]", "[[real-time-constraints]]", "[[hardware-platform]]", "[[i2c-bus-map]]"] +related: ["[[overview]]", "[[main-loop]]", "[[ui-state-machine]]", "[[mode-state-machine]]", "[[tune-frequency-control]]", "[[real-time-constraints]]", "[[hardware-platform]]", "[[i2c-bus-map]]", "[[rapid-tune-mute-freeze]]"] --- # Front Panel (encoders, buttons, LEDs) @@ -84,6 +84,10 @@ main-loop budget, while audio integrity is preserved by the priority ordering. R [[real-time-constraints]] and the [[spectrum-refresh-floor]] finding (both about not coupling responsiveness to the slow display path). +The flip side: encoders are now responsive enough that a *fast* spin enqueues a tune event on +nearly every loop, which surfaced audio glitches and a jerky spectrum sweep. The optional +[[rapid-tune-mute-freeze]] feature detects that condition and masks both. + ## Open questions - Per-button id → physical-label map (0–21 across the two expanders). - Debounce timing constants and whether long-press is detected here or in [[main-loop]]. diff --git a/wiki/firmware/main-loop.md b/wiki/firmware/main-loop.md index fe3c394..a0ff819 100644 --- a/wiki/firmware/main-loop.md +++ b/wiki/firmware/main-loop.md @@ -6,7 +6,7 @@ created: 2026-06-08 updated: 2026-06-08 tags: [loop, events, interrupts, real-time, cw-keyer] source_refs: [] -related: ["[[overview]]", "[[mode-state-machine]]", "[[ui-state-machine]]", "[[front-panel]]", "[[real-time-constraints]]", "[[cat-control]]"] +related: ["[[overview]]", "[[mode-state-machine]]", "[[ui-state-machine]]", "[[front-panel]]", "[[real-time-constraints]]", "[[cat-control]]", "[[tune-frequency-control]]", "[[rapid-tune-mute-freeze]]"] --- # Main Loop & Event Dispatch (Loop.cpp) @@ -48,6 +48,10 @@ VFO/mode/power changes, tune update requests, equalizer, BIT display, and the fi calibration triggers (`iCALIBRATE_POWER/FREQUENCY/RX_IQ/TX_IQ`, `iCALIBRATE_EXIT`) that drive the [[hardware-state-machine]]. +The four HOME-state center/fine tune cases in `ConsumeInterrupt()` also call +`NoteTuneActivity()`, the entry point for the [[rapid-tune-mute-freeze]] detector (which then +mutes audio and freezes/decouples the spectrum while a tune knob is spun fast). + ## CW key / PTT handling `SetupCWKeyInterrupts()` configures KEY1, KEY2, PTT with pull-ups and attaches handlers diff --git a/wiki/firmware/rapid-tune-mute-freeze.md b/wiki/firmware/rapid-tune-mute-freeze.md new file mode 100644 index 0000000..739fb40 --- /dev/null +++ b/wiki/firmware/rapid-tune-mute-freeze.md @@ -0,0 +1,121 @@ +--- +title: Rapid-Tune Audio Mute & Spectrum Freeze +type: decision +status: draft +created: 2026-06-16 +updated: 2026-06-16 +tags: [tuning, encoders, spectrum, waterfall, audio, mute, real-time, display, compile-option] +source_refs: [] +related: ["[[front-panel]]", "[[tune-frequency-control]]", "[[main-loop]]", "[[display-subsystem]]", "[[spectrum-refresh-floor]]", "[[dsp-chain]]", "[[real-time-constraints]]"] +--- + +# Rapid-Tune Audio Mute & Spectrum Freeze + +A feature on the `encoder-i2c-speed` branch that hides the artifacts produced when the +**Center Tune** or **Fine Tune** encoders are spun *fast*. Guarded by a compile-time option; +when enabled it **mutes the output audio** and **freezes/decouples the spectrum redraw** for the +duration of a fast spin, then resumes automatically. + +## Why it exists +The two-tier encoder servicing in [[front-panel]] (the whole point of the `encoder-i2c-speed` +branch) made the encoders so responsive that a fast spin now enqueues a tune event on nearly +every `loop()` iteration. Each consumed Center-Tune event reprograms the Si5351 VFO and +re-centers the spectrum ([[tune-frequency-control]]), so at speed the operator heard **glitchy +audio** and saw a **jerky, half-drawn spectrum sweep**. This feature masks both without changing +the underlying per-event tuning (we still reprogram the VFO every event — we just hide the +side-effects). + +## Compile-time option (`Config.h`) +```c +#define MUTE_ON_RAPID_TUNE // comment out to disable the whole feature +#define RAPID_TUNE_ENGAGE_MS 60 // inter-event gap below this = "spinning" +#define RAPID_TUNE_RELEASE_MS 180 // no tune event for this long = "done spinning" +``` +(`Config.h:51-53`.) With the define removed, all the detection/mute/freeze hooks compile out to +no-ops and the behavior is exactly as before. + +## Detection — `Loop.cpp` +The detector is driven from **event consumption**, not the ISR. Each of the four HOME-state tune +cases in `ConsumeInterrupt()` calls `NoteTuneActivity(fineTune)` — `false` for the two +`iCENTERTUNE_*` cases, `true` for the two `iFINETUNE_*` cases (`Loop.cpp:1123-1146`). + +- **`NoteTuneActivity(bool fineTune)`** (`Loop.cpp:372`) — if the gap since the previous tune + event is `< RAPID_TUNE_ENGAGE_MS`, latch `rapidTuning = true`; also records which encoder + drove it (`lastTuneWasFine`). +- **`IsRapidTuning()`** (`Loop.cpp:381`) — returns the latch, auto-clearing it once no tune + event has arrived for `RAPID_TUNE_RELEASE_MS`. The idle subtraction is done in **`uint32_t`** + so it wraps like the Teensy `millis()` (the host test mock returns a wider type — without the + cast the latch cleared immediately under test). +- **`IsRapidCenterTuning()`** (`Loop.cpp:390`) = `IsRapidTuning() && !lastTuneWasFine`. +- **`IsRapidFineTuning()`** (`Loop.cpp:396`) = `IsRapidTuning() && lastTuneWasFine`. + +Detection keys off consumption timing because one event is consumed per `loop()` while the FIFO +backs up during a spin (the loop runs every few ms), which is more than fast enough to measure +the gap. Declared in `Loop.h`; consumed by [[dsp-chain]] (mute) and [[display-subsystem]] +(freeze). + +## Audio mute — `DSP.cpp` +`AdjustVolume()` (`DSP.cpp:721`), the final output-gain stage before `PlayBuffer()`, scales the +block by `0.0f` instead of the volume amplification while `IsRapidTuning()` is true +(`DSP.cpp:727`) — for **both** encoders. The spectrum PSD is computed upstream of this stage, so +muting the audio does **not** blank the spectrum trace. + +## Spectrum behavior — `MainBoard_DisplayHome.cpp` +The two encoders are treated differently because they affect the spectrum differently +([[tune-frequency-control]]): **Center Tune reprograms the VFO and re-centers** the spectrum, +while **Fine Tune leaves the center fixed** and only slides the tuning marker (`AdjustFineTune()` +never touches `centerFreq_Hz` or calls `UpdateRFHardwareState`). + +### Center Tune → full freeze +`DrawSpectrumPane()` early-returns while `IsRapidCenterTuning()`, holding the last published +trace + waterfall on screen and marking the pane stale so it gets one clean repaint on release +(`MainBoard_DisplayHome.cpp:857`). + +### Fine Tune → frozen trace, *moving* tuning bar +The trace/waterfall are held frozen, but the **blue filter-bandwidth bar + cyan center marker** +keep tracking so the operator can see where they are tuning within the held spectrum +(`MainBoard_DisplayHome.cpp:868`). To make this responsive (the first attempt — throttled to the +50 ms refresh and repainting the whole ~512-line trace each update — was visibly laggy), the +redraw is **decoupled from `SPECTRUM_REFRESH_MS`** and made cheap: + +1. **`StampTuningBar()`** (`MainBoard_DisplayHome.cpp:448`) — refactored out of + `DrawBandWidthIndicatorBar()`; draws the filter highlight (`FILTER_WIN`) + cyan `drawFastVLine` + marker at the current `GetTXRXFreq()` on whatever layer is selected, with no clear/layer + switch. +2. **`BuildFrozenBackdrop()`** (`MainBoard_DisplayHome.cpp:802`) — once per fine-tune episode, + paints a clean **bar-less** trace onto the **L2** back-buffer from `pixelold[]` (the + per-column y values of the last completed sweep). +3. **`RedrawFrozenSpectrumWithBar()`** (`MainBoard_DisplayHome.cpp:822`) — per update, one + hardware **`BTE_move` (L2→L1)** restores the clean trace (erasing the previous bar), then + `StampTuningBar()` stamps the new bar on L1. + +The pane redraws on **frequency change**, not on the refresh timer — each update is a single blit +plus a bar stamp, so the bar tracks the knob with no perceptible lag. A consequence of the +blit-then-stamp order is that the moving filter-highlight box is drawn **on top of** the frozen +trace (the trace is hidden inside the passband box while fine-tuning), rather than the normal +trace-over-highlight compositing. + +### Release +When the latch clears, `PaneSpectrum.stale` (set throughout the freeze) forces a clean overlay +repaint and normal `ShowSpectrum()` sweeping resumes; the held L2 backdrop is dropped +(`fineFreezeBackdropReady = false`, `MainBoard_DisplayHome.cpp:859,878`). + +## Relationship to the refresh-rate work +This is the deliberate **inverse** of [[spectrum-refresh-floor]]: there the goal was to *speed up* +the sweep; here we intentionally *pause* it during a transient (fast tuning) and replace it with a +cheap marker overlay. Both share the lesson that the expensive parts are the per-frame `drawLine`s +and the `BTE` busy-wait — which is exactly why the fine-tune fast path avoids repainting the trace +and does a single blit instead. + +## Tests +`code/test/Loop_test.cpp` (host build, `#ifdef MUTE_ON_RAPID_TUNE`) covers engage on fast events, +release after idle, slow tuning not engaging, center-vs-fine classification, and switching +encoders mid-spin (6 cases). The display fast-path is exercised on hardware, not unit-tested. + +## Open questions +- Bench-tune the thresholds (`RAPID_TUNE_ENGAGE_MS` / `RAPID_TUNE_RELEASE_MS`) against real + encoder feel, and the perceived smoothness of the fine-tune bar at high spin rates. +- Whether muting audio during *Fine* tune is desirable (Fine tune is exactly when you zero-beat a + signal); currently both encoders mute. +- Optional: composite the fine-tune bar **behind** the trace (trace-over-highlight) without + giving up the single-blit cost. diff --git a/wiki/firmware/spectrum-refresh-floor.md b/wiki/firmware/spectrum-refresh-floor.md index 55b77d9..f53d441 100644 --- a/wiki/firmware/spectrum-refresh-floor.md +++ b/wiki/firmware/spectrum-refresh-floor.md @@ -6,7 +6,7 @@ created: 2026-06-09 updated: 2026-06-09 tags: [spectrum, waterfall, display, refresh-rate, nchunks, real-time, performance] source_refs: [] -related: ["[[real-time-constraints]]", "[[zoom-fft]]", "[[display-subsystem]]", "[[dsp-chain]]", "[[main-loop]]"] +related: ["[[real-time-constraints]]", "[[zoom-fft]]", "[[display-subsystem]]", "[[dsp-chain]]", "[[main-loop]]", "[[rapid-tune-mute-freeze]]"] --- # Spectrum Refresh Rate Floor & Optimization diff --git a/wiki/firmware/tune-frequency-control.md b/wiki/firmware/tune-frequency-control.md index 4c9c4bf..bca1f46 100644 --- a/wiki/firmware/tune-frequency-control.md +++ b/wiki/firmware/tune-frequency-control.md @@ -6,7 +6,7 @@ created: 2026-06-08 updated: 2026-06-16 tags: [tuning, vfo, frequency, fs-over-4, cw-offset, fast-tune, power-calibration] source_refs: [] -related: ["[[overview]]", "[[hardware-state-machine]]", "[[rf-board]]", "[[mode-state-machine]]", "[[iq-quadrature-sampling]]", "[[dsp-chain]]"] +related: ["[[overview]]", "[[hardware-state-machine]]", "[[rf-board]]", "[[mode-state-machine]]", "[[iq-quadrature-sampling]]", "[[dsp-chain]]", "[[rapid-tune-mute-freeze]]"] --- # Frequency Control & Tuning Math (Tune.cpp) @@ -80,6 +80,12 @@ clamps the result so you can't tune outside what's usable: `AdjustBand()` in [[main-loop]] re-derives the band from the new frequency, keeping the last valid band if you tune outside the ham bands (so demod keeps working). +Note `AdjustFineTune()` only moves `fineTuneFreq_Hz` — it never touches `centerFreq_Hz` or +reprograms the Si5351, so a fine-tune spin leaves the spectrum **center fixed** and only slides +the on-screen marker. [[rapid-tune-mute-freeze]] relies on exactly this distinction: it fully +freezes the spectrum for Center Tune (which re-centers) but for Fine Tune holds the trace and +just redraws the moving tuning bar. + ## Per-mode VFO selection lives in HardwareSm The actual "which formula → which VFO register" dispatch is `HandleTuneState()` (`HardwareSm.cpp:639`), which also selects LPF/BPF band, antenna, PA, and refreshes the FIR diff --git a/wiki/index.md b/wiki/index.md index 73f6a8e..2669c42 100644 --- a/wiki/index.md +++ b/wiki/index.md @@ -6,7 +6,7 @@ created: 2026-06-08 updated: 2026-06-16 --- - + # Phoenix Wiki — Index @@ -24,6 +24,7 @@ _Modules, architecture, state machines, DSP chains, design decisions, code herit - [[state-machine-architecture]] — how the StateSmith-generated SM layer works. - [[real-time-constraints]] — the ~10 ms loop budget and timing rules. - [[spectrum-refresh-floor]] — why refresh ≈ NCHUNKS×T_loop; the 11.7→18.8 fps optimization. *(draft)* +- [[rapid-tune-mute-freeze]] — `MUTE_ON_RAPID_TUNE`: mute audio + freeze spectrum on fast tuning; Fine Tune keeps only the blue bar moving. *(draft)* - [[code-heritage]] — lineage from DD4WH Teensy Convolution SDR; contributor list; GPLv3. **State machines** diff --git a/wiki/log.md b/wiki/log.md index 9d22c74..8da4e68 100644 --- a/wiki/log.md +++ b/wiki/log.md @@ -685,3 +685,22 @@ landed on this branch. Reconciled the three caveat-bearing pages: `updated:` bumped to 2026-06-16 on all three. No remaining stale `_dHz` identifier claims. **Suggested next:** promote the now-verified firmware pages from `draft`→`stable` (most are draft); consider a dedicated power-calibration theory page (flagged in tune-frequency-control). + +## [2026-06-16] decision | rapid-tune audio mute & spectrum freeze (encoder-i2c-speed) +Documented a new `encoder-i2c-speed` feature, compile-gated by `MUTE_ON_RAPID_TUNE` (Config.h): +when a tune encoder is spun fast, mute the output audio and freeze/decouple the spectrum redraw, +resuming automatically. The two-tier encoder speedup ([[front-panel]]) made fast spins enqueue a +tune event almost every loop, which surfaced audio glitches + a jerky sweep; this masks both +without changing per-event tuning. +**New page:** firmware/rapid-tune-mute-freeze.md (`type: decision`). Covers detection in Loop.cpp +(`NoteTuneActivity(bool)`, `IsRapidTuning`/`IsRapidCenterTuning`/`IsRapidFineTuning`; uint32 millis +wrap fix for the host mock), audio mute in `AdjustVolume()` (DSP.cpp), and the display split — +Center Tune fully freezes; Fine Tune holds the trace but keeps the blue filter bar + cyan marker +tracking via a one-time bar-less L2 backdrop (`BuildFrozenBackdrop`) + per-freq-change L2→L1 BTE +blit (`RedrawFrozenSpectrumWithBar`) + `StampTuningBar` (refactored out of +`DrawBandWidthIndicatorBar`). Noted the inverse relationship to [[spectrum-refresh-floor]] (pause +vs speed-up; same draw-cost lesson) and the trace-over-highlight trade-off of the fast path. +**Cross-links added:** front-panel, tune-frequency-control, display-subsystem, main-loop, +spectrum-refresh-floor (all in `related` + inline). **index.md** bumped firmware 21→22 (44 content +pages). Status `draft` — display fast-path is hardware-exercised, not unit-tested; thresholds +(`RAPID_TUNE_ENGAGE_MS=60`/`RAPID_TUNE_RELEASE_MS=180`) pending bench tuning. From 9c8bb16ec20662b9dd7f8552a1e8f34b0d2adff9 Mon Sep 17 00:00:00 2001 From: Oliver King Date: Tue, 28 Jul 2026 05:58:24 -0400 Subject: [PATCH 07/25] Add runtime-switchable, persisted sample rate (192 / 176.4 ksps) Adds a "Sample Rate" top-level menu and full support for changing the audio sample rate at run time, plus fixes to the DSP/display paths that assumed a fixed 192 ksps rate. Firmware: - New "Sample Rate" primary menu ("192 ksps" / "176.4 ksps") and ChangeSampleRate(): reconfigures the I2S clock, rebuilds the DSP filter chain / AGC / CW, updates the sidetone + TX-IQ-cal oscillators, and flushes the input queues. Compensates centerFreq_Hz for the change in the Fs/4 IF offset and re-runs the tune so the dial frequency is preserved, then re-programs the Si5351. - Persist the rate in ED: SampleRate is now a reference to ED.sampleRate, serialized in Storage.cpp, so the choice survives a reboot (restored before audio/DSP init) and is applied automatically at boot. - InitializeDecimationFilter now frees previous buffers before malloc, so re-initializing at run time (a rate change) does not leak. - Spectrum frequency labels: position ticks via FreqToBin() at round frequencies (instead of a fixed pixel table + non-round step) so they stay aligned with the trace at any rate, and widen the clear strip so old ticks are wiped on zoom/tune changes. - Audio spectrum: derive the axis span from Fs/32 instead of a hard-coded 0..6000 Hz, so tone frequencies read correctly at any rate. - Settings pane: add a "Rate:" row (Key Type moved down one row). Simulator: - Make the OpenAudio mock rate-aware: test-tone carrier at Fs/4, sample pacing and SDL output rate derived from the current rate; re-init SDL audio when the rate changes. Tests / docs: - 176.4 kHz stage-response tests, dial-frequency-preservation test, and a zoom-FFT/axis-agreement test; AudioNoInterrupts mock; menu-size externs updated for the new primary menu. - Add compare_176k_vs_192k.ipynb and docs/RX_DSP_Chain_Parameters.md. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01ABs1WDZPCHyEFPXZnqjCXL --- code/docs/RX_DSP_Chain_Parameters.md | 116 +++++ code/src/PhoenixSketch/DSP_FIR.cpp | 7 + code/src/PhoenixSketch/Globals.cpp | 5 +- code/src/PhoenixSketch/MainBoard_AudioIO.cpp | 65 ++- code/src/PhoenixSketch/MainBoard_AudioIO.h | 15 + code/src/PhoenixSketch/MainBoard_Display.h | 2 +- .../PhoenixSketch/MainBoard_DisplayHome.cpp | 147 ++++--- .../PhoenixSketch/MainBoard_DisplayMenus.cpp | 23 +- code/src/PhoenixSketch/SDT.h | 9 +- code/src/PhoenixSketch/Storage.cpp | 4 + code/test/Arduino.h | 1 + code/test/CAT_test.cpp | 2 +- code/test/Calibration_test.cpp | 2 +- code/test/OpenAudio_ArduinoLibrary_mock.cpp | 68 ++- code/test/PowerCalibration_test.cpp | 2 +- code/test/RFBoard_test.cpp | 2 +- code/test/RadioSimulator_main.cpp | 35 +- code/test/SignalProcessing_test.cpp | 271 +++++++++++- code/test/compare_176k_vs_192k.ipynb | 411 ++++++++++++++++++ 19 files changed, 1079 insertions(+), 108 deletions(-) create mode 100644 code/docs/RX_DSP_Chain_Parameters.md create mode 100644 code/test/compare_176k_vs_192k.ipynb diff --git a/code/docs/RX_DSP_Chain_Parameters.md b/code/docs/RX_DSP_Chain_Parameters.md new file mode 100644 index 0000000..8e3fb2d --- /dev/null +++ b/code/docs/RX_DSP_Chain_Parameters.md @@ -0,0 +1,116 @@ +# Receive DSP Chain — Step-by-Step Parameter Sourcing + +Analysis of the receive audio processing chain: each step, its location in the +code, and whether its DSP parameters are **derived from the sample rate (Fs)** or +**hard-coded** (baked-in coefficient tables with an implicit Fs assumption). + +## Global context + +- Input rate = `SR[SampleRate].rate`, default **192 kHz** (`Globals.cpp:106`). +- Decimation factor `DF = DF1*DF2 = 4*2 = 8`, a compile-time constant (`SDT.h:409-410`). +- So the audio-rate back half of the chain (ConvolutionFilter onward) runs at + **Fs/8 = 24 ksps** when Fs = 192 kHz. +- Pipeline defined in `ReceiveProcessing()`, `DSP.cpp:839`. + +## Chain steps + +- **Read IQ input** — `ReadIQInputBuffer`, `DSP.cpp:133` + - Sets `data->sampleRate_Hz = SR[SampleRate].rate`. **Fs-derived** (source of truth). + +- **RF gain** — `ApplyRFGain`, `DSP.cpp:115` + - Pure dB→linear scaling; no frequency parameters. N/A. + +- **IQ amplitude/phase correction** — `ApplyIQCorrection`, `DSP.cpp:206` + - Per-band calibration factors; no frequency parameters. N/A. + +- **Zoom FFT (spectrum display)** — `ZoomFFTExe`, `DSP_FFT.cpp:574` + - Decimation biquads `mag_coeffs[]`, `DSP_FIR.cpp:690`. **Hard-coded.** + - Elliptic biquads designed for **Fs = 48 kHz**, 60 dB stopband. Corners: + 2×=12 kHz, 4×=6 kHz, 8×=3 kHz, 16×=1.5 kHz, 32×=750 Hz. + - Note: runs on full-rate (192 kHz) data before DecimateBy8, so at the default + input rate the effective corners land 4× higher than the labels (design-rate + vs runtime-rate mismatch). + +- **Frequency translation +Fs/4** — `FreqShiftFs4`, `DSP.cpp:879` + - Multiplication-free ±Fs/4 shift. **Fs-derived** (shift = Fs/4 by construction). + +- **Fine-tune frequency shift** — `FreqShiftF`, `DSP.cpp:899` + - NCO increment `= 2π·shift/sampleRate_Hz`. **Fs-derived.** + +- **Decimate by 8 (÷4 then ÷2)** — `DecimateBy8`, `DSP_FFT.cpp:662` + - FIR coeffs via `InitializeDecimationFilter` / `CalcFIRCoeffs`, + `DSP_FFT.cpp:365`, `DSP_FIR.cpp:1284`. **Fs-derived.** + - Normalized cutoff = `n_desired_BW_Hz/Fs`, tap count from `n_att_dB`. + - Targets hard-fixed: `n_desired_BW_Hz = 9000`, `n_att_dB = 90` (`SDT.h:412-413`), + but normalization scales with Fs. + +- **Volume scale (bandwidth compensation)** — `VolumeScale`, `DSP.cpp:219` + - `volScaleFactor = 7.0874·Fcut_kHz^-1.232`. **Hard-coded** empirical curve fit + (keyed off the band filter cutoff in kHz, not Fs). + +- **Convolution bandpass filter** — `ConvolutionFilter`, `DSP_FFT.cpp:678` + - Filter mask via `CalcCplxFIRCoeffs`, `DSP_FIR.cpp:1357`. **Fs-derived.** + - Passband edges from per-band `FLoCut_Hz`/`FHiCut_Hz` (default 200–3000 Hz, + `Globals.cpp:39+`), normalized by `Fs/DF`. Data-driven edges, adaptive Fs. + +- **AGC** — `AGC` / `InitializeAGC`, `DSP.cpp:313` / `DSP.cpp:238` + - All attack/decay/hang multipliers = `f(sample_rate = Fs/DF)`. **Fs-derived.** + - Time constants (tau) and hangtimes are hard-coded seconds, converted to + per-sample multipliers using Fs. + +- **Demodulate** — `Demodulate`, `DSP.cpp:629` + - SSB (LSB/USB): copy only, no parameters. N/A. + - AM: DC-blocker `w = audiotmp + wold*0.99` (`DSP.cpp:654`) is **hard-coded** + (pole 0.99 ⇒ ~38 Hz corner at 24 ksps; comment says "below 200 Hz"). + Followed by AM audio lowpass biquad `biquad_lowpass1` (`DSP_FFT.cpp:358`): + **Fs-derived** (`SetIIRCoeffs`, corner = band FHiCut, Q=1.3 hard-coded, Fs/DF). + - SAM: `AMDecodeSAM`, `DSP.cpp:567` — PLL gains all from `sampleRate_Hz` + (**Fs-derived**); PLL physical constants (`pll_fmax=4000`, `omegaN=200`, + `zeta=0.65`, `tauR=0.02`, `tauI=1.4`, `DSP.cpp:551-556`) are hard-coded. + +- **Receive band EQ (14-band graphic)** — `BandEQ`, `DSP_FFT.cpp:819` + - `EQ_Band1..14Coeffs`, `DSP_FIR.cpp` (~line 400+). **Hard-coded.** + - 4-pole Gaussian ⅓-octave biquads; centers 400/500/630/793/1000/1259/1587/ + 2000/2500/3150/4000 Hz. Implied design rate **24 ksps** (post-decimation). + +- **Noise reduction** — `NoiseReduction`, `DSP.cpp:672` + - Kim / Spectral / LMS algorithms; internal constants are algorithm tuning + parameters (not Fs-normalized). Mostly hard-coded, block-size dependent. + +- **Notch filter (LMS)** — `Xanr`, called at `DSP.cpp:933` + - Adaptive LMS; coefficients learned at runtime. Neither fixed table nor + Fs-normalized (adapts to signal, implicitly block/rate dependent). + +- **CW decode** — `DoCWReceiveProcessing`, `DSP_CWProcessing.cpp:86` + - Decode FIR `CW_Filter_Coeffs2[64]`, `DSP_FIR.cpp:95`. **Hard-coded** — 64-tap + Parks-McClellan, **24 ksps**, Fc = 1560 Hz. + - Reference sine / Goertzel: `DSP_CWProcessing.cpp:65, 106` — **Fs-derived** + (`phs = 2π·f_tone/(Fs/DF)`; Goertzel uses `data->sampleRate_Hz`). + +- **CW audio bandpass** — `CWAudioFilter`, `DSP_CWProcessing.cpp:538` + - `CW_AudioFilterCoeffs1..5`, `DSP_FIR.cpp:31-81`. **Hard-coded.** + - 12-pole Chebyshev LPFs, **24 KSPS**; cutoffs 840 Hz / 1.08 / 1.32 / 1.80 / + 2.0 kHz (UI: 0.8/1.0/1.3/1.8/2.0 kHz). + +- **Interpolate back to Fs** — `InterpolateReceiveData`, `DSP.cpp:697` + - Interpolation FIRs `FIR_int1`/`FIR_int2` via `CalcFIRCoeffs`, + `DSP_FFT.cpp:394-397`. **Fs-derived** (computed at `Fs/DF1` and `Fs`). + +- **Volume adjust (audio level)** — `AdjustVolume`, `DSP.cpp:721` + - `VolumeToAmplification` — pure user-level gain curve; no frequency + parameters. N/A. + +## Summary + +- **Fs-derived (follow sample-rate changes correctly):** decimation/interpolation + filters, convolution bandpass mask, AM audio lowpass, AGC, SAM PLL, all + frequency shifts, CW reference sine / Goertzel. +- **Hard-coded coefficient tables (implicit Fs assumption):** + - Zoom-FFT `mag_coeffs` — design **Fs = 48 kHz**. + - CW audio filters, CW decode FIR, 14-band EQ, AM DC-blocker — design **Fs = 24 ksps** + (i.e. correct only for 192 kHz input). +- **Empirical / algorithm-tuned (not Fs-normalized):** VolumeScale curve, SAM PLL + physical constants, noise-reduction internals. +- The audible passband edges are **data-driven** from the band table + (`FLoCut_Hz`/`FHiCut_Hz`, default 200–3000 Hz), feeding the *computed* convolution + mask — not baked into any coefficient table. diff --git a/code/src/PhoenixSketch/DSP_FIR.cpp b/code/src/PhoenixSketch/DSP_FIR.cpp index f7de343..b11e6a8 100644 --- a/code/src/PhoenixSketch/DSP_FIR.cpp +++ b/code/src/PhoenixSketch/DSP_FIR.cpp @@ -1292,6 +1292,13 @@ void InitializeDecimationFilter(DecimationFilter *filter, float32_t DF, float32_ filter->n_fstop = ((filter->n_samplerate_Hz / filter->M) - filter->n_desired_BW_Hz) / filter->n_samplerate_Hz; filter->n_dec_taps = (1 + (uint16_t)(filter->n_att_dB / (22.0 * (filter->n_fstop - filter->n_fpass)))); + // Free any buffers from a previous initialization so that re-initializing at + // run time (e.g. a sample-rate change) does not leak memory. The pointers are + // nullptr on first use, and free(nullptr) is a no-op. + free(filter->FIR_dec_I_state); + free(filter->FIR_dec_Q_state); + free(filter->FIR_dec_coeffs); + filter->FIR_dec_I_state = (float32_t*)malloc(sizeof(float32_t) * (filter->n_dec_taps + blockSize - 1)); filter->FIR_dec_Q_state = (float32_t*)malloc(sizeof(float32_t) * (filter->n_dec_taps + blockSize - 1)); filter->FIR_dec_coeffs = (float32_t*)malloc(sizeof(float32_t) * filter->n_dec_taps); diff --git a/code/src/PhoenixSketch/Globals.cpp b/code/src/PhoenixSketch/Globals.cpp index 0e425b7..38874dd 100644 --- a/code/src/PhoenixSketch/Globals.cpp +++ b/code/src/PhoenixSketch/Globals.cpp @@ -103,7 +103,10 @@ ReceiveFilterConfig RXTXfilters; ReceiveFilterConfig TXIQfilters; TransmitFilterConfig TXfilters; AGCConfig agc; -uint8_t SampleRate = SAMPLE_RATE_192K; +// SampleRate is a reference to the persisted ED.sampleRate so that the many +// SR[SampleRate] call sites keep working while the value lives in (and is saved +// with) the ED config struct. ED is defined above, so it is constructed first. +uint8_t& SampleRate = ED.sampleRate; const float32_t CWToneOffsetsHz[] = {400, 562.5, 656.5, 750.0, 843.75 }; diff --git a/code/src/PhoenixSketch/MainBoard_AudioIO.cpp b/code/src/PhoenixSketch/MainBoard_AudioIO.cpp index 9f52446..051592d 100644 --- a/code/src/PhoenixSketch/MainBoard_AudioIO.cpp +++ b/code/src/PhoenixSketch/MainBoard_AudioIO.cpp @@ -486,13 +486,76 @@ void InitializeAudio(void){ MuteMixerChannels(&modeSelectOutL); // sidetone MuteMixerChannels(&modeSelectOutR); // sidetone sidetone_oscillator.amplitude(ED.sidetoneVolume / 500); - sidetone_oscillator.frequency(SIDETONE_FREQUENCY*AUDIO_SAMPLE_RATE_EXACT/SR[SampleRate].rate); // The transmit IQ cal oscillator. Only used during the TXIQ calibration state transmitIQcal_oscillator.amplitude(40.0/500); + + // Set the oscillator frequencies for the current sample rate + UpdateSampleRateDependentOscillators(); +} + +/** + * Set the frequencies of the synthesized oscillators that are specified relative + * to the audio sample rate. These must be recomputed whenever the sample rate + * changes so that the sidetone and TX IQ calibration tones stay at the correct + * audible frequency. + */ +void UpdateSampleRateDependentOscillators(void){ + sidetone_oscillator.frequency(SIDETONE_FREQUENCY*AUDIO_SAMPLE_RATE_EXACT/SR[SampleRate].rate); transmitIQcal_oscillator.frequency(800.0f*AUDIO_SAMPLE_RATE_EXACT/SR[SampleRate].rate); } +/** + * Change the radio's audio sample rate at run time. + * + * Reconfigures the I2S clock, rebuilds the sample-rate-dependent DSP filters and + * oscillators, and flushes the audio input queues so that stale samples captured + * at the old rate are not processed at the new rate. Safe to call from the main + * loop (e.g. from a menu selection); it briefly disables audio interrupts while + * the queues are flushed. Does nothing if the requested rate is already active. + * + * @param newRate Sample-rate selector index (e.g. SAMPLE_RATE_192K, SAMPLE_RATE_176K) + */ +void ChangeSampleRate(uint8_t newRate){ + if (newRate == SampleRate) + return; // already at this rate, nothing to do + + // Compensate the tuning for the change in the Fs/4 IF offset so the dial + // (receive) frequency stays constant across the rate change. The RX VFO is + // programmed to centerFreq_Hz and the receive DSP shifts by +Fs/4, so the + // received frequency is centerFreq_Hz - Fs/4. Shift centerFreq_Hz by the + // change in Fs/4 to hold (centerFreq_Hz - Fs/4) constant. Apply to both VFOs + // so a later VFO switch is also correct. Must be computed before SampleRate + // is updated so SR[SampleRate] still refers to the old rate. + int32_t dQuarter_Hz = (int32_t)(SR[newRate].rate / 4) - (int32_t)(SR[SampleRate].rate / 4); + for (int v = 0; v < 2; v++) + ED.centerFreq_Hz[v] += dQuarter_Hz; + + AudioNoInterrupts(); + SampleRate = newRate; + // Reconfigure the I2S peripheral clock to the new rate + SetI2SFreq(SR[SampleRate].rate); + // Rebuild the DSP filter chain, AGC and CW processing for the new rate. The + // decimation filters are re-allocated here; InitializeDecimationFilter frees + // the previous allocations so this does not leak on repeated changes. + InitializeSignalProcessing(); + // Keep the sidetone / cal oscillators at the correct audible frequency + UpdateSampleRateDependentOscillators(); + // Discard samples that were captured at the old rate + Q_in_L.clear(); + Q_in_R.clear(); + Q_in_L_Ex.clear(); + Q_in_R_Ex.clear(); + AudioInterrupts(); + + // Re-program the RX VFO (Si5351) for the compensated center frequency so the + // radio stays tuned to the same dial frequency. Done outside the audio- + // interrupt-disabled section because it performs I2C transactions. + UpdateTuneState(); + + Debug("Sample rate changed to " + String(SR[SampleRate].rate) + " Hz"); +} + /** * Set the I2S sample frequency * diff --git a/code/src/PhoenixSketch/MainBoard_AudioIO.h b/code/src/PhoenixSketch/MainBoard_AudioIO.h index 48ab44f..34a7c3d 100644 --- a/code/src/PhoenixSketch/MainBoard_AudioIO.h +++ b/code/src/PhoenixSketch/MainBoard_AudioIO.h @@ -52,6 +52,21 @@ int SetI2SFreq(int freq); */ void InitializeAudio(void); +/** + * @brief Recompute oscillator frequencies that are specified relative to the sample rate + * @note Sets the sidetone and TX IQ calibration oscillator frequencies for SR[SampleRate] + * @note Called by InitializeAudio() and whenever the sample rate changes + */ +void UpdateSampleRateDependentOscillators(void); + +/** + * @brief Change the radio's audio sample rate at run time + * @param newRate Sample-rate selector index (e.g. SAMPLE_RATE_192K, SAMPLE_RATE_176K) + * @note Reconfigures the I2S clock, rebuilds the DSP filter chain and oscillators, and flushes the audio input queues + * @note Safe to call from the main loop; briefly disables audio interrupts. No-op if the rate is unchanged. + */ +void ChangeSampleRate(uint8_t newRate); + /** * @brief Reconfigure audio routing based on current radio mode state * @note Responds to ModeSm state changes by reconfiguring mixers and queues diff --git a/code/src/PhoenixSketch/MainBoard_Display.h b/code/src/PhoenixSketch/MainBoard_Display.h index 0881ca3..750a85e 100644 --- a/code/src/PhoenixSketch/MainBoard_Display.h +++ b/code/src/PhoenixSketch/MainBoard_Display.h @@ -368,6 +368,6 @@ void ChangeFrequencyCorrectionFactorIncrement(void); // External variable declarations (shared between display modules) extern size_t primaryMenuIndex; extern size_t secondaryMenuIndex; -extern struct PrimaryMenuOption primaryMenu[8]; +extern struct PrimaryMenuOption primaryMenu[9]; #endif diff --git a/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp b/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp index 649d354..24b9418 100644 --- a/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp +++ b/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp @@ -528,70 +528,56 @@ void ShowBandwidth() { void DrawFrequencyBarValue(void) { char txt[16]; - int bignum; - int centerIdx; - int pos_help; - float disp_freq; - float freq_calc; - float grat; - int centerLine = MAX_WATERFALL_WIDTH / 2 + SPECTRUM_LEFT_X; - const static int idx2pos[2][9] = { - { -43, 21, 50, 250, 140, 250, 232, 250, 315 }, - { -43, 21, 50, 85, 200, 200, 232, 218, 315 } - }; - - grat = (float)(SR[SampleRate].rate / 8000.0) / (float)(1 << ED.spectrum_zoom); - - tft.setTextColor(RA8875_WHITE); tft.setFontDefault(); tft.setFontScale((enum RA8875tsize)0); - tft.fillRect(0, WATERFALL_TOP_Y, MAX_WATERFALL_WIDTH + PaneSpectrum.x0 + 10, tft.getFontHeight(), RA8875_BLACK); - - freq_calc = (float)GetCenterFreq_Hz(); - - if (ED.spectrum_zoom < 5) { - freq_calc = roundf(freq_calc / 1000); - } - - if (ED.spectrum_zoom != 0) - centerIdx = 0; - else - centerIdx = -2; - - ultoa((freq_calc + (centerIdx * grat)), txt, DEC); - disp_freq = freq_calc + (centerIdx * grat); - bignum = (int)disp_freq; - itoa(bignum, txt, DEC); - tft.setTextColor(RA8875_GREEN); - - if (ED.spectrum_zoom == 0) { - tft.setCursor(centerLine - 140, WATERFALL_TOP_Y); - } else { - tft.setCursor(centerLine - 20, WATERFALL_TOP_Y); + // Clear the tick + label strip. The ticks extend 5 px above WATERFALL_TOP_Y + // (up to the spectrum-pane bottom border), so the clear must start there too; + // otherwise old ticks persist when they move (e.g. on a zoom change), since + // FreqToBin-based ticks are not redrawn at the same pixels each time. + tft.fillRect(0, WATERFALL_TOP_Y - 5, MAX_WATERFALL_WIDTH + PaneSpectrum.x0 + 10, tft.getFontHeight() + 5, RA8875_BLACK); + // Restore the spectrum-pane bottom border that the clear above overlaps. + tft.drawFastHLine(PaneSpectrum.x0 - 2, WATERFALL_TOP_Y - 5, MAX_WATERFALL_WIDTH + 5, RA8875_YELLOW); + + // Position every tick/label from its frequency via FreqToBin() - the same + // mapping the spectrum trace uses - so ticks stay aligned with the trace at any + // sample rate. (The previous version used a hand-tuned fixed pixel table and a + // non-round label step, which drifted at sample rates other than 192 ksps.) + int64_t lower_Hz = GetLowerFreq_Hz(); + int64_t upper_Hz = GetUpperFreq_Hz(); + int64_t center_Hz = GetCenterFreq_Hz(); + double span_kHz = (double)(upper_Hz - lower_Hz) / 1000.0; + + // Choose a "nice" label step (1/2/5 x 10^n kHz) giving roughly 8 divisions. + double raw = span_kHz / 8.0; + double mag = pow(10.0, floor(log10(raw))); + double norm = raw / mag; + double step_kHz = (norm < 1.5 ? 1.0 : (norm < 3.0 ? 2.0 : (norm < 7.0 ? 5.0 : 10.0))) * mag; + + int charW = tft.getFontWidth(); + // First labelled frequency at or above the lower edge, snapped to the step. + double first_kHz = ceil((double)lower_Hz / 1000.0 / step_kHz) * step_kHz; + + for (double f_kHz = first_kHz; f_kHz * 1000.0 <= (double)upper_Hz; f_kHz += step_kHz) { + int64_t f_Hz = (int64_t)llround(f_kHz * 1000.0); + int16_t px = SPECTRUM_LEFT_X + FreqToBin(f_Hz); + + if (step_kHz >= 1.0) + snprintf(txt, sizeof(txt), "%ld", (long)llround(f_kHz)); + else + snprintf(txt, sizeof(txt), "%.1f", f_kHz); + + // Highlight the tick nearest the center frequency in green. + int64_t dCenter = (f_Hz > center_Hz) ? (f_Hz - center_Hz) : (center_Hz - f_Hz); + tft.setTextColor(dCenter < (int64_t)(step_kHz * 500.0) ? RA8875_GREEN : RA8875_WHITE); + + // Yellow tick mark with the label centered underneath it. + tft.drawFastVLine(px, WATERFALL_TOP_Y - 5, 7, RA8875_YELLOW); + int16_t labelX = px - (int16_t)(strlen(txt) * charW) / 2; + if (labelX < SPECTRUM_LEFT_X) labelX = SPECTRUM_LEFT_X; + tft.setCursor(labelX, WATERFALL_TOP_Y); + tft.print(txt); } - tft.print(txt); tft.setTextColor(RA8875_WHITE); - - for (int idx = -4; idx < 5; idx++) { - pos_help = idx2pos[ED.spectrum_zoom < 3 ? 0 : 1][idx + 4]; - if (idx != centerIdx) { - ultoa((freq_calc + (idx * grat)), txt, DEC); - if (ED.spectrum_zoom == 0) { - tft.setCursor(WATERFALL_LEFT_X + pos_help * xExpand + 40, WATERFALL_TOP_Y); - } else { - tft.setCursor(WATERFALL_LEFT_X + pos_help * xExpand + 40, WATERFALL_TOP_Y); - } - tft.print(txt); - if (idx < 4) { - tft.drawFastVLine((WATERFALL_LEFT_X + pos_help * xExpand + 60), WATERFALL_TOP_Y - 5, 7, RA8875_YELLOW); - } else { - tft.drawFastVLine((WATERFALL_LEFT_X + (pos_help + 9) * xExpand + 60), WATERFALL_TOP_Y - 5, 7, RA8875_YELLOW); - } - } - if (ED.spectrum_zoom > 2 || freq_calc > 1000) { - idx++; - } - } } // State tracking for S-meter display @@ -1209,15 +1195,21 @@ void DrawAudioSpectContainer() { tft.setFontScale((enum RA8875tsize)0); tft.setTextColor(RA8875_WHITE); tft.drawRect(PaneAudioSpectrum.x0, PaneAudioSpectrum.y0, PaneAudioSpectrum.width, AUDIO_SPECTRUM_BOTTOM-PaneAudioSpectrum.y0, RA8875_GREEN); - for (int k = 0; k < 6; k++) { - tft.drawFastVLine(PaneAudioSpectrum.x0 + k * 43.8, AUDIO_SPECTRUM_BOTTOM, 15, RA8875_GREEN); - tft.setCursor(PaneAudioSpectrum.x0 - 4 + k * 43.8, AUDIO_SPECTRUM_BOTTOM + 16); + // The audio spectrum shows the first 128 bins of a 512-point FFT of the audio, + // which runs at Fs/8. So the 256-pixel-wide pane (bin k drawn at pixel 2k) spans + // 0 .. 128*(Fs/8)/512 = Fs/32 Hz (6 kHz at 192ksps, 5.5 kHz at 176.4ksps). + // Deriving the axis from the sample rate keeps the ticks/markers correct at any rate. + int32_t audioSpan_Hz = SR[SampleRate].rate / 32; + float pxPerKHz = 256.0f * 1000.0f / (float)audioSpan_Hz; + for (int k = 0; k * 1000 <= audioSpan_Hz; k++) { + tft.drawFastVLine(PaneAudioSpectrum.x0 + (int)(k * pxPerKHz), AUDIO_SPECTRUM_BOTTOM, 15, RA8875_GREEN); + tft.setCursor(PaneAudioSpectrum.x0 - 4 + (int)(k * pxPerKHz), AUDIO_SPECTRUM_BOTTOM + 16); tft.print(k); tft.print("k"); } tft.writeTo(L2); - int16_t fLo = map(olo, 0, 6000, 0, 256); - int16_t fHi = map(ohi, 0, 6000, 0, 256); + int16_t fLo = map(olo, 0, audioSpan_Hz, 0, 256); + int16_t fHi = map(ohi, 0, audioSpan_Hz, 0, 256); tft.drawFastVLine(PaneAudioSpectrum.x0 + 2 + abs(fLo), PaneAudioSpectrum.y0+2, AUDIO_SPECTRUM_BOTTOM-PaneAudioSpectrum.y0-3, RA8875_BLACK); tft.drawFastVLine(PaneAudioSpectrum.x0 + 2 + abs(fHi), PaneAudioSpectrum.y0+2, AUDIO_SPECTRUM_BOTTOM-PaneAudioSpectrum.y0-3, RA8875_BLACK); @@ -1228,17 +1220,17 @@ void DrawAudioSpectContainer() { // every mode - overlapping harmlessly in the AM/SAM case. int32_t low_Hz, high_Hz; EffectivePassbandEdges_Hz(&low_Hz, &high_Hz); - int16_t filterLoPositionMarker = map(low_Hz, 0, 6000, 0, 256); - int16_t filterHiPositionMarker = map(high_Hz, 0, 6000, 0, 256); + int16_t filterLoPositionMarker = map(low_Hz, 0, audioSpan_Hz, 0, 256); + int16_t filterHiPositionMarker = map(high_Hz, 0, audioSpan_Hz, 0, 256); tft.drawFastVLine(PaneAudioSpectrum.x0 + 2 + abs(filterLoPositionMarker), PaneAudioSpectrum.y0+2, AUDIO_SPECTRUM_BOTTOM-PaneAudioSpectrum.y0-3, RA8875_LIGHT_GREY); tft.drawFastVLine(PaneAudioSpectrum.x0 + 2 + abs(filterHiPositionMarker), PaneAudioSpectrum.y0+2, AUDIO_SPECTRUM_BOTTOM-PaneAudioSpectrum.y0-3, RA8875_LIGHT_GREY); if (modeSM.state_id == ModeSm_StateId_CW_RECEIVE){ int16_t fcutoffs[] = {840,1080,1320,1800,2000,0}; - int16_t fcw = map(fcutoffs[ofi], 0, 6000, 0, 256); + int16_t fcw = map(fcutoffs[ofi], 0, audioSpan_Hz, 0, 256); tft.drawFastVLine(PaneAudioSpectrum.x0 + 2 + fcw, PaneAudioSpectrum.y0+2, AUDIO_SPECTRUM_BOTTOM-PaneAudioSpectrum.y0-3, RA8875_BLACK); - int16_t cwFilterPosition = map(fcutoffs[ED.CWFilterIndex], 0, 6000, 0, 256); + int16_t cwFilterPosition = map(fcutoffs[ED.CWFilterIndex], 0, audioSpan_Hz, 0, 256); if (cwFilterPosition > 0) tft.drawFastVLine(PaneAudioSpectrum.x0 + 2 + cwFilterPosition, PaneAudioSpectrum.y0+2, AUDIO_SPECTRUM_BOTTOM-PaneAudioSpectrum.y0-3, RA8875_YELLOW); } @@ -1544,6 +1536,22 @@ void UpdateKeyTypeSetting(void){ UpdateSetting(tft.getFontWidth(), tft.getFontHeight(), column1x, (char *)"Key Type:", 9, valueText, 15, + PaneSettings.height/5 + 6*tft.getFontHeight() + 1,true,true); +} + +// State tracking for sample rate setting display +static uint8_t oldSampleRateSetting = 0xFF; + +void UpdateSampleRateSetting(void){ + if ((oldSampleRateSetting == SampleRate) && (!PaneSettings.stale)) + return; + oldSampleRateSetting = SampleRate; + tft.setFontScale((enum RA8875tsize)0); + char valueText[8]; + sprintf(valueText,"%s",SR[SampleRate].text); + UpdateSetting(tft.getFontWidth(), tft.getFontHeight(), column1x, + (char *)"Rate:", 5, + valueText, 7, PaneSettings.height/5 + 5*tft.getFontHeight() + 1,true,true); } @@ -1630,6 +1638,7 @@ void DrawSettingsPane(void) { UpdateRFGainSetting(); UpdateNoiseSetting(); UpdateZoomSetting(); + UpdateSampleRateSetting(); UpdateKeyTypeSetting(); UpdateDecoderSetting(); UpdateDSPGainSetting(); diff --git a/code/src/PhoenixSketch/MainBoard_DisplayMenus.cpp b/code/src/PhoenixSketch/MainBoard_DisplayMenus.cpp index a872c80..c83c26f 100644 --- a/code/src/PhoenixSketch/MainBoard_DisplayMenus.cpp +++ b/code/src/PhoenixSketch/MainBoard_DisplayMenus.cpp @@ -577,9 +577,29 @@ struct SecondaryMenuOption DiagnosticOptions[3] = { "Buffer print", functionOption, NULL, (void *)buffer_pretty_print_last_entry, NULL, }; +// Sample Rate Menu +/** + * Menu callback to run the radio at 192 ksps. Changes the sample rate at run time. + */ +void SelectSampleRate192(void){ + ChangeSampleRate(SAMPLE_RATE_192K); +} + +/** + * Menu callback to run the radio at 176.4 ksps. Changes the sample rate at run time. + */ +void SelectSampleRate176(void){ + ChangeSampleRate(SAMPLE_RATE_176K); +} + +struct SecondaryMenuOption SampleRateOptions[2] = { + "192 ksps", functionOption, NULL, (void *)SelectSampleRate192, NULL, + "176.4 ksps", functionOption, NULL, (void *)SelectSampleRate176, NULL, +}; + // Primary menu structure -struct PrimaryMenuOption primaryMenu[8] = { +struct PrimaryMenuOption primaryMenu[9] = { "RF Options", RFSet, sizeof(RFSet)/sizeof(RFSet[0]), "CW Options", CWOptions, sizeof(CWOptions)/sizeof(CWOptions[0]), "Microphone", MicOptions, sizeof(MicOptions)/sizeof(MicOptions[0]), @@ -588,6 +608,7 @@ struct PrimaryMenuOption primaryMenu[8] = { "EEPROM", EEPROMOptions, sizeof(EEPROMOptions)/sizeof(EEPROMOptions[0]), "Calibration", CalOptions, sizeof(CalOptions)/sizeof(CalOptions[0]), "Diagnostics", DiagnosticOptions, sizeof(DiagnosticOptions)/sizeof(DiagnosticOptions[0]), + "Sample Rate", SampleRateOptions, sizeof(SampleRateOptions)/sizeof(SampleRateOptions[0]), }; /** diff --git a/code/src/PhoenixSketch/SDT.h b/code/src/PhoenixSketch/SDT.h index 5bd4a28..8d5daa8 100644 --- a/code/src/PhoenixSketch/SDT.h +++ b/code/src/PhoenixSketch/SDT.h @@ -272,6 +272,7 @@ extern struct config_t { int16_t spectrumNoiseFloor[NUMBER_OF_BANDS] = {50,50,50,50,50,50,50,50,50,50,50,50,50 }; /** Shift spectrum up/down on display */ int8_t spectrumFloorAuto = 1; /** Automatically adjust the spectrum floor */ uint32_t spectrum_zoom = 1; /** Zoom level for spectrum */ + uint8_t sampleRate = SAMPLE_RATE_192K; /** Audio sample rate selector (index into SR[]) */ int32_t CWFilterIndex = 5; /** Selects the receive CW audio filter */ int32_t CWToneIndex = 3; /** Selects the transmitted CW tone frequency */ int32_t decoderFlag = 0; /** CW decoder on/off */ @@ -382,9 +383,9 @@ struct DecimationFilter{ float32_t n_samplerate_Hz; /** Samplerate before decimation, Hz */ float32_t n_att_dB; /** Attenuation of the stopband, dB */ float32_t n_desired_BW_Hz; /** Desired max BW of the filters, Hz */ - float32_t *FIR_dec_I_state; /** Pointer to the state vector for I decimator FIR filter*/ - float32_t *FIR_dec_Q_state; /** Pointer to the state vector for Q decimator FIR filter */ - float32_t *FIR_dec_coeffs; /** Pointer to the decimator FIR filter coefficients */ + float32_t *FIR_dec_I_state = nullptr; /** Pointer to the state vector for I decimator FIR filter*/ + float32_t *FIR_dec_Q_state = nullptr; /** Pointer to the state vector for Q decimator FIR filter */ + float32_t *FIR_dec_coeffs = nullptr; /** Pointer to the decimator FIR filter coefficients */ float32_t n_fpass; /** FIR filter passband edge */ float32_t n_fstop; /** FIR filter stopband edge */ uint16_t n_dec_taps; /** Number of taps in FIR filter*/ @@ -711,7 +712,7 @@ extern AudioPlayQueue Q_out_R_Ex; extern const float32_t CWToneOffsetsHz[]; -extern uint8_t SampleRate; +extern uint8_t& SampleRate; // reference to ED.sampleRate (persisted); keeps SR[SampleRate] usage working extern VolumeFunction volumeFunction; diff --git a/code/src/PhoenixSketch/Storage.cpp b/code/src/PhoenixSketch/Storage.cpp index 5eb7f1c..e78f8cd 100644 --- a/code/src/PhoenixSketch/Storage.cpp +++ b/code/src/PhoenixSketch/Storage.cpp @@ -66,6 +66,7 @@ void SaveDataToStorage(bool savetosd){ doc["spectrumNoiseFloor"][i] = ED.spectrumNoiseFloor[i]; } doc["spectrum_zoom"] = ED.spectrum_zoom; + doc["sampleRate"] = ED.sampleRate; doc["CWFilterIndex"] = ED.CWFilterIndex; doc["CWToneIndex"] = ED.CWToneIndex; doc["decoderFlag"] = ED.decoderFlag; @@ -274,6 +275,7 @@ void RestoreDataFromStorage(void){ } } ED.spectrum_zoom = doc["spectrum_zoom"] | ED.spectrum_zoom; + ED.sampleRate = doc["sampleRate"] | ED.sampleRate; ED.CWFilterIndex = doc["CWFilterIndex"] | ED.CWFilterIndex; ED.CWToneIndex = doc["CWToneIndex"] | ED.CWToneIndex; ED.decoderFlag = doc["decoderFlag"] | ED.decoderFlag; @@ -499,6 +501,7 @@ void RestoreDataFromSDCard(void){ } } ED.spectrum_zoom = doc["spectrum_zoom"] | ED.spectrum_zoom; + ED.sampleRate = doc["sampleRate"] | ED.sampleRate; ED.CWFilterIndex = doc["CWFilterIndex"] | ED.CWFilterIndex; ED.CWToneIndex = doc["CWToneIndex"] | ED.CWToneIndex; ED.decoderFlag = doc["decoderFlag"] | ED.decoderFlag; @@ -695,6 +698,7 @@ void PrintEDToSerial(void){ } Serial.println(); Serial.print("spectrum_zoom: "); Serial.println(ED.spectrum_zoom); + Serial.print("sampleRate: "); Serial.println(ED.sampleRate); Serial.print("CWFilterIndex: "); Serial.println(ED.CWFilterIndex); Serial.print("CWToneIndex: "); Serial.println(ED.CWToneIndex); Serial.print("decoderFlag: "); Serial.println(ED.decoderFlag); diff --git a/code/test/Arduino.h b/code/test/Arduino.h index 3769cf8..dfb77a7 100644 --- a/code/test/Arduino.h +++ b/code/test/Arduino.h @@ -11,6 +11,7 @@ typedef float float32_t; #define AudioInterrupts() +#define AudioNoInterrupts() #define DMAMEM #define FASTRUN #define DEC 10 diff --git a/code/test/CAT_test.cpp b/code/test/CAT_test.cpp index 674aaf3..dd58001 100644 --- a/code/test/CAT_test.cpp +++ b/code/test/CAT_test.cpp @@ -43,7 +43,7 @@ void ShutdownTeensy(void); // External variables needed for testing extern struct config_t ED; extern const struct SR_Descriptor SR[]; -extern uint8_t SampleRate; +extern uint8_t& SampleRate; extern struct band bands[]; TEST(CAT, ChangeBandUp){ diff --git a/code/test/Calibration_test.cpp b/code/test/Calibration_test.cpp index 1f6c1be..5df4924 100644 --- a/code/test/Calibration_test.cpp +++ b/code/test/Calibration_test.cpp @@ -86,7 +86,7 @@ void SelectCalibrationMenu(void){ // Verify that we're on the calibration secondary menu EXPECT_EQ(uiSM.state_id, UISm_StateId_SECONDARY_MENU); - extern struct PrimaryMenuOption primaryMenu[8]; + extern struct PrimaryMenuOption primaryMenu[9]; extern size_t primaryMenuIndex; EXPECT_STREQ(primaryMenu[primaryMenuIndex].label, "Calibration"); } diff --git a/code/test/OpenAudio_ArduinoLibrary_mock.cpp b/code/test/OpenAudio_ArduinoLibrary_mock.cpp index 75f8c8c..95b7811 100644 --- a/code/test/OpenAudio_ArduinoLibrary_mock.cpp +++ b/code/test/OpenAudio_ArduinoLibrary_mock.cpp @@ -178,11 +178,19 @@ class FreqShiftedFeedback { // Global frequency-shifted feedback processor static FreqShiftedFeedback g_freqShiftFeedback; +// Current radio audio sample rate (Hz). Follows the global SampleRate selector so +// the simulator's mock audio tracks run-time sample-rate changes (Sample Rate menu). +static inline double MockRadioSampleRate(void) { + return (double)SR[SampleRate].rate; +} + // ============== Tone Generator ============== -// Sample rate is 192kHz +// Sample rate follows MockRadioSampleRate() (192kHz, 176.4kHz, ...). // For I/Q signal at frequency f: I = cos(2*pi*f*t), Q = -sin(2*pi*f*t) // (negative sin for USB representation where positive frequency = lower sideband) -static const double TONE_SAMPLE_RATE = 192000.0; +// The RF carrier the tones sit on is the sample rate / 4, because the receive DSP +// translates the input by +Fs/4 (FreqShiftFs4) before demodulation. Tying the +// carrier to Fs/4 keeps the injected tones at the intended audio pitch at any rate. static const double TONE_TWO_PI = 2.0 * M_PI; // Phase accumulators for continuous tone generation @@ -215,9 +223,9 @@ static size_t getToneSamplesAvailable() { auto now = std::chrono::steady_clock::now(); auto elapsed = std::chrono::duration_cast(now - toneStartTime); - // Calculate total samples that should have been generated at 192kHz - // samples = time_in_seconds * 192000 - uint64_t totalSamplesExpected = (elapsed.count() * 192000) / 1000000; + // Calculate total samples that should have been generated at the current rate + // samples = time_in_seconds * sampleRate + uint64_t totalSamplesExpected = (elapsed.count() * (uint64_t)MockRadioSampleRate()) / 1000000; // Available = expected - consumed if (totalSamplesExpected > toneSamplesConsumed) { @@ -229,18 +237,19 @@ static size_t getToneSamplesAvailable() { // Generate I/Q samples for two-tone test signal // Tones at 700Hz and 1900Hz offset from 48kHz carrier static void generateTwoToneSamples(int16_t* samplesI, int16_t* samplesQ, int numSamples) { - // Audio offsets from 48kHz + const double sampleRate = MockRadioSampleRate(); + // Audio offsets from the Fs/4 carrier const double audioFreq1 = 700.0; // Hz const double audioFreq2 = 1900.0; // Hz - // RF carrier offset - const double carrierFreq = 48000.0; // Hz + // RF carrier offset = Fs/4 (undone by the DSP FreqShiftFs4 step) + const double carrierFreq = sampleRate / 4.0; // Combined frequencies - const double freq1 = carrierFreq + audioFreq1; // 48700 Hz - const double freq2 = carrierFreq + audioFreq2; // 49900 Hz + const double freq1 = carrierFreq + audioFreq1; + const double freq2 = carrierFreq + audioFreq2; - const double phaseInc1 = TONE_TWO_PI * freq1 / TONE_SAMPLE_RATE; - const double phaseInc2 = TONE_TWO_PI * freq2 / TONE_SAMPLE_RATE; + const double phaseInc1 = TONE_TWO_PI * freq1 / sampleRate; + const double phaseInc2 = TONE_TWO_PI * freq2 / sampleRate; // Amplitude for each tone (half amplitude so sum doesn't clip) const double amplitude = 1380.0; @@ -269,8 +278,9 @@ static void generateTwoToneSamples(int16_t* samplesI, int16_t* samplesQ, int num // Generate I/Q samples for single-tone test signal // Tone at -49kHz (1kHz below -48kHz, will appear at 1kHz audio) static void generateSingleToneSamples(int16_t* samplesI, int16_t* samplesQ, int numSamples) { - const double freq = 49000.0; // Hz (48kHz + 1kHz = 49kHz) - const double phaseInc = TONE_TWO_PI * freq / TONE_SAMPLE_RATE; + const double sampleRate = MockRadioSampleRate(); + const double freq = sampleRate / 4.0 + 1000.0; // Fs/4 carrier + 1kHz -> 1kHz audio + const double phaseInc = TONE_TWO_PI * freq / sampleRate; const double amplitude = 1380.0; // Full scale single tone. 1380 = S9 tone (determined experimentally). // Noise amplitude is 1/20th of signal amplitude const double noiseAmp = amplitude / 20.0; @@ -293,8 +303,9 @@ static void generateSingleToneSamples(int16_t* samplesI, int16_t* samplesQ, int // Generate I/Q samples for RX LSB IQ calibration case // Tone at 48kHz carrier, with a small error included static void generateRXIQLSBSamples(int16_t* samplesI, int16_t* samplesQ, int numSamples) { - const double freq = 48000.0; // Hz - const double phaseInc = TONE_TWO_PI * freq / TONE_SAMPLE_RATE; + const double sampleRate = MockRadioSampleRate(); + const double freq = sampleRate / 4.0; // Fs/4 carrier + const double phaseInc = TONE_TWO_PI * freq / sampleRate; const double amplitude = 1380.0; // Full scale single tone. 1380 = S9 tone (determined experimentally). // Noise amplitude is 1/40th of signal amplitude const double noiseAmp = amplitude / 40.0; @@ -317,8 +328,9 @@ static void generateRXIQLSBSamples(int16_t* samplesI, int16_t* samplesQ, int num // Generate I/Q samples for RX USB IQ calibration case // Tone at -48kHz carrier, with a small error included static void generateRXIQUSBSamples(int16_t* samplesI, int16_t* samplesQ, int numSamples) { - const double freq = -48000.0; // Hz - const double phaseInc = TONE_TWO_PI * freq / TONE_SAMPLE_RATE; + const double sampleRate = MockRadioSampleRate(); + const double freq = -sampleRate / 4.0; // -Fs/4 carrier + const double phaseInc = TONE_TWO_PI * freq / sampleRate; const double amplitude = 1380.0; // Full scale single tone. 1380 = S9 tone (determined experimentally). // Noise amplitude is 1/40th of signal amplitude const double noiseAmp = amplitude / 40.0; @@ -454,11 +466,23 @@ bool SDL_Audio_Init(int sampleRate) { } } + // Close any devices from a previous initialization so this function can be + // called again at run time when the sample rate changes (Sample Rate menu). + if (audioOutDevice != 0) { + SDL_CloseAudioDevice(audioOutDevice); + audioOutDevice = 0; + } + if (audioInDevice != 0) { + SDL_CloseAudioDevice(audioInDevice); + audioInDevice = 0; + } + currentSampleRate = sampleRate; // ---- Initialize Audio Output (Playback) ---- - // DSP output is at 192kHz, downsample to 48kHz for playback - int outputRate = 48000; + // The DSP output is at the full radio sample rate; decimate by DOWNSAMPLE_FACTOR + // for playback (e.g. 192k->48k, 176.4k->44.1k). + int outputRate = sampleRate / DOWNSAMPLE_FACTOR; SDL_AudioSpec outDesired, outObtained; SDL_zero(outDesired); @@ -872,7 +896,7 @@ class SynchronizedOscillatorGenerator { // Calculate how many samples should have been generated since last call uint64_t elapsedUs = nowUs - lastGenerateTime; - uint64_t samplesExpected = (elapsedUs * 192000) / 1000000; + uint64_t samplesExpected = (elapsedUs * (uint64_t)MockRadioSampleRate()) / 1000000; // Generate complete blocks only uint64_t blocksToGenerate = samplesExpected / BLOCK_SIZE; @@ -934,7 +958,7 @@ class SynchronizedOscillatorGenerator { } // Update timestamp - lastGenerateTime += blocksToGenerate * (BLOCK_SIZE * 1000000 / 192000); + lastGenerateTime += blocksToGenerate * (BLOCK_SIZE * 1000000 / (uint64_t)MockRadioSampleRate()); } // Get number of blocks available for I channel diff --git a/code/test/PowerCalibration_test.cpp b/code/test/PowerCalibration_test.cpp index 85fc35d..c4ac1a6 100644 --- a/code/test/PowerCalibration_test.cpp +++ b/code/test/PowerCalibration_test.cpp @@ -175,7 +175,7 @@ void SelectRFMenu(void) { // Verify we're on the RF secondary menu EXPECT_EQ(uiSM.state_id, UISm_StateId_SECONDARY_MENU); - extern struct PrimaryMenuOption primaryMenu[8]; + extern struct PrimaryMenuOption primaryMenu[9]; extern size_t primaryMenuIndex; EXPECT_STREQ(primaryMenu[primaryMenuIndex].label, "RF Options"); } diff --git a/code/test/RFBoard_test.cpp b/code/test/RFBoard_test.cpp index a1f5ecb..ef2b77a 100644 --- a/code/test/RFBoard_test.cpp +++ b/code/test/RFBoard_test.cpp @@ -168,7 +168,7 @@ TEST(RFBoard, AttenuatorRoundingToNearestHalfdB) { extern struct config_t ED; extern Si5351 si5351; extern const struct SR_Descriptor SR[]; -extern uint8_t SampleRate; +extern uint8_t& SampleRate; extern const float32_t CWToneOffsetsHz[]; extern struct band bands[]; diff --git a/code/test/RadioSimulator_main.cpp b/code/test/RadioSimulator_main.cpp index d88732f..abd0ff2 100644 --- a/code/test/RadioSimulator_main.cpp +++ b/code/test/RadioSimulator_main.cpp @@ -148,6 +148,29 @@ static void updateAudioSourceForRFState() { // Simulated time is handled by Arduino_mock.cpp +// Track the sample rate SDL audio was configured for, so we can re-init the SDL +// audio devices when the firmware changes it at run time (Sample Rate menu). +static uint8_t previousSampleRate = 0xFF; + +/** + * Re-initialize SDL audio when the radio's sample rate changes. + * ChangeSampleRate() (firmware) reconfigures the DSP for the new rate; the SDL + * output device rate depends on it too (it decimates the DSP output by 4), so the + * simulator must re-open the SDL audio devices. Called once per loop iteration. + */ +static void updateAudioForSampleRateChange() { + if (SampleRate == previousSampleRate) { + return; + } + if (previousSampleRate != 0xFF) { + // Not the first call: the rate was changed at run time. Re-init SDL audio. + std::cout << "Sample rate changed to " << SR[SampleRate].rate + << " Hz - re-initializing SDL audio" << std::endl; + SDL_Audio_Init(SR[SampleRate].rate); + } + previousSampleRate = SampleRate; +} + // Simple keyboard event handler enum SimulatorAction { ACTION_NONE, @@ -428,10 +451,11 @@ int main(int argc, char* argv[]) { Q_out_L_Ex.setAudioChannel(2); // I channel (IQ output) Q_out_R_Ex.setAudioChannel(3); // Q channel (IQ output) - // Initialize SDL audio for demodulated audio playback - // Using 192kHz to match the DSP output sample rate (SR[SampleRate].rate) - // Most modern audio systems can handle this via software resampling - if (!SDL_Audio_Init(192000)) { + // Initialize SDL audio for demodulated audio playback. + // Use the current radio sample rate (SR[SampleRate].rate); the mock decimates + // this by 4 for the speaker output. See updateAudioForSampleRateChange() below, + // which re-initializes SDL audio when the Sample Rate menu changes the rate. + if (!SDL_Audio_Init(SR[SampleRate].rate)) { std::cerr << "Warning: SDL Audio initialization failed. Audio playback disabled." << std::endl; } else { std::cout << "SDL Audio initialized for demodulated audio playback" << std::endl; @@ -481,6 +505,9 @@ int main(int argc, char* argv[]) { // Update audio source based on RF hardware state (for calibration modes) updateAudioSourceForRFState(); + // Re-initialize SDL audio if the sample rate was changed at run time + updateAudioForSampleRateChange(); + // Update the SDL display once per frame (not on every draw call) tft.updateScreen(); } diff --git a/code/test/SignalProcessing_test.cpp b/code/test/SignalProcessing_test.cpp index 5a4f85f..b61af28 100644 --- a/code/test/SignalProcessing_test.cpp +++ b/code/test/SignalProcessing_test.cpp @@ -2012,4 +2012,273 @@ TEST(SignalProcessing, ReceiveProcessing){ for (size_t i=0; iN; i++){ if (data->I[i] > amp) amp = data->I[i]; } -}*/ \ No newline at end of file +}*/ + +// ============================================================================ +// 176.4 kHz receive-chain stage-response measurement +// ---------------------------------------------------------------------------- +// The receive DSP is designed for, and normally run at, Fs = 192 kHz (audio +// rate Fs/DF = 24 kHz after the decimate-by-8). This block measures how the +// receive stages behave when the radio is run at Fs = 176.4 kHz (audio rate +// 176400/8 = 22.05 kHz) WITHOUT changing any DSP stage, by flipping the global +// SampleRate selector and re-running the existing per-stage sweep helpers. +// +// Two classes of stage exist (see docs/RX_DSP_Chain_Parameters.md): +// * Fs-derived - coefficients are recomputed from SR[SampleRate].rate at +// InitializeFilters() time, so their corner frequencies stay +// fixed in Hz when the sample rate changes. +// * Hard-coded - frozen coefficient tables designed for a fixed rate +// (CW audio filters, CW decode FIR, EQ bands: 24 kHz audio). +// Run at 22.05 kHz instead of 24 kHz, every corner/center +// frequency scales by 176400/192000 = 0.91875. +// +// These tests are non-destructive: each saves and restores the global +// SampleRate (and rebuilds the global RXfilters at the original rate) so the +// rest of the suite is unaffected. They use EXPECT_* (non-fatal) so the +// restore at the end always runs. +// ============================================================================ + +static const float32_t RATE_RATIO_176_192 = 176400.0f / 192000.0f; // 0.91875 + +// Sweep a lowpass-style stage-response helper and return the frequency (Hz) +// at which its gain first falls to `frac` of the passband (fstart) value, using +// linear interpolation between sweep points. Returns -1 if the crossing is +// never reached within [fstart, fstop]. +static float32_t Find176kGainCrossing(void (*resp)(float32_t, DataBlock *, float32_t *), + float32_t fstart, float32_t fstop, + float32_t fstep, float32_t frac){ + DataBlock *dummy = nullptr; + float32_t g0; + resp(fstart, dummy, &g0); // passband reference gain + float32_t target = frac * g0; + float32_t prev_f = fstart, prev_g = g0; + for (float32_t f = fstart + fstep; f <= fstop; f += fstep){ + float32_t g; + resp(f, dummy, &g); + if (g <= target){ + return prev_f + (target - prev_g) * (f - prev_f) / (g - prev_g); + } + prev_f = f; + prev_g = g; + } + return -1.0f; +} + +// -6 dB (half-amplitude) upper cutoff of a CW audio filter (hard-coded @24kHz). +static float32_t CW176kUpperCutoffHz(int bf){ + ED.CWFilterIndex = bf; + return Find176kGainCrossing(CW_filter_tone, 200.0f, 3600.0f, 10.0f, 0.5f); +} + +// -6 dB (half-amplitude) corner of the AM audio lowpass IIR (Fs-derived). +static float32_t AM176kCornerHz(){ + return Find176kGainCrossing(AM_IIR_filter_tone, 200.0f, 6000.0f, 20.0f, 0.5f); +} + +// Peak (center) frequency of an EQ band, found by argmax of a fine sweep +// (hard-coded @24kHz). +static float32_t EQ176kPeakHz(int bf, float32_t fmin, float32_t fmax, float32_t fstep){ + DataBlock *dummy = nullptr; + float32_t best_f = fmin, best_g = -1.0f; + for (float32_t f = fmin; f <= fmax; f += fstep){ + float32_t g; + EQ_filter_tone(f, (uint16_t)bf, dummy, &g); + if (g > best_g){ best_g = g; best_f = f; } + } + return best_f; +} + +// Measure a characteristic frequency of three representative stages at both +// 192 kHz and 176.4 kHz and confirm the expected behaviour: hard-coded tables +// scale their corner/center frequency by 176400/192000, while the Fs-derived +// stage keeps its corner fixed in Hz. Also writes a summary CSV for the record. +TEST(ReceiveChain176k, HardCodedStagesShiftFsDerivedStay){ + uint8_t saved_rate = SampleRate; + + // --- CW audio filter index 4 ("2.0 kHz"): HARD-CODED (designed @ 24 kHz) -- + SampleRate = SAMPLE_RATE_192K; + float32_t cw_192 = CW176kUpperCutoffHz(4); + SampleRate = SAMPLE_RATE_176K; + float32_t cw_176 = CW176kUpperCutoffHz(4); + + // --- Receive EQ band 13 (fc = 4000 Hz): HARD-CODED (designed @ 24 kHz) ---- + SampleRate = SAMPLE_RATE_192K; + float32_t eq_192 = EQ176kPeakHz(13, 3000.0f, 4600.0f, 5.0f); + SampleRate = SAMPLE_RATE_176K; + float32_t eq_176 = EQ176kPeakHz(13, 3000.0f, 4600.0f, 5.0f); + + // --- AM audio lowpass IIR: Fs-DERIVED (control, should not move in Hz) ---- + SampleRate = SAMPLE_RATE_192K; + float32_t am_192 = AM176kCornerHz(); + SampleRate = SAMPLE_RATE_176K; + float32_t am_176 = AM176kCornerHz(); + + // Restore global state before any assertion can abort the test. + SampleRate = saved_rate; + InitializeFilters(SPECTRUM_ZOOM_1, &RXfilters); + + // Record the measurements. + FILE *f = fopen("176k_stage_shift_summary.txt", "w"); + if (f != nullptr){ + fprintf(f, "stage,type,f_192k_Hz,f_176k_Hz,measured_ratio,expected_ratio\n"); + fprintf(f, "CW_audio_filter_2k0_upper_cutoff,hardcoded,%.1f,%.1f,%.4f,%.4f\n", + cw_192, cw_176, cw_176 / cw_192, RATE_RATIO_176_192); + fprintf(f, "EQ_band13_4000_peak,hardcoded,%.1f,%.1f,%.4f,%.4f\n", + eq_192, eq_176, eq_176 / eq_192, RATE_RATIO_176_192); + fprintf(f, "AM_audio_lowpass_corner,fs_derived,%.1f,%.1f,%.4f,%.4f\n", + am_192, am_176, am_176 / am_192, 1.0f); + fclose(f); + } + + // Sanity: every sweep found its crossing/peak. + ASSERT_GT(cw_192, 0.0f); ASSERT_GT(cw_176, 0.0f); + ASSERT_GT(eq_192, 0.0f); ASSERT_GT(eq_176, 0.0f); + ASSERT_GT(am_192, 0.0f); ASSERT_GT(am_176, 0.0f); + + // Hard-coded tables: characteristic frequency scales with the rate ratio. + EXPECT_NEAR(cw_176 / cw_192, RATE_RATIO_176_192, 0.03) + << "CW audio filter cutoff should scale by 176400/192000 (table designed @ 24 kHz)"; + EXPECT_NEAR(eq_176 / eq_192, RATE_RATIO_176_192, 0.03) + << "EQ band center should scale by 176400/192000 (table designed @ 24 kHz)"; + + // Fs-derived stage: corner stays fixed in Hz (ratio ~ 1). + EXPECT_NEAR(am_176 / am_192, 1.0f, 0.03) + << "AM audio lowpass corner should stay constant in Hz (recomputed from Fs)"; +} + +// Dump full stage-response sweeps at 176.4 kHz to "176k_*.txt" files, in the +// same format the existing analysis notebook reads for the 192 kHz case. Load +// these alongside the 192 kHz files (build/CWFilter_band_*.txt, +// ReceiveEQ_band_*.txt, AudioIIRPassband.txt) to overlay the two rates. +TEST(ReceiveChain176k, StageResponseDump){ + uint8_t saved_rate = SampleRate; + SampleRate = SAMPLE_RATE_176K; + + DataBlock *dout = nullptr; + char strbuf[64]; + + // CW audio filters (hard-coded @ 24 kHz): 5 selectable bandwidths. + { + float32_t fmin = 100.0f, fmax = 6000.0f; + uint32_t Npoints = 201; + float32_t fstep = (fmax - fmin) / (float32_t)Npoints; + float32_t gain[Npoints], freq[Npoints]; + for (uint16_t bf = 0; bf < 5; bf++){ + ED.CWFilterIndex = bf; + for (uint32_t i = 0; i < Npoints; i++){ + freq[i] = fmin + (float32_t)i * fstep; + CW_filter_tone(freq[i], dout, &gain[i]); + } + sprintf(strbuf, "176k_CWFilter_band_%d.txt", bf); + WriteIQFile(freq, gain, strbuf, Npoints); + } + } + + // Receive EQ bands (hard-coded @ 24 kHz): 14 graphic-EQ cells. + { + float32_t fmin = 100.0f, fmax = 8000.0f; + uint32_t Npoints = 401; + float32_t fstep = (fmax - fmin) / (float32_t)Npoints; + float32_t gain[Npoints], freq[Npoints]; + for (uint16_t bf = 0; bf < 14; bf++){ + for (uint32_t i = 0; i < Npoints; i++){ + freq[i] = fmin + (float32_t)i * fstep; + EQ_filter_tone(freq[i], bf, dout, &gain[i]); + } + sprintf(strbuf, "176k_ReceiveEQ_band_%d.txt", bf); + WriteIQFile(freq, gain, strbuf, Npoints); + } + } + + // AM audio lowpass IIR (Fs-derived control): should match its 192 kHz shape. + { + float32_t fmin = 50.0f, fmax = 12000.0f; + uint32_t Npoints = 101; + float32_t fstep = (fmax - fmin) / (float32_t)Npoints; + float32_t gain[Npoints], freq[Npoints]; + for (uint32_t i = 0; i < Npoints; i++){ + freq[i] = fmin + (float32_t)i * fstep; + AM_IIR_filter_tone(freq[i], dout, &gain[i]); + } + WriteIQFile(freq, gain, "176k_AudioIIRPassband.txt", Npoints); + } + + // Restore global state. + SampleRate = saved_rate; + InitializeFilters(SPECTRUM_ZOOM_1, &RXfilters); +} + +// Changing the sample rate at run time changes the Fs/4 IF offset, which would +// move the received (dial) frequency unless ChangeSampleRate() compensates the +// stored center frequency. Verify the dial frequency is held constant and that +// the center frequency is shifted by the change in Fs/4. +TEST(ReceiveChain176k, DialFrequencyPreservedAcrossRateChange){ + uint8_t saved_rate = SampleRate; + int64_t savedA = ED.centerFreq_Hz[0]; + int64_t savedB = ED.centerFreq_Hz[1]; + float32_t savedFine = ED.fineTuneFreq_Hz[ED.activeVFO]; + + // Start at 192 kHz with a known center frequency (RX VFO / "LO" = 7198 kHz). + SampleRate = SAMPLE_RATE_192K; + ED.fineTuneFreq_Hz[ED.activeVFO] = 0.0f; + ED.centerFreq_Hz[0] = 7198000; + ED.centerFreq_Hz[1] = 7198000; + // Dial (received) frequency = centerFreq - fineTune - Fs/4 = 7198000 - 48000 + int64_t dial_192 = GetTXRXFreq(ED.activeVFO); + EXPECT_EQ(dial_192, 7150000); + + // Switch to 176.4 kHz. Fs/4 drops 48000 -> 44100 (delta -3900), so the center + // frequency should move by -3900 to keep the dial frequency fixed. + ChangeSampleRate(SAMPLE_RATE_176K); + EXPECT_EQ((int)SampleRate, (int)SAMPLE_RATE_176K); + EXPECT_EQ(ED.centerFreq_Hz[ED.activeVFO], (int64_t)7194100); + EXPECT_EQ(GetTXRXFreq(ED.activeVFO), dial_192); // dial frequency preserved + + // Switch back to 192 kHz: center returns to the original value. + ChangeSampleRate(SAMPLE_RATE_192K); + EXPECT_EQ(ED.centerFreq_Hz[ED.activeVFO], (int64_t)7198000); + EXPECT_EQ(GetTXRXFreq(ED.activeVFO), dial_192); + + // Restore global state. + ED.centerFreq_Hz[0] = savedA; + ED.centerFreq_Hz[1] = savedB; + ED.fineTuneFreq_Hz[ED.activeVFO] = savedFine; + SampleRate = saved_rate; + InitializeFilters(SPECTRUM_ZOOM_1, &RXfilters); +} +// The zoom-FFT spectrum trace must place a tone at the same bin the display axis +// (frequency_to_bin, the test mirror of FreqToBin) predicts, at both sample rates. +// A tone injected at a known offset from the display center should peak at that bin. +TEST(ReceiveChain176k, ZoomFFTToneLandsWhereAxisPredicts){ + uint8_t saved_rate = SampleRate; + for (int which = 0; which < 2; which++){ + SampleRate = (which == 0) ? SAMPLE_RATE_192K : SAMPLE_RATE_176K; + uint32_t fs = SR[SampleRate].rate; + uint32_t zoom = SPECTRUM_ZOOM_16; // spectrum_zoom = 4 -> 16x + float32_t Delta = 2000.0; // tone 2 kHz above display center + // ADC-baseband tone so that after FreqShiftFs4 (+fs/4) it sits at +Delta + float32_t tone_Hz = Delta - (float32_t)fs/4.0; + + uint32_t Nsamples = 2048*4; + float I[Nsamples], Q[Nsamples]; + CreateIQTone(I, Q, Nsamples, fs, tone_Hz); + + ReceiveFilterConfig rf; + InitializeFilters(zoom, &rf); + ZoomFFTPrep(zoom, &rf); + + DataBlock data; data.N = 2048; data.sampleRate_Hz = fs; + bool val = false; + for (int b = 0; b < 4; b++){ + data.I = &I[b*2048]; data.Q = &Q[b*2048]; data.N = 2048; + val = ZoomFFTExe(&data, zoom, &rf); + } + EXPECT_TRUE(val); + int peak = 0; float32_t pmax = -1e30; + for (int i = 0; i < 512; i++){ if (psdnew[i] > pmax){ pmax = psdnew[i]; peak = i; } } + int expected = frequency_to_bin(Delta, 512, fs/(1<" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cw_labels = ['0.8 kHz', '1.0 kHz', '1.3 kHz', '1.8 kHz', '2.0 kHz']\n", + "colors = plt.cm.viridis(np.linspace(0, 0.85, 5))\n", + "\n", + "plt.figure(figsize=(11, 6))\n", + "print(f\"{'filter':>8} {'192k -6dB':>10} {'176k -6dB':>10} {'ratio':>7} (expected {RATE_RATIO:.4f})\")\n", + "for bf in range(5):\n", + " f0, g0 = load_sweep('build/CWFilter_band_%d.txt' % bf)\n", + " f1, g1 = load_sweep('build/176k_CWFilter_band_%d.txt' % bf)\n", + " plt.plot(f0, 20*np.log10(g0), '-', color=colors[bf], label='%s @192k' % cw_labels[bf])\n", + " plt.plot(f1, 20*np.log10(g1), '--', color=colors[bf], label='%s @176.4k' % cw_labels[bf])\n", + " c0, c1 = minus6dB_cutoff(f0, g0), minus6dB_cutoff(f1, g1)\n", + " print(f\"{cw_labels[bf]:>8} {c0:10.1f} {c1:10.1f} {c1/c0:7.4f}\")\n", + "\n", + "plt.ylim(-60, 5)\n", + "plt.xlim(0, 3500)\n", + "plt.grid(True, alpha=0.4)\n", + "plt.legend(fontsize=8, ncol=2)\n", + "plt.xlabel('Frequency [Hz]')\n", + "plt.ylabel('Gain [dB]')\n", + "plt.title('CW audio filters: 192 kHz (solid) vs 176.4 kHz (dashed)')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "c086c2f8", + "metadata": {}, + "source": [ + "## Receive EQ bands (hard-coded @ 24 kHz)\n", + "\n", + "All 14 graphic-EQ cells. Each band center shifts down by the same ~8%." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "810bbe3c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "band 192k peak 176k peak ratio\n", + " 0 198.5 178.8 0.9008\n", + " 1 257.6 237.9 0.9235\n", + " 2 316.7 297.0 0.9378\n", + " 3 395.5 375.8 0.9502\n", + " 4 494.0 454.6 0.9202\n", + " 5 631.9 572.8 0.9065\n", + " 6 789.5 730.4 0.9251\n", + " 7 1006.2 927.4 0.9217\n", + " 8 1242.6 1163.8 0.9366\n", + " 9 1597.3 1459.4 0.9137\n", + " 10 1991.3 1833.7 0.9209\n", + " 11 2503.5 2306.5 0.9213\n", + " 12 3153.6 2897.5 0.9188\n", + " 13 4000.7 3646.1 0.9114\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_1024744/2527797174.py:7: RuntimeWarning: divide by zero encountered in log10\n", + " plt.semilogx(f0, 20*np.log10(g0), '-', color=colors[bf])\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(11, 6))\n", + "colors = plt.cm.turbo(np.linspace(0, 1, 14))\n", + "print(f\"{'band':>4} {'192k peak':>10} {'176k peak':>10} {'ratio':>7}\")\n", + "for bf in range(14):\n", + " f0, g0 = load_sweep('build/ReceiveEQ_band_%d.txt' % bf)\n", + " f1, g1 = load_sweep('build/176k_ReceiveEQ_band_%d.txt' % bf)\n", + " plt.semilogx(f0, 20*np.log10(g0), '-', color=colors[bf])\n", + " plt.semilogx(f1, 20*np.log10(g1), '--', color=colors[bf])\n", + " p0, p1 = peak_freq(f0, g0), peak_freq(f1, g1)\n", + " print(f\"{bf:>4} {p0:10.1f} {p1:10.1f} {p1/p0:7.4f}\")\n", + "\n", + "plt.ylim(-40, 3)\n", + "plt.xlim(100, 8000)\n", + "plt.grid(True, which='both', alpha=0.3)\n", + "plt.xlabel('Frequency [Hz]')\n", + "plt.ylabel('Gain [dB]')\n", + "plt.title('Receive EQ bands: 192 kHz (solid) vs 176.4 kHz (dashed)')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "fd065d46", + "metadata": {}, + "source": [ + "### EQ top band zoom\n", + "\n", + "Zoom on the highest band to see the center-frequency shift clearly." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "31eff58e", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_1024744/1314273394.py:7: RuntimeWarning: divide by zero encountered in log10\n", + " plt.plot(f0, 20*np.log10(g0), 'k-', label='192 kHz (peak %.0f Hz)' % p0)\n" + ] + }, + { + "data": { + "image/png": "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QkJCrJIlS1qtW7e2du3alfp1px1XXJZlWdd0jUZEREREROQSst09GSIiIiIiYpaKDBERERERyVQqMkREREREJFOpyBARERERkUylIkNERERERDKVigwREREREclUKjJERERERCRTqcgQEREREZFMpSJDRESytY4dO+JyuXC5XKxYsSJTf/a6detSf/aDDz6YqT9bRCSQqcgQEQkwF75pvrDt37/fdDTHatasGTExMTRv3jz1scsVHR07dkx3wdCgQQNiYmJ49NFHMympiEj2EGw6gIiIZFyzZs1YsGBBmseKFi160fOSk5MJDQ3NqliOFRYWRmRkZKb/3NDQUCIjI8mdOzdJSUmZ/vNFRAKVrmSIiASglDfNFza3202jRo3o1asX/fr1IyIigvvuuw+A3bt3c//995MvXz6KFy9O+/btOXHiROrPO3v2LE8++ST58uWjRIkSTJw4kUaNGvHcc8+lPudSZ/4LFizIW2+9lfr54cOHadOmDYUKFaJIkSK0atWKgwcPpn495SrBhAkTKFGiBEWKFKFnz554PJ7U5yQlJfH8889TpkwZwsLCqFKlCvPmzcOyLCpXrsyECRPSZNi5cydBQUH88ssvf/8/9i8OHjx4yatGjRo1yvTXEhHJTlRkiIhkM2+//TbBwcF88803zJ49m5iYGO666y7q1KnD999/z+rVqzl69GiaIT4DBw5k7dq1LF++nDVr1rBu3Tq2bNmSodc9d+4cjRs3Jl++fHz11Vd8/fXX5MuXj2bNmpGcnJz6vLVr1/LLL7+wdu1a3n77bd566600hcqTTz7J0qVLmTp1Kj/99BOzZs0iX758uFwuOnXqdNEVnPnz53PnnXdSqVKla/sPu4IyZcoQExOT2n744QeKFClCw4YNM/21RESyEw2XEhEJQB9//DH58uVL/bx58+a8//77AFSuXJlx48alfm3YsGHccsstvPbaa6mPzZ8/nzJlyrB3715KlizJvHnzWLhwYeqVj7fffpvSpUtnKNPSpUsJCgpi7ty5uFwuABYsWEDBggVZt24dTZo0AaBQoUJMnz4dt9tNtWrVaNGiBV988QVdu3Zl7969vPfee3z22Wfce++9AFSsWDH1NZ566imGDRvGpk2buO222/B4PCxatIjx48dnKGuKtm3b4na70zyWlJREixYtAHC73anDrBITE3nwwQeJiopixIgR1/R6IiI5hYoMEZEA1LhxY2bOnJn6ed68eVO369Wrl+a5W7ZsYe3atWmKkhS//PIL58+fJzk5maioqNTHCxcuTNWqVTOUacuWLezfv5/8+fOneTwxMTHNUKabbropzRv7EiVKsGPHDgC2bduG2+3mrrvuuuRrlChRghYtWjB//nxuu+02Pv74YxITE3nkkUcylDXFpEmTUouZFIMGDcLn81303M6dO3P69Gk+++wzgoI0EEBE5EpUZIiIBKC8efNSuXLly37tQn6/nwceeICxY8de9NwSJUqwb9++dL2my+XCsqw0j114L4Xf76du3bosXrz4ou+98Kb0kJCQi36u3+8HIHfu3FfN0aVLF9q3b8+kSZNYsGABbdq0IU+ePOn6N/xVZGTkRf+P+fPnJy4uLs1jo0aNYvXq1WzatOmiIkpERC6mIkNEJJu75ZZbWLZsGeXLlyc4+OLDfuXKlQkJCWHjxo2ULVsWgNjYWPbu3ZvmikLRokWJiYlJ/Xzfvn2cO3cuzev83//9H8WKFaNAgQLXlLVmzZr4/X7Wr19/0RWGFPfffz958+Zl5syZfPrpp3z11VfX9FrptWzZMkaOHMmnn356Xe77EBHJjnS9V0Qkm+vZsyenTp2ibdu2bNq0iV9//ZU1a9bQqVMnfD4f+fLlo3PnzgwcOJAvvviCnTt30rFjx4uGBN19991Mnz6drVu38v3339OtW7c0VyXatWtHREQErVq14r///S8HDhxg/fr19OnTh0OHDqUra/ny5enQoQOdOnVixYoVHDhwgHXr1vHee++lPsftdtOxY0cGDx5M5cqV0wzzymw7d+7kySefZNCgQdx0000cOXKEI0eOcOrUqev2miIi2YGKDBGRbK5kyZJ88803+Hw+mjZtSo0aNejTpw/h4eGphcT48eNp2LAh//znP7n33nv5xz/+Qd26ddP8nIkTJ1KmTBkaNmzI448/zoABA9IMU8qTJw9fffUVZcuWpXXr1lSvXp1OnTpx/vz5DF3ZmDlzJg8//DA9evSgWrVqdO3albNnz6Z5TufOnUlOTqZTp05/43/m6r7//nvOnTvHqFGjKFGiRGpr3br1dX1dEZFA57L+OsBWREQEaNSoEXXq1GHy5Mmmo1zkm2++oVGjRhw6dIjixYtf8bkdO3YkLi7ukqt7Z5aseA0RkUCiKxkiIhIwkpKS2L9/Py+99BKPPvroVQuMFClT/n788ceZmue///0v+fLlu+TN7iIiOZlu/BYRkYCxZMkSOnfuTJ06dXjnnXfS9T3jxo1j6NChgD2bVmaqV68e27ZtA7jkFMEiIjmVhkuJiIiIiEim0nApERERERHJVCoyREREREQkU6nIEBERERGRTKUiQ0REREREMpWKDBERERERyVQqMkREREREJFOpyBARERERkUylIkNERERERDLV/wNktvr5nC9D4QAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bf = 13\n", + "f0, g0 = load_sweep('build/ReceiveEQ_band_%d.txt' % bf)\n", + "f1, g1 = load_sweep('build/176k_ReceiveEQ_band_%d.txt' % bf)\n", + "p0, p1 = peak_freq(f0, g0), peak_freq(f1, g1)\n", + "\n", + "plt.figure(figsize=(9, 5))\n", + "plt.plot(f0, 20*np.log10(g0), 'k-', label='192 kHz (peak %.0f Hz)' % p0)\n", + "plt.plot(f1, 20*np.log10(g1), 'r--', label='176.4 kHz (peak %.0f Hz)' % p1)\n", + "plt.axvline(p0, color='k', ls=':', alpha=0.5)\n", + "plt.axvline(p1, color='r', ls=':', alpha=0.5)\n", + "plt.xlim(2500, 5000)\n", + "plt.ylim(-12, 2)\n", + "plt.grid(True, alpha=0.4)\n", + "plt.legend()\n", + "plt.xlabel('Frequency [Hz]')\n", + "plt.ylabel('Gain [dB]')\n", + "plt.title('EQ band 13: measured ratio %.4f vs expected %.4f' % (p1/p0, RATE_RATIO))\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "cf13f12f", + "metadata": {}, + "source": [ + "## AM audio lowpass IIR (Fs-derived control)\n", + "\n", + "This stage recomputes its coefficients from the sample rate, so the two curves should lie almost on top of each other — the corner stays fixed in Hz." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "cc49c429", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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CYGNG2HFCmjb1uxUNo0aNWLMmDEMHz6cXr16UbNmTWrWrGl2LPkXnGILgoiIiEihVrkyDBuWeX/gQEhLMzfPPwwbNoxmzZqRnJxMy5YtSUpKMjuS/AtqEEREREScwZAhEBEBn30G7u5mp8nGxcWFBQsWUKlSJY4fP07Hjh11xW0npgZBRERExBl4esKSJeCgu+/4+vqycuVKPD09+fzzzxk/frzZkeQOqUEQERERcUZHj2ZeSM2B1KhRg+nTpwMwcuRI9uzZY3IiuRNqEEREREScTUwMVKsGs2aZnSSHLl260K5dO9LT0+nQoQN///232ZHkNqlBEBEREXE2Pj5w9SoMHQqnT5udJhuLxcL06dMpX748x44do3///mZHktukBkFERETE2bz8MtSqBefOZR687GB8fX1ZsGABFouFWbNm8emnn5odSW6DGgQRERERZ+PmBjNmZN6fPx/27TM3z3U0aNCAAQMGAPDCCy+QmJhociLJLTUIIiIiIs6odm2IjMy836+fQ11hOcvYsWOpXr06Z86coVu3bhgOmFFyUoMgIiIi4qzGjYOiRWHnTvj4Y7PT5GC1WlmyZAlWq5V169YxI2urhzg0NQgiIiIizqp8+cxjELy9M49HcED3338/b731FgADBgzghx9+MDmR3IoaBBERERFnNnBg5jURoqLMTnJD0dHRNG7cmOTkZDp27EhaWprZkeQm1CCIiIiIOLOiRcHf3+wUN+Xi4sLcuXMpWbIkcXFxTJ482exIchNqEEREREQKik2bMi+i5oACAwN5++23ARg9ejTHjh0zOZHciBoEERERkYLghx+gYUN4/XWIizM7zXV16tSJp556iuTkZHr27KmzGjkoNQgiIiIiBcF990FERObpTvv3d8jTnlosFmbOnImnpyebNm1i/vz5ZkeS61CDICIiIlJQTJgAnp6wdSt88onZaa6rcuXKjBo1Csg8q9Eff/xhbiDJQQ2CiIiISEERHAyDBgFgGTIEUlNNDnR9/fv358EHH+Ts2bO88sorZseRf1CDICIiIlKQDB4M/v5Yfv4Z71WrzE5zXe7u7syaNQsXFxeWLFnCunXrzI4k11CDICIiIlKQeHtnNglA8ffec9itCA899BB9+vQB4KWXXuLvv/82OZFkUYMgIiIiUtD06IFRvz7nBg0CV1ez09zQmDFjqFChAr/88gsjR440O478lxoEERERkYKmaFGMTZu49OyzDt0geHt7M336dACmTp1KnIOenrWwUYMgIiIiIqZp2rQpbdu2JSMjg/79++vaCA5ADYKIiIhIQZWSAu++C48/DmlpZqe5obfeegtPT0+2bt3Kf/7zH7PjFHpqEEREREQKKEt6OpaYGNixAxYtMjvODQUHB9tOdzp48GDSHLiZKQzUIIiIiIgUUEbRohj/vS4CY8c69FaEoUOHUrp0aQ4fPsysWbPMjlOoqUEQERERKch69IDSpeHnn2HxYrPT3FCxYsVsV1geOXIk58+fNzdQIaYGQURERKQg8/KyXReBsWPh6lVz89xEVFQUVapU4cyZM7z55ptmxym01CCIiIiIFHQvvZS5FeGnnxx6K4K7uztvvfUWAFOmTOHUqVMmJyqc1CCIiIiIFHReXnDtsQgZGebmuYnmzZtTr149kpOTGT58uNlxCiU1CCIiIiKFwcsvQ8eOsHw5uDjuR0CLxcKkSZMAWLhwoS6eZgLH/a9DRERERPKOlxcsXAi1apmd5JbCwsLo0KEDhmEwcOBAXTzNztQgiIiIiBRGDv6hOyYmBqvVyubNm/n888/NjlOoqEEQERERKUxOnco8aLljR7OT3FSFChXo168fAK+88grJycnmBipE1CCIiIiIFCaXL8PMmbB0KRw7Znaam3r11VcJCAjg6NGjTJgwwew4hYYaBBEREZHCpEoVaNo0cxejd94xO81NFStWjGnTpgEwfvx4Dh8+bHKiwkENgoiIiEhh079/5s+5cyEpydwst9CyZUuaNm1KamoqPXv21AHLdqAGQURERKSwefJJqF4dLl2CWbPMTnNTFouF9957jyJFirBlyxYWLFhgdqQ788UXcOKE2SlyRQ2CiIiISGFjscB/DwDm//4P0tJMjXMrFStWZNSoUQAMGDCAM2fOmBvodiUnZx4UfvfdEBtrdppbUoMgIiIiUhi1bw9ly8Kvv8LHH5ud5pZeeeUVHnjgAf766y8GZV0V2lksXw5//QXlysFDD5md5pbUIIiIiIgURlYrDBsGr70G9eubneaW3N3def/997FYLMybN48tW7aYHSn33nsv8+dLL4Gbm7lZckENgoiIiEhh1bcvjB0LAQFmJ8mVOnXq0KNHDwB69uxJSkqKyYlyYc8e2LsXPDzghRfMTpMrahBERERExGmMHz+e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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "f0, g0 = load_sweep('build/AudioIIRPassband.txt')\n", + "f1, g1 = load_sweep('build/176k_AudioIIRPassband.txt')\n", + "c0, c1 = minus6dB_cutoff(f0, g0), minus6dB_cutoff(f1, g1)\n", + "\n", + "plt.figure(figsize=(9, 5))\n", + "plt.plot(f0, 20*np.log10(g0), 'k-', label='192 kHz (-6dB %.0f Hz)' % c0)\n", + "plt.plot(f1, 20*np.log10(g1), 'r--', label='176.4 kHz (-6dB %.0f Hz)' % c1)\n", + "plt.ylim(-60, 5)\n", + "plt.grid(True, alpha=0.4)\n", + "plt.legend()\n", + "plt.xlabel('Frequency [Hz]')\n", + "plt.ylabel('Gain [dB]')\n", + "plt.title('AM audio lowpass (Fs-derived): corners nearly coincide, ratio %.4f' % (c1/c0))\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "070924d3", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "The `176k_stage_shift_summary.txt` file written by the test, plus a bar chart contrasting the measured shift against the two reference ratios (0.91875 for hard-coded, 1.0 for Fs-derived)." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "815885a4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[('CW_audio_filter_2k0_upper_cutoff', 'hardcoded', 2064.6, 1896.9, 0.9187, 0.9187)\n", + " ('EQ_band13_4000_peak', 'hardcoded', 4000. , 3675. , 0.9187, 0.9187)\n", + " ('AM_audio_lowpass_corner', 'fs_derived', 3094.3, 3076.2, 0.9941, 1. )]\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3kAAAHpCAYAAAA/CfW/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAACyd0lEQVR4nOzdd1QU19sH8O/Sm4AUKYoUI5aIBkGl2DUg9l5ij7Ek5oclxhKNXVEsMRohFuw9tsQuUbGBokRs2AWxQBRRUFDqff/gZeLKLu4iBCXfzzlzjnPnmZlntoz7MHfuyIQQAkRERERERFQmaJR2AkRERERERFR8WOQRERERERGVISzyiIiIiIiIyhAWeURERERERGUIizwiIiIiIqIyhEUeERERERFRGcIij4iIiIiIqAxhkUdERERERFSGsMgjIiIiIiIqQ1jkEZFCZ8+eRadOnVC5cmXo6urCysoKnp6e+O677+TigoKCsGbNmtJJUk3Jycno2bMnKlSoAJlMho4dO5Z2Sv85AwYMgJGRkUqxMpkMU6dOlWs7cuQI3N3dYWhoCJlMht27d2PTpk1YtGjRe+e2bt069OzZE9WqVYOGhgYcHBwUxg0YMAAymUzpdObMGbn4rKwsLFy4EC4uLtDX14epqSm8vLwQHh6uVn6vXr2Cs7MzZDIZ5s+f/874uLg4lWLDwsIgk8mwfft2hcu//fZbyGQytXItSQ4ODhgwYECR1p09ezZ2795doD3/NQgLC3uv3NT16NEjTJ06FdHR0cW+7UWLFqFz585wdHSETCZD06ZNlcYeOnQI3t7e0NfXh4mJCdq1a4erV6/KxaSmpmLWrFlo2rQprK2tYWRkBBcXF8ydOxevX79+Zz5l9fNI9KHSKu0EiOjDs2/fPrRv3x5NmzZFYGAgbGxskJCQgPPnz2PLli1YsGCBFBsUFAQLC4si/+j6N82YMQO7du3CqlWrUKVKFZiZmZV2SlSIiIgIVKpUSZoXQqB79+5wdnbGH3/8AUNDQ1SrVg19+/bFlStXMHLkyPfa3/r165GYmIj69esjNzcXWVlZCuN+/PFHDBs2rEB7u3btoKuri3r16kltOTk56NSpE06dOoWxY8fCy8sLaWlpiIqKQlpamlr5/fjjj2qvQ/Jmz56Nrl27FvgDT926dREREYGaNWv+q/k8evQI06ZNg4ODAz777LNi3favv/4KQ0NDNG/eHHv27FEa9/vvv6NTp07o0KEDduzYgZSUFEybNg2NGjXCuXPnUKVKFQBAfHw8Fi1ahL59+2L06NEwMjLCyZMnMXXqVISGhiI0NJTFF9EHhEUeERUQGBgIR0dHHDp0CFpa/5wmevbsicDAwFLM7P1cuXIFVapUQe/evQuNy8nJQXZ2NnR1df+lzEgRDw8PuflHjx4hOTkZnTp1QosWLYp9f4cOHYKGRl4Hl7Zt2+LKlSsK46pUqSL98M13/PhxJCUlYdKkSdDU1JTalyxZggMHDuD06dNyx9OmTRu1couMjMSSJUuwceNGdOvWTa11P3Tp6ekwMDAo1RyMjY0LfN4+djExMdLnuVatWkrjxo0bBxcXF+zcuVMq0ry8vODs7IzJkydj48aNAABHR0fExcXB0NBQWrd58+YwNDTE999/j9OnT6Nhw4YleEREpA521ySiAp4+fQoLCwu5Ai9f/o8GIK/b1NWrV3H8+HGpq1p+F7fXr1/ju+++w2effQYTExOYmZnB09MTv//+e4FtPn/+HIMGDYKZmRmMjIzQpk0b3L17V2F3vVu3buGLL75AhQoVoKurixo1amDp0qWFHk9+N6E///wT165dk3INCwuTlgUGBmLmzJlwdHSErq4ujh07BgA4f/482rdvDzMzM+jp6cHV1RXbtm0rsI8zZ87A29sbenp6sLW1xYQJE7BixQrIZDLExcVJcYqOKf+1fPtqaGJiIoYOHYpKlSpBR0cHjo6OmDZtGrKzswsc2/z587Fw4UI4OjrCyMgInp6eBboNAnndcNu1awdzc3Po6emhSpUq0hWwkydPQiaTYfPmzQXWW7duHWQyGc6dO6f0dU5PT8eYMWPg6OgIPT09mJmZwd3dXeH2bt++jdatW8PIyAh2dnb47rvvkJGRIRfz5ms1depU6areuHHjpM9a06ZNsW/fPty7d0+uy2RRvPnZVldISAhkMhm+/PJLufaff/4ZjRs3fq8CIjMzE19++SWGDx8Od3f3Im8HyOs62r9/fxgZGWHv3r1F2saaNWuUdlUtrEsgADRt2hS1atXCiRMn4OXlBQMDA+k1S01NlT4/Ojo6qFixIkaOHPnOq5eqnmtkMhnS0tKwdu3aAvm+3V1z0aJFkMlkuH37doH9jRs3Djo6OkhKSpLa/vzzT7Ro0QLGxsYwMDCAt7c3jhw5UmjeYWFh0lXfgQMHSjm9eX74448/4OnpCQMDA5QrVw6ff/45IiIiCt1uPlU+z0+fPsWNGzfg5+cn972xt7dHrVq1sHv3buTk5AAADA0N5Qq8fPXr1wcA3L9/X6W83lTan0eisoxFHhEV4OnpibNnz8Lf3x9nz55V2m1t165dcHJygqurKyIiIhAREYFdu3YBADIyMpCcnIwxY8Zg9+7d2Lx5Mxo2bIjOnTtj3bp10jZyc3PRrl07bNq0CePGjcOuXbvQoEEDtGrVqsD+YmJiUK9ePVy5cgULFizA3r170aZNG/j7+2PatGlKj8fGxgYRERFwdXWFk5OTlGvdunWlmMWLF+Po0aOYP38+Dhw4gOrVq+PYsWPw9vbG8+fP8euvv+L333/HZ599hh49esjdhxgTE4MWLVrg+fPnWLNmDX799VdcuHABM2fOVPell+R3Gzx06BAmT56MAwcOYNCgQQgICMDgwYMLxC9duhShoaFYtGgRNm7ciLS0NLRu3RopKSlSzKFDh9CoUSPEx8dj4cKFOHDgACZNmoS///4bANCoUSO4uroqLJp/+eUX1KtXT64r4ttGjx6N4OBg+Pv74+DBg1i/fj26deuGp0+fysVlZWWhffv2aNGiBX7//Xd8+eWX+OmnnzB37lyl2/7qq6+wc+dOAMD//vc/6bMWFBQEb29vWFtbS+/rmz+C8++fe7PQLm4pKSnYvn07WrRoAUdHR6n9/v37iIuLg4uLC3744QdYWVlBS0sLn376KdauXavy9qdPn460tDTMmDHjvfJ8/vw5fH19cfjwYRw/fhxt27aVW56bm4vs7OwCkxBCLq5NmzZyr3VERAQWLlwIAPj000/fmUdCQgL69OmDL774Avv378c333yD9PR0NGnSBGvXroW/vz8OHDiAcePGYc2aNWjfvn2BHN6k6rkmIiIC+vr6aN26tZR3UFCQwm326dMHOjo6Be43zsnJwYYNG9CuXTtYWFgAADZs2AAfHx8YGxtj7dq12LZtG8zMzODr61tooVe3bl2sXr0aADBp0iQpp6+++goAsGnTJnTo0AHGxsbYvHkzQkJC8OzZMzRt2hSnTp165+usiszMTABQ2GtBV1cX6enpuHPnTqHbOHr0KADV3vs3fSifR6IySxARvSUpKUk0bNhQABAAhLa2tvDy8hIBAQHixYsXcrGffvqpaNKkyTu3mZ2dLbKyssSgQYOEq6ur1L5v3z4BQAQHB8vFBwQECABiypQpUpuvr6+oVKmSSElJkYv99ttvhZ6enkhOTi40hyZNmohPP/1Uri02NlYAEFWqVBGZmZlyy6pXry5cXV1FVlaWXHvbtm2FjY2NyMnJEUII0aNHD6Gvry8SExPljrd69eoCgIiNjZXa3z6mfPb29qJ///7S/NChQ4WRkZG4d++eXNz8+fMFAHH16lW5/F1cXER2drYUFxkZKQCIzZs3S21VqlQRVapUEa9evVL6Gq1evVoAEBcuXCiwrbVr1ypdTwghatWqJTp27FhoTP/+/QUAsW3bNrn21q1bi2rVqsm1vf1a5R/rvHnz5OLatGkj7O3tFe7vyy+/FJqamiIuLq7QvN5W2DbfFhwcXOC1FkKIiIgIAUAYGxuLmjVrim3btolDhw6Jrl27CgBi+fLl79z2hQsXhLa2tjh48KAQQvlroMibsbGxsaJmzZqiZs2aBV6LY8eOSd/1wiZlrl+/LszNzUWzZs1ERkZGoTk1adJEABBHjhyRaw8ICBAaGhri3Llzcu3bt28XAMT+/fultre/K29Tdq4RQghDQ0OF6+a/BseOHZPaOnfuLCpVqiR9z4UQYv/+/QKA2LNnjxBCiLS0NGFmZibatWsnt72cnBxRp04dUb9+faV5CiHEuXPnBACxevXqAuvb2toKFxcXuf2/ePFCVKhQQXh5eRW63bcpO0/n5OQIMzMz0aJFC7n2Z8+eiXLlygkAIjw8XOl2L168KPT19UWnTp3emcOH+HkkKst4JY+ICjA3N8fJkydx7tw5zJkzBx06dMDNmzcxYcIEuLi4yHVTKsxvv/0Gb29vGBkZQUtLC9ra2ggJCcG1a9ekmOPHjwMAunfvLrdur1695OZfv36NI0eOoFOnTjAwMJD7y27r1q3x+vVrhd0TVdW+fXtoa2tL87dv38b169el+/fe3l9CQgJu3LgBADh27BhatGgBKysraX1NTU306NGjyPns3bsXzZo1g62trdy+/fz8APzzuuVr06aN3L1gtWvXBgDcu3cPAHDz5k3cuXMHgwYNgp6entL99urVCxUqVJC7mrdkyRJYWlq+83jq16+PAwcOYPz48QgLC8OrV68UxslkMrRr106urXbt2lKuxSkkJATZ2dmwt7cv9m2/uQ9zc3N06tRJrj03NxdA3md3//796NatG3x8fLBt2zbUrVsX06dPL3S72dnZ+PLLL9GjRw/4+voWOb+//voLHh4esLKywunTp5W+FnPnzsW5c+cKTG9/N9+UmJiIVq1awcbGBrt27YKOjs478ylfvjyaN28u17Z3717UqlULn332mdzn3dfXV6VRL1U516hr4MCBePDgAf7880+pbfXq1bC2tpa+h+Hh4UhOTkb//v3l8s7NzUWrVq1w7ty5Ig2Wc+PGDTx69Ah9+/aV63ZpZGSELl264MyZM0hPTy/yseXT0NDA8OHDceTIEcyYMQOPHz/G7du30adPH2n7yrp9xsXFoW3btrCzs8PKlStV3ueH9nkkKqtY5BGRUu7u7hg3bhx+++03PHr0CKNGjUJcXJxKg6/s3LkT3bt3R8WKFbFhwwZERETg3Llz+PLLL+WG23769Cm0tLQKjHT5ZsGUH5ednY0lS5ZAW1tbbmrdujUAqFx8KmJjYyM3n9+FccyYMQX2980338jt7+nTp7C2ti6wTUVtqvr777+xZ8+eAvvO73709rGam5vLzed3v8ovtJ48eQIAcqNVKqKrq4uhQ4di06ZNeP78OZ48eYJt27bhq6++eudANIsXL8a4ceOwe/duNGvWDGZmZujYsSNu3bolF2dgYFCg0NTV1VVpGPYPzaVLl3D+/Hn06dOnwOuT/55Ur15d7oesTCaDr68vHjx4gMePHyvd9qJFi3D37l1MmTIFz58/x/Pnz5Gamgogr3B8/vy5dL9UYUJDQ/H333/jq6++gqmpqdI4JycnuLu7F5gsLS0Vxr948QKtW7dGVlYWDhw4ABMTk3fmAhT8rgF5n/dLly4V+LyXK1cOQohCv9uqnmvU5efnBxsbG6lL5bNnz/DHH3+gX79+0h9U8s8TXbt2LZD73LlzIYRAcnKy2vvO7+Ks6LWytbVFbm4unj17VtRDkzN58mSMGjUKM2fOhJWVFapWrQogr8gFgIoVKxZY5969e2jWrBm0tLRw5MgRtUYq/tA+j0RlFUfXJCKVaGtrY8qUKfjpp5+Ujjr4pg0bNsDR0RFbt26Vu6H/7cE1zM3NkZ2djeTkZLkfComJiXJx5cuXh6amJvr27Yvhw4cr3Oeb90Op6+3BOvLvt5kwYQI6d+6scJ1q1apJx/B2vkDBYwDyipm3XwMABe5bs7CwQO3atTFr1iyF+7a1tVXYrkz+D6MHDx68M/brr7/GnDlzsGrVKrx+/RrZ2dkKHxnwNkNDQ0ybNg3Tpk3D33//LV3Va9euHa5fv65Wvh+LkJAQAJDuo3pTlSpVlI4aKf7/vqLCBse4cuUKUlJSpB/db/rxxx/x448/4sKFC+8cev/777/HnTt30K9fP2RnZ6Nfv36FxqsiKysLXbp0wZ07d3Dy5Ml3/vHgTYoGxrGwsIC+vj5WrVqlcJ3876Miqp5r1JV/vlm8eDGeP3+OTZs2ISMjQyp+3sxryZIlSgfXefsPVqrI/wNBQkJCgWWPHj2ChoYGypcvr/Z2FdHS0sLChQsxffp0xMbGwsLCAjY2NvD19YWjo2OB9/bevXto2rQphBAICwtT670HPrzPI1FZxSKPiApISEhQ+Bfk/K5PbxYYurq6CrvlyWQy6OjoyP3oSkxMLDDiXZMmTRAYGIitW7fi66+/ltq3bNkiF2dgYIBmzZrhwoULqF27dol3w6lWrRqqVq2KixcvYvbs2YXGNmvWDH/88Qf+/vtv6QddTk4Otm7dWiDWwcEBly5dkms7evQoXr58KdfWtm1b7N+/H1WqVCmWH3POzs6oUqUKVq1ahdGjRxd6Vc7GxgbdunVDUFAQMjMz0a5dO1SuXFmt/VlZWWHAgAG4ePEiFi1aVKLD5Cv7DJa0jIwMbNiwAfXr11c4RL2WlhY6dOiA7du3Iy4uThp5VgiBgwcPokqVKoUWL+PHj1c44mqvXr0wbNgw9OjRA5988sk789TQ0MCyZctgZGSEAQMGIC0tTe67VhSDBg1CWFgYDhw4IHUNfh9t27bF7NmzYW5urvYfa1Q91wDqf1YGDhyIwMBAbN68GWvWrIGnpyeqV68uLff29oapqSliYmLw7bffqpV3fj4ACuRUrVo1VKxYEZs2bcKYMWOkY0tLS8OOHTukETeLU/7DzYG8LpVHjhyReyYqkPesvKZNmyInJwdhYWFF6gb9MXweicoCFnlEVICvry8qVaqEdu3aoXr16sjNzUV0dDQWLFgAIyMjjBgxQop1cXHBli1bsHXrVjg5OUFPTw8uLi5o27Ytdu7ciW+++QZdu3bF/fv3MWPGDNjY2Mh132vVqhW8vb3x3XffITU1FW5uboiIiJBGxXvzSsfPP/+Mhg0bolGjRvj666/h4OCAFy9e4Pbt29izZ480yltxWbZsGfz8/ODr64sBAwagYsWKSE5OxrVr1/DXX3/ht99+A5A3Mt4ff/yB5s2bY/LkyTAwMMDSpUsV3ovTt29f/Pjjj5g8eTKaNGmCmJgY/PLLLwW6Fk2fPh2hoaHw8vKCv78/qlWrhtevXyMuLg779+/Hr7/+qvZfq5cuXYp27drBw8MDo0aNQuXKlREfH49Dhw5Jz8LKN2LECDRo0AAApO5q79KgQQO0bdsWtWvXRvny5XHt2jWsX7++RH6Qvin/GV/BwcFwc3ODhoaG9KiBQYMGYe3atbhz5847f5DGxMQgJiYGQF6RkJ6eju3btwMAatasWeBB2bt370ZycrLCq3j5ZsyYgQMHDqBVq1aYOnUqjI2NsXLlSly8eLHAozi0tLTQpEkTaUTG6tWryxUUAKRRQqtUqaL28PALFixAuXLl8M033+Dly5f4/vvv1Vo/37x587B+/Xr873//g6Ghody9sMbGxkV6oPjIkSOxY8cONG7cGKNGjULt2rWRm5uL+Ph4HD58GN999530eXybqucaIO+zEhYWhj179sDGxgblypWTrsgrUr16dXh6eiIgIAD379/H8uXL5ZYbGRlhyZIl6N+/P5KTk9G1a1dUqFABT548wcWLF/HkyRMEBwcr3X6VKlWgr6+PjRs3okaNGjAyMoKtrS1sbW0RGBiI3r17o23bthg6dCgyMjIwb948PH/+HHPmzHnna3r+/Hnp85KamgohhPR5rlevnvR9CAsLw7lz51C7dm0IIRAZGYm5c+eiVatWcoXr48eP0axZMyQkJCAkJASPHz+W625cqVIltc5JH/LnkahMKMVBX4joA7V161bxxRdfiKpVqwojIyOhra0tKleuLPr27StiYmLkYuPi4oSPj480EtubIxLOmTNHODg4CF1dXVGjRg2xYsUKMWXKlAIjoyUnJ4uBAwcKU1NTYWBgID7//HNx5swZAUD8/PPPcrGxsbHiyy+/FBUrVhTa2trC0tJSeHl5iZkzZ77zuAobXVPZaIUXL14U3bt3FxUqVBDa2trC2tpaNG/eXPz6669ycadPnxYeHh5CV1dXWFtbi++//14sX768wOiaGRkZYuzYscLOzk7o6+uLJk2aiOjoaIUjBj558kT4+/sLR0dHoa2tLczMzISbm5uYOHGiePny5Tvzh4KRPCMiIoSfn58wMTERurq6okqVKmLUqFEKj93BwUHUqFFD4TJFxo8fL9zd3UX58uWFrq6ucHJyEqNGjRJJSUlSTP/+/YWhoWGBdRV9Lt7OX9mxJicni65duwpTU1Mhk8nktpM/mueb74Ey+TkomhSNiPr5558LQ0NDkZqaWuh2L1++LNq0aSPKlSsn9PT0hIeHhzQ649vH+66Raos6uuab5s2bJwCIyZMnCyH+Gc3wt99+U7id4cOHK3xNFU3vyl/RdzDfy5cvxaRJk0S1atWEjo6OMDExES4uLmLUqFFyI9cq+q6oeq6Jjo4W3t7ewsDAQC5fRaNr5sv/Huvr6xcY2Tff8ePHRZs2bYSZmZnQ1tYWFStWFG3atFH6mr5p8+bNonr16kJbW7vAZ2337t2iQYMGQk9PTxgaGooWLVqI06dPv3ObQhT+Pr05mufp06dFgwYNhLGxsdDV1RW1atUS8+fPLzDa8LtGvVT0HXnTh/h5JCrLZEIU8vAZIqJSsmnTJvTu3RunT5+Gl5dXaadTJGvWrMHAgQMRGxsrddX7WFy6dAl16tTB0qVLpYFmiIiI6OPA7ppEVOo2b96Mhw8fwsXFBRoaGjhz5gzmzZuHxo0bf7QF3sfqzp07uHfvHn744QfY2NgUuCeMiIiIPnws8oio1JUrVw5btmzBzJkzkZaWJhUXM2fOLO3U/nNmzJiB9evXo0aNGvjtt99K9F46IiIiKhnsrklERERERFSGlOrD0E+cOIF27drB1tYWMpkMu3fvfuc6x48fh5ubG/T09ODk5IRff/1VbvmaNWsgk8kKTG8/EDUoKAiOjo7Q09ODm5sbTp48WZyHRkREREREVCpKtchLS0tDnTp18Msvv6gUHxsbi9atW6NRo0a4cOECfvjhB/j7+2PHjh1yccbGxkhISJCb9PT0pOVbt27FyJEjMXHiRFy4cAGNGjWCn58f4uPji/X4iIiIiIiI/m0fTHdNmUyGXbt2oWPHjkpjxo0bhz/++EN6IDMADBs2DBcvXkRERASAvCt5I0eOxPPnz5Vup0GDBqhbt67cs2tq1KiBjh07IiAgQOE6GRkZyMjIkOZzc3ORnJwMc3NzuQewEhERERERlQQhBF68eAFbW1u5Zwm/7aMaeCUiIgI+Pj5ybb6+vggJCUFWVha0tbUBAC9fvoS9vT1ycnLw2WefYcaMGXB1dQUAZGZmIioqCuPHj5fbjo+PD8LDw5XuOyAgANOmTSvmIyIiIiIiIlLP/fv3UalSJaXLP6oiLzExEVZWVnJtVlZWyM7ORlJSEmxsbFC9enWsWbMGLi4uSE1Nxc8//wxvb29cvHgRVatWRVJSEnJychRuJzExUem+J0yYgNGjR0vzKSkpqFy5Mu7fvw9jY+PiPVAiIiIiIqK3pKamws7ODuXKlSs07qMq8gAU6BqZ39s0v93DwwMeHh7Scm9vb9StWxdLlizB4sWLC91OYd0udXV1oaurW6Dd2NiYRR4REREREf1r3nW7WKkOvKIua2vrAlfbHj9+DC0tLZibmytcR0NDA/Xq1cOtW7cAABYWFtDU1FS4nbev7hEREREREX1sPqoiz9PTE6GhoXJthw8fhru7u3Q/3tuEEIiOjoaNjQ0AQEdHB25ubgW2ExoaCi8vr5JJnIiIiIiI6F9Sqt01X758idu3b0vzsbGxiI6OhpmZGSpXrowJEybg4cOHWLduHYC8kTR/+eUXjB49GoMHD0ZERARCQkKwefNmaRvTpk2Dh4cHqlatitTUVCxevBjR0dFYunSpFDN69Gj07dsX7u7u8PT0xPLlyxEfH49hw4b9ewdPRERERERUAkq1yDt//jyaNWsmzecPbNK/f3+sWbMGCQkJcs+uc3R0xP79+zFq1CgsXboUtra2WLx4Mbp06SLFPH/+HEOGDEFiYiJMTEzg6uqKEydOoH79+lJMjx498PTpU0yfPh0JCQmoVasW9u/fD3t7+3/hqImIiIgKysnJQVZWVmmnQUSlSFtbG5qamu+9nQ/mOXkfm9TUVJiYmCAlJYUDrxAREVGRCSGQmJhY6DN+iei/w9TUFNbW1goHV1G1BvnoRtckIiIiKkvyC7wKFSrAwMDgnaPmEVHZJIRAeno6Hj9+DADSmCJFwSKPiIiIqJTk5ORIBZ6ykcKJ6L9DX18fQN7I/xUqVChy182PanRNIiIiorIk/x48AwODUs6EiD4U+eeD97lHl0UeERERUSljF00iylcc5wMWeURERERERGUIizwiIiIiIqIyhEUeEREREamtadOmGDly5L+2PwcHByxatOhf218+mUyG3bt3v9c2BgwYgI4dOxZLPmWFKu9nZmYmPvnkE5w+ffrfSepfsHfvXri6uiI3N7dE98Mij4iIiIiI3unfLrSXL18Oe3t7eHt7S23Pnj1D3759YWJiAhMTE/Tt2/edz5j8+++/MWDAANja2sLAwACtWrXCrVu3CuyradOmMDY2hkwmU7jNmzdvokOHDrCwsICxsTG8vb1x7NgxafmaNWsgk8kUTvmPRWjbti1kMhk2bdpU9BdGBSzyiIiIiOiDkJOTU+JXOOjjsWTJEnz11VdybV988QWio6Nx8OBBHDx4ENHR0ejbt6/SbQgh0LFjR9y9exe///47Lly4AHt7e7Rs2RJpaWlSXHp6Olq1aoUffvhB6bbatGmD7OxsHD16FFFRUfjss8/Qtm1bJCYmAgB69OiBhIQEucnX1xdNmjRBhQoVpO0MHDgQS5YsKerLohIWeUREREQfosw05VPWazViX6kWWwS5ubkYO3YszMzMYG1tjalTp8otX7hwIVxcXGBoaAg7Ozt88803ePnypbR8zZo1MDU1xd69e1GzZk3o6uri3r17ePz4Mdq1awd9fX04Ojpi48aNKuXz4MED9OzZE2ZmZjA0NIS7uzvOnj0rLQ8ODkaVKlWgo6ODatWqYf369XLr37p1C40bN4aenh5q1qyJ0NDQAvt4+PAhevTogfLly8Pc3BwdOnRAXFyctDwnJwejR4+GqakpzM3NMXbsWAgh3pl7eHg4GjduDH19fdjZ2cHf318qQtatWwcjIyO5q0//+9//4OzsLMU4ODhgxowZ+OKLL2BkZARbW9sChURKSgqGDBmCChUqwNjYGM2bN8fFixflYv744w+4u7tDT08PFhYW6Ny5M4C87rn37t3DqFGjpKtTquQOoEjv519//YXbt2+jTZs2Utu1a9dw8OBBrFy5Ep6envD09MSKFSuwd+9e3LhxQ+F2bt26hTNnziA4OBj16tVDtWrVEBQUhJcvX2Lz5s1S3MiRIzF+/Hh4eHgo3E5SUhJu376N8ePHo3bt2qhatSrmzJmD9PR0XL16FUDeM+6sra2lSVNTE0ePHsWgQYPkttW+fXtERkbi7t2773wdiopFHhEREdGHaLat8mnbW1cu5n2iPHZDV/nYRS6K44pg7dq1MDQ0xNmzZxEYGIjp06fLFUYaGhpYvHgxrly5grVr1+Lo0aMYO3as3DbS09MREBCAlStX4urVq6hQoQIGDBiAuLg4HD16FNu3b0dQUJDU3U2Zly9fokmTJnj06BH++OMPXLx4EWPHjpWuDO7atQsjRozAd999hytXrmDo0KEYOHCg1N0uNzcXnTt3hqamJs6cOYNff/0V48aNK5Brs2bNYGRkhBMnTuDUqVMwMjJCq1atkJmZCQBYsGABVq1ahZCQEJw6dQrJycnYtWtXoblfvnwZvr6+6Ny5My5duoStW7fi1KlT+PbbbwEA/fr1Q+vWrdG7d29kZ2fj4MGDWLZsGTZu3AhDQ0NpO/PmzUPt2rXx119/YcKECRg1apT0fggh0KZNGyQmJmL//v2IiopC3bp10aJFCyQnJwMA9u3bh86dO6NNmza4cOECjhw5And3dwDAzp07UalSJUyfPl26SqVK7gCK9H6eOHECzs7OMDY2ltoiIiJgYmKCBg0aSG0eHh4wMTFBeHi4wu1kZGQAAPT09KQ2TU1N6Ojo4NSpU4Xm8CZzc3PUqFED69atQ1paGrKzs7Fs2TJYWVnBzc1N4Trr1q2DgYEBunaV/w7a29ujQoUKOHnypMr7V5ugIklJSREAREpKSmmnQkRERB+pV69eiZiYGPHq1auCC6cYK582dJWPnWmtPHZVa/nYuY6K49TUpEkT0bBhQ7m2evXqiXHjxildZ9u2bcLc3FyaX716tQAgoqOjpbYbN24IAOLMmTNS27Vr1wQA8dNPPynd9rJly0S5cuXE06dPFS738vISgwcPlmvr1q2baN067/U5dOiQ0NTUFPfv35eWHzhwQAAQu3btEkIIERISIqpVqyZyc3OlmIyMDKGvry8OHTokhBDCxsZGzJkzR1qelZUlKlWqJDp06KA09759+4ohQ4bItZ08eVJoaGhIn43k5GRRqVIl8fXXXwsrKysxc+ZMuXh7e3vRqlUrubYePXoIPz8/IYQQR44cEcbGxuL169dyMVWqVBHLli0TQgjh6ekpevfurTRPe3v7Au/Bu3Iv6vs5YsQI0bx5c7m2WbNmiapVqxaIrVq1qpg9e7bC7WRmZgp7e3vRrVs3kZycLDIyMkRAQIAAIHx8fArEHzt2TAAQz549K7DswYMHws3NTchkMqGpqSlsbW3FhQsXlB5DzZo1xddff61wmaurq5g6darCZYWdF1StQbRKrnwkIiIioiL74ZHyZTJN+fnvbxcS+1bHrZGXi57TW2rXri03b2NjI3eF5tixY5g9ezZiYmKQmpqK7OxsvH79GmlpadIVKB0dHbntXLt2DVpaWtIVJACoXr06TE1Npflhw4Zhw4YN0vzLly8RHR0NV1dXmJmZKcz12rVrGDJkiFybt7c3fv75Z2l55cqVUalSJWm5p6enXHxUVBRu376NcuXKybW/fv0ad+7cQUpKChISEuTWyz8WUUiXzfztvtmNUQiB3NxcxMbGokaNGihfvjxCQkLg6+sLLy8vjB8/vsB23s7X09NTGiglKioKL1++hLm5uVzMq1evcOfOHQBAdHQ0Bg8erDTPouR+8+bNd76firx69Uru6ls+RQ8KF0IofYC4trY2duzYgUGDBsHMzAyamppo2bIl/Pz8VDzCf/bxzTffSFfg9PX1sXLlSrRt2xbnzp2DjY2NXHxERARiYmKwbt06hdvT19dHenq6Wjmog0UeERER0YdIx/DdMSUd+w7a2tpy8zKZTOoeee/ePbRu3RrDhg3DjBkzYGZmhlOnTmHQoEHIysqS1tHX15f7gZ5fDCn70Q4A06dPx5gxY+Ta9PX135nv29t8szhQVIS9HZ+bmws3NzeF95RZWlq+c//K5ObmYujQofD39y+wrHLlytK/T5w4AU1NTTx69AhpaWlyXRmVyT+G3Nxc2NjYICwsrEBMfsGlymuobu7598oV9n4qYmFhgcuX5f8gYW1tjb///rtA7JMnT2BlZaV0W25uboiOjkZKSgoyMzNhaWmJBg0ayBWe73L06FHs3bsXz549k173oKAghIaGYu3atQWK7pUrV+Kzzz5T2pUzOTn5vT4z78J78oiIiIio2J0/fx7Z2dlYsGABPDw84OzsjEePCrk6+f9q1KiB7OxsnD9/Xmq7ceOG3JD2FSpUwCeffCJNQN5VxejoaOn+MkXbffserPDwcNSoUQMAULNmTcTHx8vlGBERIRdft25d3Lp1q8D+P/nkE2lIfxsbG5w5c0ZaJzs7G1FRUYUec926dXH16tUC2/zkk0+go6Mj5RoYGIg9e/bA2NgY//vf/wps58395s9Xr15d2kdiYiK0tLQK7MPCwkJ6DY8cOaI0Tx0dHeTk5KiVuyrvpyKurq64fv26XPHt6emJlJQUREZGSm1nz55FSkoKvLy8Ct0eAJiYmMDS0hK3bt3C+fPn0aFDh3euky//qpuGhnz5pKGhUWBE2JcvX2Lbtm0FBlzJl3/l19XVVeX9q63QzpykFO/JIyIiovdV6D15H7gmTZqIESNGyLV16NBB9O/fXwghxIULFwQAsWjRInHnzh2xbt06UbFiRbn7nVavXi1MTEwKbLtVq1aidu3a4syZM+L8+fOiYcOGQl9fv9B7uDIyMoSzs7No1KiROHXqlLhz547Yvn27CA8PF0IIsWvXLqGtrS2Cg4PFzZs3xYIFC4SmpqY4duyYEEKInJwcUbNmTdGiRQsRHR0tTpw4Idzc3OTuyUtLSxNVq1YVTZs2FSdOnBB3794VYWFhwt/fX7qXb86cOaJ8+fJi586d4tq1a2Lw4MGiXLlyhd6Td/HiRaGvry+++eYbceHCBXHz5k3x+++/i2+//VYIIURqaqpwcnISo0ePFkIIceXKFaGnpye2bdsmbcPe3l4YGxuLuXPnihs3bohffvlFaGpqioMHDwohhMjNzRUNGzYUderUEQcPHhSxsbHi9OnTYuLEieLcuXNCiLz70TQ0NMTkyZNFTEyMuHTpkpg7d660j88//1y0b99ePHjwQDx58kSl3Iv6fiYlJQkdHR1x+fJlufb8bUVERIiIiAjh4uIi2rZtKxdTrVo1sXPnTml+27Zt4tixY+LOnTti9+7dwt7eXnTu3FlunYSEBHHhwgWxYsUKAUCcOHFCXLhwQbrH88mTJ8Lc3Fx07txZREdHixs3bogxY8YIbW1tuXtKhRBi5cqVQk9PTyQnJys8tmPHjgkjIyORlpamcHlx3JPHIq+IWOQRERHR+yrLRZ4QQixcuFDY2NgIfX194evrK9atW6dSkZeQkCDatGkjdHV1ReXKlcW6desUDvrxtri4ONGlSxdhbGwsDAwMhLu7uzh79qy0PCgoSDg5OQltbW3h7Ows1q1bJ7f+jRs3RMOGDYWOjo5wdnYWBw8elCvy8nPr16+fsLCwELq6usLJyUkMHjxY+k2YlZUlRowYIYyNjYWpqakYPXq06NevX6FFnhBCREZGis8//1wYGRkJQ0NDUbt2bTFr1iwhhBADBw4ULi4ucoOm/Pzzz8LMzEw8ePBACJFX5E2bNk10795dGBgYCCsrK7Fo0SK5faSmpor//e9/wtbWVmhraws7OzvRu3dvER8fL8Xs2LFDfPbZZ0JHR0dYWFjIFUMRERGidu3aQldXV7x5raiw3PNfs6K8nz179hTjx4+Xa3v69Kno3bu3KFeunChXrpzo3bt3gUFSAIjVq1fLvVaVKlUS2traonLlymLSpEkiIyNDbp0pU6YIAAWmN7dz7tw54ePjI8zMzES5cuWEh4eH2L9/f4G8PT09xRdffKH0uIYMGSKGDh2qdHlxFHkyIVR4cAcVkJqaChMTE6SkpKjUH5qIiIjoba9fv0ZsbCwcHR0VDjJBpCoHBweMHDkSI0eOLO1Uis3ly5fRsmVLhYPdfKyePHmC6tWr4/z583B0dFQYU9h5QdUahPfkERERERHRB8fFxQWBgYFyD5v/2MXGxiIoKEhpgVdcOLomERERERF9kPr371/aKRSr+vXro379+iW+HxZ5REREREQfubJ0tYveH7trEhERERERlSEs8oiIiIiIiMoQFnlERERERERlCIs8IiIiIiKiMoRFHhERERERURnCIo+IiIiIiKgMYZFHRERERB+kpk2bYuTIke+9nQEDBqBjx47vvZ13kclk2L17d4nv52MRFhYGmUyG58+fFxp39OhRVK9eHbm5uSWaz969e+Hq6lri+/kQsMgjIiIiIrUNGDAAMpmswHT79u3STq2An3/+GWvWrCntND4KqhZmxWns2LGYOHEiNDTySpOEhAR88cUXqFatGjQ0NFQu9OPj49GuXTsYGhrCwsIC/v7+yMzMlJa3bdsWMpkMmzZtKonD+KCwyCMiIiKiImnVqhUSEhLkJkdHx9JOS5KTk4Pc3FyYmJjA1NS0tNMhBcLDw3Hr1i1069ZNasvIyIClpSUmTpyIOnXqqLSdnJwctGnTBmlpaTh16hS2bNmCHTt24LvvvpOLGzhwIJYsWVKsx/AhYpFHRERE9AFKz8xWOr3Oyin22KLQ1dWFtbW13KSpqQkA2L59O1xcXKCvrw9zc3O0bNkSaWlpSreVlpaGfv36wcjICDY2NliwYEGBmMzMTIwdOxYVK1aEoaEhGjRogLCwMGn5mjVrYGpqir1796JmzZrQ1dXFvXv35LprLlu2DBUrVizQZa99+/bo37+/NL9nzx64ublBT08PTk5OmDZtGrKz/3mdbt26hcaNG0NPTw81a9ZEaGjoO18vIQQCAwPh5OQEfX191KlTB9u3b5eWtWzZEq1atYIQAgDw/PlzVK5cGRMnTgTwz1W2ffv2oU6dOtDT00ODBg1w+fJluf2Eh4ejcePG0NfXh52dHfz9/eVe+4yMDIwdOxZ2dnbQ1dVF1apVERISgri4ODRr1gwAUL58echkMgwYMOCduefbv38/nJ2doa+vj2bNmiEuLu6dr8mWLVvg4+MDPT09qc3BwQE///wz+vXrBxMTk3duAwAOHz6MmJgYbNiwAa6urmjZsiUWLFiAFStWIDU1VYpr3749IiMjcffuXZW2+7HSKu0EiIiIiKigmpMPKV3WrJolVg+sL827zfgTr94q5vI1cDTD1qGe0nzDuceQnJZZIC5uTpv3yFZeQkICevXqhcDAQHTq1AkvXrzAyZMnpeJFke+//x7Hjh3Drl27YG1tjR9++AFRUVH47LPPpJiBAwciLi4OW7Zsga2tLXbt2oVWrVrh8uXLqFq1KgAgPT0dAQEBWLlyJczNzVGhQgW5/XTr1g3+/v44duwYWrRoAQB49uwZDh06hD179gAADh06hD59+mDx4sVo1KgR7ty5gyFDhgAApkyZgtzcXHTu3BkWFhY4c+YMUlNTVepSOGnSJOzcuRPBwcGoWrUqTpw4gT59+sDS0hJNmjTB2rVr4eLigsWLF2PEiBEYNmwYrKysMHXq1AKv1c8//yy9Tu3bt8fNmzehra2Ny5cvw9fXFzNmzEBISAiePHmCb7/9Ft9++y1Wr14NAOjXrx8iIiKwePFi1KlTB7GxsUhKSoKdnR127NiBLl264MaNGzA2Noa+vr5Kud+/fx+dO3fGsGHD8PXXX+P8+fMFrqIpcuLECfTq1eudce8SERGBWrVqwdbWVmrz9fVFRkYGoqKipOLV3t4eFSpUwMmTJ+Hk5PTe+/1QscgjIiIioiLZu3cvjIyMpHk/Pz/89ttvSEhIQHZ2Njp37gx7e3sAgIuLi9LtvHz5EiEhIVi3bh0+//xzAMDatWtRqVIlKebOnTvYvHkzHjx4IP2QHzNmDA4ePIjVq1dj9uzZAICsrCwEBQUp7eZnZmaGVq1aYdOmTVKR99tvv8HMzEyanzVrFsaPHy9d2XNycsKMGTMwduxYTJkyBX/++SeuXbuGuLg4KcfZs2fDz89P6TGmpaVh4cKFOHr0KDw9PaXtnjp1CsuWLUOTJk1QsWJFLFu2DH379sXff/+NPXv24MKFC9DW1pbb1pQpUwq8Trt27UL37t0xb948fPHFF1LRWbVqVSxevBhNmjRBcHAw4uPjsW3bNoSGhqJly5ZSHm++PgBQoUIFqYurKrkHBwfDyckJP/30E2QyGapVq4bLly9j7ty5Sl8TAIiLi5MrzIoqMTERVlZWcm3ly5eHjo4OEhMT5dorVqyo0lXGjxmLPCIiIqIPUMx0X6XLNGQyufmoH1uqHHtqXLP3S+wNzZo1Q3BwsDRvaGgIAKhTpw5atGgBFxcX+Pr6wsfHB127dkX58uVx8uRJuWJo2bJlqFWrFjIzM6UCAsgrNqpVqybN//XXXxBCwNnZWS6HjIwMmJubS/M6OjqoXbt2oXn37t0bQ4YMQVBQEHR1dbFx40b07NlT6moaFRWFc+fOYdasWdI6OTk5eP36NdLT03Ht2jVUrlxZrgh9M3dFYmJi8Pr1a6k4y5eZmQlXV1dpvlu3bti1axcCAgIQHBxc4Hjf3lf+63Tt2jUp99u3b2Pjxo1SjBACubm5iI2NxeXLl6GpqYkmTZoUmq+6uV+7dg0eHh6QvfF5e9drAgCvXr2S66r5PmRvfdaBvGN/u11fXx/p6enFss8PVakWeSdOnMC8efMQFRWFhIQE7Nq1653D2x4/fhyjR4/G1atXYWtri7Fjx2LYsGHS8hUrVmDdunW4cuUKAMDNzQ2zZ89G/fr/dGmYOnUqpk2bJrddKyurAlU+ERERUWkx0FH9Z1pJxb6LoaEhPvnkkwLtmpqaCA0NRXh4OA4fPowlS5Zg4sSJOHv2LNzd3REdHS3FWllZ4c6dO+/cV25uLjQ1NREVFSUVY/nevJqor6+v8Mf+m9q1a4fc3Fzs27cP9erVw8mTJ7Fw4UK5fU2bNg2dO3cusK6enp7Cbqfv2mf+PYD79u1DxYoV5Zbp6upK/05PT5eO8datW4VuU9H+c3NzMXToUPj7+xeIqVy5cpFGP1Ul98K64hbGwsICz549K9K6b7K2tsbZs2fl2p49e4asrKwCV/iSk5NhaWn53vv8kJVqkZeWloY6depg4MCB6NKlyzvjY2Nj0bp1awwePBgbNmzA6dOn8c0338DS0lJaPywsDL169YKXlxf09PQQGBgIHx8fXL16Ve5D+emnn+LPP/+U5t8+WRARERFR0clkMnh7e8Pb2xuTJ0+Gvb09du3ahdGjRxcoDD/55BNoa2vjzJkzqFy5MoC8H+g3b96Urji5uroiJycHjx8/RqNGjd4rN319fXTu3BkbN27E7du34ezsDDc3N2l53bp1cePGDYUFLADUrFkT8fHxePTokdTVMCIiotB95g8EEx8fX+hVtO+++w4aGho4cOAAWrdujTZt2qB58+ZyMYpep+rVq0u5X716VWnuLi4uyM3NxfHjx6Xumm/S0dEBkHflUp3ca9asWeAZgWfOnFF6nPlcXV0RExPzzrh38fT0xKxZs5CQkAAbGxsAeYOx6Orqyr23r1+/xp07d+SunpZFpVrk+fn5Fdp3+W2//vorKleujEWLFgEAatSogfPnz2P+/PlSkffmpWkg78re9u3bceTIEfTr109q19LSgrW19fsfBBERERHJOXv2LI4cOQIfHx9UqFABZ8+exZMnT1CjRg2F8UZGRhg0aBC+//57mJubw8rKSu65aQDg7OyM3r17o1+/fliwYAFcXV2RlJSEo0ePwsXFBa1bt1Yrx969e6Ndu3a4evUq+vTpI7ds8uTJaNu2Lezs7NCtWzdoaGjg0qVLuHz5MmbOnImWLVuiWrVqUi6pqanSCJjKlCtXDmPGjMGoUaOQm5uLhg0bIjU1FeHh4TAyMkL//v2xb98+rFq1ChEREahbt650X+ClS5dQvnx5aVvTp0+Xe50sLCyk3nDjxo2Dh4cHhg8fjsGDB8PQ0BDXrl1DaGgolixZAgcHB/Tv3x9ffvmlNPDKvXv38PjxY3Tv3h329vaQyWTYu3cvWrduDX19fZVyHzZsGBYsWIDRo0dj6NChiIqKUunZhL6+vli7dm2B9vyrvS9fvsSTJ08QHR0NHR0d1KxZEwCwa9cuTJgwAdevXwcA+Pj4oGbNmujbty/mzZuH5ORkjBkzBoMHD4axsbG03TNnzkBXV1elrqQfNfGBACB27dpVaEyjRo2Ev7+/XNvOnTuFlpaWyMzMVLhOamqq0NPTE3v27JHapkyZIgwMDISNjY1wcHAQPXr0EHfu3Cl0369fvxYpKSnSdP/+fQFApKSkqHaARERERG959eqViImJEa9evSrtVNTWv39/0aFDB4XLYmJihK+vr7C0tBS6urrC2dlZLFmypNDtvXjxQvTp00cYGBgIKysrERgYKJo0aSJGjBghxWRmZorJkycLBwcHoa2tLaytrUWnTp3EpUuXhBBCrF69WpiYmKiUa3Z2trCxsREAFP4OPHjwoPDy8hL6+vrC2NhY1K9fXyxfvlxafuPGDdGwYUOho6MjnJ2dxcGDB9/5ezY3N1f8/PPPolq1akJbW1tYWloKX19fcfz4cfH48WNhZWUlZs+eLcVnZWWJ+vXri+7duwshhDh27JgAIPbs2SM+/fRToaOjI+rVqyeio6Pl9hMZGSk+//xzYWRkJAwNDUXt2rXFrFmzpOWvXr0So0aNEjY2NkJHR0d88sknYtWqVdLy6dOnC2trayGTyUT//v3fmXu+PXv2iE8++UTo6uqKRo0aiVWrVgkA4tmzZ0pfk+TkZKGvry+uX78u1w6gwGRvby8tX716tXi7lLl3755o06aN0NfXF2ZmZuLbb78Vr1+/losZMmSIGDp0qNJ8PgSFnRdSUlJUqkFkQhSxA20xk8lk77wnz9nZGQMGDMAPP/wgtYWHh8Pb2xuPHj2SLs2+afjw4Th06BCuXLki3dR54MABpKenw9nZGX///TdmzpyJ69ev4+rVq3I37r5J0X18AJCSkiL31wEiIiIiVb1+/RqxsbFwdHQstsEnqOwKCwtDs2bN8OzZszL1cPexY8ciJSUFy5YtK9H9PHnyBNWrV8f58+fh6OhYovt6H4WdF1JTU2FiYvLOGuSjexj62ze15teoim52DQwMxObNm7Fz5065F8jPzw9dunSBi4sLWrZsiX379gGAwkvF+SZMmICUlBRpun//fnEcDhERERHRf9rEiRNhb28vdx9gSYiNjUVQUNAHXeAVl4/qEQrW1tYFRsB8/PgxtLS0ClyBmz9/PmbPno0///zzncPoGhoawsXFpdARjHR1deVGPiIiIiIiovdnYmIi11OvpNSvX19uxP2y7KO6kufp6YnQ0FC5tsOHD8Pd3V3uIZHz5s3DjBkzcPDgQbi7u79zuxkZGbh27ZrC7p5ERERERB+Cpk2bQghRprpqUsko1SLv5cuXiI6OlkbPiY2NRXR0NOLj4wHkdZF8c0TMYcOG4d69exg9ejSuXbuGVatWISQkBGPGjJFiAgMDMWnSJKxatQoODg5ITExEYmIiXr58KcWMGTMGx48fR2xsLM6ePYuuXbsiNTUV/fv3/3cOnIiIiIiIqISUapF3/vx5uLq6Ss+pGD16NFxdXTF58mQAQEJCglTwAYCjoyP279+PsLAwfPbZZ5gxYwYWL14s94y9oKAgZGZmomvXrrCxsZGm+fPnSzEPHjxAr169UK1aNXTu3Bk6Ojo4c+YM7O3t/6UjJyIiIvpH/sOmiYiK43zwwYyu+bFRdWQbIiIiImVyc3Nx69YtaGpqwtLSEjo6OgoHkyOisk8IgczMTDx58gQ5OTmoWrWq3LMiAdVrkI9q4BUiIiKiskRDQwOOjo5ISEjAo0ePSjsdIvoAGBgYoHLlygUKPHWwyCMiIiIqRTo6OqhcuTKys7NLfAh5IvqwaWpqQktL672v6LPIIyIiIiplMpkM2tracqOFExEV1Uf1CAUiIiIiIiIqHIs8IiIiIiKiMoRFHhERERERURnCIo+IiIiIiKgMYZFHRERERERUhrDIIyIiIiIiKkNY5BEREREREZUhLPKIiIiIiIjKEBZ5REREREREZQiLPCIiIiIiojKERR4REREREVEZwiKPiIiIiIioDGGRR0REREREVIawyCMiIiIiIipDWOQRERERERGVISzyiIiIiIiIyhAWeURERERERGUIizwiIiIiIqIyhEUeERERERFRGcIij4iIiIiIqAxhkUdERERERFSGsMgjIiIiIiIqQ1jkERERERERlSEs8oiIiIiIiMoQFnlERERERERlCIs8IiIiIiKiMoRFHhERERERURnCIo+IiIiIiKgMYZFHRERERERUhmipu0JGRgYiIyMRFxeH9PR0WFpawtXVFY6OjiWRHxEREREREalB5SIvPDwcS5Yswe7du5GZmQlTU1Po6+sjOTkZGRkZcHJywpAhQzBs2DCUK1euJHMmIiIiIiIiJVTqrtmhQwd07doVFStWxKFDh/DixQs8ffoUDx48QHp6Om7duoVJkybhyJEjcHZ2RmhoaEnnTURERERERAqoVOT5+PggLi4O8+fPR+PGjWFgYCC33MnJCf3798fBgwfx559/qrzzEydOoF27drC1tYVMJsPu3bvfuc7x48fh5uYGPT09ODk54ddffy0Qs2PHDtSsWRO6urqoWbMmdu3aVSAmKCgIjo6O0NPTg5ubG06ePKly3kRERERERB8qlYq84cOHQ0dH551xQgh8+umn+Pzzz1XaeVpaGurUqYNffvlFpfjY2Fi0bt0ajRo1woULF/DDDz/A398fO3bskGIiIiLQo0cP9O3bFxcvXkTfvn3RvXt3nD17VorZunUrRo4ciYkTJ+LChQto1KgR/Pz8EB8fr1IeREREREREHyqZEEKos0JAQAAmTJhQoD0nJwd9+vTB5s2bi5aITIZdu3ahY8eOSmPGjRuHP/74A9euXZPahg0bhosXLyIiIgIA0KNHD6SmpuLAgQNSTKtWrVC+fHkptwYNGqBu3boIDg6WYmrUqIGOHTsiICBApXxTU1NhYmKChCdPYWxs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XPTv37/YkyMiIiIiIiL1qFzkff311zhx4oTCZb169QIALF++vHiyIiIiIiIioiLhc/KKiKNrEhER0ceC9+QRFd2HdE+eqjWIylfy3hQfH4+EhARoamrCwcEBFhYWRU6UiIiIiIiIio9aD0MPCgqCvb09HB0d4eXlhQYNGsDKygoNGzZEVFRUSeVIREREREREKlK5yJs/fz5mzpyJ0aNHIygoCNWqVcPUqVOxb98+ODk5oXHjxjh//nxJ5kpERERERETvoHJ3zaVLlyIkJAR+fn4AgGbNmsHLywuJiYlo1aoVypcvjx9++AGHDx8usWSJiIiIiIiocCpfyXv8+DFq1KghzVetWhUpKSl48uQJAODLL79ERERE8WdIREREREREKlO5yHN2dkZoaKg0f+zYMejo6MDa2hoAoKenB5lMVvwZEhERERERkcpU7q45YcIE9OnTB3/++Sf09PSwc+dO+Pv7S4VdWFgYatWqVWKJEhERERER0bupfCWve/fu+P3336GlpYW0tDQsXLgQAQEB0vKuXbtiz549JZIkERERERERqUat5+T5+flJA6+8zdzcvFgSIiIiIiIioqJT6zl5hcnOzkZ8fHxxbY6IiIiIiIiKoNiKvKtXr8LR0bG4NkdERERERERFUGxFHhEREREREZU+le/Jq1u3bqHLX7169d7JEBERERER0ftRuciLiYlBz549lXbJTEhIwM2bN4stMSIiIiIiIlKfykVerVq10KBBA3z99dcKl0dHR2PFihXFlhgRERERERGpT+V78ho2bIgbN24oXV6uXDk0bty4WJIiIiIiIiKiolH5St6iRYsKXV6lShUcO3bsffMhIiIiIiKi98DRNYmIiIiIiMoQlYo8dR9y/vDhwyIlQ0RERERERO9HpSKvXr16GDx4MCIjI5XGpKSkYMWKFahVqxZ27txZbAkSERERERGR6lS6Jy8mJgYBAQFo1aoVtLW14e7uDltbW+jp6eHZs2eIiYnB1atX4e7ujnnz5sHPz6+k8yYiIiIiIiIFVLqSZ25ujvnz5+PRo0cIDg6Gs7MzkpKScOvWLQBA7969ERUVhdOnT7PAIyIiIiIiKkUqXcm7dOkSatWqBT09PXTu3BmdO3cu6byIiIiIiIioCFS6kufq6oqkpCQAgJOTE54+fVqiSREREREREVHRqFTkmZqaIjY2FgAQFxeH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a3NERERERERUBMVW5GVmZuLevXvFtTkiIiIiIiIqApXvyRs9enShy588efLeyRAREREREdH7UbnI+/nnn/HZZ58pfR7Dy5cviy0pIiIiIiIiKhqVi7yqVati1KhR6NOnj8Ll0dHRcHNzK7bEiIiIiIiISH0q35Pn5uaGqKgopctlMhmEEMWSFBERERERERWNylfyFixYgIyMDKXL69Spg9zc3GJJioiIiIiIiIpG5SLP2tq6JPMgIiIiIiKiYlAiD0Nnt00iIiIiIqLSoVKRV6NGDWzatAmZmZmFxt26dQtff/015s6dWyzJERERERERkXpU6q65dOlSjBs3DsOHD4ePjw/c3d1ha2sLPT09PHv2DDExMTh16hRiYmLw7bff4ptvvinpvImIiIiIiEgBlYq85s2b49y5cwgPD8fWrVuxadMmxMXF4dWrV7CwsICrqyv69euHPn36wNTUtIRTJiIiIiIiImVUHngFALy8vODl5VVSuRAREREREdF7UumePDMzMyQlJQEAvvzyS7x48aJEkyIiIiIiIqKiUanIy8zMRGpqKgBg7dq1eP36dYkmRUREREREREWjUndNT09PdOzYEW5ubhBCwN/fH/r6+gpjV61aVawJEhERERERkepUKvI2bNiAn376CXfu3IFMJkNKSgqv5hEREREREX2AVCryrKysMGfOHACAo6Mj1q9fD3Nz8xJNjIiIiIiIiNSn1uiaABAbG1sSeRAREREREVExUGngFSIiIiIiIvo4sMgjIiIiIiIqQ1jkERERERERlSEs8oiIiIiIiMoQlQZeyX8QuiqMjY2LnAwRERERERG9H5WKPFNTU8hkMpU2mJOT814JERERERERUdGpVOQdO3ZM+ndcXBzGjx+PAQMGwNPTEwAQERGBtWvXIiAgoGSyJCIiIiIiIpWoVOQ1adJE+vf06dOxcOFC9OrVS2pr3749XFxcsHz5cvTv37/4syQiIiIiIiKVqD3wSkREBNzd3Qu0u7u7IzIysliSIiIiIiIioqJRu8izs7PDr7/+WqB92bJlsLOzK5akiIiIiIiIqGhU6q75pp9++gldunTBoUOH4OHhAQA4c+YM7ty5gx07dhR7gkRERERERKQ6ta/ktW7dGjdv3kT79u2RnJyMp0+fokOHDrh58yZat25dEjkSERERERGRior0MHQ7OzvMnj0bO3fuxK5duzBr1qwid9UMCgqCo6Mj9PT04ObmhpMnTxYav3TpUtSoUQP6+vqoVq0a1q1bJ7d8xYoVaNSoEcqXL4/y5cujZcuWBe4VnDp1KmQymdxkbW1dpPyJiIiIiIg+JEUq8k6ePIk+ffrAy8sLDx8+BACsX78ep06dUms7W7duxciRIzFx4kRcuHABjRo1gp+fH+Lj4xXGBwcHY8KECZg6dSquXr2KadOmYfjw4dizZ48UExYWhl69euHYsWOIiIhA5cqV4ePjI+WZ79NPP0VCQoI0Xb58Wc1XgYiIiIiI6MOjdpG3Y8cO+Pr6Ql9fH3/99RcyMjIAAC9evMDs2bPV2tbChQsxaNAgfPXVV6hRowYWLVoEOzs7BAcHK4xfv349hg4dih49esDJyQk9e/bEoEGDMHfuXClm48aN+Oabb/DZZ5+hevXqWLFiBXJzc3HkyBG5bWlpacHa2lqaLC0t1XwliIiIiIiIPjxqF3kzZ87Er7/+ihUrVkBbW1tq9/Lywl9//aXydjIzMxEVFQUfHx+5dh8fH4SHhytcJyMjA3p6enJt+vr6iIyMRFZWlsJ10tPTkZWVBTMzM7n2W7duwdbWFo6OjujZsyfu3r1baL4ZGRlITU2Vm4iIiIiIiD40ahd5N27cQOPGjQu0Gxsb4/nz5ypvJykpCTk5ObCyspJrt7KyQmJiosJ1fH19sXLlSkRFRUEIgfPnz2PVqlXIyspCUlKSwnXGjx+PihUromXLllJbgwYNsG7dOhw6dAgrVqxAYmIivLy88PTpU6X5BgQEwMTERJr4uAgiIiIiIvoQqV3k2djY4Pbt2wXaT506BScnJ7UTkMlkcvNCiAJt+X788Uf4+fnBw8MD2tra6NChAwYMGAAA0NTULBAfGBiIzZs3Y+fOnXJXAP38/NClSxe4uLigZcuW2LdvHwBg7dq1SvOcMGECUlJSpOn+/fvqHioREREREVGJU7vIGzp0KEaMGIGzZ89CJpPh0aNH2LhxI8aMGYNvvvlG5e1YWFhAU1OzwFW7x48fF7i6l09fXx+rVq1Ceno64uLiEB8fDwcHB5QrVw4WFhZysfPnz8fs2bNx+PBh1K5du9BcDA0N4eLiglu3bimN0dXVhbGxsdxERERERET0oVH7Yehjx45FSkoKmjVrhtevX6Nx48bQ1dXFmDFj8O2336q8HR0dHbi5uSE0NBSdOnWS2kNDQ9GhQ4dC19XW1kalSpUAAFu2bEHbtm2hofFPvTpv3jzMnDkThw4dgru7+ztzycjIwLVr19CoUSOV8yciIiIiIvoQqVXk5eTk4NSpU/juu+8wceJExMTEIDc3FzVr1oSRkZHaOx89ejT69u0Ld3d3eHp6Yvny5YiPj8ewYcMA5HWRfPjwofQsvJs3byIyMhINGjTAs2fPsHDhQly5ckWum2VgYCB+/PFHbNq0CQ4ODtKVQiMjIynHMWPGoF27dqhcuTIeP36MmTNnIjU1Ff3791f7GIiIiIiIiD4kahV5mpqa8PX1xbVr12BmZqbSVbLC9OjRA0+fPsX06dORkJCAWrVqYf/+/bC3twcAJCQkyD0zLycnBwsWLMCNGzegra2NZs2aITw8HA4ODlJMUFAQMjMz0bVrV7l9TZkyBVOnTgUAPHjwAL169UJSUhIsLS3h4eGBM2fOSPslIiIiIiL6WMmEEEKdFerVq4c5c+agRYsWJZXTRyE1NRUmJiZISUnh/XlERET0QXMYv6+0UyD6aMXNaVPaKUhUrUHUHnhl1qxZGDNmDPbu3YuEhAQ+O46IiIiIiOgDovbAK61atQIAtG/fXu5RB/mPPsjJySm+7IiIiIiIiEgtahd5x44dK4k8Pl6ZaUBmwWf0QaYJaOvJxykj0wC09YsYmw5AWY9bGaBjULTYrFeAyFWeh45hEWNfA6KQPwSoE6ttAOT/oSE7A8jNLp5YLX0gf7TW7EwgN6uYYvUADU31Y3OygJxM5bGauoCmVhFis4GcjEJidQBNbfVjc3OA7NfKYzW0AS2dIsTmAtmviilWC9DSzfu3EEBWevHEqvW95zlCcSzPEWrH8hzx/7E8RxQWq4+81zEXGsiAjtSuhwzIlHzvBWR4Dd0ixeoiExpQ/r1/Bb0PIFYXQN73XgdZ0ITy84k6sa+hA/H/neW0kQ0tKD+fqBObAR3kFiFWC9nQLiQ2E9rIgabasZrIgQ6Un6eyoIXs/y811InVQC50ofw8lQ0tZBUhVoZc6BU19u3vVGmeIwo7F7xB7SKvSZMm6q5Sti2oBugqeHh7VR+g92//zM/7RPmbat8QGPhGX/lFLkD6U8Wxtq7AkLB/5pc2AFLiFcdaVgeGn/1nfkUz4Ml1xbEmlYFRl/+ZX+0HPLqgONbAHBh795/5DV2Be6cUx2obABMT/pnf1he4dVhxLABMTfnn37uGADG/K4/94dE/P/j2jAQublIe+/0dwPD/n6V46Afg3ErlsSMuAeX/fxCeo9OB8CXKY785A1SokffvkwuA43OUxw4+ClR0y/v32WAgdLLy2P57Acf/f6RH1Bpg/xjlsV9sA5x98/59aRvweyHPq+y2Bvj0/x9Zcn0P8NsA5bEdggDX3nn/vnME2NRdeWzr+UD9wXn/vhcOrG2rPPbz6YD3iLx/J0QDK5orj20yHmg2Ie/fSTeAIA/lsV7/A3xm5v075T7wcyHPx6z3FdBmQd6/058C86ooj63zBdApOO/fWenAbFvlsTU7AN3X/TNfWCzPEXl4jvgHzxF5eI7IU8zniGv//7vxYq4TOmTOlNr/1P0elWRJCjd7M7cifDLnSfN/6EyCs8ZDhbEPhAUaZiyW5rfpTEcdjbsKY5+KcnDLWCbNr9WZCw+Nawpj04UuamasluaDtRehuWa0wlgAcHj9z/d8oXYQ2mhGKo2t8XqVVBTO1g5BV80TSmPrvv4Vyci7/2mS1gb00wpVGtsw42c8EJYAgDFaWzFUS/n9kJ9nBOKWyHss2HCt3RiptVNpbPuMGbgk8j6LAzUP4AftzUpje2ZOwpncmgCAXppHMUN7jdLYgZnf41iuKwCgo+ZpzNdepjT2m0x/7M/N+575apxDkM5ipbFjsoZie05e3dBY4xJW68xTGvtj1gCsz/EBANTXuI4tOjOVxs7O6oXlOe0AALVksfhD90elsYuyO2NRdt5gjJ/IHiFUd6zS2GXZbRCQnXdOqyh7ilO6I97Y6VvBpXmOyFBtOBW1i7wTJ5R/AQCgcePG6m6SSsqT68BUE9ViU+JVj01/qnpsVrrqsYB6sYV9Sd5W2JfvbYX9x/+2wn5QvK2wHypvK+wH0NsK+2H1tt8GFP6j7U2/f1P4j8E37R9T+I/MN4VOLvzH65uOzyn8R/GbwpcU/mP7TedWFv4jvqx41/eJ54h/8ByRh+eIPOdW/vMDjojoI6T26JpvPnRc2sgb9+b9V+7Jk0a2efJI8cg2pdUVS50fNUQk74dHBds+kq5YCmPVKYiISF7+VeMy0l2zxuSDANhdUz6W3TUBdtdUJfba9FbywaXYXTM1NRUmlrbvHF1T7St5z549k5vPysrChQsX8OOPP2LWrFnqbu7jp2Mof49IYXHqbFPlWIN3xxCRat713ZPJSvC7XEKxRPR+1Pnef8DniDeLnze9WZi9izqxbxaSH0NsJrQBaBd7bNYbhUNpxWa/UUAVZ2wONPEKCsaleM/YXGgo/by+T6x4n9jCvn//9jlCR7ULamoXeSYmBf8y/Pnnn0NXVxejRo1CVFSUupskIiIiIiKiYqL2c/KUsbS0xI0bN4prc0RERERERFQEal/Ju3Tpkty8EAIJCQmYM2cO6tSpU2yJERERERERkfrULvI+++wzyGQyvD1ei4eHB1atWlVsiREREREREZH61C7yYmNj5eY1NDRgaWkJPT3VbmQkIiIiIiKikqN2kWdvb1+g7fnz5yzyiIiIiIiIPgBqD7wyd+5cbN26VZrv3r07zMzMULFiRVy8eLFYkyMiIiIiIiL1qF3kLVu2DHZ2dgCA0NBQhIaG4uDBg/Dz88P3339f7AkSERERERGR6tTurpmQkCAVeXv37kX37t3h4+MDBwcHNGjQoNgTJCIiIiIiItWpfSWvfPnyuH//PgDg4MGDaNmyJYC8Rynk5Kj2BHYiIiIiIiIqGWpfyevcuTO++OILVK1aFU+fPoWfnx8AIDo6Gp988kmxJ0hERERERESqU7vI++mnn+Dg4ID79+8jMDAQRkZGAPK6cX7zzTfFniARERERERGpTu0iT1tbG2PGjCnQPnLkyOLIh4iIiIiIiN6D2kVevpiYGMTHxyMzM1OuvX379u+dFBERERERERWN2kXe3bt30alTJ1y+fBkymQxCCACATCYDAA6+QkREREREVIrUHl1zxIgRcHR0xN9//w0DAwNcvXoVJ06cgLu7O8LCwkogRSIiIiIiIlKV2lfyIiIicPToUVhaWkJDQwMaGhpo2LAhAgIC4O/vjwsXLpREnkRERERERKQCta/k5eTkSCNqWlhY4NGjRwAAe3t73Lhxo3izIyIiIiIiIrWofSWvVq1auHTpEpycnNCgQQMEBgZCR0cHy5cvh5OTU0nkSERERERERCpSu8ibNGkS0tLSAAAzZ85E27Zt0ahRI5ibm2Pr1q3FniARERERERGpTu0iz9fXV/q3k5MTYmJikJycjPLly0sjbBIREREREVHpUPuevHy3b9/GoUOH8OrVK5iZmRVnTkRERERERFREahd5T58+RYsWLeDs7IzWrVsjISEBAPDVV1/hu+++K/YEiYiIiIiISHVqF3mjRo2CtrY24uPjYWBgILX36NEDBw8eLNbkiIiIiIiISD1q35N3+PBhHDp0CJUqVZJrr1q1Ku7du1dsiREREREREZH61L6Sl5aWJncFL19SUhJ0dXWLJSkiIiIiIiIqGrWLvMaNG2PdunXSvEwmQ25uLubNm4dmzZoVa3JERERERESkHrW7a86bNw9NmzbF+fPnkZmZibFjx+Lq1atITk7G6dOnSyJHIiIiIiIiUpHaV/Jq1qyJS5cuoX79+vj888+RlpaGzp0748KFC6hSpYraCQQFBcHR0RF6enpwc3PDyZMnC41funQpatSoAX19fVSrVk3uqmK+HTt2oGbNmtDV1UXNmjWxa9eu994vERERERHRx0DtK3kAYG1tjWnTpr33zrdu3YqRI0ciKCgI3t7eWLZsGfz8/BATE4PKlSsXiA8ODsaECROwYsUK1KtXD5GRkRg8eDDKly+Pdu3aAQAiIiLQo0cPzJgxA506dcKuXbvQvXt3nDp1Cg0aNCjSfomIiIiIiD4WMiGEUHel169f49KlS3j8+DFyc3PllrVv317l7TRo0AB169ZFcHCw1FajRg107NgRAQEBBeK9vLzg7e2NefPmSW0jR47E+fPncerUKQB5j3JITU3FgQMHpJhWrVqhfPny2Lx5c5H2CwAZGRnIyMiQ5lNTU2FnZ4eUlBQYGxurfMwlbqpJaWdA9PGamlLaGRQvng+Iiq6MnQ8cxu8r7RSIPlpxc9qUdgqS1NRUmJiYvLMGUftK3sGDB9GvXz8kJSUVWCaTyZCTk6PSdjIzMxEVFYXx48fLtfv4+CA8PFzhOhkZGdDT05Nr09fXR2RkJLKysqCtrY2IiAiMGjVKLsbX1xeLFi0q8n4BICAgoFiuXhIREREREZUkte/J+/bbb9GtWzckJCQgNzdXblK1wAPyHrmQk5MDKysruXYrKyskJiYqXMfX1xcrV65EVFQUhBA4f/48Vq1ahaysLKnoTExMLHSbRdkvAEyYMAEpKSnSdP/+fZWPlYiIiIiI6N+i9pW8x48fY/To0QWKpKKSyWRy80KIAm35fvzxRyQmJsLDwwNCCFhZWWHAgAEIDAyEpqamWttUZ78AoKury+cAEhERERHRB0/tK3ldu3ZFWFjYe+/YwsICmpqaBa6ePX78WGkBqa+vj1WrViE9PR1xcXGIj4+Hg4MDypUrBwsLCwB5g8IUts2i7JeIiIiIiOhjofaVvF9++QXdunXDyZMn4eLiAm1tbbnl/v7+Km1HR0cHbm5uCA0NRadOnaT20NBQdOjQodB1tbW1UalSJQDAli1b0LZtW2ho5NWrnp6eCA0Nlbsv7/Dhw/Dy8nrv/RIREREREX3o1C7yNm3ahEOHDkFfXx9hYWFyXRxlMpnKRR4AjB49Gn379oW7uzs8PT2xfPlyxMfHY9iwYQDy7oN7+PCh9Cy8mzdvIjIyEg0aNMCzZ8+wcOFCXLlyBWvXrpW2OWLECDRu3Bhz585Fhw4d8Pvvv+PPP/+URt9UZb9EREREREQfK7WLvEmTJmH69OkYP368dPWsqHr06IGnT59i+vTpSEhIQK1atbB//37Y29sDABISEhAfHy/F5+TkYMGCBbhx4wa0tbXRrFkzhIeHw8HBQYrx8vLCli1bMGnSJPz444+oUqUKtm7dKj0jT5X9EhERERERfazUfk6emZkZzp07hypVqpRUTh8FVZ9R8a/jc7GIiq6MPReL5wOi91DGzgd8Th5R0X2Mz8lT+1Jc//79sXXr1vdKjoiIiIiIiEqG2t01c3JyEBgYiEOHDqF27doFBl5ZuHBhsSVHRERERERE6lG7yLt8+TJcXV0BAFeuXJFbVthz5oiIiIiIiKjkqV3kHTt2rCTyICIiIiIiomLwfsNjEhERERER0QeFRR4REREREVEZwiKPiIiIiIioDGGRR0REREREVIawyCMiIiIiIipDWOQRERERERGVISzyiIiIiIiIyhAWeURERERERGUIizwiIiIiIqIyhEUeERERERFRGcIij4iIiIiIqAxhkUdERERERFSGsMgjIiIiIiIqQ1jkERERERERlSEs8oiIiIiIiMoQFnlERERERERlCIs8IiIiIiKiMoRFHhERERERURnCIo+IiIiIiKgMYZFHRERERERUhrDIIyIiIiIiKkNY5BEREREREZUhLPKIiIiIiIjKEBZ5REREREREZQiLPCIiIiIiojKERR4REREREVEZwiKPiIiIiIioDGGRR0REREREVIawyCMiIiIiIipDWOQRERERERGVIaVe5AUFBcHR0RF6enpwc3PDyZMnC43fuHEj6tSpAwMDA9jY2GDgwIF4+vSptLxp06aQyWQFpjZt2kgxU6dOLbDc2tq6xI6RiIiIiIjo31KqRd7WrVsxcuRITJw4ERcuXECjRo3g5+eH+Ph4hfGnTp1Cv379MGjQIFy9ehW//fYbzp07h6+++kqK2blzJxISEqTpypUr0NTURLdu3eS29emnn8rFXb58uUSPlYiIiIiI6N9QqkXewoULMWjQIHz11VeoUaMGFi1aBDs7OwQHByuMP3PmDBwcHODv7w9HR0c0bNgQQ4cOxfnz56UYMzMzWFtbS1NoaCgMDAwKFHlaWlpycZaWliV6rERERERERP+GUivyMjMzERUVBR8fH7l2Hx8fhIeHK1zHy8sLDx48wP79+yGEwN9//43t27fLdcV8W0hICHr27AlDQ0O59lu3bsHW1haOjo7o2bMn7t69W2i+GRkZSE1NlZuIiIiIiIg+NKVW5CUlJSEnJwdWVlZy7VZWVkhMTFS4jpeXFzZu3IgePXpAR0cH1tbWMDU1xZIlSxTGR0ZG4sqVK3LdOQGgQYMGWLduHQ4dOoQVK1YgMTERXl5ecvf2vS0gIAAmJibSZGdnp+YRExERERERlbxSH3hFJpPJzQshCrTli4mJgb+/PyZPnoyoqCgcPHgQsbGxGDZsmML4kJAQ1KpVC/Xr15dr9/PzQ5cuXeDi4oKWLVti3759AIC1a9cqzXPChAlISUmRpvv376tzmERERERERP8KrdLasYWFBTQ1NQtctXv8+HGBq3v5AgIC4O3tje+//x4AULt2bRgaGqJRo0aYOXMmbGxspNj09HRs2bIF06dPf2cuhoaGcHFxwa1bt5TG6OrqQldXV5VDIyIiIiIiKjWldiVPR0cHbm5uCA0NlWsPDQ2Fl5eXwnXS09OhoSGfsqamJoC8K4Bv2rZtGzIyMtCnT5935pKRkYFr167JFYlEREREREQfo1Ltrjl69GisXLkSq1atwrVr1zBq1CjEx8dL3S8nTJiAfv36SfHt2rXDzp07ERwcjLt37+L06dPw9/dH/fr1YWtrK7ftkJAQdOzYEebm5gX2O2bMGBw/fhyxsbE4e/YsunbtitTUVPTv379kD5iIiIiIiKiElVp3TQDo0aMHnj59iunTpyMhIQG1atXC/v37YW9vDwBISEiQe2begAED8OLFC/zyyy/47rvvYGpqiubNm2Pu3Lly27158yZOnTqFw4cPK9zvgwcP0KtXLyQlJcHS0hIeHh44c+aMtF8iIiIiIqKPlUy83c+RVJKamgoTExOkpKTA2Ni4tNP5x1ST0s6A6OM1NaW0MyhePB8QFV0ZOx84jN9X2ikQfbTi5ih/XNu/TdUapNRH1yQiIiIiIqLiwyKPiIiIiIioDGGRR0REREREVIawyCMiIiIiIipDWOQRERERERGVISzyiIiIiIiIyhAWeURERERERGUIizwiIiIiIqIyhEUeERERERFRGcIij4iIiIiIqAxhkUdERERERFSGsMgjIiIiIiIqQ1jkERERERERlSEs8oiIiIiIiMoQFnlERERERERlCIs8IiIiIiKiMoRFHhERERERURnCIo+IiIiIiKgMYZFHRERERERUhrDIIyIiIiIiKkNY5BEREREREZUhLPKIiIiIiIjKEBZ5REREREREZQiLPCIiIiIiojKERR4REREREVEZwiKPiIiIiIioDGGRR0REREREVIawyCMiIiIiIipDWOQRERERERGVISzyiIiIiIiIyhAWeURERERERGUIizwiIiIiIqIyhEUeERERERFRGcIij4iIiIiIqAxhkUdERERERFSGlHqRFxQUBEdHR+jp6cHNzQ0nT54sNH7jxo2oU6cODAwMYGNjg4EDB+Lp06fS8jVr1kAmkxWYXr9+/V77JSIiIiIi+hiUapG3detWjBw5EhMnTsSFCxfQqFEj+Pn5IT4+XmH8qVOn0K9fPwwaNAhXr17Fb7/9hnPnzuGrr76SizM2NkZCQoLcpKenV+T9EhERERERfSy0SnPnCxcuxKBBg6QibdGiRTh06BCCg4MREBBQIP7MmTNwcHCAv78/AMDR0RFDhw5FYGCgXJxMJoO1tXWx7RcAMjIykJGRIc2npKQAAFJTU9U44n9BhijtDIg+Xh/a9/l98XxAVHRl7HyQm5Fe2ikQfbQ+pN/7+bkI8Y7/40UpycjIEJqammLnzp1y7f7+/qJx48YK1zl9+rTQ0dER+/btE7m5uSIxMVE0btxYDB06VIpZvXq10NTUFJUrVxYVK1YUbdq0EX/99dd77VcIIaZMmSIAcOLEiRMnTpw4ceLEiVOpTvfv3y+01iq1K3lJSUnIycmBlZWVXLuVlRUSExMVruPl5YWNGzeiR48eeP36NbKzs9G+fXssWbJEiqlevTrWrFkDFxcXpKam4ueff4a3tzcuXryIqlWrFmm/ADBhwgSMHj1ams/NzUVycjLMzc0hk8mK8hLQf0xqairs7Oxw//59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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rows = np.genfromtxt('build/176k_stage_shift_summary.txt', delimiter=',',\n", + " names=True, dtype=None, encoding='utf-8')\n", + "print(rows)\n", + "\n", + "labels = [r['stage'] for r in rows]\n", + "measured = np.array([r['measured_ratio'] for r in rows])\n", + "types = [r['type'] for r in rows]\n", + "bar_colors = ['tab:orange' if t == 'hardcoded' else 'tab:blue' for t in types]\n", + "\n", + "plt.figure(figsize=(9, 5))\n", + "x = np.arange(len(labels))\n", + "plt.bar(x, measured, color=bar_colors)\n", + "plt.axhline(RATE_RATIO, color='tab:orange', ls='--', label='hard-coded expected (%.4f)' % RATE_RATIO)\n", + "plt.axhline(1.0, color='tab:blue', ls='--', label='Fs-derived expected (1.0)')\n", + "plt.xticks(x, labels, rotation=20, ha='right', fontsize=8)\n", + "plt.ylim(0.85, 1.05)\n", + "plt.ylabel('measured f(176.4k) / f(192k)')\n", + "plt.title('Stage frequency shift: 176.4 kHz relative to 192 kHz')\n", + "plt.legend()\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "0a6b7302", + "metadata": {}, + "source": [ + "## Conclusion\n", + "\n", + "* **CW audio filters** and **EQ bands** track the `0.91875` ratio — their corner\n", + " and center frequencies drop ~8% because their coefficient tables are frozen at\n", + " the 24 kHz design rate.\n", + "* The **AM audio lowpass** (and, by the same mechanism, the decimation /\n", + " interpolation / convolution filters) stays put in Hz.\n", + "\n", + "Running the radio at 176.4 kHz with the DSP unchanged therefore works, with the\n", + "only penalty being the ~8% mislabeling/narrowing of the hard-coded CW and EQ\n", + "filters. See `docs/RX_DSP_Chain_Parameters.md` for the full stage inventory.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d0082790", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From ad2c3d1721d5d5ce1eb66bd3c6b83b253654fa90 Mon Sep 17 00:00:00 2001 From: Oliver King Date: Wed, 29 Jul 2026 05:45:05 -0400 Subject: [PATCH 08/25] Generate the sample-rate-dependent RX/TX filters at run time Several filter stages shipped coefficient tables designed offline for one audio sample rate (24 ksps: 192 ksps at the ADC, decimated by 8). Run at 176.4 ksps their corners and centres scaled by 176400/192000 = 0.91875, so a CW filter labelled 2.0 kHz cut at 1.84 kHz and the 4000 Hz equaliser cell peaked at 3675 Hz. They are now generated from an analog design spec on every rate change, which puts each response back on its labelled frequency at any rate. The filter families are unchanged - what was a 12 pole Chebyshev is still a 12 pole Chebyshev - because the design constants were recovered from the shipped tables rather than guessed: * The CW tables measure 0.0200 dB of passband ripple and fit cheby1(12, 0.02) to 0.013 dB RMSE, so they are Chebyshev type I with the ripple edge as the natural design parameter. * Every equaliser biquad has b1 = 0 and b2 = -b0, putting its zeros at z = +/-1. That is the bilinear image of an analog bandpass, so an inverse bilinear transform recovers the analog prototype exactly. code/tools/extract_filter_prototypes.py does that recovery and prints the C literals; it reads the original tables, kept verbatim as test fixtures in code/test/reference_filters.cpp. Prewarping the design frequency cancels the bilinear transform's frequency compression, which is what makes the result rate independent rather than merely re-derived. Also fixed while in here: * The transmit decimate-by-2 feeding the Hilbert stage was flat to 0.425*Fs where a decimate-by-2 needs its stopband below 0.25*Fs, so 6-9.5 kHz folded back into the transmit audio unattenuated. Transmitted audio will differ from previous releases even at 192 ksps. * The AM DC blocker's pole was a fixed 0.99 and its state a file-scope static shared across all three ReceiveFilterConfig instances. * ApplyEQBandFilter scrubbed the receive instance's state even on the transmit path. Deliberately not changed: the zoom FFT tables and the transmit decimation, interpolation and Hilbert filters. Their corners are specified as a fraction of Fs, which is correct for anti-alias and anti-image filtering at any rate. Verification is in code/test/FilterDesign_test.cpp, which measures each generated filter against the table it replaces - CW audio within 0.05 dB, equaliser cells within 0.01 dB - and then checks that every corner holds across the two rates where it used to move by 8.125%. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_015tsW6HGrRthm1is6U8tFYG --- code/docs/Sample_Rate_Independence_Plan.md | 146 ++++ code/src/PhoenixSketch/DSP.cpp | 12 +- code/src/PhoenixSketch/DSP_FFT.cpp | 60 +- code/src/PhoenixSketch/DSP_FFT.h | 45 ++ code/src/PhoenixSketch/DSP_FIR.cpp | 736 +++++++++--------- code/src/PhoenixSketch/SDT.h | 20 + code/test/CMakeLists.txt | 7 + code/test/FilterDesign_test.cpp | 683 ++++++++++++++++ code/test/SignalProcessing_test.cpp | 70 +- code/test/TransmitChain_test.cpp | 154 ++++ code/test/analyze_transmit_filter_chain.ipynb | 4 +- code/test/compare_176k_vs_192k.ipynb | 543 +++++++++++-- code/test/reference_filters.cpp | 332 ++++++++ code/test/reference_filters.h | 52 ++ code/tools/extract_filter_prototypes.py | 278 +++++++ 15 files changed, 2647 insertions(+), 495 deletions(-) create mode 100644 code/docs/Sample_Rate_Independence_Plan.md create mode 100644 code/test/FilterDesign_test.cpp create mode 100644 code/test/reference_filters.cpp create mode 100644 code/test/reference_filters.h create mode 100644 code/tools/extract_filter_prototypes.py diff --git a/code/docs/Sample_Rate_Independence_Plan.md b/code/docs/Sample_Rate_Independence_Plan.md new file mode 100644 index 0000000..96c9920 --- /dev/null +++ b/code/docs/Sample_Rate_Independence_Plan.md @@ -0,0 +1,146 @@ +# Sample-Rate-Independent DSP Filters + +## Problem + +Phoenix can run at 192 ksps or 176.4 ksps, selected at run time and persisted. +Most of the DSP chain derives its coefficients from `SR[SampleRate].rate`, but a +handful of stages shipped **frozen coefficient tables** designed offline for one +rate — 24 kHz audio, i.e. 192 ksps decimated by 8. Run at 22.05 kHz instead, +every corner and centre frequency in those tables scaled by +`176400 / 192000 = 0.91875`, so a filter labelled 2.0 kHz actually cut at +1.84 kHz and the "4000 Hz" equaliser cell peaked at 3675 Hz. + +The stages affected were the CW audio filters, the CW decoder input filter, the +14-band equaliser (receive and transmit), the AM DC blocker, and the transmit +filter that sets the audio bandwidth. + +## Approach + +Each affected stage is now generated at run time from an **analog design spec** +rather than carrying a digital coefficient table. The spec is in Hz and does not +depend on the sample rate; the sample rate only enters through the bilinear +transform that discretises it. Prewarping the design frequency +(`wc = 2*Fs*tan(pi*f/Fs)`) cancels the frequency compression the bilinear +transform introduces, so each response lands on its labelled frequency at any +rate. + +The filter families are unchanged. What was a 12-pole Chebyshev is still a +12-pole Chebyshev; the equaliser cells still have exactly the shape they had. + +`ChangeSampleRate()` calls `InitializeSignalProcessing()`, which calls +`InitializeFilters()` and `InitializeTransmitFilters()`. Both of those now +regenerate their coefficient tables as their first step, so a rate change +retunes the whole chain with no extra plumbing. + +## What each stage does now + +| Stage | Design | Where | +|---|---|---| +| CW audio filters ×5 | Chebyshev type I, order 12, 0.02 dB ripple. Ripple edges 807.1 / 1038.0 / 1269.0 / 1731.5 / 1963.2 Hz | `CalcChebyshevILowpassCoeffs()`, `DSP_FIR.cpp` | +| Equaliser cells ×14 | 4 stagger-tuned analog bandpass sections per cell, peak normalised to unity | `CalcBandpassCascadeCoeffs()`, `DSP_FIR.cpp` | +| CW decoder input FIR | 64-tap Kaiser windowed sinc, −6 dB at 1749 Hz, DC gain normalised to 1 | `CalcFIRCoeffs()` | +| AM DC blocker | One pole highpass, `pole = exp(-2*pi*38/Fs)` | `InitializeFilters()`, `DSP_FFT.cpp` | +| Transmit audio bandwidth (`FIR_int3`) | 48-tap Kaiser lowpass, −6 dB at 3040 Hz (−3 dB near 2.76 kHz) | `CalcFIRCoeffs()` | +| Transmit decimate-by-2 (`coeffs12K_8K`) | 48-tap Kaiser lowpass, −6 dB at 3500 Hz | `CalcFIRCoeffs()` | + +### Where the design constants came from + +The Chebyshev order and ripple, and the equaliser prototypes, were recovered +from the frozen tables themselves rather than guessed: + +- The CW tables' passband ripple measures 0.0200 dB exactly, and `cheby1(12, + 0.02, Wn)` fits them to 0.013 dB RMSE. The ripple edge — the natural parameter + for the family — is the highest frequency at which the response is still at or + above its DC level. +- Every equaliser biquad has `b1 = 0` and `b2 = -b0`, putting its zeros at + `z = ±1`. That is the bilinear image of the analog bandpass + `(wn/Q)s / (s^2 + (wn/Q)s + wn^2)`, so an inverse bilinear transform recovers + the analog `(wn, Q)` of each section exactly. + +`code/tools/extract_filter_prototypes.py` does this. It reads +`code/test/reference_filters.cpp` and prints the C literals that live in +`DSP_FIR.cpp`. Re-run it if a reference table ever changes. + +## What deliberately was not changed + +**The zoom-FFT `mag_coeffs` tables.** Their comments say "sample rate 48k" and +they are applied at the full ADC rate, which looks like a bug. It is not: their +−6 dB points measure at `1.01 × (Fs/2/zoom)` for every zoom index, i.e. they are +specified purely as a fraction of `Fs`. That is exactly right for a decimation +anti-alias filter, and they are correct at any sample rate. (Indices 8–10 are +duplicates of index 7 and genuinely wrong, but they sit beyond +`SPECTRUM_ZOOM_MAX` and are never reached.) + +**The transmit decimation and interpolation FIRs** `coeffs192K_10K_LPF_FIR` and +`coeffs48K_8K_LPF_FIR`, and the ±45° Hilbert pair. These are also normalised to +`Fs` — corners at 0.057 and 0.127 `Fs`, and a 90° band spanning 0.0167 to +0.45 `Fs` — so they scale correctly by construction. + +The general rule: a filter whose job is anti-aliasing or anti-imaging should +scale with `Fs` and needs no attention. A filter that defines an audio-band +response has to be anchored in Hz. + +## One deliberate behaviour change + +`coeffs12K_8K_LPF_FIR` feeds a decimate-by-2 stage, so its stopband has to sit +below a quarter of its input rate. The table it replaces was flat to +0.425 `Fs` and −60 dB only at 0.478 `Fs`, giving essentially no protection: +everything between roughly 6 and 9.5 kHz folded back into the transmit audio +unattenuated. The generated filter is a real lowpass, so this aliasing is gone. +Transmitted audio therefore differs from previous releases even at 192 ksps. + +`TransmitChain176k.DecimatorStopsBeforeTheFoldPoint` and +`FilterDesign.TransmitDecimatorRejectsAliases` pin the new behaviour and record +the old. + +## Validation + +`code/test/FilterDesign_test.cpp` (target `all_FilterDesign_tests`) answers two +questions. It measures responses by correlating the filter output against a +complex exponential through a Hann window, which is accurate to well under +0.01 dB — peak picking, as the older sweep tests use, can be a decibel out when +there are few samples per cycle. + +**Does the generated filter still do what the frozen table did?** Every response +is measured against the original coefficients, kept verbatim in +`code/test/reference_filters.cpp`, at 192 ksps: + +| Stage | Agreement with the frozen table | +|---|---| +| CW audio filters | within 0.05 dB | +| Equaliser cells | within 0.01 dB | +| CW decode FIR | −6 dB corner within 2 % | +| Transmit audio bandwidth | −3 dB corner within 2 % | +| Flat equaliser sum | within 0.05 dB | + +**Do the filters hold their frequencies across a rate change?** +`FilterDesign.GeneratedCornersHoldAcrossRates` writes +`filtercmp_rate_summary.txt`. Every ratio now reads 1.00 where it used to read +0.9187: + +``` +CW_audio_2000_minus6dB,fs_derived,2064.4,2063.5,0.9996,1.0000 +EQ_band13_4000_peak,fs_derived,4000.0,4000.0,1.0000,1.0000 +TX_audio_bandwidth_minus3dB,fs_derived,2776.1,2797.5,1.0077,1.0000 +CW_decode_FIR_minus6dB,fs_derived,1748.0,1748.1,1.0000,1.0000 +``` + +`FilterDesign.FlatEqualiserSumStaysFlat` covers the property most at risk here. +`BandEQ` sums the 14 cells with alternating sign, a reconstruction that only +comes out level if every cell keeps its shape and peak gain. It is checked +through the real `BandEQ` path against the reference tables. Note the flat sum +sits at roughly +4 dB, not 0 dB — that is how the equaliser has always behaved. + +Also updated: +- `ReceiveChain176k.AllStagesHoldTheirFrequencies` (was + `HardCodedStagesShiftFsDerivedStay`) — these assertions used to encode the + shift and now assert its absence. +- `TransmitChain176k` — new suite, the transmit counterpart. +- `compare_176k_vs_192k.ipynb` — overlays the generated and frozen sweeps. + +### Running it + +```bash +cd code/test/build && cmake ../ && make -j && ctest --output-on-failure +ctest -R "FilterDesign|ReceiveChain176k|TransmitChain176k" -V +``` diff --git a/code/src/PhoenixSketch/DSP.cpp b/code/src/PhoenixSketch/DSP.cpp index 897508b..4072dae 100644 --- a/code/src/PhoenixSketch/DSP.cpp +++ b/code/src/PhoenixSketch/DSP.cpp @@ -625,7 +625,6 @@ float32_t GetSAMCarrierOffset(void){ * * @param data Pointer to the DataBlock to act upon */ -static float32_t wold = 0; void Demodulate(DataBlock *data, ReceiveFilterConfig *RXfilters){ // Demodulation: our time domain output is a combination of the real part (left channel) // AND the imaginary part (right channel) of the second half of the FFT_buffer @@ -651,9 +650,10 @@ void Demodulate(DataBlock *data, ReceiveFilterConfig *RXfilters){ if (isnan(audiotmp)){ audiotmp = 0.0; } - w = audiotmp + wold * 0.99f; // Response to below 200Hz - data->I[i] = w - wold; - wold = w; + // One pole DC blocker, cornered at RXfilters->amDCBlockCorner_Hz. + w = audiotmp + RXfilters->amDCBlockState * RXfilters->amDCBlockPole; + data->I[i] = w - RXfilters->amDCBlockState; + RXfilters->amDCBlockState = w; } arm_biquad_cascade_df1_f32(&RXfilters->biquadAudioLowPass, data->I, data->Q, data->N); arm_copy_f32(data->Q, data->I, data->N); @@ -742,6 +742,10 @@ void PlayBuffer(DataBlock *data){ * 2) Configure the AGC * 3) Configure the noise reduction * 4) Set all arrays in DMAMEM to zero before using them + * + * InitializeFilters() and InitializeTransmitFilters() regenerate the + * sample-rate-dependent coefficient tables as their first step, so calling this + * after a rate change is all that is needed to retune the whole chain. */ void InitializeSignalProcessing(void){ InitializeFilters(ED.spectrum_zoom,&RXfilters); diff --git a/code/src/PhoenixSketch/DSP_FFT.cpp b/code/src/PhoenixSketch/DSP_FFT.cpp index e513951..7fbc89a 100644 --- a/code/src/PhoenixSketch/DSP_FFT.cpp +++ b/code/src/PhoenixSketch/DSP_FFT.cpp @@ -335,10 +335,16 @@ void UpdateFIRFilterMask(ReceiveFilterConfig *RXfilters){ * @param RXfilters Struct holding the filter variables and objects */ void InitializeFilters(uint32_t spectrum_zoom, ReceiveFilterConfig *RXfilters) { + // **************************************************************************************** + // * Regenerate the coefficient tables that are specified in Hz + // **************************************************************************************** + // Must come first: the ARM instances below are bound to these arrays. + InitializeReceiveAudioFilterCoeffs((float32_t)SR[SampleRate].rate / RXfilters->DF); + // **************************************************************************************** // * Zoom FFT: Initiate decimation and interpolation FIR RXfilters AND IIR RXfilters // **************************************************************************************** - + ZoomFFTPrep(spectrum_zoom, RXfilters); for (unsigned i = 0; i < 4 * RXfilters->IIR_biquad_Zoom_FFT_N_stages; i++) { RXfilters->biquadZoomI.pState[i] = 0.0; // set state variables to zero @@ -355,10 +361,17 @@ void InitializeFilters(uint32_t spectrum_zoom, ReceiveFilterConfig *RXfilters) { int32_t LP_F_help = bands[ED.currentBand[ED.activeVFO]].FHiCut_Hz; if (LP_F_help < -bands[ED.currentBand[ED.activeVFO]].FLoCut_Hz) LP_F_help = -bands[ED.currentBand[ED.activeVFO]].FLoCut_Hz; - SetIIRCoeffs(RXfilters->biquad_lowpass1_coeffs, - (float32_t)LP_F_help, 1.3, + SetIIRCoeffs(RXfilters->biquad_lowpass1_coeffs, + (float32_t)LP_F_help, 1.3, (float32_t)SR[SampleRate].rate / RXfilters->DF, Lowpass); + // AM DC blocker. Placing the pole at exp(-2*pi*fc/Fs) holds the corner at + // amDCBlockCorner_Hz whatever the sample rate; the fixed 0.99 this replaces + // moved with it. Drop the history along with the old pole. + RXfilters->amDCBlockPole = expf(-TWO_PI * RXfilters->amDCBlockCorner_Hz + / ((float32_t)SR[SampleRate].rate / RXfilters->DF)); + RXfilters->amDCBlockState = 0.0; + // **************************************************************************************** // * Decimate: RXfilters involved with decimate by 2 and decimate by 4 // **************************************************************************************** @@ -380,7 +393,7 @@ void InitializeFilters(uint32_t spectrum_zoom, ReceiveFilterConfig *RXfilters) { CLEAR_VAR(last_sample_buffer_R); // Equalizer RXfilters - for (size_t i = 0; i<14; i++){ + for (size_t i = 0; ieqNumStages*2; j++) { RXfilters->S_Rec[i].pState[j] = 0; RXfilters->S_Xmt[i].pState[j] = 0; @@ -390,6 +403,22 @@ void InitializeFilters(uint32_t spectrum_zoom, ReceiveFilterConfig *RXfilters) { RXfilters->S_Xmt[i].pCoeffs = *EQ_Coeffs[i]; } + // ********************************************* + // * CW audio filters and the CW decoder input filter + // ********************************************* + // These read coefficient tables that InitializeReceiveAudioFilterCoeffs() + // has just regenerated for the current sample rate, so their history has to + // go with the old coefficients - the delay line of a biquad cascade is only + // meaningful for the filter that produced it. + CLEAR_VAR(RXfilters->CW_AudioFilter1_state); + CLEAR_VAR(RXfilters->CW_AudioFilter2_state); + CLEAR_VAR(RXfilters->CW_AudioFilter3_state); + CLEAR_VAR(RXfilters->CW_AudioFilter4_state); + CLEAR_VAR(RXfilters->CW_AudioFilter5_state); + // Re-initialising also clears the FIR delay line. + arm_fir_init_f32(&RXfilters->FIR_CW_Decode, 64, CW_Filter_Coeffs2, + RXfilters->FIR_CW_Decode_state, READ_BUFFER_SIZE/RXfilters->DF); + // Interpolation RXfilters CalcFIRCoeffs(RXfilters->FIR_int1_coeffs, 48, (float32_t)(RXfilters->n_desired_BW_Hz), RXfilters->n_att_dB, Lowpass, 0.0, SR[SampleRate].rate / RXfilters->DF1); @@ -410,6 +439,13 @@ void InitializeFilters(uint32_t spectrum_zoom, ReceiveFilterConfig *RXfilters) { * @param TXfilters Struct holding the filter variables and objects */ void InitializeTransmitFilters(TransmitFilterConfig *TXfilters) { + // **************************************************************************************** + // * Regenerate the coefficient tables that are specified in Hz + // **************************************************************************************** + // Must come first: the ARM instances below are bound to these arrays. The + // transmit chain decimates by the same DF1 * DF2 the receive chain does. + InitializeTransmitFilterCoeffs((float32_t)SR[SampleRate].rate / RXfilters.DF); + // **************************************************************************************** // * Decimate by 4: 192K to 48K SPS // **************************************************************************************** @@ -784,21 +820,21 @@ void ApplyEQBandFilter(DataBlock *data, ReceiveFilterConfig *RXfilters, uint8_t if (TXRX == RX) scale = (float)ED.equalizerRec[bf] / 100.0; else scale = (float)ED.equalizerXmt[bf] / 100.0; + arm_biquad_cascade_df2T_instance_f32 *band = (TXRX == RX) ? &RXfilters->S_Rec[bf] + : &RXfilters->S_Xmt[bf]; + // Fix the weird bug where the pState array gets a nan in it upon entering loop - // after a power cycle + // after a power cycle. Scrub whichever instance is about to run - the + // transmit one needs it as much as the receive one. for (size_t i = 0; i < 2*RXfilters->eqNumStages; i++){ - if (isnan(RXfilters->S_Rec[bf].pState[i])){ - memset(RXfilters->S_Rec[bf].pState,0,sizeof(float32_t)*2*RXfilters->eqNumStages); + if (isnan(band->pState[i])){ + memset(band->pState,0,sizeof(float32_t)*2*RXfilters->eqNumStages); break; } } // Filter I with this band's biquad - if (TXRX == RX){ - arm_biquad_cascade_df2T_f32(&RXfilters->S_Rec[bf], data->I, RXfilters->eqFiltBuffer, data->N); - }else{ - arm_biquad_cascade_df2T_f32(&RXfilters->S_Xmt[bf], data->I, RXfilters->eqFiltBuffer, data->N); - } + arm_biquad_cascade_df2T_f32(band, data->I, RXfilters->eqFiltBuffer, data->N); // Scale the amplitude by the overall level scaler arm_scale_f32(RXfilters->eqFiltBuffer, (float32_t)sign*scale, RXfilters->eqFiltBuffer, data->N); // Add to the accumulator buffer diff --git a/code/src/PhoenixSketch/DSP_FFT.h b/code/src/PhoenixSketch/DSP_FFT.h index 05300be..17d9ebe 100644 --- a/code/src/PhoenixSketch/DSP_FFT.h +++ b/code/src/PhoenixSketch/DSP_FFT.h @@ -152,6 +152,51 @@ void CalcFIRCoeffs(float *coeffs_I, int numCoeffs, float32_t fc_Hz, float32_t As void SetIIRCoeffs(float32_t *coefficient_set, float32_t f0, float32_t Q, float32_t sample_rate, FilterType filter_type); +/** + * @brief Design a Chebyshev type I lowpass as a cascade of ARM biquads + * @param coeffs Output buffer, order/2 sections of 5 coefficients + * @param order Filter order, must be even + * @param ripple_dB Peak-to-peak passband ripple + * @param fRippleEdge_Hz Frequency at which the passband ripple ends + * @param Fs_Hz Sample rate the filter will run at + * @note Poles are placed in closed form and prewarped, so the response lands on + * the same frequencies at any sample rate. Normalised to unity at DC. + */ +void CalcChebyshevILowpassCoeffs(float32_t *coeffs, uint32_t order, float32_t ripple_dB, + float32_t fRippleEdge_Hz, float32_t Fs_Hz); + +/** + * @brief Design a stagger-tuned bandpass cascade as ARM biquads + * @param coeffs Output buffer, nSections sections of 5 coefficients + * @param proto Prototype sections, resonances given as fractions of fc + * @param nSections Number of sections in the cascade + * @param fc_Hz Centre frequency the cascade should peak at + * @param gain Per-section gain used to normalise the cascade peak + * @param Fs_Hz Sample rate the filter will run at + * @note Emits b0 negative and b2 positive to match the sign convention that + * ApplyEQBandFilter() depends on. + */ +void CalcBandpassCascadeCoeffs(float32_t *coeffs, const BandpassProtoSection *proto, + uint32_t nSections, float32_t fc_Hz, float32_t gain, + float32_t Fs_Hz); + +/** + * @brief Regenerate the receive audio filter tables for the current sample rate + * @param audioFs_Hz Sample rate of the decimated audio stream + * @note Called from InitializeFilters(). Covers the CW audio filters, the CW + * decoder input filter and the equaliser cells - the stages whose corners + * are specified in Hz rather than as a fraction of Fs. + */ +void InitializeReceiveAudioFilterCoeffs(float32_t audioFs_Hz); + +/** + * @brief Regenerate the transmit filter tables for the current sample rate + * @param audioFs_Hz Sample rate of the decimated audio stream + * @note Called from InitializeTransmitFilters(). Covers the two stages either + * side of the Hilbert transform. + */ +void InitializeTransmitFilterCoeffs(float32_t audioFs_Hz); + // Filter Management /** diff --git a/code/src/PhoenixSketch/DSP_FIR.cpp b/code/src/PhoenixSketch/DSP_FIR.cpp index b11e6a8..f8c32a9 100644 --- a/code/src/PhoenixSketch/DSP_FIR.cpp +++ b/code/src/PhoenixSketch/DSP_FIR.cpp @@ -26,150 +26,33 @@ If not, see . static char *dspfirfilename = nullptr; -// 12 pole Chebyshev 24KSPS 840HZ Fc CW LPF -// b0 b1 b2 -float32_t CW_AudioFilterCoeffs1[30] = { -0.001045672652953040, 0.002091345305906081, 0.001045672652953040, 1.882585857812263620, -0.886768548424075709, //0 -0.002423227458078301, 0.004846454916156603, 0.002423227458078301, 1.884529132690991200, -0.894222042523304395, //1 -0.004829291756048423, 0.009658583512096846, 0.004829291756048423, 1.889384468765871410, -0.908701635790065021, //2 -0.007653393822000297, 0.015306787644000595, 0.007653393822000297, 1.898775913252934710, -0.929389488540935838, //3 -0.010174875101599359, 0.020349750203198718, 0.010174875101599359, 1.914432845416308200, -0.955132345822705675, //4 -0.011739876965796040, 0.023479753931592080, 0.011739876965796040, 1.937529526031872560, -0.984489033895056709, //5 -}; -// 12 pole Chebyshev 24KSPS 1.08KHZ Fc CW LPF -// b0 b1 b2 -a1 -a2 -float32_t CW_AudioFilterCoeffs2[30] = { -0.001708601686569496, 0.003417203373138993, 0.001708601686569496, 1.849644394115178780, -0.856478800861456779, //0 -0.003960135567320385, 0.007920271134640770, 0.003960135567320385, 1.850063728088927160, -0.865904270358208716, //1 -0.007896110863694851, 0.015792221727389703, 0.007896110863694851, 1.852618721585121530, -0.884203165039901040, //2 -0.012527469693062619, 0.025054939386125238, 0.012527469693062619, 1.860233461308907320, -0.910343340081157804, //3 -0.016688500558372531, 0.033377001116745061, 0.016688500558372531, 1.876160539268528550, -0.942914541502018699, //4 -0.019316527156182765, 0.038633054312365529, 0.019316527156182765, 1.902936487120827410, -0.980202595745558458 //5 -}; - -// 12 pole Chebyshev 24KSPS 1.32KHZ Fc CW LPF -// b0 b1 b2 -a1 -a2 -float32_t CW_AudioFilterCoeffs3[30] = { - 0.002526205346474786, 0.005052410692949571, 0.002526205346474786, 1.816854531214501690, -0.826959352600400766, //0 - 0.005854757343402014, 0.011709514686804028, 0.005854757343402014, 1.814915209210166580, -0.838334238583774649, //1 - 0.011674800234072332, 0.023349600468144664, 0.011674800234072332, 1.813684163704128990, -0.860383364640418424, //2 - 0.018533877701340070, 0.037067755402680140, 0.018533877701340070, 1.817698744288731130, -0.891834255094091533, //3 - 0.024728610789430342, 0.049457221578860684, 0.024728610789430342, 1.832107309882979650, -0.931021753040700895, //4 - 0.028704640967983489, 0.057409281935966977, 0.028704640967983489, 1.861191141633472320, -0.976009705505406111 //5 -}; - -// 12 pole Chebyshev 24KSPS 1.80KHZ Fc CW LPF -// b0 b1 b2 -a1 -a2 -float32_t CW_AudioFilterCoeffs4[30] = { -0.004619667602890411, 0.009239335205780823, 0.004619667602890411, 1.751482350458491770, -0.769961020870053470, //0 -0.010697965393132404, 0.021395930786264807, 0.010697965393132404, 1.742463879042789540, -0.785255740615319220, //1 -0.021310846818856619, 0.042621693637713239, 0.021310846818856619, 1.729488942947587930, -0.814732330223014500, //2 -0.033824238912754968, 0.067648477825509937, 0.033824238912754968, 1.721199473469051890, -0.856496429120071845, //3 -0.045209476618282299, 0.090418953236564598, 0.045209476618282299, 1.727486625620660020, -0.908324532093789383, //4 -0.052728229128958234, 0.105456458257916469, 0.052728229128958234, 1.757051114234371440, -0.967964030750204318 //5 -}; - -// 12 pole Chebyshev 24KSPS 2.0KHZ Fc CW LPF -// b0 b1 b2 -a1 -a2 -float32_t CW_AudioFilterCoeffs5[30] = { -0.005895699392492981, 0.011791398784985962, 0.005895699392492981, 1.718777480550920830, -0.742360278120892780, //0 -0.013642906943512292, 0.027285813887024585, 0.013642906943512292, 1.705095001540683390, -0.759666629314732500, //1 -0.027147671747232219, 0.054295343494464438, 0.027147671747232219, 1.684291091887056610, -0.792881778875985654, //2 -0.043053647931610858, 0.086107295863221717, 0.043053647931610858, 1.667486185665950420, -0.839700777392394016, //3 -0.057557746560508744, 0.115115493121017487, 0.057557746560508744, 1.667342067521431660, -0.897573053763466633, //4 -0.067256465545230904, 0.134512931090461807, 0.067256465545230904, 1.695113706470476880, -0.964139568651400491, //5 -}; - -// High pass 4.79KHz Butterworth 1 pole -float32_t HP_DC_Filter_Coeffs2[5] = { - 0.927176191943378969, -0.927176191943378969, 0.000000000000000000, 0.854352383886757938, 0.000000000000000000, -}; - -float32_t HP_DC_Filter_Coeffs[15] = { //2KHz - 0.939110434187240273, -1.878220868374480550, 0.939110434187240273, 1.876175647911858760, -0.880266088837102556, - 0.954420583383374654, -1.908841166766749310, 0.954420583383374654, 1.906762603441262800, -0.910919730092235702, - 0.982153973603849595, -1.964307947207699190, 0.982153973603849595, 1.962168985344285850, -0.966446909071112525 -}; - -// == CW FIR 64 taps 24ksps Fc = 1560 Parks-McCellan Sinc window (Constant group delay) -float32_t CW_Filter_Coeffs2[64] = { - 14.11649337493100380E-6, - 26.00645116880263790E-6, - 36.68870031589199950E-6, - 13.68412619593411960E-6, --78.97178111806820770E-6, --270.5543007271240870E-6, --560.2226272240251320E-6, --895.0536349136069700E-6, --0.001157191426061149, --0.001175458847337361, --766.0401423335821390E-6, - 198.2564157371532760E-6, - 0.001706652959686771, - 0.003541671954793736, - 0.005255696919539346, - 0.006219189024066382, - 0.005752477145569307, - 0.003326972676367999, --0.001205019703557342, --0.007414366866133686, --0.014201761944376253, --0.019862184667500584, --0.022329078747153890, --0.019572975891131203, --0.010081421213164831, - 0.006688661092777364, - 0.030004344392895913, - 0.057792920156185819, - 0.086867005627322011, - 0.113416964025259234, - 0.133680156710101528, - 0.144647031609622528, - 0.144647031609622528, - 0.133680156710101528, - 0.113416964025259234, - 0.086867005627322011, - 0.057792920156185819, - 0.030004344392895913, - 0.006688661092777364, --0.010081421213164831, --0.019572975891131203, --0.022329078747153890, --0.019862184667500584, --0.014201761944376253, --0.007414366866133686, --0.001205019703557342, - 0.003326972676367999, - 0.005752477145569307, - 0.006219189024066382, - 0.005255696919539346, - 0.003541671954793736, - 0.001706652959686771, - 198.2564157371532760E-6, --766.0401423335821390E-6, --0.001175458847337361, --0.001157191426061149, --895.0536349136069700E-6, --560.2226272240251320E-6, --270.5543007271240870E-6, --78.97178111806820770E-6, - 13.68412619593411960E-6, - 36.68870031589199950E-6, - 26.00645116880263790E-6, - 14.11649337493100380E-6 -}; - -//-------------------------- CW Filter IIR coefficients fc= 720, BW= 480 Butterworth ------------------- -float32_t CW_Filter_Coeffs[40] = { - -0.052435730923943512, 0.000000000000000000, 0.052435730923943512, 1.873536650623021550, -0.903491018266337598, - -0.051776963065707407, 0.000000000000000000, 0.051776963065707407, 1.854421028977223380, -0.892140154407832897, - -0.053279899528479190, 0.000000000000000000, 0.053279899528479190, 1.901909218086668130, -0.926406121830538831, - -0.051720218776406826, 0.000000000000000000, 0.051720218776406826, 1.852473692114126940, -0.899287118048469503, - -0.054005568085281293, 0.000000000000000000, 0.054005568085281293, 1.933191203570882030, -0.954501171264401371, - -0.052478365750058854, 0.000000000000000000, 0.052478365750058854, 1.872162227117124540, -0.927509206002122499, - -0.054571370864953707, 0.000000000000000000, 0.054571370864953707, 1.964566474379490390, -0.984561106211203962, - -0.053941343239090896, 0.000000000000000000, 0.053941343239090896, 1.911926697739624980, -0.973194327505971346 -}; +// ============================================================================ +// Filter tables generated at run time +// +// These used to be coefficient tables designed offline for one audio sample +// rate (24 ksps: 192 ksps at the ADC, decimated by 8). Running the radio at +// any other rate scaled every corner and centre frequency by the ratio of the +// rates, so at 176.4 ksps a filter labelled 2.0 kHz actually cut at 1.84 kHz. +// +// They are now regenerated from an analog design spec on every sample rate +// change, which puts each response back on its labelled frequency at any rate. +// See InitializeReceiveAudioFilterCoeffs() and InitializeTransmitFilterCoeffs() +// at the bottom of this file. +// +// The original tables are kept verbatim in code/test/reference_filters.cpp so +// the test suite can measure the generated filters against them. +// ============================================================================ + +// CW audio lowpass filters: 12 pole Chebyshev type I, 0.02 dB ripple. +// 6 biquad sections of {b0, b1, b2, -a1, -a2}. +float32_t CW_AudioFilterCoeffs1[30] = {0}; /** CW audio lowpass, 840 Hz nominal */ +float32_t CW_AudioFilterCoeffs2[30] = {0}; /** CW audio lowpass, 1080 Hz nominal */ +float32_t CW_AudioFilterCoeffs3[30] = {0}; /** CW audio lowpass, 1320 Hz nominal */ +float32_t CW_AudioFilterCoeffs4[30] = {0}; /** CW audio lowpass, 1800 Hz nominal */ +float32_t CW_AudioFilterCoeffs5[30] = {0}; /** CW audio lowpass, 2000 Hz nominal */ + +/** CW decoder input lowpass, 64 tap Kaiser windowed sinc */ +float32_t CW_Filter_Coeffs2[64] = {0}; //=================== Excite Coefficients ============ //48 Tap Kaiser 192KHz 8HKZ Fc RXfilters Dec and Interpolation @@ -273,204 +156,30 @@ float32_t coeffs48K_8K_LPF_FIR[48] = { -140.7585461814297220E-6, 42.07251256297374200E-6 }; -//=== 2x interpolate LP FIT+R 12K sps 48 taps 4K cutoff -float32_t coeffs12K_8K_LPF_FIR[48] = { - 292.7121266034897080E-6, --488.3180342813371910E-6, - 645.8040165558306850E-6, --638.1198881550581060E-6, - 309.3480302449689250E-6, - 476.3212758864665380E-6, --0.001765071979170106, - 0.003440388897049947, --0.005171865011484901, - 0.006413537425933360, --0.006472731205884527, - 0.004654709846338252, --466.7626569695900680E-6, --0.006156455313021720, - 0.014659150255493822, --0.023755580034778335, - 0.031441372818989677, --0.035120434578160220, - 0.031776095760559758, --0.017990662560858503, --0.010720286031718308, - 0.063232870546293687, --0.170792976311007899, - 0.622296121514180789, - 0.622296121514180789, --0.170792976311007899, - 0.063232870546293687, --0.010720286031718308, --0.017990662560858503, - 0.031776095760559758, --0.035120434578160220, - 0.031441372818989677, --0.023755580034778335, - 0.014659150255493822, --0.006156455313021720, --466.7626569695900680E-6, - 0.004654709846338252, --0.006472731205884527, - 0.006413537425933360, --0.005171865011484901, - 0.003440388897049947, --0.001765071979170106, - 476.3212758864665380E-6, - 309.3480302449689250E-6, --638.1198881550581060E-6, - 645.8040165558306850E-6, --488.3180342813371910E-6, - 292.7121266034897080E-6, - -}; - -// Interpolate by 2 again, 12K to 24K SPS -float32_t FIR_int3_12ksps_48tap_2k7[48] = { - -2.285169471669272310E-6, --33.85457593285185850E-6, --90.05495214272963270E-6, --102.5104398169568180E-6, - 58.41569034528380660E-6, - 454.7904191315104190E-6, - 871.4162433760077420E-6, - 749.7881965886456330E-6, --468.4956850258753320E-6, --0.002616105921239791, --0.004246098300098818, --0.003078738032270572, - 0.002226282725246520, - 0.009889569653623405, - 0.014414561535852018, - 0.009226938890949424, --0.007959807904613685, --0.030336057178768423, --0.042078062750789499, --0.025361321875102511, - 0.028447546456669172, - 0.110201064956298028, - 0.193569812629121624, - 0.246261318040085941, - 0.246261318040085941, - 0.193569812629121624, - 0.110201064956298028, - 0.028447546456669172, --0.025361321875102511, --0.042078062750789499, --0.030336057178768423, --0.007959807904613685, - 0.009226938890949424, - 0.014414561535852018, - 0.009889569653623405, - 0.002226282725246520, --0.003078738032270572, --0.004246098300098818, --0.002616105921239791, --468.4956850258753320E-6, - 749.7881965886456330E-6, - 871.4162433760077420E-6, - 454.7904191315104190E-6, - 58.41569034528380660E-6, --102.5104398169568180E-6, --90.05495214272963270E-6, --33.85457593285185850E-6, --2.285169471669272310E-6, -}; - -//4 pole Butterworth IIR biQuad RXfilters for EQ Band 1 thru 14 -float32_t EQ_Band1Coeffs[20] = { // fc=198.425 BW=60.4, 4 pole Gaussian 1/3 octave - -0.010740354324803263, 0.000000000000000000, 0.010740354324803263, 1.977760288071182870, -0.980176703912204905, - -0.010717730957944621, 0.000000000000000000, 0.010717730957944621, 1.975162619174023470, -0.978112070242933007, - -0.012264037490550410, 0.000000000000000000, 0.012264037490550410, 1.982731279215446560, -0.984673419072692013, - -0.012192623012836674, 0.000000000000000000, 0.012192623012836674, 1.975260232124987250, -0.978939586475078283 -}; -float32_t EQ_Band2Coeffs[20] = { // fc=250 BW=72, 4 pole Gaussian 1/3 octave - -0.012933654120114928, 0.000000000000000000, 0.012933654120114928, 1.972230388754230070, -0.976074773963381825, - -0.012902245256420676, 0.000000000000000000, 0.012902245256420676, 1.969054007796797960, -0.973704415266133827, - -0.014776626826402213, 0.000000000000000000, 0.014776626826402213, 1.978267317735213690, -0.981387851708867331, - -0.014677312538120893, 0.000000000000000000, 0.014677312538120893, 1.969044730844959010, -0.974791905478009535 -}; -float32_t EQ_Band3Coeffs[20] = { // fc=314.98 BW=91.6, 4 pole Gaussian 1/3 octave - -0.016447315569307643, 0.000000000000000000, 0.016447315569307643, 1.963525244582037700, -0.969599143160199128, - -0.016395762539476878, 0.000000000000000000, 0.016395762539476878, 1.959197203291359160, -0.966559998362339301, - -0.018810466262295416, 0.000000000000000000, 0.018810466262295416, 1.971448267819779780, -0.976369169522296243, - -0.018647471180391263, 0.000000000000000000, 0.018647471180391263, 1.958784738577257430, -0.967908806523534615 -}; -float32_t EQ_Band4Coeffs[20] = { // fc=400 BW=117, 4 pole Gaussian 1/3 octave - -0.021107226123143540, 0.000000000000000000, 0.021107226123143540, 1.951288180543548690, -0.961023369255779913, - -0.021020814241623810, 0.000000000000000000, 0.021020814241623810, 1.945259100240296800, -0.957088989767100218, - -0.024173376764279130, 0.000000000000000000, 0.024173376764279130, 1.961858154037972480, -0.969728310529273663, - -0.023900201823886549, 0.000000000000000000, 0.023900201823886549, 1.944062548127177160, -0.958769747478319112 -}; -float32_t EQ_Band5Coeffs[20] = { // fc=500 BW=140, 4 pole Gaussian 1/3 octave - -0.025434986078352932, 0.000000000000000000, 0.025434986078352932, 1.937763026417761440, -0.952954919636953890, - -0.025313478543573947, 0.000000000000000000, 0.025313478543573947, 1.930070471504943040, -0.948402481405460684, - -0.029161895846570862, 0.000000000000000000, 0.029161895846570862, 1.950890858299041410, -0.963270463464314108, - -0.028777241258184545, 0.000000000000000000, 0.028777241258184545, 1.927932418232654040, -0.950564622747441468 -}; -float32_t EQ_Band6Coeffs[20] = { // fc=630 BW=185, 4 pole Gaussian 1/3 octave - -0.034013087998603600, 0.000000000000000000, 0.034013087998603600, 1.913595532476039860, -0.937338704287993485, - -0.033779293097819303, 0.000000000000000000, 0.033779293097819303, 1.901882114205436290, -0.930895742996760700, - -0.039105400046163162, 0.000000000000000000, 0.039105400046163162, 1.932301402855366890, -0.951404949215225448, - -0.038366657914332684, 0.000000000000000000, 0.038366657914332684, 1.897086382739862300, -0.933431909185264641 -}; - -float32_t EQ_Band7Coeffs[20] = { // fc=793 BW=215, 4 pole Gaussian 1/3 octave - -0.040044359954689926, 0.000000000000000000, 0.040044359954689926, 1.888394203397243400, -0.925981923711014732, - -0.039740115320392844, 0.000000000000000000, 0.039740115320392844, 1.873614715169800600, -0.918946600083319409, - -0.046099397613266917, 0.000000000000000000, 0.046099397613266917, 1.911355633900693180, -0.942046227315978979, - -0.045135819293132796, 0.000000000000000000, 0.045135819293132796, 1.866325392810697090, -0.922355399057854686 -}; - -float32_t EQ_Band8Coeffs[20] = { // fc=1000 BW=270, 4 pole Gaussian 1/3 octave - -0.050982851195012183, 0.000000000000000000, 0.050982851195012183, 1.846967337210932980, -0.905880344373915625, - -0.050478998559837972, 0.000000000000000000, 0.050478998559837972, 1.825700576400176360, -0.896927722306557262, - -0.058875166968515282, 0.000000000000000000, 0.058875166968515282, 1.878257463261961750, -0.926279459225752610, - -0.057280286665948199, 0.000000000000000000, 0.057280286665948199, 1.812808299361427180, -0.901187303394047512 -}; - -float32_t EQ_Band9Coeffs[20] = { //1259 326 4 pole Gaussian 1/3 octave - -0.062436305349349887, 0.000000000000000000, 0.062436305349349887, 1.792407090214479080, -0.884627616406695516, - -0.061695827132588178, 0.000000000000000000, 0.061695827132588178, 1.763182364434806800, -0.874136164738794852, - -0.072306422223616690, 0.000000000000000000, 0.072306422223616690, 1.833501777433602210, -0.909146391672414067, - -0.069961857687408896, 0.000000000000000000, 0.069961857687408896, 1.742557606724184360, -0.879666957860237075 -}; - -float32_t EQ_Band10Coeffs[20] = { // Band3 //1587 380 4 pole Gaussian 1/3 octave - -0.074363508404526421, 0.000000000000000000, 0.074363508404526421, 1.717508353369523010, -0.862211252084035151, - -0.073370934748750075, 0.000000000000000000, 0.073370934748750075, 1.678381089046226960, -0.850702809396297943, - -0.086324197408935752, 0.000000000000000000, 0.086324197408935752, 1.770356988912942690, -0.890495750927825402, - -0.0831792956517105050, .000000000000000000, 0.083179295651710505, 1.647225955992196010, -0.858053843143523842 -}; - -float32_t EQ_Band11Coeffs[20] = { // 2000 480 4 pole 4 pole Gaussian 1/3 octave - -0.095836703240171059, 0.000000000000000000, 0.095836703240171059, 1.600465210710192880, -0.822735930728153764, - -0.094139069783896759, 0.000000000000000000, 0.094139069783896759, 1.542179833257436350, -0.808162140160850195, - -0.111862031820526620, 0.000000000000000000, 0.111862031820526620, 1.675022371378555920, -0.858900156431318784, - -0.106503914399111971, 0.000000000000000000, 0.106503914399111971, 1.490054957243781340, -0.817759406379379050 -}; - -float32_t EQ_Band12Coeffs[20] = { // 2500 579 4 pole Gaussian 1/3 octave - -0.117879553771682077, 0.000000000000000000, 0.117879553771682077, 1.446475829403250920, -0.781724147199137853, - -0.115383310539578524, 0.000000000000000000, 0.115383310539578524, 1.364990025835680850, -0.765170185554548188, - -0.138197674814651450, 0.000000000000000000, 0.138197674814651450, 1.546474742602351290, -0.825007082271826175, - -0.130355600849362346, 0.000000000000000000, 0.130355600849362346, 1.285783233479567580, -0.778191775359172500 -}; - -float32_t EQ_Band13Coeffs[20] = { //3150 730 4 pole Gaussian 1/3 octave - -0.150762354328435849, 0.000000000000000000, 0.150762354328435849, 1.219119807012296160, -0.720763563050070721, - -0.146749880416786549, 0.000000000000000000, 0.146749880416786549, 1.100462092025051410, -0.701580757063202998, - -0.177820152149393451, 0.000000000000000000, 0.177820152149393451, 1.358721947950491950, -0.774654638713877741, - -0.165372194155001706, 0.000000000000000000, 0.165372194155001706, 0.976661905865581326, -0.720426429558091441 -}; - -float32_t EQ_Band14Coeffs[20] = { //4000 919 4 pole Gaussian 1/3 octave - -0.191002547843707293, 0.000000000000000000, 0.191002547843707293, 0.899547452783356571, -0.644594993669154070, - -0.185284629488361025, 0.000000000000000000, 0.185284629488361025, 0.731207869008696054, -0.625298174921578354, - -0.226011710394339427, 0.000000000000000000, 0.226011710394339427, 1.091251019040685220, -0.709544302434661267, - -0.208696039181478332, 0.000000000000000000, 0.208696039181478332, 0.546857223443984242, -0.655183243751105593 -}; +/** Transmit decimate-by-2, 24k -> 12k, 48 tap Kaiser windowed sinc */ +float32_t coeffs12K_8K_LPF_FIR[48] = {0}; + +/** Transmit interpolate-by-2, 12k -> 24k. This is the stage that sets the + * transmit audio bandwidth, so it is anchored in Hz rather than left to scale + * with the sample rate. 48 tap Kaiser windowed sinc. */ +float32_t FIR_int3_12ksps_48tap_2k7[48] = {0}; + +// Audio equaliser cells: 4 stagger-tuned bandpass biquads each, peak normalised +// to unity. Centres run 198.425 Hz to 4000 Hz, roughly 1/3 octave apart. +float32_t EQ_Band1Coeffs[20] = {0}; +float32_t EQ_Band2Coeffs[20] = {0}; +float32_t EQ_Band3Coeffs[20] = {0}; +float32_t EQ_Band4Coeffs[20] = {0}; +float32_t EQ_Band5Coeffs[20] = {0}; +float32_t EQ_Band6Coeffs[20] = {0}; +float32_t EQ_Band7Coeffs[20] = {0}; +float32_t EQ_Band8Coeffs[20] = {0}; +float32_t EQ_Band9Coeffs[20] = {0}; +float32_t EQ_Band10Coeffs[20] = {0}; +float32_t EQ_Band11Coeffs[20] = {0}; +float32_t EQ_Band12Coeffs[20] = {0}; +float32_t EQ_Band13Coeffs[20] = {0}; +float32_t EQ_Band14Coeffs[20] = {0}; // Concatenate all the EQ band filter coefficients so we can loop over them float32_t (*EQ_Coeffs[14])[20] = { &EQ_Band1Coeffs, &EQ_Band2Coeffs, &EQ_Band3Coeffs, &EQ_Band4Coeffs, &EQ_Band5Coeffs, &EQ_Band6Coeffs, &EQ_Band7Coeffs, &EQ_Band8Coeffs, @@ -996,40 +705,6 @@ float32_t* mag_coeffs[11] = }; -const float32_t nuttallWindow256[] = { - 0.0000001, 0.0000073, 0.0000292, 0.0000663, 0.0001192, 0.0001891, 0.0002771, 0.0003851, - 0.0005147, 0.0006684, 0.0008485, 0.0010580, 0.0012998, 0.0015775, 0.0018947, 0.0022554, - 0.0026639, 0.0031248, 0.0036429, 0.0042235, 0.0048719, 0.0055940, 0.0063956, 0.0072832, - 0.0082631, 0.0093423, 0.0105278, 0.0118269, 0.0132470, 0.0147960, 0.0164817, 0.0183122, - 0.0202960, 0.0224414, 0.0247569, 0.0272514, 0.0299336, 0.0328123, 0.0358966, 0.0391953, - 0.0427173, 0.0464717, 0.0504671, 0.0547124, 0.0592163, 0.0639871, 0.0690332, 0.0743626, - 0.0799832, 0.0859024, 0.0921274, 0.0986651, 0.1055218, 0.1127036, 0.1202159, 0.1280637, - 0.1362515, 0.1447831, 0.1536618, 0.1628900, 0.1724698, 0.1824023, 0.1926880, 0.2033264, - 0.2143164, 0.2256560, 0.2373424, 0.2493718, 0.2617397, 0.2744405, 0.2874677, 0.3008139, - 0.3144707, 0.3284289, 0.3426782, 0.3572073, 0.3720040, 0.3870552, 0.4023469, 0.4178639, - 0.4335904, 0.4495095, 0.4656036, 0.4818541, 0.4982416, 0.5147460, 0.5313464, 0.5480212, - 0.5647480, 0.5815041, 0.5982659, 0.6150094, 0.6317101, 0.6483431, 0.6648832, 0.6813048, - 0.6975821, 0.7136890, 0.7295995, 0.7452874, 0.7607267, 0.7758911, 0.7907549, 0.8052924, - 0.8194782, 0.8332872, 0.8466949, 0.8596772, 0.8722106, 0.8842721, 0.8958396, 0.9068915, - 0.9174074, 0.9273674, 0.9367527, 0.9455454, 0.9537289, 0.9612875, 0.9682065, 0.9744726, - 0.9800736, 0.9849988, 0.9892383, 0.9927841, 0.9956291, 0.9977678, 0.9991959, 0.9999106, - 0.9999106, 0.9991959, 0.9977678, 0.9956291, 0.9927841, 0.9892383, 0.9849988, 0.9800736, - 0.9744726, 0.9682065, 0.9612875, 0.9537289, 0.9455454, 0.9367527, 0.9273674, 0.9174074, - 0.9068915, 0.8958396, 0.8842721, 0.8722106, 0.8596772, 0.8466949, 0.8332872, 0.8194782, - 0.8052924, 0.7907549, 0.7758911, 0.7607267, 0.7452874, 0.7295995, 0.7136890, 0.6975821, - 0.6813048, 0.6648832, 0.6483431, 0.6317101, 0.6150094, 0.5982659, 0.5815041, 0.5647480, - 0.5480212, 0.5313464, 0.5147460, 0.4982416, 0.4818541, 0.4656036, 0.4495095, 0.4335904, - 0.4178639, 0.4023469, 0.3870552, 0.3720040, 0.3572073, 0.3426782, 0.3284289, 0.3144707, - 0.3008139, 0.2874677, 0.2744405, 0.2617397, 0.2493718, 0.2373424, 0.2256560, 0.2143164, - 0.2033264, 0.1926880, 0.1824023, 0.1724698, 0.1628900, 0.1536618, 0.1447831, 0.1362515, - 0.1280637, 0.1202159, 0.1127036, 0.1055218, 0.0986651, 0.0921274, 0.0859024, 0.0799832, - 0.0743626, 0.0690332, 0.0639871, 0.0592163, 0.0547124, 0.0504671, 0.0464717, 0.0427173, - 0.0391953, 0.0358966, 0.0328123, 0.0299336, 0.0272514, 0.0247569, 0.0224414, 0.0202960, - 0.0183122, 0.0164817, 0.0147960, 0.0132470, 0.0118269, 0.0105278, 0.0093423, 0.0082631, - 0.0072832, 0.0063956, 0.0055940, 0.0048719, 0.0042235, 0.0036429, 0.0031248, 0.0026639, - 0.0022554, 0.0018947, 0.0015775, 0.0012998, 0.0010580, 0.0008485, 0.0006684, 0.0005147, - 0.0003851, 0.0002771, 0.0001891, 0.0001192, 0.0000663, 0.0000292, 0.0000073, 0.0000001 -}; /** @@ -1271,6 +946,158 @@ void SetIIRCoeffs(float32_t *coefficient_set, float32_t f0, float32_t Q, float32 } } +/** + * Bilinear transform of one second-order analog section into an ARM biquad. + * + * Maps a section with resonance wn (rad/s) and quality factor Q into the five + * coefficients arm_biquad_cascade_df2T_f32 expects, {b0, b1, b2, -a1, -a2}. + * The caller supplies the analog numerator; the denominator is always + * s^2 + (wn/Q)s + wn^2. + * + * Substituting s = 2*Fs*(z-1)/(z+1) and clearing denominators gives a common + * divisor of d = K^2 + K*wn/Q + wn^2 with K = 2*Fs, which is factored out here. + * + * @param coeffs Destination, 5 floats + * @param b_s2 Analog numerator coefficient of s^2 + * @param b_s1 Analog numerator coefficient of s + * @param b_s0 Analog numerator constant term + * @param wn Section resonant frequency in rad/s + * @param Q Section quality factor + * @param Fs_Hz Sample rate the digital filter will run at + */ +static void BilinearBiquad(float32_t *coeffs, float32_t b_s2, float32_t b_s1, float32_t b_s0, + float32_t wn, float32_t Q, float32_t Fs_Hz) { + const float32_t K = 2.0f * Fs_Hz; + const float32_t K2 = K * K; + const float32_t wn2 = wn * wn; + const float32_t damping = K * wn / Q; + const float32_t d = K2 + damping + wn2; + + coeffs[0] = (b_s2 * K2 + b_s1 * K + b_s0) / d; /* b0 */ + coeffs[1] = (2.0f * b_s0 - 2.0f * b_s2 * K2) / d; /* b1 */ + coeffs[2] = (b_s2 * K2 - b_s1 * K + b_s0) / d; /* b2 */ + // The ARM biquad adds the feedback terms rather than subtracting them, so + // a1 and a2 are stored negated. + coeffs[3] = -(2.0f * (wn2 - K2)) / d; // negated a1 + coeffs[4] = -(K2 - damping + wn2) / d; // negated a2 +} + +/** + * Prewarp a frequency for the bilinear transform. + * + * The bilinear transform compresses the analog frequency axis as it wraps it + * onto the unit circle, so an analog section placed at f lands slightly below f + * once discretised. Designing at the prewarped frequency instead cancels that, + * putting the digital feature exactly on f at whatever sample rate is in use. + * This is what makes the generated filters sample-rate independent. + * + * @param f_Hz Frequency the digital filter should land on + * @param Fs_Hz Sample rate + * @return Equivalent analog frequency in rad/s + */ +static float32_t PrewarpRadians(float32_t f_Hz, float32_t Fs_Hz) { + return 2.0f * Fs_Hz * tanf(PI * f_Hz / Fs_Hz); +} + +/** + * Design a Chebyshev type I lowpass as a cascade of ARM biquads. + * + * The poles of a Chebyshev type I filter lie on an ellipse in the s-plane, at + * positions given in closed form by the ripple and the order, so no iterative + * design is needed. Each conjugate pair becomes one biquad section. + * + * The cascade is normalised to unity gain at DC. An even-order Chebyshev sits + * at -ripple at DC and rises to 0 dB across the passband; the frozen tables + * this replaces were normalised the same way, with DC at 0 dB and the ripple + * above it. + * + * Note fRippleEdge_Hz is the edge of the equiripple region, which is the + * natural parameter for this family - not the -3 dB or -6 dB corner. It sits a + * few percent below the nominal cutoff the filter is labelled with. + * + * @param coeffs Destination, order/2 sections of 5 floats + * @param order Filter order, must be even + * @param ripple_dB Peak-to-peak passband ripple + * @param fRippleEdge_Hz Frequency at which the passband ripple ends + * @param Fs_Hz Sample rate the filter will run at + */ +void CalcChebyshevILowpassCoeffs(float32_t *coeffs, uint32_t order, float32_t ripple_dB, + float32_t fRippleEdge_Hz, float32_t Fs_Hz) { + const uint32_t nSections = order / 2; + if (nSections == 0) return; + // Nothing sensible to design if the corner has run past Nyquist. + if (fRippleEdge_Hz >= Fs_Hz / 2.0f) fRippleEdge_Hz = Fs_Hz / 2.0f * 0.999f; + + // Ellipse shape: eps sets how much ripple, v0 how eccentric the pole locus. + const float32_t eps = sqrtf(powf(10.0f, ripple_dB / 10.0f) - 1.0f); + const float32_t v0 = asinhf(1.0f / eps) / (float32_t)order; + const float32_t sinhV0 = sinhf(v0); + const float32_t coshV0 = coshf(v0); + const float32_t wc = PrewarpRadians(fRippleEdge_Hz, Fs_Hz); + + for (uint32_t k = 0; k < nSections; k++) { + const float32_t theta = PI * (float32_t)(2 * k + 1) / (float32_t)(2 * order); + const float32_t sigma = -sinhV0 * arm_sin_f32(theta) * wc; // pole real part + const float32_t omega = coshV0 * arm_cos_f32(theta) * wc; // pole imaginary part + const float32_t wn = sqrtf(sigma * sigma + omega * omega); + const float32_t Q = wn / (2.0f * fabsf(sigma)); + // Lowpass numerator: wn^2, i.e. unity gain at DC for this section. + BilinearBiquad(&coeffs[k * 5], 0.0f, 0.0f, wn * wn, wn, Q, Fs_Hz); + } + + // Normalise the cascade to unity at DC. Evaluating H(z) at z = 1 reduces to + // summing the numerator over the summed denominator for each section. + float32_t dcGain = 1.0f; + for (uint32_t k = 0; k < nSections; k++) { + const float32_t *s = &coeffs[k * 5]; + dcGain *= (s[0] + s[1] + s[2]) / (1.0f - s[3] - s[4]); + } + if (dcGain > 0.0f) { + // Spread the correction evenly so no single section carries a large gain. + const float32_t perSection = powf(dcGain, -1.0f / (float32_t)nSections); + for (uint32_t k = 0; k < nSections; k++) { + coeffs[k * 5 + 0] *= perSection; + coeffs[k * 5 + 1] *= perSection; + coeffs[k * 5 + 2] *= perSection; + } + } +} + +/** + * Design a stagger-tuned bandpass cascade as ARM biquads. + * + * The prototype describes a set of second-order analog bandpass sections whose + * resonances straddle the centre frequency, each given as a fraction of that + * centre. Scaling those fractions to the wanted centre and running them through + * the bilinear transform reproduces the same response shape at any centre + * frequency and any sample rate. + * + * Sections are emitted with b0 negative and b2 positive, matching the sign + * convention of the equaliser tables this replaces. ApplyEQBandFilter() sums + * adjacent bands with alternating sign, and that reconstruction depends on it. + * + * @param coeffs Destination, nSections sections of 5 floats + * @param proto Prototype sections, normalised to the centre frequency + * @param nSections Number of sections in the cascade + * @param fc_Hz Centre frequency the cascade should peak at + * @param gain Per-section gain, used to normalise the cascade peak + * @param Fs_Hz Sample rate the filter will run at + */ +void CalcBandpassCascadeCoeffs(float32_t *coeffs, const BandpassProtoSection *proto, + uint32_t nSections, float32_t fc_Hz, float32_t gain, + float32_t Fs_Hz) { + // Keep the whole cascade below Nyquist; the outermost section sits above fc. + if (fc_Hz >= Fs_Hz / 2.0f) fc_Hz = Fs_Hz / 2.0f * 0.999f; + const float32_t wc = PrewarpRadians(fc_Hz, Fs_Hz); + + for (uint32_t k = 0; k < nSections; k++) { + const float32_t wn = proto[k].wnRatio * wc; + const float32_t Q = proto[k].Q; + // Bandpass numerator: (wn/Q)s, negated to match the table convention. + BilinearBiquad(&coeffs[k * 5], 0.0f, -gain * wn / Q, 0.0f, wn, Q, Fs_Hz); + } +} + /** * Initialize a FIR decimation filter * @@ -1391,3 +1218,160 @@ void InitFilterMask(float32_t *FIR_filter_mask, ReceiveFilterConfig *RXfilters) void setdspfirfilename(char *fnm){ dspfirfilename = fnm; // "FIR_filter_samples.txt" } + +// ============================================================================ +// Run-time filter generation +// +// The design constants below were recovered from the coefficient tables the +// radio used to ship, by code/tools/extract_filter_prototypes.py. They are the +// design spec, not derived values: re-run that script against +// code/test/reference_filters.cpp if they ever need to be checked. +// ============================================================================ + +/** CW audio lowpass filters share an order and a ripple; only the corner differs. */ +#define CW_AUDIO_FILTER_COUNT 5 +#define CW_AUDIO_FILTER_ORDER 12 +#define CW_AUDIO_FILTER_RIPPLE_DB 0.02f + +/** Number of biquad sections in each equaliser cell. Matches ReceiveFilterConfig::eqNumStages. */ +#define EQ_PROTO_SECTIONS 4 + +/** Edge of the equiripple region of each CW audio filter, at the labelled + * cutoffs 840, 1080, 1320, 1800 and 2000 Hz. A Chebyshev is specified by its + * ripple edge, which sits a few percent below the nominal cutoff. */ +static const float32_t CW_AUDIO_RIPPLE_EDGE_HZ[CW_AUDIO_FILTER_COUNT] = { + 807.1f, 1038.0f, 1269.0f, 1731.5f, 1963.2f +}; + +/** Centre frequency of each equaliser cell. */ +static const float32_t EQ_BAND_FC_HZ[EQUALIZER_CELL_COUNT] = { + 198.425f, 250.000f, 314.980f, 400.000f, 500.000f, + 630.000f, 793.000f, 1000.000f, 1259.000f, 1587.000f, + 2000.000f, 2500.000f, 3150.000f, 4000.000f +}; + +/** Per-section gain that puts each equaliser cell's peak at unity. */ +static const float32_t EQ_BAND_GAIN[EQUALIZER_CELL_COUNT] = { + 1.184185753f, 1.183486381f, 1.183688167f, 1.183936689f, + 1.183431106f, 1.184571413f, 1.183589930f, 1.183974027f, + 1.183805406f, 1.183267466f, 1.184229387f, 1.184796361f, + 1.186649928f, 1.189574151f +}; + +/** Analog prototype of each equaliser cell: four bandpass sections whose + * resonances straddle the centre frequency, given as fractions of it. */ +static const BandpassProtoSection EQ_BAND_PROTO[EQUALIZER_CELL_COUNT][EQ_PROTO_SECTIONS] = { + {{0.951083615f, 2.466689083f}, {1.051379253f, 2.466689084f}, {0.851636566f, 2.863638706f}, {1.174150596f, 2.863638705f}}, + {{0.953178819f, 2.574736321f}, {1.049087493f, 2.574736321f}, {0.857535414f, 2.986184529f}, {1.166095255f, 2.986184529f}}, + {{0.952570489f, 2.542065805f}, {1.049764384f, 2.542065806f}, {0.855807346f, 2.949116270f}, {1.168457571f, 2.949116270f}}, + {{0.951830713f, 2.503540450f}, {1.050585940f, 2.503540450f}, {0.853713229f, 2.905420150f}, {1.171330056f, 2.905420150f}}, + {{0.953370464f, 2.583905422f}, {1.048927026f, 2.583905422f}, {0.858034309f, 2.996589913f}, {1.165473263f, 2.996589913f}}, + {{0.949994428f, 2.412809599f}, {1.052637753f, 2.412809599f}, {0.848532629f, 2.802580881f}, {1.178505064f, 2.802580881f}}, + {{0.952874313f, 2.557802231f}, {1.049445688f, 2.557802231f}, {0.856652873f, 2.966969526f}, {1.167322110f, 2.966969526f}}, + {{0.951691136f, 2.497903978f}, {1.050676047f, 2.497903978f}, {0.853375360f, 2.899028582f}, {1.171722464f, 2.899028582f}}, + {{0.952233947f, 2.523659752f}, {1.050168894f, 2.523659752f}, {0.854827001f, 2.928237726f}, {1.169834914f, 2.928237726f}}, + {{0.953866388f, 2.611676440f}, {1.048364858f, 2.611676440f}, {0.859456463f, 3.028110638f}, {1.163526070f, 3.028110638f}}, + {{0.950982372f, 2.460405147f}, {1.051548607f, 2.460405147f}, {0.851302026f, 2.856515705f}, {1.174676152f, 2.856515705f}}, + {{0.949340102f, 2.383020780f}, {1.053327036f, 2.383020780f}, {0.846732326f, 2.768839341f}, {1.180970143f, 2.768839341f}}, + {{0.944376056f, 2.174506313f}, {1.058900206f, 2.174506313f}, {0.832947335f, 2.533023428f}, {1.200556094f, 2.533023428f}}, + {{0.937307103f, 1.936908781f}, {1.066883605f, 1.936908781f}, {0.813799101f, 2.265312153f}, {1.228801532f, 2.265312153f}} +}; + +/** -6 dB corner of the CW decoder input filter. CalcFIRCoeffs takes its fc + * argument as the -6 dB point, so this is not the 1560 Hz the filter is + * nominally described by - that is its -3 dB point. */ +#define CW_DECODE_FIR_FC_HZ 1749.1f + +/** -6 dB corner of the transmit interpolate-by-2 filter, which is what limits + * the transmit audio bandwidth (-3 dB at 2759 Hz). */ +#define TX_AUDIO_LPF_FC_HZ 3039.6f + +/** -6 dB corner of the transmit decimate-by-2 filter feeding the Hilbert stage. + * + * This one is not a reproduction of the table it replaces. That table was flat + * to 0.425 * Fs, far past the 0.25 * Fs a decimate-by-2 stage needs, so + * everything between 6 and 9.5 kHz folded back into the transmit audio. A real + * lowpass here removes that aliasing. 3.5 kHz sits above the 2.76 kHz the + * audio bandwidth filter allows through, so it costs no wanted signal. */ +#define TX_DECIMATE3_FC_HZ 3500.0f + +/** Stopband attenuation asked of the generated FIR stages. */ +#define GENERATED_FIR_ATTENUATION_DB 90.0f + +/** + * Scale a set of FIR taps to unity gain at DC. + * + * CalcFIRCoeffs does not normalise its output, and the CW decoder compares the + * filtered magnitude against a fixed threshold, so the gain has to be pinned. + * + * @param taps Coefficient array, modified in place + * @param nTaps Number of taps + */ +static void NormalizeFIRDCGain(float32_t *taps, uint32_t nTaps) { + float32_t sum = 0.0f; + for (uint32_t i = 0; i < nTaps; i++) sum += taps[i]; + if (sum == 0.0f) return; + for (uint32_t i = 0; i < nTaps; i++) taps[i] /= sum; +} + +/** + * Regenerate the receive audio filter tables for the current sample rate. + * + * Called from the top of InitializeFilters(), so it runs at startup and again + * on every sample rate change, before the ARM instances are bound. + * + * Filters that specify their corner as a fraction of the sample rate - the + * decimation and interpolation anti-alias stages, the zoom FFT filters - are + * deliberately not regenerated. Those are already correct at any rate, because + * scaling with Fs is exactly what an anti-alias filter should do. + * + * @param audioFs_Hz Sample rate of the decimated audio stream + */ +void InitializeReceiveAudioFilterCoeffs(float32_t audioFs_Hz) { + // CW audio lowpass filters, 12 pole Chebyshev type I. + float32_t *cwAudio[CW_AUDIO_FILTER_COUNT] = { + CW_AudioFilterCoeffs1, CW_AudioFilterCoeffs2, CW_AudioFilterCoeffs3, + CW_AudioFilterCoeffs4, CW_AudioFilterCoeffs5 + }; + for (uint32_t i = 0; i < CW_AUDIO_FILTER_COUNT; i++) { + CalcChebyshevILowpassCoeffs(cwAudio[i], CW_AUDIO_FILTER_ORDER, + CW_AUDIO_FILTER_RIPPLE_DB, + CW_AUDIO_RIPPLE_EDGE_HZ[i], audioFs_Hz); + } + + // Audio equaliser cells. The receive and transmit chains share these tables + // and both run at the audio rate, so one set serves both. + for (uint32_t i = 0; i < EQUALIZER_CELL_COUNT; i++) { + CalcBandpassCascadeCoeffs(*EQ_Coeffs[i], EQ_BAND_PROTO[i], EQ_PROTO_SECTIONS, + EQ_BAND_FC_HZ[i], EQ_BAND_GAIN[i], audioFs_Hz); + } + + // CW decoder input filter. + CalcFIRCoeffs(CW_Filter_Coeffs2, 64, CW_DECODE_FIR_FC_HZ, GENERATED_FIR_ATTENUATION_DB, + Lowpass, 0.0f, audioFs_Hz); + NormalizeFIRDCGain(CW_Filter_Coeffs2, 64); +} + +/** + * Regenerate the transmit filter tables for the current sample rate. + * + * Called from the top of InitializeTransmitFilters(). Only the two stages + * either side of the Hilbert transform are generated: the rest of the transmit + * chain is anti-alias and anti-image filtering specified as a fraction of Fs, + * which needs no adjustment. + * + * A decimating FIR filters at its input rate and an interpolating one at its + * output rate. For both of these stages that rate is the audio rate, not the + * 12 ksps the Hilbert transform between them runs at. + * + * @param audioFs_Hz Sample rate of the decimated audio stream + */ +void InitializeTransmitFilterCoeffs(float32_t audioFs_Hz) { + CalcFIRCoeffs(coeffs12K_8K_LPF_FIR, 48, TX_DECIMATE3_FC_HZ, GENERATED_FIR_ATTENUATION_DB, + Lowpass, 0.0f, audioFs_Hz); + NormalizeFIRDCGain(coeffs12K_8K_LPF_FIR, 48); + + CalcFIRCoeffs(FIR_int3_12ksps_48tap_2k7, 48, TX_AUDIO_LPF_FC_HZ, GENERATED_FIR_ATTENUATION_DB, + Lowpass, 0.0f, audioFs_Hz); + NormalizeFIRDCGain(FIR_int3_12ksps_48tap_2k7, 48); +} diff --git a/code/src/PhoenixSketch/SDT.h b/code/src/PhoenixSketch/SDT.h index 8d5daa8..da8ccf2 100644 --- a/code/src/PhoenixSketch/SDT.h +++ b/code/src/PhoenixSketch/SDT.h @@ -207,6 +207,18 @@ enum FilterType { Notch = 5 }; +/** One second-order analog bandpass section of a stagger-tuned cascade. + * + * The section is (wn/Q)s / (s^2 + (wn/Q)s + wn^2). wnRatio is wn expressed as a + * fraction of the cascade's centre frequency, so the same prototype describes + * the filter shape at any centre frequency and any sample rate. + * See CalcBandpassCascadeCoeffs(). + */ +struct BandpassProtoSection { + float32_t wnRatio; /** Section resonance as a fraction of the centre frequency */ + float32_t Q; /** Section quality factor */ +}; + enum TXRXType { TX = 1, RX = 0 @@ -428,6 +440,14 @@ struct ReceiveFilterConfig { const uint32_t N_stages_biquad_lowpass1 = 1; float32_t biquad_lowpass1_coeffs[5] = { 0, 0, 0, 0, 0 }; + // AM demodulation DC blocker. A one pole highpass, y[n] = x[n] - x[n-1] + + // pole*y[n-1], that strips the carrier's DC term out of the envelope. The + // pole is derived from the audio sample rate in InitializeFilters() so the + // corner stays put when the rate changes. + const float32_t amDCBlockCorner_Hz = 38.0; /** Corner of the AM DC blocker */ + float32_t amDCBlockPole = 0.99; /** Pole position, set from the audio rate */ + float32_t amDCBlockState = 0.0; /** Filter history, one sample */ + // Audio equalization filters const uint32_t eqNumStages = 4; arm_biquad_cascade_df2T_instance_f32 S_Rec[EQUALIZER_CELL_COUNT]; diff --git a/code/test/CMakeLists.txt b/code/test/CMakeLists.txt index afb3cf9..191c077 100644 --- a/code/test/CMakeLists.txt +++ b/code/test/CMakeLists.txt @@ -68,6 +68,12 @@ add_executable(all_SigProc_tests SignalProcessing_test.cpp ../src/PhoenixSketch ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_SigProc_tests GTest::gtest_main) +add_executable(all_FilterDesign_tests FilterDesign_test.cpp reference_filters.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/Storage.cpp + ../src/PhoenixSketch/DSP_FFT.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp + ../src/PhoenixSketch/RFBoard.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) +target_link_libraries(all_FilterDesign_tests GTest::gtest_main) + add_executable(all_NoiseReduction_tests NoiseReduction_test.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/Storage.cpp ../src/PhoenixSketch/DSP_FFT.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/RFBoard.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp @@ -147,6 +153,7 @@ gtest_discover_tests(all_ModeSm_tests) gtest_discover_tests(all_UISm_tests) gtest_discover_tests(all_Loop_tests) gtest_discover_tests(all_SigProc_tests) +gtest_discover_tests(all_FilterDesign_tests) gtest_discover_tests(all_NoiseReduction_tests) gtest_discover_tests(all_TransmitChain_tests) gtest_discover_tests(all_FrontPanel_tests) diff --git a/code/test/FilterDesign_test.cpp b/code/test/FilterDesign_test.cpp new file mode 100644 index 0000000..7f5dcf7 --- /dev/null +++ b/code/test/FilterDesign_test.cpp @@ -0,0 +1,683 @@ +/** + * Tests for the run-time generated filter tables. + * + * Several stages of the DSP chain used to ship coefficient tables designed + * offline for a single audio sample rate of 24 ksps. They are now generated + * from an analog design spec on every sample rate change, so that a filter + * labelled 2.0 kHz cuts at 2.0 kHz whether the radio is running at 192 ksps or + * 176.4 ksps. + * + * These tests answer two questions: + * + * 1. Do the generated filters still do what the frozen tables did? Every + * response here is measured against the original coefficients, kept in + * reference_filters.cpp, at the rate they were designed for. + * + * 2. Do they now hold their frequencies when the sample rate changes? The + * same corners and peaks are measured at both rates and the ratio checked + * against 1.0. Before this work those ratios read 176400/192000 = 0.919. + * + * Sweeps are written to filtercmp_*.txt for compare_176k_vs_192k.ipynb. + */ + +#include "gtest/gtest.h" + +#include "../src/PhoenixSketch/SDT.h" +#include "reference_filters.h" + +// --------------------------------------------------------------------------- +// Measurement +// --------------------------------------------------------------------------- + +/** Samples used to measure a settled response. Long enough that the DFT bin is + * narrow (5.9 Hz at 24 ksps) and short enough to stay fast. */ +#define MEASURE_SAMPLES 4096 + +/** Blocks pushed through a filter before measuring, to let the state settle. */ +#define WARMUP_BLOCKS 4 + +/** + * Amplitude of a single frequency component of a real signal. + * + * Correlates the signal against a complex exponential at tone_Hz through a Hann + * window. Peak picking, which the older sweep tests use, misses the true peak + * of a sampled sine by up to a decibel when there are only a handful of samples + * per cycle; this is exact to well under 0.01 dB, which is what comparing two + * filter designs against each other needs. + * + * @param signal Samples to analyse + * @param nSamples Length of signal + * @param tone_Hz Frequency to measure + * @param fs_Hz Sample rate + * @return Amplitude of that component + */ +static float32_t ToneAmplitude(const float32_t *signal, uint32_t nSamples, + float32_t tone_Hz, float32_t fs_Hz) { + double sumI = 0.0, sumQ = 0.0, windowSum = 0.0; + const double w = 2.0 * M_PI * (double)tone_Hz / (double)fs_Hz; + for (uint32_t n = 0; n < nSamples; n++) { + const double hann = 0.5 * (1.0 - cos(2.0 * M_PI * (double)n / (double)(nSamples - 1))); + windowSum += hann; + sumI += hann * (double)signal[n] * cos(w * (double)n); + sumQ += hann * (double)signal[n] * sin(w * (double)n); + } + if (windowSum == 0.0) return 0.0; + // The factor of two recovers the amplitude split between the positive and + // negative frequency halves of a real signal. + return (float32_t)(2.0 * sqrt(sumI * sumI + sumQ * sumQ) / windowSum); +} + +/** Fill a buffer with a unit-amplitude cosine, continuing from sample offset. */ +static void FillTone(float32_t *buffer, uint32_t nSamples, float32_t tone_Hz, + float32_t fs_Hz, uint32_t offset) { + const double w = 2.0 * M_PI * (double)tone_Hz / (double)fs_Hz; + for (uint32_t n = 0; n < nSamples; n++) { + buffer[n] = (float32_t)cos(w * (double)(n + offset)); + } +} + +/** + * Gain of a biquad cascade at one frequency, measured through the ARM filter. + * + * Runs the same arm_biquad_cascade_df2T_f32 the radio uses, so the result + * includes whatever the float32 arithmetic does, not just the ideal response. + * + * @param coeffs Cascade coefficients, nSections sets of 5 + * @param nSections Number of biquad sections + * @param tone_Hz Frequency to measure at + * @param fs_Hz Sample rate + * @return Linear gain + */ +static float32_t BiquadCascadeGain(const float32_t *coeffs, uint32_t nSections, + float32_t tone_Hz, float32_t fs_Hz) { + std::vector state(nSections * 2, 0.0f); + std::vector in(MEASURE_SAMPLES), out(MEASURE_SAMPLES); + + arm_biquad_cascade_df2T_instance_f32 filter; + filter.numStages = nSections; + filter.pState = state.data(); + filter.pCoeffs = (float32_t *)coeffs; + + uint32_t offset = 0; + for (int block = 0; block < WARMUP_BLOCKS; block++) { + FillTone(in.data(), MEASURE_SAMPLES, tone_Hz, fs_Hz, offset); + arm_biquad_cascade_df2T_f32(&filter, in.data(), out.data(), MEASURE_SAMPLES); + offset += MEASURE_SAMPLES; + } + return ToneAmplitude(out.data(), MEASURE_SAMPLES, tone_Hz, fs_Hz); +} + +/** + * Gain of an FIR filter at one frequency, measured through the ARM filter. + * + * @param taps Filter coefficients + * @param nTaps Number of taps + * @param tone_Hz Frequency to measure at + * @param fs_Hz Sample rate + * @return Linear gain + */ +static float32_t FIRGain(const float32_t *taps, uint32_t nTaps, + float32_t tone_Hz, float32_t fs_Hz) { + std::vector state(nTaps + MEASURE_SAMPLES - 1, 0.0f); + std::vector in(MEASURE_SAMPLES), out(MEASURE_SAMPLES); + + arm_fir_instance_f32 filter; + arm_fir_init_f32(&filter, nTaps, (float32_t *)taps, state.data(), MEASURE_SAMPLES); + + uint32_t offset = 0; + for (int block = 0; block < 2; block++) { + FillTone(in.data(), MEASURE_SAMPLES, tone_Hz, fs_Hz, offset); + arm_fir_f32(&filter, in.data(), out.data(), MEASURE_SAMPLES); + offset += MEASURE_SAMPLES; + } + return ToneAmplitude(out.data(), MEASURE_SAMPLES, tone_Hz, fs_Hz); +} + +static float32_t ToDB(float32_t gain) { + return 20.0f * log10f(gain + 1e-30f); +} + +/** Write a frequency sweep as index,frequency,gain - the format the notebooks read. */ +static void WriteSweep(const char *filename, const float32_t *freq, + const float32_t *gain, uint32_t nPoints) { + FILE *file = fopen(filename, "w"); + if (file == NULL) return; + for (uint32_t i = 0; i < nPoints; i++) { + fprintf(file, "%u,%7.6f,%7.6f\n", i, freq[i], gain[i]); + } + fclose(file); +} + +// --------------------------------------------------------------------------- +// Response feature finders +// --------------------------------------------------------------------------- + +/** Frequency at which a response first falls level_dB below its value at fLow. */ +static float32_t LowpassCorner(const float32_t *coeffs, uint32_t nSections, + float32_t fLow, float32_t fHigh, float32_t fStep, + float32_t level_dB, float32_t fs_Hz, bool isFIR, + uint32_t nTaps) { + const float32_t reference = isFIR ? FIRGain(coeffs, nTaps, fLow, fs_Hz) + : BiquadCascadeGain(coeffs, nSections, fLow, fs_Hz); + const float32_t target = reference * powf(10.0f, level_dB / 20.0f); + float32_t prevF = fLow, prevG = reference; + for (float32_t f = fLow + fStep; f <= fHigh; f += fStep) { + const float32_t g = isFIR ? FIRGain(coeffs, nTaps, f, fs_Hz) + : BiquadCascadeGain(coeffs, nSections, f, fs_Hz); + if (g <= target) { + // Linear interpolation between the bracketing points. + return prevF + (target - prevG) * (f - prevF) / (g - prevG); + } + prevF = f; + prevG = g; + } + return -1.0f; +} + +/** Frequency of maximum response over a range. */ +static float32_t BandpassPeak(const float32_t *coeffs, uint32_t nSections, + float32_t fLow, float32_t fHigh, float32_t fStep, + float32_t fs_Hz) { + float32_t bestF = fLow, bestG = -1.0f; + for (float32_t f = fLow; f <= fHigh; f += fStep) { + const float32_t g = BiquadCascadeGain(coeffs, nSections, f, fs_Hz); + if (g > bestG) { + bestG = g; + bestF = f; + } + } + return bestF; +} + +// --------------------------------------------------------------------------- +// Fixtures for switching sample rate +// --------------------------------------------------------------------------- + +/** Audio sample rate the frozen reference tables were designed for. */ +#define REFERENCE_AUDIO_FS_HZ 24000.0f + +static float32_t AudioRateHz() { + return (float32_t)SR[SampleRate].rate / (float32_t)RXfilters.DF; +} + +/** + * Rebuild every filter table for a given sample rate. + * + * SampleRate is a reference into the persisted config, and gtest shares process + * state between tests, so anything that changes it has to put it back. + */ +static void RebuildFiltersAtRate(uint8_t rate) { + SampleRate = rate; + InitializeFilters(SPECTRUM_ZOOM_1, &RXfilters); + InitializeTransmitFilters(&TXfilters); +} + +/** Nominal cutoffs of the five CW audio filters, in Hz. */ +static const float32_t CW_FILTER_FC_HZ[5] = {840.0f, 1080.0f, 1320.0f, 1800.0f, 2000.0f}; + +/** Centre frequencies of the 14 equaliser cells, in Hz. */ +static const float32_t EQ_FC_HZ[EQUALIZER_CELL_COUNT] = { + 198.425f, 250.0f, 314.98f, 400.0f, 500.0f, 630.0f, 793.0f, + 1000.0f, 1259.0f, 1587.0f, 2000.0f, 2500.0f, 3150.0f, 4000.0f +}; + +/** The generated CW audio coefficient tables, in the same order as above. */ +static const float32_t *GeneratedCWFilter(int index) { + switch (index) { + case 0: return CW_AudioFilterCoeffs1; + case 1: return CW_AudioFilterCoeffs2; + case 2: return CW_AudioFilterCoeffs3; + case 3: return CW_AudioFilterCoeffs4; + default: return CW_AudioFilterCoeffs5; + } +} + +/** The reference CW audio coefficient tables. */ +static const float32_t *ReferenceCWFilter(int index) { + switch (index) { + case 0: return CW_AudioFilterCoeffs1_ref; + case 1: return CW_AudioFilterCoeffs2_ref; + case 2: return CW_AudioFilterCoeffs3_ref; + case 3: return CW_AudioFilterCoeffs4_ref; + default: return CW_AudioFilterCoeffs5_ref; + } +} + +/** The reference equaliser coefficient tables. */ +static const float32_t *ReferenceEQBand(int index) { + static const float32_t *bands[EQUALIZER_CELL_COUNT] = { + EQ_Band1Coeffs_ref, EQ_Band2Coeffs_ref, EQ_Band3Coeffs_ref, EQ_Band4Coeffs_ref, + EQ_Band5Coeffs_ref, EQ_Band6Coeffs_ref, EQ_Band7Coeffs_ref, EQ_Band8Coeffs_ref, + EQ_Band9Coeffs_ref, EQ_Band10Coeffs_ref, EQ_Band11Coeffs_ref, EQ_Band12Coeffs_ref, + EQ_Band13Coeffs_ref, EQ_Band14Coeffs_ref + }; + return bands[index]; +} + +// =========================================================================== +// 1. Do the generated filters match the tables they replace? +// =========================================================================== + +TEST(FilterDesign, CWAudioFiltersMatchReference) { + RebuildFiltersAtRate(SAMPLE_RATE_192K); + ASSERT_FLOAT_EQ(AudioRateHz(), REFERENCE_AUDIO_FS_HZ) + << "the reference tables were designed at this rate"; + + const uint32_t nPoints = 121; + float32_t freq[nPoints], genDB[nPoints], refDB[nPoints]; + char filename[64]; + + for (int band = 0; band < 5; band++) { + const float32_t fMin = 100.0f; + const float32_t fMax = CW_FILTER_FC_HZ[band] * 2.5f; + const float32_t fStep = (fMax - fMin) / (float32_t)(nPoints - 1); + float32_t worstError = 0.0f; + + for (uint32_t i = 0; i < nPoints; i++) { + freq[i] = fMin + (float32_t)i * fStep; + genDB[i] = ToDB(BiquadCascadeGain(GeneratedCWFilter(band), 6, freq[i], + REFERENCE_AUDIO_FS_HZ)); + refDB[i] = ToDB(BiquadCascadeGain(ReferenceCWFilter(band), 6, freq[i], + REFERENCE_AUDIO_FS_HZ)); + // Below the noise floor of the cascade the two designs are both + // just rounding error, so only compare where there is signal. + if (refDB[i] > -90.0f) { + worstError = fmaxf(worstError, fabsf(genDB[i] - refDB[i])); + } + } + + sprintf(filename, "filtercmp_cw_band_%d_gen.txt", band); + WriteSweep(filename, freq, genDB, nPoints); + sprintf(filename, "filtercmp_cw_band_%d_ref.txt", band); + WriteSweep(filename, freq, refDB, nPoints); + + EXPECT_LT(worstError, 0.05f) + << "CW audio filter " << band << " (" << CW_FILTER_FC_HZ[band] + << " Hz) departs from the reference Chebyshev by " << worstError << " dB"; + } +} + +TEST(FilterDesign, EqualiserCellsMatchReference) { + RebuildFiltersAtRate(SAMPLE_RATE_192K); + ASSERT_FLOAT_EQ(AudioRateHz(), REFERENCE_AUDIO_FS_HZ); + + const uint32_t nPoints = 121; + float32_t freq[nPoints], genDB[nPoints], refDB[nPoints]; + char filename[64]; + + for (int band = 0; band < EQUALIZER_CELL_COUNT; band++) { + const float32_t fMin = EQ_FC_HZ[band] * 0.3f; + // Stop short of Nyquist. These cells have a zero there, and comparing + // two designs inside a null measures rounding error, not the response. + const float32_t fMax = fminf(EQ_FC_HZ[band] * 3.0f, REFERENCE_AUDIO_FS_HZ * 0.45f); + const float32_t fStep = (fMax - fMin) / (float32_t)(nPoints - 1); + float32_t worstError = 0.0f; + + for (uint32_t i = 0; i < nPoints; i++) { + freq[i] = fMin + (float32_t)i * fStep; + genDB[i] = ToDB(BiquadCascadeGain(*EQ_Coeffs[band], 4, freq[i], + REFERENCE_AUDIO_FS_HZ)); + refDB[i] = ToDB(BiquadCascadeGain(ReferenceEQBand(band), 4, freq[i], + REFERENCE_AUDIO_FS_HZ)); + // Deep in the stopband both designs are down in the float32 noise. + if (refDB[i] > -90.0f) { + worstError = fmaxf(worstError, fabsf(genDB[i] - refDB[i])); + } + } + + sprintf(filename, "filtercmp_eq_band_%d_gen.txt", band); + WriteSweep(filename, freq, genDB, nPoints); + sprintf(filename, "filtercmp_eq_band_%d_ref.txt", band); + WriteSweep(filename, freq, refDB, nPoints); + + // The prototype is recovered from these very tables by an exact inverse + // bilinear transform, so anything above rounding error is a real defect. + EXPECT_LT(worstError, 0.01f) + << "equaliser cell " << band << " (" << EQ_FC_HZ[band] + << " Hz) departs from the reference by " << worstError << " dB"; + } +} + +TEST(FilterDesign, CWDecodeFIRMatchesReferenceCorners) { + RebuildFiltersAtRate(SAMPLE_RATE_192K); + + // The replacement is a Kaiser windowed sinc where the original was a + // Parks-McClellan design, so the skirts differ in detail. What has to carry + // over is where the filter turns over and how well it stops. + const float32_t genMinus6 = LowpassCorner(CW_Filter_Coeffs2, 0, 100.0f, 6000.0f, 5.0f, + -6.0f, REFERENCE_AUDIO_FS_HZ, true, 64); + const float32_t refMinus6 = LowpassCorner(CW_Filter_Coeffs2_ref, 0, 100.0f, 6000.0f, 5.0f, + -6.0f, REFERENCE_AUDIO_FS_HZ, true, 64); + EXPECT_NEAR(genMinus6 / refMinus6, 1.0f, 0.02f) + << "generated -6 dB corner " << genMinus6 << " Hz vs reference " << refMinus6 << " Hz"; + + // The CW decoder thresholds on absolute magnitude, so passband gain matters. + EXPECT_NEAR(FIRGain(CW_Filter_Coeffs2, 64, 200.0f, REFERENCE_AUDIO_FS_HZ), 1.0f, 0.01f); + + // Well past the corner it must still be a stopband. + EXPECT_LT(ToDB(FIRGain(CW_Filter_Coeffs2, 64, 4000.0f, REFERENCE_AUDIO_FS_HZ)), -60.0f); +} + +TEST(FilterDesign, TransmitAudioFilterMatchesReferenceCorners) { + RebuildFiltersAtRate(SAMPLE_RATE_192K); + + const float32_t genMinus3 = LowpassCorner(FIR_int3_12ksps_48tap_2k7, 0, 100.0f, 8000.0f, 5.0f, + -3.0f, REFERENCE_AUDIO_FS_HZ, true, 48); + const float32_t refMinus3 = LowpassCorner(FIR_int3_12ksps_48tap_2k7_ref, 0, 100.0f, 8000.0f, 5.0f, + -3.0f, REFERENCE_AUDIO_FS_HZ, true, 48); + EXPECT_NEAR(genMinus3 / refMinus3, 1.0f, 0.02f) + << "transmit audio bandwidth moved: generated " << genMinus3 + << " Hz vs reference " << refMinus3 << " Hz"; + + EXPECT_NEAR(FIRGain(FIR_int3_12ksps_48tap_2k7, 48, 300.0f, REFERENCE_AUDIO_FS_HZ), 1.0f, 0.01f); +} + +// =========================================================================== +// 2. Do the generated filters hold their frequencies across sample rates? +// =========================================================================== + +TEST(FilterDesign, GeneratedCornersHoldAcrossRates) { + const uint8_t savedRate = SampleRate; + + float32_t cw192[5], cw176[5], eq192[EQUALIZER_CELL_COUNT], eq176[EQUALIZER_CELL_COUNT]; + float32_t txAudio192, txAudio176, cwDecode192, cwDecode176; + + RebuildFiltersAtRate(SAMPLE_RATE_192K); + float32_t fs = AudioRateHz(); + for (int b = 0; b < 5; b++) { + cw192[b] = LowpassCorner(GeneratedCWFilter(b), 6, 200.0f, 3600.0f, 5.0f, -6.0f, fs, false, 0); + } + for (int b = 0; b < EQUALIZER_CELL_COUNT; b++) { + eq192[b] = BandpassPeak(*EQ_Coeffs[b], 4, EQ_FC_HZ[b] * 0.85f, EQ_FC_HZ[b] * 1.15f, + EQ_FC_HZ[b] * 0.002f, fs); + } + txAudio192 = LowpassCorner(FIR_int3_12ksps_48tap_2k7, 0, 100.0f, 8000.0f, 5.0f, -3.0f, fs, true, 48); + cwDecode192 = LowpassCorner(CW_Filter_Coeffs2, 0, 100.0f, 6000.0f, 5.0f, -6.0f, fs, true, 64); + + RebuildFiltersAtRate(SAMPLE_RATE_176K); + fs = AudioRateHz(); + for (int b = 0; b < 5; b++) { + cw176[b] = LowpassCorner(GeneratedCWFilter(b), 6, 200.0f, 3600.0f, 5.0f, -6.0f, fs, false, 0); + } + for (int b = 0; b < EQUALIZER_CELL_COUNT; b++) { + eq176[b] = BandpassPeak(*EQ_Coeffs[b], 4, EQ_FC_HZ[b] * 0.85f, EQ_FC_HZ[b] * 1.15f, + EQ_FC_HZ[b] * 0.002f, fs); + } + txAudio176 = LowpassCorner(FIR_int3_12ksps_48tap_2k7, 0, 100.0f, 8000.0f, 5.0f, -3.0f, fs, true, 48); + cwDecode176 = LowpassCorner(CW_Filter_Coeffs2, 0, 100.0f, 6000.0f, 5.0f, -6.0f, fs, true, 64); + + SampleRate = savedRate; + RebuildFiltersAtRate(savedRate); + + FILE *summary = fopen("filtercmp_rate_summary.txt", "w"); + if (summary != NULL) { + fprintf(summary, "stage,type,f_192k_Hz,f_176k_Hz,measured_ratio,expected_ratio\n"); + for (int b = 0; b < 5; b++) { + fprintf(summary, "CW_audio_%.0f_minus6dB,fs_derived,%.1f,%.1f,%.4f,1.0000\n", + CW_FILTER_FC_HZ[b], cw192[b], cw176[b], cw176[b] / cw192[b]); + } + for (int b = 0; b < EQUALIZER_CELL_COUNT; b++) { + fprintf(summary, "EQ_band%d_%.0f_peak,fs_derived,%.1f,%.1f,%.4f,1.0000\n", + b, EQ_FC_HZ[b], eq192[b], eq176[b], eq176[b] / eq192[b]); + } + fprintf(summary, "TX_audio_bandwidth_minus3dB,fs_derived,%.1f,%.1f,%.4f,1.0000\n", + txAudio192, txAudio176, txAudio176 / txAudio192); + fprintf(summary, "CW_decode_FIR_minus6dB,fs_derived,%.1f,%.1f,%.4f,1.0000\n", + cwDecode192, cwDecode176, cwDecode176 / cwDecode192); + fclose(summary); + } + + for (int b = 0; b < 5; b++) { + EXPECT_NEAR(cw176[b] / cw192[b], 1.0f, 0.01f) + << "CW audio filter " << CW_FILTER_FC_HZ[b] << " Hz moved from " + << cw192[b] << " Hz to " << cw176[b] << " Hz across the rate change"; + } + for (int b = 0; b < EQUALIZER_CELL_COUNT; b++) { + EXPECT_NEAR(eq176[b] / eq192[b], 1.0f, 0.01f) + << "equaliser cell " << EQ_FC_HZ[b] << " Hz moved from " + << eq192[b] << " Hz to " << eq176[b] << " Hz across the rate change"; + } + EXPECT_NEAR(txAudio176 / txAudio192, 1.0f, 0.01f) + << "transmit audio bandwidth moved from " << txAudio192 << " Hz to " << txAudio176 << " Hz"; + EXPECT_NEAR(cwDecode176 / cwDecode192, 1.0f, 0.01f) + << "CW decode filter moved from " << cwDecode192 << " Hz to " << cwDecode176 << " Hz"; +} + +TEST(FilterDesign, EqualiserCellsPeakOnTheirLabelledCentres) { + const uint8_t savedRate = SampleRate; + const uint8_t rates[2] = {SAMPLE_RATE_192K, SAMPLE_RATE_176K}; + + for (int r = 0; r < 2; r++) { + RebuildFiltersAtRate(rates[r]); + const float32_t fs = AudioRateHz(); + for (int b = 0; b < EQUALIZER_CELL_COUNT; b++) { + const float32_t peak = BandpassPeak(*EQ_Coeffs[b], 4, EQ_FC_HZ[b] * 0.85f, + EQ_FC_HZ[b] * 1.15f, EQ_FC_HZ[b] * 0.002f, fs); + EXPECT_NEAR(peak / EQ_FC_HZ[b], 1.0f, 0.01f) + << "cell " << b << " labelled " << EQ_FC_HZ[b] << " Hz peaks at " + << peak << " Hz at " << SR[rates[r]].rate << " sps"; + // Peak gain is what the equaliser's flat setting depends on. + EXPECT_NEAR(BiquadCascadeGain(*EQ_Coeffs[b], 4, peak, fs), 1.0f, 0.02f); + } + } + + SampleRate = savedRate; + RebuildFiltersAtRate(savedRate); +} + +// =========================================================================== +// 3. Behaviour the redesign must not break +// =========================================================================== + +/** Number of points in the flat-equaliser sweep. */ +#define FLATSUM_POINTS 61 + +/** + * Response of BandEQ with every cell at unity, measured through the real path. + * + * @param responseDB Output, FLATSUM_POINTS values + * @param freq Output, the frequencies measured at + * @param useReference Bind the cells to the reference tables instead of the generated ones + */ +static void MeasureFlatEqualiserSum(float32_t *responseDB, float32_t *freq, bool useReference) { + const float32_t fs = AudioRateHz(); + const uint32_t nSamples = READ_BUFFER_SIZE / RXfilters.DF; + + if (useReference) { + for (int i = 0; i < EQUALIZER_CELL_COUNT; i++) { + RXfilters.S_Rec[i].pCoeffs = (float32_t *)ReferenceEQBand(i); + memset(RXfilters.S_Rec[i].pState, 0, + sizeof(float32_t) * 2 * RXfilters.eqNumStages); + } + } + + for (uint32_t i = 0; i < FLATSUM_POINTS; i++) { + // Log spacing over the range the equaliser covers. + freq[i] = 250.0f * powf(3200.0f / 250.0f, + (float32_t)i / (float32_t)(FLATSUM_POINTS - 1)); + + std::vector I(nSamples), Q(nSamples); + DataBlock data; + data.I = I.data(); + data.Q = Q.data(); + data.N = nSamples; + data.sampleRate_Hz = fs; + + // The cells at the bottom of the range have long impulse responses, so + // they need several blocks before the output settles. + uint32_t offset = 0; + for (int block = 0; block < 12; block++) { + FillTone(I.data(), nSamples, freq[i], fs, offset); + BandEQ(&data, &RXfilters, RX); + offset += nSamples; + } + responseDB[i] = ToDB(ToneAmplitude(data.I, nSamples, freq[i], fs)); + } +} + +/** Peak-to-peak variation of a response, in dB. */ +static float32_t Ripple(const float32_t *responseDB, uint32_t nPoints) { + float32_t lo = responseDB[0], hi = responseDB[0]; + for (uint32_t i = 1; i < nPoints; i++) { + lo = fminf(lo, responseDB[i]); + hi = fmaxf(hi, responseDB[i]); + } + return hi - lo; +} + +TEST(FilterDesign, FlatEqualiserSumStaysFlat) { + const uint8_t savedRate = SampleRate; + + // BandEQ sums the 14 cells with alternating sign, a reconstruction that only + // comes out flat if every cell keeps its designed shape and peak gain. It is + // the property most at risk from regenerating the cells, so check it through + // the real BandEQ path rather than from the coefficients. + // + // Note the flat sum does not sit at 0 dB - the overlapping cells add to + // roughly +4 dB. That is how the equaliser has always behaved; what matters + // is that the sum is level, and that regenerating the cells did not move it. + int32_t savedEQ[EQUALIZER_CELL_COUNT]; + for (int i = 0; i < EQUALIZER_CELL_COUNT; i++) { + savedEQ[i] = ED.equalizerRec[i]; + ED.equalizerRec[i] = 100; // flat + } + + float32_t freq[FLATSUM_POINTS]; + float32_t generated192[FLATSUM_POINTS], reference192[FLATSUM_POINTS]; + float32_t generated176[FLATSUM_POINTS]; + + RebuildFiltersAtRate(SAMPLE_RATE_192K); + MeasureFlatEqualiserSum(generated192, freq, false); + // Rebuilding puts the coefficient pointers back before the reference pass. + RebuildFiltersAtRate(SAMPLE_RATE_192K); + MeasureFlatEqualiserSum(reference192, freq, true); + WriteSweep("filtercmp_eq_flatsum_192000_gen.txt", freq, generated192, FLATSUM_POINTS); + WriteSweep("filtercmp_eq_flatsum_192000_ref.txt", freq, reference192, FLATSUM_POINTS); + + RebuildFiltersAtRate(SAMPLE_RATE_176K); + MeasureFlatEqualiserSum(generated176, freq, false); + WriteSweep("filtercmp_eq_flatsum_176400_gen.txt", freq, generated176, FLATSUM_POINTS); + + // The generated cells must reconstruct exactly what the frozen ones did. + for (uint32_t i = 0; i < FLATSUM_POINTS; i++) { + EXPECT_NEAR(generated192[i], reference192[i], 0.05f) + << "flat equaliser sum differs from the reference by " + << (generated192[i] - reference192[i]) << " dB at " << freq[i] << " Hz"; + } + + // And the reconstruction must survive the rate change. + const float32_t rippleRef = Ripple(reference192, FLATSUM_POINTS); + const float32_t ripple176 = Ripple(generated176, FLATSUM_POINTS); + EXPECT_LT(ripple176, rippleRef + 0.25f) + << "flat equaliser is less level at 176.4 ksps (" << ripple176 + << " dB peak to peak) than the reference is at 192 ksps (" << rippleRef << " dB)"; + + for (uint32_t i = 0; i < FLATSUM_POINTS; i++) { + EXPECT_NEAR(generated176[i], reference192[i], 0.5f) + << "flat equaliser at 176.4 ksps is " << (generated176[i] - reference192[i]) + << " dB away from the 192 ksps reference at " << freq[i] << " Hz"; + } + + for (int i = 0; i < EQUALIZER_CELL_COUNT; i++) ED.equalizerRec[i] = savedEQ[i]; + SampleRate = savedRate; + RebuildFiltersAtRate(savedRate); +} + +TEST(FilterDesign, TransmitDecimatorRejectsAliases) { + const uint8_t savedRate = SampleRate; + const uint8_t rates[2] = {SAMPLE_RATE_192K, SAMPLE_RATE_176K}; + + // coeffs12K_8K_LPF_FIR feeds a decimate-by-2 stage, so everything above a + // quarter of its input rate folds back into the transmit audio. The table it + // replaces was flat to 0.425 * Fs and gave essentially no protection. + const float32_t referenceAtFold = ToDB(FIRGain(coeffs12K_8K_LPF_FIR_ref, 48, + REFERENCE_AUDIO_FS_HZ * 0.25f, + REFERENCE_AUDIO_FS_HZ)); + EXPECT_GT(referenceAtFold, -6.0f) + << "the reference table is expected to be wide open at the fold point; " + "if this fails the reference data has changed"; + + for (int r = 0; r < 2; r++) { + RebuildFiltersAtRate(rates[r]); + const float32_t fs = AudioRateHz(); + const float32_t atFold = ToDB(FIRGain(coeffs12K_8K_LPF_FIR, 48, fs * 0.25f, fs)); + EXPECT_LT(atFold, -60.0f) + << "generated transmit decimator is only " << atFold + << " dB down at the fold point, running at " << SR[rates[r]].rate << " sps"; + + // It must still pass the audio the transmit chain actually carries. + EXPECT_NEAR(FIRGain(coeffs12K_8K_LPF_FIR, 48, 2500.0f, fs), 1.0f, 0.05f); + } + + SampleRate = savedRate; + RebuildFiltersAtRate(savedRate); +} + +TEST(FilterDesign, AMDCBlockerCornerHoldsAcrossRates) { + const uint8_t savedRate = SampleRate; + const uint8_t rates[2] = {SAMPLE_RATE_192K, SAMPLE_RATE_176K}; + float32_t corner[2]; + + for (int r = 0; r < 2; r++) { + RebuildFiltersAtRate(rates[r]); + const float32_t fs = AudioRateHz(); + // y[n] = x[n] - x[n-1] + pole*y[n-1] is a one pole highpass; read its + // -3 dB corner straight off the pole. + corner[r] = -logf(RXfilters.amDCBlockPole) * fs / TWO_PI; + EXPECT_NEAR(corner[r], RXfilters.amDCBlockCorner_Hz, 1.0f) + << "at " << SR[rates[r]].rate << " sps"; + } + EXPECT_NEAR(corner[1] / corner[0], 1.0f, 0.01f); + + SampleRate = savedRate; + RebuildFiltersAtRate(savedRate); +} + +// =========================================================================== +// 4. The generated tables reach the filters that use them +// =========================================================================== + +TEST(FilterDesign, LiveCWFilterUsesGeneratedCoefficients) { + const uint8_t savedRate = SampleRate; + const int32_t savedIndex = ED.CWFilterIndex; + + // Run a tone through the real CWAudioFilter() path and check it lands where + // the coefficient table says it should. This is what catches a table that is + // generated but never bound, or bound but never re-cleared. + for (int r = 0; r < 2; r++) { + RebuildFiltersAtRate(r == 0 ? SAMPLE_RATE_192K : SAMPLE_RATE_176K); + const float32_t fs = AudioRateHz(); + ED.CWFilterIndex = 4; // the 2.0 kHz filter + + const uint32_t nSamples = READ_BUFFER_SIZE / 8; + std::vector I(nSamples), Q(nSamples); + DataBlock data; + data.I = I.data(); + data.Q = Q.data(); + data.N = nSamples; + data.sampleRate_Hz = fs; + + // In band it should pass, well out of band it should not. + uint32_t offset = 0; + for (int block = 0; block < 8; block++) { + FillTone(I.data(), nSamples, 1000.0f, fs, offset); + CWAudioFilter(&data, &RXfilters); + offset += nSamples; + } + EXPECT_NEAR(ToneAmplitude(data.I, nSamples, 1000.0f, fs), 1.0f, 0.05f) + << "at " << SR[SampleRate].rate << " sps"; + + offset = 0; + for (int block = 0; block < 8; block++) { + FillTone(I.data(), nSamples, 4000.0f, fs, offset); + CWAudioFilter(&data, &RXfilters); + offset += nSamples; + } + EXPECT_LT(ToDB(ToneAmplitude(data.I, nSamples, 4000.0f, fs)), -60.0f) + << "at " << SR[SampleRate].rate << " sps"; + } + + ED.CWFilterIndex = savedIndex; + SampleRate = savedRate; + RebuildFiltersAtRate(savedRate); +} diff --git a/code/test/SignalProcessing_test.cpp b/code/test/SignalProcessing_test.cpp index b61af28..0bd9ceb 100644 --- a/code/test/SignalProcessing_test.cpp +++ b/code/test/SignalProcessing_test.cpp @@ -2023,14 +2023,16 @@ TEST(SignalProcessing, ReceiveProcessing){ // 176400/8 = 22.05 kHz) WITHOUT changing any DSP stage, by flipping the global // SampleRate selector and re-running the existing per-stage sweep helpers. // -// Two classes of stage exist (see docs/RX_DSP_Chain_Parameters.md): -// * Fs-derived - coefficients are recomputed from SR[SampleRate].rate at -// InitializeFilters() time, so their corner frequencies stay -// fixed in Hz when the sample rate changes. -// * Hard-coded - frozen coefficient tables designed for a fixed rate -// (CW audio filters, CW decode FIR, EQ bands: 24 kHz audio). -// Run at 22.05 kHz instead of 24 kHz, every corner/center -// frequency scales by 176400/192000 = 0.91875. +// Every stage measured here is now Fs-derived: its coefficients are recomputed +// from SR[SampleRate].rate at InitializeFilters() time, so its corner and centre +// frequencies stay fixed in Hz when the sample rate changes. +// +// This was not always so. The CW audio filters, the CW decode FIR and the EQ +// cells used to ship frozen tables designed for 24 kHz audio, and running them +// at 22.05 kHz scaled every characteristic frequency by 176400/192000 = 0.91875. +// These tests asserted that shift; they now assert its absence. FilterDesign_test.cpp +// covers the generated filters in more detail, including a direct comparison +// against the frozen tables in reference_filters.cpp. // // These tests are non-destructive: each saves and restores the global // SampleRate (and rebuilds the global RXfilters at the original rate) so the @@ -2038,6 +2040,8 @@ TEST(SignalProcessing, ReceiveProcessing){ // restore at the end always runs. // ============================================================================ +// The rate ratio the frozen tables used to shift by. Kept as documentation of +// what these tests are guarding against. static const float32_t RATE_RATIO_176_192 = 176400.0f / 192000.0f; // 0.91875 // Sweep a lowpass-style stage-response helper and return the frequency (Hz) @@ -2064,7 +2068,7 @@ static float32_t Find176kGainCrossing(void (*resp)(float32_t, DataBlock *, float return -1.0f; } -// -6 dB (half-amplitude) upper cutoff of a CW audio filter (hard-coded @24kHz). +// -6 dB (half-amplitude) upper cutoff of a CW audio filter. static float32_t CW176kUpperCutoffHz(int bf){ ED.CWFilterIndex = bf; return Find176kGainCrossing(CW_filter_tone, 200.0f, 3600.0f, 10.0f, 0.5f); @@ -2076,7 +2080,7 @@ static float32_t AM176kCornerHz(){ } // Peak (center) frequency of an EQ band, found by argmax of a fine sweep -// (hard-coded @24kHz). +// generated for the current sample rate. static float32_t EQ176kPeakHz(int bf, float32_t fmin, float32_t fmax, float32_t fstep){ DataBlock *dummy = nullptr; float32_t best_f = fmin, best_g = -1.0f; @@ -2089,25 +2093,24 @@ static float32_t EQ176kPeakHz(int bf, float32_t fmin, float32_t fmax, float32_t } // Measure a characteristic frequency of three representative stages at both -// 192 kHz and 176.4 kHz and confirm the expected behaviour: hard-coded tables -// scale their corner/center frequency by 176400/192000, while the Fs-derived -// stage keeps its corner fixed in Hz. Also writes a summary CSV for the record. -TEST(ReceiveChain176k, HardCodedStagesShiftFsDerivedStay){ +// 192 kHz and 176.4 kHz and confirm that each one keeps that frequency fixed in +// Hz. Also writes a summary CSV for the record. +TEST(ReceiveChain176k, AllStagesHoldTheirFrequencies){ uint8_t saved_rate = SampleRate; - // --- CW audio filter index 4 ("2.0 kHz"): HARD-CODED (designed @ 24 kHz) -- + // --- CW audio filter index 4 ("2.0 kHz") --------------------------------- SampleRate = SAMPLE_RATE_192K; float32_t cw_192 = CW176kUpperCutoffHz(4); SampleRate = SAMPLE_RATE_176K; float32_t cw_176 = CW176kUpperCutoffHz(4); - // --- Receive EQ band 13 (fc = 4000 Hz): HARD-CODED (designed @ 24 kHz) ---- + // --- Receive EQ band 13 (fc = 4000 Hz) ----------------------------------- SampleRate = SAMPLE_RATE_192K; float32_t eq_192 = EQ176kPeakHz(13, 3000.0f, 4600.0f, 5.0f); SampleRate = SAMPLE_RATE_176K; float32_t eq_176 = EQ176kPeakHz(13, 3000.0f, 4600.0f, 5.0f); - // --- AM audio lowpass IIR: Fs-DERIVED (control, should not move in Hz) ---- + // --- AM audio lowpass IIR: the stage that was always Fs-derived ---------- SampleRate = SAMPLE_RATE_192K; float32_t am_192 = AM176kCornerHz(); SampleRate = SAMPLE_RATE_176K; @@ -2121,10 +2124,10 @@ TEST(ReceiveChain176k, HardCodedStagesShiftFsDerivedStay){ FILE *f = fopen("176k_stage_shift_summary.txt", "w"); if (f != nullptr){ fprintf(f, "stage,type,f_192k_Hz,f_176k_Hz,measured_ratio,expected_ratio\n"); - fprintf(f, "CW_audio_filter_2k0_upper_cutoff,hardcoded,%.1f,%.1f,%.4f,%.4f\n", - cw_192, cw_176, cw_176 / cw_192, RATE_RATIO_176_192); - fprintf(f, "EQ_band13_4000_peak,hardcoded,%.1f,%.1f,%.4f,%.4f\n", - eq_192, eq_176, eq_176 / eq_192, RATE_RATIO_176_192); + fprintf(f, "CW_audio_filter_2k0_upper_cutoff,fs_derived,%.1f,%.1f,%.4f,%.4f\n", + cw_192, cw_176, cw_176 / cw_192, 1.0f); + fprintf(f, "EQ_band13_4000_peak,fs_derived,%.1f,%.1f,%.4f,%.4f\n", + eq_192, eq_176, eq_176 / eq_192, 1.0f); fprintf(f, "AM_audio_lowpass_corner,fs_derived,%.1f,%.1f,%.4f,%.4f\n", am_192, am_176, am_176 / am_192, 1.0f); fclose(f); @@ -2135,15 +2138,22 @@ TEST(ReceiveChain176k, HardCodedStagesShiftFsDerivedStay){ ASSERT_GT(eq_192, 0.0f); ASSERT_GT(eq_176, 0.0f); ASSERT_GT(am_192, 0.0f); ASSERT_GT(am_176, 0.0f); - // Hard-coded tables: characteristic frequency scales with the rate ratio. - EXPECT_NEAR(cw_176 / cw_192, RATE_RATIO_176_192, 0.03) - << "CW audio filter cutoff should scale by 176400/192000 (table designed @ 24 kHz)"; - EXPECT_NEAR(eq_176 / eq_192, RATE_RATIO_176_192, 0.03) - << "EQ band center should scale by 176400/192000 (table designed @ 24 kHz)"; - - // Fs-derived stage: corner stays fixed in Hz (ratio ~ 1). + // All three stages are generated from Fs, so their characteristic + // frequencies stay put. Each of these used to read RATE_RATIO_176_192. + EXPECT_NEAR(cw_176 / cw_192, 1.0f, 0.03) + << "CW audio filter cutoff moved from " << cw_192 << " Hz to " << cw_176 + << " Hz; the Chebyshev design should be regenerated for the new rate"; + EXPECT_NEAR(eq_176 / eq_192, 1.0f, 0.03) + << "EQ band centre moved from " << eq_192 << " Hz to " << eq_176 + << " Hz; the cell prototype should be rebilineared for the new rate"; EXPECT_NEAR(am_176 / am_192, 1.0f, 0.03) << "AM audio lowpass corner should stay constant in Hz (recomputed from Fs)"; + + // Guard against a regression to the old behaviour specifically. + EXPECT_GT(cw_176 / cw_192, RATE_RATIO_176_192 + 0.03) + << "CW audio filter is still tracking the sample rate ratio"; + EXPECT_GT(eq_176 / eq_192, RATE_RATIO_176_192 + 0.03) + << "EQ band is still tracking the sample rate ratio"; } // Dump full stage-response sweeps at 176.4 kHz to "176k_*.txt" files, in the @@ -2157,7 +2167,7 @@ TEST(ReceiveChain176k, StageResponseDump){ DataBlock *dout = nullptr; char strbuf[64]; - // CW audio filters (hard-coded @ 24 kHz): 5 selectable bandwidths. + // CW audio filters: 5 selectable bandwidths. { float32_t fmin = 100.0f, fmax = 6000.0f; uint32_t Npoints = 201; @@ -2174,7 +2184,7 @@ TEST(ReceiveChain176k, StageResponseDump){ } } - // Receive EQ bands (hard-coded @ 24 kHz): 14 graphic-EQ cells. + // Receive EQ bands: 14 graphic-EQ cells. { float32_t fmin = 100.0f, fmax = 8000.0f; uint32_t Npoints = 401; diff --git a/code/test/TransmitChain_test.cpp b/code/test/TransmitChain_test.cpp index 02cf141..d219a88 100644 --- a/code/test/TransmitChain_test.cpp +++ b/code/test/TransmitChain_test.cpp @@ -981,3 +981,157 @@ TEST(TransmitChain, TransmitReceiveProcessingAppliesGainAndCorrection){ ED.IQPhaseCorrectionFactor[ED.currentBand[ED.activeVFO]] = originalPhsCorr; } + +// ============================================================================ +// 176.4 kHz transmit-chain stage-response measurement +// ---------------------------------------------------------------------------- +// The transmit chain is mostly built from anti-alias and anti-image filters +// whose corners are specified as a fraction of the sample rate. Those scale with +// Fs by design and need no adjustment. Two stages are different: +// +// * TXInterpolateBy2Again (FIR_int3) is what actually limits the transmit +// audio bandwidth, at -3 dB around 2.76 kHz. Left to scale with Fs it would +// drop to 2.53 kHz at 176.4 ksps, narrowing the transmitted audio. +// * TXDecimateBy2Again (coeffs12K_8K_LPF_FIR) feeds a decimate-by-2, so +// anything above a quarter of its input rate folds back into the audio. The +// table it used to carry was flat well past that point. +// +// Both are now generated from the sample rate. These tests confirm the audio +// bandwidth holds in Hz across a rate change, and that the decimator stops. +// +// Non-destructive: SampleRate is saved and restored, and the filters rebuilt at +// the original rate. +// ============================================================================ + +// Amplitude of one frequency component, by correlating against a complex +// exponential through a Hann window. Peak picking (getmax) misses the true peak +// of a sampled sine by up to a decibel when there are few samples per cycle, +// which is too coarse for comparing corner frequencies across rates. +static float32_t TXToneAmplitude(const float32_t *signal, uint32_t nSamples, + float32_t tone_Hz, float32_t fs_Hz){ + double sumI = 0.0, sumQ = 0.0, windowSum = 0.0; + const double w = 2.0 * M_PI * (double)tone_Hz / (double)fs_Hz; + for (uint32_t n = 0; n < nSamples; n++){ + const double hann = 0.5 * (1.0 - cos(2.0 * M_PI * (double)n / (double)(nSamples - 1))); + windowSum += hann; + sumI += hann * (double)signal[n] * cos(w * (double)n); + sumQ += hann * (double)signal[n] * sin(w * (double)n); + } + if (windowSum == 0.0) return 0.0; + return (float32_t)(2.0 * sqrt(sumI * sumI + sumQ * sumQ) / windowSum); +} + +// Gain of the transmit audio path (decimate by 2, Hilbert, interpolate by 2) at +// one frequency. Runs the real stage functions on 256-sample blocks, which is +// what TransmitProcessing() feeds them. +static float32_t TXAudioPathGain(float32_t tone_Hz, float32_t audioFs_Hz){ + const uint32_t N = 256; + float32_t I[N], Q[N]; + DataBlock data; + + InitializeTransmitFilters(&TXfilters); + + // Several blocks so the FIR delay lines fill before the measurement. + for (int block = 0; block < 4; block++){ + const double w = 2.0 * M_PI * (double)tone_Hz / (double)audioFs_Hz; + for (uint32_t n = 0; n < N; n++){ + I[n] = (float32_t)cos(w * (double)(n + block * N)); + Q[n] = I[n]; + } + data.I = I; + data.Q = Q; + data.N = N; + data.sampleRate_Hz = audioFs_Hz; + TXDecimateBy2Again(&data, &TXfilters); // 256 in, 128 out + HilbertTransform(&data, &TXfilters); // 128 + TXInterpolateBy2Again(&data, &TXfilters);// 128 in, 256 out + } + // TXInterpolateBy2Again applies a gain of 2 to make up for the upsampling. + return TXToneAmplitude(data.I, N, tone_Hz, audioFs_Hz) / 2.0f; +} + +// Frequency at which the transmit audio path first falls level_dB below its +// passband value, by linear interpolation between sweep points. +static float32_t TXAudioCornerHz(float32_t audioFs_Hz, float32_t level_dB){ + const float32_t fStart = 300.0f, fStop = 6000.0f, fStep = 20.0f; + const float32_t reference = TXAudioPathGain(fStart, audioFs_Hz); + const float32_t target = reference * powf(10.0f, level_dB / 20.0f); + float32_t prevF = fStart, prevG = reference; + for (float32_t f = fStart + fStep; f <= fStop; f += fStep){ + const float32_t g = TXAudioPathGain(f, audioFs_Hz); + if (g <= target){ + return prevF + (target - prevG) * (f - prevF) / (g - prevG); + } + prevF = f; + prevG = g; + } + return -1.0f; +} + +TEST(TransmitChain176k, AudioBandwidthHoldsAcrossRates){ + uint8_t saved_rate = SampleRate; + + SampleRate = SAMPLE_RATE_192K; + float32_t fs_192 = (float32_t)SR[SampleRate].rate / RXfilters.DF; + float32_t corner_192 = TXAudioCornerHz(fs_192, -3.0f); + + SampleRate = SAMPLE_RATE_176K; + float32_t fs_176 = (float32_t)SR[SampleRate].rate / RXfilters.DF; + float32_t corner_176 = TXAudioCornerHz(fs_176, -3.0f); + + // Restore before asserting. + SampleRate = saved_rate; + InitializeTransmitFilters(&TXfilters); + + FILE *f = fopen("176k_transmit_shift_summary.txt", "w"); + if (f != nullptr){ + fprintf(f, "stage,type,f_192k_Hz,f_176k_Hz,measured_ratio,expected_ratio\n"); + fprintf(f, "TX_audio_bandwidth_minus3dB,fs_derived,%.1f,%.1f,%.4f,%.4f\n", + corner_192, corner_176, corner_176 / corner_192, 1.0f); + fclose(f); + } + + ASSERT_GT(corner_192, 0.0f); + ASSERT_GT(corner_176, 0.0f); + + // The transmit passband is specified in Hz, so it must not follow the rate. + // Before FIR_int3 was generated from Fs this ratio read 176400/192000. + EXPECT_NEAR(corner_176 / corner_192, 1.0f, 0.02) + << "transmit audio bandwidth moved from " << corner_192 << " Hz to " + << corner_176 << " Hz across the rate change"; + + // And it should still be about where it has always been. + EXPECT_NEAR(corner_192, 2760.0f, 150.0f); +} + +TEST(TransmitChain176k, DecimatorStopsBeforeTheFoldPoint){ + uint8_t saved_rate = SampleRate; + const uint8_t rates[2] = {SAMPLE_RATE_192K, SAMPLE_RATE_176K}; + + for (int r = 0; r < 2; r++){ + SampleRate = rates[r]; + InitializeTransmitFilters(&TXfilters); + const float32_t audioFs = (float32_t)SR[SampleRate].rate / RXfilters.DF; + + // TXDecimateBy2Again halves the rate, so audioFs/4 is where the + // stopband has to have taken hold. + float32_t sum = 0.0f; + for (int i = 0; i < 48; i++) sum += coeffs12K_8K_LPF_FIR[i]; + EXPECT_NEAR(sum, 1.0f, 0.01f) << "decimator should have unity DC gain"; + + // Evaluate the tap set directly at the fold point. + double re = 0.0, im = 0.0; + const double w = 2.0 * M_PI * 0.25; // audioFs/4 normalised to audioFs + for (int i = 0; i < 48; i++){ + re += (double)coeffs12K_8K_LPF_FIR[i] * cos(w * i); + im -= (double)coeffs12K_8K_LPF_FIR[i] * sin(w * i); + } + const float32_t atFold_dB = 20.0f * log10f((float32_t)sqrt(re*re + im*im) + 1e-30f); + EXPECT_LT(atFold_dB, -60.0f) + << "transmit decimator is only " << atFold_dB << " dB down at " + << (audioFs / 4.0f) << " Hz, running at " << SR[SampleRate].rate << " sps"; + } + + SampleRate = saved_rate; + InitializeTransmitFilters(&TXfilters); +} diff --git a/code/test/analyze_transmit_filter_chain.ipynb b/code/test/analyze_transmit_filter_chain.ipynb index 4f9a450..31d4ac8 100644 --- a/code/test/analyze_transmit_filter_chain.ipynb +++ b/code/test/analyze_transmit_filter_chain.ipynb @@ -437,7 +437,7 @@ "\n", "\n", "\n", - "#sbs = np.genfromtxt('build/TXEndToEnd_sidebandseparation.txt',delimiter=\",\")\n", + "#sbs = np.genfromtxt('build/TXEndToEnd_sidebandseparation_fixed.txt',delimiter=\",\")\n", "#plt.figure(facecolor='white')\n", "#plt.plot(sbs[:,1],10*sbs[:,2],'k-')\n", "##plt.xlim([-5000,5000])\n", @@ -2079,4 +2079,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/code/test/compare_176k_vs_192k.ipynb b/code/test/compare_176k_vs_192k.ipynb index 2835244..03e663d 100644 --- a/code/test/compare_176k_vs_192k.ipynb +++ b/code/test/compare_176k_vs_192k.ipynb @@ -2,36 +2,43 @@ "cells": [ { "cell_type": "markdown", - "id": "a1092016", + "id": "a048f9ed", "metadata": {}, "source": [ "# Receive DSP chain: 176.4 kHz vs 192 kHz\n", "\n", "Compares the per-stage sweep files produced by the `ReceiveChain176k` test suite\n", "(`176k_*.txt`, generated at Fs = 176.4 kHz / audio rate 22.05 kHz) against the\n", - "standard sweeps produced by the existing tests (generated at the default\n", - "Fs = 192 kHz / audio rate 24 kHz).\n", + "192 kHz sweeps from the `SignalProcessing` suite (audio rate 24 kHz).\n", "\n", - "Run the tests first so the `build/` files exist:\n", + "Several stages used to carry coefficient tables designed offline for 24 kHz\n", + "audio. Run at 22.05 kHz, every corner and centre frequency in them scaled by\n", + "176400/192000 = 0.91875. They are now generated from an analog design spec on\n", + "every sample rate change, so the two rates should lie on top of each other.\n", "\n", - "```\n", - "cd code/test/build && cmake ../ && make all_SigProc_tests && ./all_SigProc_tests\n", - "```\n", + "The second half of this notebook compares the generated filters against those\n", + "original tables, which are kept in `code/test/reference_filters.cpp`.\n", "\n", - "**Expectation** (see `docs/RX_DSP_Chain_Parameters.md`):\n", + "Regenerate the data with:\n", "\n", - "* **Hard-coded** coefficient tables (CW audio filters, EQ bands) were designed\n", - " for a 24 kHz audio rate. Run at 22.05 kHz their corner/center frequencies\n", - " scale by `176400/192000 = 0.91875`.\n", - "* **Fs-derived** stages (e.g. the AM audio lowpass) recompute from the sample\n", - " rate, so their corners stay fixed in Hz.\n" + "```bash\n", + "cd code/test/build && cmake ../ && make all_SigProc_tests all_FilterDesign_tests\n", + "./all_SigProc_tests && ./all_FilterDesign_tests\n", + "```\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "303ac25e", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-28T10:57:18.544776Z", + "iopub.status.busy": "2026-07-28T10:57:18.544547Z", + "iopub.status.idle": "2026-07-28T10:57:19.100975Z", + "shell.execute_reply": "2026-07-28T10:57:19.099908Z" + } + }, "outputs": [], "source": [ "import numpy as np\n", @@ -62,35 +69,43 @@ }, { "cell_type": "markdown", - "id": "969eb44d", + "id": "3471c4bf", "metadata": {}, "source": [ - "## CW audio filters (hard-coded @ 24 kHz)\n", + "## CW audio filters\n", "\n", - "The five selectable CW bandwidths. Solid = 192 kHz, dashed = 176.4 kHz. Every skirt shifts down ~8%." + "The five selectable CW bandwidths: 12-pole Chebyshev type I, 0.02 dB ripple.\n", + "Solid = 192 kHz, dashed = 176.4 kHz. The pairs should be indistinguishable.\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "c5593dfc", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-28T10:57:19.103848Z", + "iopub.status.busy": "2026-07-28T10:57:19.103538Z", + "iopub.status.idle": "2026-07-28T10:57:19.405209Z", + "shell.execute_reply": "2026-07-28T10:57:19.404705Z" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " filter 192k -6dB 176k -6dB ratio (expected 0.9187)\n", - " 0.8 kHz 852.6 784.1 0.9196\n", - " 1.0 kHz 1093.9 1005.8 0.9195\n", - " 1.3 kHz 1338.2 1230.0 0.9192\n", - " 1.8 kHz 1823.5 1675.2 0.9187\n", - " 2.0 kHz 2065.4 1898.3 0.9191\n" + " 0.8 kHz 852.6 852.5 1.0000\n", + " 1.0 kHz 1093.9 1093.8 0.9999\n", + " 1.3 kHz 1338.2 1337.9 0.9998\n", + " 1.8 kHz 1823.4 1822.8 0.9997\n", + " 2.0 kHz 2065.4 2064.5 0.9996\n" ] }, { "data": { - "image/png": "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urJW1UX8k08+Yfjw4cak3eDrr7+mW7duuLq64uDgQLNmzZg8eXKpMvHx8Tz55JN4e3tja2tL69atef/999HpdJXus6Iuxxs2bKBVq1bGur744otyt/fx8WHAgAGsWrWq0v2cOXMGSZLK7T6+e/duJEli586dAKSlpTF9+nSCgoKwtbXFy8uLnj17sn///kr3YXifayM7O5uvv/6ayMhImjdvbnz+xx9/JDo6mhdeeKHc777qOnr0KGvWrOGzzz5DqVTWuh6A8+fP06xZM7p168b169drVYfh+7a8v6q60H/yySf4+voyYMCAUs/LsszSpUsJCQnBzs6OTp06sXv37jLbFxQUMGfOHMLDw3F1dcXDw4MePXrw7bfflilbnWsf9N1/582bh7+/Py4uLvTv358LFy6UKVed70aA77//nvDwcGxtbWnatCnLly8v972wsbHhscceY82aNWX+HRIEoX6JhFYQhApptVoOHjxI586dCQoKqrK8QqGgd+/eHDt2zJgUREdHk5mZSWRkJJGRkRw5csRY/vjx4+Tn51eru3FcXBzPPPMMW7ZsYfv27YwePZrnn3+exYsX1+rYzp07R79+/cjKymLDhg2sWrWK06dPV6v1pKCggL59+/LFF1/w0ksv8f333/Pkk0+ydOlSRo8eXem2O3bsMLYC/fDDD0RFRVW7VW7o0KG88847AKxcuZKoqCiioqIYOnQoABs3bmTgwIG4uLjw+eefs2XLFjw8PBg0aFC5P9xGjx5N8+bN+frrr41JyZAhQ/jtt99YunQp+/bt45NPPiEiIoKsrCzjdoZxxqYcP6rRaMpNGgzPxcTEVLr9lStXuHr1aq26G3/44YeMGzeON954g88++wyV6nbnJVmWKS4uLvOn1WrL1GM4H4a/gwcPEhAQgK+vLx4eHhXuPzExkd9//73M5yAqKorHHnuMZs2a8d///pfvv/+eBQsWlEq409LSeOCBB9i7dy+LFy9m586d9O/fn5dffplZs2bV+L3YsGEDkyZNonXr1mzbto0333yTxYsXc/DgwXLL9+nTh59++qnU9XG3jh07EhERwfr168vdn7e3N0OGDAHgqaee4ptvvmHBggXs3buXzz77jP79+5Oenl7jY6mu//73v+Tm5pb5HP74448AODs7M2TIEOPcAcOGDeP8+fPVqjs/P58pU6bwwgsv0KlT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", + "image/png": "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uoi//fbbjBgxwpq0l/r888/p1q0bfn5+eHp60qxZMyZOnFimTEpKCvfddx9BQUG4ubnRpk0bXn31Vcxmc5XHrKzL8cqVK2nVqpV1Xx9++GGFzw8ODmbgwIG88847VR5n//79KIpSYffxDRs2oCgK69evByAjI4OpU6cSHh6Om5sbjRo1okePHmzZsqXKY5S+zjciJyeHzz//nD59+tC8eXPr9u+//56EhAQeffTRCj/7auqHH35g2bJlvPfee+j1+hveD8CRI0do1qwZ3bp14/z58ze0j9LP24r+qutC//bbb9O4cWMGDhxYZruqqrzyyitERkbi7u5O586d2bBhQ7nnFxYWMmvWLGJiYvDz8yMgIIDu3bvz5Zdflitbk7oPlu6/c+bMISQkBF9fXwYMGMDRo0fLlavJZyPAN998Q0xMDG5ubjRt2pTFixdX+FoYDAbuvvtuli1bVu7fISGEfUlCK4SolMlkYtu2bXTp0oXw8PBqy+t0Onr37s3OnTutSUFCQgJZWVn06dOHPn36sGPHDmv5Xbt2UVBQUKPuxklJSTz44IN89tlnrF27ljvuuINHHnmE559//obO7dChQ/Tv35/s7GxWrlzJO++8w759+2rUelJYWEi/fv348MMPefzxx/nmm2+47777eOWVV7jjjjuqfO66deusrUDffvst8fHxNW6VGzZsGC+++CIAS5YsIT4+nvj4eIYNGwbAxx9/zKBBg/D19eWDDz7gs88+IyAggLi4uAq/uN1xxx00b96czz//3JqUDB06lF9//ZVXXnmFzZs38/bbbxMbG0t2drb1eaXjjGtz/KjRaKwwaSjdlpiYWOXzT548SXJy8g11N3799de58847eeaZZ3jvvfdwcfmj85KqqpSUlJT7M5lM5fZTej1K/7Zt20ZoaCiNGzcmICCg0uOnpqby22+/lXsfxMfHc/fdd9OsWTP++9//8s033zBv3rwyCXdGRga33normzZt4vnnn2f9+vUMGDCAJ554ghkzZlz3a7Fy5UoeeOAB2rRpw5o1a3j22Wd5/vnn2bZtW4Xl+/bty48//limflyrU6dOxMbG8v7771d4vKCgIIYOHQrA/fffzxdffMG8efPYtGkT7733HgMGDODixYvXfS419d///pe8vLxy78Pvv/8eAB8fH4YOHWqdO2D48OEcOXKkRvsuKChg0qRJ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1/O+KI25uvdgQEAAt99+Ox9++KG1K+jKlSu5+eaby3QT//TTTxk/fjzvvfce3bt3JyAggL/+9a+cPXu2xudxPUrH9VbU7b905tq4uLgy22NiYmjSpAl79+6tct8TJ07kjjvuoGvXrmRnZ5OdnU1hYSEAly9frvF76uOPPyY0NJR77rmn0jI6na7Cetq1a9dKfwzavn07EyZM4K9//WuNhm5UVk+vp96sXbuWu+66i9DQUD7++GPi4+PZvXs3EydOtL42ULO6X+raGYZLhymUxlvTz8asrCzMZrNN6r8QwrZklmMhRKX0ej39+/dnw4YNpKamEhYWVu1zFEWhT58+fPvtt/zyyy9kZ2eXSWj79OnD/Pnzrb/q1ySh/e9//4urqytff/11mS9TFa2B6ebmVuHETNd+sW/YsGGFX5Jr8sW5YcOG/Pzzz6iqWiapPX/+PCUlJQQGBla7j9pWesw333yz0plrr26NBiqcRCcyMtL6Jf/333/ns88+Y/78+RiNxmon//mzhgwZQnJyMsePH6ekpISWLVvy2WefAZYvuFcrTWbff/99li9fzn333Xddx4qIiOC1115j9OjR3HHHHXz++eflvqjfiJUrVzJ37lzmz59f4QQ2FSm9dpmZmeWS05EjRzJy5EiKiorYtWsX//jHP7j33nuJioqie/fuNGzYkDNnzpTbZ2lr2vXUxdLE4HreF6U/ktTkOA888ACff/45mzdvJiIigt27d/P222+XKRMYGMgbb7zBG2+8QUpKCuvXr2f27NmcP3++1mfWNRqNfPTRR3Tp0oWYmJhyj5e29FVEVdVqJzw7ePAgBw8e5PPPPy/3WHR0NJ06darRZGvffvstd999N7169WLr1q0Vtnper8TEREaNGkWfPn149913a/Scq+vp1aqrN1cvL/bxxx/TtGlTPv300zKfPxV9ZldX92uqpp+NxcXFKIpis/ovhLAdaaEVQlTp6aefRlVVpkyZgtFoLPd4cXExX331VZlt/fr1Iy8vj0WLFhEUFFSmNatPnz5cvHiRN99801q2Ooqi4OLiUmaG0IKCAj766KNyZaOiospNILRt2zZyc3PLxbh161brr/dgmQSrtItrVfr3709ubm65hLq0G2r//v2r3ceNurb1oVSPHj3w9/fn0KFDlbbUXO9aoS1btuTZZ5+lQ4cO1bZG1RZFUWjRogVt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VhvHzJkziYqKQlEUDhw4UGW8jlafABYtWkT79u1p27Yto0ePJjs7G4D09HTi4uJo1aoVHTt25K677iIzM/NPx1yXybI9QgghhBAO7naf+yt97Oahsbzw9TPW+3cFT6Ywv6jCsh37tOXV7Qus9+9vOp3V51fUKIYHH3yQqVOnMmHCBFavXs2kSZOIj48vV279+vV8//33JCQk4OrqysKFC3nmmWf47LPPanSc2rZhwwbmzZvH3LlzefXVV3FzcyM5OZkFCxbwww8/8MorrwDg6+vLwoULuXTpEs8991yZfQwYMICEhATr/eHDh9OvXz/r/YkTJ9KjRw8++eQTAM6cOVNlTNOnT2fo0KHk5OTU0lnWXIGpmG7/e8Gmx/h56Bw8XQxVlhk7dixPPfUUPXv2rLKcI9anzZs38+GHHxIfH4+Pjw8LFixgzpw5LFmyBL1ez9y5c62vy5NPPsns2bNZtmyZ3c/VXqSFVgghhBBC2NT58+fZu3cv9913HwBjxozh1KlTJCUlVVi+qKiIwsJCVFXl8uXLhIWFVXuM1atXExMTw4kTJ6otm5CQUKbF1NfXlwULFpQrl56ezrx589i6dSu33347bm5uAERGRrJixQqys7PZsmULAAEBAfTs2RMvL68qj52ens62bdu4/37LjwzHjx9n7969PP7449YyTZo0qfT5n3zyCcHBwfTp06fSMmlpadx00028//77VcZSn/Xu3btG9QIcrz7t37+fXr164ePjA1h+IPnoo48ACA4OLpPkd+vWjZMnT5bbh6qq/O1vf2PkyJHk5+dXe451mbTQCiGEEEI4uPU5H1X6mF5ftn3js3PvVVpWp1PK3P/o1Fs1Ov7p06cJCQnBxcXy1VNRFCIiIkhJSSEqKqpM2REjRrBjxw4aN26Mj48PoaGh7Nixo8r9v/rqq6xfv55t27YREBBAUlIS2dnZxMTEVFg+JibG2mK6fft2pkyZwuTJk8uVW7p0KXPmzMHX15fPPvuMF198keDgYNq2bcstt9zCwoULeeihhxgwYECNXgeADz74gCFDhhAUFATAoUOHCA8PZ9q0aezZs4fAwEBefvllYmNjyz03PT2d1157jR07drB69eoK95+YmMi9997L66+/zsCBA2scV0156F35eeicG3quqqoUG424GgwoilJpOQ+9642GV86IESP47rvvHKo+de3alaVLl3Lu3DmCgoL4+OOPycnJITMzk4CAAGs5k8nEkiVLGDVqVJnnFxYWMmnSJIKCgli3bh06Xf1u43TIhPatt95i0aJFnDlzhnbt2vHGG2/Qq1cvrcMSQgghhNCEh5e75mWvTWAqGye5d+9ejhw5QlpaGr6+vsyePZsZM2awcuXKCsvPnz+fkJAQNm3aZG3xAvD39y/TzbeiGA4ePMgDDzzA119/TWhoaLl9//rrrzz++ONcvHiRZ599lp07d+Lp6UmfPn3o1KkTQUFBZcYn1sT777/PG2+8Yb1fXFxMfHw8zz//PMuWLWPjxo2MGDGCpKQk6w8ApaZMmcIrr7yCt7d3hftOTExk1KhRfPnll3To0OG64qopRVGq7Q5cGVVVMZrB4FJ1QlubHLE+9e3bl1mzZjFs2DBcXFy44447AHB1/eOHAFVVmT59Ov7+/jzyyCNlnj948GDGjBnD008/Xe2x6oP6nY5X4NNPP+XRRx9lzpw57Nu3j169ejFkyBBSUlK0Dk0IIYQQwimFh4eTmppKSUkJYPmyffr0aSIiIsqVXblyJf369cPf3x+dTsf48ePZvn17pfvu3r07R44c4dSpU9cVU3p6OiNHjmTFihW0b9++wjKqqqLX6zlx4gSxsbEEBQXh7e1tbUHLz8/H09Ozxsf8/vvvyc/PJy4uzrotMjKS0NBQ65jauLg4jEYjqamp5Z4fHx/PpEmTiIqK4oknnmDDhg1l9hUWFkZgYGCVr5ezcdT6VNqiv2vXLmv369IuyGCZNOv06dN8+umn5Vpg+/fvz6ZNmzQZg20LDpfQvvbaa0yaNInJkyfTpk0b3njjDcLDw3n77be1Dk0IIYQQwikFBQURGxvLxx9/DMCaNWuIiooq190YoFmzZmzdupXi4mIAvvrqq0oTBLAkgO+99x7Dhw8v14JWmZycHIYNG8aCBQu47bbbKi0XGxvLjh07iI6OZv/+/Vy4cIG8vDy2bt2K0Whk9uzZTJgwoUbHBFixYgUTJkxAr9dbt3Xp0gVfX18SExMB2LNnD0CFLXyZmZkkJSWRlJTE4sWLGTJkCBs3brQ+HhAQwJYtW1i9ejUvvGDbiZvqC0etT6UTh+Xn5zNv3jyeeuop62MzZ87k+PHjrFu3DoOhfGv63Llzuf322xk4cCBZWVk1Ol5d5lBdjo1GI7/++mu5qc4HDRrETz/9VOFzioqKKCr6Yya/y5cvA2A2mzGbzbUaX+qFc/znzAP4u5UfeF3aYaHYrCO/5I/uDb6GApSKCgIms478kj8qqbdrIbpyvTcs3XlMqo6CEoP1vpeLEUWpuKuPqioUmFyth3PXF1vLXrt7M1BYUtq9QcFNX4yusv2iUFDiCqplL24uxeiVil9jFYX8YgOle3LXF6PXVT6Fe67RYI3O3aUYF525dEfl5BjdLGUPWGJw1Zkq3W+O0R21dL/6Ygz6KsoWGTCjt8bgpi+ptOxloxsm9UpZvRF3l5qWLcbTpZhrT670uhSYXDGrCgrgqivBoDdT9kVQrPcKS1woMetRUXDRmfDQF1OZIpOeElWPAugVM25VxFtUoqfEbPlo0Stm3F0r329hiQvFJktZnWLGy/WPpSOuvXSFJleKrtQ1vWLG23D1UhFla2ZBiSuFpXX4gBk/Q+XLShSUuFreGwroMOPvVlBpWaPJhfwSA4pieSXLvT+vLmvWU1BiuPK4pWxlSsw6Ckxu1qvj41pY/s12hcmso9B09Xu5yFr22qeYVAWjyfIZoSgKbrrCq973SrmyxWZ363aDrqDizwgVzCgUmv74BdlNX4COit/LZlVHgcnzqvdyQeXve1Uhz+Rtjc5dn4dLJWUBCkxepU/EcLQQF+Wa9+dVp1hk8riyQcVFKfrjM+LakwOMZjeUK0/WKcXor93vVQfIKfagRDVQorrgpivA06UQSy9Ky9Usvf4KkF3cEL2ioFdMuOryMOiM1v2oVw5f+knbyL0Vfq4+mDFxoTCVQtOFK/GArkwXNxVPfUMUxQUVM0ZTLsXmvKvOpuw1NOi80CmW91yJuZAS9dr3xh/79tAHYNB5oih6SsyFFJiyUNChU/Qo6FCu/B9UvF0b4673Q0FHYUk2WcVJqJhRVbPl/5hBVVEx46rzRqfor+zfmyJTNp4ugfi4NsHXNZyGbq1o4hFTpitf6b/Jtf3vsqMym82oqmr9qyveeecdHnjgAV588UV8fX1ZuXKlNb7Jkydz++23M3jwYB5++GEOHz5Mhw4dMBgMNGnShHfeeafSc1FVlV69evGf//yHMWPG8NFHH1knVaroOaqqsmbNGo4cOcKiRYtYtGgRYJmFedq0aWXKTpkyhbvvvpstW7Ywf/58Bg4cSMOGDenduzerVq1iypQpjB07FlVVKSoqonnz5hQVFXHp0iXCwsK47777+Mc//gFYkp41a9aQkJBQLq7333+fyZMnU1hYiLu7O6tXr8bFxQVVVa2J0rVLt5Tu49r/+/j4sGHDBsaMGcPf/vY3XnrppZpfJDv6s3Xz4YcfZv369Zw9e5YBAwbg7e3NsWPHgD/q0+2338706dM5dOiQw9WnQYMGYTabMRqN3HfffTz88MOoqsqPP/7Im2++SevWrenWrRsATZs2Ze3atWVifvTRR/Hy8uK2225jw4YNBAcH39B1KP2cufoz2t6f1Ypalz7p/qT09HRCQ0P58ccfufXWW63bX3zxRT744AOOHj1a7jnz58+vcBay/fv34+vrW7vxZWZwyPvx6gsKIYQQTswVH7q4PIO3zjITqaqq1slO7DXurj4zmUzk5+cTGRlZZgxgfVBSUlJu3KjW1q9fz+uvv87ChQu59dZbURSFtLQ01q9fz3333Vemm6eoXl28xvbkaPWpqKiI5ORkPD09rT0PLl++TKdOnbh06VKt51MVccjaVNGkA5X9A/j000+XmSb98uXLhIeHExYWhr+/f63G1TC4ET98fxdnS64k1ld+jS9tBFFVBb3qRiN9JIqqYgbOlpwEzNZf70vPQlUV9CYDjXQRKKiowFnTKcyK+cp+FUobTFQVdGZXGilhV9oJVM6ZUzGXtjpcaXEpLayYXQhWwq1xnzWfxqwzXWlYVaw/+Ks6UFQdoUpEaaMrZ8yp4GIs3e0fLUeKCqqOJkRZHzuvnsbsUto6ftXvKoqKoioEmZpZN13gNGbXQmurCagoV7VKBZY0Ra9zAVQukIZZn3/luFcHYTmGd2EkJqMJN3c3LuvOoLrkWVtR/tij5b9eheG46iwtXJc4g2rIpbS15Woq4JkfiqviDqhc5jyqe661nKIoXB2wjykCD72lxSir5AwlLpev2lPptbBcQK+SEDxcvEFVyCo+R7HuSln1yj5VS31AAc/iEHxc/a+UvUCh/qK13cyyV5Pl/4qKtykYH4M/imIm25hJgf7Clcf+iPPShVxQVTxNQXSKjQEFsgozyTalWl8tVVWtt82qio8+CH9DI1QVLhkzyTanXmmxspRTr7x+ZlXFg4Y0MDRCVVVyiy9xmXRARadYXjPr/1HwVBrS0L0xClBQnEeWKemP81LLXhM3tQEBbk3Iz8tD56qQbT51pQqUtn9deZ1VyMty4cxJBQ8PV/rd1pJM8wnre1NVLfVWxfLro0HnT4BbGKqqUmI2crbw9zKvrvWmqmDQ+9DYoymKAibVRFr+YUpfXks9tr45cNf70MSzKQoKqqpyKvc3y6+dKphV85X/W14/FzwJ9Yq+ciiF5PyDlrqigMkMxSYzJWYzxWYzitmNBi4RnM/N49CZ8wQGXKJ5I3+igxpaIrC+P1RcdR6EeUZbIzuddxSTarzy2Wm+ErPlQ8hVMRDq2YrSp6flH8FkNlrrr3Ll/akCLooLoZ5trcdLL/idEnN+BfVHRUFPmGc762Pp+ccxmvOu1BulTD0CHU29O15JdLLIc8uiyJxneZ9f/eGD5f0R5d0RF50enaLjTH4SBeacK3spHXmjWN4rqkqkd1tLi6eqcib/NPmmbGvLqGJpm7T0hlGgqVc0OqWEErWQcwUp5JVcBIyolH4O6gA9oCfQ0AxXvRfgypmCNC4UppNXUki+qYDCksIrvQRUFEXlYpEnJaoLqqrgrjfiqS9GQcF05Wq4KC7cGXkTAQYfGhiiMOh9UNBRYMokryTDWseutDNfqWoKfoYIDDpvFBQKTdnkFWf88ZGDiqqaLLdUFU/XQFwVD1TM5BVf4FJxCiVqISbVaPm/2YiKCQU9AW7ReOgDUDFRaMohr+QsCnpcFHdcdG5X/u+Oi+KOt2sT3PQ+FJRkcr7wAGcK9lFgyqTIdJlicz5mSigmh10lz9At8GHa+d9pbXEMDw+v97Nx2kNhYSFJSUm4urpW2N2wrqtrMY8dO5YOHTqwePFinnjiCcAyVnXatGk0bNhQ4+jqp7p2je3J0eqT2WxGr9fTpEkT3N0tk8RlZ2fbNQaHSmgDAwPR6/WcPXu2zPbz589X2ozu5uZW4a+XOp2u1v/R9PHw4m9xj1RfUNiU2WwmJSWFiIgI+WJUjR2f/cTCe17H1S2NBYefpHFUkNYh1VhNr3N+gZEHZ3xASlomWw6Y+ei9F+pAvRhbq3szm83E/WslB09f4iDw0qg4RsW2reZZg67jCHHVF7EafB1lq2c2m0kprv/v52JzCSl5mZzKuUCmMY8AgxcBbl40cPMiwOCFr6s7iqKw4tgPvH7Yskbhzxcy+NfNA4j1balx9DcuwueWctuScr5n29n5mNVifr7wbzKNJ+gW+Ij13+X6fJ3tRafToSiK9a++uLrTYF2Lu3Xr1rz3XuXLGYmaqcvX2J4cqT6Vfs5c/fls789ph/pXwWAw0KVLFzZv3lxm++bNm8t0QRZC1EzvO7sTc1t7iouKWf7Mf7QOxyY8PQw88aglyUpLz2Lhy19rHFHt0+l0fDn9Pvw9LL+cPv3FRn4+dVrjqMTVXHUuRPsEMSCkLXdF3cSAkLZ0bhhJU+9A/Awe1i9+E1v04s2b70Wv6ChRzTy6+1N2nj+mcfS1K8qnN/c2+4LWfqMAhWOXN7AueSIZpn1ahyaEEKIOcqiEFuDxxx/nvffeY8WKFRw+fJjHHnuMlJSUcoOyhRDVUxSFBxf/FYDv/vsj/3tvi8YR2UanDuH06N4CgG07DrNjZ/nx9vWdp8HAl9Pvx83FBRWY9OFaTmVc39qJom7o27gVq/s8RIRXAEZzCQ/v+oRVp37WOqxa5a73pWfwLIaHvYm3S2PyTGfZb3qN7WcXYFYrn5ROCCGE83G4hPbuu+/mjTfe4O9//zsxMTF8//33/O9//yMyMlLr0ISol5rHNCWspWV2v3ce/8BhZxn9+7Oj8PPzAGDhy1+Rfan8bOT1XbCvN6sm3Y1eUSgxmxmz7D9k5jneeTqD5r5BfNHvYUaGx2BG5cXf/seEH1dQbHKsZK+xZydGRbyHm84PgFO52/gy5UGNoxJCCFGXOFxCCzB9+nSSkpIoKiri119/pXfv3lqHJES99vQn/wdAQW4hS5/4UONobEOv1/HPl+9FURSKi03835OO2cW6bUgQ//7L7QDkG4uZ/NFaik2VL0cl6i5XnQvPx4xiRmvLmoe/Xkxmxi+OV2/dXfy4O+pzApQOAFws+p0z+QnaBiWEEKLOcMiEVghRu1p2iaZT33YAfPnvDeRdytM4ItuIigpk6kTLD2DJKRd5691tGkdkG/1aNWPu0H646nUcOpPBgq8d8zydgaIoPNiyD/2CWwGwK+MkRabK136ur1x0bsS6PIlBZ1mn+Kfzr2kckbgRM2fOJCoqCkVROHDgQJVlly9fTosWLYiOjmbq1KmUlFTc+6Bv3758/XX5uQ+SkpIIDAwst11RFHJzc6879pMnTzJjxgw6depETEwMw4YN46uvvip3zL59++Ln51duzViARYsW0b59e9q2bcvo0aOtM8Gmp6cTFxdHq1at6NixI3fddReZmX8MCbnRmB1dTeuTqqo8+eSTtGvXjo4dO9KvXz+OHz9eYdn6Up+2bNlCTEyM9S8kJITOnTtbH8/KymLcuHG0aNGCNm3aMHv27CrjycjIIDg4mLFj/5iUcuXKlWXu12WS0AohauTZTx9Dp1MwlZh5cdy/tA7HZv5y5y20aW3pYr3miz2cOZutbUA2Mq5bDP+8ezg6RWH13gMcSD+ndUjiT3ih8x2W5bBQeefoDq3DsQlFUejU4D4AsoynuGBdNktURVVVCgqNNv+7evbayowdO5adO3dWOwzs1KlTzJ07l507d3L8+HHOnj3L8uXLa+sluW4bNmzg7rvvZtCgQfzyyy8kJCTw1ltvsW7dOp566ilrOV9fXxYuXMh//lO+p8TmzZv58MMPiY+P59ChQ8TExDBnzhwA9Ho9c+fO5ejRoyQmJhIZGVltAlIX5JcYK/279oe1qx8ruKZs4Q3+CFfT+rR+/Xq+//57EhISSExMpH///jzzzDM3dMzaUBv1acCAASQkJFj/OnfuzLhx46yPT5w4kdjYWI4dO8bhw4f5v//7vypjmj59OkOHDq29k7Qzh1q2RwhhO/6N/Ih7oB8blm/jl//tJflwKpFtwrQOyyZee+kvTJy2nDNnL/GPxd/wr8Xjqn9SPXRbq2j6tmzKtqMn+SbxCO1DKl7eTNR9Pq7utPUP4WB2OmtSfuX/2g7QOiSbaO9/N/syV1KiFvLjucWMjFymdUh1XmFRMUNGvW7z42z44jE83KteW7SmQ8BWr17N6NGjrUsuTps2jVdeeYUHH6x6/PTq1atZuHAha9asQa/XV1k2ISGBCRMmWO+fPHmSWbNm8dxzz5Upl56ezrx589i6dSu+vr7W7ZGRkaxYsYKpU6eyZcsWBgwYQEBAAD179uS7774rd7z9+/fTq1cvfHx8ABg+fDj9+vVjyZIlBAcHl1leslu3brzzzjvl9qGqKrNnz+bIkSOsWrUKT0/PKs/R1rr974VKH+sV1IK3brnPer/vxlcoqCRx7dowivd7PHDdx7+eIYVFRUUUFhbi4uLC5cuXCQur/vtLXa5P1+5z27ZtrFixAoDjx4+zd+9e1qxZYy3TpEmTSp//ySefEBwcTNeuXStsnQZIS0tj1KhRTJ8+nQceuP5rZWvSQiuEqLFH3pqCwcPyheUf4/6pcTS24+Huymsv/QWAxAOpXLpcoHFEtqNTLP8MrE88onEk4s96pHV/ALKM+SRcTNE4GttQFB3tG9wJwIWio+QWS88CR5SSklKm1S0qKoqUlKrr9Kuvvsqbb77Jtm3biI6OBiA7O7tMt8yYmBhr+ZiYGGvr1uuvv05QUBCTJ08ut9+lS5cyZ84cfH19+eyzz4iJiSEuLo7HHnuMTz/9lIULF/L2229Xe05du3Zl8+bNnDt3DlVV+fjjj8nJySnTtRjAZDKxZMkSRowYUWZ7YWEh99xzD/n5+axbt07zZLY+GTFiBP369aNx48Y0adKErVu38ve//73K59T1+nS1Dz74gCFDhhAUFATAoUOHCA8PZ9q0aXTu3JlBgwaxb1/Fy56lp6fz2muv8dJLL1W6/8TEROLi4njxxRfrZDIL0kIrhLgOrq4uTHrxXt5+bCUn9yeRdPA0Ue3CtQ7LJpo09qNJYz/OnL3E78fOclOXplqHZBMD2kSz5chxLublYywxYXCp+ldoUXf1CGqOj4s7OSWFvH54Mx/0nKR1SDbRueEkzub/xtnCBH7L+i/dg6ruSufs3N1c2fDFY3Y5Tm0qXXsZqLY78/z58wkJCWHTpk24ublZt/v7+5OQkFDpfgEOHjzIAw88wNdff01oaGi5ff/66688/vjjXLx4kWeffZadO3fi6elJnz596NSpE0FBQeWS0or07duXWbNmMWzYMFxcXLjjjjsAcHX943VTVZXp06fj7+/PI488Uub5gwcPZsyYMTz99NPVHstefh46p9LH9Ne8zt/FWbrSqqpKsdGIq8FgvRa6a8rWtr1793LkyBHS0tLw9fVl9uzZzJgxg5UrV1ZYvj7Up6u9//77vPHGG9b7xcXFxMfH8/zzz7Ns2TI2btzIiBEjSEpKwsWlbOo3ZcoUXnnlFby9vSvcd2JiIqNGjeLLL7+kQ4cO1xWXPUkLrRDiutzxf8PoeUc3VBU+XPCZ1uHYVOk/VF9vSNA2EBsa3K6F9famQzImsb4bEd4JgIPZ6RgdbAmfUjpFT2zD8QAcufQVBSVZGkdUtymKgoe7weZ/136x/zMiIiJISkqy3k9OTiYiIqLS8t27d+fIkSOcOnXquo6Tnp7OyJEjWbFiBe3bt6+wjKqq6PV6Tpw4QWxsLEFBQXh7ezNggKVbf35+fo1bS6dNm8aePXvYtWsXvXv3JiwszNoFGSyTHJ0+fZpPP/0Una7sV/T+/fuzadMmcnJyruscbcnTxVDpn5vetdKyHteUddfX7o8h11q5ciX9+vXD398fnU7H+PHj2b59e6Xl60t9Avj+++/Jz88nLi7Oui0yMpLQ0FD69esHQFxcHEajkdTU1HLPj4+PZ9KkSURFRfHEE0+wYcOGMvsKCwsjMDCwyterLpCEVghx3UbPtEwc8PvuExpHYlsBDbwAOJV8QeNIbMfd1ZUGnpb1d/93QBLa+u6R1rcR6OZNkbmELWcOax2OzYR4diHQ0AqTWsSP5xZrHY6oZWPGjGHdunXW7rnvvPMO99xzT6Xl4+LieO+99xg+fHi5FrTK5OTkMGzYMBYsWMBtt91WabnY2Fh27NhBdHQ0+/fv58KFC+Tl5bF161aMRiOzZ88uM3ayKmfOnAEsScu8efPKTAA0c+ZMjh8/zrp16zAYyo9Fnjt3LrfffjsDBw4kK0t+xLkezZo1Y+vWrRQXW8bwfvXVV5UmnFB/6hPAihUrmDBhQpkxvl26dMHX15fExEQA9uzZA1Bhi3FmZiZJSUkkJSWxePFihgwZwsaNG62PBwQEsGXLFlavXs0LL1Q+ZlprktAKIa5bYGgAAOdSMjAWGjWOxnZatrBM0pFxoe78Im4LHUIt55mYdlbjSMSf5e3qzp2RluUdPk/eo3E0tqMoCg3cLMMAkvJ+oLDkksYRiZp4+OGHCQsLIzU1lQEDBtC8eXPrY5MnT2b9+vWAJQFZsGABPXr0IDo6mqCgICZNqroLfe/evVm1ahVjxowhPj6+2ljWrl3LkSNHWLRokXU8ZEUTMU2dOpXnn38ed3d3FixYwMCBAxk5ciR9+vRh1apVdO/enTvvtIzrLioqIiwsjDvvvJPExETCwsLKdBEeNGgQ7dq1o1OnTvTs2ZMZM2YA8OOPP/Lmm2+SlJREt27diImJYfTo0eVieeyxx5g0aRK33XYb587J+PGa1qeHH36YiIgIOnToQMeOHdm+fTtLliypct/1oT7l5OSwZs0aJk6cWOYYiqKwcuVKJk+eTMeOHZk+fTpr1qyxdm8fOnSoNcmtCV9fX7799lt++OGHOjv7tqLWZJ51J3L58mX8/PzIysrC399f63CEDZjNZlJSUoiIiCjXpUfUTHFxCUPdLJMmvf7D87Tv0VrjiMqrjev8465jzJm/FoCt3zyJXu+Y9WXN3gPM+XIzAL/NnYlrPRpHK+/n8s4WXCJu8+uYUfmk52Q6BtT/ce4VXefCkkt8fHIEoBLtM5B+TeZpG2QdUlhYyKlTp2jatCnu7u5ah1NjqqpiNBoxGGq3C/Of9cUXX7B48WJeeuklevTogaIopKWlsW7dOsaPH1+m27CoWl29xvbkaPWpos+b7OxsGjRowKVLl8rM5mwr8q+/EOK6ubq6oHe1JD2/73HcbsddYqOst387WH7siaMY2qGV9fbmwxUvNi/qj8YefgR7WL5AvHZos8bR2I67ix8RXrcCcDJnG0ZTnsYRCUc1atQoli9fzgcffECXLl3o3LkzDz30ENHR0fUu+RDak/pU+2SWYyHEDfH08SAnM5ekA465PAhYZu00GFwwGkvY/espYjpWPilJfebh6kqLoIYcO3+R5EwZm+UI+jZuxapTv7AvM4XCEiPuLlWvD1pf9QiaRcqpH1Ex8cuFt+kZ/ITWIQkH1apVK959912twxAOQupT7ZIWWiHEDfELtLQApR937HE8DQMsE0MdPnpG40hs647YdgDsT5VxtI5gRuvbUAAzKsuO/aB1ODbj5dqIJh6xAPx+6X+UmIs0jkgIIYS9SUIrhLghjcIbApCRdlHjSGyrZYvGABQUOO7kVwA3RYUBsCc5DZPZrHE04s/ydfWgjV8TANY48ORQAD2CnwTATDF7L76vcTRCCCHsTRJaIcQNCWth+bJ86cJljSOxreGDLet65uY5dstPm8aN8HB1IbfIyHe/X9/ae6Jueri1ZQ3CTGM++y467tAAf0M4jdzaAHAiZzMy16UQQjgXSWiFEDekaQfLeNLCXMdO9Jo1bQRAWnoWRUXFGkdjO3qdDjcXy7QKXyYc0jgaURt6BbXE28UNgH8e3qJxNLY1OOw19IqBvJLzZBlPah2OEEIIO5KEVghxQ7rExQCW5TRMJSZtg7GhgAZe+Pq6YzarDj+Otl2IZT3ahFTHPk9noSgKw8MsPQwSMlMoKHHcbvNuem9CPW8CIDn3R42jEUIIYU+S0AohbkjjqEa4GlxQzSoZqY47jlZRFLjSg3HLtoPaBmNjg9paFqXPyMmjxOS4P1I4k4db96OBwQsTKhvTHbv+hl9ZwufY5Q0aR1I3FRQaK/0rMpbUvOw1PVUKCmv+Q8nMmTOJiopCURQOHDhQZdnly5fTokULoqOjmTp1KiUlJRWW69u3L19//XW57UlJSQQGBpbbrigKubm5NY651MmTJ5kxYwadOnUiJiaGYcOG8dVXX5U7Zt++ffHz86Nr165lHtuyZQsxMTHWv5CQEDp37mx9PCsri3HjxtGiRQvatGnD7Nmzq4wnIyOD4OBgxo4da922cuXKMvdtRVVVis0FNv2rbuhAYWEho0aNomXLlsTExDB48GCSkpIqLe9o9Qlg0aJFtG/fnrZt2zJ69Giys7MBSE9PJy4ujlatWtGxY0fuuusuMjMz/3TMdZks2yOEuCE6nY6gyEakHTvDuaQMGkcFaR2SzQQG+nA5p5BjJ85rHYpNjejYmue+2ooKbP/9JAPbtNA6JPEn+Rs8+Wv0Lfzz8Fa+Tt3PqIhYrUOyGU8Xy0R1l4tTyS0+h7drsMYR1S1DRr1e6WO33NSMl56/03p/9N3/prCSIRadOoTzz0X3Wu/fM/4dvvx0Zo1iGDt2LE899RQ9e/asstypU6eYO3cu+/btIygoiJEjR7J8+XIefPDBGh2ntm3YsIF58+Yxd+5cXn31Vdzc3EhOTmbBggX88MMPvPLKKwD4+vqycOFCLl26xHPPPVdmHwMGDCAhIcF6f/jw4fTr1896f+LEifTo0YNPPvkEgDNnqu4pM336dIYOHUpOTk4tnWXNlaiFfHB8kE2PMb75JlwVjyrLTJ06lSFDhqAoCv/+97+ZOnUqmzZtKlfOEevT5s2b+fDDD4mPj8fHx4cFCxYwZ84clixZgl6vZ+7cudb32ZNPPsns2bNZtmyZ3c/VXqSFVghxw/SuegB+Wr9b40hsK/rKONoz57K1DcTGPA0G/DzcAfg68ajG0Yja0r9JWwD2ZZ6myOS448DDvbqhYPlMOpi1WuNoREV69+5NWFhYteVWr17N6NGjCQ4ORlEUpk2bxqpVq2r0vJiYGE6cOFFt2YSEhDItpr6+vixYsKBcufT0dObNm8fWrVu5/fbbcXOzjEuPjIxkxYoVZGdns2WLZYx6QEAAPXv2xMvLq8pjp6ens23bNu6//34Ajh8/zt69e3n88cetZZo0aVLp8z/55BOCg4Pp06dPpWXS0tK46aabeP99x5z5293dnaFDh1p6UQG33HILJ09WPH7eEevT/v376dWrFz4+PoDlB5KPPvoIgODg4DI/GnXr1q3C10ZVVf72t78xcuRI8vPzqz3HukxaaIUQN8xcYlne5cS+JG0DsbFOHcLZvO0QOTmOPQEWQNsmQcSfTCHhtIyjdRRRXg3x1BvINxnZmH6Q28NjtA7JJnSKCw0MTck0HicpbwfdeFjrkOqUDV88VuljOl3Z9o11n86ovOyVBKLUfz+Y9ucCq0BKSgqRkZHW+1FRUaSkVD1T96uvvsr69evZtm0bAQEBJCUlkZ2dTUxMTIXlY2JirC2m27dvZ8qUKUyePLlcuaVLlzJnzhx8fX357LPPePHFFwkODqZt27bccsstLFy4kIceeogBAwbU+Pw++OADhgwZQlCQpWfToUOHCA8PZ9q0aezZs4fAwEBefvllYmPL96hIT0/ntddeY8eOHaxeXfEPN4mJidx77728/vrrDBw4sMZx1ZSL4s745uVbQmtCVVWMRiMGg8GajFZ2jOvxr3/9ixEjRlT4mCPWp65du7J06VLOnTtHUFAQH3/8MTk5OWRmZhIQEGAtZzKZWLJkCaNGjSrz/MLCQiZNmkRQUBDr1q0r9xlQ30hCK4S4YUERgaT+nu7wa9HecnM0YPmH+HTqRcLDGmocke0MbBNN/MkUMnLzMJnN6Ov5P3LCMl7KXe9KvsnIhrTfHDahBWjhG8fPF46TU3yGYnMBrrqquyw6Ew93g+Zlr8fVyU514ynnz59PSEgImzZtsrZ4Afj7+5fp5nvtfgEOHjzIAw88wNdff01oaGi5ff/66688/vjjXLx4kWeffZadO3fi6elJnz596NSpE0FBQWXGJ9bE+++/zxtvvGG9X1xcTHx8PM8//zzLli1j48aNjBgxgqSkJFxcyn5VnzJlCq+88gre3t4V7jsxMZFRo0bx5Zdf0qFDh+uKq6YURam2O3BlVFVF1elx1VWd0F6PF198kWPHjvHOO+9UWsbR6lPfvn2ZNWsWw4YNw8XFhTvuuAMAV1fXMuc5ffp0/P39eeSRR8o8f/DgwYwZM4ann3662mPVB/JNRQhxw0KdZC3awIY+6PWWj8v4X6rvelSfjezUFg9XF8yqypGzGVqHI2pJp4BwAA5kpWkciW219B1mvS2TQ9VfERERZSb4SU5OJiIiotLy3bt358iRI5w6dX1raKenpzNy5EhWrFhB+/btKyyjqip6vZ4TJ04QGxtLUFAQ3t7e1ha0/Px8PD09a3zM77//nvz8fOLi4qzbIiMjCQ0NtY6pjYuLw2g0kpqaWu758fHxTJo0iaioKJ544gk2bNhQZl9hYWEEBgayffv2GsdUny1evJi1a9eyYcOGSq+Do9an0hb9Xbt2Wbvzl3ZBBsskbKdPn+bTTz8t1wLbv39/Nm3apMkYbFuQhFYIccOadrB8SS7MLdQ4Etvz87X8Gn3goGMnBF5uBm5uarmuvySV/zIl6qdhoZaWmuziAnKLHff96ubig5eLpRvnsUvfahyNuFFjxoxh3bp1nDt3DlVVeeedd7jnnnsqLR8XF8d7773H8OHDy7WgVSYnJ4dhw4axYMECbrvttkrLxcbGsmPHDqKjo9m/fz8XLlwgLy+PrVu3YjQamT17NhMmTKjxua1YsYIJEyag1+ut27p06YKvry+JiYkA7NmzB6DCFr7MzEySkpJISkpi8eLFDBkyhI0bN1ofDwgIYMuWLaxevZoXXnihxnHVR6+99hqrVq1i8+bN+Pv7V1rOUetT6cRh+fn5zJs3j6eeesr62MyZMzl+/Djr1q3DYCjfi2Lu3LncfvvtDBw4kKysrBodry6ThFYIccNa32yZBddUYsZ4HUs31EetW1lao43FFU/170hujrJM2rJbElqH0a9xa0o7xn2T+pumsdhahFcPAC4WHcOsyvJTdcnDDz9MWFgYqampDBgwgObNm1sfmzx5MuvXrwegWbNmLFiwgB49ehAdHU1QUBCTJk2qct+9e/dm1apVjBkzhvj4+GpjWbt2LUeOHGHRokXWiXwq6rI6depUnn/+edzd3VmwYAEDBw5k5MiR9OnTh1WrVtG9e3fuvNMyQ3RRURFhYWHceeedJCYmEhYWVqZLZ05ODmvWrGHixIlljqEoCitXrmTy5Ml07NiR6dOns2bNGmv30aFDh1qT3Jrw9fXl22+/5Ycffqh2+Z/6KjU1lVmzZpGdnU2/fv2IiYmhW7du1sedoT4NGjSIdu3a0alTJ3r27MmMGZax7z/++CNvvvkmSUlJdOvWjZiYGEaPHl0ulscee4xJkyZx2223ce7cuWrPsS5T1Oo6kjuZy5cv4+fnR1ZWVpW/9oj6y2w2k5KSQkRERL0fBK+1kpIShhj+AsDrPzxP+x6tNY7oD7V9nXfsPMpzC7+gVYvGLH1zfC1EWHd9f+wUUz/+Ar2ikDhvZp0eRyvv55rrv2kx5wtz6BbYlPdunaB1ONfleq5zbvE5VifdR4layIjwtwj2sM04wrqssLCQU6dO0bRpU9zdr29yHS3VdMIge/viiy9YvHgxL730Ej169EBRFNLS0li3bh3jx48v081TVK2uXmN7crT6VNHnTXZ2Ng0aNODSpUv4+vraPAb5118IccNcXFxwubJ0z8n9SdoGY2PNoixL95xKvoDJZNY4GtuKCQsBwKSq/HAsSdtgRK3pHGCZ5fNQtmPPYO3tGkykdy8AknN/1Dga4QhGjRrF8uXL+eCDD+jSpQudO3fmoYceIjo6ut4lH0J7Up9qn8xyLIT4U9r2aE3idwdx83SrvnA9FtLEH4NBj9FYwrET52jdsvI1Aus7Xw83fN3duFxYxPrEI/Rt1UzrkEQtGBHWkW/TD5BTUsglYz5+hppPZFPfRHj34ETOZlLydnJzo9pfVkY4n1atWvHuu+9qHYZwEFKfape00Aoh/pTwKzMdn0ty7BlxLbMcW7pHff/j79oGYwdtGltapPemOPYkWM6kV3BLmnkHArDnYrLG0dhWY/cOgEK2MZmsoiStwxFCCGFDktAKIf6U4CjLjKJnk85rHIntNQzwAuDIkXSNI7G9AW0sk7Wcy8nFZHbsLtbOQlEUujWytLb/fOGkxtHYlodLAMqVrziHstdqHI0QQghbkoRWCFEr9m5J1DoEm4uMaAjA6bT6P8V9dW7v2AYAVYWdxx27Nc+ZdAu0JLQ/nj+ucSS2pVNcaOhmmYU9OW+nxtEIIYSwJUlohRB/incDyzi8rHOXNI7E9tq1sawJmJWdp3Ektufn6Y63m2Xtus2Hj2kcjagtIR5+AKTkZXIu37Hfsy18BwOQX5JBocmxz1UIIZyZJLRCiD+l1U2WVhCzyUxRQZHG0dhWt5ssrVslJWYu5xRoHI3thTewJD9nLuVqHImoLS39GqO7MhZ83el9GkdjWy1846y3j176n4aRiFIzZ84kKioKRVE4cOBApeXi4+Ota3m2a9eOBx98kKKiiv996du3L19//XW57UlJSQQGBpbbrigKubnX/5l28uRJZsyYQadOnYiJiWHYsGF89dVX5Y7Zt29f/Pz86Nq1a7l9LFq0iPbt29O2bVtGjx5NdnY2AOnp6cTFxdGqVSs6duzIXXfdRWZm5p+O2ZEVFhYyatQoWrZsSUxMDIMHDyYpKanS8suXL6dFixZER0czdepUSkoqXlO+vtSnLVu2WN8jMTExhISE0LlzZ+vjWVlZjBs3jhYtWtCmTZtq1yPOyMggODiYsWPHWretXLmyzP26TBJaIcSf0rRjhPX273sde1xei+hgSpfN+3m3Y58rwP23xABQImNoHYZe0RHq2QCA784d1Tga2zLovfF2aQzAicubNI5GO6qqkm8stvmfqqrVxjJ27Fh27txJZGRkleU6derE7t27SUhI4LfffiMjI4OlS5fW1kty3TZs2MDdd9/NoEGD+OWXX0hISOCtt95i3bp1PPXUU9Zyvr6+LFy4kP/85z/l9rF582Y+/PBD4uPjOXToEDExMcyZMwcAvV7P3LlzOXr0KImJiURGRlabgNQFxeaCSv9KzEU3XLampk6dytGjR0lISGD48OFMnTq1wnKnTp1i7ty57Ny5k+PHj3P27FmWL19+Q8esDbVRnwYMGEBCQoL1r3PnzowbN876+MSJE4mNjeXYsWMcPnyY//u//6sypunTpzN06NDaO0k7k2V7hBB/iqurC3pXPaZiE8f2nKRDjzZah2QziqLg6elGXl4RCYkpDLytndYh2VTLYMtMx7+fu4Cqqiil2byo17o1asbp5EyOX3b8idyivHtzIPszsownMZmN6HUGrUOyu4LiEjq/8G+bH2fvnBl4GlyrLNO7d+8a7cvT09P6eWM0GikoKECnq74NZvXq1SxcuJA1a9ag1+urLJuQkMCECROs90+ePMmsWbN47rnnypRLT09n3rx5bN26FV9fX+v2yMhIVqxYwdSpU9myZQsDBgwgICCAnj178t1335U73v79++nVq5d1ndHhw4fTr18/lixZQnBwMMHBwday3bp145133im3D1VVmT17NkeOHGHVqlV4emq79NYHxwdV+li41y3EhS6y3v/kxO2UqIUVlm3sEcPw8Dev69ju7u5lErBbbrmFN954o8Kyq1evZvTo0dbXeNq0abzyyis8+OCDVR6jLtena/e5bds2VqxYAcDx48fZu3cva9assZZp0qTypQY/+eQTgoOD6dq1a4Wt0wBpaWmMGjWK6dOn88ADD1QZjxakhVYI8ad5+ngAcOpAisaR2F77NiGApduxo2veqCGKAln5BWTkOv64YWcxMjwGgCJzCadyLmgbjI218RsFKKiYSc937C7WjiYpKYmYmBgCAwPx9fWttPWt1Kuvvsqbb77Jtm3biI6OBiA7O7tMt8yYmBhr+ZiYGGvr1uuvv05QUBCTJ08ut9+lS5cyZ84cfH19+eyzz4iJiSEuLo7HHnuMTz/9lIULF/L2229Xez5d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Vlaajibn4Stf+Yq1bNkyq7y83Fq7dq110003WQkJCcH2+8EPfmAlJSVZL7/8srV9+3brk5/8pJWdnW21trYGv8ZnP/tZKzc313r77betzZs3W1dddZU1fvx4q6+vz9SP5XhtbW3Wli1brC1btliA9d///d/Wli1brIMHD1qWdfHa9frrr7fGjRtnrVmzxlqzZo01duxY66abbur3n9epztXObW1t1le+8hVr9erVVkVFhbV06VJrxowZ1uDBg9XOYeSf/umfrKSkJGvZsmVWdXV18NbZ2Rl8jK7n8PdB7azreWB49NFHrRUrVlgVFRXWtm3brH/7t3+z3G63tXjxYsuydC0PBOdq41C8jlXQnuSnP/2pVVBQYEVFRVmTJk06ZZl5CW133323lZ2dbUVGRlo5OTnW7bffbu3cuTP48UAgYH3729+2srKyLK/Xa11++eXW9u3bT/kaXV1d1iOPPGKlpqZaMTEx1k033WRVVVX1948iJ1m6dKkFnHa7//77Lcu6eO3a0NBg3XvvvVZCQoKVkJBg3XvvvVZTU1M//ZRyrnbu7Oy0rr32WmvQoEFWZGSklZ+fb91///2ntaHaObSdqX0B63e/+13wMbqew98HtbOu54HhwQcfDL5eHjRokHX11VcHi1nL0rU8EJyrjUPxOnZZlmVdWJ+uiIiIiIiIiHmaQysiIiIiIiJhSQWtiIiIiIiIhCUVtCIiIiIiIhKWVNCKiIiIiIhIWFJBKyIiIiIiImFJBa2IiIiIiIiEJRW0IiIiIiIiEpZU0IqIiIiIiEhYUkErIiIip3jggQdwuVy4XC5effXVi/q1ly1bFvzat91220X92iIi4jwqaEVEZMA7uUA7+bZ//37T0ULW9ddfT3V1NTfccEPwvrMVuA888MB5F6czZ86kurqau+666yIlFRERJ4swHUBERKQ/XH/99fzud7875b5Bgwad9rienh6ioqL6K1bI8nq9ZGVlXfSvGxUVRVZWFjExMfh8vov+9UVExFnUQysiIo5wokA7+ebxeJg7dy6PPPIIX/7yl0lPT+eaa64BYNeuXdx4443Ex8eTmZnJggULqK+vD369jo4O7rvvPuLj48nOzubJJ59k7ty5fPGLXww+5kw9msnJyfz+978Pnh85coS7776bw+udCQAABm5JREFUlJQU0tLSuPXWW6msrAx+/ETv5xNPPEF2djZpaWl87nOfo7e3N/gYn8/Hv/7rv5KXl4fX62XYsGH85je/wbIsiouLeeKJJ07JsGPHDtxuNwcOHPjov9j3qaysPGNv+Ny5cy/69xIREVFBKyIijvf0008TERHBu+++yy9/+Uuqq6u54oormDBhAhs3bmTRokUcO3bslGGyX/va11i6dCmvvPIKixcvZtmyZWzatOmCvm9nZydXXnkl8fHxrFixglWrVhEfH8/1119PT09P8HFLly7lwIEDLF26lKeffprf//73pxTF9913H8899xz/93//x+7du/nFL35BfHw8LpeLBx988LSe6d/+9rfMmTOHoUOHfrhf2Dnk5eVRXV0dvG3ZsoW0tDQuv/zyi/69RERENORYREQcYeHChcTHxwfPb7jhBl588UUAiouL+dGPfhT82Le+9S0mTZrE//t//y94329/+1vy8vLYu3cvOTk5/OY3v+GZZ54J9ug+/fTT5ObmXlCm5557Drfbza9//WtcLhcAv/vd70hOTmbZsmVce+21AKSkpPDUU0/h8XgYMWIE8+fP55133uHhhx9m7969vPDCC7z11lvMmzcPgCFDhgS/x6c+9Sm+9a1vsX79eqZOnUpvby9//OMfefzxxy8o6wmf/OQn8Xg8p9zn8/mYP38+AB6PJzhUubu7m9tuu40ZM2bw2GOPfajvJyIici4qaEVExBGuvPJKfv7znwfP4+LigsdTpkw55bGbNm1i6dKlpxTAJxw4cICuri56enqYMWNG8P7U1FRKSkouKNOmTZvYv38/CQkJp9zf3d19ynDg0aNHn1JEZmdns337dgBKS0vxeDxcccUVZ/we2dnZzJ8/n9/+9rdMnTqVhQsX0t3dzZ133nlBWU/48Y9/HCycT/j617+O3+8/7bEPPfQQbW1tvPXWW7jdGhQmIiIXnwpaERFxhLi4OIqLi8/6sZMFAgFuvvlmfvjDH5722OzsbPbt23de39PlcmFZ1in3nTz3NRAIMHnyZP70pz+d9rknL1gVGRl52tcNBAIAxMTEfGCOT3/60yxYsIAf//jH/O53v+Puu+8mNjb2vH6G98vKyjrt95iQkEBzc/Mp9333u99l0aJFrF+//rSCXURE5GJRQSsiIvI+kyZN4qWXXqKwsJCIiNP/qywuLiYyMpK1a9eSn58PQFNTE3v37j2lp3TQoEFUV1cHz/ft20dnZ+cp3+f5558nIyODxMTED5V17NixBAIBli9fflrP6Qk33ngjcXFx/PznP+eNN95gxYoVH+p7na+XXnqJ//zP/+SNN964JPN0RURETtD4HxERkff53Oc+R2NjI5/85CdZv3495eXlLF68mAcffBC/3098fDwPPfQQX/va13jnnXfYsWMHDzzwwGnDaq+66iqeeuopNm/ezMaNG/nsZz97Sm/rvffeS3p6OrfeeisrV66koqKC5cuX84UvfIHDhw+fV9bCwkLuv/9+HnzwQV599VUqKipYtmwZL7zwQvAxHo+HBx54gEcffZTi4uJThkpfbDt27OC+++7j61//OqNHj6ampoaamhoaGxsv2fcUERHnUkErIiLyPjk5Obz77rv4/X6uu+46xowZwxe+8AWSkpKCRevjjz/O5Zdfzi233MK8efOYPXs2kydPPuXrPPnkk+Tl5XH55Zdzzz338NWvfvWUob6xsbGsWLGC/Px8br/9dkaOHMmDDz5IV1fXBfXY/vznP+eOO+7gn//5nxkxYgQPP/wwHR0dpzzmoYceoqenhwcffPAj/GY+2MaNG+ns7OS73/0u2dnZwdvtt99+Sb+viIg4k8t6/+QeERER+VDmzp3LhAkT+J//+R/TUU7z7rvvMnfuXA4fPkxmZuY5H/vAAw/Q3Nx82h66F1N/fA8RERn41EMrIiIygPl8Pvbv3883v/lN7rrrrg8sZk84sc3RwoULL2qelStXEh8ff8aFsERERC6UFoUSEREZwJ599lkeeughJkyYwB/+8Ifz+pwf/ehH/Md//Adgr+p8MU2ZMoXS0lKAM26LJCIiciE05FhERERERETCkoYci4iIiIiISFhSQSsiIiIiIiJhSQWtiIiIiIiIhCUVtCIiIiIiIhKWVNCKiIiIiIhIWFJBKyIiIiIiImFJBa2IiIiIiIiEJRW0IiIiIiIiEpb+f4ESae+5LifcAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -125,52 +140,67 @@ }, { "cell_type": "markdown", - "id": "c086c2f8", + "id": "2e21ef92", "metadata": {}, "source": [ - "## Receive EQ bands (hard-coded @ 24 kHz)\n", + "## Receive EQ bands\n", "\n", - "All 14 graphic-EQ cells. Each band center shifts down by the same ~8%." + "All 14 graphic-EQ cells. Each cell should peak on its labelled centre at both\n", + "rates.\n", + "\n", + "These sweeps run on a ~20 Hz grid, so a peak that falls between two grid points\n", + "can read one step off and show a ratio like 1.016 or 0.994. That is the sweep\n", + "resolution, not a shift: the precise measurement in `filtercmp_rate_summary.txt`\n", + "further down reads 1.0000 for all 14 cells.\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "810bbe3c", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-28T10:57:19.410095Z", + "iopub.status.busy": "2026-07-28T10:57:19.409802Z", + "iopub.status.idle": "2026-07-28T10:57:19.832485Z", + "shell.execute_reply": "2026-07-28T10:57:19.831812Z" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "band 192k peak 176k peak ratio\n", - " 0 198.5 178.8 0.9008\n", - " 1 257.6 237.9 0.9235\n", - " 2 316.7 297.0 0.9378\n", - " 3 395.5 375.8 0.9502\n", - " 4 494.0 454.6 0.9202\n", - " 5 631.9 572.8 0.9065\n", - " 6 789.5 730.4 0.9251\n", - " 7 1006.2 927.4 0.9217\n", - " 8 1242.6 1163.8 0.9366\n", - " 9 1597.3 1459.4 0.9137\n", - " 10 1991.3 1833.7 0.9209\n", - " 11 2503.5 2306.5 0.9213\n", - " 12 3153.6 2897.5 0.9188\n", - " 13 4000.7 3646.1 0.9114\n" + " 0 198.5 198.5 1.0000\n", + " 1 257.6 257.6 1.0000\n", + " 2 316.7 316.7 1.0000\n", + " 3 395.5 395.5 1.0000\n", + " 4 494.0 494.0 1.0000\n", + " 5 631.9 631.9 1.0000\n", + " 6 789.5 789.5 1.0000\n", + " 7 1006.2 1006.2 1.0000\n", + " 8 1242.6 1262.3 1.0159\n", + " 9 1597.3 1597.3 1.0000\n", + " 10 1991.3 1991.3 1.0000\n", + " 11 2503.5 2503.5 1.0000\n", + " 12 3153.6 3133.9 0.9938\n", + " 13 4000.7 4000.7 1.0000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_1024744/2527797174.py:7: RuntimeWarning: divide by zero encountered in log10\n", + "/tmp/ipykernel_1550931/2527797174.py:8: RuntimeWarning: divide by zero encountered in log10\n", + " plt.semilogx(f1, 20*np.log10(g1), '--', color=colors[bf])\n", + "/tmp/ipykernel_1550931/2527797174.py:7: RuntimeWarning: divide by zero encountered in log10\n", " plt.semilogx(f0, 20*np.log10(g0), '-', color=colors[bf])\n" ] }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6MAAAImCAYAAACmbFzDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd3gU1feH35kt6b0Seg9dOqI0FZGmqGBBwYIde++CvZeffu0KdgFRVDoioFIE6b2XQCC9ty1zf3/cJBCy6cnuovd9Hh52Z2fufHZyd+aee849RxNCCBQKhUKhUCgUCoVCoXAjuqcFKBQKhUKhUCgUCoXiv4cyRhUKhUKhUCgUCoVC4XaUMapQKBQKhUKhUCgUCrejjFGFQqFQKBQKhUKhULgdZYwqFAqFQqFQKBQKhcLtKGNUoVAoFAqFQqFQKBRuRxmjCoVCoVAoFAqFQqFwO8oYVSgUCoVCoVAoFAqF21HGqEKhUCgUCoVCoVAo3I4yRhWK/zjTp09H07TSf2azmUaNGnHVVVexd+9eT8sDoEWLFlx//fVuP+/gwYPLXJtT/7Vo0aLc/jt37uT666+nWbNm+Pj4EBUVxahRo1i8eHG1znfo0CE0TeP111+v529SNwYPHszgwYMbrP2cnBwefvhhLrzwQqKiotA0jSlTprjcVwjB//3f/xEfH4+Pjw+NGjXi9ttvJyMjo8x+e/bs4cEHH6Rnz56EhoYSHh7OOeecww8//FAtTSW/i3/++afS/aZMmYKmaaSmprr8vHPnzvV67TIzM4mMjOT777+vtzZP5frrry/Xt6v7+1u+fDmaprF8+fLSbRMmTGDMmDH1qrEufPnll1x11VW0b98eXddd/o5BXoeKfvuaprFmzZoy+9vtdt588026dOmCn58foaGh9O/fn1WrVtVIX0FBAe3atav2faC694ySv01F/f/OO+9E07Qaaa2K888/n9tuu63K/Up+a4cOHarX85fQokULRo0a1SBtn0rJ32L69Oml25566il69OiBYRgNfn6F4kzF7GkBCoXCO5g2bRrx8fEUFhaycuVKXnjhBZYtW8auXbsICwvzqLaffvqJ4OBgj5y7VatWfPPNN+W2+/j4lHn/448/Mn78eFq1asVTTz1F+/btSUpKYtq0aQwbNownn3yS5557zl2yzyjS0tL4+OOP6datG2PGjOHTTz+tcN8HH3yQt99+mwcffJALLriAHTt28PTTT7Nu3TpWr16NxWIBYPHixcybN48JEybQu3dvHA4HM2bMYNy4cUydOpWnn37aXV+vXpk6dSpxcXFceeWVbjtnXX5/U6ZMIT4+nt9//53zzjuvnpXVnK+++ooTJ07Qp08fDMPAbre73O+pp55yaUiNHj0aHx8fevfuXbrN6XRy6aWX8tdff/Hwww/Tv39/8vLyWL9+PXl5eTXS99RTT9X4GG/k559/ZuXKlXz55ZeeluJRHnzwQd577z2++OILbrjhBk/LUSi8EmWMKhQKQHpwevXqBUhPmNPp5JlnnmHOnDkef4h2797dY+f28/OjX79+le6zf/9+JkyYQJcuXVi+fDkBAQGln40bN47bb7+d559/nh49enDppZc2tOQzjubNm5ORkVHqYazIGD127BjvvPMOkydP5pVXXgFg6NChREdHM378eKZPn87NN98MwFVXXcXkyZPLeHuGDx9Oamoqr7zyCo888ki5CQVvJz09nY8++oi33nqr3r1YlVGX31/r1q256KKLePnll73CGF20aBG6LoPCRo0axbZt21zu17p1a1q3bl1m24oVK0hNTeXJJ5/EZDKVbn/33XdZsGABK1euLHOvGDlyZI20rV27lnfffZdvvvmGcePG1ehYb+PFF1/k0ksvpXHjxp6W4lFCQkK49tprefnll0u97QqFoiwqTFehULikxDBNSkoqs/2ff/7h4osvJjw8HF9fX7p3787MmTPLHX/s2DFuueUWmjZtitVqJS4ujrFjx5ZpLzs7mwcffJCWLVtitVpp3Lgx9957bznPwKlhgikpKVitVp566qly59y1axeapvF///d/pdtOnDjBrbfeSpMmTbBarbRs2ZKpU6ficDhqfW1O56233iI/P5933323jCFawhtvvEFoaGi1PaOGYfDCCy/QrFkzfH196dWrF0uXLi2zz759+7jhhhto27Yt/v7+NG7cmNGjR7N169Yy+5WE53333Xc88cQTxMXFERwczAUXXMDu3bvL7CuE4NVXX6V58+b4+vrSo0cPFixY4FLf888/T/v27UtDErt27co777xTre93OiWhj1WxZs0anE4nI0aMKLO9JARv9uzZpdsiIyNdttmnTx/y8/NJT0+vsc7jx4/Ts2dP2rZtW+sQ9srCPysKTS5h+vTpOByOcl7RAwcOcNVVVxEXF4ePjw8xMTGcf/75bNq0qXQfwzB49dVXS8Obo6OjmThxIkePHq1Ss6sw3V27dnHRRRfh7+9PZGQkt912Gzk5OS6PnzBhAr/99hv79++v9Dzdu3dnwIAB5bY7nU4aN27MZZddVrrtgw8+oFu3bgQGBhIUFER8fDyPP/54ld+lxBCtDZ999hmapnHjjTeW2f7OO+8wcODAKietKsNms3HjjTcyefLk0ntvbbHb7Vx33XUEBgYyd+7cWrVx+vKNU/9VFXa+ceNG1q5dy4QJE8p9tmbNGs455xx8fX2Ji4vjsccec+mdnjFjBhdeeCGNGjXCz8+PDh068Oijj5Z7NlSn75ewcOFCevTogZ+fH/Hx8Xz++efl9qnu8yIxMZErrriCoKAgQkJCuPLKKzlx4oTL6zFhwgT27NnDsmXLKrtsCsV/FuUZVSgULjl48CAA7dq1K922bNkyLrroIvr27cuHH35ISEgI33//PVdeeSX5+fmlA9Zjx47Ru3dv7HY7jz/+OF27diUtLY1FixaRkZFBTEwM+fn5DBo0iKNHj5bus337dp5++mm2bt3Kb7/95tKYKFmH+cUXXzB16tQyg8tp06ZhtVq55pprAErD8XRd5+mnn6Z169asXr2a559/nkOHDjFt2rRqXQtXhquu66XnXrJkCTExMRUORv39/bnwwguZOXMmycnJREdHV3q+9957j+bNm/P222+XGhHDhw9nxYoVnH322YAcDEVERPDyyy8TFRVFeno6X3zxBX379mXjxo20b9++TJuPP/4455xzDp9++inZ2dk88sgjjB49mp07d5Z6eaZOncrUqVOZNGkSY8eOJSEhgZtvvhmn01mmvVdffZUpU6bw5JNPMnDgQOx2O7t27SIzM7PMOTVNY9CgQWXWENYFm80GlA+RtlgsaJrGli1bqmxj2bJlREVFVfk3OJ1t27YxYsQImjRpwurVq4mMjCzzudPprNYEh6vwz//97398/fXXdOzYsdJj582bR/fu3QkNDS2zfcSIETidTl599VWaNWtGamoqq1atKvP3uP322/n444+58847GTVqFIcOHeKpp55i+fLlbNiwodz3qYykpCQGDRqExWLh/fffJyYmhm+++YY777zT5f6DBw9GCMH8+fO56667Kmz3hhtu4J577mHv3r20bdu2dPvixYtJTEwsjdD4/vvvueOOO7jrrrt4/fXX0XWdffv2sWPHjmp/h5qSlZXFDz/8wPnnn0/Lli1LtyckJHDo0CFGjx7N448/zmeffUZaWhrt27fn4Ycf5rrrrqtW+88++yx5eXk899xzpKSk1FpnZmYml112GTt37mTFihX07NmzzOeGYbjsp0KIMu9HjhzJ6tWry2xbvXo1999/P506dapUw9y5czGZTAwcOLDM9h07dnD++efTokULpk+fjr+/P++//z7ffvttuTb27t3LiBEjuPfeewkICGDXrl288sorrF27lt9//710v+r0fYDNmzfzwAMP8OijjxITE8Onn37KpEmTaNOmTanO6j4vCgoKuOCCC0hMTOSll16iXbt2zJs3r8LQ+Z49exIYGMi8efO8IjpAofA6hEKh+E8zbdo0AYg1a9YIu90ucnJyxMKFC0VsbKwYOHCgsNvtpfvGx8eL7t27l9kmhBCjRo0SjRo1Ek6nUwghxI033igsFovYsWNHhed96aWXhK7rYt26dWW2//DDDwIQ8+fPL93WvHlzcd1115W+/+WXXwQgFi9eXLrN4XCIuLg4cfnll5duu/XWW0VgYKA4fPhwmXO8/vrrAhDbt2+v9NoMGjRIAC7/TZo0qXQ/X19f0a9fv0rbeuSRRwRQ7vueysGDBwUg4uLiREFBQen27OxsER4eLi644IIKj3U4HMJms4m2bduK++67r3T7smXLBCBGjBhRZv+ZM2cKQKxevVoIIURGRobw9fUVl156aZn9Vq5cKQAxaNCg0m2jRo0SZ511VqXfVwghTCaTOO+886rc71RSUlIEIJ555plyn23atEkA4rnnniuzfenSpQIQVqu10rY/+eQTAYh33nmnSh0lv4t169aJJUuWiODgYDF27NgyfxchhHjmmWcq7CMl/069dqczc+ZMoWmaePzxx6vU5O/vL2677bYy21JTUwUg3n777QqP27lzpwDEHXfcUWb733//LYAy577uuutE8+bNy+x3+u/vkUceEZqmiU2bNpXZb+jQoQIQy5YtK6ehcePG4sorr6z0+6Wmpgqr1VruWlxxxRUiJiam9L5z5513itDQ0Erbqg4jR44s910r4oMPPhCA+O6778psX716tQBEcHCw6Nixo5g5c6ZYtGiRGDt2rADExx9/XGXbGzduFBaLRSxcuFAIcfI+8Nprr1V57Kn7Hjx4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eOAB+vbtW6nGG2+8kVtvvZXExET69+9fLoPss88+y5IlS+jfvz9333037du3p7CwkEOHDjF//nw+/PDDKmf7CwoKKjRASrygrVu35ssvv+Saa66hd+/e3H///bRv356kpCQ+//xzFixYwA033ODSs+IKk8nE0KFDuf/++zEMg1deeYXs7GymTp1aus+oUaOYPn068fHxdO3alfXr1/Paa69V23txOmFhYTz44IM8//zz3HTTTYwbN46EhASmTJlSLvxs9OjRpXVpo6KiOHz4MG+//TbNmzcv4+Exm80MGjSoWmsSFyxYQF5eXml5kB07dvDDDz8AMmNmiffpk08+AeQ1z8zMZMGCBXz22We8+OKL9OjRo7S9v/76izFjxhAbG8vjjz9ertRDx44dq20IBgUFsXDhwtJQ319++YUhQ4ZU69jTGT9+PDt27ODjjz8mISGBhISE0s+aNGlS6d9v8ODB5UrtbNmyhTvvvJNx48bRtm1brFYrv//+O1u2bOHRRx8FZMTCLbfcwrvvvouu6wwfPrw0m27Tpk257777avQd7r33Xj7//HNGjhzJ888/X5pNd9euXS7337JlC/n5+dW+ZjfeeCOvvPIK48ePx8/Pr9yawptvvhk/Pz/OOeccGjVqxIkTJ3jppZcICQmhd+/elba9Y8eO0qy7J06cID8/v7SfdezYsZzBMGfOHNLT0yv97T733HMsWLCAiy66iClTphAcHMynn37K5s2by5W9Ov03ER8fT3x8fJl9Soza1q1bV1lG5XTeeOMNgoKCuOOOO8jNzeWhhx6q0fElvPbaa3z11VfcddddBAQElLkHBgcHV2pYDR48mM8//5w9e/aUycb+5JNP8ssvv3Deeefx9NNP4+/vz//+979yE3j9+/cnLCyM2267jWeeeQaLxcI333xTbvKjOn2/JlT3eTFx4kTeeustJk6cyAsvvEDbtm2ZP38+ixYtctluWloae/furdFadYXiP4WHEygpFAoPc2rW0NMpKCgQzZo1E23bthUOh0MIIcTmzZvFFVdcIaKjo4XFYhGxsbHivPPOEx9++GGZYxMSEsSNN94oYmNjhcViEXFxceKKK64QSUlJpfvk5uaKJ598UrRv315YrVYREhIiunTpIu67774yGRdPz+ZZQlZWlvDz8xOA+OSTT1x+v5SUFHH33XeLli1bCovFIsLD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", "text/plain": [ "
" ] @@ -202,31 +232,38 @@ }, { "cell_type": "markdown", - "id": "fd065d46", + "id": "c05ba0a0", "metadata": {}, "source": [ "### EQ top band zoom\n", "\n", - "Zoom on the highest band to see the center-frequency shift clearly." + "The 4000 Hz cell is where the old shift was largest (it landed at 3675 Hz).\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "31eff58e", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-28T10:57:19.835543Z", + "iopub.status.busy": "2026-07-28T10:57:19.835294Z", + "iopub.status.idle": "2026-07-28T10:57:20.018461Z", + "shell.execute_reply": "2026-07-28T10:57:20.017738Z" + } + }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_1024744/1314273394.py:7: RuntimeWarning: divide by zero encountered in log10\n", + "/tmp/ipykernel_1550931/1314273394.py:7: RuntimeWarning: divide by zero encountered in log10\n", " plt.plot(f0, 20*np.log10(g0), 'k-', label='192 kHz (peak %.0f Hz)' % p0)\n" ] }, { "data": { - "image/png": "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QkJCrJIlS1qtW7e2du3alfp1px1XXJZlWdd0jUZEREREROQSst09GSIiIiIiYpaKDBERERERyVQqMkREREREJFOpyBARERERkUylIkNERERERDKVigwREREREclUKjJERERERCRTqcgQEREREZFMpSJDRESytY4dO+JyuXC5XKxYsSJTf/a6detSf/aDDz6YqT9bRCSQqcgQEQkwF75pvrDt37/fdDTHatasGTExMTRv3jz1scsVHR07dkx3wdCgQQNiYmJ49NFHMympiEj2EGw6gIiIZFyzZs1YsGBBmseKFi160fOSk5MJDQ3NqliOFRYWRmRkZKb/3NDQUCIjI8mdOzdJSUmZ/vNFRAKVrmSIiASglDfNFza3202jRo3o1asX/fr1IyIigvvuuw+A3bt3c//995MvXz6KFy9O+/btOXHiROrPO3v2LE8++ST58uWjRIkSTJw4kUaNGvHcc8+lPudSZ/4LFizIW2+9lfr54cOHadOmDYUKFaJIkSK0atWKgwcPpn495SrBhAkTKFGiBEWKFKFnz554PJ7U5yQlJfH8889TpkwZwsLCqFKlCvPmzcOyLCpXrsyECRPSZNi5cydBQUH88ssvf/8/9i8OHjx4yatGjRo1yvTXEhHJTlRkiIhkM2+//TbBwcF88803zJ49m5iYGO666y7q1KnD999/z+rVqzl69GiaIT4DBw5k7dq1LF++nDVr1rBu3Tq2bNmSodc9d+4cjRs3Jl++fHz11Vd8/fXX5MuXj2bNmpGcnJz6vLVr1/LLL7+wdu1a3n77bd566600hcqTTz7J0qVLmTp1Kj/99BOzZs0iX758uFwuOnXqdNEVnPnz53PnnXdSqVKla/sPu4IyZcoQExOT2n744QeKFClCw4YNM/21RESyEw2XEhEJQB9//DH58uVL/bx58+a8//77AFSuXJlx48alfm3YsGHccsstvPbaa6mPzZ8/nzJlyrB3715KlizJvHnzWLhwYeqVj7fffpvSpUtnKNPSpUsJCgpi7ty5uFwuABYsWEDBggVZt24dTZo0AaBQoUJMnz4dt9tNtWrVaNGiBV988QVdu3Zl7969vPfee3z22Wfce++9AFSsWDH1NZ566imGDRvGpk2buO222/B4PCxatIjx48dnKGuKtm3b4na70zyWlJREixYtAHC73anDrBITE3nwwQeJiopixIgR1/R6IiI5hYoMEZEA1LhxY2bOnJn6ed68eVO369Wrl+a5W7ZsYe3atWmKkhS//PIL58+fJzk5maioqNTHCxcuTNWqVTOUacuWLezfv5/8+fOneTwxMTHNUKabbropzRv7EiVKsGPHDgC2bduG2+3mrrvuuuRrlChRghYtWjB//nxuu+02Pv74YxITE3nkkUcylDXFpEmTUouZFIMGDcLn81303M6dO3P69Gk+++wzgoI0EEBE5EpUZIiIBKC8efNSuXLly37tQn6/nwceeICxY8de9NwSJUqwb9++dL2my+XCsqw0j114L4Xf76du3bosXrz4ou+98Kb0kJCQi36u3+8HIHfu3FfN0aVLF9q3b8+kSZNYsGABbdq0IU+ePOn6N/xVZGTkRf+P+fPnJy4uLs1jo0aNYvXq1WzatOmiIkpERC6mIkNEJJu75ZZbWLZsGeXLlyc4+OLDfuXKlQkJCWHjxo2ULVsWgNjYWPbu3ZvmikLRokWJiYlJ/Xzfvn2cO3cuzev83//9H8WKFaNAgQLXlLVmzZr4/X7Wr19/0RWGFPfffz958+Zl5syZfPrpp3z11VfX9FrptWzZMkaOHMmnn356Xe77EBHJjnS9V0Qkm+vZsyenTp2ibdu2bNq0iV9//ZU1a9bQqVMnfD4f+fLlo3PnzgwcOJAvvviCnTt30rFjx4uGBN19991Mnz6drVu38v3339OtW7c0VyXatWtHREQErVq14r///S8HDhxg/fr19OnTh0OHDqUra/ny5enQoQOdOnVixYoVHDhwgHXr1vHee++lPsftdtOxY0cGDx5M5cqV0wzzymw7d+7kySefZNCgQdx0000cOXKEI0eOcOrUqev2miIi2YGKDBGRbK5kyZJ88803+Hw+mjZtSo0aNejTpw/h4eGphcT48eNp2LAh//znP7n33nv5xz/+Qd26ddP8nIkTJ1KmTBkaNmzI448/zoABA9IMU8qTJw9fffUVZcuWpXXr1lSvXp1OnTpx/vz5DF3ZmDlzJg8//DA9evSgWrVqdO3albNnz6Z5TufOnUlOTqZTp05/43/m6r7//nvOnTvHqFGjKFGiRGpr3br1dX1dEZFA57L+OsBWREQEaNSoEXXq1GHy5Mmmo1zkm2++oVGjRhw6dIjixYtf8bkdO3YkLi7ukqt7Z5aseA0RkUCiKxkiIhIwkpKS2L9/Py+99BKPPvroVQuMFClT/n788ceZmue///0v+fLlu+TN7iIiOZlu/BYRkYCxZMkSOnfuTJ06dXjnnXfS9T3jxo1j6NChgD2bVmaqV68e27ZtA7jkFMEiIjmVhkuJiIiIiEim0nApERERERHJVCoyREREREQkU6nIEBERERGRTKUiQ0REREREMpWKDBERERERyVQqMkREREREJFOpyBARERERkUylIkNERERERDLV/wNktvr5nC9D4QAAAABJRU5ErkJggg==", + "image/png": "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ERERmfZUXL9+nbFjx9K6detcDQ4gODiYGjVqZHkUKFCABg0a4Ofnx5EjR+zPTU5O5sSJE5TXRFERl3XmzBnGjRsHwKRJk9I+XRk+3FwDvWVLaNHCiRGKOE5KQgI/DxrEubFjScnlkQEi+ULz5vD88+Zytp9/fstqdevWZcqUKYC58tSNYfeSe3KcZIwcOZLLly9TvXp1pk6dymeffca6deuYMmUK1atXJzo6mpEjR+ZlrFkKDAykb9++jB49msjISI4cOUK/fv0A6KCdgUVc1vDhw4mLi6NRo0Z07drVfPDbb2HtWnMy37Rpzg1QxIEsViuWwEBsAQEe0Xsn4hTTp8O6dTBpUpbVXnzxRZo2bUpCQgKzZ892UHD5x23t+H38+HH69evHxo0b7duyWywWHnvsMd5++237SlPOkpyczIgRI3j33Xe5fv06jRo1YubMmVmuLvVX2vFbckrjYP++7du307hxYwB27tzJfffdZ64e1agR7N4NL7wACxY4OcrcofYiOaW2IrdD7eXv2bBhA61atSIwMJDTp08TEBDg7JDyjEvv+F2xYkU2bNjAhQsX2LFjBzt27ODChQts2LDB6QkGgI+PD9OmTePcuXPExsaycePG20owRMRxDMNg6NChADz//PNmggFmD8bu3RAQANks+iAiIpKls2fTht9monnz5lSrVo3Y2FhWrlzp4OA82x2lvMWKFeP+++/n/vvvzzfLfolI7lq/fj3btm2jYMGCjL955SjDgNKlYfBgCAlxXoAiIuLeUlPh4YdhyhT4c9XCv7JarQwcOBAwFyG5jQE+kg31q4mIw6WmpjJixAjAHBNbunTptMIOHcyVpV55xUnRiThPSkIC219+mV/GjdPEb5G/y8sLXn/dPB871twRPBPdunUjICCAX375ha+++sqBAXo2JRki4nAffPABBw8epEiRIgwfPjxjhYIFIZNNlEQ8nS0lhaR9++DwYWwpKc4OR8T9PfcctGoFSUnQs6fZu/EXgYGBPP/884DZmyG5Q0mGiDhUUlISERERALzyyisULVrULFizBlatyvQPgEh+4eXrS3DXrhRo3x4vX19nhyPi/iwWcwGRgADYtg3efjvTajeGTH3xxRdazjaXKMkQEYdatGgRx48fJzQ0lBdffNF8MDERXn7Z/MRp+XKnxifiTF6+vtz9/PNUePppJRkiuaVc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", "text/plain": [ "
" ] @@ -258,23 +295,32 @@ }, { "cell_type": "markdown", - "id": "cf13f12f", + "id": "2dc1781f", "metadata": {}, "source": [ - "## AM audio lowpass IIR (Fs-derived control)\n", + "## AM audio lowpass IIR\n", "\n", - "This stage recomputes its coefficients from the sample rate, so the two curves should lie almost on top of each other — the corner stays fixed in Hz." + "This stage always recomputed its coefficients from the sample rate, so it served\n", + "as the control while the others were being fixed. The two curves should lie\n", + "almost on top of each other.\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "cc49c429", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-28T10:57:20.022177Z", + "iopub.status.busy": "2026-07-28T10:57:20.020924Z", + "iopub.status.idle": "2026-07-28T10:57:20.199584Z", + "shell.execute_reply": "2026-07-28T10:57:20.198871Z" + } + }, "outputs": [ { "data": { - "image/png": "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CYGNG2HFCmjb1uxUNo0aNWLMmDEMHz6cXr16UbNmTWrWrGl2LPkXnGILgoiIiEihVrkyDBuWeX/gQEhLMzfPPwwbNoxmzZqRnJxMy5YtSUpKMjuS/AtqEEREREScwZAhEBEBn30G7u5mp8nGxcWFBQsWUKlSJY4fP07Hjh11xW0npgZBRERExBl4esKSJeCgu+/4+vqycuVKPD09+fzzzxk/frzZkeQOqUEQERERcUZHj2ZeSM2B1KhRg+nTpwMwcuRI9uzZY3IiuRNqEEREREScTUwMVKsGs2aZnSSHLl260K5dO9LT0+nQoQN///232ZHkNqlBEBEREXE2Pj5w9SoMHQqnT5udJhuLxcL06dMpX748x44do3///mZHktukBkFERETE2bz8MtSqBefOZR687GB8fX1ZsGABFouFWbNm8emnn5odSW6DGgQRERERZ+PmBjNmZN6fPx/27TM3z3U0aNCAAQMGAPDCCy+QmJhociLJLTUIIiIiIs6odm2IjMy836+fQ11hOcvYsWOpXr06Z86coVu3bhgOmFFyUoMgIiIi4qzGjYOiRWHnTvj4Y7PT5GC1WlmyZAlWq5V169YxI2urhzg0NQgiIiIizqp8+cxjELy9M49HcED3338/b731FgADBgzghx9+MDmR3IoaBBERERFnNnBg5jURoqLMTnJD0dHRNG7cmOTkZDp27EhaWprZkeQm1CCIiIiIOLOiRcHf3+wUN+Xi4sLcuXMpWbIkcXFxTJ482exIchNqEEREREQKik2bMi+i5oACAwN5++23ARg9ejTHjh0zOZHciBoEERERkYLghx+gYUN4/XWIizM7zXV16tSJp556iuTkZHr27KmzGjkoNQgiIiIiBcF990FERObpTvv3d8jTnlosFmbOnImnpyebNm1i/vz5ZkeS61CDICIiIlJQTJgAnp6wdSt88onZaa6rcuXKjBo1Csg8q9Eff/xhbiDJQQ2CiIiISEERHAyDBgFgGTIEUlNNDnR9/fv358EHH+Ts2bO88sorZseRf1CDICIiIlKQDB4M/v5Yfv4Z71WrzE5zXe7u7syaNQsXFxeWLFnCunXrzI4k11CDICIiIlKQeHtnNglA8ffec9itCA899BB9+vQB4KWXXuLvv/82OZFkUYMgIiIiUtD06IFRvz7nBg0CV1ez09zQmDFjqFChAr/88gsjR440O478lxoEERERkYKmaFGMTZu49OyzDt0geHt7M336dACmTp1KnIOenrWwUYMgIiIiIqZp2rQpbdu2JSMjg/79++vaCA5ADYKIiIhIQZWSAu++C48/DmlpZqe5obfeegtPT0+2bt3Kf/7zH7PjFHpqEEREREQKKEt6OpaYGNixAxYtMjvODQUHB9tOdzp48GDSHLiZKQzUIIiIiIgUUEbRohj/vS4CY8c69FaEoUOHUrp0aQ4fPsysWbPMjlOoqUEQERERKch69IDSpeHnn2HxYrPT3FCxYsVsV1geOXIk58+fNzdQIaYGQURERKQg8/KyXReBsWPh6lVz89xEVFQUVapU4cyZM7z55ptmxym01CCIiIiIFHQvvZS5FeGnnxx6K4K7uztvvfUWAFOmTOHUqVMmJyqc1CCIiIiIFHReXnDtsQgZGebmuYnmzZtTr149kpOTGT58uNlxCiU1CCIiIiKFwcsvQ8eOsHw5uDjuR0CLxcKkSZMAWLhwoS6eZgLH/a9DRERERPKOlxcsXAi1apmd5JbCwsLo0KEDhmEwcOBAXTzNztQgiIiIiBRGDv6hOyYmBqvVyubNm/n888/NjlOoqEEQERERKUxOnco8aLljR7OT3FSFChXo168fAK+88grJycnmBipE1CCIiIiIFCaXL8PMmbB0KRw7Znaam3r11VcJCAjg6NGjTJgwwew4hYYaBBEREZHCpEoVaNo0cxejd94xO81NFStWjGnTpgEwfvx4Dh8+bHKiwkENgoiIiEhh079/5s+5cyEpydwst9CyZUuaNm1KamoqPXv21AHLdqAGQURERKSwefJJqF4dLl2CWbPMTnNTFouF9957jyJFirBlyxYWLFhgdqQ788UXcOKE2SlyRQ2CiIiISGFjscB/DwDm//4P0tJMjXMrFStWZNSoUQAMGDCAM2fOmBvodiUnZx4UfvfdEBtrdppbUoMgIiIiUhi1bw9ly8Kvv8LHH5ud5pZeeeUVHnjgAf766y8GZV0V2lksXw5//QXlysFDD5md5pbUIIiIiIgURlYrDBsGr70G9eubneaW3N3def/997FYLMybN48tW7aYHSn33nsv8+dLL4Gbm7lZckENgoiIiEhh1bcvjB0LAQFmJ8mVOnXq0KNHDwB69uxJSkqKyYlyYc8e2LsXPDzghRfMTpMrahBERERExGmMHz+e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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwgAAAHUCAYAAACeZg9qAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAC19UlEQVR4nOzddXhT1xvA8W/q3lKKFVrcrcUpTovrgMFwlwGDYcOGu7uN4TDchg63UaA4xeGH+6CF0lJLzu+PrBmlQgsVCu/nefJAbs699705SZo3xzRKKYUQQgghhBBCAEbJHYAQQgghhBDiyyEJghBCCCGEEMJAEgQhhBBCCCGEgSQIQgghhBBCCANJEIQQQgghhBAGkiAIIYQQQgghDCRBEEIIIYQQQhhIgiCEEEIIIYQwkARBCCGEEEIIYSAJgojRzJkz0Wg0FChQIMYyGo0GjUZDmzZton185MiRhjJ3795NnEA/QcWKFalYsaLh/t27d9FoNCxdujTBzqHRaBg+fHiCHe9r5O/vj5OTE2vWrDFsGz58uOE18+Ft9uzZiRbLoUOH0Gg0HDp0KEGPG3E9yeHD1/mNGzcwMzPj7NmzyRKPSDqJ9XpOCInxefuhD1/7yRlLQtm5c2eMf1OyZMkS49/hT3X27Fm8vLywsbHBwcGBBg0a8L///S9O+4aGhjJ06FCyZs2KmZkZmTNnZuDAgbx79y5K2Vu3btGyZUtcXV2xtLQke/bs9O7dm5cvX0Ypu3HjRsqUKYOjoyMODg6UKFGCFStWxBrLs2fPSJ06NRqNhg0bNsTt4gUmyR2A+HItXrwYgMuXL3Py5ElKliwZbTlbW1vWr1/PrFmzsLW1NWxXSrF06VLs7Ox48+ZNksT8qTJkyIC3tzfZs2dP7lC+KSNGjMDZ2ZkmTZpEeWz37t3Y29tH2pY1a9akCi3BdOjQgerVqyd3GADkypWL5s2b06tXLw4fPpzc4YhvVFJ83s6dOzfRjp1cdu7cyZw5c6JNEjZv3oydnV2CnevatWtUrFgRNzc31q1bR3BwMEOHDqVcuXKcP3+eNGnSxLp/06ZN2blzJ0OHDqV48eJ4e3szevRoLl++zJ9//mko9+LFC0qVKoWdnR2jRo3C1dWVc+fOMWzYMA4ePMiZM2cwMtL/lr148WLat29Pw4YN+fXXX9FoNCxbtoxWrVrxzz//0KtXr2hj6datGxYWFgn23HwzlBDR8PHxUYCqVauWAlTHjh2jLQeoFi1aKEtLS/Xbb79Femzfvn2GfQF1586dJIg8bipUqKAqVKiQqOcA1LBhwxL1HCnZy5cvlaWlpZo/f36k7cOGDVOAevHiRZLGc/DgQQWogwcPJsjxAgMDE+Q4nyO61/np06cVoP7+++/kCSoOkvK5Cw8PV8HBwUl2vsQWGhqqwsLCEvz1/LW6c+eOAtSSJUuS/NzxfZ1369ZNJdXXtu+//145OTmp169fG7bdvXtXmZqaql9++SXWfb29vRWgpkyZEmn72LFjFaD27Nlj2LZw4UIFqH379kVb9uzZs4ZtZcqUUZkzZ1ZardawTafTqTx58qhChQpFG8uGDRuUjY2NWrZsmQLU+vXrP37xQimllHQxEtFatGgRAOPHj8fDw4M1a9YQFBQUbVl7e3u+++47Q4tDhMWLF1OmTBly5coVp3PeunWLtm3bkjNnTqysrMiYMSN16tTh0qVLkcotXbo02i5L0TWpK6WYOHEimTNnxsLCgiJFirBr164o546pmfnYsWN4enpia2uLlZUVHh4e7NixI07XEx1fX1/q1atHqlSpsLCwwM3NjWXLlkWKN126dHTr1s2wTavVkipVKoyMjHj27Jlh+9SpUzExMcHf3x+ANm3aYGNjw+XLl/H09MTa2po0adLQvXv3KHU3Z84cypcvT9q0abG2tqZgwYJMnDiRsLCwSOXOnTtH7dq1SZs2Lebm5jg7O1OrVi0ePnxoKLN+/XpKliyJvb09VlZWZMuWjXbt2n30uVi6dCnh4eHRth7Exbx58yhcuDA2NjbY2tqSJ08eBg0aFKd9r127RvXq1bGyssLJyYkuXboQEBAQbdl9+/bh6emJnZ0dVlZWlClThv3790cqE9GN6OzZszRq1IhUqVIZfh39sItR/fr1yZw5MzqdLsq5SpYsSZEiRQz3lVLMnTsXNzc3LC0tSZUqFY0aNYrSzB/X1zlA0aJFyZs3L/Pnz4/TcxWT3bt34+npaaj3vHnzMm7cuEhl/vzzT0qXLo2VlRW2trZUqVIFb2/vSGVie+6yZMlC7dq12b17N0WKFMHS0pI8efJE+awBePr0KZ07dyZTpkyYmZmRNWtWRowYQXh4uKFMxPt84sSJjB49mqxZs2Jubs7BgwfR6XSMHj2a3LlzY2lpiYODA4UKFWLGjBmxPg8RnzurV69m8ODBODs7Y2dnh5eXF9evX49SPi6vp7h+Fkace8WKFfTp04eMGTNibm7OrVu3opx3xYoVaDSaKM8/6LuCmpqa8vjx41iv9dq1azRt2pR06dJhbm6Oq6srrVq1IiQkxFDmY59xEP3nbcTr4PLlyzRt2hR7e3vSpUtHu3bteP36daT9dTods2bNMrwvHBwcKFWqVKRfpqPrYvT48WMaN26Mra0t9vb2NGnShKdPn0Z7radPn6Zu3bo4OjpiYWGBu7s769ati/X5iU3FihUpUKAAR44cwcPDAysrK8Pn5Nq1a6latSoZMmTA0tKSvHnzMmDAAAIDAw37t2nThjlz5gBE6nYZ8Xcwui5G9+/fp0WLFobP77x58zJlypRoP3veFx4ezvbt22nYsGGkVonMmTNTqVIlNm/eHOv+f//9NwA1a9aMtL127dqAvptQBFNTU4AorcUODg4AkX75NzU1xcbGxtCiAPrnws7OLtoWglevXtGtWzfGjBmDq6trrDGLqCRBEFG8e/eO1atXU7x4cQoUKEC7du0ICAhg/fr1Me7Tvn17Tpw4wdWrVwF93/JNmzbRvn37OJ/38ePHpE6dmvHjx7N7927mzJmDiYkJJUuWjPYPbVyMGDGC/v37U6VKFbZs2cKPP/5Ix44d43S8w4cPU7lyZV6/fs2iRYtYvXo1tra21KlTh7Vr18Y7luvXr+Ph4cHly5eZOXMmmzZtIl++fLRp04aJEycC+g+7ypUrs2/fPsN+p0+fxt/fHwsLi0hfJPbt20fRokUNH6QAYWFh1KxZE09PT7Zs2UL37t1ZsGBBlC/ht2/fplmzZqxYsYLt27fTvn17Jk2aROfOnQ1lAgMDqVKlCs+ePWPOnDns3buX6dOn4+rqavgy7e3tTZMmTciWLRtr1qxhx44dDB06NNKXspjs2LEDd3f3SPG/T6vVEh4ebrhptVrDY2vWrKFr165UqFCBzZs3s2XLFnr16hXpD2pMnj17RoUKFfD19WXu3LmsWLGCt2/f0r179yhlV65cSdWqVbGzs2PZsmWsW7cOR0dHqlWrFuVLHUCDBg3IkSMH69evj/ELeLt27bh//z4HDhyItP3atWucOnWKtm3bGrZ17tyZn3/+GS8vL7Zs2cLcuXO5fPkyHh4ekZLF+L7OK1asyK5du1BKGbZFfNmMy7iZRYsWUbNmTXQ6HfPnz2fbtm306NEjUuL4xx9/UK9ePezs7Fi9ejWLFi3Cz8+PihUrcuzYsTg/dxcuXKBPnz706tWLrVu3UqhQIdq3b8+RI0cMZZ4+fUqJEiX466+/GDp0KLt27aJ9+/aMGzeOjh07RjnXzJkzOXDgAJMnT2bXrl3kyZOHiRMnMnz4cJo2bcqOHTtYu3Yt7du3NyTgHzNo0CDu3bvH77//zm+//cbNmzepU6dOpNdtXF9P8f0sHDhwIPfv3zfURdq0aaOUadKkCenTpzd8yYwQHh7OggUL+O6773B2do7x+i5cuEDx4sU5ceIEI0eOZNeuXYwbN46QkBBCQ0OBuH3GfUzDhg3JlSsXGzduZMCAAfzxxx9Ruo60adOGnj17Urx4cdauXcuaNWuoW7durOPc3r17h5eXF3v27GHcuHGsX7+e9OnTR/sDxcGDBylTpgz+/v7Mnz+frVu34ubmRpMmTT5rrMKTJ09o0aIFzZo1Y+fOnXTt2hWAmzdvUrNmTRYtWsTu3bv5+eefWbduHXXq1DHsO2TIEBo1agToP3cjbhkyZIj2XC9evMDDw4M9e/YwatQo/vzzT7y8vOjbt2+0n3Xvu337Nu/evaNQoUJRHitUqBC3bt0iODg4xv0jXg/m5uaRtkfcv3jxomFb/fr1cXV1pU+fPly+fJm3b99y5MgRxo8fT506dcibN6+h7E8//cTVq1cZM2YML1684J9//mHy5MmcOXOGvn37RomjR48eZM2a9aPXK2KQrO0X4ou0fPlyBRi6fgQEBCgbGxtVrly5KGUB1a1bN6XT6VTWrFlV3759lVJKzZkzR9nY2KiAgAA1adKkT+piFB4erkJDQ1XOnDlVr169DNuXLFkS7fE+bFL38/NTFhYW6rvvvotU7u+//1ZApK4X0TUzlypVSqVNm1YFBAREiqlAgQIqU6ZMSqfTxRo/H3Qx+uGHH5S5ubm6f/9+pHI1atRQVlZWyt/fXyml1O+//64AQ7nRo0erPHnyqLp166q2bdsqpfTdCKytrdWgQYMMx2ndurUC1IwZMyIdf8yYMQpQx44dizZOrVarwsLC1PLly5WxsbF69eqVUuq/rihbtmyJ8RonT56sAEPs8WFlZaW6dOkSZXtEF6MPbxkzZjSU6d69u3JwcIj3OZVSqn///kqj0ajz589H2l6lSpVIr5/AwEDl6Oio6tSpE6mcVqtVhQsXViVKlIgS89ChQ2O8nghhYWEqXbp0qlmzZpHK/fLLL8rMzEz9888/SqmYm+kfPHigLC0tDc388XmdR4ho1r969aph26FDh5SxsbEaMWJElPLvCwgIUHZ2dqps2bIxvge0Wq1ydnZWBQsWjNQdICAgQKVNm1Z5eHgYtsX23GXOnFlZWFioe/fuGba9e/dOOTo6qs6dOxu2de7cWdnY2EQqp9R/r8/Lly8rpf57n2fPnl2FhoZGKlu7dm3l5uYW67VHJ+Jzp2bNmpG2r1u3TgHK29tbKRW/19OHYvosjDh3+fLlY4zr/S5Gw4YNU2ZmZurZs2eGbWvXrlWAOnz4cKzXWblyZeXg4KCeP38eY5m4fsZF93kb8TqYOHFipH27du2qLCwsDK+1I0eOKEANHjw41ng/7F43b948BaitW7dGKhfRBfb9WPLkyaPc3d1VWFhYpLK1a9dWGTJkiPSajqsKFSooQO3fvz/WcjqdToWFhanDhw8rQF24cMHwWGxdjDJnzqxat25tuD9gwAAFqJMnT0Yq9+OPPyqNRqOuX78eYwwRnx2rV6+O8lhE15/Hjx/HuP+WLVsUoFasWBFp+6JFixSgcuXKFWn748ePVenSpSN93n///ffRdv3bsmWLsre3N5SztLRUK1eujFJu+/btytTUVF26dEkp9d/7QboYxZ20IIgoFi1ahKWlJT/88AMANjY2fP/99xw9epSbN29Gu0/ETEYrVqwgPDycRYsW0bhxY2xsbOJ83vDwcMaOHUu+fPkwMzPDxMQEMzMzbt68aWiZiA9vb2+Cg4Np3rx5pO0eHh5kzpw51n0DAwM5efIkjRo1inQNxsbGtGzZkocPH8a7VePAgQN4enri4uISaXubNm0ICgoyNP17eXkBGFoR9u7dS5UqVfDy8mLv3r2GawsMDDSUfd+H19usWTNA/6tYhHPnzlG3bl1Sp06NsbExpqamtGrVCq1Wy40bNwDIkSMHqVKlon///syfP58rV65EOVfx4sUBaNy4MevWrePRo0dxei78/f0JCgqK9pfOCPv27cPHx8dw27lzp+GxEiVK4O/vT9OmTdm6dSv//PNPlP3fb30IDw83/Fp+8OBB8ufPT+HChaN9niIcP36cV69e0bp160jH0el0VK9eHR8fnygtFg0bNvzotZuYmNCiRQs2bdpk6Dqh1WpZsWIF9erVI3Xq1ABs374djUZDixYtIp0/ffr0FC5c2NCV7lNe5xHP+/v1VaFCBcLDwxk6dGis8R8/fpw3b97QtWvXGGdnun79Oo8fP6Zly5aRugPY2NjQsGFDTpw4EaXbW0zPnZubW6TuARYWFuTKlYt79+4Ztm3fvp1KlSrh7Owc6bmqUaMGQJQB2XXr1jV0bYhQokQJLly4QNeuXfnrr7/iPbFC3bp1I92P+PU1Is74vJ7i+1kYl9cdwI8//gjAwoULDdtmz55NwYIFKV++fIz7BQUFcfjwYRo3bhzr4NS4fsbFJrrnMTg4mOfPnwMYus693w0zLg4ePIitrW2U43/4vr916xbXrl0zvJ/er6uaNWvy5MmTT27RTpUqFZUrV46y/X//+x/NmjUjffr0hs/jChUqAHzS3z7Q10W+fPkoUaJEpO1t2rRBKRWlBTM6sc2+FttjNWrUIEeOHPTv35+9e/fi7+/P7t27GTRoEMbGxpE+E/z8/KhXrx5v3rxh1apVHDlyhLlz53Ls2DHq1q0bqTV69+7dtGjRggYNGrBr1y727t1Lhw4daNOmDUuWLDGUe/36NZ07d6Z///6xzsIoYicJgojk1q1bHDlyhFq1aqGUwt/fH39/f0PTZnR9fyO0bduWFy9eMHbsWM6ePRuv7kUAvXv3ZsiQIdSvX59t27Zx8uRJfHx8KFy4cLRTo31MxBRp6dOnj/JYdNve5+fnh1Iq2ubbiGb46KZg+1g8cTle5syZyZ49O/v27TP8UY1IECISk3379mFpaYmHh0ekY5mYmBi+YEaIuNaI49+/f59y5crx6NEjZsyYwdGjR/Hx8TF0PYh4ru3t7Tl8+DBubm4MGjSI/Pnz4+zszLBhwwxjFcqXL8+WLVsIDw+nVatWZMqUiQIFCrB69epYn4uIc8Q2s0ThwoUpVqyY4fZ+c3fLli1ZvHgx9+7do2HDhqRNm5aSJUsaEijQ91d9/xbRD/rly5dxek1EdOFp1KhRlGNNmDABpRSvXr2KtE9Mzf0fateuHcHBwYbpXf/66y+ePHkSqXvRs2fPDGNSPjz/iRMnDEnRp7zOI573T3lfvXjxAoBMmTLFWCYipphe7zqdDj8/v0jbY3ruPnw9g76rwvuxP3v2jG3btkV5nvLnzw8QJYGM7lwDBw5k8uTJnDhxgho1apA6dWo8PT05ffp0jNcZW5wR3Ski4ozP6ym+n4Vxfd2lS5eOJk2asGDBArRaLRcvXuTo0aMf7YLh5+eHVquNtc4h7p9xsfnY8/jixQuMjY0/+hkeXWzp0qWLsj2m933fvn2j1FNEl6DofpCIi+iem7dv31KuXDlOnjzJ6NGjOXToED4+PmzatAn4tPcofF5dRNRBdGVevXqFRqOJsWsogJmZGbt27cLV1ZWqVasaxk4NGjSIVKlSkTFjRkPZCRMmcP78efbu3UuzZs0oV64cP/74I6tWrWLPnj2sWrUK0I+zateuHeXLl2fx4sVUr14dLy8vZs6cSbNmzfjpp58MCfbgwYMxNTWle/fuhu8wb9++BfTJrr+/f6TulSJ6Ms2piGTx4sUopdiwYUO08wUvW7aM0aNHY2xsHOUxFxcXvLy8GDFiBLlz547y5fVjVq5cSatWrRg7dmyk7f/880+kD6OILzfvD4yLKPe+iA+56AahPX36lCxZssQYS8Sg4CdPnkR5LGIgn5OTU8wXE43UqVPH+Xienp5s3bqVw4cPo9PpqFixIra2tjg7O7N371727dtHuXLlovTxDA8P5+XLl5H+yEZcf8S2LVu2EBgYyKZNmyL9wnz+/PkosRUsWJA1a9aglOLixYssXbqUkSNHYmlpyYABAwCoV68e9erVIyQkhBMnTjBu3DiaNWtGlixZKF26dIzPBRDlC3Z8tG3blrZt2xIYGMiRI0cYNmwYtWvX5saNG2TOnBkfH59I5SOmSE2dOnWMr4n3RdTHrFmzKFWqVLQxfPiFI67rHUT8srdkyRI6d+7MkiVLcHZ2pmrVqpHOr9FoOHr0aJR6hv++OH3K6zzieY/vaxgw/IL8/niDD0XEFNPr3cjIiFSpUkXa/jlrRTg5OVGoUCHGjBkT7eMf9q2P7lwmJib07t2b3r174+/vz759+xg0aBDVqlXjwYMHWFlZfXJ8ETFC3F5Pcf0sjO16YtKzZ09WrFjB1q1b2b17Nw4ODlFanz7k6OiIsbFxrHUO8fuM+1Rp0qRBq9Xy9OnTOCdGEbGdOnUqyvaY3vcDBw6kQYMG0R4rd+7c8Yj4P9HV04EDB3j8+DGHDh0ytBoAcR77EpPPqYvs2bNjaWkZZVA8wKVLl8iRI8dHpw3NkSMH3t7ePHr0iFevXpE9e3Zev35Nz549I7VWnT9/nowZM0apy4jWaV9fX0CfuD158iTSOLn3yy5fvpy7d++SP39+fH19uXv3brRJZOvWrQF90htbkiOkBUG8R6vVsmzZMrJnz87Bgwej3Pr06cOTJ09inB0FoE+fPtSpU4chQ4bE+/wajSbKF6EdO3ZE6bYS8YXn/YFOQKQZLABKlSqFhYWF4ReICMePH4/UPSE61tbWlCxZkk2bNkX6BUen07Fy5UoyZcoU59mZInh6ehr+GLxv+fLlWFlZRfrS4OXlxbNnz5g+fTqlSpUyrC/h6enJ5s2b8fHxibZ7ERDlev/44w8Aw4weEX+k3n+ulVKRuh18SKPRULhwYaZNm4aDg0O0C22Zm5tToUIFJkyYAOi7McXEzMyMbNmycfv27RjLxJW1tTU1atRg8ODBhIaGcvnyZYBIrQ/FihUzfGmtVKkSly9f5sKFC5GOE/E8RShTpgwODg5cuXIlyrEibmZmZp8cd9u2bTl58iTHjh1j27ZttG7dOlLiXbt2bZRSPHr0KNpzFyxYEPi01/n//vc/jIyMPumLjoeHB/b29syfPz/GX+Fy585NxowZ+eOPPyKVCQwMZOPGjYaZjRJK7dq18fX1JXv27NE+V7ENvo2Og4MDjRo1olu3brx69SpBFnmMz+sprp+Fn6Jo0aJ4eHgwYcIEVq1aRZs2bbC2to51H0tLSypUqMD69etj/fU8Pp9xnyqi29i8efPitV+lSpUICAiI8nfiw/d97ty5yZkzJxcuXIixnt5f7+dzRfd5DLBgwYIoZT9sTYmNp6cnV65cifJZvXz5cjQaDZUqVYpxXxMTE+rUqcOmTZsize52//59Dh48GGPiFJ2MGTNSsGBBrKysmDRpEtbW1pF6Fzg7O/Pw4cMor+2I7mgRrVYRs2KdOHEiyjm8vb0xMjIyJBnTp0+P8v1l2rRpgH62rIMHD8ar+/O3SloQhMGuXbt4/PgxEyZMiHYFygIFCjB79mwWLVpkmK7sQ1WrVo30K2h81K5dm6VLl5InTx4KFSrEmTNnmDRpUpRm7eLFi5M7d2769u1LeHg4qVKlYvPmzVFmRkmVKhV9+/Zl9OjRdOjQge+//54HDx4wfPjwODVPjxs3jipVqlCpUiX69u2LmZkZc+fOxdfXl9WrV8f7F89hw4YZ+koPHToUR0dHVq1axY4dO5g4cWKkad4qV66MRqNhz549jBgxwrDdy8vL8AtIdAmCmZkZU6ZM4e3btxQvXpzjx48zevRoatSoQdmyZQGoUqUKZmZmNG3alF9++YXg4GDmzZsXpcvH9u3bmTt3LvXr1ydbtmwopdi0aRP+/v5UqVIFgKFDh/Lw4UM8PT3JlCkT/v7+zJgxI1If2phEzKTzKTp27IilpSVlypQhQ4YMPH36lHHjxmFvb2/45SkmP//8M4sXL6ZWrVqMHj2adOnSsWrVKq5duxapnI2NDbNmzaJ169a8evWKRo0akTZtWl68eMGFCxd48eJFvL+kvK9p06b07t2bpk2bEhISEmWKwjJlytCpUyfatm3L6dOnKV++PNbW1jx58oRjx45RsGBBfvzxx096nZ84cQI3N7dIv+IfPnwYT09Phg4dGus4BBsbG6ZMmUKHDh3w8vKiY8eOpEuXjlu3bnHhwgVmz56NkZEREydOpHnz5tSuXZvOnTsTEhLCpEmT8Pf3Z/z48Z/8vEVn5MiR7N27Fw8PD3r06EHu3LkJDg7m7t277Ny5k/nz53+0e0ydOnUoUKAAxYoVI02aNNy7d4/p06eTOXNmcubM+dkxxuf1FNfPwk/Vs2dPmjRpgkajMXSb+ZipU6dStmxZSpYsyYABA8iRIwfPnj3jzz//ZMGCBdja2sbrM+5TlStXjpYtWzJ69GiePXtG7dq1MTc359y5c1hZWfHTTz9Fu1+rVq2YNm0arVq1YsyYMeTMmZOdO3fy119/RSm7YMECatSoQbVq1WjTpg0ZM2bk1atXXL16lbNnz0aa0S/iB6tPTSI9PDxIlSoVXbp0YdiwYZiamrJq1aooP2AAhh8FJkyYQI0aNTA2NqZQoULR/lDRq1cvli9fTq1atRg5ciSZM2dmx44dzJ07lx9//PGjP3CNGDGC4sWLU7t2bQYMGGBYKM3JyYk+ffpEKmtiYkKFChUizcQ1ceJE0qdPj6urK8+ePWPdunVs2bKFFStWROpi1K1bN1atWkWVKlUYMGAALi4u+Pr6Gj6bI1q3zM3N6dq1K1OnTqVVq1Y0adIEY2NjtmzZwh9//EH79u1xdHQE9OOWYpI/f/44rbAtkFmMxH/q16+vzMzMPjpLhYmJiXr69KlS6r9ZjGIT11mM/Pz8VPv27VXatGmVlZWVKlu2rDp69Gi0iz3duHFDVa1aVdnZ2ak0adKon376Se3YsSPKrB06nU6NGzdOubi4KDMzM1WoUCG1bdu2KMeMabGco0ePqsqVKytra2tlaWmpSpUqpbZt2xbrdUQgmoXSLl26pOrUqaPs7e2VmZmZKly4cIwL9Li7u0dZ0OrRo0cKUKlTp44yg0zr1q2VtbW1unjxoqpYsaKytLRUjo6O6scff1Rv376NVHbbtm2qcOHCysLCQmXMmFH169dP7dq1K9Lzd+3aNdW0aVOVPXt2ZWlpqezt7VWJEiXU0qVLDcfZvn27qlGjhsqYMaMyMzNTadOmVTVr1lRHjx796POzf/9+BahTp05F2h6XhdKWLVumKlWqpNKlS6fMzMyUs7Ozaty4sbp48eJHz6uUUleuXFFVqlRRFhYWytHRUbVv315t3bo12oWlDh8+rGrVqqUcHR2Vqampypgxo6pVq1ak2TBii/nDWYze16xZMwWoMmXKxBjr4sWLVcmSJQ2vwezZs6tWrVqp06dPG8rE9XWulH4mISsrqyizI0XM8hHXxf127typKlSooKytrZWVlZXKly+fmjBhQqQyW7ZsUSVLllQWFhbK2tpaeXp6RlmgLbbnLnPmzKpWrVpRtkd3XS9evFA9evRQWbNmVaampsrR0VEVLVpUDR482PD6j3ifT5o0Kcoxp0yZojw8PJSTk5MyMzNTrq6uqn379uru3buxPg8xzY4S02dKXF5Pcf0sjG1mltgWSgsJCVHm5uaqevXqsV7bh65cuaK+//57lTp1asNz1KZNm0izzcTlMy62WYw+fB1EN2udVqtV06ZNUwUKFFBmZmbK3t5elS5dOtJnc3SvkYcPH6qGDRsqGxsbZWtrqxo2bKiOHz8ebT1duHBBNW7cWKVNm1aZmpqq9OnTq8qVK0dZ2NHJyUmVKlXqo89dhQoVVP78+aN97Pjx46p06dLKyspKpUmTRnXo0EGdPXs2SlwhISGqQ4cOKk2aNEqj0UR6Xj6cxUgppe7du6eaNWumUqdOrUxNTVXu3LnVpEmT4jwL0+nTp5Wnp6eysrJSdnZ2qn79+urWrVtRyhHNbGkjRoxQ2bNnV+bm5srBwUFVr15dHTlyJNrznD17Vn333XcqU6ZMytzcXGXLlk116NAhymxYWq1WLVy4UBUrVkw5ODgoOzs75e7urmbPnh1lVrIPySxG8adRSkZqCPE1aNOmDRs2bDAMxkoJChUqRJkyZT7rl3gRP4sWLaJnz548ePAgyjgA8W3Ytm0bdevWZceOHVEWsxJxd+XKFfLnz8/27dupVatWcocjRIKSMQhCiGQzceJEli5d+tHBjyJhhIeHM2HCBAYOHCjJwTfoypUr7Nq1iz59+uDm5mbozy8+zcGDByldurQkB+KrJAmCECLZVK9enUmTJnHnzp3kDuWb8ODBA1q0aBGlD7H4NnTt2pW6deuSKlWqTxpHJSLr1q0bx48fT+4whEgU0sVICCGEEEIIYSAtCEIIIYQQQggDSRCEEEIIIYQQBpIgCCGEEEIIIQxkobQP6HQ6Hj9+jK2trQzgEkIIIYQQXwWlFAEBATg7O2NkFHsbgSQIH3j8+DEuLi7JHYYQQgghhBAJ7sGDBx9dmV0ShA/Y2toC+ifPzs4uSc6p0+l48OABLi4uH83oRPKSuko5pK5SDqmrlEPqKmWR+ko5kqKu3rx5g4uLi+G7bmwkQfhARLciOzu7JE0QbG1tsbOzkzfwF07qKuWQuko5pK5SDqmrlEXqK+VIyrqKSxd6ebUIIYQQQgghDCRBEEIIIYQQQhhIgiCEEEIIIYQwkDEIQgghhPgsWq2WsLCw5A5DfECn06HVagkODpYxCF+4hKgrY2NjTExMEmSafkkQhBBCCPHJ3r59y8OHD1FKJXco4gNKKbRaLXfv3pW1nb5wCVVXVlZWZMiQATMzs8+KRxIEIYQQQnwSrVbLw4cPsbKyIk2aNPIl9AujlCIsLAxTU1Opmy/c59aVUorQ0FBevHjBnTt3yJkz52e1GkmCIIQQQohPEhYWhlKKNGnSYGlpmdzhiA8opTAyMsLMzEwShC9cQtSVpaUlpqam3Lt3j9DQUCwsLD45HkkQhPhCaMPDefv2LW8CAggICCD0+nW0//sf4f7+GJmaYmxhgYmVFSaWlphYWaHy5SN1xoykTp1aPviFEMlKPoOE+DIk1FgTSRCESAJKKZ4/f879/ft5e+oUYf/7H5oHDzB//hx7f3+cgoNJo9ORFfD7d595QJdYjpkDuI3+F4NfbG1pGBpKYOrUaDNkwDh3bjLUqYNLjRoYfWY/RCGEEEJ8WyRBECIB6XQ67l65wv2dOwn08UFz9SrjrK3xvXEDf39/lgBtYtnfDnhraoqtrS1vdDpuvXtHiIkJGqUw0Wox1ukwUQpjnQ4za2sICODdu3ekf/eOggD+/nD7Nhw7BosWEQjcTpWKfS1akKtqVUqWLEmaNGkS/4kQQgghRIolCYIQnyg4OBhfX18e/PknRvv2YX3zJi6vXpFDpyPbe+X6Av7om+D/lyoV18LCeJsqFaHp06NxdcU8Z07sChQgVb58XM+ZE3Nr6zid/8q/MTx8+JB/jhzh8OnThN2+jebhQ+wePSLX69fYA/n8/Cg9axZBs2YBMDBrVsoWKEDm/v3J5+EhXQOEECIJVaxYETc3N6ZPn57coQCwaNEi1q5dy549exL82FmyZOHnn3/m559/TvBjf222b9/OkCFDOHPmDMbGxskdjiyUJkRchIaGcuHAAXb+/DMn69alSuHC2NraUrx4cc6NGkU9b2+8/vmH3DodxsA/JiZcTpcOn5IlmTxrFhcvXiQwMJCRL1+S580bit27h8fJk5Rev54iY8eSo1kzUru5xTk5iGBhYUGOHDko1a4dFebOxeuvv/C8fJni/v5YBQdzZf169nXsyPetW5MnTx4Amt+5Q81t28hWtizbbG2Z36gRRw8fRqvVJsIzJ4QQX54jR45Qp04dnJ2d0Wg0bNmyJUqZZ8+e0aZNG5ydnbGysqJ69ercvHnT8PirV6/46aefyJ07N1ZWVri6utKjRw9ev379WbENHz4cNze3KNsjpr88f/78Zx3/fSEhIQwdOpQhQ4Z8tOyjR49o0aIFqVOnxsrKCjc3N86cOROv82XJkgWNRoNGo8HY2BhnZ2fat2+Pn5/fx3dG3123Ro0aMdYZ6K/Jzc0t2ufKx8cHT09PHBwcSJUqFVWrVo1U5tChQ9SrV48MGTJgbW2Nm5sbq1at+mhcMcXTpk0b6tevH6drq127NhqNhj/++CNO5RObtCAI8QGlFLcvX+bWunUEHTyI7ZUrZH/1isJA4X/L/AGEA6lTpybQ1ZVzQUEoNzccK1UiY82aOLm44JR8lwCAqbk5+Ro1Il+jRlT/d9vzx4+506sXd3ftIktAAHUDA2HjRu5v3MgcW1tMWrem/sCBODs7J2vsQgiRmAIDAylcuDBt27alYcOGUR5XSlG/fn1MTU3ZunUrdnZ2TJ06FS8vL65cuYK1tTWPHz/m8ePHTJ48mXz58nHv3j26dOnC48eP2bBhQzJcVfxt3LgRGxsbypUrF2s5Pz8/ypQpQ6VKldi1axdp06bl9u3bODg4xPucI0eOpGPHjmi1Wm7cuEGnTp3o0aMHK1as+Oi+06dP/2ir9y+//IKzszMXLlyItD0gIIBq1apRr1495s6dS3h4OMOGDaNatWo8fPgQU1NTjh8/TqFChejfvz/p0qVjx44dtGrVCjs7O+rUqRPva42vVq1aMXv2bFq2bJno5/ooJSJ5/fq1AtTr16+T7JxarVbduXNHabXaJDun+M+LZ8/Uofnz1cQ+fVT16tWVo6OjagFKRXN7YGmpTuXIofaPHKnu3r2rdDpdcof/aXQ6FXj4sLpVrZp6a2ZmuL5VoIyNjVWDBg3U3r17U/RrUt5XKYfUVcrxYV29e/dOXblyRb17904ppZROp1Nv375Nltunfh4DavPmzZG2Xb9+XQHK19fXsC08PFw5OjqqhQsXxnisdevWKTMzMxUWFhZjmQoVKqiePXsa7u/atUvZ2dmpZcuWKaWUGjZsmCpcuHCU/e7cuaMAde7cOaWUUq1bt1ZAlNvBgwcN++h0OhUcHBzjc1OnTh3Vt2/fGGON0L9/f1W2bNlYyzx79kzVrl1bWVhYqCxZsqiVK1eqzJkzq2nTphnKfHhfKaVGjhyp8uXL99EYzp8/rzJlyqSePHkSbZ0ppdTOnTtVnjx51OXLlyM9V0op5ePjowB1//59w7aLFy8qQN26dSvG89asWVO1bds21thiiqd169aqXr16Sqn/6u/DW4UKFZRS+rqKeN3dvn071vPF5sP35Pvi8x1XWhDEN+Xdu3f47tvHk61b0Xp7k+bOHQq8e0cFYCuw+99y50xNeQk8dnFBV6wYTjVr4lynDs4ODoTfv09RV9eUvWy9RoNV+fJkL18egoMJXb+e59OmcSY0FO3ly2zatInrmzax0NKS1/XqUWb2bGxTp07uqIUQX7igoCBsbGyS5dxv377FOp7dNGMSEhICEGkeeWNjY8zMzDh27BgdOnSIdr/Xr19jZ2eHiUncvl6tWbOGTp06sWLFCurVqxevGGfMmMH48eMN98ePH8/q1asN3Unj4ujRozRv3vyj5f7880+qVavG999/z+HDh8mYMSNdu3alY8eOhjJt2rThwYMHHDhwADMzM3r06MHz589jPe6jR4/Yvn07JUuWjLVcUFAQTZs2Zfbs2aRPnz7aMs+ePaNjx45s2bIFKyurKI/nzp0bJycnFi1axKBBg9BqtSxatIj8+fOTOXPmGM/9+vVr8ubNG2t8ceHi4sKTJ08M958+fYqXlxfly5c3bMucOTNp06bl6NGjZMuWLbrDJJ1PTlG+UtKC8PUICwtT58+eVQsXLlQdO3ZUdfPmVfdiaBl4p9GozYUKqTlz5igfHx8VEhysVDS/uHwLdXXx4kXVtWtXNfm9loX7RkZqe926yv/58+QOL86+hbr6WkhdpRwfa0F4+/ZttL+SJsXt7du3n3RNRPPrb2hoqMqcObP6/vvv1atXr1RISIgaN26cAlTVqlWjPc4///yjXF1d1eDBg2M9X0QLwpw5c5S9vb06cOBApMeHDRumjIyMlLW1daSblZVVlF/FI2zcuFGZm5uro0ePRtoeWwuCn5+fAtSRI0dijVcppczNzZW5ubkaOHCgOnv2rJo/f76ysLAwtHpE/PJ94sQJwz5Xr15VQJQWBDMzM2Vtba0sLCwUoEqWLKn8/PxiPX+nTp1U+/btDfc/rDOdTqeqV6+uRo0apZSK2toSwdfXV2XPnl0ZGRkpIyMjlSdPHnXv3r0Yz7t+/XplZmYWqSUpOoCysLCIUmcmJiaGFoT3vXv3TpUsWVLVrl3b8F6KqCt3d3c1fPjwWM8XG2lBEOI9Op2OG1evcmvrVoL27cPW15ds//zDUaX46d8y5kAGQAc8sLXFL2dOzMqWxaVhQ2xLl6a+qWnyXcAXpGDBgsyZM4fArl05NWgQWXbswEWrxeXPP7mfLh0Ha9Sg3O+/kzpDhuQOVQjxhbGysuLt27fJdu6EYmpqysaNG2nfvj2Ojo4YGxvj5eVFjRo1oi3/5s0batWqRb58+Rg2bNhHj79x40aePXvGsWPHKFGiRJTHc+fOzZ9//hlp26NHj6hYsWKUsufOnaNVq1bMmTOHsmXLxu0C0beoQ+RWkqNHj0a6xgULFtC8eXN0Oh3FihVj7NixALi7u3P58mXmzZtHq1atuHr1KiYmJhQrVsywb548eaIdo9CvXz/atGmDUooHDx4waNAgatWqxZEjR6KdvefPP//kwIEDnDt3LsZrmTVrFm/evGHgwIGxXm+7du0oU6YMq1evRqvVMnnyZGrWrImPj0+UlcAPHTpEmzZtWLhwIfnz54/xuBGmTZuGl5dXpG39+/ePdgKQ9u3bExAQwN69e6P0RrC0tCQoKOij50tskiCIFCcsLIzr169z4cIFLpw9S76NG3F9+JBiWi0fNqwGGRlRuWJFihcvTvHixXlpZka6ChXIbGdHzA2KAsA6f35KbN2K9u1bznTtiuvq1biGh+O6cyeXMmViYu/e9OvfHyen5B6OLYT4Umg0mgTr5pPcihYtyvnz53n9+jWhoaGkSZOGkiVLRvoSDPrBr9WrV8fGxobNmzdjGocfm9zc3Dh79ixLliyhePHiUQbempmZkSNHjkjbouu29PTpU+rWrUv79u1p3759vK4vderUaDSaSDMIFStWLNKsPunSpQMgQ4YM5MuXL9L+efPmZePGjYB+UDfEbUVtJycnw7XlzJmT6dOnU7p0aQ4ePBjlCzbAgQMHoh0Q3bBhQ8qVK8ehQ4c4cOAAJ06cwNzcPFKZYsWK0bx5c5YtW8Yff/zB3bt38fb2Nnwp/+OPP0iVKhVbt27lhx9+MOx3+PBh6tSpw9SpU2nVqtVHrwkgffr0UerM1tYWf3//SNtGjx7N7t27OXXqFLa2tlGO8+rVqy9ivSJJEMQX7Z9nz7j111+8OHyYkAsXsLhzh6f+/nTU6Qxl7gBZ/v1/kJERDzJmJKRoURxr1KBwvXrs//cDTnwaYxsbii5fjm7ePC789BPOK1awNTyciZMnM/+33xg0aBA9evSI8uuLEEJ8Dezt7QG4efMmp0+fZtSoUYbH3rx5Q7Vq1TA3N+fPP/+M9Gt8bLJnz86UKVOoWLEixsbGzJ49O95xBQcHU69ePfLkycPUqVPjvb+ZmRn58uXjypUrVK1aFdD/ev3hl1yAMmXKcP369Ujbbty4Yei7nzdvXsLDwzl9+rShReT69etRvhxHJ6LVIKJF40MDBgyIMuajYMGCTJs2zTCz0MyZMxk9erTh8cePH1OtWjXWrl1rGN8QFBSEkZFRpCQm4r7uve8Uhw4donbt2kyYMIFOnTp9NP742LhxIyNHjmTXrl1kz549yuPBwcHcvn0bd3f3BD3vp5AEQXwRXvv7c+36dXx9ffH19aXMxo3kevKEXOHhlPqg7D9ALxsbChUqROHChXn85g0mWbKQ/rvvsHJzI/cXsMDI18jI2prCixejZs+m2M6duI8dy7lz59g+YAAlhg/n7fDh1OrXL2UP3hZCfBPevn3LrVu3DPfv3LnD+fPncXR0xNXVFYD169eTJk0aXF1duXTpEj179qR+/fqGL9MBAQFUrVqVoKAgVq5cyZs3b3jz5g0AadKk+ehiV7ly5eLgwYNUrFgRExOTeC+c1rlzZx48eMD+/ft58eKFYbujoyNmZmZxOka1atU4duzYRxcy69WrFx4eHowdO5bGjRtz6tQpfvvtN3777TdA3yWqevXqdOzYkd9++w0TExN+/vnnaH84CggI4OnTp4YuRr/88gtOTk54eHhEe+706dNHOzDZ1dWVrFmzGv7/voiB8tmzZydTpkwAVKlShX79+tGtWzd++ukndDod48ePx8TEhEqVKgH65KBWrVr07NmThg0b8vTpU0CfTDk6Osb6HH2Mr68vrVq1on///uTPnz/aY588eRJzc3NKly79WedKEJ88CuIrJYOUE49Wq1UPb9xQJ3//Xe1u315tL1FC7U+XTl0yMVE3Pxhs9td7A4iDNBp1095enS9YUPk2baqezJ6ttLFMIZfY1/At1FVcaLVatXz5cuXz72DmMFCr06RRR6KZ6i05SF2lHFJXKcfHBimnFAcPHox2oHPr1q0NZWbMmKEyZcqkTE1Nlaurq/r1119VSEjIR48BqDt37sR47g+nOb1y5YpKmzat6t27t1Iq7tOcZs6c+bOnOb169aqytLRU/v7+H33Otm3bpgoUKKDMzc1Vnjx51G+//Rbp8SdPnqhatWopc3Nz5erqqpYvXx7tNKfvx5omTRpVs2bNaAdex4YYphWNENMg5T179qgyZcooe3t7lSpVKlW5cmXl7e1teDymqWMjpiKNbzzvT3O6ZMmSj05z2r59e9WpU6c4PAMxS6hByhql/u04JgB9c6G9vb1hqrKkoNPpuH//Pq4pfepMIDw8nMdXrvD81CleXbjAAWtrbt68yc2bNxl65QqNYlmtN3e6dLgWLEjBggWpamRE9gwZcK5aFev8+eELeV6+prpKKMG+vtxv0oRcV64A8ApYX7Ag1TZvJks0TahJReoq5ZC6Sjk+rKvg4GDu3LlD1qxZ49y9RiQdpRShoaGYmZnFOD6gcePGuLu7xzrAVyS+58+fkzdvXnx8fD5ritPY3pPx+Y77VXYxmjt3LpMmTeLJkyfkz5+f6dOnf3SVQBE3gW/f8uDhQx48eMCDBw+w2rMHx0uXsHz+nNSvX+McFoYrENHY1wAI/Pf///z77xsjIx7b2/M2Y0bIkwfbEiXIUKkS193dQboHpTgWBQqQ6/Jl/DdtIrBTJzK+fEnnS5c4kSsXe7p3p/XEiVEGjgkhhPgyTJo0KcqMSSLp3blzhxkzZhi6TSW3ry5BWLt2LT///DNz586lTJkyLFiwgBo1anDlypUofdSEnjY8HD8/P/55+ZJnz54R4u0Nly4R9vgxmhcvMPHzw/LNG5yCgsik01GM/770LwB+iOaY/xgb88LGht716+NUpAg5c+Ykj4MDYVmzYpcuHXZxmOlApCwODRrgUK8eT0eMwHbsWEpptSyYOZOpf/3FnDlz8PT0TO4QhRBCfCBz5sz89NNPHy8oElWJEiVwc3NL7jAMvroEYerUqbRv394w4n369On89ddfzJs3j3HjxiVzdIlDFxrK22fPCHz2jHcvXvDuxQtCX73igasrfgEB+Pv7k+7ECdLevInxmzeYBAZiERiITXAw9mFhpNLpyI2+awjAHKBrLOfLZ2VFYJYsuLi4EBYezvGQEEyyZ8emQAGcihXT32xscAJGJvrViy+KsTHpR45EdezIxZ492XnsGM+vX8fLy4u2jRoxZuZMMsj6CUIIIcQX7atKEEJDQzlz5gwDBgyItL1q1aocP3482n1CQkIMS6oDhhkIdDpdpGmvElPEuUaOHInLH3/g9vIlGp0OI50OI6UM/5potTTKmBH/sDBCQkIY6+9Pi9BQzAG7f2/vq8p/3XpmE/0v/RFSA1p7e9KkSUMgcD4ggDAHB3ROThinT49ZpkzY5M9Pajc3ThQqBB+Z5zmpnrukFlFXX+v1JZiMGSmwYQNX/f0ZMmQIq+bOZfiGDfy5dSua8eNp16NHovc1l7pKOaSuUo4P60qn06GUMtzEl0vqJ+X4nLqKeC9G95kan8/YrypB+Oeff9BqtYaFPSKkS5fOMJ3Uh8aNG8eIESOibH/w4EG0C1gkBqUUfn5+HD9+nNY3b1I0lrKP/vc/wy/94ehXB+a9+2/RrwXwztgY95w5CU2TBjs7O8Jev2bv69fo7OzA3h5NmjSYpk+PubMz1pkzsyNHDkzjMI+9H+D35MmnXmqKF1FXGo0mTgvCCP2qmR3MzXGdNo3OYWHc7dOHnxcs4Lu5c6OdBzqhSF2lHFJXKceHdaXVatFqtYSFhckA8y9UeHh4cocg4igh6iosLAytVsuTJ0+iTLUbEBAQ5+N8VQlChA//wCilYvyjM3DgQHr37m24/+bNG1xcXHBxcUnSWYyUUvTr14+wYsU45ueHxtQUjYmJ4V8jU1OMrazYUrQoZjY2mJubYx0UxH2lMHdwwCZDBizs7LAzMjK0JOxOkui/LRF15eLiIn8M48F18mTCq1QhqHlzsvj5MfvGDZZWrcq5AQPoPmRInOfsjg+pq5RD6irl+LCugoODuXv3LqamponyPhYJQ+om5fjcutLpdBgbG5MhQ4ZoZzGKq68qQXBycsLY2DhKa8Hz58+jtCpEMDc3j3aGFSMjoyT9Q2VkZISnpydGVaok2TnFp4l4bcgXmfgxqlEDu/v3efPTT9gsXUobnY4nY8fSf+VKmq9fb1h9M0HPKXWVYkhdpRzv11XESrTS+vNler+ritTPly2h6irivRjd52l8Pl+/qk9iMzMzihYtyt69eyNt37t3b4wr9AkhkpCNDXZLlqA5coQ3GTKQASh9/z6lSpWiT58+BAUFJXeEQgghxDfvq0oQAHr37s3vv//O4sWLuXr1Kr169eL+/ft06dIluUMTQvxLU64cdrdvE9S3L0cbNUIpxdSpUylauDDHjh1L7vCEEEKIb9pXlyA0adKE6dOnM3LkSNzc3Dhy5Ag7d+4kc+bMyR2aEOJ9lpZYTZrEnPXr2bFjB84ZMjDi1i1ulCvHgK5dpTVBCCH+NXz48GSdI3/IkCF06tQpUY6t0WjYsmVLohz7azN79mzq1q2bJOf66hIEgK5du3L37l1CQkI4c+YM5cuXT+6QhBCxqFmzJtfWrqUR0A7oPG8e7XLm5MiRI8kdmhDiK3TkyBHq1KmDs7NzjF9Q3x9b8f5t0qRJkcp5e3tTuXJlrK2tcXBwoGLFirx79y5OcYwbNw6NRsPPP//8Wddz6NAhNBoN/v7+UR7LlSsX06dP/+RjP3v2jBkzZjBo0KCPlr169Sp169bF3t4eW1tbSpUqxf379+N1vvefaxMTE1xdXendu3ekKeljExISgpubGxqNhvPnz0db5uXLl2TKlCnKc3b9+nUqVapEunTpsLCwIFu2bPz666+EhYVF2v/w4cMULVrUUGb+/PmxxnT37t0Y46lYsWKc679jx474+PgkSUv7V5kgCCFSHtty5TA6fJh3adOSFfjj8WNOVKhA727dpDVBCJGgAgMDKVy4MLNnz46xzJMnTyLdFi9ejEajoWHDhoYy3t7eVK9enapVq3Lq1Cl8fHzo3r17nAaD+vj48Ntvv1GoUKEEuabEsmjRIkqXLk2WLFliLXf79m3Kli1Lnjx5OHToEBcuXGDIkCFRZtKJiyVLlvDkyRPu3LnD3LlzWbFiBaNHj47Tvr/88gvOzs6xlmnfvn20z7upqSmtWrViz549XL9+nenTp7Nw4UKGDRtmKHPnzh1q1qxJuXLlOHfuHIMGDaJHjx5s3Lgxfhf5CczNzWnWrBmzZs1K9HNJgiCE+HKUL4/lzZuENm+OEfAL0GbuXBrly8eJEyeSOzohRFwFBsZ8Cw6Oe9kPf4mPqVw81ahRg9GjR9OgQYMYy6RPnz7SbevWrVSqVIls2bIZyvTq1YsePXowYMAA8ufPT86cOWnUqFG0syO+7+3btzRv3pyFCxeSKlWqeMd/584dcuTIwY8//hivxa+WLl0abavI8OHDY9xnzZo1cerWMnjwYGrWrMnEiRNxd3cnW7Zs1KpVi7Rp0xrK3Lx5k/Lly2NhYUG+fPmiTCoTwcHBgfTp0+Pi4kLt2rWpW7cuZ8+e/WgMu3btYs+ePUyePDnGMvPmzcPf35++fftGeSxbtmy0bduWwoULkzlzZurWrUvz5s05evSoocz8+fNxdXVl+vTp5M2blw4dOtCuXbtYzxlXhw8fjjIzmEajoU2bNoYydevWZcuWLXFupfpUkiAIIb4sdnaYrVwJW7YQYm9PIWD6vXuU8/Bg8ODBhIaGJneEQoiPsbGJ+fbeL/AApE0bc9kaNSKXzZIl+nKJ7NmzZ+zYsYP27dsbtj1//pyTJ0+SNm1aPDw8SJcuHRUqVIhT949u3bpRq1YtvLy84h2Lr68vZcqU4fvvv2fevHnxmrqySZMmkVpFVq9ejYmJCWXKlIm2vJ+fH76+vhQrVizW4+p0Onbs2EGuXLmoVq0aadOmpWTJkpG6bul0Oho0aICxsTEnTpxg/vz59O/f/6Mx37hxg4MHD1KyZMlYyz179oyOHTuyYsUKrKysoi1z5coVRo4cyfLly+P0vN26dYvdu3dToUIFwzZvb2+qVq0aqVy1atU4ffp0lK5I8VW6dGkeP35sqJ8DBw5gYWERqat8sWLFCAsL49SpU591ro+RBEEI8WWqVw/za9cI8/Jivacn4UoxduxYSpQowcWLF5M7OiHEN2TZsmXY2tpGanH43//+B+gHEHfs2JHdu3dTpEgRPD09uXnzZozHWrNmDWfPnmXcuHHxjsPb25sKFSrQu3fvaPfPlCkTNjY2hputrS0PHjwwPG5paWloEQkMDKR79+6MHTuWKjGswXTv3j2UUh/tsvP8+XPevn3L+PHjqV69Onv27OG7776jQYMGHD58GIB9+/Zx9epVVqxYgZubG+XLl2fs2LHRHq9p06bY2NhgYWFB7ty5yZ8/PwMHDozx/Eop2rRpQ5cuXWJMZkJCQmjatCmTJk3C1dU11uvx8PDAwsKCnDlzUq5cOUaOHGl47OnTp1HW1kqXLh3h4eH8888/Hz3u+/VjY2MTqXXCzMzMUD+mpqZ07NiRdu3a0a5dO0OZiLEud+/ejfVcn+urWihNCPGVSZ8e0717GQzk3rCBLl26kOPCBXoVKUKV0aPp169flKXkhRBfgLdvY37sw/fs8+cxl/3wV95E/lIUk8WLF9O8efNI/ekjuvZ07tyZtm3bAuDu7s7+/ftZvHhxtF/gHzx4QM+ePdmzZ0+8++bfv38fLy8vRo8eTa9evaItc/ToUWxtbQ33lVJUqlQpSrnXr19Tu3ZtatSoQb9+/WI8Z0Q3lvdjXbVqFZ07dzbc37VrF9mzZwegXr16htjc3Nw4fvw48+fPp0KFCly9ehVXV1cyZcpk2Ld06dLRnnfatGl4eXmh1Wq5desWvXv3pmXLlqxZsyba8rNmzeLNmzexJhEDBw4kb968tGjRIsYyEdauXUtAQAAXLlygX79+TJ48mV9++cXw+IcLmUUscvaxBc7Wrl1L3rx5I21r3rx5lHJhYWE0bNgQV1dXZsyYEeVxS0vLRB+bJwmCECJFaNSoERUzZcK6bFnMtFrGDhxIxS1bWLxiBTlz5kzu8IQQ77O2Tv6yCeTo0aNcv36dtWvXRtqeIUMGAPLlyxdpe968eWOcuefMmTM8f/6cokWLGrZptVqOHDnC7NmzCQkJifFHjzRp0uDs7MyaNWto3749dnZ2UcpkzZoVBwcHw32lVJTjabVamjRpgp2dHQsXLoz5wgEnJydA39UoTZo0gL4P/PvdfTJmzIixsTEmJibRPhcRXa7eXyk4QkxfqNOnT0+OHDkAyJ07NwEBATRt2pTRo0cbtr/vwIEDnDhxIsrYj2LFitG8eXOWLVvGgQMHuHTpEhs2bIgUj5OTE4MHD2bEiBGG/VxcXAB93Wq1Wjp16kSfPn0wNjYmffr0PH36NNJ5nj9/jomJCalTp472et4/7ofxW1paRin3448/cv/+fXx8fDAxifpV/dWrV4b6SCySIAghUgynAgVQLVuiWbqUIUDVkydpVKgQnadM4ccff/ys5emFECI6ixYtomjRohQuXDjS9ixZsuDs7Mz169cjbb9x4wY1Phw78S9PT08uXboUaVvbtm3JkycP/fv3j7VF1NLSku3bt1OzZk2qVavGnj17IrUWxFWvXr24dOkSPj4+H23FyJ49O3Z2dly5coVcuXIBYGtrG+15ixcvHu1zEbEOVb58+bh//z6PHz82dFny9vaOU8wRz0tMA3NnzpwZaZajx48fU61aNdauXWtIZjZu3Bhpfx8fH9q1a8fRo0cNLSDRUUoRFhZmSChKly7Ntm3bIpXZs2cPxYoVw9TUNE7XE5upU6eydu1avL29o004bt++TXBwMO7u7p99rthIgiCESDlsbNAsWQLVqqHr3JmSb97gHRxMn27dqLZ5M4sWLzb88iOEEDF5+/Ytt27dMty/c+cO58+fx9HRMVL/9Ddv3rB+/XqmTJkS5RgajYZ+/foxbNgwChcujJubG8uWLePatWuGX6lBnxR89913dO/eHVtbWwoUKBDpONbW1qROnTrK9uhYW1uzY8cOatSoQY0aNdi9ezc28RikvWTJEubOncvmzZsxMjIy/BIe0R/+Q0ZGRnh5eXHs2DHq168f67H79etHkyZNKF++PJUqVWL37t1s27aNQ4cOAeDl5UXu3Llp1aoVU6ZM4c2bNwwePDjaY/n7+/P06VN0Oh03b95k5MiR5MqVK0r3nAgfjimIuJbs2bMbujR9mAREjBfImzevodVl1apVmJqaUrBgQczNzTlz5gwDBw6kSZMmhl/yu3TpwuzZs+nduzcdO3bE29ubRYsWsXr16lifn7jYv38//fv3Z86cOTg5ORnqx9LSEnt7e0DfopUtW7ZYk5qEIIOUhRApzw8/YOTri6pcGStgHvDTvn0ULlCAFStWRNuULYQQEU6fPo27u7vhV9jevXvj7u7O0KFDI5Vbs2YNSimaNm0a7XF+/vlnBg4cSK9evShcuDD79+9n7969kb683b59+6ODV+PDxsaGXbt2oZSiZs2aBMZjmtfDhw+j1WqpW7cuGTJkMNxim6KzU6dOrFmz5qPTqX733XfMnz+fiRMnUrBgQX7//Xc2btxI2bJlAX2ysXnzZkJCQihRogQdOnRgzJgx0R6rbdu2ZMiQgUyZMtG0aVPy58/Prl27ou1uk5BMTEyYMGECJUqUoFChQgwfPpxu3brx+++/G8pkzZqVnTt3cujQIdzc3Bg1ahQzZ86MtD7Gpzp+/DharZYuXbpEqp+ePXsayqxevZqOHTt+9rk+RqPkL2kkb968wd7entevX0fbvy8x6HQ67t+/j6ura7ymKxNJT+rqC6PTwcyZ6Pr3Z7mTE20fPwb0f6jmzp1LcHCw1FUKIO+rlOPDugoODubOnTtkzZr1kxbEEolLKUVoaChmZmaf3AVTKUWpUqX4+eefY0yUxOeLS135+vri6enJjRs3DC0KH4rtPRmf77jySSyESLmMjODnnzG6cIEWN28yZswYTE1N8dm8mdIFCvDXX38ld4RCCJGiaTQafvvtN8LDw5M7lG/e48ePWb58eYzJQUKSMQhCiJQvTx5MgEGDBlGzShWMK1TA6uVLmnXpwrFjx5g1a1akmT2EEELEXeHChaMM0hZJ78MF2hKTtCAIIb4qbo6OFHByIjvwN5B55UoKFyjA3r17kzs0IYQQIkWQBEEI8XXJnh3NxYuoxo0xAUYDKx89omPVqnTt2jVeA/qEEEKIb5EkCEKIr4+DA+qPP3gxZQrK1pZywAXAf948w+qeQoiEI/OdCPFlSKj3oiQIQoivk0ZDYIMGqHPnwMMDe6C/qSl3bt2iXLlyDBgwgJCQkOSOUogULWIBq9DQ0GSORAgBEBQUBPDZi7bJIGUhxNcta1Y4fBjGjydrjRo0nzmT5cuXM2HCBHbu3MmKFStk8J0Qn8jExAQrKytevHiBqampTFP7hYlYBVin08lK81+4z60rpRRBQUE8f/4cBweHWFfljgtJEIQQXz8TE/j1V+yAZcuWUb9+ff7XogUBly5RqlgxhowYwS+//JLoi/AI8bXRaDRkyJCBO3fucO/eveQOR3xAKYVWq8XY2FgShC9cQtWVg4MD6dOn/+x45K+hEOKb812ePKh379AAVcLDaTF4MFu2bGHZsmXkzZs3ucMTIkUxMzMjZ86c0s3oC6TT6Xjy5AkZMmSQ1p0vXELUlamp6We3HESQBEEI8e3JmxfNqlWoLl0o8+YNF4BuPj64u7kxavRoevfunWAfskJ8C4yMjGQl5S+QTqfD2NgYCwsLSRC+cF9aXSV/BEIIkRyaNkVz4QKUKYMdsAJYHhrKuF9+oWzZsly/fj25IxRCCCGShSQIQohvV5YscOgQjB6NMjGhMXDCyAifEydwc3Nj6tSpaLXaZA5SCCGESFqSIAghvm0mJjB4MBpvb8iVi9QTJlC5ShWCg4Pp06cP5cuX58aNG8kdpRBCCJFkJEEQQgiAYsXgwgVS9+nDX3/9xYIFC/CytCTw+HEKFy4srQlCCCG+GZIgCCFEBAsL0GjQaDR0+v57dtnb46PR0CM4mH59+lCuXDkZmyCEEOKrJwmCEEJER6fDpGRJTJViAnDU2Jin3t64ubkxefJkaU0QQgjx1ZIEQQghopM6NWzeDIsXg40NHlotvsbGNAsOpl+/fpQtW5arV68md5RCCCFEgpMEQQghYqLRQNu2cPEilCuHlVbLImC7iQnn/p3paNy4cYSHhyd3pEIIIUSCkQRBCCE+JmtWOHgQJkwAU1Mq1ahB5erVCQ0NZdCgQZQqVYqLFy8md5RCCCFEgpAEQQgh4sLYGH75BXx8sFq6lB07d7Js2TKy2Nlx48wZihYtyvDhwwkNDU3uSIUQQojPIgmCEELER+HC4OiIRqOhVcuWXClblptWVpQOD2fEiBEUK1aM06dPJ3eUQgghxCeTBEEIIT7VixdYXrlCuqAgDms0zLK05PqlS5QsWZK+ffsSGBiY3BEKIYQQ8SYJghBCfKq0aeHCBWjXDo1SdH/3jlv29hTU6ZgyZQoFCxZk3759yR2lEEIIES+SIAghxOews4NFi2DLFkiTBpfXrzlrYsIEe3vu37lDlSpVaNeuHX5+fskdqRBCCBEnkiAIIURCqFcPfH3hu+8wCg+nr50dP3fsiEajYcmSJeTNm5d169ahlEruSIUQQohYSYIghBAJJW1a2LgRli/HaPlyJv/2G0ePHiVP7tw8f/aMJk2aULduXR48eJDckQohhBAxkgRBCCESkkYDLVtCxYoAlClThovdu3MrSxZymJiwfft28uXLx8yZM9FqtckbqxBCCBENSRCEECIxvXuH6ejRZLt7l2tmZkzKmpXAt2/p2bMnHh4essCaEEKIL44kCEIIkZgsLeHYMShbFuOgIPreucPDnDlxs7Hh1KlTFC1alAEDBhAUFJTckQohhBCAJAhCCJH4cuSAw4dh1iywtsb55k3OhIezuGBBdOHhTJgwgQIFCrB79+7kjlQIIYSQBEEIIZKEkRF07w6XLkHlyhgFB9P28mX2TZ9OpkyZuHPnDjVq1OCHH37gyZMnyR2tEEKIb5gkCEIIkZSyZoV9++C332D4cCr17MmVK1fo1asXRkZGrF27lrx58zJv3jx0Ol1yRyuEEOIbJAmCEEIkNY0GOnaEIUMAsLW1ZWrXrjxs25aSRYvy+vVrunbtqp8BSQYxCyGESGKSIAghRHILC4PvviPDokV429vz29ix2NracuLECYoUKUK/fv0IDAxM7iiFEEJ8IyRBEEKI5GZqCsOGgbU1mgMH6LhgAbfWr6dhw4ZotVomT55Mvnz52LZtW3JHKoQQ4hsgCYIQQnwJGjWCEycge3a4d4+09euz4bvv2L59O5kzZ+b+/fvUrVuXBg0ayErMQgghEpUkCEII8aUoUAB8fKBGDQgOhhYtqDVjBpdPnqR///6YmJiwefNm8uXLx9SpUwkLC0vuiIUQQnyFJEEQQogvSapUsG2bfgCziQmEh2OdLh3jx4/n7NmzeHh48PbtW/r06UORIkU4evRockcshBDiKyMJghBCfGmMjWHkSLhxA+bMMWwumD49x7JlY/2oUaROnRpfX1/Kly9P69atefbsWTIGLIQQ4muSYhKEMWPG4OHhgZWVFQ4ODtGWuX//PnXq1MHa2honJyd69OhBaGho0gYqhBAJJWtWyJv3v/sTJ6JZuZJGw4bxsE4derRpg0ajYfny5eTOnZs5c+ag1WqTL14hhBBfhRSTIISGhvL999/z448/Rvu4VqulVq1aBAYGcuzYMdasWcPGjRvp06dPEkcqhBCJpGVLqFcPdDosli5lxt69XJs4kSJFivD69Wu6d+9OiRIl8Pb2Tu5IhRBCpGApJkEYMWIEvXr1omDBgtE+vmfPHq5cucLKlStxd3fHy8uLKVOmsHDhQt68eZPE0QohRCIoVAi2bIEDByBHDnj0iFz9+uGTLRuLx43D3t7eME6hXbt2PH/+PLkjFkIIkQKZJHcACcXb25sCBQrg7Oxs2FatWjVCQkI4c+YMlSpVina/kJAQQkJCDPcjkgmdTodOp0vcoP8Vca6kOp/4dFJXKcdXXVcVKsD582hGjoQpUzDasIE2qVNT49o1Bg4cyNKlS1myZAmbN29m5MiRdO7cGROTL/fj/quuq6+M1FXKIvWVciRFXcXn2F/uX4x4evr0KenSpYu0LVWqVJiZmfH06dMY9xs3bhwjRoyIsv3BgwfY2tomeJzRUUrh5+eHRqNBo9EkyTnFp5G6Sjm+ibr68UfMypcn1cSJvOjcGV1wMMOGDaNO7doMHTaMy5cv06NHD+bNm8fIkSMpVqxYckccrW+irr4SUlcpi9RXypEUdRUQEBDnssmaIAwfPjzaL+fv8/HxifMfteieUKVUrE/0wIED6d27t+H+mzdvcHFxwcXFBTs7uzid93PpdDqUUri4uGBklGJ6fX2TpK5Sjm+mrlxdoUYNMkXcV4rM/fpRr2lTfrO1ZfDw4Vy9epXvv/+eFi1aMGHCBNKnT5+cEUfxzdTVV0DqKmWR+ko5kqKu4tPlPlkThO7du/PDDz/EWiZLlixxOlb69Ok5efJkpG1+fn6EhYVFaVl4n7m5Oebm5lG2GxkZJembKeJ88gb+8kldpRzfZF3t3w8bNmC8YQM/FipE0zVr6Ld+PYsWLWLlypVs3bqVESNG0L17d0xNTZM7WoNvsq5SKKmrlEXqK+VI7LqKz3GT9dXi5OREnjx5Yr1ZWFjE6VilS5fG19eXJ0+eGLbt2bMHc3NzihYtmliXIIQQX5bKlWHZMkidGi5exKF6dRZaW3Nq/36KFy9OQEAAvXv3xt3dnUOHDiV3tEIIIb5AKSadvH//PufPn+f+/ftotVrOnz/P+fPnefv2LQBVq1YlX758tGzZknPnzrF//3769u1Lx44dk6yrkBBCJDuNBlq1gqtX9dOiKgUzZlCsdWtO/PorCxcuJHXq1Fy+fJlKlSrRtGlTHj58mNxRCyGE+IKkmARh6NChuLu7M2zYMN6+fYu7uzvu7u6cPn0aAGNjY3bs2IGFhQVlypShcePG1K9fn8mTJydz5EIIkQzSpIHly+Gvv/QLrj14gFHv3nRo1YobN27QtWtXjIyMWLNmDblz52bMmDEEBwcnd9RCCCG+ACkmQVi6dClKqSi3ihUrGsq4urqyfft2goKCePnyJbNmzYp2fIEQQnwzqlYFX1/45ReYPx/MzHB0dGTOrFmcPnWKMmXKEBQUxK+//kq+fPnYvHkzSqnkjloIIUQySjEJghBCiE9kZQUTJoCX13/bZs/GvVcvjv72G6tWrSJjxozcuXOHBg0aUKVKFS5fvpx88QohhEhWkiAIIcS3JiQExo2Do0fRuLnR7MYNrp0/z+DBgzE3N2f//v0ULlyYHj168OrVq+SOVgghRBKTBEEIIb415uZw4gTUrAlhYTBiBDZlyjDay4srV65Qv359tFots2bNImfOnMydO5fw8PDkjloIIUQSkQRBCCG+RZkzw/btsHYtpE8PN25ApUpkGzmSzQsXsnfvXvLnz8+rV6/o1q0b7u7u7N+/P7mjFkIIkQQkQRBCiG+VRgONG+unRO3aVX9/5Up4/BgvLy/Onz/P7NmzcXR0xNfXFy8vL7777jtu376d3JELIYRIRJIgCCHEt87BAebMgePHYfp0KFQIABMTE7o1bcrNmzf56aefMDY2ZsuWLeTLl48BAwYQEBCQrGELIYRIHJIgCCGE0CtVCrp3/+/+xYvg4oLjtGnMnDCBixcvUrVqVUJDQ5kwYQK5cuVi6dKl6HS65ItZCCFEgpMEQQghRPTWrIGgIBg9GgoUIN+DB+zevZtt27aRI0cOnj59Stu2bSlZsiTHjx9P7miFEEIkEEkQhBBCRG/MGNi4ETJmhP/9D6pXR9O0KbWLFMHX15dJkyZha2vL6dOnKVOmDM2aNePBgwfJHbUQQojPJAmCEEKI6Gk00KCBfhBzr15gZKSf9ShvXsxXrqRv377cvHmTDh06oNFoWL16Nblz52bo0KG8ffs2uaMXQgjxiSRBEEIIETtbW5g6FU6fhhIl4M0b+DcBSJcuHQsXLuT06dOUK1eOd+/eMWrUKBmfIIQQKZgkCEIIIeLG3V0/09GqVdCt23/br1yhSM6cHD58mA0bNpA1a1aePHlC27ZtKV68OEeOHEm+mIUQQsSbJAhCCCHiztgYmjUDExP9/eBgqFcP8uVDs2ULDRs04OrVq0ycOBE7OzvOnj1LhQoVaNiwoayfIIQQKYQkCEIIIT7dvXug08HDh/rxCnXrYv7kCf369ePmzZt06dIFIyMjNm3aRN68eenTpw9+fn7JHbUQQohYSIIghBDi0+XODb6+MGgQmJrC9u2QLx+MG0daBwfmzZvHhQsXqF69OmFhYUydOpUcOXIwc+ZMwsLCkjt6IYQQ0ZAEQQghxOextNRPiXrhAlSoAO/e6RMGNzd4+ZICBQqwa9cudu3aRf78+Xn16hU9e/Ykf/78bN26FaVUcl+BEEKI90iCIIQQImHkzQsHD8Ly5ZAmDWTNCo6OhoerV6/O+fPnWbBgAWnTpuXmzZvUr1+fKlWqcPny5WQMXAghxPskQRBCCJFwNBpo2RKuX4eFC/X3Af75BxYswESjoVOnTty8eZOBAwdibm7OwYMHqVOnDu3bt+fx48fJG78QQghJEIQQQiSCVKnA2fm/+/37Q5cuULo0nDmDnZ0dY8eO5fr16/zwww8opVi6dCm5cuVi1KhRBAUFJV/sQgjxjZMEQQghROIrUgTs7MDHR7/Y2k8/wevXZM6cmVWrVrFp0yZKly5NYGAgQ4cOJVeuXCxfvlwWWhNCiGQgCYIQQojE160bXLsGTZvqp0WdPVs/A9Iff4BSuLu7c/ToUdasWUPmzJl59OgRrVu3plixYhw8eDC5oxdCiG+KJAhCCCGSRoYM+oRg717IlQuePYPmzWHmTAA0Gg1NmjTh2rVrjB8/Hjs7O86dO0flypWpW7cu165dS+YLEEKIb4MkCEIIIZKWlxdcvAijRoGrK7RqFelhCwsL+vfvz61bt+jevTvGxsZs27aNAgUK0K1bN54/f55MgQshxLdBEgQhhBBJz9wcfv0VbtzQD2gGUEo/kHnfPgDSpEnDrFmzuHz5MvXq1UOr1TJ37lxy5MjBuHHjePfuXTJegBBCfL0kQRBCCJF8zM3/+/+GDbBgAVSpou969PQpALlz52bLli0cOnSIokWLEhAQwKBBg2QgsxBCJBJJEIQQQnwZqlXTz26k0ejHKuTODbNmQXg4ABUqVODUqVOsWrUKV1dXHj58aBjIfODAgWQOXgghvh6SIAghhPgy2NnpByyfOgVFi8KbN9CjBxQvDidOAGBkZESzZs24fv06EyZMMAxk9vT0pFatWly9ejWZL0IIIVI+SRCEEEJ8WYoVg5MnYe5ccHCA8+ehfXv99Kj/srCw4JdffuH27dv06NEDExMTdu7cScGCBenZsyd+fn7JFr4QQqR0kiAIIYT48hgbw48/wvXr0KaNvquR0b9/ssLDDcmCk5MTM2bM4MqVK4aBzDNnziRnzpzMnTuX8H+7JwkhhIg7SRCEEEJ8udKmhSVLoHLl/7ZNnw4eHnDunGFTzpw52bJlC3v37iV//vy8fPmSbt264e7uzr5/Z0USQggRN5IgCCGESDlCQmDqVH0XpGLFoGdP/ViFf3l5eXH+/HnmzJmDo6Mjvr6+VKlShTp16nDp0qVkDFwIIVIOSRCEEEKkHObm4OMDTZrouxnNnAl58sDatfp1FAATExO6du3KzZs36dGjB8bGxmzfvp3ChQvTunVr7t27l8wXIYQQXzZJEIQQQqQsGTPCmjWwZw/kzAlPnsAPP0DVqnD7tqGYo6MjM2bM4PLlyzRq1AilFMuXLydXrlz8/PPPvHjxIhkvQgghvlySIAghhEiZqlSBixdh5Eh9y8LhwxAaGqVY7ty5Wb9+PadOnaJy5cqEhoYyY8YMsmfPzsiRIwkMDEyG4IUQ4sslCYIQQoiUy8IChgyBy5dh0SLIm/e/x27ciFS0ePHi7Nu3jz179lCkSBECAgIYNmwYOXLkYOHChTLjkRBC/EsSBCGEEClf9uzQsuV/98+e1ScLTZrA48eGzRqNhipVquDj48Pq1avJmjUrT58+pVOnTri5ubFjxw7Uv2MZhBDiWyUJghBCiK/P8eP6f9et0w9injkTtFrDw0ZGRvzwww9cvXqVqVOnkipVKi5fvkzt2rXx9PTk7NmzyRS4EEIkP0kQhBBCfH26d4fTp6FECQgI0E+HWqKEfgak95ibm9OrVy9u375N3759MTMz4+DBgxQtWpSWLVvy4MGDZLoAIYRIPpIgCCGE+Dq5u+tbEubNAwcHfbejkiVh4MAoRVOlSsWkSZO4fv06zZs3B2DlypXkypWLQYMG8ea9tRaEEOJrJwmCEEKIr5exMXTpAteu6ccoKAWurjEWz5IlCytXrsTHx4fy5csTHBzMuHHjyJEjB3PnziUsLCwJgxdCiOQhCYIQQoivX7p0sHw5eHtDp07/bT9+HK5fj1K8WLFiHDp0iK1bt5IrVy5evHhBt27dKFSoENu2bZOBzEKIr5okCEIIIb4dpUrpWxUAgoKgWTMoVAiGDoV37yIV1Wg01K1bF19fX2bPno2TkxPXrl2jbt26VK5cmTNnziTDBQghROKTBEEIIcS3KSAA8uXTL642ahQULAh//RWlmKmpKd26dePWrVv0798fc3NzDh06RLFixWjZsiX3799PhuCFECLxSIIghBDi25QuHezYARs2gLMz3L4N1atHWTshgr29PePHj+f69eu0aNEC+G8g84ABA3j9+nVSX4EQQiQKSRCEEEJ8uzQaaNhQP4j555/ByOi/tRNiaBnInDkzK1as4PTp01SqVImQkBAmTJhA9uzZmTVrlgxkFkKkeJIgCCGEELa2MG3af2sneHnFOtsRQNGiRdm/fz/bt28nb968vHz5kh49epA/f342b94sA5mFECmWJAhCCCFEBHd3/UxHS5f+t+35c/j1VwgMjFJco9FQq1YtLl68yPz580mbNi03b96kQYMGlCtXjpMnTyZd7EIIkUAkQRBCCCHeZ2QEdnb/3e/dG8aMgQIFYNeuaHcxMTGhc+fO3Lp1iyFDhmBpacnff/9NqVKlaNKkCXfu3Emi4IUQ4vOliATh7t27tG/fnqxZs2JpaUn27NkZNmwYoaGhkcrdv3+fOnXqYG1tjZOTEz169IhSRgghhIiXH37Qdze6exdq1tTff/o02qK2traMHDmSmzdv0rZtWzQaDevWrSNv3rwMHjyYt2/fJm3sQgjxCVJEgnDt2jV0Oh0LFizg8uXLTJs2jfnz5zNo0CBDGa1WS61atQgMDOTYsWOsWbOGjRs30qdPn2SMXAghRIpXuzZcvgx9+uhbF9au1Q9iXrAAdLpod8mYMSOLFy/m3LlzVK5cmZCQEMaOHUuuXLlYvnw5uhj2E0KIL0GKSBCqV6/OkiVLqFq1KtmyZaNu3br07duXTZs2Gcrs2bOHK1eusHLlStzd3fHy8mLKlCksXLiQN2/eJGP0QgghUjwbG5g8WT+IuWhReP0aunSBqVNj3a1w4cLs27ePzZs3ky1bNp48eULr1q0pXbo0J06cSKLghRAifkySO4BP9fr1axwdHQ33vb29KVCgAM7OzoZt1apVIyQkhDNnzlCpUqVojxMSEkJISIjhfkQyodPpkuwXnohzyS9KXz6pq5RD6irlSFF1VbiwfhDznDlo5s9HdegQYyvC++rWrUvVqlWZMWMGY8eO5dSpU5QuXZqmTZsyevRosmTJkvixJ4AUVVdC6isFSYq6is+xU2SCcPv2bWbNmsWUKVMM254+fUq6dOkilUuVKhVmZmY8jaGvKMC4ceMYMWJElO0PHjzA1tY24YKOhVIKPz8/NBoNGo0mSc4pPo3UVcohdZVypMi6ql9f3/XI319/U4rUAwYQWK8ewR4eMe7WtGlTPD09mTx5Mhs2bGD16tVs3LiRVq1a0a1bNxwcHJLoAj5Niqyrb5jUV8qRFHUVEBAQ57LJmiAMHz482i/n7/Px8aFYsWKG+48fP6Z69ep8//33dOjQIVLZ6J5QpVSsT/TAgQPp3bu34f6bN29wcXHBxcUFu/dnsUhEOp0OpRQuLi4YGaWIXl/fLKmrlEPqKuX4Kupq1SqM1q3Ddt06VJs2qEmT4L1W7ve5urqyZs0azp49S//+/Tlw4AC///47GzduZNCgQXTt2hULC4skvoC4+Srq6hsi9ZVyJEVdxafLfbImCN27d+eHH36Itcz7za6PHz+mUqVKlC5dmt9++y1SufTp00eZb9rPz4+wsLAoLQvvMzc3x9zcPMp2IyOjJH0zRZxP3sBfPqmrlEPqKuVI8XVVrx507Qrz5qFZuhTNzp0wYwY0aaJfrTkaxYoVY9++fezevZtffvkFX19f+vXrx+zZsxkzZgxNmzb9Ip+PFF9X3xipr5QjsesqPsdN1leLk5MTefLkifUW8SvKo0ePqFixIkWKFGHJkiVRLrJ06dL4+vry5MkTw7Y9e/Zgbm5O0aJFk/S6hBBCfGPs7GDOHDh2DPLm1S+u1rSpvhvS/fsx7qbRaKhRowbnz59n8eLFODs7c+/ePVq0aEGpUqX4+++/k/AihBBCL0Wkk48fP6ZixYq4uLgwefJkXrx4wdOnTyONLahatSr58uWjZcuWnDt3jv3799O3b186duyYZF2FhBBCfOM8PODcORg+HMzMYOdO+P57UCrW3YyNjWnbti03b95kzJgx2NjY4OPjQ9myZWncuLEstCaESFIpIkHYs2cPt27d4sCBA2TKlIkMGTIYbhGMjY3ZsWMHFhYWlClThsaNG1O/fn0mT56cjJELIYT45pibw7BhcP48lCsH06bF2M3oQ1ZWVgwaNIibN2/SoUMHNBoN69evJ0+ePAwYMECm7RZCJIkUkSC0adMGpVS0t/e5urqyfft2goKCePnyJbNmzYp2fIEQQgiR6PLmhcOH9a0KEaZO1bcuvDe9dnTSp0/PwoULOXfuHJ6enoSGhjJhwgRy5MjBwoUL0Wq1iRu7EOKbliISBCGEECJFer/l4NEjGDwYRoyAIkX06yl8ROHChdm7dy9//vknuXLl4sWLF3Tq1IlixYpx5MiRRAxcCPEtkwRBCCGESArOzrBsGaRNC1euQJky0KMHvH0b624ajYY6derg6+vL9OnTsbe35/z581SoUIHGjRtz9+7dpIlfCPHNkARBCCGESAoaDTRurE8O2rTRD1yeNQvy54fduz+6u6mpKT179uTmzZt06dIFIyMjw/iEIUOGEBgYmPjXIIT4JkiCIIQQQiSl1KlhyRLYsweyZNFPg1qvHjx+HKfd06RJw7x58zh37hyVKlUiJCSE0aNHkzt3blauXIlOp0vc+IUQXz1JEIQQQojkUKUK+PrCzz/rBy47O8dr90KFCrF//342btxI1qxZefToES1btsTDwyPKwqFCCBEfkiAIIYQQycXaWj8N6sCB/23z8YHvvtMPav4IjUZDgwYNuHLlCuPGjcPGxoaTJ09SqlQpWrZsyaM4HEMIIT4kCYIQQgjxpVAKfvwRtmzRj01YsuSji6wBWFhYMGDAAG7cuEHbtm3RaDSsXLmSXLlyMWrUKN69e5f4sQshvhomcSnUoEGDeB94/vz5pE2bNt77CSGEEN8sjUY/01G7dnDqlP7fdevgt9/AxeWju2fIkIHFixfTrVs3evbsyd9//83QoUNZtGgRkydPpmHDhmjiuGibEOLbFacWhC1btmBmZoa9vX2cbjt27ODtR6ZtE0IIIUQ08ueHv/+GCRP0qzLv3q3ftnBhnFoTAIoWLcrRo0dZs2YNLi4u3Lt3j++//x5PT08uXbqUyBcghEjp4tSCADBz5sw4twhs2LDhkwMSQgghvnkmJvDLL1C3rr4VwdsbOnUCJyf9+IQ40Gg0NGnShDp16jBhwgQmTpzIwYMHcXNzo0uXLowcOZLUqVMn8oUIIVKiOLUgHDx4EEdHxzgfdNeuXWTMmPGTgxJCCCEEkCcPHD0KU6ZArVr66VDjycrKihEjRnDt2jUaNWqETqdj7ty55MqVizlz5hAeHp4IgQshUrI4JQgVKlTAxCTOjQ2ULVsWc3PzTw5KCCGEEP8yNobevWHbNjD698/227f6xdbu3YvzYTJnzsz69es5cOAABQsW5NWrV3Tv3h13d3cOHDiQOLELIVKkz5rFSCnFgQMH2LFjB35+fgkVkxBCCCE+9P7g4kGD9IOZCxbUD2CO49gEgEqVKnH27FnmzJmDo6Mjvr6+eHp60rBhQ+7evZvwcQshUpw4Jwj+/v60bt2aggUL0rFjR968eUO5cuXw8vKiTp065MmTh4sXLyZmrEIIIYQA6N4dPDwgIAA6d4Zq1fQrMseRiYkJXbt25ebNm3Tr1g0jIyM2bdpEnjx5GDJkCIGBgYkYvBDiSxfnBKFv3754e3vTpEkTLl26RPXq1dFqtXh7e3Py5Eny5cvH4MGDEzNWIYQQQgDkygVHjsDUqWBhAXv36lsTli+PV2uCo6Mjs2fP5vz581SqVImQkBBGjx5N0aJFpTVBiG9YnBOEXbt2sXDhQn799Vc2btzIiRMnGDduHCVLlqR48eJMmDABHx+fxIxVCCGEEBGMjaFXL7hwAUqXhjdvoHVrmDQp3ocqWLAg+/fvZ+PGjWTMmJHr169TunRpzp07lwiBCyG+dHFOEJ49e0auXLkAyJgxIxYWFri8t2iLq6srL168SPgIhRBCCBGziNaEMWMgQwZo1eqTDqPRaGjQoAEnT56kYMGCPH36lAoVKrBv374EDlgI8aWLc4Kg0+kwNjY23Dc2No60GqOszCiEEEIkExMT/cDlW7cgffr/ti9dqp/xKB4yZszI0aNHqVixIgEBAdSoUYNVq1YlbLxCiC9a3OcuBX7//XdsbGwACA8PZ+nSpTg5OQEQEBCQ8NEJIYQQIu6srP77/6ZN0LYtjBqlH5tQpkycD2Nvb8/u3btp3bo1a9eupUWLFjx69Ig+ffokQtBCiC9NnBMEV1dXFi5caLifPn16VqxYEaWMEEIIIb4ATk7g6gr/+x+UL69fmXnECDAzi9Pu5ubm/PHHHzg7OzNt2jT69+/P//73P1q0aCF/74X4ysU5QZDZDIQQQogUpHx5uHgRevTQtyCMHw+7dsHKlVCgQJwOYWRkxNSpU8mUKRN9+vRhwYIFLFiwAHd3d+rXr893331HgQIFpJuxEF+Zz1ooTQghhBBfMHt7/YJqGzZA6tT6GY+KFtUvrhYPvXv3ZuvWrVSoUAEjIyPOnTvHsGHDKFSoEDlz5qRfv348ePAgkS5CCJHU4tSCMHPmzDgfsEePHp8cjBBCCCESQcOG+jEIHTrAjh2QKVO8D1G3bl1q167NuXPnOHfuHFu3bmXv3r3cvn2byZMnM2/ePEaMGEGPHj0wNTVNhIsQQiQVjVIfX1Ela9aske6/ePGCoKAgHBwcAP0qy1ZWVqRNm5b//e9/iRJoUnnz5g329va8fv0aOzu7JDmnTqfj/v37uLq6YmQkjTpfMqmrlEPqKuWQukpCSsGxY1Cu3H/bHj6Mc8LwYV0FBATw119/MX36dP7++29Av6bC/Pnz8fDwSIwrEPEg762UIynqKj7fceMUwZ07dwy3MWPG4ObmxtWrV3n16hWvXr3i6tWrFClShFGjRiXIBQghhBAiEWg0kZOD+/f1KzC3aqVfaC2ebG1tadSoEUeOHGHRokWkTp2aS5cuUaZMGTp27MjLly8TMHghRFKJd4oyZMgQZs2aRe7cuQ3bcufOzbRp0/j1118TNDghhBBCJKJDh/SJwYoV4OYG3t6fdBgjIyPatWvHtWvXaNeuHaCfGj1PnjwsW7aMOHRWEEJ8QeKdIDx58oSwsLAo27VaLc+ePUuQoIQQQgiRBFq10q/CnDkz3Lmjb10YORLCwz/pcE5OTixatIijR4+SP39+/vnnH9q0aYOXlxc3b95M4OCFEIkl3gmCp6cnHTt25PTp04ZfBE6fPk3nzp3x8vJK8ACFEEIIkYjKlNHPbtSsGWi1MGwYVKyo7370icqWLcu5c+cYP348lpaWHDhwgIIFCzJ69GhCQ0MTLnYhRKKId4KwePFiMmbMSIkSJbCwsMDc3JySJUuSIUMGfv/998SIUQghhBCJyd4eVq3Sr5Fgawt//w3xmMEwOqampvTv3x9fX1+qVq1KSEgIQ4YMwc3NjWPHjiVQ4EKIxBDvBCFNmjTs3LmT69evs379etatW8fVq1fZuXMnadOmTYwYhRBCCJEUmjeH8+ehTRtIoIlHsmXLxu7du1m1ahVp0qTh6tWrlCtXjk6dOuHv758g5xBCJKxPnkcpZ86c1K1bl3r16pErV66EjEkIIYQQySVbNliyBCwt9fe1WujSBXx9P/mQGo2GZs2ace3aNTp06ADAwoULyZcvH5s3b06IqIUQCShOCULv3r0JDAyM80EHDhzIq1evPjkoIYQQQnwhpk2DBQugeHGYP1+/lsIncnR0ZOHChRw+fJhcuXLx5MkTGjRoQMOGDXny5EkCBi2E+BxxShBmzJhBUFBQnA86Z84caTYUQgghvgatWkH16hAcjFG3bqTp0eOT1kx4X/ny5blw4QKDBg3CxMSETZs2kS9fPhYtWiRTogrxBYhTgqCUIleuXDg6OsbpFp/WBiGEEEJ8wdKmhR07YPJklIkJ1tu3oyleXD9W4TNYWFgwZswYTp8+TdGiRfH396dDhw54enpy+/bthIldCPFJTOJSaMmSJfE+cLp06eK9jxBCCCG+QEZG0KcPqlQptI0bY3LrFpQqBcuWQZMmn3XowoULc+LECWbOnMmvv/7KwYMHKVSoEOPHj6dbt24YGX3ycEkhxCeKU4LQunXrxI5DCCGEEF+60qV5vGMHLr/+imb/fsibN0EOa2JiQu/evalfvz4dOnTg4MGD9OjRg40bN7Jo0SKyZ8+eIOcRQsSNpOVCCCGEiDOdgwNqyxY4eRIKFfrvgQQYe5gtWzb27dvHnDlzsLa25vDhwxQqVIhZs2ah0+k++/hCiLiRBEEIIYQQ8WNkFDk5OHECMmfWT4/62Yc2omvXrly6dImKFSsSFBREjx49qFSpkoxNECKJSIIghBBCiM+zaJF+ZqN27aB9e3j37rMPmTVrVvbv329oTThy5AgFCxZk2rRpaLXaBAhaCBETSRCEEEII8XkWLIDRo/UtC4sX6wcw37z52Yd9vzWhUqVKvHv3jt69e1O2bFmuXLmSAIELIaIjCYIQQgghPo+REQweDHv36qdFvXgRihaFjRsT5PARrQkLFizA1taWEydO4O7uzujRowkLC0uQcwgh/hPvBCEwMJAhQ4bg4eFBjhw5yJYtW6SbEEIIIb5RlSvDuXNQrhwEBECjRnDgQIIcWqPR0KlTJ65cuUKtWrUIDQ1lyJAhFC9enLNnzybIOYQQenGa5vR9HTp04PDhw7Rs2ZIMGTKg0WgSIy4hhBBCpETOzvqkYPBguHEDKlVK0MNnypSJbdu28ccff9CzZ08uXLhAiRIlGDhwIEOGDMHMzCxBzyfEtyjeCcKuXbvYsWMHZcqUSYx4hBBCCJHSmZjAhAmg1ULED4mBgXDrFhQu/NmH12g0NG/enCpVqtC9e3fWr1/P6NGj2bZtG8uXL6fQ+zMsCSHiLd5djFKlSoWjo2NixCKEEEKIr4mxsf5fpaBjRyhZEpYvT7DDp02blnXr1rF27VpSp07NhQsXKFasGGPGjCE8PDzBziPEtybeCcKoUaMYOnQoQUFBiRGPEEIIIb42ISH6MQkhIdC6NfToAQk4uLhx48ZcvnyZevXqERYWxq+//oqHhwdXr15NsHMI8S2Jd4IwZcoU/vrrL9KlS0fBggUpUqRIpJsQQgghRCQWFrB1Kwwdqr8/axZ4ecHz5wl2inTp0rF582aWL1+Ovb09Pj4+uLu7M3XqVFmFWYh4ivcYhPr16ydCGEIIIYT4qhkZwYgRUKQItGwJR45A8eL6xMHNLUFOodFoaNmyJZUrV6ZDhw7s3r2bPn36sH37dpYtW4aLi0uCnEeIr128E4Rhw4YlRhwfVbduXc6fP8/z589JlSoVXl5eTJgwAWdnZ0OZ+/fv061bNw4cOIClpSXNmjVj8uTJMqOBEEII8aWoVw9OntT/e/Mm1K+v/9fUNMFOkTFjRnbu3Mlvv/1G7969OXjwIAULFmTu3Lk0a9Yswc4jxNcqxSyUVqlSJdatW8f169fZuHEjt2/fplGjRobHtVottWrVIjAwkGPHjrFmzRo2btxInz59kjFqIYQQQkSRN68+SahTRz9oOQGTgwgajYbOnTtz7tw5SpQowevXr2nevDlNmzbl1atXCX4+Ib4mcUoQHB0d+eeff4D/ZjGK6ZZYevXqRalSpcicOTMeHh4MGDCAEydOGFZQ3LNnD1euXGHlypW4u7vj5eXFlClTWLhwIW/evEm0uIQQQgjxCVKlgj//hPLl/9t2/Dgk8N/sXLly8ffffzN8+HCMjY1Zs2YNhQoVYt++fQl6HiG+JnHqYjRt2jRsbW0BmD59emLGEyevXr1i1apVeHh4YPrvrw7e3t4UKFAgUpejatWqERISwpkzZ6gUw0ItISEhhISEGO5HJBM6nS7JBjVFnEsGUX35pK5SDqmrlEPqKuVI1Lq6fBlNtWrg6orasgWyZ0+wQxsZGTFkyBCqVatGq1atuHnzJlWqVKFfv36MGjXK8F3iayPvrZQjKeoqPseOU4LQunXraP+f1Pr378/s2bMJCgqiVKlSbN++3fDY06dPSZcuXaTyqVKlwszMjKdPn8Z4zHHjxjFixIgo2x88eGBIihKbUgo/Pz80Go2sTP2Fk7pKOaSuUg6pq5QjMevK7M4d0lpbY3LlCrqSJXm+YAEhxYsn6DnSp0/Pli1bGD16NKtXr2bSpEns2bOHmTNn4urqmqDn+hLIeyvlSIq6CggIiHNZjVJKfeqJ3r17Z+jiE8HOzi7O+w8fPjzaL+fv8/HxoVixYgD8888/vHr1inv37jFixAjs7e3Zvn07Go2GTp06ce/ePf76669I+5uZmbF8+XJ++OGHaI8fXQuCi4sLfn5+8bqWz6HT6bh//z6urq4YGaWYYSHfJKmrlEPqKuWQuko5Er2uHj9G8913aE6fRpmZoX7/HZo3T/jzABs3bqRTp074+/tjZ2fHvHnzYvyukFLJeyvlSIq6evPmDalSpeL169cf/Y4b71mMAgMD6d+/P+vWrePly5dRHtdqtXE+Vvfu3T/6ZsySJYvh/05OTjg5OZErVy7y5s2Li4sLJ06coHTp0qRPn56TJ09G2tfPz4+wsLAoLQvvMzc3x9zcPMp2IyOjJH0zRZxP3sBfPqmrlEPqKuWQuko5ErWuMmWCw4ehZUs0mzahadUKbt+GYcMggX9V/f777ylRogTNmzfn77//pnnz5uzbt49Zs2ZhbW2doOdKTvLeSjkSu67ic9x4R/DLL79w4MAB5s6di7m5Ob///jsjRozA2dmZ5fFcPt3JyYk8efLEerOwsIh234iGj4hf/0uXLo2vry9PnjwxlNmzZw/m5uYULVo0vpcphBBCiORgZQXr18Mvv+jvjxgBS5YkyqkyZ87MoUOHGDJkCBqNhiVLllC0aFEuXryYKOcTIqWId4Kwbds25s6dS6NGjTAxMaFcuXL8+uuvjB07llWrViVGjJw6dYrZs2dz/vx57t27x8GDB2nWrBnZs2endOnSAFStWpV8+fLRsmVLzp07x/79++nbty8dO3ZMsq5CQgghhEgARkYwYQL89hvUqKFfWC2RmJiYMHLkSA4cOICzszPXr1+nRIkS/Pbbb3xGL2whUrR4JwivXr0ia9asgH68QcRcwmXLluXIkSMJG92/LC0t2bRpE56enuTOnZt27dpRoEABDh8+bOgeZGxszI4dO7CwsKBMmTI0btyY+vXrM3ny5ESJSQghhBCJrGNH2LHjv3UStFp49ChRTlWxYkUuXLhAzZo1CQkJoXPnzjRr1kymShffpHgnCNmyZePu3bsA5MuXj3Xr1gH6lgUHB4eEjM2gYMGCHDhwgJcvXxIcHMydO3eYN28eGTNmjFTO1dWV7du3ExQUxMuXL5k1a1a04wuEEEIIkUJEjD1QCn76CYoWhfPnE+VUTk5ObNu2jYkTJxrWTChatCjnzp1LlPMJ8aWKd4LQtm1bLly4AMDAgQMNYxF69epFv379EjxAIYQQQggCAvQLqT17BhUq6AczJwIjIyP69evH0aNHcXFx4datW5QqVYq5c+dKlyPxzYh3gtCrVy969OgBQKVKlbh27RqrV6/m7Nmz9OzZM8EDFEIIIYTAzg4OHdKvvPzmDVSrBlu2JNrpSpcuzfnz56lTpw6hoaF069aNH374IV5zyQuRUn32PEqurq40aNCAwoULJ0Q8QgghhBDRc3CA3buhXj0ICYGGDWHRokQ7naOjI1u3bmXq1KmYmJiwbt06SpQowZUrVxLtnEJ8CeK8DsK7d+/Yv38/tWvXBvTdi95fYMzY2JhRo0bFOC2pEEIIIcRns7SEDRugc2dYvBg6dAA/P+jbN1FOp9Fo6NWrFyVLlqRx48Zcu3aNEiVK8Pvvv391C6sJESHOLQjLly9nwYIFhvuzZ8/m+PHjnDt3jnPnzrFy5UrmzZuXKEEKIYQQQhiYmMDvv8OAAfopUXPlSvRTenh4cPbsWSpXrkxgYCBNmzalZ8+ehIaGJvq5hUhqcU4QVq1aRbt27SJt++OPPzh48CAHDx5k0qRJhhmNhBBCCCESlUYD48bBxYtQt26SnDJt2rTs2bOHQYMGATBz5kwqVqzIw4cPk+T8QiSVOCcIN27cINd7GbqFhUWkJZulT54QQgghklz+/P/9/84daNQI/l2jKTEYGxszZswY/vzzT+zt7fH29qZIkSIcTqRZlYRIDnFOEF6/fo2JyX9DFl68eEGWLFkM93U6XaQxCUIIIYQQSUYp+OEH2LgRypaF+/cT9XR16tThzJkzFC5cmBcvXuDp6cnMmTNlKlTxVYhzgpApUyZ8fX1jfPzixYtkypQpQYISQgghhIgXjUY/o1HGjHD1KpQuDf+u25RYsmfPzvHjx2nevDlarZaePXvSqlUrgoKCEvW8QiS2OCcINWvWZOjQoQQHB0d57N27d4wYMYJatWolaHBCCCGEEHFWoAB4e+u7HT1+DOXKwcGDiXpKKysrVqxYwbRp0zA2NmblypWULVuWu3fvJup5hUhMcU4QBg0axKtXr8idOzeTJk1i69at/Pnnn0ycOJHcuXPj5+dnGLQjhBBCCJEsXFzg2DH9assBAVCjBuzYkain1Gg0/Pzzz+zbt480adJw7tw5ihUrxr59+xL1vEIkljgnCOnSpeP48ePkzZuXAQMG8N1331G/fn0GDhxIvnz5OHbsGOnSpUvMWIUQQgghPu7DBdVGjgSdLtFPW7FiRc6cOUOxYsV4+fIl1apVY8qUKTIuQaQ48VpJOWvWrOzevZsXL15w4sQJTpw4wYsXL9i9ezfZsmVLrBiFEEIIIeLHwgLWr9evlbB9u369hCTg4uLC0aNHadOmDTqdjr59+9KqVSvevXuXJOcXIiF80rvF0dGREiVKUKJECRwdHRM6JiGEEEKIz2dqql8rIU2a/7Yl8sBl0E8Fv3jxYmbOnBlpXML9RJ5ZSYiEkjTptBBCCCFEclu4ENzc9ElDItNoNPz000/s3buX1KlTc/bsWYoVK8bRo0cT/dxCfC5JEIQQQgjxbXj0SP/voEEweLB+7YREVqlSJU6fPo2bmxsvXrygcuXKzJs3T8YliC+aJAhCCCGE+DYMHw4TJ+r/P3YsDB2aJKfNkiULf//9N02aNCE8PJyuXbvStWtXwsPDk+T8QsSXJAhCCCGE+Hb06wczZuj/P3q0foajJGBlZcXq1asZP348Go2G+fPnU7t2bd68eZMk5xciPiRBEEIIIcS3pUcPmDxZ//9hw5JkTALoxyX079+fzZs3Y2VlxV9//UWZMmVk8LL44kiCIIQQQohvT58+/yUGQUFJeup69epx5MgRMmTIgK+vLyVLluT06dNJGoMQsZEEQQghhBDfpgED4PBhGDUqyU9dtGhRTp48ScGCBXn69Cnly5dn8+bNSR6HENGRBEEIIYQQ367y5f/7f1AQbNmSZKd2cXHh2LFjVK9enXfv3tGwYUOmTp0qMxyJZCcJghBCCCFESAjUqgXffQe//55kp7Wzs2Pbtm107doVpRR9+vShd+/e6HS6JItBiA9JgiCEEEIIYWYGRYro/9+pE6xenWSnNjExYfbs2Uz+d+D09OnTadasGSEhIUkWgxDvkwRBCCGEEEKj0c9s1KWLfgG1li1h69YkPL2GPn36sGrVKkxNTVm7di3Vq1fn9evXSRaDEBEkQRBCCCGEAH2SMGeOPjnQaqFxY9i7N0lDaNasGbt27cLW1pZDhw5Rrlw5HkWsAC1EEpEEQQghhBAigpERLF4MDRtCaCjUqwdHjyZpCJ6enhw+fJh06dJx6dIlPDw8uHr1apLGIL5tkiAIIYQQQrzPxAT++ANq1ABLS/0tibm7u+Pt7U3OnDm5f/8+ZcqU4eTJk0keh/g2SYIghBBCCPEhMzPYuBGOH4dixZIlhKxZs3L8+HFKliyJn58fXl5eHDlyJFliEd8WSRCEEEIIIaJjaQm5c/93//x5uH8/SUNwcnJi3759VKpUibdv31K9enX2JvG4CPHtkQRBCCGEEOJjjhyBcuX03Y78/JL01DY2NuzYsYMaNWrw7t07ateuzbZt25I0BvFtkQRBCCGEEOJjsmYFOzu48v/27j++5vr///jtbOyYbX4O27L5kXct5IspKW8/SpS1SMiPhuY9JCFRxNuP8iONSH4k5cc7QvLzrfIZ8iPyI7+K9I5EpE3Kz8Q2O8/vH+e987Y2bGzndc7cr5fLuezsdZ7n9bqfPTo6j/N6vZ6v/dCyJVy65NbN+/v7s3TpUp544glSU1Np1aoVixYtcmsGuXWoQRARERG5nvBw+OwzZ5OwcaNzKlQ3X+3YbrezcOFC2rdvz+XLl2nXrh1z5851awa5NahBEBEREcmJGjVg2TIoXBg+/hj69XNeVM2NChcuzAcffEBcXBwOh4NOnToxY8YMt2aQgk8NgoiIiEhONW4Mc+Y477/1Frz5ptsj+Pr6MmPGDHr16oUxhm7duvH222+7PYcUXGoQRERERHKjfXsYN855f+1atx9qBODj48OkSZPo378/AL179yYhIcHtOaRgKmR1ABERERGv068f3Hab84rLPtZ832qz2XjjjTfw9/fntdde46WXXuLSpUsMGTIEm81mSSYpGLQHQURERCS3bDZo1855PkKG8+ctiGHj1VdfZdSoUQAMHTqUIUOGYNx8boQULGoQRERERG5GWhr07AkPPGBJkwDwyiuvMH78eABGjx7Niy++qCZBbpgaBBEREZGbcfIkLFkCe/fC009bck4CQL9+/ZgyZQoAEyZM4Pnnn8dhURbxbmoQRERERG5GWBgsXw52O6xYAa+8YlmUnj178v7772Oz2Zg2bRpDhw5VkyC5pgZBRERE5GbVrQszZzrvjx0L//qXZVHi4uKYM2cONpuNefPm0atXLzUJkitqEERERETyQocOMGSI8358PHz5pWVRYmNjmTVrFjabjenTp9OzZ081CZJjahBERERE8sqIEc6pT1NToVUry05aBmeTMG7cODUJkmu6DoKIiIhIXvHxcV5p+fRpeOEFCAqyNE6rVq0oXbo0zzzzDNOnTwdg6tSp+Fh07QbxDmoQRERERPJSQACsWeO8VoIHiI2NxcfHh86dOzN9+nSMMUybNk1NglyV/ssQERERyWtXNgdHjjinQbVQbGys68Tld999l4EDB1qaRzybGgQRERGR/PLjjxAVBe3bw/btlkaJjY1l5n9nWkpISODtt9+2NI94Lq9rEFJSUqhZsyY2m409e/Zkeuzo0aPExMQQEBBAcHAwvXv3JjU11ZqgIiIiIpUqQYMGzpOWW7d2XlTNQl26dGHUqFEA9OnTh6VLl1qaRzyT1zUIL730EmFhYVmWp6enEx0dzYULF9i0aRMLFixg8eLFvPjiixakFBEREcF5qNGcOXDHHXDsGLRrB5cvWxpp0KBBdOvWDWMMHTp0YMuWLZbmEc/jVQ3CZ599RmJiIuPGjcvyWGJiIvv372fu3LnUqlWLJk2aMH78eGbMmMG5c+csSCsiIiICFCsGS5c6T17+/HMYPNjSODabjSlTphAdHc2lS5eIiYnhwIEDlmYSz+I1sxidOHGC+Ph4li1bRtGiRbM8vmXLFqpXr55p70KzZs1ISUlh586dNG7cONv1pqSkkJKS4vo9o5lwOBxumys4Y1uam9jzqVbeQ7XyHqqV91CtbkJkJLz/Pj7t2sEbb+C45x7ndRLy0bXq5ePjw/z583nwwQfZsWMHjz76KJs3b6Zs2bL5mkmy5473Vm7W7RUNgjGGLl260KNHD+rUqcORI0eyjElOTqZcuXKZlpUsWRI/Pz+Sk5Ovuu4xY8YwYsSILMuPHTtGkJvmLjbGcPr0aWw2GzYPmRJNsqdaeQ/VynuoVt5DtbpJdetS8h//oPh775GakEByVFS+ToWak3pNnTqVJ598kh9//JFmzZoxf/78bL+IlfzljvfW+VxctM/SBmH48OHZfji/0ldffcWXX37JuXPnGDRo0DXHZvcHNcZc8w89aNAg+vXr5/r93LlzhIeHEx4eTrFixa7zCvKGw+HAGEN4eLjmJPZwqpX3UK28h2rlPVSrPDB5Mo477sDvueeIKFIkXzeVk3pFRESQmJhI/fr1+eabb+jfvz9Lly6lcOHC+ZpNMnPHeys3h9xb2iD06tWLdu3aXXNMxYoVGTlyJFu3bsVut2d6rE6dOnTs2JE5c+YQEhLCtm3bMj1++vRp0tLSsuxZuJLdbs+yXnDuenPnP34Z29M/uJ5PtfIeqpX3UK28h2p1k+x2GDDAbZvLSb0iIyNZsWIFDz30EJ999hndu3dn1qxZ2kvkZvn93srNei1tEIKDgwkODr7uuEmTJjFy5EjX77/88gvNmjVj4cKF1K1bF4B69eoxatQokpKSCA0NBZwnLtvtdqKiovLnBYiIiIjcqPR0GD0a6tSBRx+1NMr999/PRx99xBNPPOH64vX111+3NJNYxyvOQYiIiMj0e2BgIAC333475cuXB6Bp06ZUrVqV2NhYEhISOHXqFP379yc+Pt5thwqJiIiI5NiUKTB0KAQHw549cNttlsaJiYnh3XffpWvXrowdO5Zy5crxwgsvWJpJrFFg9g/6+vryySefUKRIER544AHatm1Ly5Yts50SVURERMRy3bpBzZrw22/w9NPOPQoWi4uLY/To0QD069ePefPmWZxIrOAVexD+qmLFihhjsiyPiIhg5cqVFiQSERERyaUiRWDhQqhdG9avh5EjYdgwq1MxcOBAkpOTmTRpEl26dKFMmTI0bdrU6ljiRgVmD4KIiIiI17njDnjnHef9V1+FDRuszYNzVsgJEybQvn17Ll++TKtWrfjqq6+sjiVupAZBRERExEpPPw2dO4PDAR06wOnTVifCx8eH2bNn06RJEy5cuEB0dDTHjh2zOpa4iRoEEREREatNngx/+xv8/jts3Wp1GgD8/PxYsmQJNWvW5OTJk7Rp04aUlBSrY4kbqEEQERERsVpgICxY4JzNyOIpT68UFBTEkiVLKFGiBNu2bePFF1+0OpK4gRoEEREREU9QuzZERlqdIotKlSoxd+5cAKZMmaKZjW4BahBEREREPM3WrfDPf1qdwiU6Opp//jdPfHw8e/futTiR5Cc1CCIiIiKe5PhxaNDAOe3p8uVWp3EZNmwYTZs25eLFizz55JOcPXvW6kiST9QgiIiIiHiS226DjCsYd+/uPHHZA/j6+jJv3jwiIiI4ePAgzzzzTLbXpRLvpwZBRERExNOMGAF33QUnTkDv3lancQkODubjjz/Gz8+PpUuXMm7cOKsjST5QgyAiIiLiaYoUgdmzwccHPvwQli61OpHLPffcw1tvvQU4r7q8wQMu7iZ5Sw2CiIiIiCe691546SXn/R494LffrM1zhe7du9OpUyccDgft2rXjxIkTVkeSPKQGQURERMRTDR8O1arBr7/CjBlWp3Gx2WxMnTqVatWqkZycTIcOHUhPT7c6luQRNQgiIiIinspuh/ffh5kzYeBAq9NkEhAQwKJFiwgICODzzz/n1VdftTqS5BE1CCIiIiKerG5deOYZsNmsTpLFXXfdxfTp0wF47bXXSExMtDiR5AU1CCIiIiLe4vx5WLXK6hSZdOzYkW7dumGM4emnn+b48eNWR5KbpAZBRERExBv88otz6tMWLeD7761Ok8lbb71FzZo1OXnyJO3atePy5ctWR5KboAZBRERExBuEhkKNGpCa6pzVyIMuUlakSBEWLVpEUFAQmzZtYsiQIVZHkpugBkFERETEG9hsMGUK+PvD+vUwZ47ViTKpUqUKM2fOBGDs2LGsXLnS4kRyo9QgiIiIiHiLSpWcU58C9O/vUddGAGjdujXPP/88AHFxcfz6668WJ5IboQZBRERExJu88ILzUKPff3c2CR4mISGBGjVqcPLkSeLj4zEedCiU5IwaBBERERFvUrgwTJ/uPORozhz4/HOrE2Vit9v54IMP8PPzY8WKFcyaNcvqSJJLahBEREREvM1990HPntCxI9x+u9VpsqhRowavvfYaAH369OHw4cMWJ5LcUIMgIiIi4o3efhvmzoUKFaxOkq0XX3yRv//97/zxxx907tyZ9PR0qyNJDqlBEBEREfFGf72ysocd6+/r68ucOXMIDAzkiy++4M0337Q6kuSQGgQRERERb/bjj/DUUzB6tNVJsqhUqRITJ04EYMiQIXzzzTfWBpIcUYMgIiIi4s22b4ePPoLXX4cTJ6xOk0VcXBwxMTGkpqYSGxtLSkqK1ZHkOtQgiIiIiHiztm3hnnvgjz9gxAir02Rhs9mYMWMGZcqU4ZtvvmHYsGFWR5LrUIMgIiIi4s18fCAhwXn/3XfhP/+xNk82ypUrx7vvvgvAG2+8wdatWy1OJNeiBkFERETE2zVsCDExkJ4OgwZZnSZbLVu2JDY2FmMMcXFxOtTIg6lBEBERESkIxo517k1Ytgy++MLqNNmaOHEi5cqV47vvvmPkyJFWx5GrUIMgIiIiUhDcdRf84x/O++PGWZvlKkqVKsWUKVMAGDNmDHv27LE2kGRLDYKIiIhIQTFiBLz2Gnz4odVJrurJJ5+kdevWpKenExcXR1pamtWR5C/UIIiIiIgUFCEhMGQIBARYneSaJk+eTKlSpdi9ezcJGSdYi8dQgyAiIiJSEDkcFDp2zOoU2SpXrhxvvfUWACNGjOC7776zOJFcSQ2CiIiISEFz+DC2e+8lpE0buHjR6jTZ6tixI82bNyc1NZW4uDjS09OtjiT/pQZBREREpKAJC4PffqPQiRMwfbrVabJls9mYPn06xYoVY+vWrUyaNMnqSPJfahBEREREChq7HTN4MAC21193XmXZA5UvX951DsLgwYM5dOiQxYkE1CCIiIiIFExdupBWoQK2kyfBg7+dj4+P58EHH+TixYsMGDDA6jiCGgQRERGRgqlwYc707eu8n5AAZ85YmeaqbDYbkyZNwsfHh6VLl7Jx40arI93y1CCIiIiIFFAXYmIwVas6mwMPvXgaQLVq1ejWrRsA/fr1w+FwWJzo1qYGQURERKSg8vXFjBjhvL9pExhjbZ5rGDFiBEFBQezcuZMPPfhCb7cCNQgiIiIiBdkTT8CqVbBuHdhsVqe5qrJlyzJo0CAAXnnlFS566PSstwI1CCIiIiIFmc0GzZp5dHOQoW/fvkRERHDs2DEmTJhgdZxblhoEERERkVvF+fPw2WdWp7gqf39/Ro8eDcCYMWNITk62ONGtSQ2CiIiIyK0gORkqV4YWLeDIEavTXFX79u255557+OOPPxg2bJjVcW5JahBEREREbgUhIVCzJqSlwcSJVqe5Kh8fH958800A3nvvPfbt22dxoluPGgQRERGRW0XGhchmznQebuSh6tevT6tWrXA4HLp4mgXUIIiIiIjcKh5+GCIjnc3B7NlWp7mmsWPHUrhwYVatWsX//d//WR3nlqIGQURERORWYbPB888777/9NnjwBcmqVKnCc889B0D//v1JT0+3ONGtw2sahIoVK2Kz2TLdBg4cmGnM0aNHiYmJISAggODgYHr37k1qaqpFiUVEREQ8UKdOULw4HDwIHv7N/D//+U9KlCjBvn37mDNnjtVxbhle0yAAvPrqqyQlJbluQ4YMcT2Wnp5OdHQ0Fy5cYNOmTSxYsIDFixfz4osvWphYRERExMMEBkLXrs69CTt2WJ3mmkqVKsXgwYMBZ7Nw4cIFixPdGgpZHSA3goKCCAkJyfaxxMRE9u/fz7FjxwgLCwNg/PjxdOnShVGjRlGsWLFsn5eSkkJKSorr93PnzgHgcDhwuGm3W8a23LU9uXGqlfdQrbyHauU9VCvvcs169esHzz7rnPbUw+vZs2dPJk+ezE8//cSECRN45ZVXrI6U59zx3srNum3GGJNvSfJQxYoVSUlJITU1lfDwcNq0acOAAQPw8/MDYOjQoSxfvpyvv/7a9ZzTp09TqlQpPv/8cxo3bpzteocPH86IESOyLP/mm28ICgrKnxfzF8YYTp06RalSpbB5wVUOb2WqlfdQrbyHauU9VCvvUpDqtXz5cvr27UtgYCDr1q0jODjY6ki5Fvjhh1wuX55L9euDT+aDeNxRq/Pnz1OjRg3Onj171S/OM3jNHoQ+ffpQu3ZtSpYsyfbt2xk0aBCHDx/mvffeAyA5OZly5cplek7JkiXx8/O75lX4Bg0aRL9+/Vy/nzt3jvDwcMLDw6/7x8srDocDYwzh4eH4+HjVUV+3HNXKe6hW3kO18h6qlXfJcb2OHIFSpcBNn3tuxHPPPccHH3zAzp07mTlzJpMnT7Y6Uu6cO4dt9GhsFy7gWL8e/v73TA+7472VcZRMTljaIFzt2/srffXVV9SpU4cXXnjBtaxGjRqULFmS1q1bM3bsWEqXLg2QbcdljLlmJ2a327Hb7VmW+/j4uPUfv4zt6R9cz6daeQ/VynuoVt5DtfIu163XSy/B+PHOW9++bs2WGz4+PowbN47GjRvz7rvv0qdPH+68806rY+Xchx/ChQsQGYlPgwbO8z/+Ir/fW7lZr6Xv7l69evHdd99d81a9evVsn3vfffcB8MMPPwAQEhKSZU/B6dOnSUtLy7JnQURERESAKlWc5yC8/TZ4+DSijRo14rHHHiM9PT3LTJYezRh45x3n/R49sm0OPI2lDUJwcDCRkZHXvBUpUiTb5+7evRuA0NBQAOrVq8e+fftISkpyjUlMTMRutxMVFZX/L0ZERETE2zz9NJQsCT/+CJ9+anWa6xo7diw+Pj4sW7aMTZs2WR0nZ778EvbuBX9/5xSzXsAr9g9u2bKFCRMmsGfPHg4fPsxHH31E9+7defzxx4mIiACgadOmVK1aldjYWHbv3s3atWvp378/8fHxbjuXQERERMSrFC0K8fHO+5MmWZslB6pWrUrXrl0BGDBgAF4x107G3oN27ZzNmBfwigbBbrezcOFCGjVqRNWqVRk6dCjx8fHMnz/fNcbX15dPPvmEIkWK8MADD9C2bVtatmzJuHHjLEwuIiIi4uF69nTOqrNmDXz7rdVprmvEiBEEBASwdetWPv74Y6vjXNtvv8FHHznvP/ustVlywStmMapduzZbt2697riIiAhWrlzphkQiIiIiBUSFCtCyJSxZ4jwXIeMbbw8VGhpK//79GTFiBIMGDaJly5YULlzY6ljZK1rU+TfdvBnuucfqNDnmFXsQRERERCQf9erl/LliBVy+bG2WHOjfvz9ly5bl0KFDLFmyxOo4V1e0KHTrBnPmWJ0kV9QgiIiIiNzqGjaEDz6A77+HQp5/gElgYCDP/veQnYkTJ1obpgBSgyAiIiJyq/Pxcc5oFBRkdZIc69GjB35+fmzdupVt27ZZHSerl1+GadPg/Hmrk+SaGgQRERERySwtzeoE1xUSEkL79u0BeOuttyxO8xfHjzsvPtezJxw9anWaXFODICIiIiJO//431KoFI0ZYnSRH+vTpA8CiRYs4fvy4xWmuMGOG88JzDRpAtWpWp8k1NQgiIiIi4nTxIuzZA7Nne/yVlQFq1apFgwYNuHz5MlOnTrU6jtPly84GAbxqatMrqUEQEREREacWLaBUKechMqtXW50mRzL2IkyfPp0///zT4jQ498L88guUKQNPPGF1mhuiBkFEREREnOx26NjReX/mTGuz5FCLFi2oWLEiv//+O/PmzbM6zv+uI9G1q/Pv6YXUIIiIiIjI/8TFOX8uXw6//25tlhzw9fXl+eefB5wnKxtjrAtz5Z6X+HjrctwkNQgiIiIi8j81azpPVE5NhQ8/tDpNjsTFxREQEMC3337L2rVrrQty/jw89hg0bgyVK1uX4yapQRARERGRzDL2InjJYUYlSpTgmWeeASye8jQy0nk16jVrrMuQB9QgiIiIiEhmHTpA69bw2mtg5SE7uZBxmNHKlSs5ePCgtWF8vPsjtnenFxEREZG8V6oULFrkPFzGZrM6TY7ccccdREdHA/D222+7P8DmzXD4sPu3mw/UIIiIiIhIgZAx5enMmTM5c+aM+zZsDHTr5jzvYPly9203n6hBEBEREZHsHToEgwfDypVWJ8mRJk2aULVqVS5cuMDs2bPdt+G9e2H/fue0po0auW+7+UQNgoiIiIhkb84cGD0aJk2yOkmO2Gw217kI77zzjvumPJ0/3/mzeXMoXtw928xHahBEREREJHv/nRmINWucVwf2Ah07diQwMJDvv/+eDRs25P8GjYEFC5z327fP/+25gRoEEREREclepUpw//3OD8FLllidJkeCgoLo+N+rQb+TcVXj/LR1Kxw5AoGBzpO6CwA1CCIiIiJyda1bO38uWmRtjlzo3r07AEuWLOHEiRP5u7GMw4tatgR///zdlpuoQRARERGRq3vySefPL76A5GRrs+RQrVq1qFu3LmlpacyaNSv/NmQMfPqp834BObwI1CCIiIiIyLVEREDdul51mBFAjx49AJg+fToOhyN/NmKzwddfO89BePjh/NmGBdQgiIiIiMi1tW4NJUrAhQtWJ8mxtm3bUqJECY4cOUJiYmL+bSggAJ56CgoXzr9tuJkaBBERERG5tmefhRMnYMAAq5PkWNGiRencuTMA06ZNy/sNuGsKVQuoQRARERGRawsIAD8/q1PkWsZhRitXruTYsWN5u/Lly+Huu8EdMyW5mRoEEREREckZY+DAAatT5FhkZCSNGjXC4XDw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EREREZECxCtOUi5WrBg9evRg2LBhhIeHU6FCBRISEgBo06YNAE2bNqVq1arExsaSkJDAqVOn6N+/P/Hx8eqaRURERERyyCsaBICEhAQKFSpEbGwsFy9epG7dunz++eeULFkSAF9fXz755BN69uzJAw88gL+/Px06dGDcuHEWJ78+u93OsGHDshzqJJ5HtfIeqpX3UK28h2rlXVQv7+FptbIZk5O5jkRERERE5FagSYxFRERERMRFDYKIiIiIiLioQRARERERERc1CCIiIiIi4qIGwWJTp06lUqVKFClShKioKL744gurIxVoY8aM4Z577iEoKIiyZcvSsmVLvv/++0xjjDEMHz6csLAw/P39adSoEd9++22mMSkpKTz//PMEBwcTEBDA448/zs8//5xpzOnTp4mNjaV48eIUL16c2NhYzpw5k98vscAaM2YMNpuNvn37upapVp7j+PHjPP3005QuXZqiRYtSs2ZNdu7c6XpctfIcly9fZsiQIVSqVAl/f38qV67Mq6++isPhcI1RvayxceNGYmJiCAsLw2azsWzZskyPu7MuR48eJSYmhoCAAIKDg+nduzepqan58bK90rVqlZaWxssvv8zdd99NQEAAYWFhdOrUiV9++SXTOjy6VkYss2DBAlO4cGEzY8YMs3//ftOnTx8TEBBgfvrpJ6ujFVjNmjUzs2bNMvv27TN79uwx0dHRJiIiwvzxxx+uMa+//roJCgoyixcvNnv37jVPPfWUCQ0NNefOnXON6dGjh7ntttvM6tWrza5du0zjxo3N//t//89cvnzZNeaRRx4x1atXN19++aX58ssvTfXq1c1jjz3m1tdbUGzfvt1UrFjR1KhRw/Tp08e1XLXyDKdOnTIVKlQwXbp0Mdu2bTOHDx82a9asMT/88INrjGrlOUaOHGlKly5tVq5caQ4fPmwWLVpkAgMDzcSJE11jVC9rfPrpp2bw4MFm8eLFBjBLly7N9Li76nL58mVTvXp107hxY7Nr1y6zevVqExYWZnr16pXvfwNvca1anTlzxjRp0sQsXLjQ/Oc//zFbtmwxdevWNVFRUZnW4cm1UoNgoXvvvdf06NEj07LIyEgzcOBAixLden799VcDmA0bNhhjjHE4HCYkJMS8/vrrrjGXLl0yxYsXN++8844xxvnGL1y4sFmwYIFrzPHjx42Pj49ZtWqVMcaY/fv3G8Bs3brVNWbLli0GMP/5z3/c8dIKjPPnz5u//e1vZvXq1aZhw4auBkG18hwvv/yyqV+//lUfV608S3R0tImLi8u0rFWrVubpp582xqhenuKvHzrdWZdPP/3U+Pj4mOPHj7vGzJ8/39jtdnP27Nl8eb3eLLtm7q+2b99uANeXwJ5eKx1iZJHU1FR27txJ06ZNMy1v2rQpX375pUWpbj1nz54FoFSpUgAcPnyY5OTkTHWx2+00bNjQVZedO3eSlpaWaUxYWBjVq1d3jdmyZQvFixenbt26rjH33XcfxYsXV31z6bnnniM6OpomTZpkWq5aeY4VK1ZQp04d2rRpQ9myZalVqxYzZsxwPa5aeZb69euzdu1aDhw4AMDXX3/Npk2baN68OaB6eSp31mXLli1Ur16dsLAw15hmzZqRkpKS6dBBybmzZ89is9koUaIE4Pm18porKRc0v/32G+np6ZQrVy7T8nLlypGcnGxRqluLMYZ+/fpRv359qlevDuD622dXl59++sk1xs/Pz3UV7yvHZDw/OTmZsmXLZtlm2bJlVd9cWLBgAbt27eKrr77K8phq5Tl+/PFHpk2bRr9+/XjllVfYvn07vXv3xm6306lTJ9XKw7z88sucPXuWyMhIfH19SU9PZ9SoUbRv3x7Qe8tTubMuycnJWbZTsmRJ/Pz8VLsbcOnSJQYOHEiHDh0oVqwY4Pm1UoNgMZvNlul3Y0yWZZI/evXqxTfffMOmTZuyPHYjdfnrmOzGq745d+zYMfr06UNiYiJFihS56jjVynoOh4M6deowevRoAGrVqsW3337LtGnT6NSpk2ucauUZFi5cyNy5c/nwww+pVq0ae/bsoW/fvoSFhdG5c2fXONXLM7mrLqpd3khLS6Ndu3Y4HA6mTp163fGeUisdYmSR4OBgfH19s3R3v/76a5ZOUPLe888/z4oVK1i3bh3ly5d3LQ8JCQG4Zl1CQkJITU3l9OnT1xxz4sSJLNs9efKk6ptDO3fu5NdffyUqKopChQpRqFAhNmzYwKRJkyhUqJDr76haWS80NJSqVatmWnbXXXdx9OhRQO8rTzNgwAAGDhxIu3btuPvuu4mNjeWFF15gzJgxgOrlqdxZl5CQkCzbOX36NGlpaapdLqSlpdG2bVsOHz7M6tWrXXsPwPNrpQbBIn5+fkRFRbF69epMy1evXs39999vUaqCzxhDr169WLJkCZ9//jmVKlXK9HilSpUICQnJVJfU1FQ2bNjgqktUVBSFCxfONCYpKYl9+/a5xtSrV4+zZ8+yfft215ht27Zx9uxZ1TeHHnroIfbu3cuePXtctzp16tCxY0f27NlD5cqVVSsP8cADD2SZLvjAgQNUqFAB0PvK0/z555/4+GT+37+vr69rmlPVyzO5sy716tVj3759JCUlucYkJiZit9uJiorK19dZUGQ0BwcPHmTNmjWULl060+MeX6sbPr1ZblrGNKfvv/++2b9/v+nbt68JCAgwR44csTpagfXss8+a4sWLm/Xr15ukpCTX7c8//3SNef31103x4sXNkiVLzN69e0379u2znUaufPnyZs2aNWbXrl3mwQcfzHZqsho1apgtW7aYLVu2mLvvvlvT+92kK2cxMka18hTbt283hQoVMqNGjTIHDx408+bNM0WLFjVz5851jVGtPEfnzp3Nbbfd5prmdMmSJSY4ONi89NJLrjGqlzXOnz9vdu/ebXbv3m0A8+abb5rdu3e7Zr5xV10yps586KGHzK5du8yaNWtM+fLlNc3pFa5Vq7S0NPP444+b8uXLmz179mT6vJGSkuJahyfXSg2CxaZMmWIqVKhg/Pz8TO3atV3TbUr+ALK9zZo1yzXG4XCYYcOGmZCQEGO3202DBg3M3r17M63n4sWLplevXqZUqVLG39/fPPbYY+bo0aOZxvz++++mY8eOJigoyAQFBZmOHTua06dPu+FVFlx/bRBUK8/x73//21SvXt3Y7XYTGRlp3n333UyPq1ae49y5c6ZPnz4mIiLCFClSxFSuXNkMHjw40wcX1csa69aty/b/UZ07dzbGuLcuP/30k4mOjjb+/v6mVKlSplevXubSpUv5+fK9yrVqdfjw4at+3li3bp1rHZ5cK5sxxtz4/gcRERERESlIdA6CiIiIiIi4qEEQEREREREXNQgiIiIiIuKiBkFERERERFzUIIiIiIiIiIsaBBERERERcVGDICIiIiIiLmoQRERERETERQ2CiIgUaF26dMFms2Gz2Vi2bFmernv9+vWudbds2TJP1y0iYhU1CCIiXubKD7xX3n744Qero3msRx55hKSkJB599FHXsqs1DF26dMnxh/3777+fpKQk2rZtm0dJRUSsV8jqACIiknuPPPIIs2bNyrSsTJkyWcalpqbi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", "text/plain": [ "
" ] @@ -302,32 +348,41 @@ }, { "cell_type": "markdown", - "id": "070924d3", + "id": "3d53d121", "metadata": {}, "source": [ "## Summary\n", "\n", - "The `176k_stage_shift_summary.txt` file written by the test, plus a bar chart contrasting the measured shift against the two reference ratios (0.91875 for hard-coded, 1.0 for Fs-derived)." + "The `176k_stage_shift_summary.txt` file written by the test, plus a bar chart of\n", + "the measured ratio per stage. Every bar should now sit on the 1.0 line; the\n", + "0.91875 line marks where the CW and EQ bars used to be.\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "815885a4", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-28T10:57:20.202126Z", + "iopub.status.busy": "2026-07-28T10:57:20.201918Z", + "iopub.status.idle": "2026-07-28T10:57:20.369144Z", + "shell.execute_reply": "2026-07-28T10:57:20.368572Z" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[('CW_audio_filter_2k0_upper_cutoff', 'hardcoded', 2064.6, 1896.9, 0.9187, 0.9187)\n", - " ('EQ_band13_4000_peak', 'hardcoded', 4000. , 3675. , 0.9187, 0.9187)\n", - " ('AM_audio_lowpass_corner', 'fs_derived', 3094.3, 3076.2, 0.9941, 1. )]\n" + "[('CW_audio_filter_2k0_upper_cutoff', 'fs_derived', 2064.6, 2063.7, 0.9996, 1.)\n", + " ('EQ_band13_4000_peak', 'fs_derived', 4000. , 4000. , 1. , 1.)\n", + " ('AM_audio_lowpass_corner', 'fs_derived', 4475.9, 4425.8, 0.9888, 1.)]\n" ] }, { "data": { - "image/png": "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SEjAo0ePSjsdIvoAGBgYoHLlygUKPHWwyCMiIiIqRTo6OqhcuTKys7NLfAh5IvqwaWpqQktL672v6LPIIyIiIiplMpkM2tracqOFExEV1Uf1CAUiIiIiIiIqHIs8IiIiIiKiMoRFHhERERERURnCIo+IiIiIiKgMYZFHRERERERUhrDIIyIiIiIiKkNY5BEREREREZUhLPKIiIiIiIjKEBZ5REREREREZQiLPCIiIiIiojKERR4REREREVEZwiKPiIiIiIioDGGRR0REREREVIawyCMiIiIiIipDWOQRERERERGVISzyiIiIiIiIyhAWeURERERERGUIizwiIiIiIqIyhEUeERERERFRGcIij4iIiIiIqAxhkUdERERERFSGsMgjIiIiIiIqQ1jkERERERERlSEs8oiIiIiIiMoQFnlERERERERlCIs8IiIiIiKiMoRFHhERERERURnCIo+IiIiIiKgMYZFHRERERERUhmipu0JGRgYiIyMRFxeH9PR0WFpawtXVFY6OjiWRHxEREREREalB5SIvPDwcS5Yswe7du5GZmQlTU1Po6+sjOTkZGRkZcHJywpAhQzBs2DCUK1euJHMmIiIiIiIiJVTqrtmhQwd07doVFStWxKFDh/DixQs8ffoUDx48QHp6Om7duoVJkybhyJEjcHZ2RmhoaEnnTURERERERAqoVOT5+PggLi4O8+fPR+PGjWFgYCC33MnJCf3798fBgwfx559/qrzzEydOoF27drC1tYVMJsPu3bvfuc7x48fh5uYGPT09ODk54ddffy0Qs2PHDtSsWRO6urqoWbMmdu3aVSAmKCgIjo6O0NPTg5ubG06ePKly3kRERERERB8qlYq84cOHQ0dH551xQgh8+umn+Pzzz1XaeVpaGurUqYNffvlFpfjY2Fi0bt0ajRo1woULF/DDDz/A398fO3bskGIiIiLQo0cP9O3bFxcvXkTfvn3RvXt3nD17VorZunUrRo4ciYkTJ+LChQto1KgR/Pz8EB8fr1IeREREREREHyqZEEKos0JAQAAmTJhQoD0nJwd9+vTB5s2bi5aITIZdu3ahY8eOSmPGjRuHP/74A9euXZPahg0bhosXLyIiIgIA0KNHD6SmpuLAgQNSTKtWrVC+fHkptwYNGqBu3boIDg6WYmrUqIGOHTsiICBApXxTU1NhYmKChCdPYWxs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XPTv37/YkyMiIiIiIiL1qFzkff311zhx4oTCZb169QIALF++vHiyIiIiIiIioiLhc/KKiKNrEhER0ceC9+QRFd2HdE+eqjWIylfy3hQfH4+EhARoamrCwcEBFhYWRU6UiIiIiIiIio9aD0MPCgqCvb09HB0d4eXlhQYNGsDKygoNGzZEVFRUSeVIREREREREKlK5yJs/fz5mzpyJ0aNHIygoCNWqVcPUqVOxb98+ODk5oXHjxjh//nxJ5kpERERERETvoHJ3zaVLlyIkJAR+fn4AgGbNmsHLywuJiYlo1aoVypcvjx9++AGHDx8usWSJiIiIiIiocCpfyXv8+DFq1KghzVetWhUpKSl48uQJAODLL79ERERE8WdIREREREREKlO5yHN2dkZoaKg0f+zYMejo6MDa2hoAoKenB5lMVvwZEhERERERkcpU7q45YcIE9OnTB3/++Sf09PSwc+dO+Pv7S4VdWFgYatWqVWKJEhERERER0bupfCWve/fu+P3336GlpYW0tDQsXLgQAQEB0vKuXbtiz549JZIkERERERERqUat5+T5+flJA6+8zdzcvFgSIiIiIiIioqJT6zl5hcnOzkZ8fHxxbY6IiIiIiIiKoNiKvKtXr8LR0bG4NkdERERERERFUGxFHhEREREREZU+le/Jq1u3bqHLX7169d7JEBERERER0ftRuciLiYlBz549lXbJTEhIwM2bN4stMSIiIiIiIlKfykVerVq10KBBA3z99dcKl0dHR2PFihXFlhgRERERERGpT+V78ho2bIgbN24oXV6uXDk0bty4WJIiIiIiIiKiolH5St6iRYsKXV6lShUcO3bsffMhIiIiIiKi98DRNYmIiIiIiMoQlYo8dR9y/vDhwyIlQ0RERERERO9HpSKvXr16GDx4MCIjI5XGpKSkYMWKFahVqxZ27txZbAkSERERERGR6lS6Jy8mJgYBAQFo1aoVtLW14e7uDltbW+jp6eHZs2eIiYnB1atX4e7ujnnz5sHPz6+k8yYiIiIiIiIFVLqSZ25ujvnz5+PRo0cIDg6Gs7MzkpKScOvWLQBA7969ERUVhdOnT7PAIyIiIiIiKkUqXcm7dOkSatWqBT09PXTu3BmdO3cu6byIiIiIiIioCFS6kufq6oqkpCQAgJOTE54+fVqiSREREREREVHRqFTkmZqaIjY2FgAQFxeH3NzcEk2KiIiIiIiIikal7ppdunRBkyZNYGNjA5lMBnd3d2hqaiqMvXv3brEmSERERERERKpTqchbvnw5OnfujNu3b8Pf3x+DBw9GuXLlSjo3IiIiIiIiUpNKRR4AtGrVCgAQFRWFESNGFFuRFxQUhHnz5iEhIQGffvopFi1ahEaNGimNX7p0KX755RfExcWhcuXKmDhxIvr16yctb9q0KY4fP15gvdatW2Pfvn0AgKlTp2LatGlyy62srJCYmFgsx0RERERERFRaVC7y8q1evbrYdr5161aMHDkSQUFB8Pb2xrJly+Dn54eYmBhUrly5QHxwcDAmTJiAFStWoF69eoiMjMTgwYNRvnx5tGvXDgCwc+dOZGZmSus8ffoUderUQbdu3eS29emnn+LPP/+U5pV1PyUiIiIiIvqYqF3kFaeFCxdi0KBB+OqrrwAAixYtwqFDhxAcHIyAgIAC8evXr8fQoUPRo0cPAHkjfZ45cwZz586VijwzMzO5dbZs2QIDA4MCRZ6Wlhasra1VzjUjIwMZGRnSfGpqqsrrEhERERER/VtUGl2zJGRmZiIqKgo+Pj5y7T4+PggPD1e4TkZGBvT09OTa9PX1ERkZiaysLIXrhISEoGfPnjA0NJRrv3XrFmxtbeHo6IiePXu+c8CYgIAAmJiYSJOdnd27DpGIiIiIiOhfV2pFXlJSEnJycmBlZSXXXti9cb6+vli5ciWioqIghMD58+exatUqZGVlSc/xe1NkZCSuXLkiXSnM16BBA6xbtw6HDh3CihUrkJiYCC8vr0Kf/zdhwgSkpKRI0/3794tw1ERERERERCVL5SLvhx9+QGRkZLEnIJPJ5OaFEAXa8v3444/w8/ODh4cHtLW10aFDBwwYMACA4nvqQkJCUKtWLdSvX1+u3c/PD126dIGLiwtatmwpDciydu1apXnq6urC2NhYbiIiIiIiIvrQqFzkJSQkoG3btrCxscGQIUOwb98+uXvU1GVhYQFNTc0CV+0eP35c4OpePn19faxatQrp6emIi4tDfHw8HBwcUK5cOVhYWMjFpqenY8uWLQWu4iliaGgIFxcX3Lp1q8jHQ0RERERE9CFQuchbvXo1/v77b2zbtg2mpqb47rvvYGFhgc6dO2PNmjUKu0sWRkdHB25ubggNDZVrDw0NhZeXV6Hramtro1KlStDU1MSWLVvQtm1baGjIH8q2bduQkZGBPn36vDOXjIwMXLt2DTY2NmodAxERERER0YdGrXvyZDIZGjVqhMDAQFy/fh2RkZHw8PDAihUrULFiRTRu3Bjz58/Hw4cPVdre6NGjsXLlSqxatQrXrl3DqFGjEB8fj2HDhgHIuw/uzWfg3bx5Exs2bMCtW7cQGRmJnj174sqVK5g9e3aBbYeEhKBjx44wNzcvsGzMmDE4fvw4YmNjcfbsWXTt2hWpqano37+/Oi8HERERERHRB+e9HqFQo0YN1KhRA2PHjsWTJ0/wxx9/4I8//gCQV0i9S48ePfD06VNMnz4dCQkJqFWrFvbv3w97e3sAeV1E4+PjpficnBwsWLAAN27cgLa2Npo1a4bw8HA4ODjIbffmzZs4deoUDh8+rHC/Dx48QK9evZCUlARLS0t4eHjgzJkz0n6JiIiIiIg+VjIhhCjtJD5GqampMDExQUpKCgdhISIiog+aw/h9pZ0C0Ucrbk6b0k5BomoNUmqPUCAiIiIiIqLixyKPiIiIiIioDGGRR0REREREVIawyCMiIiIiIipD1B5dMyMjA5GRkYiLi0N6ejosLS3h6uoKR0fHksiPiIiIiIiI1KBykRceHo4lS5Zg9+7dyMzMhKmpKfT19ZGcnIyMjAw4OTlhyJAhGDZsGMqVK1eSORMREREREZESKnXX7NChA7p27YqKFSvi0KFDePHiBZ4+fYoHDx4gPT0dt27dwqRJk3DkyBE4OzsjNDS0pPMmIiIiIiIiBVS6kufj44PffvsNOjo6Cpc7OTnByckJ/fv3x9WrV/Ho0aNiTZKIiIiIiIhUo1KRN3z4cJU2JoTAp59+ik8//fS9kiIiIiIiIqKiUXt0zYCAAIXtOTk5+OKLL947ISIiIiIiIio6tYu8RYsWYfny5XJtOTk56NmzJ6Kjo4srLyIiIiIiIioCtR+hsH//frRs2RKmpqbo3r07srKy0KNHD1y/fh3Hjh0riRyJiIiIiIhIRWoXeW5ubti1axc6dOgAXV1dhISE4M6dOzh27BisrKxKIkciIiIiIiJSkdrdNQGgadOmWL9+Pbp27Yq4uDgcP36cBR4REREREdEHQKUreZ07d1bYbmlpCVNTUwwZMkRq27lzZ/FkRkRERERERGpTqcgzMTFR2O7r61usyRAREREREdH7UanIW716dUnnQURERERERMWgSPfkvSksLAyvXr0qjlyIiIiIiIjoPb13kefj44O4uLhiSIWIiIiIiIjel8qPUKhbt67C9uzsbHTp0gV6enoAgL/++qt4MiMiIiIiIiK1qVzkXb58GS1btoSHh4fUJoTAxYsX0axZM1SoUKFEEiQiIiIiIiLVqVzkhYWFoX///qhfvz6mTJkCDY28np6zZs3C8OHDUbNmzRJLkoiIiIiIiFSj8j153t7e+Ouvv3Dz5k14enrizp07JZkXERERERERFYFaA68YGxtj8+bNGDZsGBo2bIjly5dDJpOVVG5ERERERESkJpW7a75p4MCBaNiwIXr37o3s7OzizomIiIiIiIiKqEhFHgBUrVoVZ86cwYsXL2BsbFycOREREREREVERFbnIAwANDQ2YmJgUVy5ERERERET0nt77Yej5+vfvj+bNmxfX5oiIiIiIiKgI3utK3psqVqwoPVaBiIiIiIiISkexFXmzZ88urk0RERERERFREfHSGxERERERURmicpF34cIFxMbGSvMbNmyAt7c37Ozs0LBhQ2zZsqVEEiQiIiIiIiLVqVzkDRo0CHFxcQCAlStXYsiQIXB3d8fEiRNRr149DB48GKtWrSqpPImIiIiIiEgFKt+Td+PGDVSpUgUAEBQUhEWLFmHIkCHS8nr16mHWrFn48ssviz9LIiIiIiIiUonKV/L09fXx5MkTAMDDhw/RoEEDueUNGjSQ686pqqCgIDg6OkJPTw9ubm44efJkofFLly5FjRo1oK+vj2rVqmHdunVyy9esWQOZTFZgev369Xvtl4iIiIiI6GOgcpHn5+eH4OBgAECTJk2wfft2ueXbtm3DJ598otbOt27dipEjR2LixIm4cOECGjVqBD8/P8THxyuMDw4OxoQJEzB16lRcvXoV06ZNw/Dhw7Fnzx65OGNjYyQkJMhNenp6Rd4vERERERHRx0ImhBCqBD569Aje3t6oXLky3N3dERwcDDc3N9SoUQM3btzAmTNnsGvXLrRu3VrlnTdo0AB169aVikcAqFGjBjp27IiAgIAC8V5eXvD29sa8efOktpEjR+L8+fM4deoUgLwreSNHjsTz58+Lbb+KpKamwsTEBCkpKTA2NlZpHSIiIqLS4DB+X2mnQPTRipvTprRTkKhag6h8Jc/W1hYXLlyAp6cnDh48CCEEIiMjcfjwYVSqVAmnT59Wq8DLzMxEVFQUfHx85Np9fHwQHh6ucJ2MjAy5K3JAXjfSyMhIZGVlSW0vX76Evb09KlWqhLZt2+LChQvvtd/8faempspNREREREREHxq1npNnamqKOXPm4OrVq3j16hUyMjIQFxeHjRs3wt3dXa0dJyUlIScnB1ZWVnLtVlZWSExMVLiOr68vVq5ciaioKAghcP78eaxatQpZWVlISkoCAFSvXh1r1qzBH3/8gc2bN0NPTw/e3t64detWkfcLAAEBATAxMZEmOzs7tY6XiIiIiIjo31DqD0OXyWRy80KIAm35fvzxR/j5+cHDwwPa2tro0KEDBgwYAADQ1NQEAHh4eKBPnz6oU6cOGjVqhG3btsHZ2RlLliwp8n4BYMKECUhJSZGm+/fvq3uoREREREREJU7lIq9du3ZYv349Xr16VSw7trCwgKamZoGrZ48fPy5wlS2fvr4+Vq1ahfT0dMTFxSE+Ph4ODg4oV64cLCwsFK6joaGBevXqSVfyirJfANDV1YWxsbHcRERERERE9KFRucjbt28fvvzyS9jY2ODrr79GVFTUe+1YR0cHbm5uCA0NlWsPDQ2Fl5dXoetqa2ujUqVK0NTUxJYtW9C2bVtoaCg+FCEEoqOjYWNj8977JSIiIiIi+tCp/DB0ALh48SIOHz6MVatWYfny5ahVqxYGDx6M3r17o3z58mrvfPTo0ejbty/c3d3h6emJ5cuXIz4+HsOGDQOQ10Xy4cOH0rPwbt68icjISDRo0ADPnj3DwoULceXKFaxdu1ba5rRp0+Dh4YGqVasiNTUVixcvRnR0NJYuXaryfomIiIiIiD5WahV5FhYWGDlyJEaOHInIyEiEhIRg0qRJGDt2LDp27IivvvoKzZs3V3l7PXr0wNOnTzF9+nQkJCSgVq1a2L9/P+zt7QEACQkJcs+uy8nJwYIFC3Djxg1oa2ujWbNmCA8Ph4ODgxTz/PlzDBkyBImJiTAxMYGrqytOnDiB+vXrq7xfIiIiIiKij5XKz8nT0NBAYmIiKlSoINf+6tUrbN26FSEhIQgPD0dOTk6JJPqh4XPyiIiI6GPB5+QRFV2Zfk6eMvr6+hgwYABOnjyJ69evv+/miIiIiIiI6D2oXOQ1adIEOjo6hcZUrVr1vRMiIiIiIiKiolP5nrxjx46VZB5ERERERERUDEr9YehERERERERUfIqtyLt27RqcnJyKa3NERERERERUBMVW5GVmZuLevXvFtTkiIiIiIiIqApXvyRs9enShy588efLeyRAREREREdH7UbnI+/nnn/HZZ58pfR7Dy5cviy0pIiIiIiIiKhqVi7yqVati1KhR6NOnj8Ll0dHRcHNzK7bEiIiIiIiISH0q35Pn5uaGqKgopctlMhmEEMWSFBERERERERWNylfyFixYgIyMDKXL69Spg9zc3GJJioiIiIiIiIpG5SLP2tq6JPMgIiIiIiKiYlAiD0Nnt00iIiIiIqLSoVKRV6NGDWzatAmZmZmFxt26dQtff/015s6dWyzJERERERERkXpU6q65dOlSjBs3DsOHD4ePjw/c3d1ha2sLPT09PHv2DDExMTh16hRiYmLw7bff4ptvvinpvImIiIiIiEgBlYq85s2b49y5cwgPD8fWrVuxadMmxMXF4dWrV7CwsICrqyv69euHPn36wNTUtIRTJiIiIiIiImVUHngFALy8vODl5VVSuRAREREREdF7UumePDMzMyQlJQEAvvzyS7x48aJEkyIiIiIiIqKiUanIy8zMRGpqKgBg7dq1eP36dYkmRUREREREREWjUndNT09PdOzYEW5ubhBCwN/fH/r6+gpjV61aVawJEhERERERkepUKvI2bNiAn376CXfu3IFMJkNKSgqv5hEREREREX2AVCryrKysMGfOHACAo6Mj1q9fD3Nz8xJNjIiIiIiIiNSn1uiaABAbG1sSeRAREREREVExUGngFSIiIiIiIvo4sMgjIiIiIiIqQ1jkERERERERlSEs8oiIiIiIiMoQlQZeyX8QuiqMjY2LnAwRERERERG9H5WKPFNTU8hkMpU2mJOT814JERERERERUdGpVOQdO3ZM+ndcXBzGjx+PAQMGwNPTEwAQERGBtWvXIiAgoGSyJCIiIiIiIpWoVOQ1adJE+vf06dOxcOFC9OrVS2pr3749XFxcsHz5cvTv37/4syQiIiIiIiKVqD3wSkREBNzd3Qu0u7u7IzIysliSIiIiIiIioqJRu8izs7PDr7/+WqB92bJlsLOzK5akiIiIiIiIqGhU6q75pp9++gldunTBoUOH4OHhAQA4c+YM7ty5gx07dhR7gkRERERERKQ6ta/ktW7dGjdv3kT79u2RnJyMp0+fokOHDrh58yZat25dEjkSERERERGRior0MHQ7OzvMnj0bO3fu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2Ni4tNP5x1ST0s6A6OM1NaW0MyhePB8QFV0ZOx84jN9X2ikQfbTi5ih/XNu/TdUapNRH1yQiIiIiIqLiwyKPiIiIiIioDGGRR0REREREVIawyCMiIiIiIipDWOQRERERERGVISzyiIiIiIiIyhAWeURERERERGUIizwiIiIiIqIyhEUeERERERFRGcIij4iIiIiIqAxhkUdERERERFSGsMgjIiIiIiIqQ1jkERERERERlSEs8oiIiIiIiMoQFnlERERERERlCIs8IiIiIiKiMoRFHhERERERURnCIo+IiIiIiKgMYZFHRERERERUhrDIIyIiIiIiKkNY5BEREREREZUhLPKIiIiIiIjKEBZ5REREREREZQiLPCIiIiIiojKERR4REREREVEZwiKPiIiIiIioDGGRR0REREREVIawyCMiIiIiIipDWOQRERERERGVISzyiIiIiIiIyhAWeURERERERGUIizwiIiIiIqIyhEUeERERERFRGcIij4iIiIiIqAxhkUdERERERFSGlHqRFxQUBEdHR+jp6cHNzQ0nT54sNH7jxo2oU6cODAwMYGNjg4EDB+Lp06fS8jVr1kAmkxWYXr9+/V77JSIiIiIi+hiUapG3detWjBw5EhMnTsSFCxfQqFEj+Pn5IT4+XmH8qVOn0K9fPwwaNAhXr17Fb7/9hnPnzuGrr76SizM2NkZCQoLcpKenV+T9EhERERERfSy0SnPnCxcuxKBBg6QibdGiRTh06BCCg4MREBBQIP7MmTNwcHCAv78/AMDR0RFDhw5FYGCgXJxMJoO1tXWx7RcAMjIykJGRIc2npKQAAFJTU9U44n9BhijtDIg+Xh/a9/l98XxAVHRl7HyQm5Fe2ikQfbQ+pN/7+bkI8Y7/40UpycjIEJqammLnzp1y7f7+/qJx48YK1zl9+rTQ0dER+/btE7m5uSIxMVE0btxYDB06VIpZvXq10NTUFJUrVxYVK1YUbdq0EX/99dd77VcIIaZMmSIAcOLEiRMnTpw4ceLEiVOpTvfv3y+01iq1K3lJSUnIycmBlZWVXLuVlRUSExMVruPl5YWNGzeiR48eeP36NbKzs9G+fXssWbJEiqlevTrWrFkDFxcXpKam4ueff4a3tzcuXryIqlWrFmm/ADBhwgSMHj1ams/NzUVycjLMzc0hk8mK8hLQf0xqairs7Oxw//59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", + "image/png": "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IipPNDQ0YG9vj8TERDx8+LCs0yGi90CFChVQvXp1hQJPHSzyiIiIiMqQjo4OqlevjpycnFKfQp6I3m+amprQ0tJ65yv6LPKIiIiIyphMJoO2trbcbOFERMX1QT1CgYiIiIiIiIrGIo+IiIiIiKgcYZFHRERERERUjrDIIyIiIiIiKkdY5BEREREREZUjLPKIiIiIiIjKERZ5RERERERE5QiLPCIiIiIionKERR4REREREVE5wiKPiIiIiIioHGGRR0REREREVI6wyCMiIiIiIipHWOQRERERERGVIyzyiIiIiIiIyhEWeUREREREROUIizwiIiIiIqJyhEUeERERERFROcIij4iIiIiIqBxhkUdERERERFSOsMgjIiIiIiIqR1jkERERERERlSMs8oiIiIiIiMoRFnlERERERETlCIs8IiIiIiKicoRFHhERERERUTnCIo+IiIiIiKgcYZFHRERERERUjrDIIyIiIiIiKkdY5BEREREREZUjWupukJmZicjISMTHxyMjIwMWFhZwdnaGvb19aeRHREREREREalC5yAsLC8OyZcuwZ88eZGVlwcTEBPr6+khJSUFmZiYcHBwwYsQIjBo1ChUrVizNnImIiIiIiKgQKg3X7Nq1K3r16oWqVasiJCQEz58/x5MnT3D//n1kZGTg5s2bmDp1Ko4cOQJHR0eEhoaWdt5ERERERESkhEpFnpeXF+Lj4/HDDz+gRYsWqFChgtx6BwcHDB48GIcOHcKff/6p8sFPnjyJzp07o0qVKpDJZNizZ89btzlx4gRcXFygp6cHBwcH/PLLLwoxO3fuRN26daGrq4u6deti9+7dCjGBgYGwt7eHnp4eXFxccOrUKZXzJiIiIiIiel+pVOSNHj0aOjo6b40TQqBevXr45JNPVDp4eno6GjZsiJ9//lml+Li4OHTo0AHNmzfHhQsX8N1338HPzw87d+6UYsLDw+Hr64uBAwfi4sWLGDhwIPr06YOzZ89KMdu3b8eYMWMwZcoUXLhwAc2bN4ePjw8SEhJUyoOIiIiIiOh9JRNCCHU28Pf3x+TJkxXac3NzMWDAAGzdurV4ichk2L17N7p161ZozMSJE/HHH38gNjZWahs1ahQuXryI8PBwAICvry/S0tJw8OBBKaZ9+/aoVKmSlFvTpk3RqFEjBAUFSTF16tRBt27d4O/vr1K+aWlp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SDUqF3kzZ87E+PHjceXKFcTHx2PChAno0qULDh06VJr5ERERERERkRpUflDD1atXsXHjRgD5z3j49ttvUa1aNfTq1Qtbt25FkyZNSi1JIiIiIiIiUo3KRZ6uri6ePXsm19avXz9oaGigb9++WLRoUUnnRkRERERERGpSucj7+OOPcezYMbi4uMi1+/r6Ii8vD4MHDy7x5IiIiIiIiEg9Khd5X3zxBU6ePKl0Xb9+/QAAK1euLJmsiIiIiIiIqFhULvK6d++O7t27F7q+X79+UrFHREREREREZUPlIu91CQkJSExMhKamJuzs7GBubl7SeREREREREVExqPUw9MDAQNja2sLe3h4eHh5o2rQpLC0t0axZM0RFRZVWjkRERERERKQilYu8H374AXPnzsW4ceMQGBiIWrVqYebMmdi/fz8cHBzQokULnD9/vjRzJSIiIiIiordQebjm8uXLERwcDB8fHwBA69at4eHhgaSkJLRv3x6VKlXCd999h8OHD5daskRERERERFQ0la/kPXr0CHXq1JGWa9asidTUVDx+/BgA8NlnnyE8PLzkMyQiIiIiIiKVqXwlz9HREaGhoRg+fDgA4NixY9DR0YGVlRUAQE9PDzKZrHSyJCIiIqJis5u0v6xTIPpgxX/fsaxTUJvKRd7kyZMxYMAA/Pnnn9DT08OuXbvg5+cnFXbHjx9H/fr1Sy1RIiIiIiIiejuVh2v26dMHv//+O7S0tJCeno7FixfD399fWt+rVy/s3bu3VJIkIiIiIiIi1aj1nDwfHx9p4pU3mZmZlUhCREREREREVHxqPSevKDk5OUhISCip3REREREREVExlFiRd/XqVdjb25fU7oiIiIiIiKgYSqzIIyIiIiIiorKn8j15jRo1KnL9y5cv3zkZIiIiIiIiejcqF3kxMTHo27dvoUMyExMTcePGjRJLjIiIiIiIiNSncpFXv359NG3aFF988YXS9dHR0Vi1alWJJUZERERERETqU/mevGbNmuH69euFrq9YsSJatGhRIkkRERERERFR8ah8JW/JkiVFrq9RowaOHTv2rvkQERERERHRO+DsmkREREREROWISkWeug85f/DgQbGSISIiIiIionejUpHXuHFjDB8+HJGRkYXGpKamYtWqVahfvz527dpVYgkSERERERGR6lS6Jy8mJgb+/v5o3749tLW14erqiipVqkBPTw9Pnz5FTEwMrl69CldXVyxcuBA+Pj6lnTcREREREREpodKVPDMzM/zwww94+PAhgoKC4OjoiOTkZNy8eRMA0L9/f0RFReHMmTMs8IiIiIiIiMqQSlfyLl26hPr160NPTw89evRAjx49SjsvIiIiIiIiKgaVruQ5OzsjOTkZAODg4IAnT56UalJERERERERUPCoVeSYmJoiLiwMAxMfHIy8vr1STIiIiIiIiouJRabhmz5490bJlS1hbW0Mmk8HV1RWamppKY+/cuVOiCRIREREREZHqVCryVq5ciR49euDWrVvw8/PD8OHDUbFixdLOjYiIiIiIiNSkUpEHAO3btwcAREVF4euvvy6xIi8wMBALFy5EYmIi6tWrhyVLlqB58+aFxi9fvhw///wz4uPjUb16dUyZMgWDBg2S1rdq1QonTpxQ2K5Dhw7Yv38/AGDmzJmYNWuW3HpLS0skJSWVyDkRERERERGVFZWLvAJr164tsYNv374dY8aMQWBgIDw9PbFixQr4+PggJiYG1atXV4gPCgrC5MmTsWrVKjRu3BiRkZEYPnw4KlWqhM6dOwMAdu3ahaysLGmbJ0+eoGHDhujdu7fcvurVq4c///xTWi5s+CkREREREdGHRO0iryQtXrwYw4YNw+effw4AWLJkCUJCQhAUFAR/f3+F+I0bN2LkyJHw9fUFkD/TZ0REBBYsWCAVeaampnLbbNu2DRUqVFAo8rS0tGBlZaVyrpmZmcjMzJSW09LSVN6WiIiIiIjo36LS7JqlISsrC1FRUfDy8pJr9/LyQlhYmNJtMjMzoaenJ9emr6+PyMhIZGdnK90mODgYffv2hYGBgVz7zZs3UaVKFdjb26Nv375vnTDG398fxsbG0svGxuZtp0hERERERPSvK7MiLzk5Gbm5ubC0tJRrL+reOG9vb6xevRpRUVEQQuD8+fNYs2YNsrOzpef4vS4yMhJXrlyRrhQWaNq0KTZs2ICQkBCsWrUKSUlJ8PDwKPL5f5MnT0Zqaqr0unfvXjHOmoiIiIiIqHSpXOR99913iIyMLPEEZDKZ3LIQQqGtwLRp0+Dj4wM3Nzdoa2uja9euGDJkCADl99QFBwejfv36aNKkiVy7j48PevbsCScnJ7Rr106akGX9+vWF5qmrqwsjIyO5FxERERER0ftG5SIvMTERnTp1grW1NUaMGIH9+/fL3aOmLnNzc2hqaipctXv06JHC1b0C+vr6WLNmDTIyMhAfH4+EhATY2dmhYsWKMDc3l4vNyMjAtm3bFK7iKWNgYAAnJyfcvHmz2OdDRERERET0PlC5yFu7di3+/vtv7NixAyYmJvjmm29gbm6OHj16YN26dUqHSxZFR0cHLi4uCA0NlWsPDQ2Fh4dHkdtqa2ujWrVq0NTUxLZt29CpUydoaMifyo4dO5CZmYkBAwa8NZfMzEzExsbC2tparXMgIiIiIiJ636h1T55MJkPz5s0REBCAa9euITIyEm5ubli1ahWqVq2KFi1a4IcffsCDBw9U2t+4ceOwevVqrFmzBrGxsRg7diwSEhIwatQoAPn3wb3+DLwbN25g06ZNuHnzJiIjI9G3b19cuXIF8+fPV9h3cHAwunXrBjMzM4V148ePx4kTJxAXF4ezZ8+iV69eSEtLw+DBg9V5O4iIiIiIiN477/QIhTp16qBOnTqYMGECHj9+jD/++AN//PEHgPxC6m18fX3x5MkTzJ49G4mJiahfvz4OHDgAW1tbAPlDRBMSEqT43NxcLFq0CNevX4e2tjZat26NsLAw2NnZye33xo0bOH36NA4fPqz0uPfv30e/fv2QnJwMCwsLuLm5ISIiQjouERERERHRh0omhBBlncSHKC0tDcbGxkhNTX2vJmGxm7S/rFMg+mDFf9+xrFMoUewPiIqP/QERFXif+gNVa5Aye4QCERERERERlTwWeUREREREROUIizwiIiIiIqJyhEUeERERERFROaL27JqZmZmIjIxEfHw8MjIyYGFhAWdnZ9jb25dGfkRERERERKQGlYu8sLAwLFu2DHv27EFWVhZMTEygr6+PlJQUZGZmwsHBASNGjMCoUaNQsWLF0syZiIiIiIiICqHScM2uXbuiV69eqFq1KkJCQvD8+XM8efIE9+/fR0ZGBm7evImpU6fiyJEjcHR0RGhoaGnnTUREREREREqodCXPy8sLv/76K3R0dJSud3BwgIODAwYPHoyrV6/i4cOHJZokERERERERqUalIm/06NEq7UwIgXr16qFevXrvlBQREREREREVj9qza/r7+yttz83NxaeffvrOCREREREREVHxqV3kLVmyBCtXrpRry83NRd++fREdHV1SeREREREREVExqP0IhQMHDqBdu3YwMTFBnz59kJ2dDV9fX1y7dg3Hjh0rjRyJiIiIiIhIRWoXeS4uLti9eze6du0KXV1dBAcH4/bt2zh27BgsLS1LI0ciIiIiIiJSkdrDNQGgVatW2LhxI3r16oX4+HicOHGCBR4REREREdF7QKUreT169FDabmFhARMTE4wYMUJq27VrV8lkRkRERERERGpTqcgzNjZW2u7t7V2iyRAREREREdG7UanIW7t2bWnnQURERERERCWgWPfkve748eN4+fJlSeRCRERERERE7+idizwvLy/Ex8eXQCpERERERET0rlR+hEKjRo2Utufk5KBnz57Q09MDAPz1118lkxkRERERERGpTeUi7/Lly2jXrh3c3NykNiEELl68iNatW6Ny5cqlkiARERERERGpTuUi7/jx4xg8eDCaNGmCGTNmQEMjf6TnvHnzMHr0aNStW7fUkiQiIiIiIiLVqHxPnqenJ/766y/cuHED7u7uuH37dmnmRURERERERMWg1sQrRkZG2Lp1K0aNGoVmzZph5cqVkMlkpZUbERERERERqUnl4ZqvGzp0KJo1a4b+/fsjJyenpHMiIiIiIiKiYipWkQcANWvWREREBJ4/fw4jI6OSzImIiIiIiIiKqdhFHgBoaGjA2Ni4pHIhIiIiIiKid/TOD0MvMHjwYLRp06akdkdERERERETF8E5X8l5XtWpV6bEKREREREREVDZKrMibP39+Se2KiIiIiIiIiomX3oiIiIiIiMoRlYu8CxcuIC4uTlretGkTPD09YWNjg2bNmmHbtm2lkiARERERERGpTuUib9iwYYiPjwcArF69GiNGjICrqyumTJmCxo0bY/jw4VizZk1p5UlEREREREQqUPmevOvXr6NGjRoAgMDAQCxZsgQjRoyQ1jdu3Bjz5s3DZ599VvJZEhERERERkUpUvpKnr6+Px48fAwAePHiApk2byq1v2rSp3HBOVQUGBsLe3h56enpwcXHBqVOnioxfvnw56tSpA319fdSqVQsbNmyQW79u3TrIZDKF16tXr97puERERERERB8ClYs8Hx8fBAUFAQBatmyJ3377TW79jh078NFHH6l18O3bt2PMmDGYMmUKLly4gObNm8PHxwcJCQlK44OCgjB58mTMnDkTV69exaxZszB69Gjs3btXLs7IyAiJiYlyLz09vWIfl4iIiIiI6EOh8nDNBQsWwNPTEy1btoSrqysWLVqE48ePo06dOrh+/ToiIiKwe/dutQ6+ePFiDBs2DJ9//jkAYMmSJQgJCUFQUBD8/f0V4jdu3IiRI0fC19cXAODg4ICIiAgsWLAAnTt3luJkMhmsrKxK7LhEREREREQfCpWv5FWpUgUXLlyAu7s7Dh06BCEEIiMjcfjwYVSrVg1nzpxBhw4dVD5wVlYWoqKi4OXlJdfu5eWFsLAwpdtkZmbKXZED8oeRRkZGIjs7W2p78eIFbG1tUa1aNXTq1AkXLlx4p+MWHDstLU3uRURERERE9L5R6zl5JiYm+P7773H16lW8fPkSmZmZiI+Px+bNm+Hq6qrWgZOTk5GbmwtLS0u5dktLSyQlJSndxtvbG6tXr0ZUVBSEEDh//jzWrFmD7OxsJCcnAwBq166NdevW4Y8//sDWrVuhp6cHT09P3Lx5s9jHBQB/f38YGxtLLxsbG7XOl4iIiIiI6N9Q5g9Dl8lkcstCCIW2AtOmTYOPjw/c3Nygra2Nrl27YsiQIQAATU1NAICbmxsGDBiAhg0bonnz5tixYwccHR2xbNmyYh8XACZPnozU1FTpde/ePXVPlYiIiIiIqNSpXOR17twZGzduxMuXL0vkwObm5tDU1FS4evbo0SOFq2wF9PX1sWbNGmRkZCA+Ph4JCQmws7NDxYoVYW5urnQbDQ0NNG7cWLqSV5zjAoCuri6MjIzkXkRERERERO8blYu8/fv347PPPoO1tTW++OILREVFvdOBdXR04OLigtDQULn20NBQeHh4FLmttrY2qlWrBk1NTWzbtg2dOnWChobyUxFCIDo6GtbW1u98XCIiIiIiovedyrNrAsDFixdx+PBhrFmzBitXrkT9+vUxfPhw9O/fH5UqVVL74OPGjcPAgQPh6uoKd3d3rFy5EgkJCRg1ahSA/CGSDx48kJ6Fd+PGDURGRqJp06Z4+vQpFi9ejCtXrmD9+vXSPmfNmgU3NzfUrFkTaWlpWLp0KaKjo7F8+XKVj0tERERERPShUqvIMzc3x5gxYzBmzBhERkYiODgYU6dOxYQJE9CtWzd8/vnnaNOmjcr78/X1xZMnTzB79mwkJiaifv36OHDgAGxtbQEAiYmJcs+uy83NxaJFi3D9+nVoa2ujdevWCAsLg52dnRTz7NkzjBgxAklJSTA2NoazszNOnjyJJk2aqHxcIiIiIiKiD5VMCCFUCdTQ0EBSUhIqV64s1/7y5Uts374dwcHBCAsLQ25ubqkk+r5JS0uDsbExUlNT36v78+wm7S/rFIg+WPHfdyzrFEoU+wOi4mN/QEQF3qf+QNUa5J1n19TX18eQIUNw6tQpXLt27V13R0RERERERO9A5SKvZcuW0NHRKTKmZs2a75wQERERERERFZ/K9+QdO3asNPMgIiIiIiKiElDmD0MnIiIiIiKiklNiRV5sbCwcHBxKandERERERERUDCVW5GVlZeHu3bsltTsiIiIiIiIqBpXvyRs3blyR6x8/fvzOyRAREREREdG7UbnI++mnn/Dxxx8X+jyGFy9elFhSREREREREVDwqF3k1a9bE2LFjMWDAAKXro6Oj4eLiUmKJERERERERkfpUvifPxcUFUVFRha6XyWQQQpRIUkRERERERFQ8Kl/JW7RoETIzMwtd37BhQ+Tl5ZVIUkRERERERFQ8Khd5VlZWpZkHERERERERlYBSeRg6h20SERERERGVDZWKvDp16mDLli3IysoqMu7mzZv44osvsGDBghJJjoiIiIiIiNSj0nDN5cuXY+LEiRg9ejS8vLzg6uqKKlWqQE9PD0+fPkVMTAxOnz6NmJgYfPXVV/jyyy9LO28iIiIiIiJSQqUir02bNjh37hzCwsKwfft2bNmyBfHx8Xj58iXMzc3h7OyMQYMGYcCAATAxMSnllImIiIiIiKgwKk+8AgAeHh7w8PAorVyIiIiIiIjoHal0T56pqSmSk5MBAJ999hmeP39eqkkRERERERFR8ahU5GVlZSEtLQ0AsH79erx69apUkyIiIiIiIqLiUWm4pru7O7p16wYXFxcIIeDn5wd9fX2lsWvWrCnRBImIiIiIiEh1KhV5mzZtwo8//ojbt29DJpMhNTWVV/OIiIiIiIjeQyoVeZaWlvj+++8BAPb29ti4cSPMzMxKNTEiIiIiIiJSn1qzawJAXFxcaeRBREREREREJUCliVeIiIiIiIjow8Aij4iIiIiIqBxhkUdERERERFSOsMgjIiIiIiIqR1SaeKXgQeiqMDIyKnYyRERERERE9G5UKvJMTEwgk8lU2mFubu47JURERERERETFp1KRd+zYMenf8fHxmDRpEoYMGQJ3d3cAQHh4ONavXw9/f//SyZKIiIiIiIhUolKR17JlS+nfs2fPxuLFi9GvXz+prUuXLnBycsLK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Hg0bNiyxxIiIiIiIiEh9ahd5H3/8MWQyGd6cr8XNzQ1r1qwpscSIiIiIiIhIfWoXeXFxcXLLGhoasLCwgJ6eqpMcEBERERERUWlRu8iztbVVaHv27BmLPCIiIiIioveA2hOvLFiwANu3b5eW+/TpA1NTU1StWhUXL14s0eSIiIiIiIhIPWoXeStWrICNjQ0AIDQ0FKGhoTh06BB8fHzw7bfflniCREREREREpDq1h2smJiZKRd6+ffvQp08feHl5wc7ODk2bNi3xBImIiIiIiEh1al/Jq1SpEu7duwcAOHToENq1awcg/1EKubmqPYGdiIiIiIiISofaV/J69OiBTz/9FDVr1sSTJ0/g4+MDAIiOjsZHH31U4gkSERERERGR6tQu8n788UfY2dnh3r17CAgIgKGhIYD8YZxffvlliSdIREREREREqlO7yNPW1sb48eMV2seMGVMS+RAREREREdE7ULvIKxATE4OEhARkZWXJtXfp0uWdkyIiIiIiIqLiUbvIu3PnDrp3747Lly9DJpNBCAEAkMlkAMDJV4iIiIiIiMqQ2rNrfv3117C3t8fff/+NChUq4OrVqzh58iRcXV1x/PjxUkiRiIiIiIiIVKX2lbzw8HAcPXoUFhYW0NDQgIaGBpo1awZ/f3/4+fnhwoULpZEnERERERERqUDtK3m5ubnSjJrm5uZ4+PAhAMDW1hbXr18v2eyIiIiIiIhILWpfyatfvz4uXboEBwcHNG3aFAEBAdDR0cHKlSvh4OBQGjkSERERERGRitQu8qZOnYr09HQAwNy5c9GpUyc0b94cZmZm2L59e4knSERERERERKpTu8jz9vaW/u3g4ICYmBikpKSgUqVK0gybREREREREVDbUvievwK1btxASEoKXL1/C1NS0JHMiIiIiIiKiYlK7yHvy5Anatm0LR0dHdOjQAYmJiQCAzz//HN98802JJ0hERERERESqU7vIGzt2LLS1tZGQkIAKFSpI7b6+vjh06FCJJkdERERERETqUfuevMOHDyMkJATVqlWTa69Zsybu3r1bYokRERERERGR+tS+kpeeni53Ba9AcnIydHV1SyQpIiIiIiIiKh61i7wWLVpgw4YN0rJMJkNeXh4WLlyI1q1bl2hyREREREREpB61h2suXLgQrVq1wvnz55GVlYUJEybg6tWrSElJwZkzZ0ojRyIiIiIiIlKR2lfy6tati0uXLqFJkyb45JNPkJ6ejh49euDChQuoUaOG2gkEBgbC3t4eenp6cHFxwalTp4qMX758OerUqQN9fX3UqlVL7qpigZ07d6Ju3brQ1dVF3bp1sXv37nc+LhERERER0YdA7St5AGBlZYVZs2a988G3b9+OMWPGIDAwEJ6enlixYgV8fHwQExOD6tWrK8QHBQVh8uTJWLVqFRo3bozIyEgMHz4clSpVQufOnQEA4eHh8PX1xZw5c9C9e3fs3r0bffr0wenTp9G0adNiHZeIiIiIiOhDIRNCCHU3evXqFS5duoRHjx4hLy9Pbl2XLl1U3k/Tpk3RqFEjBAUFSW116tRBt27d4O/vrxDv4eEBT09PLFy4UGobM2YMzp8/j9OnTwPIf5RDWloaDh48KMW0b98elSpVwtatW4t1XADIzMxEZmamtJyWlgYbGxukpqbCyMhI5XMubXaT9pd1CkQfrPjvO5Z1CiWK/QFR8bE/IKIC71N/kJaWBmNj47fWIGpfyTt06BAGDRqE5ORkhXUymQy5ubkq7ScrKwtRUVGYNGmSXLuXlxfCwsKUbpOZmQk9PT25Nn19fURGRiI7Oxva2toIDw/H2LFj5WK8vb2xZMmSYh8XAPz9/Uvk6iUREREREVFpUvuevK+++gq9e/dGYmIi8vLy5F6qFnhA/iMXcnNzYWlpKdduaWmJpKQkpdt4e3tj9erViIqKghAC58+fx5o1a5CdnS0VnUlJSUXuszjHBYDJkycjNTVVet27d0/lcyUiIiIiIvq3qH0l79GjRxg3bpxCkVRcMplMblkIodBWYNq0aUhKSoKbmxuEELC0tMSQIUMQEBAATU1NtfapznEBQFdXl88BJCIiIiKi957aV/J69eqF48ePv/OBzc3NoampqXD17NGjR4UWkPr6+lizZg0yMjIQHx+PhIQE2NnZoWLFijA3NweQPylMUfssznGJiIiIiIg+FGpfyfv555/Ru3dvnDp1Ck5OTtDW1pZb7+fnp9J+dHR04OLigtDQUHTv3l1qDw0NRdeuXYvcVltbG9WqVQMAbNu2DZ06dYKGRn696u7ujtDQULn78g4fPgwPD493Pi4REREREdH7Tu0ib8uWLQgJCYG+vj6OHz8uN8RRJpOpXOQBwLhx4zBw4EC4urrC3d0dK1euREJCAkaNGgUg/z64Bw8eSM/Cu3HjBiIjI9G0aVM8ffoUixcvxpUrV7B+/Xppn19//TVatGiBBQsWoGvXrvj999/x559/SrNvqnJcIiIiIiKiD5XaRd7UqVMxe/ZsTJo0Sbp6Vly+vr548uQJZs+ejcTERNSvXx8HDhyAra0tACAxMREJCQlSfG5uLhYtWoTr169DW1sbrVu3RlhYGOzs7KQYDw8PbNu2DVOnTsW0adNQo0YNbN++XXpGnirHJSIiIiIi+lCp/Zw8U1NTnDt3DjVq1CitnD4Iqj6j4t/G5+AQFd/79BycksD+gKj42B8QUYH3qT9QtQZR+1Lc4MGDsX379ndKjoiIiIiIiEqH2sM1c3NzERAQgJCQEDRo0EBh4pXFixeXWHJERERERESkHrWLvMuXL8PZ2RkAcOXKFbl1RT1njoiIiIiIiEqf2kXesWPHSiMPIiIiIiIiKgHvNj0mERERERERvVdY5BEREREREZUjLPKIiIiIiIjKERZ5RERERERE5QiLPCIiIiIionKERR4REREREVE5wiKPiIiIiIioHGGRR0REREREVI6wyCMiIiIiIipHWOQRERERERGVIyzyiIiIiIiIyhEWeUREREREROUIizwiIiIiIqJyhEUeERERERFROcIij4iIiIiIqBxhkUdERERERFSOsMgjIiIiIiIqR1jkERERERERlSMs8oiIiIiIiMoRFnlERERERETlCIs8IiIiIiKicoRFHhERERERUTnCIo+IiIiIiKgcYZFHRERERERUjrDIIyIiIiIiKkdY5BEREREREZUjLPKIiIiIiIjKERZ5RERERERE5QiLPCIiIiIionKERR4REREREVE5UuZFXmBgIOzt7aGnpwcXFxecOnWqyPjNmzejYcOGqFChAqytrTF06FA8efJEWt+qVSvIZDKFV8eOHaWYmTNnKqy3srIqtXMkIiIiIiL6t5Rpkbd9+3aMGTMGU6ZMwYULF9C8eXP4+PggISFBafzp06cxaNAgDBs2DFevXsWvv/6Kc+fO4fPPP5didu3ahcTEROl15coVaGpqonfv3nL7qlevnlzc5cuXS/VciYiIiIiI/g1lWuQtXrwYw4YNw+eff446depgyZIlsLGxQVBQkNL4iIgI2NnZwc/PD/b29mjWrBlGjhyJ8+fPSzGmpqawsrKSXqGhoahQoYJCkaelpSUXZ2FhUarnSkRERERE9G8osyIvKysLUVFR8PLykmv38vJCWFiY0m08PDxw//59HDhwAEII/P333/jtt9/khmK+KTg4GH379oWBgYFc+82bN1GlShXY29ujb9++uHPnTpH5ZmZmIi0tTe5FRERERET0vimzIi85ORm5ubmwtLSUa7e0tERSUpLSbTw8PLB582b4+vpCR0cHVlZWMDExwbJly5TGR0ZG4sqVK3LDOQGgadOm2LBhA0JCQrBq1SokJSXBw8ND7t6+N/n7+8PY2Fh62djYqHnGREREREREpa/MJ16RyWRyy0IIhbYCMTEx8PPzw/Tp0xEVFYVDhw4hLi4Oo0aNUhofHByM+vXro0mTJnLtPj4+6NmzJ5ycnNCuXTvs378fALB+/fpC85w8eTJSU1Ol171799Q5TSIiIiIion+FVlkd2NzcHJqamgpX7R49eqRwda+Av78/PD098e233wIAGjRoAAMDAzRv3hxz586FtbW1FJuRkYFt27Zh9uzZb83FwMAATk5OuHnzZqExurq60NXVVeXUiIiIiIiIykyZXcnT0dGBi4sLQkND5dpDQ0Ph4eGhdJuMjAxoaMinrKmpCSD/CuDrduzYgczMTAwYMOCtuWRmZiI2NlauSCQiIiIiIvoQlelwzXHjxmH16tVYs2YNYmNjMXbsWCQkJEjDLydPnoxBgwZJ8Z07d8auXbsQFBSEO3fu4MyZM/Dz80OTJk1QpUoVuX0HBwejW7duMDMzUzju+PHjceLECcTFxeHs2bPo1asX0tLSMHjw4NI9YSIiIiIiolJWZsM1AcDX1xdPnjzB7NmzkZiYiPr16+PAgQOwtbUFACQmJso9M2/IkCF4/vw5fv75Z3zzzTcwMTFBmzZtsGDBArn93rhxA6dPn8bhw4eVHvf+/fvo168fkpOTYWFhATc3N0REREjHJSIiIiIi+lDJxJvjHEklaWlpMDY2RmpqKoyMjMo6HYndpP1lnQLRByv++8Ifx/IhYn9AVHzsD4iowPvUH6hag5T57JpERERERERUcljkERERERERlSMs8oiIiIiIiMoRFnlERERERETlCIs8IiIiIiKicoRFHhERERERUTnCIo+IiIiIiKgcYZFHRERERERUjrDIIyIiIiIiKkdY5BEREREREZUjLPKIiIiIiIjKERZ5RERERERE5QiLPCIiIiIionKERR4REREREVE5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", "text/plain": [ "
" ] @@ -362,20 +417,19 @@ }, { "cell_type": "markdown", - "id": "0a6b7302", + "id": "896b46dd", "metadata": {}, "source": [ "## Conclusion\n", "\n", - "* **CW audio filters** and **EQ bands** track the `0.91875` ratio — their corner\n", - " and center frequencies drop ~8% because their coefficient tables are frozen at\n", - " the 24 kHz design rate.\n", - "* The **AM audio lowpass** (and, by the same mechanism, the decimation /\n", - " interpolation / convolution filters) stays put in Hz.\n", + "* **CW audio filters** and **EQ bands** now hold their frequencies across the\n", + " rate change. Their coefficients are regenerated from an analog design spec\n", + " whenever the sample rate changes, so the ratio reads 1.00 instead of 0.91875.\n", + "* **The AM audio lowpass** behaves as it always did \u2014 it was Fs-derived from the\n", + " start.\n", "\n", - "Running the radio at 176.4 kHz with the DSP unchanged therefore works, with the\n", - "only penalty being the ~8% mislabeling/narrowing of the hard-coded CW and EQ\n", - "filters. See `docs/RX_DSP_Chain_Parameters.md` for the full stage inventory.\n" + "The remaining cells check the other half of the question: that regenerating\n", + "these filters reproduced what the frozen tables actually did.\n" ] }, { @@ -385,6 +439,353 @@ "metadata": {}, "outputs": [], "source": [] + }, + { + "cell_type": "markdown", + "id": "393c9a78", + "metadata": {}, + "source": [ + "---\n", + "\n", + "# Generated filters vs the tables they replace\n", + "\n", + "`FilterDesign_test.cpp` sweeps each stage twice at 192 kHz \u2014 once with the\n", + "generated coefficients, once with the original frozen table from\n", + "`reference_filters.cpp` \u2014 and writes both curves. If the redesign was faithful,\n", + "the pairs overlie each other and the difference traces sit on zero.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "f5dbea61", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-28T10:57:20.373287Z", + "iopub.status.busy": "2026-07-28T10:57:20.373027Z", + "iopub.status.idle": "2026-07-28T10:57:20.380023Z", + "shell.execute_reply": "2026-07-28T10:57:20.379456Z" + } + }, + "outputs": [], + "source": [ + "def load_pair(stem):\n", + " \"\"\"Load the generated and reference sweeps for one stage.\n", + "\n", + " FilterDesign_test writes gain already in dB, unlike the linear-gain sweeps\n", + " the ReceiveChain176k tests produce.\n", + " \"\"\"\n", + " fg, gg = load_sweep('build/filtercmp_%s_gen.txt' % stem)\n", + " fr, gr = load_sweep('build/filtercmp_%s_ref.txt' % stem)\n", + " return fg, gg, fr, gr\n", + "\n", + "\n", + "def plot_generated_vs_reference(stems, labels, title, cmap, floor_dB=-90):\n", + " fig, (ax, axd) = plt.subplots(2, 1, figsize=(11, 8), sharex=False,\n", + " gridspec_kw={'height_ratios': [3, 1]})\n", + " colors = cmap(np.linspace(0, 0.85, len(stems)))\n", + " worst = 0.0\n", + " for stem, label, c in zip(stems, labels, colors):\n", + " fg, gg, fr, gr = load_pair(stem)\n", + " ax.plot(fg, gg, color=c, lw=1.6, label='%s generated' % label)\n", + " ax.plot(fr, gr, color=c, lw=1.0, ls='--', label='%s frozen' % label)\n", + " keep = gr > floor_dB\n", + " diff = gg[keep] - gr[keep]\n", + " axd.plot(fg[keep], diff, color=c, lw=1.2)\n", + " worst = max(worst, np.max(np.abs(diff)))\n", + "\n", + " ax.set_title('%s (worst difference %.4f dB)' % (title, worst))\n", + " ax.set_ylabel('gain (dB)')\n", + " ax.set_ylim(floor_dB, 5)\n", + " ax.grid(alpha=0.3)\n", + " ax.legend(fontsize=7, ncol=2)\n", + " axd.axhline(0, color='k', lw=0.8)\n", + " axd.set_xlabel('frequency (Hz)')\n", + " axd.set_ylabel('generated\\n- frozen (dB)')\n", + " axd.grid(alpha=0.3)\n", + " plt.tight_layout()\n", + " plt.show()\n", + " return worst\n" + ] + }, + { + "cell_type": "markdown", + "id": "5b1e5244", + "metadata": {}, + "source": [ + "## CW audio filters: generated vs frozen\n", + "\n", + "The frozen tables are 12-pole Chebyshev type I with 0.02 dB ripple. The\n", + "generator places the same poles in closed form from the ripple edge, so the two\n", + "should agree to a few thousandths of a decibel.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "3d09644c", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-28T10:57:20.382462Z", + "iopub.status.busy": "2026-07-28T10:57:20.382236Z", + "iopub.status.idle": "2026-07-28T10:57:20.748421Z", + "shell.execute_reply": "2026-07-28T10:57:20.747374Z" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABEoAAAMWCAYAAADmrWPiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3wUdf748dfsbnohnZAEEjoCCaEjNcEoSkcBgVMOFRWVoyi2UxD4yfm1naigiAXLWUBUkColBkVQivTeElIgCQFSSdnd+f2xZGXZVCBMNr6fj8vJzn5m5r0zn93Zee+nKKqqqgghhBBCCCGEEEIIdFoHIIQQQgghhBBCCFFbSKJECCGEEEIIIYQQ4jJJlAghhBBCCCGEEEJcJokSIYQQQgghhBBCiMskUSKEEEIIIYQQQghxmSRKhBBCCCGEEEIIIS6TRIkQQgghhBBCCCHEZZIoEUIIIYQQQgghhLhMEiVCCCGEEEIIIYQQl0miRAhxXfbu3csDDzxA48aNcXV1xdPTkw4dOvDaa69x/vx5AAYOHIiXlxdGo9Fm3V27dqEoCg0aNLDb7q+//oqiKLzzzjs35XVU5tNPP0VRFBITE63LYmJiiImJuaH7efHFF2nUqBEGgwEfH59y96MoCjNnzrQ+PnjwIDNnzrSJz5FUN/7c3FyeeeYZ7rjjDgIDA+2Ox5VUVeWdd96hVatWuLi40KBBAx577DEuXLhgU+7o0aNMmzaNjh074uPjg5+fHz169GDp0qVViqm0juzYsaPCcjNnzkRRFM6dO1fm823btr3h9ervavXq1eXWi+tVE+//a5GYmMiAAQPw8/NDURSmTJmidUg31ezZs2ndujVms1nrUKrkq6++Yu7cude9nYiICMaNG2d9nJCQgKIoJCQk2JR79913adasGc7OziiKwsWLF4GyrzV/ZydPnuTuu+/Gx8cHT09Pbr/9dv78888qr//nn38SFxeHp6cnPj4+3H333Zw8edKmTHWuMSkpKUyZMoU+ffrg4+ODoih8+umn5e4/Pz+fGTNm0KJFC1xcXPD39yc2NpZjx45V+TVcKTEx0W6fpdeu0j+dTkeDBg3o378/v/32m91rdXZ2rtYxFKK2kUSJEOKaffjhh3Ts2JHt27fz9NNPs3btWn744QdGjBjBggULeOihhwCIjY0lLy/P7gYyISEBDw8Pzp49y+HDh+2eK123tnrvvfd47733btj2li9fzpw5cxg7diybNm1iw4YNVd7PwYMHmTVrlkMnSqoTf1ZWFgsXLqSoqIihQ4dWWHbatGlMnTqVIUOGsHLlSp577jm++uorbr/9dkpKSqzl1q1bx6pVq7jnnnv49ttv+fLLL2nevDkjRoxg9uzZ1/HqhFZWr17NrFmztA6jRk2dOpU//viDTz75hK1btzJ16lStQ7pp0tLSeO2115g9ezY6nWN8pb1RiZKrdejQga1bt9KhQwfrst27dzNp0iRiY2OJj49n69ateHl5lXut+bvKzMykV69eHD16lE8++YQlS5ZQWFhITEwMR44cqXT9w4cPExMTQ3FxMUuWLOGTTz7h6NGj9OrVi8zMTGu56lxjjh8/zpdffomzszP9+/evcP95eXnExMTw8ccf869//Yt169axaNEiunbtSkFBwbUdlAqsXbuWrVu3snnzZt566y3Onj1LTEyMTVKkRYsW/OMf//hbfR6JOkgVQohrsGXLFlWv16t33nmnWlhYaPd8UVGRunz5clVVVXXnzp0qoL7yyis2ZQYPHqyOGTNGbdCggfree+/ZPNe3b181ICBANZvNNfciqmHRokUqoJ46darG9vHyyy+rgJqenl5pWUB96aWXrI+//fZbFVB//vnnGxpTfn7+Dd1eeaobv9lsttaNzMxMu+NRKiUlRdXr9eq//vUvm+VfffWVCqgLFy60LsvMzCyzvg0YMEB1d3cvs55fqbSObN++vcJyL730kgqomZmZZT7fpk0btU+fPhVu4++quvXxiSeeUGvqq06fPn1qxXlq1qyZetddd1Varri4WC0pKbkJEd08zzzzjBoaGqqaTCZN4ygoKKjytWrAgAFqeHj4de8zPDxc/ec//1lhmf/9738qoP7xxx82y6tzramqm3WtqAlPP/206uTkpCYmJlqXZWdnqwEBAerIkSMrXX/EiBFqQECAmp2dbV2WmJioOjk5qc8884x1WXWuMVfW6e3bt6uAumjRojL3P3nyZNXDw0M9ceJEpbFW1alTp+z2Wd6168SJEyqgPv/88zbLd+zYoQLqb7/9dsPiEuJmcoz0uxCi1vnPf/6DoigsXLgQFxcXu+ednZ0ZPHgwANHR0fj6+to0CTabzfz666/ExMTQp08ffv75Z+tzxcXFbN26lZiYGBRFqTCOWbNm0bVrV/z8/PD29qZDhw58/PHHqKpqU668rhlXN18G+P333+nRoweurq6EhITw/PPP27Q8KFVW0/vz58/z+OOPExoairOzM02aNOGFF16gqKiowtcRERHBiy++CED9+vVt4q2sif+nn37KiBEjAEsLnNJmsVc2md2wYQO33XYb3t7euLu706NHDzZu3GizndJmtX/++SfDhw/H19eXpk2bApZmyaNGjSIkJAQXFxfq16/Pbbfdxu7duyt8XTt27GDUqFFERETg5uZGREQEo0ePJikpqVrxX620TGV+//13TCaT3S9yAwcOBOC7776zLgsICChzm126dKGgoMDalaw6zpw5Q8eOHWnevPk1N4EeN26cTXPnK/+utVvJgQMHuOOOO3B3dycwMJAnnniCVatWldl0vzp158CBA4wePZp69epRv359HnzwQbKzs23KqqrKe++9R3R0NG5ubvj6+jJ8+HC7ZuoxMTG0bduWX375he7du+Pu7s6DDz4IwOLFi7njjjto0KABbm5u3HLLLTz33HPk5+fbHLf58+cD2Byz0lZLVY1DVVVee+01wsPDcXV1pUOHDqxZs6ZKx7l9+/b06tXLbrnJZCI0NJS7777buuz999+nXbt2eHp64uXlRatWrfj3v/9d7rZLu1ocP36cNWvW2Ly+0ue++OILnnrqKUJDQ3FxceH48eMAfPLJJ7Rr1w5XV1f8/PwYNmwYhw4dsm67tNl9eX9XutH1o6qKi4v5+OOPGTNmjE1rks6dOzNgwACbspGRkSiKwvbt263Lvv/+exRFYd++fdZlmzdv5rbbbsPLywt3d3e6d+/OqlWrbLZV2sVu3bp1PPjggwQGBuLu7k5RURGZmZk88sgjNGzYEBcXFwIDA+nRo4e1xUZMTAyrVq0iKSmp3ON5tZKSEp555hmCg4Nxd3enZ8+ebNu2za7c1V1vYmJiuO+++wDo2rUriqIwbty4Cq81YHlv3XrrrXh4eODp6Um/fv3YtWuXzb7GjRuHp6cn+/bt44477sDLy4vbbrvNel5efvlla1fHwMBAHnjgAZuWFWC55g0cOJC1a9fSoUMH3NzcaNWqFZ988onda0tNTbUeV2dnZ0JCQhg+fDjp6enWMjk5OUybNo3GjRvj7OxMaGgoU6ZMsflMKM8PP/xA3759CQ8Pty7z9vbm7rvvZsWKFXbdhq9kNBpZuXIl99xzD97e3tbl4eHhxMbG8sMPP1iXVecaU9UWUgUFBXz00UeMGDGCJk2aVGmdq6WlpTFy5Ei8vLyoV68e9957L2fPnq3y+vXq1QPAycnJZnnHjh255ZZbWLBgwTXFJYTWJFEihKg2k8lEfHw8HTt2pGHDhpWW1+l09O7dm82bN1u/cOzevZsLFy7Qp08f+vTpw6ZNm6zlf//9dy5dulSlbjeJiYk8+uijLFmyhO+//567776bf/3rX/y///f/rum1HTx4kNtuu42LFy/y6aefsmDBAnbt2sXLL79c6bqFhYXExsby+eef8+STT7Jq1Sruu+8+XnvtNZsborL88MMP1q5Kpc1ax48fX6WYBwwYwH/+8x8A5s+fz9atW9m6dav1ZuF///sfd9xxB97e3nz22WcsWbIEPz8/+vXrZ3dDA3D33XfTrFkzvv32W+sXnP79+7Nz505ee+011q9fz/vvv0/79u2t/d3Lk5iYSMuWLZk7dy4//fQTr776KmfOnKFz587WMToqi/96FBcXA9gl85ycnFAUhb1791a6jZ9//pnAwECCgoKqte/9+/fTtWtXXFxc2Lp1K82bN7d53mQyYTQa7f6uNn36dOsxKf0rvQFq3bq1tVxVEotgSd706dOHI0eO8P777/P555+Tm5vLxIkT7cpWt+7cc889tGjRgu+++87axenqptePPvooU6ZMIS4ujmXLlvHee+9x4MABunfvbnPjUxrrfffdx5gxY1i9ejWPP/44AMeOHaN///58/PHHrF27lilTprBkyRIGDRpkc9yGDx8OYHPsSsdEqmocs2bN4tlnn+X2229n2bJlPPbYYzz88MNVapL/wAMPsHnzZrsk2bp160hLS+OBBx4A4JtvvuHxxx+nT58+/PDDDyxbtoypU6dWeJNX2tUiODiYHj162L0+gOeff57Tp0+zYMECVqxYQVBQEK+88goPPfQQbdq04fvvv+ftt99m79693HrrrdY4GzRoYFfnfvzxR7y9vbnlllus26+J+lFVf/zxB1lZWXbXibi4OH755Rdrcjs9PZ39+/fj5ubG+vXrreU2bNhA/fr1iYyMBGDTpk307duX7OxsPv74Y77++mu8vLwYNGgQixcvttv/gw8+iJOTE1988QVLly7FycmJ+++/n2XLljFjxgzWrVvHRx99RFxcHFlZWYClG2WPHj0I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eixYsID8/Hy7AUzXrVvH0KFD6dmzJ8uWLSvzJroyfn5+bNiwgVtuuYXY2Fh+//3364o7Ozubu+66C0VRWL16td2vuNXVp08f9u/fbzc44zfffGPzuCbqzsCBA1FVldTU1DK3VzqwZkVKb9CuPjcffPCBXdny6lVV4+jWrRuurq58+eWXNutv2bLFpntARUq7byxbtoxff/2VHTt2WGfvKYuHhwd33XUXL7zwAsXFxRw4cKBK+6mKW2+9FTc3N/73v//ZLE9JSSE+Pt7mM+rjjz9m1qxZzJ49266rDtRM/aiOVq1aAZbBNK8WFxeH0Whk+vTphIWFWcvGxcWxYcMGa5fNUh4eHnTt2pXvv//epq6YzWb+97//ERYWRosWLaoVX6NGjZg4cSK33367zefk1S0mKlI629nV9W/JkiVV6mZXHf369cNgMHDixIlyz2dlBg4cSFZWFiaTqcz1W7ZsWe247rrrLn7++ecKB08eOHAgJ06cwN/fv8z9VpbQHDZsGPHx8SQnJ1uX5ebm8v333zN48OAKuzkZDAYGDRrE999/T25urnX56dOn+fnnn+0Gcr8R15grNWjQgFtvvZXffvuNnJwc6/KCggI2bdpUbhKzVGxsLLm5ufz44482y7/66qsqx2Aymdi3bx8uLi5216eTJ0+i0+mu6dwLoTVpUSKEuCa33nor77//Po8//jgdO3bkscceo02bNpSUlLBr1y4WLlxI27ZtbWahKE1+/PDDD3a/5Ldt2xZ/f39++OEHQkND7WYIKcuAAQP473//y5gxY3jkkUfIysrijTfeKPOLx/3338/06dOZMWMGffr04eDBg8ybN886rV2pF198kR9//JG+ffsyY8YM3N3dmT9/fpWmGBw7dizz58/nn//8J4mJiURGRrJ582b+85//0L9/f5sv5jda27ZtAVi4cCFeXl64urrSuHFj/P39effdd/nnP//J+fPnGT58OEFBQWRmZrJnzx4yMzN5//33K9z23r17mThxIiNGjKB58+Y4OzsTHx/P3r17bVqKXM3b29s6PkhAQAARERFs2rSJjz/+2K4pckXxl2fNmjXk5+dbv5wePHiQpUuXApZZetzd3QH48MMPAcsvfxcvXmTNmjV8/PHH/Oc//6FDhw7W7W3evJmhQ4cSHBzMv//9b7upj1u3bl3lJIWXlxdr1661Nq3+8ccfq5T8K8uYMWM4ePAgCxcuJDk52ebLfFhYmLVF12233camTZsqvYGaMmUKn3zyCXfddRezZ8+mfv36fPXVVxw+fBj4q4m9p6fnddedq/Xo0YNHHnmEBx54gB07dtC7d288PDw4c+YMmzdvJjIykscee6zCbXTv3h1fX18mTJjASy+9hJOTE19++SV79uyxK1ua8Hj11Ve566670Ov1REVFVTkOX19fpk2bxssvv8z48eMZMWIEycnJzJw5s1pdKR588EFeffVVxowZg5ubm92YRw8//DBubm706NGDBg0acPbsWV555RXq1atXbleIa+Hj48P06dP597//zdixYxk9ejRZWVnMmjULV1dXXnrpJcAylsmECRPo0aMHt99+u12yr1u3bjVSP6qjNInw+++/2/2q3rFjR3x9fVm3bp11ZiGwJEpKx2y4+vP4lVde4fbbbyc2NpZp06bh7OzMe++9x/79+/n6668r7RqRnZ1NbGwsY8aMoVWrVnh5ebF9+3br50CpyMhIvv/+e95//306duyITqcrNwlxyy23cN999zF37lycnJyIi4tj//79vPHGG9edML1aREQEs2fP5oUXXuDkyZPceeed+Pr6kp6ezrZt2/Dw8GDWrFkVbmPUqFF8+eWX9O/fn8mTJ9OlSxecnJxISUnh559/ZsiQIXZdMyoze/Zs1qxZQ+/evfn3v/9NZGQkFy9eZO3atTz55JO0atWKKVOm8N1339G7d2+mTp1KVFQUZrOZ06dPs27dOp566im6du1a7j6mTZvGF198wYABA5g9ezYuLi783//9H4WFhXZTsDdr1gzAOtU2WGbG6ty5MwMHDuS5556jsLCQGTNmEBAQwFNPPWUtV91rTOn1rHTWnR07dljH0LnyO9Qbb7xBbGws/fr149lnn0VRFN58803OnTtX6RglY8eO5a233mLs2LHMmTOH5s2bs3r1an766ady19m5c6f1u1N6ejqffPIJhw8fZurUqXatZ37//Xeio6Px9fWtMA4haiXNhpEVQtQJu3fvVv/5z3+qjRo1Up2dnVUPDw+1ffv26owZM9SMjAy78sHBwSqgzps3z+65oUOHqoD6j3/8o8r7/+STT9SWLVuqLi4uapMmTdRXXnlF/fjjj+1mqCkqKlKfeeYZtWHDhqqbm5vap08fdffu3Xaz3qiqZRT7bt26qS4uLmpwcLD69NNPqwsXLqx01htVVdWsrCx1woQJaoMGDVSDwaCGh4erzz//vFpYWFjpa7meWW9U1TKzUOPGjVW9Xm83Wv2mTZvUAQMGqH5+fqqTk5MaGhqqDhgwQP32228r3X96ero6btw4tVWrVqqHh4fq6empRkVFqW+99ZZqNBorfE0pKSnqPffco/r6+qpeXl7qnXfeqe7fv7/M415R/GUJDw8vd9aYK8/TBx98oN5yyy2qu7u76unpqfbq1UtdtmyZ3fYqm42mshl5ypphoqioSL3nnntUV1dXddWqVTb7ufo4l2rTpo3N+a7odV5ZB0pniamK/fv3q3Fxcaqrq6vq5+enPvTQQ+pnn31mN2uMql5f3Sk9JleeD1W1vG+7du2qenh4qG5ubmrTpk3VsWPHqjt27LB5PW3atCkz/i1btqi33nqr6u7urgYGBqrjx49X//zzT7t6U1RUpI4fP14NDAxUFUWxi6UqcZjNZvWVV15RGzZsqDo7O6tRUVHqihUrynxfVqR79+7lfr599tlnamxsrFq/fn3V2dlZDQkJUUeOHKnu3bu30u1WNOvNlefoSh999JEaFRWlOjs7q/Xq1VOHDBliMwtS6Xkr7+9KNVE/qqpXr152M/iUGjZsmAqoX375pXVZcXGx6uHhoep0OvXChQt26/z6669q3759rfWhW7du6ooVK8qM+eoZVgoLC9UJEyaoUVFRqre3t+rm5qa2bNlSfemll9T8/HxrufPnz6vDhw9XfXx8rHWyIkVFRepTTz2lBgUFqa6urmq3bt3UrVu32n2GXu+sN6WWLVumxsbGqt7e3qqLi4saHh6uDh8+XN2wYYO1zD//+U/Vw8OjzHhLSkrUN954Q23Xrp3q6uqqenp6qq1atVIfffRR9dixY9ZyZdVbVS37epecnKw++OCDanBwsOrk5GR9f6Snp1vL5OXlqS+++KLasmVLa72OjIxUp06dajczUlmOHz+uDh06VPX29lbd3d3V2267Td25c6ddufDw8DJnLdqxY4d62223qe7u7qq3t7c6dOhQ9fjx4zZlqnuNqep7UFUtdbdPnz6qu7u76u7urvbt21f97bffKn3dqvrXddrT01P18vJS77nnHnXLli1VmvXGz89P7dq1q/rJJ5+oJpPJZru5ubmqu7u73exiQjgKRVVlYmshhBDi7+6RRx7h66+/Jisr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tNxtzp49myeeeIJp06bx5ptvlltu69at7N69m6efftq67MouGABvvfUW//jHP/jPf/5D7969rS0AZsyYwb/+9S8iIyMxmUzcdtttvPvuu+Xuq3///uzfv58uXbqgqipBQUGsWLHCrtyYMWMYMGAAXbp0oWfPntZjERUVRUlJCdHR0UyePJlHH32UkydPEh0djaqqtGjRgu+//54nnniC++67j+joaPr06VNmi5frFeTlWW53GRcng7WbTVmaBPhVe3/9+vXjzz//JD8/n7CwMH744Qc6d+5M//79+eijjzCZTAwbNozi4mLMZjP33HMPgwYNKnd7N7J+VGTmzJmMGzeOzz//HD8/Pz799FOSkpJYvnw5x48fZ/78+QCsXr2ad999lwkTJrBgwQKMRiNjx451yESJotaF4YP/BnJycqhXrx7Z2dk2zZpuNLPZTEZGBkFBQeh0MimSqDukbou6SOq1qIukXotrVVhYyKlTp2jcuDGurq5ah2NDVVWMRiMGg6HGu5OUp6CgADc3NxRF4fXXXyc9PZ033nhDk1hE3VAb6nVFyvpMqOp9tbQoEUIIIYQQQog6btu2bUyZMgWTyURYWBiff/651iEJUWtJokQIIYQQQggh6riYmJhqdbcQ4u9M2jMKIYQQQgghhBBCXCaJEiGEEEIIIYQQQojLJFFyE7333nvWgWQ6duzIr7/+qnVIQgghhBBCCCGEuIIkSm6SxYsXM2XKFF544QV27dpFr169uOuuuzh9+rTWoQkhhBBCCCGEEOIySZTcJP/973956KGHGD9+PLfccgtz586lYcOGvP/++1qHJoQQQgghhLgBVq5cScuWLWnevDkfffRRmWW++eYbIiMjadu2LaNGjaKoqMiuTExMDPv377dbHhAQYPN42rRpfPrpp1WK7dChQ7Rr147o6GiysrKqtI64sYYNG4avry/Dhw8vt4xW9aO2SExMZMmSJdVeLyIigry8vBsWh8x6cxMUFxezc+dOnnvuOZvld9xxB1u2bNEoqpr1wpI3OOd8CEVnRlVAUVQUQFUVFHSoqCh6k3W5ogAKmE06FEWHTm9E0amAZV0ATDpUVY+imNDrTTb7U1Uwm5xRVBWdoQRU23hMRgOgQ1FKrNtTVctc36pZh6oaQDWju7xdFcXyvKqgmg2oKKAYbdcDVLMeBR1m1QyKiqqqgGLZvVlBUfSoqgmzenVICjpFB6qCGZNla4oCSumzoFP0qKoZVVe6WKV0enIdOlTVDDozpXu0RqUqgM4Sr0796zkFUBUUVQ86E3qdGS6fm9LnVLPBsm9DsfU1KpcPsNFomR9d0RnRKVe+GgWzWQHVgIoJvc6EqoKCgs6gA/SgOl8+lyWWXXE5FgXMZgOKYkBRTJePvO5yGcVyTFSD5Thgsp4XFRWzGRT0qIDRbMJcut3L/69TLHVJxYwZ1XK+VDOKokNRQI8Os9mMWVFxdTVg0FuOvwI46fToFB0m1QiYLa/78vFX0KFX9KiqES7HbPnf5XKqE6gqKkVYqoNqPacKzpb9U4Ji3S6X/2tAVfSoZhMKJZfjBb1Oh6LToVNc0el0OOtNeLg4W56/XB8VxYAOPSazERNmVPXK53ToFQMmVcWoGq+o35az56KznJsS1WhdpmA5NwZFj17RXT6CZi7XrMvHQodBp7eeG0s9K60XKgp6FJ2CyVwEl8+Oao1aD+gxY8RkLrocq1p65tDrXFBVFaO5yPJZcfnoKYoOg+KKTtFjUo2X96mzHD9Fjw4DesUAKpgxYUbBZLbUHFVVLe85wFPvjL+rJ77O7ngYnC3nSFVQFBWTWoJZNVre05dfN5QeQyMmtdDySlTz5Tqt4KTzQEGxvhbQoVMUFPToFWf0OsPlzwZLrDr0lnqpmi3vAdV4+bWaMKtGQIeHIRA3gy+u+nqX/3xw1ftg0LkghBCidjIajTz55JP8/PPPeHt706FDB+6++278/PysZVRV5cknn2Tfvn34+/szatQovv/+e0aPHl3j8S1fvpzRo0fb3ZOYTCb0en2N71/ApEmTePDBB/nss8/KfF7L+nEzVVTnShMlI0eOvMlR2ZJEyU1w7tw5TCYT9evXt1lev359zp49W+Y6RUVFNtnDnJwcAMuNndlcY7GazWZUVb3ufVz0OEjn5sduUFRCiKtdzi1ak2sAep0lBVEWp0q2dy233+Yr8mWlKRDbAhWvrwN05bVrVMC5gjaPeqXs5aYrglAAg87+QleswplLlj9Ho2AgwqM3fYJfQKcYbthnthC1idRrca1K607p3832xx9/0KZNG0JCQgC46667WLt2rfUmtzQmVVXJz8+nXr16FBQUEBwcXGa8qqpSVFTEyJEjGTBgAA8//LDNdkr/raoqqampDBgwALAch3379tm8hzZs2MDcuXMxGAxs2bKFqVOn8sorr+Dj48PZs2f57rvvePDBB0lKSsLPz49FixYRERFB+/btrdvYv38/x48fx9XVlQkTJpCSkoKrqysffvghrVq14oEHHsDb25tt27aRlZXFhx9+SJ8+fW7wUXZsMTExJCQkAJR7zrWoHwBHjx7lH//4BwaDge7du/PLL7+wfft28vLyeOKJJzh06BCqqjJ37lx69OjBzJkzSUlJ4ejRo6SmpjJnzhxGjRoFwJw5c1i+fDlFRUU89thjTJgwgYSEBJs6t2LFCoYNG8bFixdRVZV33nmHnj178sILL3DgwAGio6OZNGkS999/P0899RS///47xcXFvPTSSwwdOpT8/Hzuv/9+Tp06RefOnct875c+vvIeuqrXFkmU3ESKYvvNXlVVu2WlXnnlFWbNmmW3PDMzk8LCwhqJDywVJzs72/Lra7l3MFVwyZv0PE+c9Cb+ag8BZrNCkdEZVVVxcy6xLL+ihUZhsRMqOpwMRvTKX5VYVaHEZMBo0qPTmXEyGG12p6oKRSWWW0FX52Kb5xQFCosNlu3qjRj0Zssv35cPvdGkw2gyoNOZcTEY/2rBcjmmohJnFFRcnUpQFPNf96UKFBv1mM16nPTGy6+19CkVo1mH0WxAQcXFqaR0FavCy/E6OxnRXXWLWWLSYzLr0OtMOOmvOA6A2ayj2GiAyzFdeXwBLhU7oao6nA1GdDqz9QkVhRKT3vJaFftjaDLr7I5haTsV1NJ4FQx6I4bLrVFKGU16Skx6dIoZF6fS7ZZGpFBY4oSiKLgairD8qG/dMsUmA6qqw0lnxGA9hpbWG0ZT6TE043b5GJYeXxVLXQIVF0PJVa1coNikRzXr0ess5/xKZrOOYtPlY2gosYkWoMjoAooOg67Yut3SdiElRj0m1YBOMeGkN17xSsCs6ig2WVp7uOiL7M5NkdEFFQWDrgS98ld9sbSKMWBSDSiYcNaXWBsYqZcLFJmcQVVxMRShKKBTFJx0yuX9ulxuqVKMTjFaI7IcJz0qziiY0Cl/JV9Lkyxm1Q0AHYWA+Yqdgkl1wnKZKEGnGP9qL6KCquoxY2n5odcVWeMsPR5G1RVL26eiyy02sLYNMeGMggEwoaPYGlFpvOCKghmdcmUmw5KKMVMabxFguvx+VS8fBz0qBhSM6JXSY1jaLkpBVV0vlyzAjO37/JLR8tkT4OyMr5Pz5c9mBUu7EFecFDfMqokSCqwtXEqPo7POCxUoNudcbvlkiUlFxQl3FEVHiVqASS26vNxSH/WKC06KB6hQQv7l1lSW1iZGNR+AYjUXE0VXxGrkVH48OYkZdHH/N4qqvzGf2ULUIjfsu4j42ykpKcFsNmM0GjEajZWvcIMlJyfToEED675DQkJITk7GaDSiqiomk+XaP3fuXCIjI3FxcaFv37707NnTLl5VVbl06RLDhw9nwIABPPDAAxiNRi5evEh0dLS13JkzZ3jllVcICgpi+/btALz00kv07dvXZpsxMTE8/PDDBAQE8Pjjj7Np0yb++OMP9u7dS0hICJMnT6Z79+58//33LFmyhH/961/88MMP1m0uWrSINWvWEBoayn333cfzzz9Phw4d2LFjB1OmTGHlypWYzWYuXLjAr7/+ys8//8zs2bP56aefavKQXzOj2UxW0Y3rplHK38UTQyWfWyaTyVpPy6JF/QCYMmUKzz33HEOGDGH69OmW1r1GI7Nnz2bQoEF8/PHHpKSkMGTIEHbu3InZbObkyZOsXr2alJQUBg0axPDhw/npp59IT09ny5YtFBcXExMTw5133onJZLKpcyUlJSxduhQvLy9Onz7Nvffey9atW5k1axbvvfceixcvBmDhwoU0atSIN998k5ycHHr06MHtt9/Ou+++S2hoKEuWLGHNmjV89NFHdu99o9GI2WwmKysLJyfLfU5ubm6VzqUkSm6CgIAA9Hq9XeuRjIwMu1YmpZ5//nmefPJJ6+OcnBwaNmxIYGAg3t7eNRar2WzpDhAYGHhdX07evfu/NzAq4YhMJjN7Ew7w/tRPSTqYQtz9vXl60ROaxWM2m8nMzLSr22azyo4/T/HZV1s5dDgNgHuGdOCJR2/TKtRyqarKy6sT+HrHXgBiWjTmnXsHVnpBFvaMZjNnLl3kdP55TuZmsiv/NBvTDwPwdqdRxAS31DjCvxjNhRSacigyX+Rk7s/su/gVWab97DW+RWz92TfkM1uI2uRGfRcRfz+FhYXk5uZiMBgwGAxknbnA+TMXbMp4+nrSoHEQxYXFJB1MsdtG8w5NAEg+kkZhvu2Pk/UjgvD28yx3/zqdpYulwWCwPtbpdNbHpT755BP27t1LaGgo999/P9988w333XefTRlFURg/fjwPP/wwjz76qHW5j48Pu3fvtj6eNm2azT7Wrl3Lr7/+ysaNG+32e2U8er2eHj160KhRIwC2bNnCqlWrMBgMjB49mqeeesq6/p49e5g3bx6//vorBoOBhIQEjhw5YrNtg8GATqdj4MCBGAwGunTpQlJSkl0MtcW5S9nclfDODd/uuripBDvXq7CMXq8vs16AJdmnVf34888/WbVqFYqiMGbMGDZs2IDBYCA+Pp6ffvqJOXPmAHD+/HnMZjM6nY4BAwbg4uJCq1atuHjxorX8qlWrrDO8Zmdnk5SUZFfnzGYz//73v/ntt9/Q6/UcO3bMWjevjDk+Pp4DBw7wv//9D4CCggLS09P5448/ePrppzEYDAwaNAhfX1/re79Uab309/fH1dUVwPrfytTOmlvHODs707FjR9avX8+wYcOsy9evX8+QIUPKXMfFxQUXF/vG8KUfcDVJUZSbsh9Rt+l0Ojre3o7hTw3mzYfeI2HxFqYseAQXN+3GWCirbut00K1LM7p1acY3S/9gwUcJxG86zGOP3IZBX/veAzMG9sXFycCnW/8k4egppixZxdv3DsRJ+hZXi7NOR7hXAOFeAfQKbsF96q2M/uUDDmWf5Zk/l7LytkkEu1X8Redmcda542xwB4IJdGuFl3N9tmS8Reql7axO+xddXGbIZ7aoc+S7iLgWpYmK0r/VCzfwxexvbcrc9o9ePPfFJM6lnueJzs/ZbWO92VL+jQfnc+h3227kz37+L+Lu613u/sPCwkhLS7O2GE9NTaVr164oimJtSb5r1y4MBgPh4eEA3H333fz888/cf//9dtvr3r07GzZs4LHHHrO5+buyRfqVr/f06dM8+eSTbNiwAWdnZ7vtXVlWURTc3d3L3NaV/87Ozmbs2LF88cUX1Kv313Vx586dZY4x4erqak0WmUymclvPa62m4rryGFa277LK7dmzR7P6UVb8pXV35cqV1gTHlc+5uLjYlQeYOXMmY8eOtSmfkJBgU+e++uorCgoK2LVrF3q93vrc1cdHVVUWLlxI7962773SVofl1eErH195PanqdUUSJTfJk08+yf3330+nTp249dZbWbhwIadPn2bChAlahyZEjep1dxfeengBxmIjW1fsIGZkD61DKtftfdvwwccJXLhYwPYdJ7m1azOtQ7KjKArP3dkHg07HR7/tIP7ISZ5aupq3RgxALzcU10yv6Jjf9T4GbHybS6YSHvv9f3zbZwIGXe1LQLX2uRu94sKv6f/H+eLjbDY+zxDTB7jpakdiRwghaosBj97OrYM72Szz9PUAIDDMn/d2vFruuk8veoLCfNvZRupHBFa4vy5durB//35SU1Px9vZm9erVzJgxw6ZMaGgoe/fu5cKFC/j6+rJx40ZuueWWMrc3ceJElixZwvjx41m0aFGFN+DFxcWMGjWKd955h9DQ0ArjLEvPnj356quvmDZtGkuXLqVLly4APPjgg0yZMoV27dpZy/bp04cPPviAxx9/HLPZzIEDB4iMjKz2PrUU4OLJ+tufrLzgNWz3emhZPzp06MCKFSsYPHgw3377V4IxLi6O+fPn8+qrlvfLnj17bOrD1eLi4nj11VcZMWIEbm5uHDlyxJr4uVJOTg7169fHYDDw7bffWoeX8PLysukeExcXx4IFC+jRowd6vZ7du3cTHR1Njx49WLx4Mbfeeitr167lwoULdvu4HvKt+ia59957mTt3LrNnzyY6OppffvmF1atXl1lphKhLPOp50LZXKwCWz1urcTQV8/fzpGXzYACWLtuhcTQVm3ZHL56MsySd1h08zrqDMnjy9Qp09eK/nSyDkB3PzeC/B9drHFH5WtYbQO/6LwCQZ07lx+RHKDRlaxyVEELULv4NfGneoYnNX4PGlm7vzq7Ods+VdrsBaNgy1O45bz+vCvdnMBh48803iY2NpX379jz99NP4+/sDMGDAANLS0ggJCeG5556je/fuREZGkp2dbdN14mqzZ8/Gw8ODadOmVbjvrVu3snv3bp5++mmio6NtxqmoipkzZ5KQkEBUVBTz58/n7bffJikpieXLl/POO+9Yt5mWlsa7777L+vXriYqKom3btqxatapa+6oNDDo9wW71bvhfZT+w9OvXjxEjRrB69WrCwsKs44b0799f8/rx1ltvMWvWLLp160ZRUZF1uIcZM2aQkZFBZGQkrVu3Lnfa61L9+/dnwIABdOnShbZt2/LYY49Zx+e50pgxY9i0aRNdunRh69at1vdKVFQUJSUlREdHs2jRIh599FFCQkKIjo6mbdu2zJ49G4AnnniCpKQkoqOjWbNmjV2Ll+ulqFoMCS2qLScnh3r16pGdnV3jY5RkZGQQFBQkzV3FDfPL0q38v5H/RdEpfH9uEZ4+Hjc9hqrW7fXxB5jz2kp0OoXlSybh5Vm1foxauffDr9mTcpa+LZvw3piyu/KJ6vm/fav58tQfACy8dSy3BjbVOKLyHc/eQEK6ZeBvD0N9hjRaiLvBr5K1hKjd5LuIuFaFhYWcOnWKxo0bV3kcgpuldGBMg8FQa7ujiL+3goIC3NzcUBSF119/nfT0dN54440K16nt9bqsz4Sq3lfL1UcIUeO6DuiAwdmAalbZtGSL1uFUqHePFjgZdJjNKvEJh7QOp1ID2lpa6/xxKlmTqRDromlt+tHetyEAz+38jnOFVRsdXQtNvPrSyfVZFHTkG9NZlTyRIlPtjVcIIYQQtdO2bdto3749kZGRxMfH8+yzz2odkqYkUSKEqHEubi50H9oZgE3fbtU4moq5uDjRrYtlbJLvf9ypcTSVi2nZGID84hKOZWRpHE3dYNDpea3TCLyd3DhfnM/jf3yJSTVXvqJGgp070S/kDQyKK9klyRy6uEzrkIQQQgjhYGJiYti9ezf79u1jzZo1BAZWPCZPXSeJEiHETXHXg5bpdnfH7yfrzI0dbOlGG3G3ZeC3pNNZpJ25qG0wlWjk54Ovu6UpYfzhkxpHU3cEu9VjTvuhABzKPsO8Qxu1DagSIe4daVlvIACHspdpG4wQQgghhIOTRIkQ4qZo37ctbl6uqKrKnoQDWodTobatw2gQbJlBZH187Y4VoEcTy6DQCcdOaBxJ3RIT3IoR4Zak2SfHf6PAWFTJGtpq7n0XAPnGDC4UndI4GiGEEEIIxyWJEiHETaE36AkMtYxmfXJvksbRVEynU7jjtjYA/LhqV60f+6N/ZEsADp7J5FJxicbR1C3T2vRDh4IZla0ZtbvFjr9Lc9z0loFcD2X/qHE0QgghhBCOSxIlQoibJqxFA6D2J0oAbr+tLQBZ5/M5eChN42gq1qVxQww6HcVGEzuSUrUOp05xNzjTqp5lyuj1Zw5qHE3FFEWhhXd/AI7nrKv1CT4hhBBCiNpKEiVCiJumabRl4NHUY2c0jqRyYSG++Pt7ArD3QLLG0VTM08WZxgG+AKzdf0TjaOqegWHtANiRlVjrkw+l45QUm3PIKNyvcTRCCPH3M2zYMHx9fRk+fHi5ZbZt20abNm1o1qwZs2fPLrNMTEwM+/fbf44HBATYPJ42bRqffvrpdcV8syUmJrJkyZJqrxcREUFeXl4NRHTzVKV+fPPNN0RGRtK2bVtGjRpFUZF919+aqB+HDh2iXbt2REdHk5UlEwRIokQIcdOEt7FMuZqVdl7jSKomopGlq9CBg7W7RQlAXCvLTD2/HE/UNpA6KCbY0rUpvTCHoznpGkdTMW/nUAJcLFNGH89Zr3E0Qgjx9zNp0iQ+//zzCss88cQTfP311xw+fJgVK1aUecPr6EwmU7nPXWuipC6orH6oqsqTTz5JQkKCtV58//33NyW25cuXM3r0aHbv3o2/v791eUXnsi6TRIkQ4qYJbW7pwlBUUEx+dr7G0VSudatQAE4lZmocSeXibmkKQGZeAWeyczWOpm5p6OFHoKsXAOvP1P7BfZt79wPgZO5GzKpR42iEEOLmM5nMZGTm1Mif0VTxdPGxsbF4eXmV+3xaWhpGo5GoqCgMBgNjxoxhxYoV5ZYvLi5myJAhfPjhhxXuNy0tjejoaKKjo4mKikJRFLsyR48epVOnTnTr1o2nnnqKTp0sA5bn5eUxduxYOnfuTKdOnfjtt98AmDlzJuPHj6d37940adKEb775xrqtOXPm0LlzZ6KioliwYAEACQkJ3HHHHYwcOZLY2FhycnLo27cvHTp0oH379mzevBmAF154gQ0bNhAdHc2iRYswGo1MnjyZLl26EB0dzbJlywDIz89n2LBhREdH88gjj9T6Vp1VUVn9AEuypKCgAJPJREFBAQ0aNCi37I2qHxs2bGDu3LnMmzePwYMH253Lc+fOMWjQIKKiooiJiSExMRGA9u3b06lTJ9q3b4/BYCApKYn09HSGDh1Kp06d6NmzJ4cPHwZg3LhxTJ48mW7dutG8eXM2bdpUhSOmHYPWAQgh/j5CmgZb/516/CwtOjbVMJrKtWxhiffc+TxUVS3zS0dtcUtwEG5OBi6VGPnl6Cnu7RyldUh1Sq+g5nx/+k9+Sj3AxFa3aR1OhRp79WVr5jsUmXNIydtGI6/uWockhBA31fkL+dw//pMa2faSLx4jKND7mtdPS0sjNDTU+jgsLKzcG8bi4mJGjBjBwIEDefjhhwG4ePEi0dHRNtt77bXXCAkJYffu3QBMnz6duLg4u+1NmTKFF198kaFDh/LCCy9Yl7/88ssMGzaMzz//nJSUFAYMGMCePXsAOHXqFPHx8SQlJdGvXz9GjRrF2rVrycjIYPv27RQXF9OzZ08GDrR0/fzjjz84dOgQISEhlJSUsHz5cry8vDh9+jT33HMP27dvZ86cOcybN4+lS5cCsGDBAiIiInj77bfJycmha9eu3HXXXcyfP5+GDRvyww8/sHr16kqTAdciszCXzELbH5i8ndwI8/ClyFTCiVz7H8ta+4RYjk3eOS4Zi63LA129rD+sXCtFUZg3bx5t27bFxcWFuLg4YmJiyix7I+tHXFwcEyZMICAggIkTJ5KQkGBzLidOnEivXr1YsWIFixcvZtKkSfz444/s2rULo9HIZ599xpo1awgPD2f06NFMnz6djh07sn37dqZMmcLatWut8f3+++/Ex8cze/ZsNm7ceF3HqyZJokQIcdO4e7nh7e9FTlYuKUfP1PpESeNwSz/PoiIjGZm51A+69i9GNU2nU+gYHsrm40msP3xcEiU32F2hkXx/+k8S87PILi6gnrO71iGVy93gR4BLc84VHeVg9veSKBFCiFqkrFYR5f0QM27cOB555BHrTTCAj4+P9YYXLGNQXGnt2rUkJCQQHx9vt72dO3cyZMgQAEaNGsVPP/0EwPr161m9ejWzZs0CICsri+JiSwKgf//+GAwGmjZtysWLF63lV6xYYU3wZGdnc+LECQB69OhBSEiI9bU+88wzbN68Gb1ez7Fjx8p8nevXr+fAgQN89tlngKUlSWpqKlu2bOGZZ56xxuHr61vm+tfj28QdvH80wWbZgNAo/q/jPaRfyuHeXz6wW2ffYMtxenHXD+y9kGJd/liLGB5vFXtd8ZSUlLBw4UL27dtHaGgo9913H//73/+477777Mre6PpxtSvP5ebNm1m9ejUAI0eOZPLkydZye/bs4Z133rG2GIqPj+fQoUNlbnPw4MEAdOzY0doqpbaSRIkQ4qaqF2hJlJzadxpGax1NxRoE++DsrKe42ERiUmatTpQADIhsyebjSexLPYvJbEavk96VN0pH/0YYFB1G1cyv6ccZ2LB2J6Ja+9zDL+mvkFqwkxLzJZx0blqHJIQQN42frwdLvnisZrbt53ld64eGhpKa+tcMdSkpKeV2rejevTvr169nwoQJGAyV37adPn2aqVOnsmHDBpycnCose2XCRlVVVq5cSaNGjezKubi4lLnuzJkzGTt2rM3yhIQE3N3/+iHhyy+/JD8/n127dqHX622eu3p7CxcupHfv3nbLa7o174iITtaxyEp5O1mumfXdvFnc+9Fy1325/TC7FiXXa/fu3RgMBuu5uPvuu/n555/LTJTUZP0Ayj1f8FdyLzs7mwceeIAvvvgCb++/vifv3LkTvV5vt15pfdLr9bV+7BP5Fi2EuKnCmlsy0yf2JGobSBXodAq+Ph4AHD1WuwfxBOjZNAKA7EtF7Eut/fE6EiedgXa+lsGIf0qr/YPuRXjFoKBHxUhS7q9ahyOEEDeVXq8jKNC7Rv4M+uu7fQoJCUGv17N3716MRiNff/01gwYNKrPsxIkTadeuHePHj690fI7i4mJGjRrFO++8Y9O150odOnSwjofy7bffWpfHxcUxf/586+PSbjfliYuL4+OPP+bSpUsAHDlyhMLCQrtyOTk51K9fH4PBwNKlS61lvLy8yM3NtdneggULrDfOpS0ievToweLFiwFLS4gLFy5UGNe1CHT1orVPiM1fmIel5YqL3snuudJuNwCNPQNslt+IREloaCh79+61vtaNGzfSsmXLMsve6PpRkZ49e/LVV18BsHTpUrp06QLAQw89xKRJk2jXrp21bJ8+ffjgA0tLHLPZzL59+6q9v9pAEiVCiJuqaXQEAKnHa/8UwQARl7vfHDhc+2e+CfTyIMzHks3fcOi4xtHUPQPCLK1Idl9IxqRWPJif1px17jRwjwbgcE75gwQKIYS4sfr168eIESNYvXo1YWFhbN++HYABAwaQlmb5LjFv3jxGjx5Ny5Yt6d+/P5GRkeVub/bs2Xh4eNh1obja1q1b2b17N08//bR10M6rvfXWW8yaNYtu3bpRVFRkbQEwY8YMMjIyiIyMpHXr1nz00UcV7qt///4MGDCALl260LZtWx577LEyWweMGTOGTZs20aVLF7Zu3WqdSSUqKoqSkhLrYK6PPvooISEhREdH07ZtW+uUyU888QRJSUlER0ezZs2aMlu8OJry6kf//v1JS0sjJCSE5557ju7duxMZGUl2djaPPlp+q5YbWT8qMnPmTBISEoiKimL+/Pm8/fbbJCUlsXz5cubNm0f79u2Jjo4mLS2Nd999l/Xr1xMVFUXbtm1ZtWpVtfZVWyhqXRg++G8gJyeHevXqkZ2dbdOs6UYzm81kZGQQFBSETprtixqw6dutvHzvf3Fxd2Zl3pc3bb/XWrc//+o3Pvl8M8H16/HNZxNqMMIbY9aKjXy9Yy/h/j78NOkBrcOpUzIKc7ht3ZsAfNFzPNF+DTWOqOJ6nZj7KxvO/BsFPf9ougxXvY82QQpRTfJdRFyrwsJCTp06RePGjXF1ddU6HBuqqmI0GjEYDJoNDl9QUICbmxuKovD666+Tnp7OG2+8oUksom6oDfW6ImV9JlT1vlquPkKImyq0mWNNEdzicryZ53Ixm2t/Xrlfm+YAJGVdJPuSfTNYce2CXL1p5OEHOEb3m4ae3XDReaFi4njOeq3DEUIIobFt27bRvn17IiMjiY+P59lnn9U6JCFqLUmUCCFuqpBmtlME13alXW9MJjNn07M1jqZyHRqFoLuc0d+fJuOU3Gi9g1oAsPFM2aO51yZ6xYkwj1sBOJS9XONohBBCaC0mJobdu3ezb98+1qxZQ2BgoNYhCVFrSaJECHFTuXu54XN59pjUY7V/nJL6Qd64ulpGBj+VmKlxNJVzNhgI8rIMQHsgNUPjaOqefqFtAThzKZuMwhyNo6lcq3qWAQKzi5PILan9iUkhhBBCiNpAEiVCiJvO6/LUeif3nNY4ksopikLjCEurEkdIlAB0bGQZzfzEuSyNI6l7In1DcdVbEmcJZ45oHE3lgt2icNZZ3m9Hsx1zMDUhhBBCiJtNEiVCiJsutHkDAE7sS9Q2kCoKCrBM97ZnX7LGkVRN29D6ABxJP6dxJHWPXtHRyS8cgDWptX+cEkXR0dQrDoAj2Ss1jkYIIYQQwjFIokQIcdM1i24MQOrR2t/1BqBVC0tiJ/G0Y7TQaBVs6XN8ND2TYqP9dH3i+vS/PE3wwew0SsxGjaOpXCufIQAUmM5xvuiExtEIIYQQQtR+kigRQtx0EW0s06pmpV3QOJKqadbU0kIj63weRpNZ42gq17K+pauQWYVT585rHE3d07t+c3QoFJiK2ZlV+7uP+Tk3xccpAkBmvxFCiBo2bNgwfH19GT58eLlltm3bRps2bWjWrBmzZ88us0xMTAz799u3XAwICLB5PG3aND799NMqxXbo0CHatWtHdHQ0WVmO8eNPXZKcnExMTAytW7cmKiqKb7/9tsxyWtWP2iIxMZElS5ZUe72IiAjy8vJuWBySKBFC3HSlXW+KCorIzynQOJrKlc58YzarpDlAcsfPwx13Z8s4GofPOsa4Ko6knrM7zb0tybPVKXs1jqZyiqLQ1Pt2AE7l/qxxNEIIUbdNmjSJzz//vMIyTzzxBF9//TWHDx9mxYoVZd7w1oTly5czevRodu/ejb+/v3W5ySStT28Gg8HA3LlzOXjwIBs2bGDq1Knk5+fbldOqftxMFdW5a02U3GiSKBFC3HRXThGc5gBTBAf4e+LkpAcgMckxxv0I9/cBYOfpNG0DqaNi6rcEYFP6UY0jqZqGHt0AyDWmkVci00YLIURNiY2NxcvLq9zn09LSMBqNREVFYTAYGDNmDCtWrCi3fHFxMUOGDOHDDz+scL9paWlER0cTHR1NVFQUiqLYPL9hwwbmzp3LvHnzGDx4MAkJCdxxxx2MHDmS2NhYzp07x6BBg4iKiiImJobExEQA6zajo6MxGAwkJSWRnp7O0KFD6dSpEz179uTw4cMAjBs3jsmTJ9OtWzeaN2/Opk2bqnjUbj6zaiS/JOOG/5nV8rvkNmjQgOjoaACCgoLw8/Pj/Hnblr9a1Q+Ao0eP0qlTJ7p168ZTTz1Fp06dAMjLy2Ps2LF07tyZTp068dtvvwEwc+ZMxo8fT9++fWnatCnffPONdVtz5syhc+fOREVFsWDBAgC7OpeTk0Pfvn3p0KED7du3Z/PmzQC88MILbNiwgejoaBYtWoTRaGTy5Ml06dKF6Oholi1bBkB+fj7Dhg0jOjqaRx55BFVVKzwG1WW4oVsTQogqcPdyw7d+PS6kZ5N2/CzNOzTROqQKKYpCk4hAjhw7y6mkc/Tu2VLrkCrVLjSYQ2cy2Zda+xNRjuj2kNZ8cGwT54vzSc4/T0MPP61DqpC/SzMMigtGtYjU/O209BmodUhCCFHjsrLyyDpv2xTfy8uVBsE+FBUbSSrjx48WzS0/5pxOzqKwsMTmueDgenh7uV1XTGlpaYSGhlofh4WFlZtQKC4uZsSIEQwcOJCHH34YgIsXL1pvtku399prrxESEsLu3bsBmD59OnFxcTbbiouLY8KECQQEBDBx4kQSEhL4448/OHToECEhIUycOJFevXqxYsUKFi9ezKRJk/jxxx+t2/z4449ZvXo14eHhjB49munTp9OxY0e2b9/OlClTWLt2rTW+33//nfj4eGbPns3GjRuv63jVlEvG83x96p4bvt3Rjb/Dwymo0nI7duzAbDbTsGFDm+Va1Q+AKVOm8OKLLzJ06FBeeOEF6/KXX36ZYcOG8fnnn5OSksKAAQPYs2cPYGn9sW7dOlJTU7nzzjsZNWoUa9euJSMjg+3bt1NcXEzPnj0ZONDyvePKOldSUsLy5cvx8vLi9OnT3HPPPWzfvp05c+Ywb948li5dCsCCBQuIiIjg7bffJicnh65du3LXXXcxf/58GjZsyA8//MDq1asrTRZVlyRKhBCa8KjnzoX0bFKPOcaAri2aB3Pk2FmHaVHSoVEo3+zYR3rujeurKf7Swrs+ngYX8oxFbDxziHHNemgdUoUURUeQW1vSCnZyMu9nSZQIIf4Wfly9m8++/M1mWVxsa158dhCZ53J55F+f2a2TsPZZAP7vzdUcPGzbKvPfTw/kjtvaXFdMZf3qXdav+2BpofHII49Yb4IBfHx8rDe8YBmD4kpr164lISGB+Pj4SmPp0aMHISEhAGzevJnVq1cDMHLkSCZPnmwtt2fPHt5++23rL/7x8fEcOnSozG0OHjwYgI4dO1pbpQhbWVlZjB07lo8++sjuOS3rx86dOxkyxDIA/KhRo/jpp58AWL9+PatXr2bWrFnW+IuLiwG46667MBgMNG3alIsXL1rLr1ixwprgyc7O5sQJy2DyV9Y5VVV55pln2Lx5M3q9nmPHjpX5OtevX8+BAwf47DPL+zU/P5/U1FS2bNnCM888A0D//v3x9fUtc/1rJYkSIYQm/IJ9SDl6htOHU7UOpUoiGln68u4/mKJxJFVTOvPN+fxLnMvLJ8DTQ+OI6hZFUbg1qBnr0w6wLu1ArU+UAER4xpBWsJP0S/tQVbXcL15CCFFXDO4fTY9uzWyWeXm5AhAY4MXCd/9Z7rrPPdW/zBYl1ys0NJTU1L+++6SkpNCgQYMyy3bv3p3169czYcIEDIbKb9tOnz7N1KlT2bBhA05OTpWWd3d3L/e50mtEdnY2999/P1988QXe3t7W53fu3Iler7dbz8XFBQC9Xl+rxz5xM/gxuvF3NbLdihQVFTFs2DCef/55unfvbvd8bakfVyZsVFVl5cqVNGrUyK5c6fm+et2ZM2cyduxYm+UJCQk2de7LL78kPz+fXbt2odfry62PqqqycOFCevfubbe8Jr/LyBglQghNNGhiadp65lSGxpFUTeMIS+LhXFYeJSW198JfqnGAL3qd5SP+SLpjtIJxNH0vj1OSmJeFWa39syE19OgKgFG9xIXikxpHI4QQNc/f35MWzYNt/hoE+wDg4mywe6602w1Ao4b+ds9db7cbgJCQEPR6PXv37sVoNPL1118zaNCgMstOnDiRdu3aMX78+ErHXyguLmbUqFG88847Nl03qqpnz5589dVXACxdupQuXboA8OCDDzJlyhTatWtnLdunTx8++OADAMxmM/v27av2/rSmUwx4OAXd8D+dUn7CQlVVxo0bR9++fbn//vvLLKNl/ejQoYN1PJQrZ+SJi4tj/vz51sel3W7KExcXx8cff8ylS5cAOHLkCIWFhXblcnJyqF+/PgaDgaVLl1rLeHl5kZuba7O9BQsWWBNvpS1mevToweLFiwFLS5kLF27shAuSKBFCaKJhK0uzu6xUx5i+tnGEZeYbVYUUB4jZSa8n0NOSmZdxSmpGR/9wAHKNhZzIrf2zC3k5NcDLYHnfpRbs0DgaIYSom/r168eIESNYvXo1YWFhbN++HYABAwaQlmbpyjNv3jxGjx5Ny5Yt6d+/P5GRkeVub/bs2Xh4eNh1obja1q1b2b17N08//bR10M7qmDlzJgkJCURFRTF//nzefvttkpKSWL58Oe+88451m2lpabz77rusX7+eqKgo2rZty6pVq6q1r7+r3377jcWLF7Ns2TLr8SxNMvXv31/z+vHWW28xa9YsunXrRlFRkbUF0YwZM8jIyCAyMpLWrVuX2WXoSv3792fAgAF06dKFtm3b8thjj5XZumjMmDFs2rSJLl26sHXrVutMTFFRUZSUlFgHc3300UcJCQkhOjqatm3bWqdMfuKJJ0hKSiI6Opo1a9aU2eLleijqjR4eVtSInJwc6tWrR3Z2tk2ztxvNbDaTkZFBUFAQOp3k0UTN2fTtVl6+97+4eriwIvd/Nb6/G1G37xj8JsXFRma+MISYXq1ucIQ33qNfLmPT0VP0ahbOh/ffrXU4dVKfta9xvjif59vexZgm3W76/qtbrzenv8Hh7OWEuXfhzrA3b0KEQlSffBcR16qwsJBTp07RuHFjXF1dtQ7HhqqqGI1GDAaDdH0UtVJBQQFubm4oisLrr79Oeno6b7zxRoXr1PZ6XdZnQlXvq+XqI4TQRGBDS9a4ML+I4qKSSkrXDoEBngCcOlX7Ww8AdGxkaT1wND1L40jqrlb1LM20N511jGmCQ907ApBa8Ccm1THed0IIIYSoedu2baN9+/ZERkYSHx/Ps88+q3VImpLBXIUQmgi6nCgBOJeSRUjT4ApK1w5NGweRmnaRtLMXtQ6lSiJDLcc0My+PYqMJZ4P9oGvi+sTUb8GWzBPsu+gYgxI3cO8AgIqRzEsHCXZvV8kaQgghhPg7iImJsZkx5+9OWpQIITThG+xjbVKdmewYLR6aNa0PwJmz2RpHUjUt61vGVTGrcOpc7R9XxRF1CmgMWMYpOVNwUdtgqsBVXw9PgyWBlpi3WeNohBBCCCFqJ0mUCCE0odfrcfe2jB6fftoxurKEhVrmZ0867RizyPh5uBPoZZkW+HC6YxxjR9PUKxBnnaVx5s6s0xpHUzUNPW4F4HT+bxpHIoQQQghRO0miRAihGd/gegCkHnOMWVnCQiyJkty8IvLzizSOpmqaB1q6OO1Jdoxj7Gh0io52vmEA7DqfpHE0VRPh2RuAnJIUik35GkcjhBBCCFH7SKJECKGZwIaWriEpRxxjfIfSFiUAKWk3dq72mtLIzweAP5PTtA2kDusR1AyAXeeTNY6kauq7RaLDCVA5c2mX1uEIIYQQQtQ6kigRQmimdADXs4mO0S3E3d0FV1cnAFJSHWPMjw6XZ75JyrqobSB1WAe/cACO5aaTXXxJ42gqZ9C5WAdxTcnfrnE0QghRtwwbNgxfX1+GDx9ebpnY2FjatWtHmzZtmD17dpllYmJi2L9/v93ygIAAm8fTpk3j008/va6Yb7bExESWLFlS7fUiIiLIy8urgYhujuTkZGJiYmjdujVRUVF8++23ZZbbtm0bbdq0oVmzZje1fhw6dIh27doRHR1NVpZjjB9YkyRRIoTQTMNWlpv4vIuO0/w/MMALgJMnHSO5c0uDQAAulZRwLs9xjrMjaeMTgg4FgD0XHKNVSYibZfabxLwEbQMRQog6ZtKkSXz++ecVllm+fDl79uxh7969rFmzhl276l7rPpPJVO5z15oocXQGg4G5c+dy8OBBNmzYwNSpU8nPt/9u9sQTT/D1119z+PBhVqxYUWZCpCYsX76c0aNHs3v3bvz9/5qdsqJzWZdJokQIoZng8CAAcs7lahxJ1YU3slw4Tqc6RqY9wt8XnWK5iT981jEGoXU0znoD4Z6WX3B+TT+qcTRVE+bRBYBLpvPklzhG0k8IIarKaDZzNju3Rv6MJnOF+46NjcXLy6vCMt7e3gAUFxdTXFyMcvk6XZbi4mKGDBnChx9+WOE209LSiI6OJjo6mqioqDK3efToUTp16kS3bt146qmn6NSpEwB5eXmMHTuWzp0706lTJ377zTLY98yZMxk/fjy9e/emSZMmfPPNN9ZtzZkzh86dOxMVFcWCBQsASEhI4I477mDkyJHExsaSk5ND37596dChA+3bt2fzZstsay+88AIbNmwgOjqaRYsWYTQamTx5Ml26dCE6Opply5YBkJ+fz7Bhw4iOjuaRRx5BVdUKj0Ft16BBA6KjowEICgrCz8+P8+dtWyinpaVhNBqJiorCYDAwZswYVqxYUe42b1T92LBhA3PnzmXevHkMHjzY7lyeO3eOQYMGERUVRUxMDImJiQC0b9+eTp060b59ewwGA0lJSaSnpzN06FA6depEz549OXz4MADjxo1j8uTJdOvWjebNm7Np06ZqHsGby6B1AEKIv6/AhpakQ97FfC7lXcLN003jiCp3S4sGbN5yjKwsx2id4aTX06CeF6kXczh0JoOezcK1DqlOujWwCafyMvk986TWoVSJn0sz9DhjopjUgu20qNdf65CEEOKGycoroN/8L2pk2wlPjie4XsWJkKro3r07+/bt4/HHH7fePF+tuLiYESNGMHDgQB5++GEALl68aFM+LS2N1157jZCQEHbv3g3A9OnTiYuLs9velClTePHFFxk6dCgvvPCCdfnLL7/MsGHD+Pzzz0lJSWHAgAHs2bMHgFOnThEfH09SUhL9+vVj1KhRrF27loyMDLZv305xcTE9e/Zk4MCBAPzxxx8cOnSIkJAQSkpKWL58OV5eXpw+fZp77rmH7du3M2fOHObNm8fSpUsBWLBgAREREbz99tvk5OTQtWtX7rrrLubPn0/Dhg354YcfWL16daXJgGtRYDxHgdH2xy8XvRdeTiEYzUVcLE60WyfAtSUAF4tPYzT/1eXW3eCPuyHArnxZduzYgdlspmHDhjbL09LSCA0NtT4OCwsrN6FwI+tHXFwcEyZMICAggIkTJ5KQkGBzLidOnEivXr1YsWIFixcvZtKkSfz444/s2rULo9HIZ599xpo1awgPD2f06NFMnz6djh07sn37dqZMmcLatWut8f3+++/Ex8cze/ZsNm7cWKXjpQVJlAghNFOaKAHISM4i/JYwDaOpmtDLA7qeTnGMMUoAOkeEkbr7IMcypEVJTekZ1JyvTv3B6fzzFJlKcNE7aR1ShXSKniC31py5tJuTuT9LokQIIW6yLVu2kJuby/Dhw9m/fz9t27a1KzNu3DgeeeQR600wgI+Pj/WGFyxjUFxp7dq1JCQkEB8fb7e9nTt3MmTIEABGjRrFTz/9BMD69etZvXo1s2bNAiArK4vi4mIA+vfvj8FgoGnTply8eNFafsWKFdYb+OzsbE6cOAFAjx49CAmxdK1WVZVnnnmGzZs3o9frOXbsWJnHYv369Rw4cIDPPvsMsLQkSU1NZcuWLTzzzDPWOHx9fctc/3ocuvgju84vslnW1Ot2YhvMIN+YybLT4+3WGd/iVwB+OfsfMgoPWJe393uAjgEPVrrPrKwsxo4dy0cffWT3XFmtZsprcXSj68fVrjyXmzdvZvXq1QCMHDmSyZMnW8vt2bOHd955x9piKD4+nkOHDpW5zcGDBwPQsWNHa6uU2koSJUIIzdQL8Ean12E2mcl0kERJWKgfAHl5heTmFuLl5apxRJVrVd8yTsmBMxkaR1J3tfOz1F0zKgcuptHBv/a33InwjOXMpd2kX9qLqqoVNv0WQghH4u/pTsKT9je4N0KAp8cN25aXlxd9+/ZlzZo1ZSZKunfvzvr165kwYQIGQ+W3badPn2bq1Kls2LABJ6eKE/ZX3pCrqsrKlStp1KiRXTkXF5cy1505cyZjx461WZ6QkIC7u7v18Zdffkl+fj67du1Cr9fbPHf19hYuXEjv3r3tltf0tekWn8GEe/awWeait7QY8jAEMrSRfTKjVO/gf9u1KKlMUVERw4YN4/nnn6d79+52z4eGhpKa+tdskCkpKTRo0KDMbdVk/QDKPV/wV/ImOzubBx54gC+++MLapQwsSTm9Xm+3Xml90uv1tX7sExmjRAihGUVR8PK1fOHISHKMcRJCQ3ys/05Jc4xWJa2CLc1AT2aep9hYuy9KjsrbyY0W3vUB+PP8aY2jqZqGHl0BKFELymxaLIQQjsqg0xFcz6tG/gz667t9ysnJISPD8sNFUVER69ato1WrVmWWnThxIu3atWP8+PGVjs9RXFzMqFGjeOedd2y6blypQ4cO1vEurpxxJS4ujvnz51sfl3a7KU9cXBwff/wxly5ZkgRHjhyhsLDQrlxOTg7169fHYDCwdOlSaxkvLy9yc3NttrdgwQLrjXNpi4gePXqwePFiwNIS4sKFCxXGdS3cDQEEuLa0+fNysrSiMOhc7J4r7XYD4OPcyGZ5Zd1uVFVl3Lhx9O3bl/vvv7/MMiEhIej1evbu3YvRaOTrr79m0KBBZZa90fWjIj179uSrr74CYOnSpXTpYhnr7KGHHmLSpEm0a9fOWrZPnz588MEHAJjNZvbt21ft/dUGkigRQmjKL9gHgOQjadoGUkVurs64uzsDkOwg3W9aXm5RogKnzjlGzI4o2tfyS9wvZx1jQFcvpxA8DZZfqVILdmocjRBC1A39+vVjxIgRrF69mrCwMLZvt0zDPmDAANLS0sjOzqZ///5ERUXRsWNHevbsWe6NMMDs2bPx8PCw60Jxta1bt7J7926efvpp66CdV3vrrbeYNWsW3bp1o6ioyNoCYMaMGWRkZBAZGUnr1q3L7BJypf79+zNgwAC6dOlC27Zteeyxx8psHTBmzBg2bdpEly5d2Lp1q3UmlaioKEpKSqyDuT766KOEhIQQHR1N27ZtrVPiPvHEEyQlJREdHc2aNWvKbPHiSH777TcWL17MsmXLrOeoNInQv39/0tIs34XnzZvH6NGjadmyJf379ycyMrLcbd7I+lGRmTNnkpCQQFRUFPPnz+ftt98mKSmJ5cuXM2/ePNq3b090dDRpaWm8++67rF+/nqioKNq2bcuqVauqta/aQlEdffjgv4mcnBzq1atHdna2TbOmG81sNpORkUFQUBA6neTRRM2bPuT/+H3FTnoM7cLM75+usf3cyLo97tGPSUw6x733dOaxh/veoAhrVoc58ygoLuHVYf0YEt1a63DqpNUpe3n2z+9wVvRsH/giOqXmP0Ovt14nnPl/HM9dR6BrG4Y0WlADEQpRffJdRFyrwsJCTp06RePGjXF1rV1dY1VVxWg0YjAYNOvqWFBQgJubG4qi8Prrr5Oens4bb7yhSSyibqgN9boiZX0mVPW+Wq4+QghNNY2KAOBS3qWKC9YijcIs45ScPOUY3YUAGvn5ALA7+Yy2gdRhpeOSFKsmjuc6Rt0I87gVgKzCI5hVo8bRCCGEqEnbtm2jffv2REZGEh8fz7PPPqt1SELUWpIoEUJoqnTmm4zTjjMjS6sWlu4KObn2/XFrq7YhlvEz9qWlaxxJ3RXsVo96TpYprrc5yDTBoe4dATBjJKPwoMbRCCGEqEkxMTHs3r2bffv2sWbNGgIDA7UOSYhaSxIlQghNBTa0DHx15mRGpQNR1RYNG1palKSkXXCYmDs2sgxMlpmXr3EkdVuUr2WAtE3pjjFOiZvBFw+DJYl2Ou83jaMRQogbw1GuzUKImnU9nwUyPbAQQlOlLUpMRhO5F/Lw9vPSOKLKhYX4ApCfX0R29iV8fMqfPq22aBVs+dUoPSePCwWX8HV30ziiuql3/Rb8mnGcY7mOMxVzQ49uHM5eTlL+ZroEPqZ1OEIIcc2cnJxQFIXMzEwCAwNr1ZgJtX0sByGuRW2u16qqkpmZiaIoVZoO+WqSKBFCaCqo4V9zzmcmZzlEoiTkcqIELFMEO0KipGmgH4oCqgpH08/RtXFDrUOqkzoHNAYgqyiPtIKLhLj7aBtQFUR49uZw9nKyi1MoNhfgrKv99VkIIcqi1+sJCwsjJSWFxMRErcOxoaoqZrMZnU5X624ohbhWtb1eK4pCWFgYer2+2utKokQIoSmPeh4YnA0Yi41kJmfRtF2E1iFVysXZgKeHC3n5RSSnnKdt6zCtQ6qUs8FAgIc7mXkFHDqTIYmSGtLYMwBvgys5xkJ2ZCUx2AESJcFuUegUJ8xqCWcLdtHIs4fWIQkhxDXz9PSkefPmlJSUaB2KDbPZTFZWFv7+/jKbk6gzanu9dnJyuqYkCUiiRAhRC9Tz9yLrzAXOnHKc7gpBgd7k5Wdy/ITjxNw00J/MvAL+PJ3GuO4dtQ6nTtIpOhp7BbLnQjK/nD3C4IbttA6pUgadK4EuLUkv3M+p3ARJlAghHJ5er7/mm6OaYjabcXJywtXVtVbeUApxLepyva5br0YI4ZAaXm6RkZWapXEkVdeo0eUpghMdYxpYgOiGlgFdD6c7TsyOqHf95gD8ef60xpFUXah7ZwCSC7ZpHIkQQgghhPYkUSKE0Fxo02AAMlMcJ1HSspkl5uzsSxpHUnXtwiwxp13MxWyWGQFqSpeAJgBkFuWSXVygcTRVU9qKpNB0nrwSmUJaCCGEEH9vkigRQmguIOxy64y9SRpHUnXhjS5Pa5ye7TDTELaob4nZaDaTcjFb42jqrjY+DdBjGdBs1/lkjaOpGn+X5hgUFwBS8qVViRBCCCH+3iRRIoTQXP1wy9S1mcmO06IkNNQy882lS8Wcv5CvcTRVE1LPC08XZwCOpJ/TOJq6y0lnoImXpU7/nnlC42iqRlF0BLlFAnAyL17jaIQQQgghtCWJEiGE5oIut87IzynAZDRpHE3VhAT7WP+dknpBu0CqQVEUwv18ANiTfEbbYOq4uAatAdhzIUXjSKquiWdfALIKj6CqZo2jEUIIIYTQjiRKhBCaK02UoELWGcdIOjg56fH2dgXgdLLjtM4I9/cBYHeKJEpqUkf/cAAOXkwj31ikcTRVE+bRBYAicy5ZRcc0jkYIIYQQQjuSKBFCaC4g1M/674zTjpN0aFDfB4AjRx1n8MuOjSwz35zIPK9xJHVblG8YCgpmVHY5yOw3nk718XIKBSApb7PG0QghhBBCaEcSJUIIzTk5O+Ht7wk4VqKkSWPLOBSONEXwLQ2CALhQcIlLxSUaR1N3uRmcCff0B+CXs0c1jqbqgl0t45Qk5v2icSRCCCGEENqRRIkQolYIbd4AcKxESYvmlul2s7LyNI6k6poHBVj/fTzTcQbPdUQ9A5sC8FvGcY0jqbrGXjEAXChOxGgu1DYYIYQQQgiNSKJECFEr+IdYZpFJPpKmcSRVF9HI0mLg3Pk8jA4yCK2Xqwt+Hm4AHJWZb2pUr/otAEguuMAlY7HG0VRNA/f2gAKYOXNpj9bhCCGEEEJoQhIlQohaoV6ANwBJB5I1jqTqGoZZxlYxmcyknbmobTDV0C7M0npHpgiuWe38GqIAKqrDzH7jpHPHx7kRAKdyftY4GiGEEEIIbUiiRAhRKzS6JQyArDTHGWTU388Tg8HyMZqc4jhxNw+0tISRmW9qlofBhTb1LIPn7shK1DaYagj36ANAeuE+jSMRQgghhNCGJEqEELVCcIRlkNHsc7kaR1J1iqLg72cZhPZkkuMM6Noy2DJOydH0c6iqqnE0dVvngMYAbDt3SuNIqi7CqycA2SWnyTdKqyMhhBBC/P1IokQIUSsENbLcvJcUlVCQe0njaKqutPvN0aNnNY6k6loFW2brKSwxkpmXr3E0dVungAgA9pxPpsjkGLMM+bu0wFnxACA1f5vG0QghhBBC3HySKBFC1AqliRKAzGTH+RW7ebP6ACQlO84MMuF+vugUBYCj6Y4TtyNq72cZ78OMyr6LqRpHUzU6RY+/q2Ug2hO5GzWORgghhBDi5pNEiRCiVvDy88TV3QVwrCmCmzWxdBk650BTBBv0Oup7W7oM7U9znJYwjsjLyZUQt3oA/Hr2qMbRVF1jz1gA0i/tQ1XNGkcjhBBCCHFzSaJECFErKIpC4OVWJekONN5HozDLwKgFBcXk5hVqHE3VtQiyHOsDaRkaR1L3dQ1sAsCvGcc1jqTqGnp2A8CoXuJ88UmNoxFCCCGEuLkkUSKEqDVcPSwtShxpiuCwMF/rvx1p5puujRsCkHwhW+NI6r4+9VsCcDIvkxKzUeNoqsbLqQGuOh8ATudt0TYYIYQQQoibTBIlQohao34jyyCjKcccZ9paN1dnPC8neJIdaJyS0plvjmeco9ho0jiauq2jfzgAJtXMgYuOU7fDPLoCkFqwXeNIhBBCCCFuLkmUCCFqjYatQgDHGqMEICjQG4Cjx9M1jqTqWgdbxlYxmlVOZDpOgscR+Ti709zLMujvjqxEbYOphsZefQDILDyI0VykcTRCCCGEEDePJEqEELVGWAtLouT82YvaBlJNEeGWcUqOn3Sc8T58PdzwdHEGYP8Zx4nbUUX5hQKwPu2AxpFUXQO3DoAOk1pM+qV9WocjhBBCCHHTSKJECFFrlE4RnJ9dgMnkON1BWrVoAEBq2gWNI6mepoF+AGxPTNE4krqvW0BTAI7mpGM0O0bddtZ7UM8pDIBTeQnaBiOEEEIIcRNJokQIUWuUJkpUs8qFdMcZZDQ83BL3+Qv5mM2qxtFUXcdGllYO+1JkiuCa1sk/AgCjauZwtuMc73DPngAk52/VOBIhhBBCiJtHEiVCiFoj4PJUu+BY45Q0CrO0zDCbVdIzcjSOpuo6hlsSJSkXsx0qweOIAlw98XfxBGCrA00THO7ZC4B8YwYFRseZ1UkIIYQQ4npIokQIUWs4uzjh6esBQKYDJUqCAr1xctIDkJLqODeTtwRbZhkqMZlJOn9R22D+BjpfblWSkH5U20CqIdC1FTqcAEjN36FxNEIIIYQQN4ckSoQQtYqXr+VX9+SjaRpHUnV6vY4Af0vciUmOk+BpUM+Lem6uABw6KwO61rSY+i0BOJmXiUk1axxN1egUA4FurQFILtiicTRCCCGEEDeHJEqEELVK/QhLK4fE/ckaR1I9gQFeABw+6jjjTyiKQkNfy9TGO2RA1xrXKSACgDxjEcdyHGcq6eZedwCQVrAT1UESPEIIIYQQ10MSJUKIWqVhS8sUwWnHHSfhANCsaX0AEpMyNY6kelo3CALgz+QzGkdS99V386a+qyUxtTXzhMbRVF1Dj1sBKDRdJLPwkMbRCCGEEELUPEmUCCFqlYg2jQA4l5qlcSTV07ypJeFwNsNxZusB6Bxhmf41MesCqioDuta0Nj6WRGDC2SMaR1J1Hk6BeBgsicATufEaRyOEEEIIUfMkUSKEqFUaNLEkHPIu5jvUjXujhpYZe/Lzi7lUWKxxNFXXpoHlBriwxEh6Tp7G0dR9scGtADh4MQ2zA3VjifDsA0Bi3iaNIxFCCCGEqHmSKBFC1CrBjS2JkpIiIxcdqHVGoyumNk5JuaBhJNUT7u+DQacAcFAGdK1xXQMaA1BoNnIsx3GOd1OvvgDkG9PJL3Gs7mVCCCGEENUliRIhRK1SPzzQ+u+ziY5zQ+bl5Yrf5amNk5Idp9uQXqejef0AAA6dcZzj7agauPvg52ypJ47U/SbQ9RYMimWGpKS8zRpHI4QQQghRsyRRIoSoVZxdnXHzcgPg7CnH+cUdIDTUF4AjRx1rYNT2DS3jZhw841jH21H1CGoGwI6sRG0DqQZF0RHi3gGAxLxfNY5GCCGEEKJmSaJECFHr+AX7AHD6kGNNWRscVA+AQw6WKGkdfHnmm9OpGkfy93Bbg1sA2H0hmSJTicbRVF0z7zsByCjch9FcpHE0QgghhBA1RxIlQohap8HlcUoSDyRrHEn1tL6lAeBYY5QA3NLA0t3pQkEhFwouaRxN3dc5IAIFKDSVsOeC4yQDw9w7AzqMaiFnLu3WOhwhhBBCiBojiRIhRK3TsFUoAGkn0jWOpHqaRFgSPBezCyguNmocTdU1D/JHufzvw2dlnJKa5u3kRkMPPwA2pB3UOJqqc9Z74uscAcDxnHXaBiOEEEIIUYMkUSKEqHXC2zQEIDvTcWa9AYgID7D+OznlvIaRVI+zwUB9b08A9qQ4VrchRxUT3BKAXzKOahxJ9TT1vg2A5PzfHWr6biGEEEKI6pBEiRCi1intepNzLhez2axxNFVXz9sNdzdnABJPn9M4muppFWzpfrMt0XG6gjiy2OBWAKQWXCS7uEDjaKouwjMGgGJzDheLEzWNRQghhBCipkiiRAhR69SPsNy0lxQbOX/Gscb7aNE8GICk044zRTBA1whLK57k847VisdRtfMNw6BYLsG/Z57UOJqqq+fUEFedDwCnchO0DEUIIYQQosZIokQIUesENfqrC8vZRMcaMyO8oWXsiWPHHWt8lagwS4In5WI2BcWOMxOLo3LSGYj0sYzFszXzhMbRVJ2iKDTy6A5AUv5mjaMRQgghhKgZkigRQtQ6Ts5OeNRzB+DsqQyNo6meRg39ATjsYFMEt7zc9UZV4Ui6YyWnHFVcSGsA/jh3SuNIqqep9+0AnC86QaEpR+NohBBCCCFuPEmUCCFqJf8QXwCSDjjWmBlNLo+vcuFiASUlJo2jqTpPF2d83d0A2J/qWK1hHNWtgU0BSCm4QHK+4wz+G+zeDifFDRUTKXl/aB2OEEIIIcQNJ4kSIUStFHw54ZB0KFnjSKonItzf+u+UVMe5+QVoEWSJ/Y9TjpWcclTNvIJw11sG//0t/bjG0VSdXnHC39UyGO2x3LUaRyOEEEIIceNJouQ6JCYm8tBDD9G4cWPc3Nxo2rQpL730EsXFxTblTp8+zaBBg/Dw8CAgIIBJkybZlRFC2ApvbRlc9IyDdb3x9fHAxcUAON7MN10iwgA4kCYtSm4GRVHo4N8IgJ/OHNA4mupp7mXpfnO2YDdm1XFaTgkhhBBCVIUkSq7D4cOHMZvNfPDBBxw4cIC33nqLBQsW8O9//9taxmQyMWDAAPLz89m8eTPffPMN3333HU899ZSGkQtR+zVsZRnosii/SONIqi84qB4ARx1sQNeO4ZZjfjYnl8ISo8bR/D3c0aAtAPsupGBSHWcq7IaelgFdTRSTUehYSR4hhBBCiMoYtA7Akd15553ceeed1sdNmjThyJEjvP/++7zxxhsArFu3joMHD5KcnExISAgAb775JuPGjWPOnDl4e3trErsQtV1Ik/oAZJw+h8lkQq/XaxxR1UVFhpGUnMWZMxe1DqVa2oRYjrkKHDyTQYdGIdoG9DfQPcgyTkmR2cjh7LO08XGMY+5u8MfLEEKuMY2TORsIdovSOiQhhBBCiBtGEiU3WHZ2Nn5+ftbHW7dupW3bttYkCUC/fv0oKipi586dxMbGlrmdoqIiior++iU9J8cys4DZbMZsrrlfHc1mM6qq1ug+hKiKwEaW8TJMRhOZyVk2UwZfi5tZtyPCLbGeSjrnUO8lD2cnmgT4cvLcBfalnCH68pTBouYEunhS39WL9MJcfks/xi3e1TvmWn5mR3j2Yd/Frzmd/zvdHKiei9pPvouIukjqtaiLHLFeVzVWSZTcQCdOnODdd9/lzTfftC47e/Ys9evXtynn6+uLs7MzZ8+eLXdbr7zyCrNmzbJbnpmZSWFh4Y0L+ipms5ns7GxUVUWnk55ZQjuqswkUQIVDu46A6/V9AN/Mul3Py9L65XRyFmlpZzEYHOe91MzXm5PnLvDb0ZP0axKqdTh/C7fWi2BZ4T42nznC4Hotq7Wulp/Z9UztgK/JM54h6ewB3HSBN3X/ou6S7yKiLpJ6LeoiR6zXubm5VSoniZIyzJw5s8wkxZW2b99Op06drI/T0tK48847GTFiBOPHj7cpqyiK3fqqqpa5vNTzzz/Pk08+aX2ck5NDw4YNCQwMrNHuOmazGUVRCAwMdJjKLuouTx8P8i7kU3SxhKCgoOva1s2s29EGdwBUFUqMToSE+FeyRu3RoXE4644lsS/93HUfc1E1sWoblqXvY1/uGbz9fXHVO1V5XS0/swPVAHYm+nHJdJ4818OE+7S5qfsXdZd8FxF1kdRrURc5Yr12dXWtUjlJlJRh4sSJjBo1qsIyERER1n+npaURGxvLrbfeysKFC23KBQcH88cff9gsu3DhAiUlJXYtTa7k4uKCi4uL3XKdTlfjlVBRlJuyHyEqExjqR96FfE7tO31D6uPNqtv+/l44O+kpLjGRlJxF4wjH+aW9Y4SlFcmFgkJyCovxca/axURcu66BTVAAo2pm94UU67glVaXdZ7aO+m5RJOYlcDJ3HZF+I27y/kVdJt9FRF0k9VrURY5Wr6sap2O8mpssICCAVq1aVfhXmolKTU0lJiaGDh06sGjRIrsDf+utt7J//37OnDljXbZu3TpcXFzo2LHjTX1dQjia0BaWsX0SDyRrHEn1KIpC/fqXZ745Vn4Xu9qoZf0AdJcbu+2XaYJvCg+DCxGelnFtNqQd1Dia6mnqFQfAuaKjlJgvaRyNEEIIIcSNIYmS65CWlkZMTAwNGzbkjTfeIDMzk7Nnz9qMPXLHHXfQunVr7r//fnbt2sXGjRuZNm0aDz/8sMx4I0QlmraLACD3fNX6EtYmTSIsN76Hjp6ppGTt4mwwEOJj+WzakZiicTR/H7HBlrFJfs04qnEk1RPm0RkFHSpmkvP+qHwFIYQQQggHIImS67Bu3TqOHz9OfHw8YWFhNGjQwPpXSq/Xs2rVKlxdXenRowcjR45k6NCh1umDhRDla3SLpRtIRtI5jSOpvtaXYz9/Pl/jSKqvXZjlM2zn6VSNI/n7iA1uBcDZwhzOFzlOnXHSuRPo2hqAIzkrNI5GCCGEEOLGkETJdRg3bhyqqpb5d6VGjRqxcuVKCgoKyMrK4t133y1z/BEhhK2QppapUrPP5ZKf7Tg3jwBNG1sGQk1Nu4DR5DhTpgH0aNoIgFNZF+w+z0TNaOMTirPOMlvSH+dOahxN9bT0HgjA2Uu7MZmLNY5GCCGEEOL6SaJECFFrNWj614DHaScca7yMiHDLTDdGo5nU1PMaR1M9pS1KzuUVcDYnT+No/h6cdHq6BzUDYGvmCY2jqZ5wr16ADpNaTNqlP7UORwghhBDiukmiRAhRa3l4u+Pqbml95WiJEn8/T5ydLROLnUzM1Dia6mns74ez3tK6YW+qYw1G68i6B1pmu9l09ohDteRx1XsT6m4ZnPxEzgaNoxFCCCGEuH6SKBFC1Gr+Ib4AJO4/rXEk1aMoCqENfADYf9CxxvrQ6RQi/H0A+OOkYx13R9YrqAUA54sLOJLjWAmqcI9eACTmJWBWjRpHI4QQQghxfSRRIoSo1UKaW8YpObEnUdtArkHz5pauQ4cOO9bMNwAdwy2D0W5PcqwkjyML8/AlwMUTgHVpBzSOpnoivHoDYFSLOHtpn8bRCCGEEEJcH0mUCCFqtSaREQCcP3NB20CuQVSbhgCcTsnSOJLq69bYEnti1gXMZsfpBuLoYi5PE/yTgyVK3A3+1HMOB+Bo9kqNoxFCCCGEuD6SKBFC1GrhbcIAOH/2oraBXINmTS0z3+TlFZGXX6RxNNVTOqBricnMqSzHGozWkd0VGgnA6fzzXHCgaYIBmnvfCUBS/m+oqmPN9CSEEEIIcSVJlAgharXQZpauN5nJWfx/9u47PMrzTP/+95nRqPcuAUIgCYEQIHovtinuJXFspzhls9k42fRk80u2JM6mOJu+yZvqlHXWTnHcYhsXbDC9C1GFkAQIIUBICKFeZ+b94wHWThwHULn1PHN+joPjwEKGc6yRzJy67+vq7XbW6tHcnFQ8HguAY8edNdA1Iz6WlOgoQANdh9P05Bx8F9cEb3HY9pu8uOUA9AU6aOw+bDiNiIiIyLVTUSIiI1pWXubln5853mAwydWLjPSRmZEAQFW1s8oGy7KYNsY+VXKgzlkbh5zM5/GyLMO+frPxbKXhNFcnzpdJSrg9kPZ4+wbDaURERESunYoSERnREtPiCfPZ32E/47AVwQDpaXEAHDhUZzjJ1ZucZV8d2lRdYzZIiFmcYZcNG89W0h/wG05zdcbFLwPgeNtrjlpxLCIiIvJ6KkpEZESzLIukzEQATpQ7sGyYZG+PqXZgyVOSkw3AqQst9PZr5etwWZyeD0BHfw8Hmp21dSg3dikA7f31nO911tUhERERkUtUlIjIiJc13j7ZcHTvccNJrl7RRLtsqG9oddz2mOJse71xIAgV9ecMpwkdqZFxjIpKBODF085atZsYnkOUNwWAqpaXDacRERERuTYqSkRkxMudnAPA6WPOO5Uxfpxd8vT3B6g/22I4zdVJiIok6eJA17KTpw2nCS0rsosAWHfGeUNR8+JuAOBY26uGk4iIiIhcGxUlIjLi5U3LBaC92VnrUgEyM+LxXZyxctRhw2gBii7OKdmiOSXDamX2ZADOdrdR3+Wsgu3SmuBO/zlaemsNpxERERG5eipKRGTEy8qzr4CcrWnA73fWcEvLsigssDf3OG1FMMCS/FwAjjU1mw0SYiYnZhPl9QGwsd5Z22+SI/KJ8MQDcLxtvdEsIiIiItdCRYmIjHij8u2iob/PT+PJJsNprt74cWkAVFSeMZzk6s0eNxqAuuZWzrU770SPU3ksD8szJwGwqbHKcJqrY1nW5VMlNe2bDKcRERERuXoqSkRkxEsZlYzHYwFwurrecJqrNy43FYDDFc6b8zEhPZWIMPvqUNlJ5xU9TrYksxCA7Q1H6fU7a+vQuLjrADjXU0F7n/NmC4mIiEhoU1EiIiOe1+slIc0+yn/SgacyCi5eHbrQ0kVXd6/hNFcnzOthbHIiAJuqaoxmCTUL0vOwgO5AP7ubakzHuSrpkUWEW7EAHG1baziNiIiIyNVRUSIijpCRa19fqSo9ajjJ1Rs3Nu3yz2tOOG/N7oI8e+vQzpqThpOElnhfFOPj7OfO6rr9htNcHcvyMCZmAQBVrS8aTiMiIiJydVSUiIgjjCseC0DNIee9WI+JiSAuLhKAqmrnbb5ZmJcLQO35Fnr7nXUFxOluzC4GYGODs+aUABQm3gzAhd4aOvvPG04jIiIicuVUlIiIIxTMGA9Ae3O74STXJmd0CgDlDpxTMm20PUw3EAxy8LTzih4nuyHLHuh6obeTmnZnnUbKjJqG14oA4Hjba4bTiIiIiFw5FSUi4ghjJmYDUH+8EX+/s1YEA8wosa+vnKm/YDbINYiPimRUoj0jpuyk84oeJ8uPSyfeZ59GWl9/xHCaq+OxwhgdPRfQ9RsRERFxFhUlIuIIoydkAeDv91Nf47xTDXnj0wE4eqyBYDBoOM3VuzSnZK823wwry7JYdfH6zZaGasNprl5R4l0AnOuppKOv0XAaERERkSujokREHCElOxmvz15TW3fEeaca8sbZRUl7Rw8NjW2G01y9GTn2iZ4dx086suhxsqUZEwDYda6Gjv4ew2muTlb0dKK8yUCQ6rY1puOIiIiIXBEVJSLiCJZlkZKVBMDxA7WG01y9UdlJhIXZX3Krjp41nObqTR9jFyWt3T3UNbcYThNa5qSOw2t58BNg61lnnSrxWN7L228qLjxrOI2IiIjIlVFRIiKOMarAvn5TteeY4SRXz+OxyMpMBODAQedt7hmbnEikLwyA0lrnnehxsqiwcIoS7aLqmZNlhtNcvcKEWwBo6z9NS2+d4TQiIiIif5+KEhFxjLxp9org2opThpNcm0kX56wcOOi8/JZlMTEjFYCNlccNpwk9d44pAWD7ueP0BZw1zDg9cjLhHnsYcGXLasNpRERERP4+FSUi4hh5JeMAaGloNZzk2pRMswei1px01prXSxYX5AJQqs03w+7SmuDeQD+lTScMp7k6lmWRH78cgMrWFzXjRkREREY8FSUi4hiXNt80N7TQ1dFtOM3VKyzIBKCzs5fmCx2G01y9eePsoudsazvt3c4aKup0KRGxjI9NA+CFU/sNp7l6ExNuB6DL38T53qOG04iIiIi8NRUlIuIYoydkX/75qSrnrakdm5OC7+Lmnqpq5w10nZydgc9r/29j36l6w2lCz505JQBsbTjquFMZyRF5JPpyATjW+qrZMCIiIiJ/h4oSEXGM2MQYImMiAGeuCA4L85KdlQjAoXLnzSmJ9IUxKdM+1bDjmPMG0jrdiqzJAJztbuXQBec9//PiVwBQ1fqK44oeERERCS0qSkTEUdLGpABwdK+z5jRckptj5997wJlFQ0H6xYGu1TVmg4Sg0TFJjI62V2Q/W7fXbJhrkBd3AwCd/gYaug8ZTiMiIiLyt6koERFHySkcBUD1XuetCIb/G+h6/ISzB7oebWzCHwiYDROCVmYXAfDK6XLDSa5efPgo4nz29bnDF54xG0ZERETkLagoERFHyZ85HoC6SufNKAGYeHEgbWtrF23tzhtIO32M/UK3zx+guqHJcJrQc/OoqQCc62nneLvzyrZLQ11r2jcQCPYbTiMiIiLy5lSUiIijjCu2T2Q0n21x5JyD8blpl39efbTBYJJrkxEfS3ykPSdmV02d4TShZ0J8Bgm+KABeqHPe9pv8+FUA9Ae7Od1ZZjiNiIiIyJtTUSIijnJpRXBPZw8t51oNp7l6ERE+sjITAKg+6rzNNwDTRttrjrccqzWcJPRYlsWKrEkAvHzKeXM+YsJSSQrPA6Cq9UXDaURERETenIoSEXGUrLzMyz936vWbqcVjAKh04IpggBWTCgA4dPqsI0/1ON1tY0oAON5xjrNdzisLixLfBsDJjm34A72G04iIiIj8NRUlIuIo4RE+4lJiAThZ4bwVqQAF+RkAHDjozM03s3NHA9DQ1kHt+RbDaULPtOQxJIfHALC2/rDhNFdvfNx1WHjpDbRT27HNdBwRERGRv6KiREQcJ3OsPeejYmeV4STXpiDPLkrqG1rp7u4znObq5aYkEhPuA2BnjTPLHifzWh7mp9lDjZ+udd6cjwhvHOmR9vae8gtPG04jIiIi8tdUlIiI44ybOhaAY/tPGE5ybfLHp1/++dHjzhvoalkWxdl22fPq4WrDaULTzaPt7TdVbWdp6+8xnObqTUq4E4D6rr30BTrNhhERERH5CypKRMRxJs62Z2ScPlpvOMm1iYmJICHB3lxSccSZc1auL7QHcu496cz8TjcvdTxhlocgsK35uOk4V21s3GIsvATxU9O20XQcERERkTdQUSIijjN2sj0jo/VcG709zru6Av+3JnjvfmdujpmfZ69pbunu4fQF5w0UdbpwbxgzU+yTVS82Om9Oic8TRVb0dADKW3T9RkREREYWFSUi4jg5k0Zd/vmpKmeeaJg21d58U3vyvOEk1yY/LYWIMC8Au07UGU4Tmu7KmQFARUcD3X7nFYZFCfb2m8buw3T1NxtOIyIiIvJ/VJSIiOMkpiUQnxIHQO3hU4bTXJvii2XPqTPN9Pb2G05z9TweiwXj7VMlu2uc+TFwuqUZEwizPPQHA2xvPGY6zlUbEzuPSG8CEORo26um44iIiIhcpqJERBwpdXQyAEd2OXOYaEF+JgD9/QGO1TQaTnNt5l0sSnZo840Rsb5I5qXa22/WnCk3nObqeS0feXErADh84RmzYUREREReR0WJiDjSqItFQ9Ue530nHSAhPor4+EgAyg+fNpzm2swaa5+KqT3fQkNbu+E0oWlZRiEAr54ppz/gN5zm6hXE3wRAS18tTT3OLD1FRETEfVSUiIgjTZxjb76pq3RmyQCQP95esbt7j/O2lgBMzEzD57X/N7KrRnNKTLg+ayIAPYF+djQ673mUElFAtNcebHyo+QnDaURERERsKkpExJHGTbGvfZw/cwG/33nfSQeYOd3eWnKk6qzhJNfG6/EwMcN+kbuu4qjhNKEpJSKW8VH2NbQnTuwynObqWZZFUdKdABxrW0sg6Lx5PSIiIuI+KkpExJFyJtkrggP+AA0nzhlOc22mXFxz3HS+nc6uXsNprs2ywnEA7Dqhga6m3JxeBMCmhmr6HHj9ZkL8rYBFf7Cb2vbtpuOIiIiIqCgREWdKG5NCeIQPgNrDzrz2UZCfcfnnVdXOPFWyMC8XgIa2Dpo7usyGCVFLk/OxuHj95pzzZvZEhyWTFmmXPZWtzxtOIyIiIqKiREQcyuPxMPbiiQynrgiOigxnfK59daWi8ozhNNdmcnY6kb4wAHadcGZh5XSJvihmJecC8NKpg2bDXKOpSfcCUNexg25/i+E0IiIiEupUlIiIY2VdHIZ6eHul4STXbuIEe3vPoXJnlj0+r5cZOdkA7Nb1G2NuHj0FgLWnD9MXcN6cj5yYhYRbsQTop6r1ZdNxREREJMSpKBERxxoz0V5Pe3T/CcNJrt2Ei0VJ2f5aw0mu3cwc++Ow9rDWu5pyfeZEPFi0+3vYctZ5HwevJ5wxMfMBKG9+0nAaERERCXUqSkTEsfJK7EGi5+qaCAaDhtNcm0mF9mmMtrZuLrR0Gk5zbeaOs69AnWppo7Wr23Ca0JQYHs2kxCwAHj+x23CaazM56W4A2vpP09zjvFXHIiIi4h4qSkTEsXIm2ScZerv7uNDgzLkG43PT8HgsAI5U1RtOc22mZGfisezHsLtW129MecfYWQBsbzxGj7/PcJqrlxY5iSivveq4/MJThtOIiIhIKFNRIiKONSo/E+viC3SnDnT1+bxkZsQDsH//ScNprk2EL4y8NPsF7trDRw2nCV3Ls4qwsOgL+tnswOs3lmUxMeEOAKpb1xAIOm/WioiIiLiDihIRcawwXxgpo+wX6E5dEQxQdPFkTNkB584pub4wD4DNR507L8bpEsKjmJpkP5eeOrnHcJprMzHhNsCiL9jJqc5S03FEREQkRKkoERFHK5xtv0A/Ue7comTW9FwAztS3OHbWyrJCe17M2dZ2mtqdOWvFDd4xdjYAu87V0O3A6zcxvjRGR9uPoar1BcNpREREJFSpKBERRxs7yR4kWlnq3CsfkwrtIZzNzR00nmsznObaTMnOJCYiHIAdNc68QuQGN2RNJNwTRpe/lw31zlybXRB/EwDH2zbQ43fm54OIiIg4m4oSEXG03OIcAI45eL3umNEphId7Aag4csZwmmsT5vUwdVQGAGvKqwynCV2xvkimJ48B4PGaXYbTXJuxsYvx4COIn+rWNabjiIiISAhSUSIijpZbbL8o7Onsodmhm288HotRWUkA7Nnn3MJnYd5YALYf04kSk+4cMwOA0vMn6OzvNZzm6oV5IhgbuwiAQxeeNJxGREREQpGKEhFxtNETsi5vvjlxyLkv0KcU21eI9h907mNYnJ8LwIWubuqanVlaucH1WYV4sfAHA6yvP2I6zjUpTnoHAK19J7nQ69zyUERERJxJRYmIOJov3EdSZgIA1XuPG05z7aZPs68QnTzZRCDgzIGuBempRPnCANh2TC9uTYkOi2BGin265/GanYbTXJv0yGIiPYkAHGp+wmwYERERCTkqSkTE8XIuDnStKj1mOMm1m3xxRXBff4Dak02G01wbj8di2mh7MO3LhzSnxKR7cu3NMXub6+jo7zGc5upZlsWkxLsAONa2Dn/QeRt8RERExLlUlIiI401dUgRAQ+05w0muXXpaPImJUQAcOnzKcJprt6qoAIDDZxocu+rYDZZkTCDSE+bo6zeTEu/EwktPoIXa9i2m44iIiEgIUVEiIo6XO9ke6Hr8QK2jX5xPvTiYtrzitOEk125Rvn3lo6mzi6ON5w2nCV3RYeEsy5wIwHMn9xlOc22iw5IZG7MQgH3nHzOcRkREREKJihIRcbxLm286WjppOu3cF+dFE7MB2FXq3Fkro5MSSI+LBWBTlXMfhxvcOKoYgK2NR7nQ22k4zbUpTLgdgHM9FbT1ObdAFBEREWdRUSIijpedl4nHY2++qTlUZzjNtSsusueUNDS20d7hvLkSYM+WmJKdAcCaw0cNpwlti9MLiPCEESTI6rr9puNck9Exswn3xANwUENdRUREZJioKBERx/OGeUkZlQxAValzX5wX5GdycdMxFUec+93zlZPtOSWHTp/FHwgYThO6wr1hXH/x+s0fjjtz+41leZiUcCcAlS2rCQT7zQYSERGRkKCiRERc4dKcksPbKg0nuXYR4WFkZdirjvfsde563QXj7VXHvX4/5WcaDKcJbfeNmwNATUcTJzuceS2tKOkuwKIv2KmhriIiIjIsVJSIiCtMnDsBgOOHThpOMjBTJturjkv31pgNMgBpcTGkx8UAsL7SuSub3aAkeQwJPnub0vN1zhzqGhOWSlbUdAAqWp4znEZERERCgYoSEXGFghnjALjQ0ELAwdc9Zs+yH0dd3XkCAedu8FmQZ2+/2XncuTNj3MBjebh77CwAXjh10LFboaYm3QdAXedO2vvOGk4jIiIibqeiRERc4dLVm+6OHhpqzxlOc+0mT7JPlHR09lJ3yplXJQBWTMoHYP+penr7NVfCpNvHTAOgpv0c5S3OnH0zKmYOUd5kIMjB5idNxxERERGXU1EiIq6QkZuGLzwMgJqDzr1+k5kRT0K8fVXiYPkpw2mu3Zzc0VhAT7+fPbXOfHHuFuPj0hgTbQ87/r1Dh7p6LC8F8TcCUNn6HIGg33AiERERcTMVJSLiCh6P5/Lmm0oHb76xLIsxY+zHsXP3ccNprl1cZAQ5KYkAvHyoymwY4e6xMwFYc/oQ/QFnlgxFiW8DoDfQzsn27YbTiIiIiJupKBER1xg3xd62Ur71iOEkAzP74ryVQ4edPd9jeWEeAOurnFv4uMWl6zdd/j62NTqzSIz1ZZAWWQTAvubHDKcRERERN1NRIiKuUbxwIgAnyp1dMJRMtQufxnPtdHb2GE5z7VYUFQBwpqWNc+0dhtOEttTIOCYnZAPw2LEdhtNcu2lJ7wGgofsAHX2NhtOIiIiIW6koERHXyJ8xHoCmM8309fYZTnPtCgsyL/+8orLeYJKBmTIqg3CvF4BN1TVmwwjvHDcXgF1Nx+nsd2YBlxM7n0hPIgCVrS+YDSMiIiKupaJERFxj/MWTGMFAkJMVzh0gGhnpIzsrEYCDDj4d4/V4mJFjn2LYUKnrN6atyJ5EpCeM3oCftWcqTMe5Jh4rjImJdwBQceE5gkHnrgIXERGRkUtFiYi4RmJaAsmZiQAc23/CbJgBmjPLPh1z+MgZw0kG5pYphQDsrKkjEAgaThPaosMiuCHLnvHx5IlSw2muXWHCLQB0+M9S1+HMLT4iIiIysqkoERFXGV1on2Bw+kDXoon249h/sI5g0LkFw6L8XADOd3RRcVYzJUy7dcxUAErPn+Bcd5vhNNcmzpdFaoRdwO1tftRwGhEREXEjFSUi4io5E0cBUL6j0nCSgZky2X4cHR091NadN5zm2mUlxJEaGw3A2opqw2lkXup4or3hADxTu9dsmAGYmvRuAM527aejr8FwGhEREXEbFSUi4iqT5k8A4HSVc4egAmRmJBAdbb+g3be/1nCagVly8VTJmnIVJaaFebysGjUZgD+d2G04zbXLjVtMuCcWCLK/+Y+m44iIiIjLuKIoCQaDrF+/nq9+9at88IMf5J3vfCef+MQn+M1vfsPJkydNxxORYZRfMg6ArvZuLjS2GE5z7SzLurz9ZvvOo4bTDMyNxXZ5dbSxiY6eXsNp5N7cOQCc7rrAsTZnXofyWGFMSrgTgMqW1fiDzt1yJSIiIiOPo4uSrq4uvvGNbzBmzBhuuukmVq9ezYULF/B6vVRXV/PlL3+ZcePGcfPNN7N9+3bTcUVkGIyZmI1lWQAcP+Dskxjz5+QBcOiwczf4AMweOxqPZREIwo4aldemFSVkkRoRC8AztWWG01y7yUnvwMJLX7CDmrYNpuOIiIiIizi6KJkwYQJ79uzhZz/7Ga2trWzfvp0nn3ySRx99lBdeeIHa2lqOHj3K4sWLuffee3n44YdNRxaRIeYL95E+NhWAY/ucvfmm5OK645bWLprOtxtOc+2iwn0UZtgfk/VHtCbYNMuyePf4eQCsPrWf/oDfcKJrEx2WzPi46wHY3/wHw2lERETETRxdlLz44os88cQT3Hrrrfh8vjd9n7Fjx/LFL36Rqqoqli1bNrwBRcSI4oUTAeefKBk/Pp2oKHtOycHyU4bTDMytU+2PiU6UjAy3j5mGBTR0t7GlwbmzY4oS3wZAU88RznU7e4CziIiIjByOLkqKi4uv+H3Dw8MpKCgYwjQiMlKMmzIWgIpdVYaTDEyY18PkSfaa4L0OPx1zaU3wiaYL1DU7d3aMW6RHxjM50d6s9D9HtxpOc+3SIycTG2bP8ilresRwGhEREXELRxclf0tHRwe//vWv+fGPf0xVlbNfKInI1Rt/8crKyYrT+Pudea3gkssDXXcdM5xkYCakpxATbp/8W1/p7MfiFu/LWwBAadMJmns6DKe5NpZlMS35fgBqOzbT7W81nEhERETcwPFFSW1tLUuXLiUuLo4VK1ZQW1vLjBkz+Md//Ec+/vGPU1JSwsaNG03HFJFhNG6qfaIk4A9wqtrZa4JnlNiP5Ux9C13dzt0YY1kWs3NHA/DiQV2RGAmuz5xIhCeMIEFHD3UtiF+Jl3CCBDjc/IzpOCIiIuICji9KPve5z9Hb28tPf/pToqOjWbVqFQUFBZw5c4azZ89y88038+CDD5qOKSLDKCUriYiLsz2O7asxG2aAJk3MvvzzwxVnDCYZuJunFAKw/1Q9fX5nn/Rxg3BvGDdm21dYf3d8h+E01y7ME0lBwo0AHG59hmAwYDiRiIiIOJ3ji5KNGzfy3//937znPe/hN7/5DUeOHOHf/u3fyMjIIC0tjX//939n//79pmOKyDCyLIvs/AwADm2pMJxmYKKjwsnMSACgdE+N2TADtDgvF4A+f4Cyk84ufdzi3Xn29pv67lYqWpz7MZma9G7AorO/kboO55Y+IiIiMjI4vihpbGxk7Fj7aHpycjLR0dFkZGRc/vXMzEyam5tNxRMRQwpn2cObq/fWmA0yCEqm2TNXSh3+WJJioshJTgRgbYVzN624yaSELArj7Tk4Tr5+Ex+ezZgYu/TZ1/yo4TQiIiLidI4vSoLBIJZlXf7n1/9cRELXlCWTAKg/3mA4ycDNnTUOgBMnz9Pvd/a1grtKigDYUu3sLT5uclfOdACeri2j199vOM21m5RwFwD1Xftp7XX2Om0RERExK8x0gMHwpS99iejoaAB6e3v5+te/TkKCfVS9s7PTZDQRMSR/ul0unDt1nguNLcSnxBlOdO2mTh4DQFdXL8ePN1KQn/F3/o2Ra0lBLv+9bivVjeepa25hdFKC6Ugh7+ZRU/ivgy/R6e9lXf1hbhw1xXSkazImZi6RngS6Ay3sa36MxRmfNx1JREREHMrxJ0qWLFnCkSNHKCsro6ysjAULFnDs2LHL/3zkyBGWLFky5Dl6enooKSnBsiz27t37hl+rra3ltttuIyYmhtTUVD7xiU/Q2+vc7RUiTpAzaRQej33C7KjDr6ykpMSSlGiXwWX7nX0SoygrnZgIe9DuugqtCR4JkiJimJ1iX2F9pHqr4TTXzrI8FCfdA0B1y8v0B7oNJxIRERGncvyJkvXr15uOAMDnP/95srOz2bdv3xve7vf7ueWWW0hLS2Pz5s00NTXxvve9j2AwyI9+9CNDaUXcL8wXRtqYFM6eOEf5tkqm3+DM75JfUjghi+07j7Jt51Huedsc03GumWVZzB83hlcrjvL8gQreO3+66UgCvDdvATubajjYcpqzXa1kRMWbjnRNJiXeRWnTr/HTS1XrS0xKvNN0JBEREXEgx58oGQlefPFF1qxZw3e+852/+rU1a9ZQXl7Oo48+yvTp01m+fDnf/e53efjhh2ltbTWQViR05JfY128ObCo3nGTgFszNA+BIZT3BYNBwmoG5bepEAA6dOUt3n3NnYrjJwvR8YrwRAPzpxG7Daa5dhDeO3JjFAJRfeNrxnysiIiJihqNPlHzmM5+54vf93ve+NyQZzp49y4c+9CGeeeaZy3NSXm/btm0UFxeTnZ19+W2rVq2ip6eH0tJSrrvuuiHJJSIwZdlktvx5F8cPnDQdZcBKptqbbzo7ezl15gKjs5MMJ7p2C/PGYlngDwTZcfwkSyeMMx0p5IV5vNw+Zhq/r9nJC3X7+efC6xw7HL0k5b0c71hPc+8xznYfIDNqqulIIiIi4jCOLkrKyt64yrC0tBS/309hYSEAlZWVeL1eZs6cOSR/fjAY5P3vfz8PPPAAs2bNoqam5q/ep76+/g3rigGSkpIIDw+nvr7+b/7ePT099PT0XP7nS6dPAoEAgcDQbb0IBAIEg8Eh/TNEhkvBxYGuFxpa6GzrdPRze1R2IpGRPrq7+9hTVkN2pnOHoEaH+8hPS6GqoYlXyitZnD/WdCTHGsyv2fflzub3NTs52dlMWVMtJcljBiHh8EsKzyM9opiGnoOUNv6Km0Z/33QkuUr6u4i4kZ7X4kZOfF5faVZHFyWvvfba5Z9/73vfIy4ujkceeYSkJPs7rc3NzXzgAx9g8eLFV/X7Pvjgg3zlK195y/fZtWsXW7dupbW1lS9+8Ytv+b5v9l25v1xr/JceeuihN83Q2NhId/fQDagLBAK0tLQQDAbxeHQzS5wtLvv/Tnnt2biftPwkRz+3J0/KpLTsJLtKq5kzM8t0nAFZnjeGqoYmNlef4OzZs449vWDaYH7NjgYmxqRR0dHIw4df48sFNw5OSANGW6to4CBnuvdQU3+QaE+66UhyFfR3EXEjPa/FjZz4vG5ra7ui93N0UfJ63/3ud1mzZs3lkgTskxtf+9rXWLlyJZ/97Gev+Pf62Mc+xn333feW75Obm8vXvvY1tm/fTkRExBt+bdasWbz73e/mkUceITMzkx07drzh15ubm+nr6/urkyav98UvfvENV4taW1sZM2YMaWlpxMcP3ZC9QCCAZVmkpaU55sku8jelQ3Z+Jqer6zlf20LBrHGOfm4vml9IadlJjlSdIz3d2S/8bp3h46fb9lLf1kG7x0deWrLpSI402F+z7+6aw9cOrGb7hRPEJicSHRY+CCmHX2rwFg4ef5jeQCsnPS+wOF2rgp1EfxcRN9LzWtzIic/ryMjIK3o/1xQlra2tnD17lsmTJ7/h7Q0NDVfcGl2SmppKamrq332/H/7wh3zta1+7/M+nT59m1apV/PGPf2Tu3LkAzJ8/n69//eucOXOGrCz7O8Br1qwhIiLiLa8ERURE/FUBA+DxeIb8SWhZ1rD8OSLDYdSELE5X17PvtYPMe/t0Rz+3L80paWhspaGxjcwM516/GZ+WTHJ0FOc7u3i14igFGX//a668ucH8mn3L6Kl88+CL9AcDrD61n3vHOXPDkgcP05Lfya5zP+do6xrmp32ccG+M6VhyFfR3EXEjPa/FjZz2vL7SnM54NFfgrrvu4gMf+ABPPPEEdXV11NXV8cQTT/DBD36Qt73tbUPyZ+bk5FBcXHz5x4QJEwDIy8tj9OjRAKxcuZKioiLuv/9+ysrKWLt2LZ/73Of40Ic+NKQnQ0TEVjjT3hZTtee44SQDlzs2lYgIu98u21drOM3AWJbF4oJcAF44eMRsGLks1hfJdZn2VqJHjm41nGZgJiXchYcwAvRxuOVp03FERETEQVxTlPzsZz/jlltu4T3veQ9jx45l7NixvPvd7+amm27iJz/5ibFcXq+X1atXExkZycKFC7nnnnu4884733SVsIgMvknz7AKz8WQT/n6/4TQDY1kWhQWZAGzZVmk4zcDdOsV+QV7d0ERbd8/feW8ZLh/IXwjAyc5mKlrOGE5z7cK9MRTE23NWDl/4M4Ggsz//RUREZPi4piiJjo7mJz/5CU1NTZSVlbFnzx7Onz/PT37yE2Jihue4bW5uLsFgkJKSkje8PScnh+eff57Ozk6ampr40Y9+9KbXakRk8OVPzwUg4A9w5miD2TCDYMG8fAD2HzplOMnAzckdjddjEQQ2V9eYjiMXFSeOIifanhnzxIlSw2kGpiTlvVh4aO+v50T7ZtNxRERExCFcU5RcEhMTw9SpU5k2bdqwFSQiMnIlZyYRFWsXkzUHThpOM3AzLxY/ra1dNJ67uvlLI02EL4zJWfZQ65fLqw2nkUssy+K9efMBeL5uP539vYYTXbs4XxZjYhYAsLvpYcNpRERExCkcXZQ88MADnDx5ZS98/vjHP/LYY48NcSIRGYnyZ4wH4MSBOsNJBm58bhpRUT4A9rmg+LmzZBIAu2rqCASChtPIJTePnkqEx0tHfw+r6/aZjjMgU5PfCUBL7wkauysMpxEREREncHRRkpaWRnFxMTfddBM//elP2bVrF6dOnaKpqYnq6mqeffZZPv/5z5OTk8MPfvADpk6dajqyiBgweX4hACfKnV+UeL0epk8dC8C+/c4e6ApwfaE9bLepo5P9p+oNp5FL4nyRLM6w5/v8pnqL4TQDkxE5hfiwUQCUnvuV4TQiIiLiBI4uSr761a9SVVXFkiVL+NnPfsa8efPIyckhPT2dwsJC3vve93Ls2DF++ctfsm3bNqZMmWI6sogYUDDTPlFydE8NwaDzTy1MmzoGgK07jxpOMnCZCXHkJNlrjp8/oO/2jyT/kL8IcP5QV8uymJ7yDwDUde6go6/RcCIREREZ6RxdlACkp6fzxS9+kX379tHU1MSePXvYsmULR44cobm5mSeeeIKVK1eajikiBl0qSnq7+jhz7KzhNAM3bYpdlDQ1tdN0vt1wmoFbWVQAwMuHnL/Jx02KE0eRFWWXWE4/VZIXfz3hnlggyMHmP5qOIyIiIiOc44uS10tMTGTatGnMmzeP/Px8LMsyHUlERoDM3HTCI+25HpWlxwynGbj8vAzCwuwv3/sOOP/6zS1T7KtRje2dnGi6YDaMXGZZFu8dbw91feV0uaOHunqsMIqT7gWgsvUF+gJdhhOJiIjISOaqokRE5M1YlsXowmwA9q07aDjNwIV5PeSNSwdg6zbnb4uZmJlGfKS9mejlcp0qGUnuyJlOhMdLX9DPy6ed/bkzOfHthFmR9ATaONLyvOk4IiIiMoKpKBGRkDB5wUQAyre744X4/Ln2ENQyFwx0tSyLpRPs61EvHHTHx8ct4nyR3DzaHoT++PFdhtMMTIQ3jvFxywHYd/5/CQYDhhOJiIjISKWiRERCwtSl9hrasycaXTHQde5su1hoOt/B+eYOw2kG7tKa4KqGczR36lrESHL32FkAHGw57eihrgDTLq4K7vI3U9u+zXAaERERGalUlIhISMifPg6ArrZu6o83GE4zcAX5mcREhwNQtu+E4TQDN3vsaGIjwvEHgqyvdP4cGTeZ4qKhrgnhOaRFTgZgd9PDhtOIiIjISKWiRERCQtb4DKLiIgE4stv5a3XDvB6KJo0CYMu2KsNpBi48zMvMHHuOzNNl5YbTyOu5aagrwKyUfwKgufcojd1aSS0iIiJ/zTVFydmzZ7n//vvJzs4mLCwMr9f7hh8iEtosyyJ1TDIA+15z9lDKS6ZPywGgtMz5J0oAbp5iz5HZU3ua3v5+w2nk9e7ImY7X8tAX9LO6bp/pOAOSHT2d+DC7ZNzb9L+G04iIiMhIFGY6wGB5//vfT21tLf/xH/9BVlaWVgOLyF8pmDWek+WnObTtiOkog2LOrPH84tcbaGnt4mxDKxnp8aYjDciyCeOwgP5AgB3H61hckGs6klwU54vkusxCXj1zmP89tp135M42HemaWZbFrNR/Yl39l6nt2ExLbx0J4aNNxxIREZERxDVFyebNm9m0aRMlJSWmo4jICDVpfj7rfruZU5VnCAaDji9Ux+emERERRk9PP6VlNdy8aqrpSAOSEBVJQXoqlQ3neGZfuYqSEeaD+Yt59cxhjref42DzKYqTRpmOdM1y45YSd24Ubf2nKG36Fddnfdl0JBERERlBXHP1ZsyYMa7YZCEiQ2fcVPuqSm93H2dPNBpOM3Aej8XECVkAbNrijrW6d0yzr99sqqrR1/QRpjhpFMWJdjny22NbDacZGI/lpTjpHQAcb1tHZ/95w4lERERkJHFNUfKDH/yAL3zhC9TU1JiOIiIjVHpuKuGRPgCqSt2xWWXJokIAKi6eknG6VZMnANDa3cOhM87fTuQ29+XOAeDlU4do7nH2WurChFsJsyIJEmDf+cdMxxEREZERxDVFyb333sv69evJy8sjLi6O5OTkN/wQEbEsi0nz7BfilS4pSmbPyAWg+UInp043mw0zCEYnJTAhIxWAVw9XG04jf+nGUZOJ9PoIEOT3x3eajjMgYZ4IihPvAaDiwjP0BToNJxIREZGRwjUzSn7wgx+YjiAiDlAwYzz71h9yzUDXMaOTSU6K4XxzB7tKaxg9yvnF8JL8XCrPnuPpveV86oaFpuPI60R4fdw5Zjp/qNnJ745v58OFS/Fazv2ey5Tk+9jX/Bh+eim/8BTTkt9jOpKIiIiMAK4pSt73vveZjiAiDlAwazwAR3ZUuWKgq2VZ5I1P53zpcTZtOcJdt88wHWnAbiyewC+37OZsazsnmi4wNiXRdCR5nffnL+APNTtp6etmQ30l12dNNB3pmkV44yiIv4nK1uc51PwUU5Luw2O55q9GIiIico2c+20goLW19Q0/f6sfIiIAhbPyAHug6+mj9YbTDI6li+zrROUVZwgEnD+nZHJWOvGREQC8cMAdJ3/cZFR0EiVJYwD436PbDKcZuBkp78fCS6e/kaNtr5qOIyIiIiOAo4uSpKQkGhrsYX+JiYkkJSX91Y9LbxcRAcgcl05EVDgAFTvdMQNj5vRxAHT39FFz4pzhNANnWRbLJ9qF1p/3lxtOI2/mwxOWArD7fA0n2psMpxmYWF8GeXHLAdjd+LArhiKLiIjIwDj6fOm6desuD2p97bXXDKcRESewLIuxRaOpLD3Gnlf2c8O7FpuONGBZmQnEx0XS2tbNrtJjjB+XZjrSgL1txmSe2ltOTdMFzra2kxEfazqSvM6C9DxyYpKp7TjPb6q38GDJ7aYjDcjU5HdR3fYyHf4GTnZsJyd2vulIIiIiYpCjT5QsXbqUsLCwyz9/qx8iIpdMXVoEwJHd7jhRAjBtag4Au/bUmA0ySKaPySYpOgqAtRVHDaeRv+SxPNydMxOA5+r20tXfazjRwCRHjCctcjIAu879zHAaERERMc3RRcmb6ezspKKigv3797/hh4jIJVOX2i+I6o814O/3G04zOJYtKgTgcMVp+v0Bw2kGzuvxsGJSPgBryisNp5E38/bcmXgtD70BP38+udd0nAGbnfJhAJp7j9HQpStfIiIiocw1RUljYyO33norcXFxTJ48menTp7/hh4jIJYWz7fkXPV29nCivM5xmcMyYPhaAjs5eKo6cNpxmcKwosouSHcfraO7sMpxG/lK8L4obsiYB8OuqzY6f7ZEVXUK8bzQAu5seNpxGRERETHJNUfKpT32K5uZmtm/fTlRUFC+99BKPPPIIBQUFPPvss6bjicgIkpyZRFyyPfPi8HZ3nFZISowhLS0OgC3bqgynGRxzc8cQ7vUSBF497J5rUm7yTwVLADjT3cLe8ycNpxkYy7Iunyo53VnKhd5aw4lERETEFNcUJevWreP73/8+s2fPxuPxMHbsWN7znvfwrW99i4ceesh0PBEZYcZOtteblr7inqt582aNB2DLNneUCuFhXuaOs7/D/2TZIcNp5M0UJmSSF2sPD37s+HbDaQYuN24JCb4cIMiept+YjiMiIiKGuKYo6ejoID09HYDk5GQaGxsBmDJlCnv27DEZTURGoOnXTwHgyC53lAoASy7OKTl56jydnT2G0wyOd8y0P0776+pp73H2wFC3+nChPTB97ZkKznW3G04zMJbloSTlfgCOta2lre+M4UQiIiJigmuKksLCQo4cOQJASUkJP//5zzl16hQ/+9nPyMrKMpxOREaa4kUTAWg82URvtztegE8tHo3HYxEMwt79zr4Gccni/Fy8HotAMMimquOm48ibWJ41iaTwGPqDfn57dKvpOAOWF7eccE88EGR34y9MxxEREREDXFOUfOpTn+LMGfs7P1/+8pd56aWXyMnJ4Yc//CHf+MY3DKcTkZFmwkz7mkowGKR6b43ZMIMkIsLHuLGpAGzb4Y6VulHhPhbn5wLwiuaUjEg+Txh3jikB4I81u+j195sNNEAeK4wZKR8A4Gj7Wjr6zxlOJCIiIsPNNUXJu9/9bt7//vcDMH36dGpqati1axcnT57k3nvvNRtOREac2MQYMsfZ1/Uqd7mjVAC4flkRAPsOumcQ5S1T7CtFrx05Rk+fs1+Eu9V78+bjwaLT38vqugOm4wzYpITb8VnRQJDSpl+bjiMiIiLDzDVFyV+Kjo5mxowZpKammo4iIiPU5AX2C/CKXe7YEgMwa0YuALUnz9PQ2Go2zCBZWjAOj2XR1dfP1mMnTMeRN5EaGcfSTPvz6WeV6x2/KtjrCack2Z5VcrTlZbr9F8wGEhERkWEVZjrAYPnMZz7zpm+3LIvIyEjy8/O54447SE5OHuZkIjJSFc7OZ+1jm9jzqns23xTkZRAREUZPTz+7Smu45cappiMNWHxUJJMy0zh0poE/lR7kusI805HkTXykcBmv1VdwuusCe5pOMDM113SkASlKejv7m/9AT6CFg81/Ylbqh0xHEhERkWHimhMlZWVl/OpXv+IXv/gFGzZsYP369Tz88MP86le/Yu3atXzmM58hPz+f8vJy01FFZISYOLcAgOb6Ftqanb2t4xKPx6JoYjYA6zdVGE4zeO6eWQzA5uoT9Pb7DaeRNzMpIYuJ8fbw9EePOX9VsM8TxZRk++rugeY/0uNvM5xIREREhotripI77riD5cuXc/r0aUpLS9mzZw+nTp1ixYoVvPOd7+TUqVMsWbKET3/606ajisgIkVeSi8djAVCx0z2DQpcttjf6HDhURyDg7CsQl9w4eQIW0Ov3s03Xb0asBy6uCl5XX8GpzmbDaQauKOFtePDhD/aw//zvTccRERGRYeKaouTb3/42X/3qV4mPj7/8tvj4eB588EG+9a1vER0dzZe+9CVKS0sNphSRkSQ8wkfm+AwAytY6fwDlJXNn2xt9urv7OF7TaDjN4EiKjmJipj1898k9hwynkb9lWWYhGZHxBAjycOVG03EGLNwbQ1Hi2wE42Pw4fYFOw4lERERkOLimKGlpaaGhoeGv3t7Y2Ehrqz3QMDExkd7e3uGOJiIj2OSF9gDKvesOGk4yeDIzEkhMiAJgZ+lxw2kGz72z7Os324+f1PWbEcprebgvdzYAz57cR0d/j+FEA1eS8h4svPjp4WDzE6bjiIiIyDBwTVFyxx138A//8A88/fTT1NXVcerUKZ5++mk++MEPcueddwKwc+dOJkyYYDaoiIwoM1dMA+D0sXrHb+p4vaWL7AJoT1mN2SCDaNXkCXg9Fq3dPbp+M4LdO24OYZaHvqCfP9XsNh1nwCK9CRQm3ArAvvOP0h9wfvkjIiIib801RcnPf/5zbrjhBu677z7Gjh1LTk4O9913HzfccAM/+9nPAJg4cSK//OUvDScVkZGkaJ5dnnZc6ORUdb3hNINn9iz7+s3eAyfp6ekznGZwJEVHMXVUJgB/3O2eq1JuE+eL5NbR9ral31RvIRAMGE40cDNSPoCFl/5gF5WtL5iOIyIiIkPMNUVJbGwsDz/8ME1NTZSVlbFnzx6ampr4xS9+QUxMDAAlJSWUlJSYDSoiI0rmuHTikuyvEYe2umdLzIxpOVgW9PX52XvgpOk4g+b2aZMAbb8Z6T5UsASA870dbG5w/qDk6LAUJiXeAcD+878jEOw3nEhERESGkmuKkktiY2OZOnUq06ZNIzY21nQcERnhLMtidKG9Tnf3y/sMpxk80dERjM1JBWD9RvcUQK/ffrP1qK7fjFQ5sSnMS7NPNf3v0W2G0wyOqUnvwsJLe389lS2rTccRERGRIeS6okRE5GpNv96+JnB4e6XhJIPr0pyS7buOGk4yeF6//ebxUl2/GckunSrZfu4YVa1nDacZuFhfBmNjFgOw+9zDOlUiIiLiYipKRCTkTVtWBEDDiXP0dLlnUOOiBQUANDd3Un+2xXCawXPPxe03W47q+s1INjsll5yYZAB+WvGa4TSDY07aRwCL7kALlS2aVSIiIuJWKkpEJOQVzs4DIBgMUu2iLTH549OJivQBsHP3McNpBs+NkyfgsaCn38+2Y7Wm48jfYFkW789bCMDa+grO93QYTjRw8eHZ5MbYJ2V2nfuFTpWIiIi4lIoSEQl5MQkxpF+c51G+7YjhNIPHsiwWzLdPlewqrTEbZhAlRUcxf/xYAFYfdM/Hy41uHzONKK+PAEF+U73ZdJxBMTf9o4BFT6CF6taXTccRERGRIaCiREQEmH79FAAqdjp/Q8frLZhjn5bZXXacfhddU1lVlA/ASwcrdf1mBIvw+njXuLkA/OH4Trr6ew0nGrg4Xzb5cSsAKDv/iE6ViIiIuJCKEhERYNI8++TF/g2HDCcZXDNn5ALQ1dVHecVps2EG0Yqigsvbb7YcrTEdR97C+/IW4LU8dAf6ea7OHZulZqb+IxZe2vrOcEQbcERERFxHRYmICFA0fwIAFxpaaaxrMpxm8CQmRJOVmQDAhk3uuaaSFB3FpCx7+80fd2v7zUiWFBHD23NmAvDI0a34gwHDiQYuzpfF+LgbANitWSUiIiKuo6JERATIKRpNWHgYAIe2uqdQgP/bfrNlW5XhJIPrnbPttc6bq0/Q3acXqiPZ+/MXAFDbcZ51Zw4bTjM4ZqV+CHtWSStHWp43HUdEREQGkYoSERHA6/WSO3kMALtfKjOcZnAtWVgIQH1DK80XnL955JJVRQV4LIv+QID1le7Z6uNGY2KSmZc6HoAfHl5rOM3giPNlMj72OgB2nXsYf7DPcCIREREZLCpKREQumrHcPqGwf6M7vuN9yaSJ2fh8XgB27j5uOM3giY+KZEn+xe03B9x1CsiNPj7JvqpS09FEWdMJw2kGx+y0jwAWvTpVIiIi4ioqSkRELpp+g7355uyJBnq7nb+d45Iwr4fZM8YBsKvUPUUJwB0lRQCsrzxGW3eP4TTyVqYmjSYvNg2A/3bVqZLrAdjX9KhOlYiIiLiEihIRkYsmzc3HsiwC/iCVpe66ynFpTsnO0uP4/c4fpnnJsgnj8Xk99PkDvFxeaTqO/B2XTpWUnj/BiXZ3DE2ek/YRPITR4W+gquVF03FERERkEKgoERG5KCYhhpyiUQAc2FhuOM3gmjPLPlHS2tpFxZEzhtMMnqhwH/PG2bNl/rBL229GuusyC0mLiAXgkeothtMMjlhfBhMSbgFg17mf61SJiIiIC6goERF5ndwi+0X3jhf2GE4yuFJT4shIjwfgtU0VhtMMrnfNmQbAodNnOd/RaTiNvBWP5eEjhfYA1Gfr9nG+xx3DhUuS7+fSBpyKC8+ajiMiIiIDpKJEROR1Zq0qAeDYvhMEg0GzYQbZ4oUTANi0xV1XVBbm5RIR5iUIrN6voa4j3e1jppHoi6Yn0M+vqzabjjMoYn0Z5MUuB6C06Zf4A+6ZcSQiIhKKVJSIiLxO8aKJAHS1d1Nf02A4zeC6brH92M42tHKuqc1wmsETHuZl2QT7atFTew8ZTiN/T4TXx9vHzgDgjzU76ep3R6kwJ+0B7A047Ry68KTpOCIiIjIAKkpERF5nVEEWEVHhAJRvcdfphImFWYSHhwGwbcdRw2kG1zvnlABwuL6RMy3uKYHc6n15C/BaHroD/TxZW2o6zqCI8aVTEH8TAGVN/0NfoMtwIhEREblWKkpERF7HsizGTxsLQOmr+w2nGVxer4e5s8YD7lsTPHvsKNLiYgB4dv9hw2nk70mKiOGmbHsd98+PbKQ/4DecaHDMTv0wXsLpC3ZSfuEp03FERETkGqkoERH5C/NumQXA8QO1hpMMvqWLCwHYXVZDX587XpwCeD0ebii0S6DHd2v7jRN8dOIyAC70dbLmtDu2TEWHJVOcfA8A+5r+l15/u+FEIiIici1UlIiI/IXJi+wy4eje43S2uev4/OyZ47As6Ozs5cChOtNxBtXbphcDcOpCK8fPNRtOI3/PmJhklmbYA4Z/Xb3ZNcOTpya9C68VQW+wgz1N/2M6joiIiFwDFSUiIn+hcHY+Ho9FMAiHt7trQ0xCfBSjs5MAWLfeHd/Fv2TKqAwSoyIBeGKPTpU4wccn3gDAkdZ6Np6tMpxmcER44yhOtE+VlF94gq5+lXYiIiJOo6JEROQvREZHkJWXAcCul/aaDTMEli2ZBMCWHdWGkwwuy7K4s6QIgKfKDrnmhIKbFSZkMj8tD4Dvla8xnGbwlKS8hzArkgB+djc9bDqOiIiIXCUVJSIib2L6dfY1jj0uG+gKsGSRfd2hubmT02cumA0zyO6dNRWA5s5u9tXVG04jV+IjE5YBcKy9kT3nTpgNM0h8nmimJ78PgMqW1XT0NRpOJCIiIldDRYmIyJuYdeN0AGoPn6K/r99wmsGVPz6d6Gh7BfLmbe66WjQuNYnibPs0kLbfOMP0lBzyYtMB+O5h95wqmZz0DsI9sQQJaFaJiIiIw6goERF5E5MX2gNd/f1+ju5zx3e5L7Esi/lz7OsOO3e7a00wwB3T7KtFz++voM/vns0+bvaZohUA7G+u40iLO04ChXkimJP6EQAqW1fT2nvacCIRERG5UipKRETeRGJaAtkX55Qc2lxhOM3gu26pXSbsO3CSzs4ew2kG183FhVhAa3cPm6pqTMeRK7A4o4CsqAQAfl65wXCawTMh4WbiwrIJ4mdbw3+bjiMiIiJXSEWJiMjfMHWJPRj04Fb3FSUzp48lLMxDX5+fXaXuOlWSEhtNcXYmAI/u2Gs2jFwRy7L45KTlAKw9c5iTHecNJxocHiuM6SnvB+Bk51aae9z1uSYiIuJWKkpERP6GyYvsUxe7X97rug0qUZHh5F88MfPy2oOG0wy+++eXALDj+Enau911YsatVmVPZkx0MgGC/Lhinek4gyY/fiXR3lQAtjZ833AaERERuRIqSkRE/obiRRMB6Grr5syxs4bTDL5VN1zc7FNWi98fMJxmcK2YmE+Yx4M/GOTFQ+4aWOtWYR4v78tbAMCLpw5yrrvNcKLB4bG8zE//JABnuspo7HbfCTURERG3UVEiIvI3jMrPJDImAoADG923QWXRggIAunv6qDhyxnCawRUV7mNRfi4AT+45ZDaMXLG7cqYT440gQJCfVq43HWfQ5MYuJT5sFABbz37PcBoRERH5e1SUiIj8DZZlkT9jPADbntttOM3gS0uNIzM9HoC168sNpxl898+dBsC+U2eob3HH6QS3C/eG8YF8+1TJUyfKaO3rMpxocFiWxcKMzwHQ2HOYuo5dhhOJiIjIW1FRIiLyFubePAOAQ1uPGE4yNJYtseew7HHZCmSAeeNzSIuLIRiEp/e6rwhyq/fkzSfc46U/6OfXVZtNxxk0o2JmMTp6DgA7Gn9MMOiu624iIiJuoqJEROQtTL/enuNxoaGF5oYWw2kG33VL7TksNSeaOFN/wWyYQeb1eLi+MA+AP+7ebziNXKmYsAjuGzcXgD+dKKWz3z3DeGenPgBAc+9RqltfMZxGRERE/hYVJSIibyF/+rjLc0oObnbfEMYJ+RkkJkQBsHGz+07N3DdrCgD1re0cqW80nEau1D8VLCbaG05rXxd/rHHPNZWUyAJGR88DYHvjj/AH+wwnEhERkTejokRE5C14w7yX55Rsd+GcEsuyKJmaA8Ar69w39HRiZhrpcTEAPLpjr9kwcsUSwqO5b5x9TeVnRzbQ1d9rONHgWZjxacCiJ9DCoeYnTMcRERGRN6GiRETk75i6uAiAva8dNJxkaKy4YTIAR4830tHhnmsOYBdB75xtD3VdffAIfX6/4URypd6bNx+v5aHT38tjx3aYjjNo4nzZFMTfBMCepl/TG+g0nEhERET+kooSEZG/Y8YK+/pGQ+05Olo6DKcZfLOm5+L1WgSDsHP3MdNxBt3dM4qxgM7ePjZXu29orVulRMRy55gSAH5ZtZEev3uuqcxJfQAPYfQHuzlw/g+m44iIiMhfUFEiIvJ3TJyTj8djAXBoa6XhNIMvIsLHxAlZALz0ivtOzaTFxbCkYBwAz2j7jaP888Tr8WDR4e911aySqLAkpqe8H4ADzX+gs/+82UAiIiLyBipKRET+joioCEZPyAZg+/Pum1MCcOPFUzOHDp+iv99911Pumm5fn3q14igXOrsNp5ErlRYZxy2jpwLw88oN9AX6DScaPMVJ9xDpSaI/2MXOhh+bjiMiIiKvo6JEROQKzFplz7moLHXf1RSAxQsm4PFYtHf0sP9gnek4g+66CeMJ93rxBwI8u0+nSpzkE5NuwIuH1r5unj25z3ScQePzRFGScj8A1e2v0NLrvs87ERERp1JRIiJyBWatKgHgaNlxerrcNfAUIDExmsKCTABeduH1mwhfGCsm5QHw6E73vNgOBZlRCdw5djoAv6jcSH/APSeeihLvItKbCATZ2vA903FERETkIhUlIiJXoGhBIZYF/X1+KnZUm44zJBbNzwdgy/YqgsGg4TSD773zZwBQe/4CRxubDKeRq/HB/EVYWJzuusCzJ/eajjNoPFYY89M+CcCpzl00dlcYTiQiIiKgokRE5IrExEeTnpsOwM4X9xhOMzSWLZkEQHtHD1XVZw2nGXxTR2WSEhMNwO927jUbRq7KmJhklmUWAvDDw2vxBwOGEw2e8XE3EO8bBcCWs991ZUkpIiLiNCpKRESu0IzriwHY9dJes0GGyKjsJFJTYgFYu959czwsy+LeWfbQ2hcPVuEPuOfFdij4TNEKAJp6O3jx1AHDaQaPZVksTP88AOd6KjjZsc1wIhEREVFRIiJyhebcfPHqRnkdfb19htMMjWWL7e/ar9vgzisA98ycgmXB+c4uth6rNR1HrkJubCqL0gsA+H75KwRcdKpkVMwMcmIWArC98YcEgu7Z7iMiIuJEKkpERK7Q1CX2ilm/P0Dlbnduv1lxg31qpvFcG6fPXDAbZghkJsQxb9wYAB7dsddsGLlqny1aCUBDdxuvnjlsOM3gmpP2EcCite8U5ReeNh1HREQkpKkoERG5QvEpcWSOs+eU7H3NfZthACbkZ5CWGgfAlm1VhtMMjTum2YXX5qoaWru6DaeRq5Efn87KLPvj99Mj6111qiQxfCx5cfb1ot3nfkGvv8NwIhERkdClokRE5CrMu3UmAPs3um+GB9jzEhbMs7ffvPiKe+ZAvN6qogJ8Xg/+YJBn97nrVEIo+OjE6wCobmvgxVPuKiznpX0MD2H0B7vZ3fSw6TgiIiIhS0WJiMhVmLZsMgAHNh6mv8+dcwSWLJwAwLHjjVxo6TScZvBFhftYMdEugx7ZXmY4jVytvLh0FqXbH7/vHHrZVRtwosKSmJb8HgAOX3ia9j73bZ8SERFxAhUlIiJXYcpie4VuX08flbuPGk4zNKZNGYPP5wVgy7ZKw2mGxgcW2ieDTja3cOTsOcNp5Gr9y+QbATjX087qk+46+TQt+T1EeOIIEmD3uV+YjiMiIhKSVJSIiFyFhNR4UkcnA7DzBXeeRggL8zJ92lgAXnjJXS9CLynOziArwZ7F8mSpOx+jm42PS2NJun3y6XuH17jqVEmYJ4L56Z8CoLptDee6j5gNJCIiEoJUlIiIXKXp108BYPvqUsNJhs6tN04F4HDlGTo7ewynGXyWZfH++fa652cPVNDb785rVG72L8WrAGjqaefZ2n2G0wyuvLjlpITbRdCG+ocIBoOGE4mIiIQWFSUiIldp/u2zAag5eNK1c0rmzBqPL8xLIBBk+y53rkK+feokwjwWFzq7ebXCndeo3Cw3NpXrMyYC8MuqjfQH/IYTDR7L8jA37WMANPce5UT7JsOJREREQouKkkGwevVq5s6dS1RUFKmpqbztbW97w6/X1tZy2223ERMTQ2pqKp/4xCfo7e01lFZEBmrqEntOib/f79o5JZGRPubPywNg0xZ3zilJioliRs4oAH6zxb2ng9zss5NX4rU81HaeZ3XdftNxBlV2zHQyI0sA2NLwHQJBd5ayIiIiI5GKkgF68sknuf/++/nABz7Avn372LJlC+9617su/7rf7+eWW26ho6ODzZs384c//IEnn3ySz372swZTi8hAJKTGM25KDgD7N7hzTTDAkoWFAGzaWklPT5/hNEPjgxeHuh44fZYzLW2G08jVyolN4ZZR9lW47xxa46pTJQCLM/8FsOjyN3Ow+U+m44iIiIQMFSUD0N/fzyc/+Um+/e1v88ADDzBhwgQKCwu5++67L7/PmjVrKC8v59FHH2X69OksX76c7373uzz88MO0trYaTC8iAzF1SREAu15y50BXgHlz8rAs6O8PsKv0uOk4Q2JRfi6xEeEA/HGXu04khIoHCpdhARf6Onmq1l2fjwnhOeTH2bNY9jT9Dz1+lXkiIiLDQUXJAOzZs4dTp07h8XiYPn06WVlZ3HTTTRw6dOjy+2zbto3i4mKys7Mvv23VqlX09PRQWqqj3iJONW3ZZAAOba107ZyS2JgICgsyAVj9sjtLBK/Hw9um26XXH3bvJxDQ0EynGROTzPIs+2P4w8Ov0ueyUyXz0v8ZnxVNf7CTved/azqOiIhISAgzHcDJjh2zBxw++OCDfO973yM3N5fvfve7LF26lMrKSpKTk6mvrycjI+MN/15SUhLh4eHU19f/zd+7p6eHnp7/2zRx6fRJIBAgEBi6NYiBQIBgMDikf4aICYP93J7yujklh3dUMXlB4aD8viPNTSunUFFZT+meGnp7+wgL85qONOjeNXsav92+lwtd3eysOcmc3NGmI10xfc22fXrSCl49U05LXxdP1Ozm3tzZpiMNmnArnpLk97Or6SccbP4TE+JuIyHcOc/Ra6HntbiRntfiRk58Xl9pVhUlb+LBBx/kK1/5ylu+z65duy7/R/63f/s33v72twPwm9/8htGjR/OnP/2JD3/4w4C9hvIvBYPBN337JQ899NCbZmhsbKS7u/uKH8vVCgQCtLS0EAwG8Xh04EjcYyie2ynZSTSdbmbd45tIy08alN9zpJk0IRmA3j4/6zceYGpx9t/5N5wnEijJTmfv6QYe21ZKbnS46UhXTF+zbT5gSXIeG84f5acVr7EwcjThHveUemnBRURYv6MneIF1p/6ThTFfMx1pSOl5LW6k57W4kROf121tV3aNVUXJm/jYxz7Gfffd95bvk5ube/k/clFR0eW3R0REMH78eGprawHIzMxkx44db/h3m5ub6evr+6uTJq/3xS9+kc985jOX/7m1tZUxY8aQlpZGfHz8VT+mKxUIBLAsi7S0NMc82UWuxFA8t2ffOJ2Xfr2OA+sO8/Ef/OOg/J4jTXo6TMjPoLL6LPsPnmX59SWmIw2J++aUsPeZNayrPsF/3rmKhKhI05GuiL5m/58vxt3GlnU/pLm/i83dJ7kvd47pSINqUcznWFv/7zT7j9Abc5zRMXNNRxoyel6LG+l5LW7kxOd1ZOSV/R1PRcmbSE1NJTU19e++38yZM4mIiODIkSMsWrQIgL6+Pmpqahg7diwA8+fP5+tf/zpnzpwhKysLsAe8RkREMHPmzL/5e0dERBAREfFXb/d4PEP+JLQsa1j+HJHhNtjP7YV3zuGlX6/jZOVp+nv7CY90zkmEq3HjyilUVp9ly46jfDoIXq/7vjbcWFzIl55bS6/fzzP7DvOBBX/76/NIo6/ZtlExSdyTO5vfHd/BT46s566cGUSFuedzMjduCanNEznXU8Hmhm9z3/jH8Vju/WucntfiRnpeixs57Xl9pTmd8WhGqPj4eB544AG+/OUvs2bNGo4cOcJHPvIRAN7xjncAsHLlSoqKirj//vspKytj7dq1fO5zn+NDH/rQkJ4MEZGhN2XJJDxeD4H+AOXbKk3HGTKL5hcA0NzcwaHDpwynGRqRvjBunDwBgEe27SEY1FBXJ/pQwWLCLA8tfV38pnqL6TiDyrIslmb+KwCd/kYONT9hOJGIiIh7qSgZoG9/+9vcd9993H///cyePZsTJ06wbt06kpLseQVer5fVq1cTGRnJwoULueeee7jzzjv5zne+Yzi5iAxUTHw0E2blAbD75b1mwwyh9LR4srMTAXjBpdtvAD64aBYA9a3t7Kv728O2ZeRKjYzjnrH2x/HX1Ztp6xu6mV4mJEWMu7wuuKzpt3T7Ww0nEhERcScVJQPk8/n4zne+w9mzZ2ltbeWVV15h8uTJb3ifnJwcnn/+eTo7O2lqauJHP/rRm16rERHnKZpnn7bY/PROw0mG1k0rpgCwcUula1foFmakMjY5EYBfbdltNoxcs49OvA6f5aUn0M/Pj2wwHWfQzUv/OBGeOHqDbew592vTcURERFxJRYmIyADMuXkGAKer6+lq7zKcZuisuN4ugDs7eymvcOf1G4B/WGjPJtlUdZz27p6/894yEiWER/O+/AUAPHZ8O809HYYTDa5IbwLTU/4BgPKWp2juqTEbSERExIVUlIiIDMDkhROxPBbBYJCDmytMxxkymRkJZGUmAu6+fnPb1EnERITT3e/n+QPu/Xi63T8WLCbaG05/MMCvqzebjjPoihLvJNqbAgTZWP8N03FERERcR0WJiMgAREZHkDNxFACbn9rxd97b2W5aUQzAjl3HXXv9Jjrcx80Xh7r+YtMuDXV1qJiwCD468ToAfn98Jw3d7prl4bHCWJzx/wBo7DlMbZu7BteKiIiYpqJERGSA5t9mD48se+2g4SRDa8UN9vWbpvPtHD5y2nCaofPOOdMAON3SxsHTZw2nkWt1b+5sUiJi6Qn0891Da0zHGXRjYueTHmmXl5savkUg2G84kYiIiHuoKBERGaBLc0rqjzXQer7NcJqhk5WZSN64NABedPH1m6KsdEYn2uvbf72l1HAauVaRXh//VLAYgBdPHeBkx3nDiQbfkswvAhZd/vOUX3jKdBwRERHXUFEiIjJAE+fmExkdQTAYZO9rh0zHGVJLFhUCsH7zEVdfS3n/Arv8euVwNe09vYbTyLV6R+5sEsOjCQLfOvii6TiDLjE8h8kJdwOwp+k3dPU3G04kIiLiDipKREQGyBfuI2/6OAA2Pr7VcJqhtfLi9Zv29h4OHzljOM3QubNkMmEeD/2BAM/v11BXp/J5vHy2aCUA689WcrStwXCiwTcj9QNEeBLoDbSz5ex3TccRERFxBRUlIiKDYN6t9gkEt58oycpMJDMjAXD39pvYiHBuujjU9U97DhhOIwNx25hppEfGAfDdg+6bVRLhjWN26ocAqOnYwNlOd38NEhERGQ4qSkREBsGcm+yipOVcKw21jYbTDK1Vy+0Bkhs2Vbj6+s17508H4NDpBg6cqjecRq6V1/LwheKbANjUWMW+8ycNJxp8hQm3Ee8bA8CG+q8RDAYMJxIREXE2FSUiIoMgt3gMkTERAOx6eZ/hNEPr0vWbtvYeKirde/1myqhM8lKTAXh4827DaWQglmcVMS3JLhIeOvCC6wo+y/KwLPPfAWjtr+Nwy58NJxIREXE2FSUiIoPA4/FQtNAedLrpye2G0wytUdlJFORlAPDaRnfP77h/rn2qZG1FNa1d3YbTyLWyLItPF60A4FDLaTaerTKcaPClRxUxLmYZADsbf0qP370buERERIaaihIRkUGy5O3zADi6t8Z137H+S9ctnQjAS2sOEAi497HeXjKJcK8XfyDIE3sOmo4jAzAzZSwlF0+VfG3/cwRceD1lQcZnCLOi6A92safp16bjiIiIOJaKEhGRQTJrZQkAFxpaqDlYazbMELtuySQAWtu6OXT4lOE0Qyc63MfNxfZQ199s2+P6Aszt/mPabQDUd7fy59q9ZsMMgaiwJGan/hMAhy48xfmeo4YTiYiIOJOKEhGRQZIxNo2UUfZMi+3P7zGcZmhlZSaQnZ0IwPMvuHsmyz8umg1AY1sHu0+4txQKBRPiM7guw74i993yNfT6+w0nGnyTEu8kLiwbCPDama+q3BMREbkGKkpERAbRlEX2lZTNT+8wnGTo3XrjNAA2bjmC3+++awyX5KenMDNnFAC/3+Xelcih4gtTbsZjWbT0dfH4iV2m4ww6jxXG4oz/B0Bz71Gq29y3EllERGSoqSgRERlEi942F7DnlPT19hlOM7RWXG9vv+nq7mP/QfetXH29d8+1S6E15ZWca+8wnEYGIjs6kXeNsz9Pf1G5kfY+9w3pzY6ZwajoOQBsbfg+fYFOw4lEREScRUWJiMggmn7DFAD8/X4Ob3ffZo3XS0uNIz8vHYC16w8bTjO0lk/MJzrcR38gyO93ufuqUSj4p4IlRHl9NPd28tMj603HGRJLMv4fFl76Ah3sOvdz03FEREQcRUWJiMggik+OI2u8vTrX7WuC4fXXbyrp7/cbTjN0wsO83FVSBMCjO/bhD7j3qlEoSIqI4d3j7S1Vjx3fwbnudsOJBl+ML52S5PsBOHzhWVp63T1gWkREZDCpKBERGWSL7rKPvJdvO2I4ydBbsqgQy4LW1i5Ky2pMxxlSH1gwE4CWrm42V9eYDSMD9qGCJUR7w/EHA3zn0Mum4wyJkuT7ifeNJkg/W85+X4NdRURErpCKEhGRQTbvtlkAVJUep/V8m+E0Qys5KYbxuWkAPLt6r9kwQ2x0UgJTR2UC8JMN7h/W63bRYeF8bOL1ALxwaj+17U2GEw0+ryecBemfBuB0126Otq01nEhERMQZVJSIiAyySfMK8EX6CAaD7HnlgOk4Q+72W6YDsLP0OL297lu3+noPLLVPC+2rq6euucVwGhmo+8bNITk8hiDwnXJ3bocZHTOH7Ci7vN3S8B16NdhVRETk71JRIiIyyHzhPvJLxgGw/o9bDKcZetctnYhlQV+fn527j5mOM6SWFoxjTFICgIa6uoDP4+Vfp9wMwGv1Few9787tTUsz/xXPxcGuOxt/bDqOiIjIiKeiRERkCCy52x4UuXf9QdfPBYiPi2LihCwAnnmuzHCaoeX1eLhv9lQAfr9rP9197j5BEwpWZk+mJGkMAF/d95wrP19jfGlMT/kAABUtz3K+x92FpoiIyECpKBERGQJzbp4BQMeFTk5VnTGcZujddbs96HT/oZN0dvUaTjO03j69GI9l0dnbx5/3u3stciiwLIvPTl4JQGXbWdacPmQ40dCYlvxuor32PKEtZ7/jykJIRERksKgoEREZAmMKs4lJjAZg2/OlhtMMvUULCoiICKO318+WbVWm4wypxOhIbigcD8AvNu7UC04XKEnOYW6qfV3uGwdeoC/gvlXXHiuM67K+DMDZ7gNUt7lz04+IiMhgUFEiIjIELMti9soSAPa+5v6BrtFR4cydZZcHT//Z/cXQA0vnAnDqQit769x/YigUfGnqbVjA+d4OHj223XScIZEVPY2C+BsB2HL2e/T43b2VS0RE5FqpKBERGSIL77I3pBzYcJi+3j7DaYbequXFAByuPMOFFndv1picnUFuSiIAP9WqYFfIiU3hjjElAPykYh1tfd1mAw2ROakfxYOP/mAXW89+33QcERGREUlFiYjIEJmx3B762dXeTfm2SsNpht6cWeMJ93kJBmHtBvfP7nhgiX2qZOvRE5xr7zCcRgbDZ4pWEuEJozvQz6+rN5uOMySiwpKYnfYAAEfbX6Ghy/2fqyIiIldLRYmIyBCJT4kjOz8TgA2PbzWcZuj5fF4WzMsH4Nnn3b39BuDm4kJSY6PpDwR5ovSg6TgyCJIiYvhI4TIAflu9lfquFrOBhsjkxLcTFzYKgPVn/pNA0H0zWURERAZCRYmIyBBacMdsAHas3mM4yfC441Z728+J2ibONrQaTjO0wsO8vGPGFAB+va2Ufn/AcCIZDO8eP4/UiFh6g36+tu9503GGhMfyXh7s2tpfR0XLs4YTiYiIjCwqSkREhtCiu+zrGQ215zhf32w4zdCbWjyahIQoAF4Lges3986aggW0dvXwSkW16TgyCCK9Pj4xcTkAGxoqqWhx57De9KhJFMTZg113n/sFnf1NhhOJiIiMHCpKRESG0MQ5+YRH+gDY9eJes2GGgdfruTzU9dX15YbTDL3MhDhm59pXGH78mjs3pYSiO3KmMSo6EYD/KHvGtSug56V/gihvMr2Bdjae/abpOCIiIiOGihIRkSHkDfMyZWkRALvX7DUbZpgsX2Y/3uqjDdScOGc4zdD72LL5AFQ3NnH4TIPhNDIYPJaHB6feDkBFaz3r6ysMJxoaEd445qZ+DIC6ju2cbN9mOJGIiMjIoKJERGSILb3bfiFdtvYAgYD751gU5GeQlBgNwHMv7DUbZhjMzh1NdkIcAD/RqmDXmJeex4zkHAD+69DL9AXcOfA0L345aRGTAFhf/zX6A+5ciywiInI1VJSIiAyxWatKAGg510bVnuNmwwwDy7K4eZW9GvnltQcJBNx5beESy7L48FJ7Fs36ymOc7+g0nEgGy1dK7sCLxanOZh6v2WU6zpCwLIvrsh7EwkNPoJWd535qOpKIiIhxKkpERIZY2ugUUrKTANj8ZGicOLj1pmkAtLf3cLC8znCaoXfn1EkkRUfR5w/wuFYFu0ZubCrvHG+XYP99+FVaet1ZgsWHZzMt+T0AlF94muYe9xe6IiIib0VFiYjIMJh36ywANj8dGgM/szITyRmTAsBTz7p/NXKEL4x7ZtpDbH+5eRd9fnde0whFD0xYSrgnjC5/H9859LLpOENmesr7iQ3LBIJsPvttgkH3XxMUERH5W1SUiIgMgyV3zwOgruoM7Rc6DKcZHnfeNgOAnbuP0dPbbzjN0HvXnBIsoL2nl5fLq0zHkUGSEB7NxyZeB8CfT+7leLs7BxR7LR/Lsv4DgLPdByi/8LThRCIiIuaoKBERGQbFiyfhDfNCEHa/vM90nGGx/LpJ+HxeOjt72bHzqOk4Qy4jPpYFeWMB+P+0KthV3jN+PqkRsQSBL5U9YzrOkMmMmsqE+FsA2NH4Yzr7zxtOJCIiYoaKEhGRYRAe4aNo/gQAdqwuNZxmeMTHRTFjml0c/Onp3YbTDI+PX2dvOKppaubAqXrDaWSw+DxevjT1NgD2Np9ke+Mxw4mGzpy0jxJmRRKgj4313zQdR0RExAgVJSIiw+S6+xYCsOfV/SGxJhjgplVTADhYXkdrW5fhNEOvZEwWOUkJAPxi007DaWQwLcssZEriKAC+fegl/C6d4RHpjWdB+qcBqOvcxsn20BhALSIi8noqSkREhsnsm6YDcL7+Asf2nTCcZngsmJuPz+clGIRX15WbjjMsPrrs0qrg4zS2hcY8mlBgWRYPltyBB4vK1rOuXRcMUBB/EykRhQBsqP8a/YEew4lERESGl4oSEZFhkpmbTnJWIgAb/rTNbJhhEh4exsJ5+QA883yZ4TTD4+biiaTFRtPnD/Db7e7f+BNKJsRncGeOXXh+v/wV2vu6DScaGpZlcX3Wg1h46A5coKzpN6YjiYiIDCsVJSIiw+jSmuBNT4XOsM+33TETgNqTTZw+c8FsmGEQHubl3llTAfjfHXvp7nP/xp9Q8vGJN+CzvHT5+/j+4VdMxxkyCeGjmZn6jwDsa/49Td3a5CQiIqFDRYmIyDBaes8CAE5VnqGtud1wmuFRXDSa1NQ4AF5Zd8hwmuHx7jkleCyL7r5+ni4LjcccKlIjY/lQwWIA/lRTSm17k+FEQ2dq0jtJ8o0DArx6+t8JBFX6iYhIaFBRIiIyjIoXTcTr8wKw+6W9ZsMME4/H4uaV9lDXl145QDAYNJxo6CXFRLGyqACAn27cERKPOZR8sGAxyeExBAny73ufMR1nyHisMBZnfgGAtv7T7Dv/mOFEIiIiw0NFiYjIMAqP8DF5gT0kcVuIrAkGWLm8GIAz9S0cOHTKcJrh8fHr5gHQ0NbBpuoas2FkUIV7w/jytNsBKDtfy9aGasOJhk56VBET4m8FYE/Tr2ntPW04kYiIyNBTUSIiMsyuu28RAGWvHgiZNcGjs5MYMzoZgCf/vNtwmuGRl5bClFEZAPxqS2g85lByXWYhC9PsQcX/dfAl+gJ+w4mGzvz0TxDuiSdIgHVnvqwTUiIi4noqSkREhtmcm0oAuNDQQtWe42bDDKO33W4Pdd26rYqenj7DaYbHJ6+3Z9LsOF5HVcM5w2lkMFmWxeeLb8SLxbH2Rn57dIvpSEPG54niusx/B+BcTwXVbS8bTiQiIjK0VJSIiAyz9Jw0Ui+ertjwx62G0wyf5dcX4fFY9PUH2Lil0nScYbEwbyz5afbH+qfrdxhOI4NtfFwad1xcF/zjivWc7+kwnGjojImdT17sSgC2N/yIrv5mw4lERESGjooSEREDFt01F4CNT24znGT4xMVGUjI1B4A/ry4znGZ4WJbF/fPsF9IvlVdxvqPTcCIZbJ+dvJIor4++oJ9vHFhtOs6Qmp/xcSI88fQEWtlQ/w3TcURERIaMihIREQMurQk+W9PI+frQ+c7sO+6aBUD54dM0NYXGeuQ7pxUR5fMRCAb5zdbQGeAbKuJ9UXy6aAUAL58+xOGWM4YTDZ1IbyJz0/4ZgLrO7dS2h86JOBERCS0qSkREDJg0r4DwqHAAtj0bOoM+Z88aT1JSDIFAkJdePWA6zrCI8IXxrtlTAXhsxz56+voNJ5LBdk/ubEZFJwLwlb3PunrYaUH8TaRFFAGwvv5r9AV0SkpERNxHRYmIiAFer5eS6yYDsO250ClKwrweli2y1yM//eweV7+gfL1/WDgLj2XR2dfHM3vLTceRQea1PHy95C4ADrWc5uXThwwnGjqWZXF99lew8NIbaGPr2R+YjiQiIjLoVJSIiBhyw7uXALB/Qzl9vaGxBQbg1pumAXCuqZ2q6rOG0wyPlNhoVhTZq2T/Z/seAoHQKIhCyczUXG4aVQzAQwdeoKu/13CioRPny2Rmyj8CUNX2IvVd+w0nEhERGVwqSkREDJm1ahqWBV3t3RzYeNh0nGGTNz6djPR4AJ54JnRO03zyOnsuzfFzzWysDp210KHkM0UrCbM8nO/t4IcVr5qOM6SmJr+T1IiJAGyq/yb9gR7DiURERAaPihIREUPik+MYM3EUAGsf3WQ4zfC667YZAKzfVEFvb2jM7BiflszSCeMA+MGrWwynkaGQGZXAB/IXAvDYsZ3UtjcZTjR0PJaXZVn/jgcfLX0n2dH4Y9ORREREBo2KEhERg5bda7+o2vHCHsNJhteNK6dgWdDb62fr9mrTcYbNBxfMBKDi7DkOnKo3nEaGwgMTlpEcHkOQIP9a9rTpOEMqMXwsJcnvAeBwy9M0dIXOyTgREXE3FSUiIgYtettcAFrOtXLyyCnDaYZPYkI0C+cXAPDiK6Gx/QZgdu5oxiQlAPCDtVqt6kbh3jC+UnIHAPuaT/LamQrDiYZWScp7iQ3LAmDt6X/HHwydeUsiIuJeKkpERAzKnTyGuKRYADb+abvhNMPrllX2UNedu49xrqnNcJrhYVkWn7rBnlWy9egJ6ppbDCeSobAss5CZyWMB+Nahl+jxu7c88FhhrBj1DcCiw9/A7nMPm44kIiIyYCpKREQMsiyL+bfNAmDbc7sMpxles2eNIyY6gmAQnn9xn+k4w2ZV0QQSoiIIAj/fuNN0HBkiX51+J+GeMOo6m3m4cqPpOEMqJSKf4sR3AHCg+Q+c7zlqOJGIiMjAqCgRETHs+ncvAqBqz3Faz4fGyQqAMK+H5dcXAfDn58sIBkNjZW6Y18M/LZoNwPMHKmjp6jacSIbCmJhk/uHiYNeHqzZxqrPZcKKhNTv1w8SHjQKCbKz/JoFgaAxpFhERd1JRIiJi2NSlRUTFRhLwB9jxfGgNdX3bHfZw0+YLnZQfPm04zfC5b/Y0EqIi6Orr5/e7Quc0Taj5h/xFJPiiCBDk3/c8YzrOkPJ6wlmW9SUsPJzrqaCs6bemI4mIiFwzFSUiIob5wn1MmJ0HwJrfrjcbZpiNHZPCqOwkAB5/OnSuHsVEhHPvzKkAPLxpF739+u67G0WFhfPlabcBsPt8DZvOVhpONLTSo4ooSnwbAHvPP8KF3lrDiURERK6NihIRkRFg5f3LADi0uYL+vtB60Xz3nfapku07j9Ld7d6hl3/p/nnTsSyLjt4+ntpTbjqODJHlWUVMSRwFwH+UPUOv392f37NTHyDSm0SQAK+e+jcCQb/pSCIiIldNRYmIyAgw99YZAPT19nNg02HDaYbXihuKCQ/30tPTz4bNR0zHGTZpcTGsLMoH4P/bsI1AIDRmtIQay7L4+oy3YWHR1NvB/x7bZjrSkArzRHBD5n8CcKGvhv3nf2c4kYiIyNVTUSIiMgIkpMaTM8n+rvMrv91gOM3wio2JYNniiQA89edSw2mG16eut4d9nmvv5JWKasNpZKiMi03lAxcHu/68cgNnOi+YDTTEsmJKKIi/CYDSpl/Sois4IiLiMCpKRERGiOveuRiAPa/uD5kNMJfccuM0AI5U1XOy7rzhNMNnXGoSc3JHA/CT9dtD7uMeSj48YQnpEXF0+fv4t7KnTccZcgvSP020N4UgATbUP6QrOCIi4igqSkRERojFb58LQNPpZk6U1xlOM7ymFo8mMSEagCf/vNtwmuH1LyvtguzI2XPsOnHKcBoZKtFhEXy++EYAdjXVsL6+wnCioeXzRHF91lcAi4bug+xtetR0JBERkSumokREZITImTiKrLwMADY87u45Bn/Jsixuv2U6AC+/epD+/tD57vOUUZnMHTcGgB+t22o4jQylldmTmZZkf6z/o+wZuv3uHl6cGT2NyQn2Fpyy87/mQu8Jw4lERESujIoSEZERwrIsZi63V8aufWyj4TTD745bSgDo6upj286jZsMMs39cNAuAXSdOcaS+0XAaGSqWZfHQjLfhweJCXxc/OrzWdKQhNzvt/7bgvHLqX3UFR0REHEFFiYjICHL9u+xrGGeOnaXpTLPhNMMrJSWWKUX2QNvnVu8znGZ4LcobS3ZCHADfe3Wz4TQylMbEJPP+i4NdHzu+nRPtTYYTDa0wTyQ3ZH0VgJa+WvY2/dZwIhERkb9PRYmIyAhStGACEdHhAGx+arvhNMPvvnfYc1p2lx3nXFOb4TTDx7IsPnnDAgA2VtVQ19xiOJEMpY8WLmN0dCL+YJBvHFjt+iG+WdHTKEy4DYCy8/9Dc89xw4lERETemooSEZERxOv1MnOFvQFmzSPrzYYxYO6cPJISowkEgjz7/F7TcYbVLcUTSYiKIAj86LXQmlETaiK8Pv5jql0cbG08ygunDhhONPTmp32SaG8qQQJsrH+IQLDfdCQREZG/SUWJiMgIs+K9SwE4uvcEXe1dhtMMrzCvh6WLJwLw5xfKXP+d9tcL83p4YLF9oubFQ5Wc7+g0nEiG0oL0fBam5QPw1f3P0dHfYzjR0ArzRHBD9lex8NDYc1hXcEREZERTUSIiMsLMXDmN8Egf/n4/u18OrVkdAHffOROAlpYu9u6vNZxmeL1zzjRSYqLp7ffz2+1lpuPIEPtKyR2EWR46+nv59sGXTMcZchlRxUxOvAeAPef/h/M9xwwnEhEReXMqSkRERpiomEhmXNx+89ofQm+w5+hRyYzLTQPgd4+H1pyWSF8Y75tvr0n+zdY9tHW7+5RBqMuIiuejhdcB8GTtHo601BtONPRmpf4jUd4UIMiaU1/AH3T3imQREXEmFSUiIiPQvFvtdbE7Vu/B3x966zTf9Y45AJSWneBCS2hdQXnn7Gn4vB56+vv5zdZS03FkiL0/fyGZkQkA/L/SJwgEA4YTDa0wTwTLs74OQHv/GXY1/sxwIhERkb+mokREZARacIddlPR293Fwc4XhNMNvyeKJREb6CASCvLL2kOk4wyouMoJ7Z9knin6zdQ/dfRp66WY+j5dvzXw7AEfbG3nyxB7DiYZeRvRkii9ewTl44XEausoNJxIREXkjFSUiIiNQUkYiowuzAXjx12sNpxl+EeFh3HaTvf3nuRf3htRQV4CPLJmL12PR1dfHH3aF3pyaUDM9ZSx3j7Vn83y3fA3nutsNJxp6s9MeIC4sC4D19V+nP6BrZiIiMnKoKBERGaFW3m9vv9n+fGnIFQUAt14sSmpPnufAoTrDaYZXSmw0t02xt//8dMMO+vyhd/0q1Hxq0gpiwyLo6O/hP/Y+bTrOkPNaPlaM+iYey0drXy07G39iOpKIiMhlKkpEREaopfcuAKDjQifVZccNpxl+Y3NSGZuTAsDvH99hOM3w+8T1C/BYFi3dPaw+cMR0HBliCeFRfKH4ZgA2N1Sz+WyV4URDLzliPLNSPgRAectTnOrYbTiRiIiITUWJiMgIlZ2XybgpOQBseXqn4TRm3Pd2e6jrjt3HaG3rMpxmeGUnxnNnSREAP9+4k0Ag9E4VhZrbx0xjcoJ95e5f9zxFt9/9G2GKk+4hKXw8AGvPfIlef4fhRCIiIipKRERGtIV32kXB+se3Gk5ixvXLJuHzeQkEgrzw0n7TcYbdPy6yh/oeb2pmTbn7TxiEOsuy+NbMu/Fg0dzXyX8ffsV0pCHnsbysyH4ICy+9gTY21j9kOpKIiIiKEhGRkexSUXKq6gx1VWcMpxl+ERE+blg6CYA/PbM75Ga1jE9NZt64MQB859VNIff4Q1FObAr/ULAIgN8f28WxtkbDiYZefHg2c9P+GYCajg3UtG80nEhEREKdihIRkREsrySXuORYANY9tslwGjPuudsui5qa2jl0+JThNMPv86uWAFDX3MrGqtCbVROKPjJhGeNiU/ET4MG9zxIIBkxHGnKTE+8mLcK+ara14Xv0BloNJxIRkVCmokREZASzLItFd80FYO3vQrMoGZ+bRnHRKACeXb3XbBgDirLSKRmdCcA3X96oUyUhINwbxpem3QZAWXMtfzrh/iGnlmWxfNTXifDE0R1oZl/Xz/VcFxERY1SUiIiMcMvvt08UnK6up+lMs+E0Ztx+y3QAXn2tnJbW0BrqCvCFG5cBcPxcMzuOnzQbRobFrJRclmfa186+ffBlzve4f8hpTFgqC9I/A8BZ/04qW1cbTiQiIqFKRYmIyAg3eWEhkTERAGx5OvTW5AIsXVxIeLg91PW51WWm4wy7kjFZl2eV/HRjaG5ACkVfLrmdSK+PnkA//172tOk4wyIvfjmjouzrdtsav09bX+jNZhIREfNUlIiIjHBer5dl9y4EYHOIrgmOCA9jxQ2TAXjyz6UheST/n5fNA2DH8ZPsqQ29WS2hKDE8mn8tvgWATQ1VbDpbaTjR8FiW+SXCiCZAP2tOfYFA0G86koiIhBgVJSIiDrDkbvtF8t7XDtLa1GY4jRn3vd2e1dJ8oZOyfScMpxl+s3NHU5CeAsBDL2krSKi4M6eE4kR7Rs9/7n+Ozv5ew4mGXoQ3jplRnwWgufcYZU3/YzaQiIiEHBUlIiIOUHJ9Mb4IH8FAkE1Pheb1mzGjk8kblwbA7x4Pzf8G/+/iBpwDp+o5cKrecBoZDpZl8a2ZdxPhCaO+q5UfV6wzHWlYpPmmMiHOPk2z9/z/cq47NE7TiIjIyKCiRETEAXzhPqYvLwbgpV+tNZzGnHffOx+APXtPcL7Z/cMt/9LCvLHkJCcC8F8v61RJqBgTk8zHJl4PwG+PbeNgc53hRMNjXtonSQofTxA/r535T/oDPaYjiYhIiFBRIiLiEDd+wH6hdGT3UTpaOw2nMWPxwgkkJcUQCAR54aV9puMMO8uy+PyqxQDsPnGKI2cbDSeS4fKe8fMYHZ0EwGd3P05fwP1zO8I8ESzL+g8swmjpO8GWhu+bjiQiIiFCRYmIiEPMvnE63jAvwUCQ7c+Xmo5jhM/n5aYVUwD441O78PsDhhMNvxsK8xidGA/ATzeE5nDfUBTm8fLdWfcAcLqrhYerQuNEUUpEPtOT3wtAVetqTraH5rU7EREZXipKBqiyspI77riD1NRU4uPjWbhwIa+99tob3qe2tpbbbruNmJgYUlNT+cQnPkFvr/uHsYnI4IqMjqB48UQA1j62yXAac267uQSAtrZudu4+ZjaMAZZl8S8XZ5W8cria4+dbDCeS4VKUmM09Y2cB8IvKDZzsOG840fAoSXkvSeF5AKw78yW6/a2GE4mIiNupKBmgW265hf7+ftatW0dpaSklJSXceuut1NfbQ/b8fj+33HILHR0dbN68mT/84Q88+eSTfPaznzWcXESc6KYP3gDAgQ3ldHeG5n39rMwEiiZlA/Db3201nMaMFRPzGZ+aRBD48dY9puPIMPrc5FUkhkfjDwb5UtkzIbEq22N5WTnqm3gIoy/YyWunvxISj1tERMxRUTIA586do7q6mi984QtMnTqVgoICvvnNb9LZ2cmhQ4cAWLNmDeXl5Tz66KNMnz6d5cuX893vfpeHH36Y1lZ9R0RErs68W2fiCw+ju7OHXS+WmY5jzHvfaQ91PXzkDKfPXDAbxgCPx+Kfl9kro3efrKe6sclwIhkuUWHhPDT97QDsPn+C5+pCY1ZPnC+ThRmfA+BU106q2142nEhERNwszHQAJ0tJSWHSpEn89re/ZcaMGURERPDzn/+cjIwMZs6cCcC2bdsoLi4mOzv78r+3atUqenp6KC0t5brrrnvT37unp4eenv/7bvGlUiUQCBAIDN2d/EAgQDAYHNI/Q8QEtzy3o2IjmTA7j0NbjvD8L9aw8K45piMZMWvGOOLjImlt6+apZ0v56Ife/Gupm60qKuC/4jbS0NbBf728kYffc5fpSDJMFqSN57bR03iubh9f2/8881PzSImIMR1r0Pytr9f5sTdS17GT4+3r2FL/PdIiion3Zf+N30VkZHHL30NEXs+Jz+srzaqiZAAsy+KVV17hjjvuIC4uDo/HQ0ZGBi+99BKJiYkA1NfXk5GR8YZ/LykpifDw8MvXc97MQw89xFe+8pW/entjYyPd3d2D+jheLxAI0NLSQjAYxOPRgSNxDzc9txfcPZNDW46wb305dbWnCI/0mY5kxE0rJvHHp8p4+ZUD3H7TRMLDvaYjDbsPzZrC11/bzpajtew6UsXYpATTkWSYvC9tOq+cPkSXv49/2fEHvjnxNtORBs1bfb0usO7nNGX00MyLJz/L0pjv4bFC73NfnMdNfw8RucSJz+u2trYrej8VJW/iwQcffNOS4vV27drFzJkz+ehHP0p6ejqbNm0iKiqKX/7yl9x6663s2rWLrKwswC5U/lIwGHzTt1/yxS9+kc985jOX/7m1tZUxY8aQlpZGfHz8NT6yvy8QCGBZFmlpaY55sotcCTc9t1e95wZ++dnf4+/zc3LvGebfPst0JCPue8cCnnpuP23tPRwoP8dNK6eYjjTs7klO5mc79tLU2c1v9x7hR/feajqSDJN04Evcxr+WPU1pax37+8+xPLvIdKxB8dZfr9O5Pu5BXjz9SToCpznheYq5af9sJKfI1XDT30NELnHi8zoyMvKK3k9FyZv42Mc+xn333feW75Obm8u6det4/vnnaW5uvlxe/OQnP+GVV17hkUce4Qtf+AKZmZns2PHGVXbNzc309fX91UmT14uIiCAiIuKv3u7xeIb8SWhZ1rD8OSLDzS3P7YSUeCbMyuPIzmpWP/wKC+8Mzes3SUmxLJibz4bNR/j94zu45cZppiMNO19YGB+eV8I31m3ntSPHqDl/gfGpyaZjyTC5dfQ0nqzdQ2nTCf5j35+Zl5FHvC/KdKxB8VZfr0fFzmBy4js4dOFPHGp5nNy4JWRFh97nvziPW/4eIvJ6TnteX2lOZzyaYZaamsrEiRPf8kdkZCSdnZ3AX//H9ng8l+8+zZ8/n4MHD3LmzJnLv75mzRoiIiIuzzEREblaN39oOQD7N5TT29NnOI05995tl0R1p5uprPrb1xnd7IaCsYxPTSIQDPLfa7eYjiPDyLIs/mvG3fgsL53+Xr554EXTkYbN3LSPEu8bDcArp79Ir7/dcCIREXETFSUDMH/+fJKSknjf+97Hvn37qKys5F/+5V84fvw4t9xyCwArV66kqKiI+++/n7KyMtauXcvnPvc5PvShDw3pFRoRcbdFd83B4/XQ09lL2doDpuMYM6kwi8wM+2vpo3/cZjiNGV6PhweW2IXRy+XVHD/XbDiRDKeMqHg+X3wjAM/V7WN74zHDiYaHxwpj1ahv4yGM3kAbWxq+ZzqSiIi4iIqSAUhNTeWll16ivb2d66+/nlmzZrF582b+/Oc/M22afQTU6/WyevVqIiMjWbhwIffccw933nkn3/nOdwynFxEni0+OY/oN9kyOV/53g+E05liWxbvusdfkbt5aRWtbl+FEZtw0eQIpsdEA/NfLoft8CFX35s5mTuo4AL645yk6+3sNJxoeCeGjWZTxLwAcbXuFqhatDBYRkcGhomSAZs2axcsvv0xTUxOtra1s27aNm2666Q3vk5OTw/PPP09nZydNTU386Ec/etP5IyIiV2PxXXMB2PrMLvp6Q/f6zcobign3eQkEgry4JjRP13g9Hj63YjEA6yuPc6zxvOFEMpwsy+LBabcTZnk419PGQwdWm440bArib2JcrL0efNPZb9LWd9pwIhERcQMVJSIiDrXo7XPBgr6evpC+fhMZ6ePO22YA8Ofny/D7A4YTmXH71ImkxcYA8NBL682GkWE3JiaZjxTahcEzJ/eyt6nWcKLhYVkWizL+hXBPLAH6eanu8wSC/aZjiYiIw6koERFxqITUePJLcgFY/fNXzIYx7FJRcvrMBbbvOmo4jRlej4f/t8o+VbKp+gRVDecMJ5Lh9sGCReTGpADwmd2P0+sPjcIgwhvH8qyvAdDSd4KdjT83nEhERJxORYmIiINd2n6ze82+kL5+k52VyORJowD47WNbDacx5+biiRSk2y+Uf7J+x995b3Ebr+Xhe7PvxcKisaeNH1a8ajrSsMmOmUlR4tsBOHjhD5zpKDOcSEREnExFiYiIgy25ez5Y0NvdR9nag6bjGPW+dy8A4EhVPSfrQnNGh8dj8bHr5gPw4qFKjpzVqZJQUxCfwQfy7c+FR4/toPxC6MzsmJf2MeJ9YwB4rf6rdPtbDScSERGnUlEiIuJgCanxzFxhb9naNPx7nQAAidhJREFU8KfQPUkBMGvGOJIS7c0vj4XoqmCAFRPzyUqIA+DrL7xmOI2Y8LGJ1zMhPgN/MMAX9jxJXyA0ruB4rDBuGv0dfJ4YOv2NbKr/L4LBoOlYIiLiQCpKREQcbuk77BMEm57YHtLXbzwei3vfPgeAta+V09kVGitS/5LHY/GvNy4DYGdNHYfPNJgNJMPO5wnja9PvwsLiePs5fnh4relIwybOl82i9M8BcKJjI4eanzCcSEREnEhFiYiIwy28cw6WZdHV3k3pmn2m4xh1280l+Hxe+voDvLL2kOk4xiyflMeoxHgAvv7ierNhxIhJCVncP34eAI8c3UrFhTOGEw2fvPjl5MYsAWDHuf+P5p7jhhOJiIjTqCgREXG4+JQ4JswaD8BzP1tjOI1ZMTER3LJqKgBPPVsassfuLev/TpXsPnGKA6fqzQYSIz5VtJzMyHiCwCd3/Z6+gN90pGGzNOvfiPImEyTAS3Wfoz/QYzqSiIg4iIoSEREXuPlDKwDY8+oBentC9/oNwF2326uCT9Q2sXtPjdkwBl0/cTz5afYGnB+9FrozW0KZzxPGD+bcB8Dprhb+v4p1hhMNH58nmpXZ3wIsOvwNbDr7LdORRETEQVSUiIi4wOK3z8XyWPT39rP75b2m4xg1NieVgvwMAP7n0c2G05hjWRZfuHEpABuraig9UWc4kZgwOXEU7xk3F4BHqrdS2XrWcKLhkxZVyKyUfwLgaNsaato3Gk4kIiJOoaJERMQF4pJimTgnH4BX/3eD4TTmfeA9iwA4dPg0daebDacxZ2FeDlNG2aXRV1a/FrJXkULdp4tWkheXhp8A/7bnKfpD6ArOtOR3MybGHni98cxDtPeFTlEkIiLXTkWJiIhL3PaRVQDsfnkf3Z2hfR9/3pw8EhLsVcGP/iF01yZblsW/rFgMQOXZc2w9esJwIjEh3BvGV0vuxAIqWuv56ZHQWRttWRZLMr5IhCeB3mA7L5/6PIFg6BRFIiJybVSUiIi4xII7ZhMWHkZXezfbn99tOo5RHo/FfXfPBuDVdeV0hnBxNGfcGCZnpQPw1Rd0qiRUTUkazb259vrsh6s2U90aOmujo8KSuC7rSwA09x5jZ+PPDCcSEZGRTkWJiIhLxMRHM3lBIQDP/uRlw2nMu/3m6YSHh9HfH+ClVw+ajmPUg7fdAEBN0wXWHjlqOI2Y8rnJK0mLiCVIkI/v/F1IbcEZHTOHosS7ATh44Q+c6thlOJGIiIxkKkpERFzk1g/b228ObTlCZ1uX4TRmxcREcNtN0wB46s+lBAKhe5JiyqhMZuZkA/CDV7eG9H+LUBbh9fH92fYWnLrOZn50eK3hRMNrXto/k+jLBeCV0/9GV3/ozi8SEZG3pqJERMRF5t46E6/PS8AfYPNTO0zHMe6uO2YCUHeqmZ27Q/skxZduuR6A6sYm1hyuMpxGTJmWPIZ3X9yC89ujW6loOWM40fDxWGHcOPo7eK0I+oNdbKj/GsFgwHQsEREZgVSUiIi4SFRMJCXXFwPw3E91/WZ0dhKTJtonKX7z29BdFQxQmJnGzcX21axvvrSBfr9eIIaqzxStpCAuAz9B/nXPU/QF+k1HGjaxvgyuz3oQgLrOnZSd/63ZQCIiMiKpKBERcZnbPrwSgMrSY7SebzOcxrx/uH8hAEeqz1Jz4pzhNGZ97Lp5ANS3tvNU2SHDacSUcG8YX59xF14sqtoa+M6hNaYjDauxsYsoTnwHAHuafkV9537DiUREZKRRUSIi4jKzb5pOTEL0xes3O03HMW7WjHGkpMQC8MhjWwynMWt8ajLLJ+YB8N1XNtHbHzonCeSNJiVk8b58u0T83fEdHDhfZzjR8Jqd9hHiwkYB8P+zd9/xUZT5H8A/M1tTNpveIITQexcIKCAKAiII54niITaUU5Sip3LqiRXL2VGsZ0PF8xRP/SlHUIr0Guk9EEp62U3dNs/vj90MWZJAsoRsyuf9ur3dmXmeme9svlmzX555ZsWZR1Husvo5IiIiakxYKCEiamb0Bh2GTnLfBvSXj1rWZI3VkSQJ025KBgCsWXcQhZZSP0fkX38fOwKSJMFSbsNnm1L9HQ750awuI5EQGA4AmL11KWwuh58jajgaSYexrV+BDC3sShFWnv47b51NREQqFkqIiJqhK2+6HABwYPNh5GXwzg5jR/eEyWSAogj8+HOqv8Pxq/jQEEzq3RUA8PbqjSix2f0cEfmLTtbgzYE3Q4KEHFsRXtzzi79DalAh+lYYFjsfAJBZ/gd2FXzl54iIiKixYKGEiKgZ6juyB4xBRgBAymer/RtMI2Aw6HD9+H4AgO/+uwMOh8vPEfnXg6OugF6rQZnDic837fR3OORHHUKicU+nYQCAb05sx868dD9H1LA6hIxGu+CrAQDbct9HbvlBP0dERESNAQslRETNkEarwRV/ct8C9OcPVvo5msbh+vH9IMsSCgpLsHLVPn+H41cRwYG4a+gAAMCH67ehsLTczxGRP83sPAK9wloDAB5PXYZSZ8saZTQs9lGE6dtBwIWUM4/B7ir2d0hERORnLJQQETVT4+8ZBQDIOJaNM0cz/RyN/0VEBGPQZe0AAJ99sb7Fz0dw+5D+CNLrUWyz483fWvYkty2dRpLxbN9JMMhapJfk46k/fvB3SA1KKxtwVfzTkKFHiTMLKWcea/GfD0RELR0LJUREzVTXwZ0QEmECAPz25To/R9M43DHtCgBARpYFu/e2rLt8nMtkNOCOof0BAEu37UaWlf+K3pIlBUfivs5XAgB+Pr0bv2cd8nNEDStUn4ihMQ8CADLKduCP/C/9HBEREfkTCyVERM2UJEkYN8N97f2qpev4L6QAOnaIQdvESADAh5+u9XM0/nfn0AEINuihCIGX/sf3o6Wb3mEIupnjAQB/2/4NLPaWdYeozuZxSAoeCQDYlvceskr3+jkiIiLyFxZKiIiasZE3DwUApO8/jWO7Tvg5msbhjunuUSW7dp/CqTMt+45ARp0Ws0cOAQD8vOcgTuQV+jcg8itZkvHGwJuglzQocdrxyI5v/R1Sgxse+3cEa2MBCKw48whsriJ/h0RERH7AQgkRUTOW1DMRka3CAQA/Ll7h52gah6GDOiA+LhQA8O332/wbTCNw02W9EB4UAAHgtZW8RKuliw0w4/Fe4wEA67OPYPnpPX6OqGFpZQPGtn4FGuhgUyxYk/k8R+MREbVALJQQETVzY++8CgCw+uv1UBTFz9H4n0Yj48bJlwEAfvrlD1iLyvwckX/pNBo8Ps49N8XyfYex50yWnyMif7u+TV9cHdsVAPDsrp+QXW71c0QNy6xvg2FxjwEA0kvWYWfeZ36OiIiIGhoLJUREzdw1t7u/BJdYSrH79/1+jqZxGDOqJ/R6DRwOF/7zHUeVjO3eCT1bxQAAnvrxVz9HQ/4mSRKe6H0dwvVBsDjKMGfL1y1uVEV701XoEjIBALAj/0Nklu72c0RERNSQWCghImrmYhKjkNitNQDg+zd/9nM0jYPRqMN1Y/sAAP7z/TY4HC7/BuRnkiRh3lXu+Wx2n8nCuiPH/RsQ+V24IQgLel8HANhdeApLjm3yc0QNb3D0AzBp4wAAK848jHKXxc8RERFRQ2GhhIioBbju3jEAgO0pu2C3OfwcTeMw9cbBkCQJpWV2pPzGu1skt09Ej3j3qJIFP/4KRWlZIwioqivjuuKauO4AgFf2rUB6cZ6fI2pY7vlKXoMMLexKMVacfgRC8PJFIqKWgIUSIqIW4MqbhkCr06CsuBxbft7h73AahYiIYAwZ3B4A8MkS3j4ZAJ6Z4L6d9KlCK37afcDP0VBj8FTfiQjVB8AlFMza/CWcSssafRWib4Xhse75SrLL9yI1f4mfIyIioobAQgkRUQsQEm7CgDF9AAA/vvs//wbTiNx56zAAQHZOEbbv5O2Tu8ZF44oObQEALyxfA7uzZX0ppqqCtAa8NuAmAEBaSS4+OtLy7ozUPuRqdAq5FgCwI+8jnCllsZmIqLljoYSIqIW4auoVAICdv+5BiaXEz9E0Du2SonBZv7YAgH9/t8W/wTQS/7j2SmhkCfmlZfhmOyewJGBAZFvc3t49h827B1djT8FpP0fU8IbGPIhoYw8IKEg583eUOHP9HRIREV1CLJQQEbUQyRMGQKvXQigCq5Zu8Hc4jcaNfxoIANiyLQ3H0nL8HI3/JYSH4ubLegMA3l69CcU2u58josbg/q4j0SUkFk6hYNbmL1DqbFl5oZF0uCruKWglIxxKCX45NQ+KcPo7LCIiukRYKCEiaiEMAQYMHNcXAPDfRb/4OZrGY0C/toiOCgEAfPjpWj9H0zj8ddggGLRa5JeW4e1VG/0dDjUCOlmLF/r/CTIk5NlL8NQfP/g7pAYXpIvGVXHPAgAK7WnYkP2anyMiIqJLhYUSIqIW5PpZYwEAx/eeRPZJDh0H3LfGvX3a5QCAjZuPIDvH6ueI/C8iOBDTB7uLap9t3onsomI/R0SNQXtTNOZ0dU/4+/Pp3ViV2fIm/E0IHoReYVMBAAcsP+CYdZWfIyIiokuBhRIiohak1/BuMIUFAQB+++J3P0fTeIwa2Q3BQQYIAXz+FUdQAMDM4YMQpNfBpQgs/GWNv8OhRmJ6hyHoFdoaAPDI9v8gz9byimiXRd6DKEM3AMCarOdgsZ/yc0RERFTfWCghImpBNBoNxt7l/hfhlUvW8pa4HlqtBjfd4J6r5JcVu1BcYvNzRP4XqNfhwVHukTa/7D2Eozl5fo6IGgNZkvHawCkwyFqUuRx4MvW/Le5zRJJkXNP6RQRoIuASNvya8QScCj8ziIiaExZKiIhamKunuW+Je2LfKRzZmebnaBqPSRP6w2jQwulU8NPPqf4Op1G4sX8vRJvcI5BeXsERSOQWbQzB830nAQDWZB3Cd+kt73a5Rk0oRsU/Bwka5NuOYHXGM/4OiYiI6hELJURELUxSjzaITowEAHz/Fid1rRAUZMCkCf0BAN98vxUOh8vPEfmfViNjwfirAACrD6Vh2wleYkBuo1v1wMSEPgCAZ3f9hPTiljfiKDqgOy6LnAkAOF6yBvsKv/NzREREVF9YKCEiaoHG3zMaALD2PxvhcrIgUOFP1/eHLEvIyyvBil/3+DucRuHKzu0wILEVAOAfP6xscZdZUM0e7TEWofpAOIWCv25aAofS8j5LeoZNQevAQQCAjdlvIKes5U1wS0TUHLFQQkTUAo2ePgIAUF5iw7YVf/g3mEYkMsKE5EHtAQAff74OisKigCRJ+NuoKwAAx3IL8POeg36OiBqLYJ0Rb152EwAgvTQf/9z7Pz9H1PAkScJV8U8jUBMJAQW/nH4Q5S6Lv8MiIqKLxEIJEVELFBEXhk4D2gEAvnv9Jz9H07jMuG04ACA3rxgbNh/xczSNQ++EOAxt3wYA8OzPq2DnKCTy6BuRiNvaDwEAfJm2GVtyW968Rzo5EOMS3oAMLeyKFavOPAVF8HeEiKgp0/o7AKqdiqHOVqv1kh5HURQUFRXBaDRClllHo+aDuV3VNTNGYN/Wg9ixZhcyTmYgyBzk75AahfAwPTq3D8feg2fw9nvL0at7jL9DqlFD5vWDwy7D7/sPI9dWjndS1uCOoQMu6fGo6bi91UD8emwXjpfk4aHfv8AXV8yAWR/g8/6a4ue1jFD0D3wQa7Ofw5HijQh0LkbfiFv9HRY1Ik0xr4kupCnmdcX36QtdSiwJXmzcJJw6dQoJCQn+DoOIiIiIiIioSTt58iRat25d43YWSpoIRVFw5swZmEwmSJJ0yY5jtVqRkJCAkydPIiQk5JIdh6ihMbepOWJeU3PEvKbmiHlNzVFTzGshBIqKihAfH3/eUTC89KaJkGX5vBWv+hYSEtJkkp2oLpjb1Bwxr6k5Yl5Tc8S8puaoqeW12Wy+YJumcSEREREREREREVEDYKGEiIiIiIiIiMiDhRLyYjAY8OSTT8JgMPg7FKJ6xdym5oh5Tc0R85qaI+Y1NUfNOa85mSsRERERERERkQdHlBARERERERERebBQQkRERERERETkwUIJEREREREREZEHCyVERERERERERB4slJCXd955B0lJSTAajejfvz9+//13f4dEBABYu3YtrrvuOsTHx0OSJHz//fde24UQWLBgAeLj4xEQEIARI0Zg7969Xm1sNhvuv/9+REZGIigoCBMmTMCpU6e82hQUFGDatGkwm80wm82YNm0aCgsLL/HZUUu1cOFCXHbZZTCZTIiOjsb111+PgwcPerVhblNTs3jxYvTq1QshISEICQlBcnIyfvnlF3U7c5qag4ULF0KSJMyZM0ddx9ympmjBggWQJMnrERsbq25vqXnNQgmpvv76a8yZMwePPfYYdu7ciSuuuAJjx45Fenq6v0MjQklJCXr37o1FixZVu/2ll17Cq6++ikWLFmHr1q2IjY3FqFGjUFRUpLaZM2cOli1bhqVLl2LdunUoLi7G+PHj4XK51DZTp05Famoqli9fjuXLlyM1NRXTpk275OdHLdOaNWtw3333YdOmTUhJSYHT6cTo0aNRUlKitmFuU1PTunVrvPDCC9i2bRu2bduGkSNHYuLEieof1sxpauq2bt2K999/H7169fJaz9ympqp79+7IyMhQH7t371a3tdi8FkQeAwcOFDNnzvRa16VLF/Hoo4/6KSKi6gEQy5YtU5cVRRGxsbHihRdeUNeVl5cLs9ks3n33XSGEEIWFhUKn04mlS5eqbU6fPi1kWRbLly8XQgixb98+AUBs2rRJbbNx40YBQBw4cOASnxWRENnZ2QKAWLNmjRCCuU3NR1hYmPjwww+Z09TkFRUViY4dO4qUlBQxfPhwMXv2bCEEP6+p6XryySdF7969q93WkvOaI0oIAGC327F9+3aMHj3aa/3o0aOxYcMGP0VFVDtpaWnIzMz0yl+DwYDhw4er+bt9+3Y4HA6vNvHx8ejRo4faZuPGjTCbzRg0aJDaZvDgwTCbzfw9oAZhsVgAAOHh4QCY29T0uVwuLF26FCUlJUhOTmZOU5N333334dprr8XVV1/ttZ65TU3Z4cOHER8fj6SkJNx00004duwYgJad11p/B0CNQ25uLlwuF2JiYrzWx8TEIDMz009REdVORY5Wl78nTpxQ2+j1eoSFhVVpU9E/MzMT0dHRVfYfHR3N3wO65IQQmDdvHi6//HL06NEDAHObmq7du3cjOTkZ5eXlCA4OxrJly9CtWzf1D2LmNDVFS5cuxY4dO7B169Yq2/h5TU3VoEGD8Nlnn6FTp07IysrCs88+iyFDhmDv3r0tOq9ZKCEvkiR5LQshqqwjaqx8yd9z21TXnr8H1BBmzZqFXbt2Yd26dVW2MbepqencuTNSU1NRWFiIb7/9FtOnT8eaNWvU7cxpampOnjyJ2bNnY8WKFTAajTW2Y25TUzN27Fj1dc+ePZGcnIz27dvj008/xeDBgwG0zLzmpTcEAIiMjIRGo6lS0cvOzq5SQSRqbCpm5j5f/sbGxsJut6OgoOC8bbKysqrsPycnh78HdEndf//9+OGHH7Bq1Sq0bt1aXc/cpqZKr9ejQ4cOGDBgABYuXIjevXvjjTfeYE5Tk7V9+3ZkZ2ejf//+0Gq10Gq1WLNmDd58801otVo175jb1NQFBQWhZ8+eOHz4cIv+zGahhAC4/6Dp378/UlJSvNanpKRgyJAhfoqKqHaSkpIQGxvrlb92ux1r1qxR87d///7Q6XRebTIyMrBnzx61TXJyMiwWC7Zs2aK22bx5MywWC38P6JIQQmDWrFn47rvv8NtvvyEpKclrO3ObmgshBGw2G3OamqyrrroKu3fvRmpqqvoYMGAAbrnlFqSmpqJdu3bMbWoWbDYb9u/fj7i4uJb9md3Ak8dSI7Z06VKh0+nERx99JPbt2yfmzJkjgoKCxPHjx/0dGpEoKioSO3fuFDt37hQAxKuvvip27twpTpw4IYQQ4oUXXhBms1l89913Yvfu3eLmm28WcXFxwmq1qvuYOXOmaN26tVi5cqXYsWOHGDlypOjdu7dwOp1qmzFjxohevXqJjRs3io0bN4qePXuK8ePHN/j5Usvw17/+VZjNZrF69WqRkZGhPkpLS9U2zG1qaubPny/Wrl0r0tLSxK5du8Tf//53IcuyWLFihRCCOU3NR+W73gjB3Kam6cEHHxSrV68Wx44dE5s2bRLjx48XJpNJ/Q7YUvOahRLy8vbbb4vExESh1+tFv3791FtUEvnbqlWrBIAqj+nTpwsh3Lcve/LJJ0VsbKwwGAxi2LBhYvfu3V77KCsrE7NmzRLh4eEiICBAjB8/XqSnp3u1ycvLE7fccoswmUzCZDKJW265RRQUFDTQWVJLU11OAxAff/yx2oa5TU3NHXfcof4tERUVJa666iq1SCIEc5qaj3MLJcxtaoqmTJki4uLihE6nE/Hx8WLy5Mli79696vaWmteSEEL4ZywLEREREREREVHjwjlKiIiIiIiIiIg8WCghIiIiIiIiIvJgoYSIiIiIiIiIyIOFEiIiIiIiIiIiDxZKiIiIiIiIiIg8WCghIiIiIiIiIvJgoYSIiIiIiIiIyIOFEiIiIiIiIiIiDxZKiIiIiIiIiIg8WCghIiIiIiIiIvJgoYSIiIiIiIiIyIOFEiIiIiIiIiIiDxZKiIiIiIiIiIg8WCghIiIiIiIiIvJgoYSIiIiIiIiIyIOFEiIiIiIiIiIiD62/A6DaURQFZ86cgclkgiRJ/g6HiIiIiIiIqEkRQqCoqAjx8fGQ5fOMGxEtzNtvvy3atm0rDAaD6Nevn1i7du15269evVr069dPGAwGkZSUJBYvXlylzX/+8x/RtWtXodfrRdeuXcV3333ntf3JJ58UALweMTExdYr75MmTVfbBBx988MEHH3zwwQcffPDBBx981O1x8uTJ837/blEjSr7++mvMmTMH77zzDoYOHYr33nsPY8eOxb59+9CmTZsq7dPS0jBu3DjMmDEDS5Yswfr163HvvfciKioKf/rTnwAAGzduxJQpU/DMM89g0qRJWLZsGW688UasW7cOgwYNUvfVvXt3rFy5Ul3WaDR1it1kMgEATp48iZCQkDqfu6IoyMnJQVRU1PkrZ0SVMG/IF8wb8gXzhnzBvCFfMG/IF8yb5sFqtSIhIUH9fl0TSQghGigmvxs0aBD69euHxYsXq+u6du2K66+/HgsXLqzS/pFHHsEPP/yA/fv3q+tmzpyJP/74Axs3bgQATJkyBVarFb/88ovaZsyYMQgLC8NXX30FAFiwYAG+//57pKam+hy71WqF2WyGxWLxuVCSnZ2N6Oho/mJTrTFvyBfMG/IF84Z8wbwhXzBvyBfMm+ahtt+rW8xP2G63Y/v27Rg9erTX+tGjR2PDhg3V9tm4cWOV9tdccw22bdsGh8Nx3jbn7vPw4cOIj49HUlISbrrpJhw7duxiT4mIiIiIiIiI6lmLufQmNzcXLpcLMTExXutjYmKQmZlZbZ/MzMxq2zudTuTm5iIuLq7GNpX3OWjQIHz22Wfo1KkTsrKy8Oyzz2LIkCHYu3cvIiIiqj22zWaDzWZTl61WKwB3JVNRlNqfuIeiKBBC+NSXWi7mDfmCeUO+YN6QL5g35AvmDfmCedM81Pbn12IKJRXOvWOMEOK8d5Gprv256y+0z7Fjx6qve/bsieTkZLRv3x6ffvop5s2bV+1xFy5ciKeeeqrK+pycHJSXl9cYb00URYHFYoEQgkPFqNaYN+QL5g35gnlDvmDekC+YN+QL5k3zUFRUVKt2LaZQEhkZCY1GU2X0SHZ2dpURIRViY2Orba/VatWRIDW1qWmfABAUFISePXvi8OHDNbaZP3++VxGlYtKZqKgon+cokSSJkw9RnTBvyBfMm8blVIEF646eQLBBj/CgQEQEBSAiKBChgQHQNqKfD/OGfMG8IV8wb8gXzJvmwWg01qpdiymU6PV69O/fHykpKZg0aZK6PiUlBRMnTqy2T3JyMn788UevdStWrMCAAQOg0+nUNikpKZg7d65XmyFDhtQYi81mw/79+3HFFVfU2MZgMMBgMFRZL8uyz7+YkiRdVH9qmZg35AvmjX8JIbDxWDqWbE7FqkPHUN207ZIEhAYEIDI4EHFmEzpERaBjTAQ6REWgfVQEAvW6Bo+beUO+YN6QL5g35AvmTdNX259diymUAMC8efMwbdo0DBgwAMnJyXj//feRnp6OmTNnAnCP4jh9+jQ+++wzAO473CxatAjz5s3DjBkzsHHjRnz00Ufq3WwAYPbs2Rg2bBhefPFFTJw4Ef/973+xcuVKrFu3Tm3z0EMP4brrrkObNm2QnZ2NZ599FlarFdOnT2/YN4CIiJq1EpsdP/yxH0u2pOJoTj4kCRjRqR0m9ekGASC/uBR5JWcf+SVlyC0uxcZjJ7H28HF1P5IEtAoNQcfoSHcBJToC7aPC0S4yHAF+KKAQERERNaQWVSiZMmUK8vLy8PTTTyMjIwM9evTAzz//jMTERABARkYG0tPT1fZJSUn4+eefMXfuXLz99tuIj4/Hm2++iT/96U9qmyFDhmDp0qV4/PHH8cQTT6B9+/b4+uuvMWjQILXNqVOncPPNNyM3NxdRUVEYPHgwNm3apB6XiIjoYpwqsODzzan4budeFJXbYDIacFtyP0wd2BttwkMv2N/pUpBeUIgj2XnuR04eDmfnYd2R41h18Oxd2iQJaB1qRvuocHSIikCH6Ai0iwxHYkQozAG1G8pKRERE1NhJQlQ3IJcam9re77kmvO83+YJ5Q75g3jSstNwC/Pn9L1Fss6NDVDj+MqgPruvVFUEG/UXv2+Fy4UReIY7k5OFoTr5aRDmeVwCHy3vW+NBAIxLDw9A2IhSJ4aFIjAhDYkQoWoeaYQ4wnHfidIB5Q75h3pAvmDfkC+ZN81Db79UtakQJERFRc1Jmd+CBr39Eqd2B12+8Ftd063jBgkRd6DQadIh2jxypzOFy4WS+BYdz8pCWk4/j+YU4kVeAE/mF+ONURpX9BOp1aBUagnhzCOJDTZ7nEMSZTYg2BSEqOAg6Df/oJCIiosaBhRIiIqImSAiBp/7vNxzOzsOcq4ZiTPdODXZsnUaDdlHhaBcVXmVbUbkNJ/ILcSLPXTw5XWjFGYsVZwqLsOFYOhwuV7X7DDEaEB5gQGyo2V08MQUhKjjY/WwKQmRwIKKDgxBk0NdrMYiIiIjoXCyUEBERNUHf7tiL71P3YXjHJNx9+WX+DkdlMhrQIz4GPeJjqmxTFIHckhJkWIpwptCKM5Yi5BSVIKe4BDlFJcgotGD36SyU2O017j9Ap0VksLt4EhYYgLDAAIQGGN3PQQEICzQiNCAAoYFGhAYYEWI0QsvRKkRERFQHLJQQERE1MfszsvH0z78h3mzCC5OvgSw3jREWsiwh2hSMaFMwereO89pW+drvcqfLU0ApRm5xKbKL3IWU3OKzRZUTee7LfFzKhadaCzboYQ4weh4GmAOMMBkMCDYaYDLoEWw0IMRogMloQLBB73kYEGTQIUivh1Gn5SgWIiKiFoSFEiIioibEWlaO2f/+CUIIvH7jeIQFBvg7pHoXqNchMSIUiRGh520nhEBRuQ0FpeUoLCtDQWkZCkvLkV9SBktZ+dlH+dnXJwssKCq31SkejSwhSK9HkKeIEqjXI0ivQ5BBj0DPc8X2QL0OATotjDotjDqd+1nrXg7wLLvb6FiAISIiaqRYKCEiImoihBD4+/crkJ5vwRPjrkSv1rH+DsmvJElCSIARIQFGJCK01v2cLgXFNjuKbTYUldtQZLOjuNyGIpsNReXu1yV2O0psDpTY7Si22VFis6uvMyxWlNrd2y7m3oGSBATo3EWTAL27kBKo16kFlgCdFgbt2QJLRdFFr9XCoNXAoNXCoNNAr61Yr4FBq4FO496m97TRa9zrDTotdBqN7wETERG1ECyUEBERNREfb9iBlQeOYlyPzpg6sLe/w2mytBrZPYdJoPGi9iOEQJnDqRZRSu0OlNjsKHc6YXM4UeZwotzhQLnDiXKHE2UOB8ocTpTZHShzOFBa+dnuQKnDgSKrTe1nc1Y/8e3F0MgSDNqzRReD7myRRafRQKeRoZXdz+5lDbQaGTpZhlYjQyPL0Mqy2k4jS2o7tY9WA32l/u62cpV2FfuVZRkaSYIsS9BIsudZgizL0HuO01QuLyMiouaBhRIiIqImYPuJ03hl5e9oFxmOpydczUs2GgFJkhCod48CiUJQve9fUYRadCl1OGBzOmF3ulDucJ597XS/tjncy3aXS93mfu2C45x25U6nuo9yhxMldjsKyxQ4XC7PQ1GfG4uK4kxFscVd2HEXUSShINBggE7rXYiRJQmy5/dEkgAJ7mVJcv/stJ6iT0UBSCd7CkEauUrBprpCjkaWIEuy+9mzTSO7l7WV9lVxnIoiU+uwEIQHBfr5HSUiovNhoYSIiKiRyysuxdxv/g96jQZvTLkWwQa9v0OiBiDLZwsxYWj4uWiEEGrRxKkocLoU97P62qWuO1tccXn1sTtdcCgKHM5zizDuQo6iCLiEgKIonmcBl1DU9U5PH7u677P7sDvdr8sdLpQ5S93HqWjvdEEIAQEBRYiLukSqvj0z4Wr8uX9Pf4dBRETnwUIJERFRI5ZdVIy7Pl+G7KISvDR5DDpGR/o7JGohJEmCXusevdFYVb5bkiyf/zbQwlMwUYS7eOJSvAs/FcsOlwJFKHApZ9ud7SPUba5qijtOT1tXlf0K9XWvVi17biEioqaAhRIiIqJGKj2/EHd89i1OFVgx7+qhmNC7q79DImqyJM9lNzIqLltrvAUgIiLyLxZKiIiIGqEDmTm46/PvkF9Shqevuxo3DuBQfSIiIqKGwEIJERFRI7PtxCn89csfUO5w4rUbr8U13Tr6OyQiIiKiFoOFEiIiarIURcBqLUNpmR3lNgdsNgfKy53uZ5sDQghIkADPXS4kuJ9lWYJGI5/zkKDVaKDTaaDVaaDXaaDVupd1Wg30ei20WvmS321m9aFjmP31T9DIMj74y/UY3K7NJT0eEREREXljoYSIiBq1oqJypJ/Mw8nT+cjMsiA724rMbCuysq3IzrHC4XA1aDw6nbtootd5iig6rXtdpWW9vqKN+7XBoIPe06+i8FJdQWZbdiY+3bcLQTod5l9+OUw2DQ4fyYJWK0On16r9dFoNtDoZWo0GGo37dqVEREREVD9YKCEiIr8TQiAvvxhpx3Nx/EQu0k/mIf1UPtJP5qGgsLRK+4AAPWKiQ9C/TyKiokIQHGSAwaCF0aCDwaCD0aiFXq9VCwhCuI8B9//cd6lwueByKXC5BFwuBU6n+1anDodLfTidLtgdLjgcTnVdTctFxQ512W53b3e5lFqdvyIDpTEyittoIdsEDKnFePP35bV+/yqPkNFq5bOFGK2nEOMp4mhkGVqtxj16RluxfHZUTeX9yLIEWZahkd0jcCRZgkZ2j6hR+2tkaCtG5FTsR/YepaO+lt3Lsux9LFly7xsQKCwshKVIQKPReI/68fTVyDIk2T0hZ8XIIAnu/rIEz7N0dlulZyIiIqLaYqGEiIgalNPpwuGjWTh0OAtpx3Nw7HgO0o7noqi43KtdUJABiQkRGHRZO7RJiEBC63DExpgRG21GcLChSXz5dboU2O1O74fDBYfdiWN5Bdh2+gx2ZmTgYF4eXEIgJjAI9wzoC9Mwnafo4oTTqVQp3DidLrUQ4y7yKHC6XHA63ctqscfpLuKUltphdzjdRSGnu5+zUt/mTi26yGeLN3JF0cWzveKOKOfLK51OA61GhlangVajUYtMNfWpXNCRK4o4Poz+kSB5FZ7kSufx1xkjERxkqPM+iYiIqGYslBAR0SVVXGLD3v2nsWfvKezeexr7D56BzeZUtwcFGdCubRSS2kYiKTEKbRMjkdgmAmGhgU2iGHI+Wo0MbYAegQF6FJSU4Y/cbKw9nIZ1R04gw1IEADBoNRjSPhFXdGyL63t3RUiAscHjdI+wUaAoytlRNooCRRFQ1GehLle0qRiFU1FwcbkUdz9P/8qFnIr9uI8j1G1CCChCQHEpKCoqRmBQEIQi4FKP5X1MAQGhuPsIRbhHCLkUdaSQEMLrWVFEtTFVaesZcaQootr3SABwOd3Fp9JSu/vcne6RSKiUp5VTtnKcigAURYFTo8BlVuAMUaAECxjOaKHLO/9taoU4+76da8Ztw334iTcOLsUOBU4owgVFOKHABVHptSKc7mVPG7M+AUaN2d9hExFRC9DiCiXvvPMOXn75ZWRkZKB79+54/fXXccUVV9TYfs2aNZg3bx727t2L+Ph4PPzww5g5c6ZXm2+//RZPPPEEjh49ivbt2+O5557DpEmTLuq4RNS8OB1O7PxtD9Z8vQHZJ3Pxj28eRHBokL/DuiRKSm3YkXoKaSf2YueudBw9lg3h+X5nNOrQvWsr9OzeGt26xCGpbRSiIk1NviBSmdOl4HheAQ5k5eBgZg4OZuXiQGYOsotK1DaJEaGYNqgPhnVMwmVtW8Oo8+9/jt0jHjQAzv+F/VJSFAXZ2dmIjo6GLMt+i6M+FDvKcaIkH+kleUgvyUd6cR5OlOTjZEk+8u0lXm2LYMOgyHa4rcMQDI3qcN7fBSHcBaSzRS2BwAD9pT4dnzkVG4qdWShynEGRI6PSs/u1XSmu0/5kaJEQlIyOIWOQEDQYGrnxnjsRETVtLapQ8vXXX2POnDl45513MHToULz33nsYO3Ys9u3bhzZtqt5VIC0tDePGjcOMGTOwZMkSrF+/Hvfeey+ioqLwpz/9CQCwceNGTJkyBc888wwmTZqEZcuW4cYbb8S6deswaNAgn45LRM2DEAKpq/Zg9dL1WLdsC6x5Req2td9sxLgZV/sxuvpTWmrD3v1nkLorHTv+OIGDhzLVf/kONQfiiqGd0KtHAnp2b4327aKh1TTtL8GVldkdOJiVi/0Z2diXkY39mTk4nJ0Lm/PsBLN6rQYdoiJweYe26B4XjSs6tkWb8FD/BU31wiUUnCktRFpxLo4X53qe85BWnIs8W9UCQLg+CG2CwnF5TEe0CQpHYlAEQnQB+OFkKpaf2YPNucfQwRSN29oPxbjWPaCTq/6JJkkStBqp0fwOKcKJEmc2ihyZKHZkoMiR6VUQKXXlVtNLQpA2CuGG9gjSRkGWtJChhSRpPK/dz5KkgQwtZM96ADhTuh0nStbhRMnvMMghaGe6Cu1NoyFERMOeOBERNXuSEKL6MabN0KBBg9CvXz8sXrxYXde1a1dcf/31WLhwYZX2jzzyCH744Qfs379fXTdz5kz88ccf2LhxIwBgypQpsFqt+OWXX9Q2Y8aMQVhYGL766iufjlsdq9UKs9kMi8WCkJCQup04mte/1FHDYd74xuVy4ff/bMJXC5fh2K4TAICknm0w/M9DMGBMH8wZ+hh6jeiOF//3hJ8j9U12jhW795zC7n2nsWffKRxLy1ELI0FBBvTpmYAO7cMxbGg3tEuKbhajRRRFINNahGO5BTiYlYP9GTnYn5mNtNwC9yUbHpHBgegSG4UuMVHoHBuFLrGRaBsRBp3GfyM1morG9nkjhEChvRQ5tmLklBchp7wI6SX5alEkvSQfdsXp1cekNSLJFInEoAh3MSQ4Am08r026mi+pyigtxJJjm/CfE9tR6rIj2mjCLUmDcUPb/gjRBVzqU62RSzhQ6sz1FELOuJ+d7mJIsSMTJc4cCFSd48aoMcOkjUewLg4m9REPky4OwboYaCSdzzGVOLJxpCgFh63LUWg/DgAIkuPRJXQcOprHIFgX4/O+qeVobJ831DQwb5qH2n6vbjGFErvdjsDAQHzzzTdel8XMnj0bqampWLNmTZU+w4YNQ9++ffHGG2+o6ypGjJSWlkKn06FNmzaYO3cu5s6dq7Z57bXX8Prrr+PEiRM+Hbc6Ta1Qcjw7H59t2uG+qBuS59lDCPWLk+yZPE+WZPekd/DcuUByT3p3to3n4d6b2lZd51mGVKk/POsq9lHxXPmuCJXujiCEqNLeve9KbT3rBDz/J7mvQYdnWVSJz33+nhs6QAAQEKj4u1IAUIT7mn7hcv8Lpfs6egGhKO5r24WAolQMufYMt1YEhAAUeF9j7/Jcx+5ShHveAKXiIdS5A9TlinkHKuYHgOd6/opn4W5ns9shaTRqO5enrRACLlSKw/O64hzPrnereC0gIKRK70XF++DZBwD39srX+UN4pZG6LFX09m7v+TF6jiUq7edsX6lSO7WPVKl7xWvJM+eA+mVfeE/4KIuzk0DCPVeC0+H05IWATq+F3qiDRisDEiBDQqm1FA67E2HRIZ6JID15JlfOd0CWz+afu42AJAnIkgSN7D4Pjef8ZA0gQXjyv3Jb4TkuIMnC8/vm3gekivaec1LPzb0OinsiUpvdAbvnYbM74HS61PYarYxAow4BAVoEGHUwGLSQJAGn0wGtVlvpxyE8rz3xqu+1ONum0vsveWKueM+81kuVloFzPgfcWyp+38+2O/dzxPu1LLkTzKkosDtdKHU4UVJuR6ndgVK7HcU2B1zq77p7v4F6HcwBRoQGBLgfgQEI1Bsgw3MnFsl9RxcZsuczSYYseR4V2z3bNJLG/QwZkiRDI8nQSBrIFa9lDWRooJE06jatpIFG1nj6ylA/9aSKCGT1tftdlD3nXPm15uyz2rfya/c+GsKl/u+UQ3GiyGFDkaMcxc5yWB3lKHKUw+ooQ055MXLLi5Bjq/xcDKeoeutpGRLiA0ORFByJtsGRXs8RhqCLKgxaHWX4z/Ht+CJtE7LLixCo0eNPif0xrd1gxAWGXsTZnyWEgnKXBaWuPJQ581HmykeZMx+lnucyZ5762qZYq92HQQ5BsC7WU/iIhUkbi2BPEcSki4deDqyXWM9/HgJ5tkM4ZPkFR6wrYBfuEXtxAf3QMeQatDWNaJA4qGniF17yBfOmeajt9+oWc+lNbm4uXC4XYmK8/6UhJiYGmZmZ1fbJzMystr3T6URubi7i4uJqbFOxT1+OCwA2mw02m01dtlrdf6wUFhZCUep+hwJFUWC1WqHX6xvkF/urrd9Cifq60vfQSl+GcPYLb9U/Qc/Pu6xX+etXpf2Kc49a9TVE5X15/1GrfhkX5+7/7Dd17698Z9ueN3avBe++lY+hrpe9l1GpTZX9nRtn5WVx7vaqxwLcX0rPzQwBILiaY9eN8C5AeO29moIFvM+gmvoHIHlvU79sqw1EpW3u9l7LXscWlWoklfcjvNpXfAlX3zV12bOu0nbvY3r27xXD2cIEPNtQqa9Uua90tgDiF75OAXCxUweIc57rmTjPrrUAQiQgJABAbf8xXwGKioGiC7dsotxFGFQquqjPknS2MKM+NJ4Ci6ZSwabi9bnrJEiSBkJIsDuc0OUYIUGG8DwAyfM5KUERMlwCUATgEIBTEWefFQG74i522RSBcpeCMpcTZU4nSp1OlCsCQkhQAChChiIkKJDOPnvOwawLQrjehPZB4QjTByPCYEK43oRIQwjiA8KREBwOg6aaP5/KnbCUWy76nZ4c1QPXRXRFypm9+Pr4Jny5byW+OZCCG9r0xs1t+0MRdriEEy7hUF87RBkcrhLYRQnsSgmcivvZrpTA4SqFXSl2v1ZK4BCl1Y4CqaCXgmHUhCFA0xpmbRgCNeEI1sYgSBfjeY6GXq5mfiWn+1FaZkcp7Bf9PtSGFjHoorsV4cpo2ANPIK3kNxzP2YxjOVuglV5GO9PV6BpyPUL0rRokHmo6GvrvYmoemDfNQ8X36gtpMYWSCuf+S4+oNLqhtu3PXV+bfdb1uAsXLsRTTz1VZX1iYmKNfYiIiKh52gbgUX8H0eSsBvC4v4MgIqImqMUUSiIjI6HRaKqM4sjOzq4y2qNCbGxste21Wi0iIiLO26Zin74cFwDmz5+PefPmqctWqxUJCQk4ceKEz5fe5ObmIjIyskEqoCcPncG3r/yE4sISFBeUoKiwGMUFJSi1lgGeS0UgPJdqNJOrv7Q6DXRGHbQ6LWSN7L6LhMb9r606gw7GID0MRgMMQXoYAgzQ6DTudhoZGlmGrJVgCNBDp9dDZ9RCb9BBZ9S51xm10Bn10Bt10Oo0kGUJGq3svozIsw9Jlt2Xbniu8xEC7st3FAHF5R67o17a4rmkx+VU4LQ74HQ44bA54XQ44XS44LI74XA64bQ5UFhghSxk2MrsKC8uR3lJOWxlDtjL7XCU22Erd8JeZoO93A5bmRNOu8P9hqjXKHlU92OutE5Ng4rrcirWeV7rAgwwhQYhyByI4NAgmMKCERIejOBwE8wRITBFBCMoJAABwQEIDDYiICQAxiAjtAYtdDottHottDr3PBH2cgdsZTbYSu0oL7WhpLAUllwrLNkWWHKsKMi1IvdkPnJO5SI7PRellrIqocuyhNh2Meg5rCt6De+OHpd3Rki4qVa5IoTAM1NeR+qavXh90/MwBhvhcChwOJxwOl2wO1xwOFxwOty3InU43OucThccDiccjsq3YnWpt2l1uRT3JT+e4S8Vl6VAAjQaGQa9Fnq9DgaDRn1tNOpgDjHCbA5EaEggAgJ0Fz2niMvlQmZ2NkJCw+AS7svA7C4XHIoCp8sFu9MFh0uBw+WCU3HBqQg4FUW9XMzpUjxtFSg4e6mYS1HcbSvdJrUi1HOL17IkwajTwKDVwqjVwqjTwaCTYdTqYNBqERJgRERQAIIN+mYxh4qvKi7ZsytOOIXi+Xm44Kj8WnHBAfezU1HgUFxQhIBTKHAJl/tnIxTPsuK+PE9R4ITn8sFKF9m5L8/zXIYnKl98577fjq20FMHBQdBKgEZyX6KlkQQ0MtzjSyQBnSzBoNFAL0vQVTwkCVoJ0MoSZEmot5R132rWBQGX5xa0LghU3Hq2Yv3Z29IKobjXQXEvQ6nUToHwrFc829SxSep5qhcYei63VM4uV1ySBUkdhQP1/+WKa/zUdhpJD42kgyzpUGC3YVXWUXQIjsXgqM7QSDpoJK2njR4ayQi9HAS9Jgg6ORB6ORh6OQgaydDs87umv2+EEMgq24V9lmU4XbYZABCh74yu5klIDB6qThBLDUcI5ZzbPlf8zinq71TFegjF83vo/p10/z4KTxtFfQ0AinAB6jbPs6cd1NeV+7qPV1xchMDgAM+fK4rnk0g5e5muqPT7XPEbXmmdgOJpUykegbPHhwDUWM/+QSPUP24qfTaqnyXeayu9e5ViAirHVPHeeu1H/VxSKrWp6FPpXEVFn+rWVa/iMvUqP19UPa+q51N5e3U7qbrF672r9LM8e54VPzPlbBv1CNW/95W315WAqPE9OF/s9U+qdRyXPhbgz4lLm8zt261Wa60GH7SY/0ro9Xr0798fKSkpXnOFpKSkYOLEidX2SU5Oxo8//ui1bsWKFRgwYAB0Op3aJiUlxWuOkhUrVmDIkCE+HxcADAYDDAZDlfWhoaE+F0rsdjtCQ0MbpFASOjAUPb/uVqu2TocTpUVlKLWWoayoDCXWMsiyBL1RD51RB71BB61e6/4iXmpHeUk5ykvtsJfZobgUuJwu9RkANFoNZK0GGq0MjUY++02qElkjQ1PRRuv+8lyxD6fDBZfDBY1OA2OgAfoAPYyBeugD9O59yxIkWfY8u4sbeqNe3U9z4su1mC6XC/YyO2xldjjtTjjsniKM3QmHzeFZdniWnSgvtaG8uBylRWUoKy5HeXE5nA4XnA4nXA4XXE4XbOV2d8GtoARF+cXI2J+LwwXH1S/LdSFJUq2KcxqtBlEJEejarzOiEyMR0yYKMW2jEds2CjFtoxDVOgLai7il69i/jMTulftwavtJjLvrKp/30xgpigKHw8FreKlOeO13zYQQ+G/ee/guNxd/7XsnzHr/TfDa2Jzv75uwsOHoEj8chfZ07Cn4Nw5bf8H2sn/ioGMJeoT9GZ3M45vdPCZCKHAKG5xKOVzCDqcoh1OxwSnK4VLscAqbesmW+9nhedihVHrtvrTL4Xl2eh4Odz+4X1esV9vAWakI4lSLkxVFy/Nd8uUXeqCBrhKrvQt975W8FyrNuqXOJ3V2virJ89p7nXfRVj77GhXzBcrnHugcFyqiVFyS6R2jul2q2xf8s3uWK53T2fm4qm5DpWOenS/Q+/3yrKtjLEII2Gw2GAx1K0JXF490bkzq36ei2kKP+0/Xc7fXzfniqLz9bJ7IlXLr7GW2kM5uq3gPI8KioGsin6e1/RujxRRKAGDevHmYNm0aBgwYgOTkZLz//vtIT0/HzJkzAbhHcZw+fRqfffYZAPcdbhYtWoR58+ZhxowZ2LhxIz766CP1bjaAe1LWYcOG4cUXX8TEiRPx3//+FytXrsS6detqfdyWTqvTIiTcVOt/jafGTaPRICDYPbLjUlIUBcWFJbDmFsGSWwRLjhUlllK16FZqdb922p1weIouDrt7klVDoB7GQCOMgXoYAg0IDg1CaIwZodFmhFV61lzCO5UkTxgArU6DNd9saHaFEiKqX5IkYVq7ZPx953f4Ln07bu9wub9DalJC9W1wecxD6B9xJ/Zbvse+wmXYlPMWtuf9C13M16F76A1+u1uOEAocSilsSjHsriLYlGL3XDJKaZWHXSmFQylzL4tSOJUyOJQyOJVydyFE2OESl+6bvwSNZ5ST1vNwj2xy38ZZB61kcN/a2XOLZ9lzi+dzb/0sSxq1jQTZsyx7JrjWeOYx0ngm+vds8yzDMyn22S/HsteXubOTVVcUADTwnsTaMyObkFBYaEF4WDhkWXP2S985xYSKL+Tu869oA09cZ7+gA5UKDpUm1Ha3lSvtr9KX1VoXE6r7Ekv+wIJ+y9KiCiVTpkxBXl4enn76aWRkZKBHjx74+eef1aE3GRkZSE9PV9snJSXh559/xty5c/H2228jPj4eb775Jv70pz+pbYYMGYKlS5fi8ccfxxNPPIH27dvj66+/xqBBg2p9XCKqO1mW1QJb607+jqbugkOD0H90b2xdngpLrhXmyLqPFCOiluOa+O54Zd8KfJW2BdPaJUMrN79RjJdagDYM/SJuR6+wqThStAJ7Cr7G7oKl2FPwDWIDeiNAGwqjHAqDxgyjJgRGTSgMmhAYNWb1tVYyql9U3Zeu2dSJcism0LW7KpZL4fBMpGtzFbkn1fUUQ+xKEewu97a6jrTQSAbPJVaB0MoBMGpCoZUN0EgGaCUjtLIeWskIjexZlvTQykZoJIN6SZd6aZes87rMS+N5yJXXwV0Yaag7YDUERVGgLc5GdAC/8BJR9VrM7YGbuqZ2e2BqHpg3l9aKT1fj5dvfxtz3ZzarUSXMG/IF8+bCFh9cjXcOrsIrA27E6Pju/g6nUbiYvBFCwanSLdhT8G9kl++DQym5YB+NpIdBNsElHJ4iR13u3ye555KRTTBogqGXTdBrgmGo/CwHQa8Jhk4KhE4OhE4O8DyfXeb8KhePnzfkC+ZN88DbAxMRNXJDJl4GrU6Dtf/Z2KwKJUR0adzYdgA+OLwWS45tYqGkHkiSjISgwUgIGgwAcAkHbC4ryl0W2FwWlHseXq8VC2yuImgkPXRykKfwEQSdxj2J7tnJdAPd2zXu13pPEaQ5jcogImrOWCghIvITXn5DRHURYQjGta164fuTO7G38DS6h7byd0jNikbSIVAbgUBthL9DISIiP/NLWdtms+H333/H559/jvfeew/fffcd0tLS/BEKEZFfDbshGYpLwfrvt/o7FCJqAv7Szj36YcmxTX6OhIiIqPlq0BElGzZswFtvvYXvv/9evZVbQEAA8vPzYbPZ0K5dO9x9992YOXMmTCbeAYWImj9efkNEddHZHIvLItpi+em9mNttFKKNHIlGRERU3xpsRMnEiRNxww03oFWrVvjf//6HoqIi5OXl4dSpUygtLcXhw4fx+OOP49dff0WnTp2QkpLSUKEREflNcGgQug7uhAObD/s7FCJqIv7SLhlO4cLXxzkSjYiI6FJosBElo0ePxjfffAO9Xl/t9nbt2qFdu3aYPn069u7dizNnzjRUaEREfhURH4bdv++Hw+6ATq/zdzhE1MgNj+2E1oFh+Ob4NtzdcRgMGn5uEBER1acGG1Fy33331VgkOVf37t0xatSoSxwREVHjEBplBgBYcov8HAkRNQUaScYt7QahwF6Kn0/v9nc4REREzU6juEfZsWPHsHfvXiiK4u9QiIganDnKPcdAYbbFz5EQUVNxfUJfBGkN+PzoJggh/B0OERFRs9KghRKHw4Enn3wS1113HZ577jm4XC7cfPPN6NixI3r16oUePXrg+PHjDRkSEZHfhUZ7RpTkWP0cCRE1FcE6Iya16YvDRVnYkss7BxIREdWnBi2UPProo1i8eDFiYmLwr3/9C5MnT8bOnTvx5ZdfYunSpdBqtXjssccaMiQiIr87O6KEhRIiqr2pSYMgQeKtgomIiOpZrSdznTdvXq13+uqrr1a7/j//+Q8++eQTjBs3DocOHUKXLl3wf//3fxg7diwAIDo6Grfcckutj0NE1ByERbsLJRxRQkR1kRAUjhGxnbE68yDSi/PQJjjC3yERERE1C7UulOzcudNrefv27XC5XOjcuTMA4NChQ9BoNOjfv3+N+zhz5gx69+4NAOjUqRMMBgM6dOigbu/UqRMyMzPrdAJERE1dxYiSAs5RQkR1NK3dYKzKPIAv0zbj0Z7j/B0OERFRs1DrQsmqVavU16+++ipMJhM+/fRThIWFAQAKCgpw++2344orrqhxHy6XCzrd2VvYabVaaDQadVmWZU5IRkQtTsUcJZzMlYjqakBEW3QOicWy9J24r8tImHRGf4dERETU5NW6UFLZK6+8ghUrVqhFEgAICwvDs88+i9GjR+PBBx+sse///vc/mM3uLwWKouDXX3/Fnj17AACFhYW+hENE1KQFhwZBo9XAkstLb4iobiRJwl/aDcYTqd9jWfoO3Np+iL9DIiIiavJ8KpRYrVZkZWWhe/fuXuuzs7NRVFR03r7Tp0/3Wr7nnnu8liVJ8iUkIqImS5IkmKNCOKKEiHwytlUPvLYvBV+mbcYt7QZDIzXoXP1ERJeMEAJOocCpuOASCjSSjACt3t9hUQvgU6Fk0qRJuP322/HKK69g8ODBAIBNmzbhb3/7GyZPnlxjP0VRfIuSiKiZC40O4WSuROQTg0aHG9sOwLuH1mB15kFcFdfV3yERkR8IIeASChyKC07Ps0Nxwa441deVl+2Vlp1CgSIUuDwPxbOvimf3Q0ARCpyKAodwwVlpn071uJ5lTxuXosBZab9OxfNcaZtTKHB51lfXp7Kb2g7EY72u9dM7TC2JT4WSd999Fw899BD+8pe/wOFwuHek1eLOO+/Eyy+/XK8BEhG1BKFRIThwLNvfYRBREzWl7WX48PA6LDm2iYUSokvAPbLBBZvLiXKXEw5PscG7QHD2tbPSa5vLCbviebicsCnuh8PlUl/bXc5KRQdXlWKEehzFBYdnhEV1BYrGQitpoJM10EoyNLLsfpZkaGUZWkkDjSRDJ2sRIHvWSzK0sqZSG0879bV7P73DE/x9atRC+FQoCQwMxDvvvIOXX34ZR48ehRACHTp0QFBQUI19fvjhh1rvf8KECb6ERUTUZIVGm1FaVAZ7uR16I4eUElHdRBpNGNeqB3449Qf2Fp5B99B4f4dEdMkIIdwFBpcDZS4Hyr0eTvW1e5tdLVRUFCRsLicsJUXQnNGr69WihcvheXbvx664CyM2lwMKLv1NJyRI0MoydJIGWvlssUEnVyy7iwvu9RroZHeBwd2+8vqz/fSyFjqNu41e1kJf8VqjhVZ9dhcsZElSn7WSDFmSoZEkr+fqjlX5eBpJ5nQK1OT5VCipkJGRgYyMDAwbNgwBAQEQQtT4S3H99dd7LUuS5HWHm8r9XK76r4YWFBTggQceUAs2EyZMwFtvvYXQ0NAa+wgh8NRTT+H9999HQUEBBg0ahLfffttrbhabzYaHHnoIX331FcrKynDVVVfhnXfeQevWrdU2bdu2xYkTJ7z2/cgjj+CFF16o35MkoibLHOm+RXBhjhXRCZF+joaImqJb2w/BD6f+wPuH1uCNgTf7OxxqwRShoNzlQKnTgTKXHaVOu+fZe7nMaUepy+F5di9XLnzYFHexwuZyoszlUIsY5S5HvcarlTTQy+6CgUHWwqjRwaDRIkRnhMHz2iBr3a9lLQwarbv4IGtqLGpULiLo1T6VX2vPee0+PucYImocfCqU5OXl4cYbb8SqVasgSRIOHz6Mdu3a4a677kJoaCheeeWVKn0qz0+ycuVKPPLII3j++eeRnJwMSZKwYcMGPP7443j++ed9P5vzmDp1Kk6dOoXly5cDAO6++25MmzYNP/74Y419XnrpJbz66qv45JNP0KlTJzz77LMYNWoUDh48CJPJBACYM2cOfvzxRyxduhQRERF48MEHMX78eGzfvt3r1sdPP/00ZsyYoS4HBwdfkvMkoqap8i2CWSghIl90Nsfiqtiu+DVzPw5YMtDFHOfvkKgJsbkcKHLYUOwsR4nThmKHDcVOG0qdds86O0qcNvfDYUOJ045ip61S4cPhKXS4X18Mo6cgYdTo1KKFWR/gtd6g0SJAo/c869S25z4CNDroPX10sgYGjRZayLDmF6JVTCyMWh1kFieI6Bw+FUrmzp0LnU6H9PR0dO169jrYKVOmYO7cudUWSiqbM2cO3n33XVx++eXqumuuuQaBgYG4++67sX//fl/CqtH+/fuxfPlybNq0CYMGDQIAfPDBB0hOTsbBgwfRuXPnKn2EEHj99dfx2GOPqRPUfvrpp4iJicGXX36Je+65BxaLBR999BE+//xzXH311QCAJUuWICEhAStXrsQ111yj7s9kMiE2NrZez4uImo+KQgkndCWiizGz83D8mrkf7x5cg9cH3uTvcKgBORQXrI4yWB3lsNo9z44yr3VFznIUO2wocpSj2Ol+rnhtV5x1Op4MCUFaAwK0egRqdAjRGRFjDEGgVo8Ajc7zrEeAVodAjd7TrvLz2fWV2xs12kteuFAUBUJbBqOGRRIiqp5PhZIVK1bgf//7n9flJQDQsWPHKpeYVOfo0aMwm81V1pvNZhw/ftyXkM5r48aNMJvNapEEAAYPHgyz2YwNGzZUWyhJS0tDZmYmRo8era4zGAwYPnw4NmzYgHvuuQfbt2+Hw+HwahMfH48ePXpgw4YNXoWSF198Ec888wwSEhLw5z//GX/729+g13MeAiJyC43yXHqTzUIJEfmuizkOI2O74NfM/ThoyURnM/+RpilyKE4U2EtRYCtFob0UBfaK55KzryttszrKUeay13r/wVoDgnVGBGsNaBscob426Yww6YwI0hoQrDUgyPMI1lW81iNYa0Cg1oAAjY7zUBBRs+VToaSkpASBgYFV1ufm5sJgMFyw/2WXXYY5c+ZgyZIliItzDwvNzMzEgw8+iIEDB/oS0nllZmYiOjq6yvro6GhkZmbW2AcAYmJivNbHxMSoxaDMzEzo9XqEhYVVaVN5v7Nnz0a/fv0QFhaGLVu2YP78+UhLS8OHH35YY8w2mw02m01dtlrdX54URfHpNsuKokAIwVs0U50wbxpOSKT7cr6C7MIm/34zb8gXzJv6c3fHYfgt8wAWH1yNVwfc6O9wLqmmlDc2lxO5tmLk2YqRbytBnq0YefYSdTnfVqIuWx3lF9xfsNaAUH0gIg3BaGeKQojO6HkEeD2bKi27iyD6epkHQwjhNd9gU9KU8oYaD+ZN81Dbn59PhZJhw4bhs88+wzPPPAPAPRGroih4+eWXceWVV16w/7/+9S9MmjQJiYmJaNOmDQAgPT0dnTp1wvfff1/rOBYsWICnnnrqvG22bt2qxniu800+W+Hc7bXpc26buXPnqq979eqFsLAw3HDDDXjxxRcRERFR7T4WLlxY7bnl5OSgvPzC//E8l6IosFgsEEJAljnEkGqHedNwXLL7eu4zxzORnd20bxPMvCFfMG/qTwQ0GBLaFr9m7sem4/vRLrD6vzWag8aQN3bFhTyHu8iR7yj1es5zlCLfUYI8eymKXLbz7sekMSBMF4gkYzjCTIEwa40w6wLcz1p3EcSsDUCIZ1kna867P5UCwAbAZkc57Kj7X5HNT2PIG2p6mDfNQ1FRUa3a+VQoefnllzFixAhs27YNdrsdDz/8MPbu3Yv8/HysX7/+gv07dOiAXbt2ISUlBQcOHIAQAt26dcPVV19dpyF8s2bNwk03nf/627Zt22LXrl3Iysqqsi0nJ6fKiJEKFfOJZGZmqqNeACA7O1vtExsbC7vdjoKCAq9RJdnZ2RgyZEiNMQ0ePBgAcOTIkRoLJfPnz8e8efPUZavVioSEBERFRSEkJKTGfddEURRIkoSoqCj+YlOtMW8aTpDRPcGzo9RZ7Qi4poR5Q75g3tSvBwyjseH39/FN7m680oxHlTRE3pQ67ThTVoiMUgsyygpxpsyCjDLP69JC5NqKa7xpbKBGj0hjMDqbYxFpNCHSEIxIQzAiDEGIMAQj3BCEcH0Qwg1BtS980EXj5w35gnnTPBiNxlq186lQ0q1bN+zatQuLFy+GRqNBSUkJJk+ejPvuu8+rqHA+kiRh9OjRXvN71FVkZCQiIy98d4jk5GRYLBZs2bJFvbRn8+bNsFgsNRY0kpKSEBsbi5SUFPTt2xcAYLfbsWbNGrz44osAgP79+0On0yElJQU33uj+IyQjIwN79uzBSy+9VGM8O3fuBIDzvlcGg6Hay5hkWfb5F1OSpIvqTy0T86ZhBJuDoNNrYcmxNov3mnlDvmDe1J/uYa0wIqYzVmbux5HiHHQKqf4fhpqD+sibQnspThTnIb0kHydK8pBekocTxfk4U1aIQntptX0iDMGIDzCjb0QiYo0hiA4IQZTBhCijCVHGYEQZTQjSXviSdPIPft6QL5g3TV9tf3Y+FUrS09ORkJBQ7aUh6enp6uU0lS1duvSCoz8qnDx5Eunp6Rg6dKgv4VXRtWtXjBkzBjNmzMB7770HwH174PHjx3tN5NqlSxcsXLgQkyZNgiRJmDNnDp5//nl07NgRHTt2xPPPP4/AwEBMnToVgHvy2TvvvBMPPvggIiIiEB4ejoceegg9e/ZU74KzceNGbNq0CVdeeSXMZjO2bt2KuXPnYsKECdW+T0TUMkmShNBoM+96Q0T1ZmbnEViddRDvHVrTrEeV1Jbd5URacS6OFGWrhZD0kjycKMmH1VFWpX20MQTtgqMQH2hGXEAo4gPNiA8IRVxgKOICzDBqdH44CyIiagg+FUqSkpKQkZFRZXh4Xl4ekpKS4HK5qvRZvHgxFixYgNtvvx0TJkzwuq0wAFgsFqxfvx5LlizBypUr8dFHH/kSWo2++OILPPDAA+oIlgkTJmDRokVebQ4ePAiLxaIuP/zwwygrK8O9996LgoICDBo0CCtWrIDJZFLbvPbaa9BqtbjxxhtRVlaGq666Cp988gk0GvfwSYPBgK+//hpPPfUUbDYbEhMTMWPGDDz88MP1en5E1PSZo0JQmG25cEMiolroHhqP4TGdsOLMXhy2ZqFjMx5VUpkQApllFhyyZuFwUZb72ZqN48W5cArvSfyiDCZ0DIlGYlAEEoLCkRgUgTZB4WgTFI4ALe9OSETUUknCh+mqZVlGVlYWoqKivNafOHEC3bp1Q0lJSbX9fvrpJ7z11ltYuXIlgoKCEBMTA6PRiIKCAmRmZiIqKgq333475syZ0+Sv0a9vVqsVZrMZFovF5zlKsrOzER0dzaFiVGvMm4Y1f+yz2PP7AfxYvMTfoVwU5g35gnlzaewtPI2b1r6Pa+K745/NcFSJw+XEthMHcUoqxcGiLBz2FEWKnN5TlrYODEPHkBh0ColBB1M02ga7CyKBvDSmReLnDfmCedM81PZ7dZ1GlFRMLipJEp544gmvWwS7XC5s3rwZffr0qbH/+PHjMX78eOTl5WHdunU4fvw4ysrKEBkZib59+6Jv375MOiJqsUKjzSgvtaGspBwBQbWbaIqI6Hy6h7bCsJhOWHFmH45Ys9EhpGn/Q1S+rQS7Ck5hV8FJ7Co4hd0Fp1HqsqvbTTojOplj0NHkLop0DIlBx5BozhVCRER1UqdCScUkpEII7N69G3r92SGJer0evXv3xkMPPXTB/URERGDixIl1DJWIqHkzR7qr2pYcKwslRFRv/tppBNZmHcJ7h9bg5QF/9nc4teYSCg5YMvFHwUnsyj+FXQWncLI0X90eoNGhuzke7Q3hGNyqE3qEtUKMMaROd1AkIiKqTp0KJatWrQIA3H777XjjjTd8ugSEiIiqFxptBuAulMS2bdr/6ktEjUePsFa4Iroj/ndmL2YWDUd7U+P9fMkss2B99hFsyDmKTTnHvCZZbRsUgQmte6NXWGv0Dk9AB1M0ZEgcCk9ERPXOp8lcP/744/qOg4ioxQuNchefOaErEdW3v3Yegd+zD+O9Q2vwUv/GM6qk1GnHtrzj2OApjqQV5wIAJEjoFhqHIVED0Dc8ET3DWiFUH1ilv6IoVdYRERFdLJ8KJQCwdetWfPPNN0hPT4fdbvfa9t133110YERELU3FiJJC3iKYiOpZz7DWuDy6I5af3ot7OvlvVIkQAkeLcrAm6yA25hzFjvx0OBT33RKjjSG4PqEvhkZ3wKDIJIQZgvwSIxERkU+FkqVLl+LWW2/F6NGjkZKSgtGjR+Pw4cPIzMzEpEmT6jtGIqIWwayOKGGhhIjq3187j8C67MN479BavNT/hgY7rhACh6xZSMnYhxVn9qqjRowaHQZGJmFIVHsMieqA9qYozi9CRESNgk+Fkueffx6vvfYa7rvvPphMJrzxxhtISkrCPffcg7i4uPqOkYioRQiN5qU3RHTp9AprjaFRHbD89B7M7DQc7UxRl+xYQggctGZixZl9SDmzF8dL8gAA4fogTGl7GUbGdkH/iEQYNLpLFgMREZGvfCqUHD16FNdeey0AwGAwoKSkBJIkYe7cuRg5ciSeeuqp8/Z3uVz45JNP8OuvvyI7O7vK9aW//fabL2ERETVp6mSuuRxRQkSXxszOI7A+5wjeO7QGL9bzqBIhBA5YM7HizF6sOLMX6SXuO9REGoJxU9uBGB3fDf0iEqGROOkqERE1bj4VSsLDw1FUVAQAaNWqFfbs2YOePXuisLAQpaWlF+w/e/ZsfPLJJ7j22mvRo0cPDrMkIgIQEGSEIUDPESVEdMn0CU/AkKj2+OX0HtxTD6NKnIoLO/NPYnXmAfyWeQCnSgsAANFGE6YmDcKo+G7oG96GxREiImpSfCqUXHHFFUhJSUHPnj1x4403Yvbs2fjtt9+QkpKCq6666oL9ly5din//+98YN26cL4cnImq2QqPNnMyViC6pv3YegQ05R3H7+o/RL6IN+oQloHd4G3Qzx0GvufCfhiVOGzZkH8WqzANYm3UIFs8tfGMDzPhLu8EYHdcdvcNbQ2ZxhIiImiifCiWLFi1CeXk5AGD+/PnQ6XRYt24dJk+ejCeeeOKC/fV6PTp06ODLoYmImjVzVAgKsgr9HQYRNWN9wtvgoW6j8eOpXfgt4wBWZuwHAOhkDbqZ49E7rDX6hLdB7/DWiDa6507KLrdideZBrMo8iM25x9Q71XQ1x2FqzCBcGdcFXUJiOUqYiIiahToXSpxOJ3788Udcc801AABZlvHwww/j4YcfrvU+HnzwQbzxxhtYtGgR/4NKRFRJaHQIju9JhxCCn49EdMlM7zAU0zsMRYnTht0Fp/FHwUmk5p/EHwXux2fHNgIA4gNCYdYHYL8lAwCglWRcFpmEEbGdcWVMZ8QFhvrxLIiIiC6NOhdKtFot/vrXv2L//v0+H3TdunVYtWoVfvnlF3Tv3h06nfeM5999953P+yYiasrMUSGwlztQVlyOQFOAv8MhomYuSGvA4Kh2GBzVDgCgCAXHi/OQmp+OPwpOITX/JDLKLBjbqgeujO2Cy6M7wqQz+jlqIiKiS8unS28GDRqEnTt3IjEx0aeDhoaGYtKkST71JSJqzsKiPHe+ybGyUEJEDU6WZLQzRaGdKQqTE/v7OxwiIiK/8KlQcu+99+LBBx/EqVOn0L9/fwQFBXlt79Wr13n7f/zxx74cloio2TNHuecDKMi2IK5djJ+jISIiIiJqeXwqlEyZMgUA8MADD6jrJElSr6l3uVwX3IfT6cTq1atx9OhRTJ06FSaTCWfOnEFISAiCg4N9CYuIqMkLjXaPKOEtgomIiIiI/MOnQklaWtpFHfTEiRMYM2YM0tPTYbPZMGrUKJhMJrz00ksoLy/Hu+++e1H7JyJqqioKJRbeIpiIiIiIyC98KpT4OjdJhdmzZ2PAgAH4448/EBERoa6fNGkS7rrrrovaNxFRU1Zx6U1hNgslRERERET+IPva8fPPP8fQoUMRHx+PEydOAABef/11/Pe//71g33Xr1uHxxx+HXq/3Wp+YmIjTp0/7GtJ5FRQUYNq0aTCbzTCbzZg2bRoKCwvP20cIgQULFiA+Ph4BAQEYMWIE9u7d69Xm/fffx4gRIxASEgJJkqrdpy/HJqKWKSzaXSix5PDSGyIiIiIif/CpULJ48WLMmzcP48aNQ2FhoTonSWhoKF5//fUL9lcUpdp5TE6dOgWTyeRLSBc0depUpKamYvny5Vi+fDlSU1Mxbdq08/Z56aWX8Oqrr2LRokXYunUrYmNjMWrUKBQVFaltSktLMWbMGPz973+v12MTUcukjijhpTdERERERH7hU6HkrbfewgcffIDHHnsMGo1GXT9gwADs3r37gv1HjRrlVVCRJAnFxcV48sknMW7cOF9COq/9+/dj+fLl+PDDD5GcnIzk5GR88MEH+Omnn3Dw4MFq+wgh8Prrr+Oxxx7D5MmT0aNHD3z66acoLS3Fl19+qbabM2cOHn30UQwePLjejk1ELZchwICAYCMLJUREREREfuJToSQtLQ19+/atst5gMKCkpOSC/V977TWsWbMG3bp1Q3l5OaZOnYq2bdvi9OnTePHFF30J6bw2btwIs9mMQYMGqesGDx4Ms9mMDRs2VNsnLS0NmZmZGD16tLrOYDBg+PDhNfapr2MTUctmjgrhXW+IiIiIiPzEp8lck5KSkJqaWmVS119++QXdunW7YP/4+Hikpqbiq6++wo4dO6AoCu68807ccsstCAgI8CWk88rMzER0dHSV9dHR0cjMzKyxDwDExMR4rY+JiVHnZLlUxwYAm80Gm82mLlut7n9dVhQFiqLU+vgVFEWBEMKnvtRyMW/8IzQqBDmn8prs+868IV8wb8gXzBvyBfOGfMG8aR5q+/PzqVDyt7/9Dffddx/Ky8shhMCWLVvw1VdfYeHChfjwww9rtY+AgADccccduOOOO3wJAQCwYMECPPXUU+dts3XrVgDuy3vOJYSodn1l526vTZ8L7aM2+1m4cGG155aTk4Py8vI6HR9wJ4TFYoEQArLs8xy+1MIwb/wjwGxE4U4rsrKy6vx50xgwb8gXzBvyBfOGfMG8IV8wb5qHyvONno9PhZLbb78dTqcTDz/8MEpLSzF16lS0atUKb7zxBm666aYL9tdoNBg2bBi+/fZbhIeHq+uzsrIQHx9f7USv1Zk1a9YFj9e2bVvs2rULWVlZVbbl5ORUGTFSITY2FoB7REhcXJy6Pjs7u8Y+Ne2nrscGgPnz52PevHnqstVqRUJCAqKiohASElLr41dQFAWSJCEqKoq/2FRrzBv/iG4dBZdjD4IMwQgODfJ3OHXGvGncnA4nLLlFKCksQVFBCYoLSlBiKUGAKQDJ1w3wW1zMG/IF84Z8wbwhXzBvmgej0Virdj4VSgBgxowZmDFjBnJzc6EoSrWXl9RECAGbzYYBAwbghx9+QI8ePby21VZkZCQiIyMv2C45ORkWiwVbtmzBwIEDAQCbN2+GxWLBkCFDqu2TlJSE2NhYpKSkqPOx2O12rFmzpk7zqPhybMA9H4rBYKiyXpZln38xJUm6qP7UMjFvGl5YtBkAYM0rRkj4pbkT2KXGvGlYQgiUFpXBmluE/MxC5J7OR96ZfOSdzkdeRgHyMwtRkFWIgsxCWHKr/5eUzpe1x9CJAxs4cm/MG/IF84Z8wbwhXzBvmr7a/ux8LpRUqE2h4lySJOHbb7/FCy+8gCFDhuDzzz/HxIkT1W31rWvXrhgzZgxmzJiB9957DwBw9913Y/z48ejcubParkuXLli4cCEmTZoESZIwZ84cPP/88+jYsSM6duyI559/HoGBgZg6daraJzMzE5mZmThy5AgAYPfu3TCZTGjTpg3Cw8NrfWwiogrqLYKzLWjdMe4Crak5c7lcyM8oRM7JXOSezvcUQAqQl+EughRmW2HJtaIovxhOR82jMQNDAhAeG4o23VojPDYU5sgQmMKCERwWhODQIASHBSEiPrzG/kREREQtiU+FkqysLDz00EP49ddfkZ2dXWUUyIUunRFCQKPR4I033kD37t0xZcoUPP7447jrrrt8CadWvvjiCzzwwAPqXWwmTJiARYsWebU5ePAgLJazd5p4+OGHUVZWhnvvvRcFBQUYNGgQVqxYAZPp7L/wvvvuu15ziQwbNgwA8PHHH+O2226r9bGJiCqEekaUWHiL4GZNCIHCHCuyjmcj52Qeck7lIedkHnJP5yH7ZB5yTuYi70wBFFf1k44FhwYhLMaMuPax6DwwGOaIEIREBCMsNgwR8WGIbBWOiPgwRMSHwxhYdYQiEREREVXPp0LJbbfdhvT0dDzxxBOIi4u7qFEgd999Nzp16oQbbrgBa9as8Xk/FxIeHo4lS5act825BR9JkrBgwQIsWLCgxj4X2l7bYxMRVag8ooSatqKCYmQcy0JmWjYyjmUjMy0LmcezkXUiF9kncmArs1fbLzTajKiECHTq3w5RrSMRlRCByNYRavEjPC4MAUG1u8aWiIiIiOrGp0LJunXr8Pvvv6NPnz4+HTQxMREajUZdHjFiBDZt2oTrrrvOp/0RETUnFXOUFHJESZPgsDtw+nAmTh44jVOHMnDy0GmcPpSBU4cyYM2rOh+I3qhDTNto9BzWFTFtohCdGIWYxChEtg5HdEIkIuLDoDfq/XAmRERERAT4WChJSEio06Sr50pLS6uyrkOHDti5c2e1d4ghImpJOKKk8RFCwJJrxalDGTh18AxOHTqD9AOncfLAaZw5mlXl8pjQqBAkdIlHq45xiG8Xi9ikaMS1i0ZcuxiERpub5G2fiYiIiFoKnwolr7/+Oh599FG89957aNu2rc8H3759O/bv3w9JktC1a1f069cPiYmJPu+PiKg5YKHEv2xlNhzfcxJH/ziBo6lpOLbrBE7sPYmighKvdhqtBvEdYpF8XX8kdGmNNl1boU2XVmjVMa5J3taZiIiIiNx8KpRMmTIFpaWlaN++PQIDA6HT6by25+fnn7d/dnY2brrpJqxevRqhoaHuf6mzWHDllVdi6dKliIqK8iUsIqJmQW/QwRQWhIIsFkouNUuuFUd2puFo6nEc/eM4jqYex8kDp6EoZ0dNBocGIalnG7TuFI/WneLQunM8WneKR1y7aOj0uvPsnYiIiIiaIp9HlFyM+++/H1arFXv37kXXrl0BAPv27cP06dPxwAMP4Kuvvrqo/RMRNXVhsaHIzyz0dxjNSnmpDUd2HMOBLUdwcOsRHNhyBJlp2V5tYpOikTxhANr3SUL7Pm3RvndbRLeJ5KUyRERERC2IT4WS6dOnX9RBly9fjpUrV6pFEgDo1q0b3n77bfUWukRELVl4bCiO7Dzu7zCatIKsQuxZfxB71x/A3vUHcHhHGlxO9+3rJUlCQpd4jLp1ODr2a4f2fdqiXa9EXjJDRERERL4VSgDg6NGj+Pjjj3H06FG88cYbiI6OxvLly5GQkIDu3buft6+iKFUu1wEAnU4HRVGq6UFE1LKExYaiuLAE9nI774BSSwXZFuxavRd/rN6L1NV7cfLAaXWbKTwYl43tg26DO6PLoA7o1L8dgswsihARERFRVT4VStasWYOxY8di6NChWLt2LZ577jlER0dj165d+PDDD/Gf//znvP1HjhyJ2bNn46uvvkJ8fDwA4PTp05g7dy6uuuoqX0IiImpWwmNCAQAFWRbEJHLepurYbQ7sWXcAW3/ZiW0rUnF8z0l1W1RCBK6eNgw9L++K7pd3QULneMiy7MdoiYiIiKip8KlQ8uijj+LZZ5/FvHnzYDKZ1PVXXnkl3njjjQv2X7RoESZOnIi2bdsiISEBkiQhPT0dPXv2xJIlS3wJiYioWQmLDQMA5GcWslBSSV5GATb+sA1bftmBnb/uRnmJDYD7UqWRUy9H7xE90OfK7ohrF8N5RYiIiIjIJz4VSnbv3o0vv/yyyvqoqCjk5eVdsH9CQgJ27NiBlJQUHDhwAEIIdOvWDVdffbUv4RARNTvhsaEAgAJO6IpTh85g/fdbsf77zdi/6TAAQNbI6JbcCZeN6YuB4/qife+2LIwQERERUb3wqVASGhqKjIwMJCUlea3fuXMnWrVqdd6+TqcTRqMRqampGDVqFEaNGuVLCEREzVqYp1DSUu98c+pwBtZ8vQGr/71evaQm0BSAEVOGYMjEgbhsTB9OvEpEREREl4RPhZKpU6fikUcewTfffANJkqAoCtavX4+HHnoIt9566/kPqNUiMTERLpfLp4CJiFoCdURJVqFf42hIuWfy8dsXv2P11+txeEcaACAkwoRxd12FoZMGoc/IHtAbqk4ETkRERERUn3wqlDz33HO47bbb0KpVK/WyGafTiVtuuQWPP/74Bfs//vjjmD9/PpYsWYLw8HBfQiAiatbCWsilNy6XC9uWp+L/PliJzf+3A4pLQWBIAEbfNgIjpgxF35E9oNX5fIM2IiIiIqI68+mvT51Ohy+++ALPPPMMduzYAUVR0LdvX3Ts2LFW/d98800cOXIE8fHxSExMRFCQ9/DpHTt2+BIWEVGzERIRDFkjI7+ZjigpyCrET++m4Jd//Yqck3mQJAkDxvTB2DuvwqBxfXlLZCIiIiLyG58KJfPmzauybtOmTZAkCUajER06dMDEiRNrHC1y/fXX+3JYIqIWQ6PRIDTa3OxGlBzfexLfvvojfv3idzjsTkS2CsdfnrgBY+4Yybv7EBEREVGj4FOhZOfOndixYwdcLhc6d+4MIQQOHz4MjUaDLl264J133sGDDz6IdevWoVu3bgDco0juvvtuGI1G3H777WjdujVkWa7XkyEiak7CY0ObxWSuQgj8sXov/v3PH7D1l50AgG5DOuOGeddhyIQB0Gg1fo6QiIiIiOgsnwolFaNFPv74Y4SEhAAArFYr7rzzTlx++eWYMWMGpk6dirlz5+J///sfAPcolJtuuglGoxFJSUnIyMhAdHR0/Z0JEVEzExYbipMHTkMI0WRvfbtr7T588o+l2L12P2RZwhU3DMYN865Dt8Gd/B0aEREREVG1fCqUvPzyy0hJSVGLJAAQEhKCBQsWYPTo0Zg9ezb+8Y9/YPTo0er2+Ph4fPvttxg3bhyEEDh16hTKy8ur3X+bNm18CYuIqFkJjwmFrcyO0qIyBIUE+jucOjm8LQ2vvvE+dv66G7JGxpg7RmLq3ycjrl2Mv0MjIiIiIjovn659sVgsyM7OrrI+JycHVqsVABAaGgq73a5ue/zxxzFnzhy0a9cOkiThsssuQ1JSktejbdu2SEpK8vFUzq+goADTpk2D2WyG2WzGtGnTUFhYeN4+QggsWLAA8fHxCAgIwIgRI7B3716vNu+//z5GjBiBkJAQSJJU7T7btm0LSZK8Ho8++mg9nh0RNUdN8c43Z45m4slJL+PpCa/ij1V7MOrW4fjX/tfx4Id/ZZGEiIiIiJoEny+9ueOOO/DKK6/gsssugyRJ2LJlCx566CF1otYtW7agU6ezQ6vvvvtu3HzzzThx4gR69eqFlStXIiIiol5OojamTp2KU6dOYfny5Wo806ZNw48//lhjn5deegmvvvoqPvnkE3Tq1AnPPvssRo0ahYMHD8JkMgEASktLMWbMGIwZMwbz58+vcV9PP/00ZsyYoS4HBwfX05kRUXMV7imU5GcWonWneP8GcwFlJeX46vnv8J9XfoTD7sTA6/pixsJpaNstwd+hERERERHViU+Fkvfeew9z587FTTfdBKfT6d6RVovp06fjtddeAwB06dIFH374oVc/k8mEHj164OOPP8bQoUNhMBguMvza2b9/P5YvX45NmzZh0KBBAIAPPvgAycnJOHjwIDp37lyljxACr7/+Oh577DFMnjwZAPDpp58iJiYGX375Je655x4AwJw5cwAAq1evPm8MJpMJsbGx9XdSRNTshTeBESVCCKz59wa8/7fPkXMqD0k92+De129HbNdIzkNFRERERE2ST5feBAcH44MPPkBeXp56B5y8vDy8//77CAoKAgD06dMHffr0qbb/9OnTG6xIAgAbN26E2WxWiyQAMHjwYJjNZmzYsKHaPmlpacjMzPSaZ8VgMGD48OE19jmfF198EREREejTpw+ee+45r8uSiIiqE1ZpREljVJBViH9MfBHP3fw6yorLcd+bd2Dx9pfQa3g3f4dGREREROQzn0aUVAgODkavXr3qK5ZLJjMzs9p/2YyOjkZmZmaNfQAgJsb7mvqYmBicOHGiTsefPXs2+vXrh7CwMGzZsgXz589HWlpalRE3ldlsNthsNnW5Yu4XRVGgKEqdjl/RTwjhU19quZg3/mWOck+YnZdR0Oh+Bht+2IrX734PltwijJx6Oe55ZTpCPfEyb8gXzBvyBfOGfMG8IV8wb5qH2v78LqpQ4m8LFizAU089dd42W7duBYBqb61Zm1tunrvdl9t0zp07V33dq1cvhIWF4YYbblBHmVRn4cKF1Z5bTk5OjXcLOh9FUWCxWCCEgCz7NJCIWiDmjX+5NA4AQMbxzGon0PaHsuJyfPHkd1jz1UYEhQZi1ru3Y9CEfrCLcmRnuz+bmDfkC+YN+YJ5Q75g3pAvmDfNQ1FRUa3aNelCyaxZs3DTTTedt03btm2xa9cuZGVlVdmWk5NTZcRIhYr5RDIzMxEXF6euz87OrrFPbQ0ePBgAcOTIkRoLJfPnz8e8efPUZavVioSEBERFRXndlrm2FEWBJEmIioriLzbVGvPGv0SUgN6oQ5mlvFHM93Fs1wk8fcMryDiWhf6jemHeh39FZKvwKu2YN+QL5g35gnlDvmDekC+YN82D0WisVTu/F0rWr1+PAQMG+DRnSWRkJCIjIy/YLjk5GRaLBVu2bMHAgQMBAJs3b4bFYsGQIUOq7ZOUlITY2FikpKSgb9++AAC73Y41a9bgxRdfrHOsle3cuRMAvAow5zIYDNW+J7Is+/yLKUnSRfWnlol541/hsaEoyLL4/f1f//0WvDDtTTjtTtz3xh2YOGvMeUfXMW/IF8wb8gXzhnzBvCFfMG+avtr+7Pz+Ex47dixOnz59SY/RtWtXjBkzBjNmzMCmTZuwadMmzJgxA+PHj/e6402XLl2wbNkyAO5fgjlz5uD555/HsmXLsGfPHtx2220IDAzE1KlT1T6ZmZlITU3FkSNHAAC7d+9Gamoq8vPzAbgnkn3ttdeQmpqKtLQ0/Pvf/8Y999yDCRMmoE2bNpf0vImo6QuLDfXrZK5CCHzx3LdYMPllGIOMePm3Bbj+/rF1vgSRiIiIiKip8PuIEiFEgxzniy++wAMPPKDexWbChAlYtGiRV5uDBw/CYrGoyw8//DDKyspw7733oqCgAIMGDcKKFStgMpnUNu+++67XXCLDhg0DAHz88ce47bbbYDAY8PXXX+Opp56CzWZDYmIiZsyYgYcffvhSni4RNRPhsaE4uPUoFEVp8H+9sJXZ8M87F2P10vVo1zsRT3//CGISoxo0BiIiIiKihub3QklDCQ8Px5IlS87b5tyijSRJWLBgARYsWFBjnwtt79evHzZt2lSXUImIVGExoVBcCqx5RQiNMjfYcYsLSzB/7HM4sPkwhk4aiEc+nYWA4IAGOz4RERERkb/4/dKb995776InRyUiaq7CY8MAAAUNePlNcWEJHr3mGRzYfBhTHp6If3zzIIskRERERNRi+L1QMnXqVAQFBfk7DCKiRiksNhQAGmyekooiycGtR3HL43/CnQtv4YRlRERERNSi8K9fIqJGLLwBCyXFhSWYP+ZZd5HksT9h+lNTOGkrEREREbU4LJQQETViFSNKLvWlNxVFkgNbjriLJE+zSEJERERELRMLJUREjVhDjChx2B14ctJLLJIQEREREYGFEiKiRi0sxn2nm4KswkuyfyEE3r7/X9i1Zh+unzWWRRIiIiIiavFYKCEiasT0Rj2CQ4Mu2YiS/769HP/3wUr0G9ULM1+dziIJEREREbV4LJQQETVyYbGhl2SOkh2/7sbiuZ+gVcc4PL50LjRaTb0fg4iIiIioqWGhhIiokQuPDa33ESWnDmfg2RtfQUCwEU//9xGYwoLrdf9ERERERE0VCyVERI1cWGwoivKLYbc56mV/JZYS/GPiiyixlOKxpXPRpkuretkvEREREVFzwEIJEVEjFx4TCgAozLbUy/7env0xTh44jbtfvhWXXdOnXvZJRERERNRcsFBCRNTIhXluEVwf85Ss/34LUj5bg4Hj+mLynGsven9ERERERM0NCyVERI1cuKdQcrHzlBTmWPD6zPdhCgvC3Pdn8g43RERERETVYKGEiKiRq48RJUIIvHnvByjMtmDWorsQGR9eP8ERERERETUzLJQQETVyYTFmABc3omTV0vX4/dvNuOKGwbjypqH1FBkRERERUfPDQgkRUSN3sZfe5J7Jx6JZHyI02owH3r6Ll9wQEREREZ0HCyVERI2cOSoEsiyhIKuwzn2FEHjt7ndRVFCCOe/ejdAoc/0HSERERETUjLBQQkTUyGk0GpijQnwqlPz+7SZs+Xknrp42DEOvH1j/wRERERERNTMtplBSUFCAadOmwWw2w2w2Y9q0aSgsLDxvHyEEFixYgPj4eAQEBGDEiBHYu3evuj0/Px/3338/OnfujMDAQLRp0wYPPPAALBbLRR+biKiysNjQOk/maiuz4f2/fY4gcyDufvnWSxMYEREREVEz02IKJVOnTkVqaiqWL1+O5cuXIzU1FdOmTTtvn5deegmvvvoqFi1ahK1btyI2NhajRo1CUVERAODMmTM4c+YM/vnPf2L37t345JNPsHz5ctx5550XfWwiosrCY0PrPEfJf175CVkncjDtH39GWDQvuSEiIiIiqg2tvwNoCPv378fy5cuxadMmDBo0CADwwQcfIDk5GQcPHkTnzp2r9BFC4PXXX8djjz2GyZMnAwA+/fRTxMTE4Msvv8Q999yDHj164Ntvv1X7tG/fHs899xz+8pe/wOl0QqvV+nRsIqJzhcWGorzEhrLiMgQEB1ywfc6pPCx9YRkSOsdjwn3XNECERERERETNQ4sYUbJx40aYzWa1UAEAgwcPhtlsxoYNG6rtk5aWhszMTIwePVpdZzAYMHz48Br7AIDFYkFISAi0Wq3PxyYiOld4TCiA2t/55sNHl6C81IaZr94GnV536QIjIiIiImpmWsSIkszMTERHR1dZHx0djczMzBr7AEBMTIzX+piYGJw4caLaPnl5eXjmmWdwzz33XNSxAcBms8Fms6nLVqsVAKAoChRFqbFfTRRFgRDCp77UcjFvGo/QGPelM3lnChDXLua8bfeuP4DfvlyHgWP7YsA1vRv858e8IV8wb8gXzBvyBfOGfMG8aR5q+/Nr0oWSBQsW4Kmnnjpvm61btwIAJEmqsk0IUe36ys7dXlMfq9WKa6+9Ft26dcOTTz553n3U5tgLFy6s9txycnJQXl5+3piroygKLBYLhBCQ5RYxkIjqAfOm8dAEuN//w3uOIrpTeI3tFEXBW/d/CI1Wxg1/H4/s7OyGCtErBuYN1RXzhnzBvCFfMG/IF8yb5qFivtELadKFklmzZuGmm246b5u2bdti165dyMrKqrItJyenyoiRCrGxsQDcI0Li4uLU9dnZ2VX6FBUVYcyYMQgODsayZcug0+m89lPXYwPA/PnzMW/ePHXZarUiISEBUVFRCAkJqbFfTRRFgSRJiIqK4i821RrzpvEYfM0AfKBfgpQP12LCjLHQaKr/efzvk1VI23USf5o7Hr2TezRwlG7MG/IF84Z8wbwhXzBvyBfMm+bBaDTWql2TLpRERkYiMjLygu2Sk5NhsViwZcsWDBw4EACwefNmWCwWDBkypNo+SUlJiI2NRUpKCvr27QsAsNvtWLNmDV588UW1ndVqxTXXXAODwYAffvihyhvvy7EB93woBoOhynpZln3+xZQk6aL6U8vEvGkc4pJiMHnOtfj6pf8i5ZPVGDfj6iptcs/k48NHvkBoVAim/eMGv/7MmDfkC+YN+YJ5Q75g3pAvmDdNX21/di3iJ9y1a1eMGTMGM2bMwKZNm7Bp0ybMmDED48eP97rrTJcuXbBs2TIA7l+COXPm4Pnnn8eyZcuwZ88e3HbbbQgMDMTUqVMBuEeSjB49GiUlJfjoo49gtVqRmZmJzMxMuFyuOh2biOhCpj72J4THhuLjx79CcWGJ1zZFUfDybYtgzSvCA4vvRpA5yE9REhERERE1bS2iUAIAX3zxBXr27InRo0dj9OjR6NWrFz7//HOvNgcPHoTFYlGXH374YcyZMwf33nsvBgwYgNOnT2PFihUwmUwAgO3bt2Pz5s3YvXs3OnTogLi4OPVx8uTJOh2biOhCAk0BuOP5qSjMsWLJM//x2vbta/+HHSt3Y+ydV+GKyYNq2AMREREREV2IJIQQ/g6CLsxqtcJsNqu3H64rRVGQnZ2N6OhoDhWjWmPeND6KouD+wX/H0dTj+GD3K0jo3ApHUtNw/6D5iE2KxjvbX0JAUO2uvbyUMTJvqK6YN+QL5g35gnlDvmDeNA+1/V7NnzARURMiyzLue+N2uJwuvPvgpygvteH5qW8AAOZ/MdvvRRIiIiIioqaOhRIioiamW3JnXHXLFdjy8048MvoZnDxwGrc9czM69W/v79CIiIiIiJo8FkqIiJqgOxfeAmOgAfs2HESfkT3w54eu83dIRERERETNAgslRERNUFTrCNzzynS079MWj3w6i9fKEhERERHVE62/AyAiIt+Mv2cUxt8zyt9hEBERERE1K/wnSCIiIiIiIiIiDxZKiIiIiIiIiIg8WCghIiIiIiIiIvJgoYSIiIiIiIiIyIOFEiIiIiIiIiIiD971pokQQgAArFarT/0VRUFRURGMRiNvI0q1xrwhXzBvyBfMG/IF84Z8wbwhXzBvmoeK79MV369rwkJJE1FUVAQASEhI8HMkRERERERERE1XUVERzGZzjdslcaFSCjUKiqLgzJkzMJlMkCSpzv2tVisSEhJw8uRJhISEXIIIqTli3pAvmDfkC+YN+YJ5Q75g3pAvmDfNgxACRUVFiI+PP+/III4oaSJkWUbr1q0vej8hISH8xaY6Y96QL5g35AvmDfmCeUO+YN6QL5g3Td/5RpJU4MVVREREREREREQeLJQQEREREREREXmwUNJCGAwGPPnkkzAYDP4OhZoQ5g35gnlDvmDekC+YN+QL5g35gnnTsnAyVyIiIiIiIiIiD44oISIiIiIiIiLyYKGEiIiIiIiIiMiDhRIiIiIiIiIiIg8WSlqId955B0lJSTAajejfvz9+//13f4dEfrJgwQJIkuT1iI2NVbcLIbBgwQLEx8cjICAAI0aMwN69e732YbPZcP/99yMyMhJBQUGYMGECTp061dCnQpfQ2rVrcd111yE+Ph6SJOH777/32l5feVJQUIBp06bBbDbDbDZj2rRpKCwsvMRnR5fKhfLmtttuq/L5M3jwYK82zJuWZeHChbjssstgMpkQHR2N66+/HgcPHvRqw88bOldt8oafN3SuxYsXo1evXggJCUFISAiSk5Pxyy+/qNv5WUOVsVDSAnz99deYM2cOHnvsMezcuRNXXHEFxo4di/T0dH+HRn7SvXt3ZGRkqI/du3er21566SW8+uqrWLRoEbZu3YrY2FiMGjUKRUVFaps5c+Zg2bJlWLp0KdatW4fi4mKMHz8eLpfLH6dDl0BJSQl69+6NRYsWVbu9vvJk6tSpSE1NxfLly7F8+XKkpqZi2rRpl/z86NK4UN4AwJgxY7w+f37++Wev7cyblmXNmjW47777sGnTJqSkpMDpdGL06NEoKSlR2/Dzhs5Vm7wB+HlD3lq3bo0XXngB27Ztw7Zt2zBy5EhMnDhRLYbws4a8CGr2Bg4cKGbOnOm1rkuXLuLRRx/1U0TkT08++aTo3bt3tdsURRGxsbHihRdeUNeVl5cLs9ks3n33XSGEEIWFhUKn04mlS5eqbU6fPi1kWRbLly+/pLGTfwAQy5YtU5frK0/27dsnAIhNmzapbTZu3CgAiAMHDlzis6JL7dy8EUKI6dOni4kTJ9bYh3lD2dnZAoBYs2aNEIKfN1Q75+aNEPy8odoJCwsTH374IT9rqAqOKGnm7HY7tm/fjtGjR3utHz16NDZs2OCnqMjfDh8+jPj4eCQlJeGmm27CsWPHAABpaWnIzMz0yheDwYDhw4er+bJ9+3Y4HA6vNvHx8ejRowdzqoWorzzZuHEjzGYzBg0apLYZPHgwzGYzc6kZW716NaKjo9GpUyfMmDED2dnZ6jbmDVksFgBAeHg4AH7eUO2cmzcV+HlDNXG5XFi6dClKSkqQnJzMzxqqgoWSZi43NxculwsxMTFe62NiYpCZmemnqMifBg0ahM8++wz/+9//8MEHHyAzMxNDhgxBXl6emhPny5fMzEzo9XqEhYXV2Iaat/rKk8zMTERHR1fZf3R0NHOpmRo7diy++OIL/Pbbb3jllVewdetWjBw5EjabDQDzpqUTQmDevHm4/PLL0aNHDwD8vKELqy5vAH7eUPV2796N4OBgGAwGzJw5E8uWLUO3bt34WUNVaP0dADUMSZK8loUQVdZRyzB27Fj1dc+ePZGcnIz27dvj008/VSc58yVfmFMtT33kSXXtmUvN15QpU9TXPXr0wIABA5CYmIj/+7//w+TJk2vsx7xpGWbNmoVdu3Zh3bp1Vbbx84ZqUlPe8POGqtO5c2ekpqaisLAQ3377LaZPn441a9ao2/lZQxU4oqSZi4yMhEajqVLBzM7OrlIxpZYpKCgIPXv2xOHDh9W735wvX2JjY2G321FQUFBjG2re6itPYmNjkZWVVWX/OTk5zKUWIi4uDomJiTh8+DAA5k1Ldv/99+OHH37AqlWr0Lp1a3U9P2/ofGrKm+rw84YAQK/Xo0OHDhgwYAAWLlyI3r1744033uBnDVXBQkkzp9fr0b9/f6SkpHitT0lJwZAhQ/wUFTUmNpsN+/fvR1xcHJKSkhAbG+uVL3a7HWvWrFHzpX///tDpdF5tMjIysGfPHuZUC1FfeZKcnAyLxYItW7aobTZv3gyLxcJcaiHy8vJw8uRJxMXFAWDetERCCMyaNQvfffcdfvvtNyQlJXlt5+cNVedCeVMdft5QdYQQsNls/Kyhqhp06ljyi6VLlwqdTic++ugjsW/fPjFnzhwRFBQkjh8/7u/QyA8efPBBsXr1anHs2DGxadMmMX78eGEymdR8eOGFF4TZbBbfffed2L17t7j55ptFXFycsFqt6j5mzpwpWrduLVauXCl27NghRo4cKXr37i2cTqe/TovqWVFRkdi5c6fYuXOnACBeffVVsXPnTnHixAkhRP3lyZgxY0SvXr3Exo0bxcaNG0XPnj3F+PHjG/x8qX6cL2+KiorEgw8+KDZs2CDS0tLEqlWrRHJysmjVqhXzpgX761//Ksxms1i9erXIyMhQH6WlpWobft7QuS6UN/y8oerMnz9frF27VqSlpYldu3aJv//970KWZbFixQohBD9ryBsLJS3E22+/LRITE4Verxf9+vXzun0atSxTpkwRcXFxQqfTifj4eDF58mSxd+9edbuiKOLJJ58UsbGxwmAwiGHDhondu3d77aOsrEzMmjVLhIeHi4CAADF+/HiRnp7e0KdCl9CqVasEgCqP6dOnCyHqL0/y8vLELbfcIkwmkzCZTOKWW24RBQUFDXSWVN/OlzelpaVi9OjRIioqSuh0OtGmTRsxffr0KjnBvGlZqssXAOLjjz9W2/Dzhs51obzh5w1V54477lC/D0VFRYmrrrpKLZIIwc8a8iYJIUTDjV8hIiIiIiIiImq8OEcJEREREREREZEHCyVERERERERERB4slBARERERERERebBQQkRERERERETkwUIJEREREREREZEHCyVERERERERERB4slBARERERERERebBQQkRERERERETkwUIJERER+Z0QAnfffTfCw8MhSRJSU1P9HVKjZbfb0aFDB6xfv75e9/vTTz+hb9++UBSlXvdLRETU1LBQQkRERH63fPlyfPLJJ/jpp5+QkZGBHj16+DukRuv9999HYmIihg4dqq6TJAnff/99lba33XYbrr/++lrtd/z48ZAkCV9++WU9RUpERNQ0sVBCREREfnf06FHExcVhyJAhiI2NhVarrdLGbrf7IbLG56233sJdd911SfZ9++2346233rok+yYiImoqWCghIiIiv7rttttw//33Iz09HZIkoW3btgCAESNGYNasWZg3bx4iIyMxatQoAMC+ffswbtw4BAcHIyYmBtOmTUNubq66v5KSEtx6660IDg5GXFwcXnnlFYwYMQJz5sxR21Q3AiM0NBSffPKJunz69GlMmTIFYWFhiIiIwMSJE3H8+HGvuK+//nr885//RFxcHCIiInDffffB4XCobWw2Gx5++GEkJCTAYDCgY8eO+OijjyCEQIcOHfDPf/7TK4Y9e/ZAlmUcPXq02vdqx44dOHLkCK699to6vMNux48fhyRJVR4jRoxQ20yYMAFbtmzBsWPH6rx/IiKi5oKFEiIiIvKrN954A08//TRat26NjIwMbN26Vd326aefQqvVYv369XjvvfeQkZGB4cOHo0+fPti2bRuWL1+OrKws3HjjjWqfv/3tb1i1ahWWLVuGFStWYPXq1di+fXudYiotLcWVV16J4OBgrF27FuvWrUNwcDDGjBnjNbJl1apVOHr0KFatWoVPP/0Un3zyiVex5dZbb8XSpUvx5ptvYv/+/Xj33XcRHBwMSZJwxx134OOPP/Y67r/+9S9cccUVaN++fbVxrV27Fp06dUJISEidzgcAEhISkJGRoT527tyJiIgIDBs2TG2TmJiI6Oho/P7773XePxERUXNRdVwrERERUQMym80wmUzQaDSIjY312tahQwe89NJL6vI//vEP9OvXD88//7y67l//+hcSEhJw6NAhxMfH46OPPsJnn32mjkD59NNP0bp16zrFtHTpUsiyjA8//BCSJAEAPv74Y4SGhmL16tUYPXo0ACAsLAyLFi2CRqNBly5dcO211+LXX3/FjBkzcOjQIfz73/9GSkoKrr76agBAu3bt1GPcfvvt+Mc//oEtW7Zg4MCBcDgcWLJkCV5++eUa4zp+/Dji4+Or3XbzzTdDo9F4rbPZbOrok8rvb3l5Oa6//nokJydjwYIFXn1atWrlNXKGiIiopWGhhIiIiBqtAQMGeC1v374dq1atQnBwcJW2R48eRVlZGex2O5KTk9X14eHh6Ny5c52Ou337dhw5cgQmk8lrfXl5uddlMd27d/cqTsTFxWH37t0AgNTUVGg0GgwfPrzaY8TFxeHaa6/Fv/71LwwcOBA//fQTysvL8ec//7nGuMrKymA0Gqvd9tprr6kFmQqPPPIIXC5XlbZ33nknioqKkJKSAln2HmAcEBCA0tLSGmMgIiJq7lgoISIiokYrKCjIa1lRFFx33XV48cUXq7SNi4vD4cOHa7VfSZIghPBaV3luEUVR0L9/f3zxxRdV+kZFRamvdTpdlf1W3F43ICDggnHcddddmDZtGl577TV8/PHHmDJlCgIDA2tsHxkZqRZizhUbG4sOHTp4rTOZTCgsLPRa9+yzz2L58uXYsmVLlUIQAOTn53udIxERUUvDQgkRERE1Gf369cO3336Ltm3bVntnnA4dOkCn02HTpk1o06YNAKCgoACHDh3yGtkRFRWFjIwMdfnw4cNeoyj69euHr7/+GtHR0T7NBwIAPXv2hKIoWLNmTZWRHhXGjRuHoKAgLF68GL/88gvWrl173n327dsXixcvhhBCvSSoLr799ls8/fTT+OWXX6qdB6VixEzfvn3rvG8iIqLmgpO5EhERUZNx3333IT8/HzfffLN6d5YVK1bgjjvugMvlQnBwMO6880787W9/w6+//oo9e/bgtttuq3J5yciRI7Fo0SLs2LED27Ztw8yZM71Gh9xyyy2IjIzExIkT8fvvvyMtLQ1r1qzB7NmzcerUqVrF2rZtW0yfPh133HEHvv/+e6SlpWH16tX497//rbbRaDS47bbbMH/+fHTo0MHrkqHqXHnllSgpKcHevXvr8K657dmzB7feeiseeeQRdO/eHZmZmcjMzER+fr7aZtOmTTAYDBeMg4iIqDljoYSIiIiajPj4eKxfvx4ulwvXXHMNevTogdmzZ8NsNqvFkJdffhnDhg3DhAkTcPXVV+Pyyy9H//79vfbzyiuvICEhAcOGDcPUqVPx0EMPeV3yEhgYiLVr16JNmzaYPHkyunbtijvuuANlZWV1GmGyePFi3HDDDbj33nvRpUsXzJgxAyUlJV5t7rzzTtjtdtxxxx0X3F9ERAQmT55c7SVBF7Jt2zaUlpbi2WefRVxcnPqYPHmy2uarr77CLbfcct7Lf4iIiJo7SZx7gS4RERFRMzNixAj06dMHr7/+ur9DqWL9+vUYMWIETp06hZiYmAu23717N66++upqJ5u9GDk5OejSpQu2bduGpKSketsvERFRU8MRJURERER+YLPZcOTIETzxxBO48cYba1UkAdxzn7z00kv1fgvftLQ0vPPOOyySEBFRi8fJXImIiIj84KuvvsKdd96JPn364PPPP69T3+nTp9d7PAMHDsTAgQPrfb9ERERNDS+9ISIiIiIiIqL/b9+OaQAAAAAE9W/tYwyI4Saz3gAAAABMKAEAAACYUAIAAAAwoQQAAABgQgkAAADAhBIAAACACSUAAAAAE0oAAAAAJpQAAAAALB5SgzRvAKe4AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "worst CW departure from the frozen Chebyshev: 0.0216 dB (test allows 0.05)\n" + ] + } + ], + "source": [ + "cw_labels = ['0.8 kHz', '1.0 kHz', '1.3 kHz', '1.8 kHz', '2.0 kHz']\n", + "worst = plot_generated_vs_reference(\n", + " ['cw_band_%d' % b for b in range(5)],\n", + " cw_labels,\n", + " 'CW audio filters at 192 kHz: generated vs frozen',\n", + " plt.cm.viridis)\n", + "print('worst CW departure from the frozen Chebyshev: %.4f dB (test allows 0.05)' % worst)\n" + ] + }, + { + "cell_type": "markdown", + "id": "6d4662c5", + "metadata": {}, + "source": [ + "## EQ cells: generated vs frozen\n", + "\n", + "Each cell's analog prototype is recovered from the frozen table by an exact\n", + "inverse bilinear transform, so agreement here should be at the level of float32\n", + "rounding.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "598e6c1a", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-28T10:57:20.751201Z", + "iopub.status.busy": "2026-07-28T10:57:20.750938Z", + "iopub.status.idle": "2026-07-28T10:57:21.256020Z", + "shell.execute_reply": "2026-07-28T10:57:21.255129Z" + } + }, + "outputs": [ + { + "data": { + "image/png": "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1R6DlCPRSECnnjV6y1al9fN+wvenLP1J/9cjKN6EFttsK4QQZKbIdsCh0GrqfD9127G7G23QaYikHQEILZuJGWq71KvHMvU2GLCnfP3t9ZhFC6MbTw/DdfjVOI66CQB9zif4nzrdFkJilJQTLifjlpdB1Qgsn0vuuXsQLuqZ3kg225ZRo0Yxf/585s+fzy+//EJcXBwHHnggpaWl3HLLLfz8888sWrSIH3/8kRUr5D3YU089xYIFC1i0aBHl5eV8/PHHWz2uV199lQULFnDTTTc1W67rneskaBPb3H333ey2227Nll188cW8+eabLF++nE8//ZTFi2XzgmuvvZaZM2eyevVqioqKmDVrFgD33nsv//znP1m1ahWDBg3ihRe2voH8s88+y/fff8+TTzYvu+6N16Etgth0CxFPEKEqVFZKpSMc1qn1WyKIU4ogAev+NLvJvLPK6gwTr0oRJSFJChU+S8/I1KRnRFqa1xrXpLo6SDV+Qla2RqYlgricgpREedlHRJAS5I1WAimtxj4oWX5fU9a4rNKQpQoeslp4RahCMNAjg1vUjghimmGCISmmeN27tLkdwO6uZARgALODlS3HqpRP0pWMfdsdJ8KBqmyVm08lZWZt+xtv+BGMECgaDD+4U+O3hps4hjMJgDmtGKSapknoq6cAUHY6DCVtwGYfqz004WWgOAyAtcZbhM3GOiczHKb0kX8B4Bg2nvhpJ22TGNrD656M2zUJgJKK+3psK1khVJyjbgbhgHAlwWW39djMl7YQigYHPghxfcAIw6fnYtYWRTusHoXz4EvRpsvfaWPxt/ifPlN6HNnEHAkHnkCf+94HzYFelEPOmbsQXN9FA28bmyZ88skn7L///sTFxbF27VrGjBlDSkoKiqKwzz778OGHHwKQmCh948LhMD6fr8seYLfeemtD5klmZia33357s/XHHHMMVVVV7LTTTnz++edMnTqVG2+8kSlTpvDf//6X119/nfHjxzN+/PiGDJVnnnmmYcz+/fs3tNV9+eWX2XXXXZkwYQK33norAOvXr2fixImcfvrpjB49muOPP77X/T+NJqtWrWL58uVMnz69YVl+fj7hcJgJEyagaRonnXQSn376KaZp8vvvv3PooTI7+rTTTuPTTz8F4NNPP+XUU09tsbyztHXNRLjssstYu3Yt06ZN44UXXuCMM87gqquu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+ejbty+nnHIKs2bNonv37spJaVJ77bXXWkuH//LLL3Tp0gXQ70lpWtXV1bhcdd9WuN3u5BK5ykdxUlPmX79+/fjhhx8oLi5OtpkwYQJ+v58+ffps0fuUTdDEE7FKC1O7RO7jjz9u5syZY0aOHGnS09PNn3/+6XRoksL+9a9/mezsbPPJJ5+Y4uLi5KO6ujrZ5rbbbjPZ2dnm1VdfNd9//7056aST6l3qrGPHjmbSpElmxowZ5sADD6x3qbOddtrJTJs2zUybNs3suOOOWmpPNsqaq8MYo5yUpvXVV18Zj8djbrnlFvPrr7+a5557zqSlpZlnn3022UY5KU1l2LBhpkOHDsklcl999VWTl5dnLrvssmQb5aNsSRUVFWbmzJlm5syZBjB33XWXmTlzppk3b54xpunyr3aJ3IMOOsjMmDHDTJo0yXTs2FFL5DYzKoLIZnvggQdMly5djM/nM7vuumtyGVORhgLqfTzxxBPJNrZtm+uuu860a9fO+P1+s++++5rvv/++znlqamrMBRdcYNq0aWOCwaAZNGiQmT9/fp02y5cvN6eccorJzMw0mZmZ5pRTTjErV65sgruUVPf3IohyUpraW2+9ZXr16mX8fr/ZfvvtzaOPPlpnv3JSmkp5ebkZMWKE6dy5swkEAqZ79+7m6quvNuFwONlG+Shb0scff1zv347Dhg0zxjRt/s2bN88MHDjQBINB06ZNG3PBBReYUCi0JW9fNpFljDHO9EEREREREREREWk6mhNERERERERERFoFFUFEREREREREpFVQEUREREREREREWgUVQURERERERESkVVARRERERERERERaBRVBRERERERERKRVUBFERERERERERFoFFUFEREREREREpFVQEUREREREREREWgUVQURERERERESkVVARRERERERERERaBRVBRERERERERKRVUBFERERERERERFoFFUFEREREREREpFVQEUREREREREREWgUVQURERERERESkVVARRERERERERERaBRVBRERERERERKRV8DgdgGwc27ZZvHgxmZmZWJbldDgiIiIiIiIizYYxhoqKCoqKinC51tPfw7QyDzzwgOnatavx+/1m1113NZ9++ul623/yySdm1113NX6/33Tr1s089NBDa7V5+eWXzQ477GB8Pp/ZYYcdzKuvvlpn/6233mr69u1rMjIyTH5+vhk8eLD56aefNinuBQsWGEAPPfTQQw899NBDDz300EMPPfRYx2PBggXrfW/dqnqCvPjii4wcOZIHH3yQvfbai0ceeYTDDz+cOXPm0Llz57Xaz507lyOOOIJzzjmHZ599ls8//5zzzjuP/Px8jjvuOACmTZvGkCFDuOmmmzjmmGN47bXXOOGEE5gyZQp77LEHAJMnT+b8889nt912IxaLcfXVVzNgwADmzJlDenr6RsWemZkJwIIFC8jKymqkV6Rx2LbN0qVLyc/PX3/FTaQZUd5KKlLeSqpRzkoqUt5KKlLeQnl5OZ06dUq+d14Xyxhjmigmx+2xxx7suuuuPPTQQ8ltO+ywA0cffTRjx45dq/3ll1/Om2++yY8//pjcNnz4cL799lumTZsGwJAhQygvL+e9995LtjnssMPIzc3lhRdeqDeOpUuXUlBQwOTJk9l33303Kvby8nKys7MpKytrlkWQ0tJSCgoKWu0PnKQe5a2kIuWtpBrlrKQi5a2kIuXtxr9nbjU9QSKRCNOnT+eKK66os33AgAFMnTq13mOmTZvGgAED6mw79NBDefzxx4lGo3i9XqZNm8aoUaPWajNu3Lh1xlJWVgZAmzZt1tkmHA4TDoeTz8vLy4FEctu2vc7jnGDbNsaYZheXyPoobyUVKW8l1ShnJRUpbyUVKW/Z6HtvNUWQZcuWEY/HKSwsrLO9sLCQkpKSeo8pKSmpt30sFmPZsmW0b99+nW3WdU5jDKNHj2bvvfemV69e64x37Nix3HDDDWttX7p0KaFQaJ3HOcG2bcrKyjDGtNqqo6Qe5a2kIuWtpBrlrKQi5a2kIuUtVFRUbFS7VlMEqfX3lVWMMetdbaW+9n/fvinnvOCCC/juu++YMmXKeuO88sorGT16dPJ57fim/Pz8ZjkcxrKsVj3+TFKP8lZSkfJWUo1yVlKR8lZSkfIWAoHARrVrNUWQvLw83G73Wj00SktL1+rJUatdu3b1tvd4PLRt23a9beo754UXXsibb77Jp59+SseOHdcbr9/vx+/3r7Xd5XI1y6S2LKvZxiayLspbSUXKW0k1yllJRcpbSUWtPW839r5bzavj8/no06cPEydOrLN94sSJ9O/fv95j+vXrt1b7CRMm0LdvX7xe73rbrHlOYwwXXHABr776Kh999BHdunVrjFtqcWKxGBefdhXvvzrJ6VBERERERESkBWo1PUEARo8ezdChQ+nbty/9+vXj0UcfZf78+QwfPhxIDEFZtGgRTz/9NJBYCeb+++9n9OjRnHPOOUybNo3HH3+8zqovI0aMYN999+X2229n8ODBvPHGG0yaNKnOcJfzzz+f559/njfeeIPMzMxkz5Hs7GyCwWATvgLN26+zf+ejdz7lo3c+5bBjD3Y6HBEREREREWlhWlURZMiQISxfvpwbb7yR4uJievXqxbvvvkuXLl0AKC4uZv78+cn23bp1491332XUqFE88MADFBUVce+993Lccccl2/Tv35/x48czZswYrrnmGrbaaitefPFF9thjj2Sb2iV5999//zrxPPHEE5x++ulb7oZTzE/f/+p0CCIiIiIiItKCtaoiCMB5553HeeedV+++J598cq1t++23HzNmzFjvOY8//niOP/74de6vnUxV1u/PX+c5HYKIiIiIiIi0YK1mThBp/hb+uRgAj8etwpGIiIiIiIg0OhVBpNlYPL8YgFgsTqgm7HA0IiIiIiIi0tKoCCLNxsplq5JfV6yqcC4QERERERERaZFUBJFmo2xVeb1fi4iIiIiIiDQGFUGkWQiHwoSqQ8nnZStVBBEREREREZHGpSKINAtlKxPDX7JyMgENhxEREREREZHGpyKINAvlq4e/dOzaAdBwGBEREREREWl8KoJIs1BZXglAYVE+ANWVNU6GIyIiIiIiIi2QiiDSLISqE0vitsnPBaBmjflBRERERERERBqDiiDSLNTUJIoeuXmriyBV1U6GIyIiIiIiIi2QiiDSLIRDiZ4guW1zAPUEERERERERkcanIog0C6FkT5AcQEUQERERERERaXwqgkizUDsnyF89QTQxqoiIiIiIiDQuFUGkWajtCZKZnYnH66G6SkUQERERERERaVwqgkizUFsECQR9BNMChKo0HEZEREREREQal4og0iyEahLDYQLBAGnpaVRrdRgRERERERFpZCqCSLMQqq7tCRIgIyudyvIqhyMSERERERGRlkZFEGkWaofD+AN+MrMzqCivdDgiERERERERaWlUBJFmoaZ2OEyan8zsTCrKVAQRERERERGRxqUiiDQL4ZowHq8Hj8dDZlYGkXCEcCjsdFgiIiIiIiLSgqgIIs1COBQmEPADkJmdAaB5QURERERERKRRqQgizUKoJoQ/mCiCZGSlA1C+qsLJkERERERERKSFURFEmoVwKExgdREkPTNRBKmu1DK5IiIiIiIi0nhUBJFmIVQTwb96OEx6RhoAVSqCiIiIiIiISCNSEUSahVBNKFkESVtdBKmuqnEyJBEREREREWlhVASRZiEcChNICwCQlh4ENBxGREREREREGpeKINIshGv+Wh0mTcNhREREREREZAtQEUSahVBNeK05QWqqVAQRERERERGRxqMiiDguFosRj8fxBXwApGUkhsNUVWpOEBEREREREWk8KoKI46LhKAA+nxdYPRzG5aWyQj1BREREREREpPGoCCKOi0QSRRD/6p4g4aiL7B5D+f43r5NhiYiIiIiISAvjceKi4XCYr776ij///JPq6mry8/Pp3bs33bp1cyIccVgkHAHA60sUQX6YvRLL5WVBqZeamijBoIohIiIiIiIisvmatAgydepU7rvvPl5//XUikQg5OTkEg0FWrFhBOByme/funHvuuQwfPpzMzMymDE0cFF3dE8TnTxQ75sxZntz300/L6d27nSNxiYiIiIiISMvSZMNhBg8ezPHHH0+HDh344IMPqKioYPny5SxcuJDq6mp+/fVXxowZw4cffsi2227LxIkTt0gcDz74IN26dSMQCNCnTx8+++yz9bafPHkyffr0IRAI0L17dx5++OG12rzyyiv06NEDv99Pjx49eO211+rs//TTTznyyCMpKirCsixef/31xryllBcOJXqC1M4JMnfuquS+OXOWOhGSiIiIiIiItEBNVgQZMGAAf/75J3feeSf77rsvaWlpdfZ3796dYcOG8f777zNp0qQtEsOLL77IyJEjufrqq5k5cyb77LMPhx9+OPPnz6+3/dy5czniiCPYZ599mDlzJldddRUXXXQRr7zySrLNtGnTGDJkCEOHDuXbb79l6NChnHDCCXz55ZfJNlVVVey8887cf//9W+S+Ul0ksno4jN+HMYZ588oguhKA4uJKJ0MTERERERGRFqTJhsOcf/75G922Z8+e9OzZs9FjuOuuuzjrrLM4++yzARg3bhwffPABDz30EGPHjl2r/cMPP0znzp0ZN24cADvssAPffPMNd955J8cdd1zyHIcccghXXnklAFdeeSWTJ09m3LhxvPDCCwAcfvjhHH744Y1+Py1F7eowfr+PlStD1NTE8NhlxMhm+XItkysiIiIiIiKNo1msDvPHH38we/ZsbNveYteIRCJMnz6dAQMG1Nk+YMAApk6dWu8x06ZNW6v9oYceyjfffEM0Gl1vm3WdU9YWTk6M6mXVqhAAHncMlwmrCCIiIiIiIiKNpkknRo1Go9x8883MmDGDPffckyuuuIJTTz2V//3vfwBst912vPvuu3Tt2rXRr71s2TLi8TiFhYV1thcWFlJSUlLvMSUlJfW2j8ViLFu2jPbt26+zzbrOubHC4TDhcDj5vLy8HADbtrdosaghbNvGGNPguMKhxH16fZ5kEcTnNYSjNaxYUdPs7ldahs3NWxEnKG8l1ShnJRUpbyUVKW/Z6Htv0iLIFVdcwTPPPMNRRx3F//3f//HVV1/x888/8/zzz+Nyubjpppu4+uqree6557ZYDJZl1XlujFlr24ba/337pp5zY4wdO5Ybbrhhre1Lly4lFApt1rkbm23blJWVYYzB5dr0zkVLSxOTn4ZCIRYsKAXA445jV1WxYkUNxcUluN3NotOStCCbm7ciTlDeSqpRzkoqUt5KKlLeQkVFxUa12+giyOjRozf64nfddVe9219++WWefPJJjjjiCH755Re233573nnnneR8GQUFBZxyyikbfZ1NkZeXh9vtXquHRmlp6Vo9OWq1a9eu3vYej4e2bduut826zrmxrrzyyjqveXl5OZ06dSI/P5+srKzNOndjs20by7LIz89v0A9cWjAxSW7b/LbErAAAmRk+liytxJsGfn82bdoEGzVmkc3NWxEnKG8l1ShnJRUpbyUVKW8hEAhsVLuNLoLMnDmzzvPp06cTj8fZbrvtAPjll19wu9306dNnnedYvHgxO++8MwDbbrstfr+frbfeOrl/22233exhJOvi8/no06cPEydO5JhjjklunzhxIoMHD673mH79+vHWW2/V2TZhwgT69u2L1+tNtpk4cSKjRo2q06Z///6bFa/f78fv96+13eVyNcuktiyrwbFFIzEgcc8ryxPzg2RnB4iFl+MFVq0Kk5eX3pjhigCbl7ciTlHeSqpRzkoqUt5KKmrtebux973RRZCPP/44+fVdd91FZmYmTz31FLm5uQCsXLmSM844g3322Wed54jH48niAYDH48HtdtcJuna4yZYwevRohg4dSt++fenXrx+PPvoo8+fPZ/jw4UCi98WiRYt4+umnARg+fDj3338/o0eP5pxzzmHatGk8/vjjyVVfAEaMGMG+++7L7bffzuDBg3njjTeYNGkSU6ZMSbaprKzkt99+Sz6fO3cus2bNok2bNnTu3HmL3W+qqF0i1+f3Ul5bBMkJYGKJSVFXrmxew39EREREREQkNTVoTpD//Oc/TJgwIVkAAcjNzeXmm29mwIABXHzxxes89oMPPiA7OxtIdNn58MMP+eGHHwBYtWpVQ8LZaEOGDGH58uXceOONFBcX06tXL9599126dOkCQHFxMfPnz0+279atG++++y6jRo3igQceoKioiHvvvTe5PC5A//79GT9+PGPGjOGaa65hq6224sUXX2SPPfZItvnmm2844IADks9rh7kMGzaMJ598covecyqI1C6RG/BTUZGYJDU3Nw07Vg3AihVaIUZEREREREQ2X4OKIOXl5SxZsoSePXvW2V5aWrrByUiGDRtW5/k///nPOs83d0LRDTnvvPM477zz6t1XX0Fiv/32Y8aMGes95/HHH8/xxx+/zv3777//Fu3hkuoi4b96glRWVmJZ0DYvAxNVTxARERERERFpPA0aLHTMMcdwxhln8PLLL7Nw4UIWLlzIyy+/zFlnncWxxx67zuNql3dd3yMejzf4ZiQ1hUO1RRAflZUR0tN9ZOVkJnuCLF9e7WR4IiIiIiIi0kI0qCfIww8/zCWXXMKpp55KNJoYyuDxeDjrrLO44447GjVAafmikbpFkIwML1nZmZjVRZBlyzQcRkRERERERDZfg4ogaWlpPPjgg9xxxx38/vvvGGPYeuutSU9f9woeb7755kaf/6ijjmpIWJKi1uwJUlUVISPDR1ZuFhiboB+WLVNPEBEREREREdl8DSqC1CouLqa4uJh9992XYDCIMWadc3ocffTRdZ5bllVnnow1j9OQmNaldk4Q/+qeIAUF6WTlZCa2+YyKICIiIiIiItIoGjQnyPLlyznooIPYdtttOeKIIyguLgbg7LPPXufKMGvO+zFhwgR22WUX3nvvPVatWkVZWRnvvvsuu+66K++//37D70ZSUu3qMB6fh8rKKBkZPrJzsgDwuqMsX16jiWVFRERERERkszWoCDJq1Ci8Xi/z588nLS0tuX3IkCEbVcQYOXIk99xzD4ceeihZWVlkZmZy6KGHctddd3HRRRc1JCRJYbU9QYzxYNuG9HRvsieIZcJEozbV1VEnQxQREREREZEWoEHDYSZMmMAHH3xAx44d62zfZpttmDdv3gaP//3338nOzl5re3Z2Nn/++WdDQpIUFlk9MWp09SiojAwfgbQAXp+XeDQEZFJeHiY93edckCIiIiIiIpLyGtQTpKqqqk4PkFrLli3D7/dv8PjddtuNkSNHJofRAJSUlHDxxRez++67NyQkSWGRUATLsgiFElWQtDQvlmXRNj+XSHUFAOXlESdDFBERERERkRagQUWQfffdl6effjr53LIsbNvmjjvu4IADDtjg8f/3f/9HaWkpXbp0Yeutt2brrbemc+fOFBcX8/jjjzckJElh4XAEf8BHTU0MgPR0LwD57fKoKl8JQHl52LH4REREREREpGVo0HCYO+64g/33359vvvmGSCTCZZddxuzZs1mxYgWff/75Bo/feuut+e6775g4cSI//fQTxhh69OjBwQcfvM7VZaTlioajq5fHTcz7kZb2VxHk598XkZalIoiIiIiIiIhsvgYVQXr06MF3333HQw89hNvtpqqqimOPPZbzzz+f9u3bb9Q5LMtiwIABDBgwoCEhSAsSDkfw+X3JyU9r5/7IK2yLHf0NUBFERERERERENl+DiiDz58+nU6dO3HDDDfXu69y581rbx48fz4knnrhR51+wYAHz589nr732akh4kmKikShen5fKysS8H7XDYdoUtMGOhwAVQURERERERGTzNWhOkG7durF06dK1ti9fvpxu3brVe8xDDz3E9ttvz+23386PP/641v6ysjLeffddTj75ZPr06cOKFSsaEpqkoGg0itfnSfYEqR0O0yYvFxNLFEFWrVIRRERERERERDZPg3qCGGPqnbujsrKSQCBQ7zGTJ0/m7bff5r777uOqq64iPT2dwsJCAoEAK1eupKSkhPz8fM444wx++OEHCgoKGhKapKBYJIbX600WQTIy1iiCxGuLICHH4hMREREREZGWYZOKIKNHjwYS83lcc801dZbJjcfjfPnll+yyyy7rPH7QoEEMGjSI5cuXM2XKFP78809qamrIy8ujd+/e9O7dG5erQZ1TJIVFo1EyghlUViaKIMHg6iJIfg4YG58XyspUBBEREREREZHNs0lFkJkzZwKJniDff/89Pp8vuc/n87HzzjtzySWXbPA8bdu2ZfDgwZsYqrRU0UgMr9eTnBMkK8sPQGFRojeQxx2nrEzDYURERERERGTzbFIR5OOPPwbgjDPO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PpMmTUoWQCAxz8gDDzzAgAEDNuvckloikQjeenqBrM+RR27DM898T3l5OLntzjsPpk+f9us97pBtYL9uMKsYllTCsqpEj5DubcDjgry1pxgRERERERGRFqTBM6b8/vvvjBkzhpNOOonS0lIgUdyYPXv2Bo+1bXutITQAXq8X27YbGpKkoFgkhte7abU4v9/DqFGJ1XcOPrgbb701ZIMFkFo+T2IJ2yN3gDP6Joa+tMtUAURERERERKQ1aFARZPLkyey44458+eWXvPrqq1RWVgLw3Xffcd11123w+AMPPJARI0awePHi5LZFixYxatQoDjrooIaEJCkqEong8/s2+bj99+/CSy8dx9VX701GxqYfLyIiIiIiIq1Pg4ogV1xxBTfffDMTJ07E5/vrDegBBxzAtGnTNnj8/fffT0VFBV27dmWrrbZi6623plu3blRUVHDfffc1JCRJUZFwFK+vYZNw5OWlNXI0IiIiIiIi0pI1aE6Q77//nueff36t7fn5+SxfvnyDx3fq1IkZM2YwceJEfvrpJ4wx9OjRg4MPPrgh4UgKi0YbXgQRERERERER2RQNKoLk5ORQXFxMt27d6myfOXMmHTp0WO+xsViMQCDArFmzOOSQQzjkkEMaEoK0ENFwFJ+KICIiIiIiItIEGjQc5uSTT+byyy+npKQEy7KwbZvPP/+cSy65hNNOO229x3o8Hrp06UI8Hm9QwNKyRCJRfJu4OoyIiIiIiIhIQzSoCHLLLbfQuXNnOnToQGVlJT169GCfffahf//+jBkzZoPHjxkzhiuvvJIVK1Y05PLSgkQjUbw+TWwqIiIiIiIiW16DhsN4vV6ee+45brrpJmbMmIFt2/Tu3Zttttlmo46/9957+e233ygqKqJLly6kp9ddn3TGjBkNCUtSUKII0qA0FBEREREREdkkDXr3OXr06LW2ffHFF1iWRSAQYOutt2bw4MG0adOm3uOPPvrohlxWWqBIOFJnhSERERERERGRLaVBRZCZM2cyY8YM4vE42223HcYYfv31V9xuN9tvvz0PPvggF198MVOmTKFHjx5AovfHueeeSyAQ4IwzzqBjx464XA0ajSMtSDQaw6s5QURERERERKQJNKgKMXjwYA4++GAWL17M9OnTmTFjBosWLeKQQw7hpJNOYtGiRey7776MGjUqeczo0aMpLy8HoFu3bixbtqxx7kBSljEmMRzGqyKIiIiIiIiIbHkN6glyxx13MHHiRLKyspLbsrKyuP766xkwYAAjRozg2muvZcCAAcn9RUVFvPLKKxxxxBEYY1i4cCGhUKje83fu3LkhYUmKiUVjAFodRkRERERERJpEg4ogZWVllJaWJoe61Fq6dGmyt0dOTg6RSCS5b8yYMVx44YVccMEFWJbFbrvtttZ5jTFYlqXlc1uJSDgKoJ4gIiIiIiIi0iQaVAQZPHgwZ555Jv/5z3/YbbfdsCyLr776iksuuSQ56elXX33Ftttumzzm3HPP5aSTTmLevHnstNNOTJo0ibZt2zbKTUhqqi2SaU4QERERERERaQoNKoI88sgjjBo1ihNPPJFYLDGkwePxMGzYMO6++24Att9+e/773//WOS4zM5NevXrxxBNPsNdee+H3+zczfEll0cjq4TA+FUFERERERERky2tQESQjI4PHHnuMu+++mz/++ANjDFtttRUZGRnJNrvssss6jx82bFhDListTLS2J4iKICIiIiIiItIEGlQEqZWRkcFOO+3UWLFIK6OeICIiIiIiItKUGrRErkhjqJ0TxKMiiIiIiIiIiDQBFUHEMeoJIiIiIiIiIk3J8SLI559/TjgcdjoMcUDtnCA+v8/hSERERERERKQ1cLwIcvjhh7No0SKnwxAH1PYE8Xo3a2oaERERERERkY3ieBHEGON0COKQ2jlBvOoJIiIiIiIiIk3A8SKItF6aE0RERERERESakuNFkEceeYTCwkKnwxAHhEOJuWB8fhVBREREREREZMtzfDKGk08+2ekQxCGh6hAAgbSgw5GIiIiIiIhIa+B4TxBpvUI1iSJIMOh3OBIRERERERFpDVQEEceEahLDYYLqCSIiIiIiIiJNQEUQcUxNdQ0AgTT1BBEREREREZEtT0UQcUxtT5BAMOBwJCIiIiIiItIatJoiyMqVKxk6dCjZ2dlkZ2czdOhQVq1atd5jjDFcf/31FBUVEQwG2X///Zk9e3adNuFwmAsvvJC8vDzS09M56qijWLhwYZ02t9xyC/379yctLY2cnJxGvrPUlZwYVUUQERERERERaQKtpghy8sknM2vWLN5//33ef/99Zs2axdChQ9d7zL///W/uuusu7r//fr7++mvatWvHIYccQkVFRbLNyJEjee211xg/fjxTpkyhsrKSQYMGEY/Hk20ikQj/+Mc/+Ne//rXF7i8V1U6MqiKIiIiIiIiINAXHl8htCj/++CPvv/8+X3zxBXvssQcAjz32GP369ePnn39mu+22W+sYYwzjxo3j6quv5thjjwXgqaeeorCwkOeff55//vOflJWV8fjjj/PMM89w8MEHA/Dss8/SqVMnJk2axKGHHgrADTfcAMCTTz7ZBHfbPHzz+Uxmz/iRYReuewnkmuQSuZoTRERERERERLa8VlEEmTZtGtnZ2ckCCMCee+5JdnY2U6dOrbcIMnfuXEpKShgwYEBym9/vZ7/99mPq1Kn885//ZPr06USj0TptioqK6NWrF1OnTk0WQRoiHA4TDoeTz8vLywGwbRvbtht83i3Btm2MMXXiev3Zt3nnfx8waMhh5Obl1HtcTXUIr8+LZVnN7p6k5asvb0WaO+WtpBrlrKQi5a2kIuUtG33vraIIUlJSQkFBwVrbCwoKKCkpWecxAIWFhXW2FxYWMm/evGQbn89Hbm7uWm3Wdd6NNXbs2GQPkjUtXbqUUCi0WedubLZtU1ZWhjEGlysxwqrb9p0B+HTSFPoduHu9x5WvKscf8FNaWtpksYrUqi9vRZo75a2kGuWspCLlraQi5S11pq1Yn5Quglx//fX1FgrW9PXXXwNgWdZa+4wx9W5f09/3b8wxG9NmQ6688kpGjx6dfF5eXk6nTp3Iz88nKytrs87d2GzbxrIs8vPzkz9w+x+2L/ff+Bizv/mJwScOqve4eNwmPSNYb4FKZEurL29FmjvlraQa5aykIuWtpCLlLQQCGzfXZEoXQS644AJOPPHE9bbp2rUr3333HUuWLFlr39KlS9fq6VGrXbt2QKK3R/v27ZPbS0tLk8e0a9eOSCTCypUr6/QGKS0tpX///pt8P2vy+/34/WvPleFyuZplUluWVSe2rbbrRuetOvLFJ1+vM95QdYhgWrBZ3o+0Dn/PW5FUoLyVVKOclVSkvJVU1NrzdmPvO6Vfnby8PLbffvv1PgKBAP369aOsrIyvvvoqeeyXX35JWVnZOosV3bp1o127dkycODG5LRKJMHny5OQxffr0wev11mlTXFzMDz/8sNlFkJagZ+8dWDSvmFUryurdX1NdQzBdK8OIiIiIiIhI00jpIsjG2mGHHTjssMM455xz+OKLL/jiiy8455xzGDRoUJ1JUbfffntee+01IFFFGzlyJLfeeiuvvfYaP/zwA6effjppaWmcfHJixZPs7GzOOussLr74Yj788ENmzpzJqaeeyo477phcLQZg/vz5zJo1i/nz5xOPx5k1axazZs2isrKyaV+IJrbL7jsC8PjdT9e7v6Y6RCAt2JQhiYiIiIiISCvWKoogAM899xw77rgjAwYMYMCAAey0004888wzddr8/PPPlJX91WvhsssuY+TIkZx33nn07duXRYsWMWHCBDIzM5Nt7r77bo4++mhOOOEE9tprL9LS0njrrbdwu93JNtdeey29e/fmuuuuo7Kykt69e9O7d2+++eabLX/jDjp22FEUdW7P+69MIhqNrbW/pjpEMKjlcUVERERERKRpWMYY43QQsmHl5eVkZ2dTVlbWLCdGLS0tpaCgYK1xWP/9z1M8cOtjjLz+PIZdeHJyuzGGPvn7csDAffnPU7c0dcgi681bkeZKeSupRjkrqUh5K6lIebvx75lb56sjTebEc44nIyuDd176oM72cCiCMYZgmuYEERERERERkaahIohsURlZ6fTsvT0L/1zMmp2OaqprAAhqThARERERERFpIiqCyBbXsVsHaqpqWLZkeXLbquWJuVeyczPXdZiIiIiIiIhIo1IRRLa4nr13AGDKpC+S22oLInmFeY7EJCIiIiIiIq2PiiCyxR1wxD6kpQd5/K6nktuWliwDIK+wrVNhiYiIiIiISCujIohscTltstnv8L1ZNK+YmqrEXCDLlqwugrRTEURERERERESahoog0iQ6du0AwMJ5iwEoXlgKQPsOhY7FJCIiIiIiIq2LiiDSJLps1QmAGVNnAbB4/mI8Xo96goiIiIiIiEiTURFEmsReB++J2+3mzjH3UVVRzeL5JbTvWIjb7XY6NBEREREREWklVASRJpHTJpvDjz+EWDTGpx9MYfnSFZoUVURERERERJqUiiDSZHbZY0cArvrnjVSsqiArJ8vhiERERERERKQ1URFEmkxaRlry61gsTlZOpoPRiIiIiIiISGujIog0me16bVPnuYogIiIiIiIi0pRUBJEm0327rpx98bDk80wVQURERERERKQJqQgiTergo/ZPfp2TqzlBREREREREpOmoCCJNatueW3P48YfQbduuHHTk/k6HIyIiIiIiIq2Ix+kApHWxLItbH7nO6TBERERERESkFVJPEBERERERERFpFVQEEREREREREZFWQUUQEREREREREWkVVAQRERERERERkVZBRRARERERERERaRW0OkyKMMYAUF5e7nAka7Ntm4qKCgKBAC6X6mqSGpS3koqUt5JqlLOSipS3koqUt3+9V65977wuKoKkiIqKCgA6derkcCQiIiIiIiIizVNFRQXZ2dnr3G+ZDZVJpFmwbZvFixeTmZmJZVlOh1NHeXk5nTp1YsGCBWRlZTkdjshGUd5KKlLeSqpRzkoqUt5KKlLeJnqAVFRUUFRUtN7eMOoJkiJcLhcdO3Z0Ooz1ysrKarU/cJK6lLeSipS3kmqUs5KKlLeSilp73q6vB0it1jlYSERERERERERaHRVBRERERERERKRVUBFENpvf7+e6667D7/c7HYrIRlPeSipS3kqqUc5KKlLeSipS3m48TYwqIiIiIiIiIq2CeoKIiIiIiIiISKugIoiIiIiIiIiItAoqgoiIiIiIiIhIq6AiiGyWBx98kG7duhEIBOjTpw+fffaZ0yFJKzF27Fh22203MjMzKSgo4Oijj+bnn3+u08YYw/XXX09RURHBYJD999+f2bNn12kTDoe58MILycvLIz09naOOOoqFCxfWabNy5UqGDh1KdnY22dnZDB06lFWrVm3pW5RWYOzYsViWxciRI5PblLfSHC1atIhTTz2Vtm3bkpaWxi677ML06dOT+5W30pzEYjHGjBlDt27dCAaDdO/enRtvvBHbtpNtlLPitE8//ZQjjzySoqIiLMvi9ddfr7O/KXN0/vz5HHnkkaSnp5OXl8dFF11EJBLZErfdPBiRBho/frzxer3mscceM3PmzDEjRoww6enpZt68eU6HJq3AoYceap544gnzww8/mFmzZpmBAweazp07m8rKymSb2267zWRmZppXXnnFfP/992bIkCGmffv2pry8PNlm+PDhpkOHDmbixIlmxowZ5oADDjA777yzicViyTaHHXaY6dWrl5k6daqZOnWq6dWrlxk0aFCT3q+0PF999ZXp2rWr2WmnncyIESOS25W30tysWLHCdOnSxZx++unmyy+/NHPnzjWTJk0yv/32W7KN8laak5tvvtm0bdvWvP3222bu3LnmpZdeMhkZGWbcuHHJNspZcdq77/5/e/ceFFX5xgH8uyywoksrF2F3BVHDwlwbuQyFEqCSNmLqMKkRCQjaWGKYk2I5WeOomZcstTBL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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "worst EQ departure from the frozen table: 0.001914 dB (test allows 0.01)\n" + ] + } + ], + "source": [ + "eq_fc = [198.425, 250, 314.98, 400, 500, 630, 793,\n", + " 1000, 1259, 1587, 2000, 2500, 3150, 4000]\n", + "worst = plot_generated_vs_reference(\n", + " ['eq_band_%d' % b for b in range(14)],\n", + " ['%g Hz' % f for f in eq_fc],\n", + " 'Equaliser cells at 192 kHz: generated vs frozen',\n", + " plt.cm.turbo)\n", + "print('worst EQ departure from the frozen table: %.6f dB (test allows 0.01)' % worst)\n" + ] + }, + { + "cell_type": "markdown", + "id": "8401ac7c", + "metadata": {}, + "source": [ + "## Flat equaliser reconstruction\n", + "\n", + "`BandEQ` sums the 14 cells with alternating sign. With every cell set to 100 the\n", + "sum should come out level \u2014 this only works if each cell keeps its designed\n", + "shape and peak gain, so it is the sharpest check on the redesign.\n", + "\n", + "Note the sum sits near +4 dB rather than 0 dB. That is how the equaliser has\n", + "always behaved; the overlapping cells add up to more than unity.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "44e42489", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-28T10:57:21.259796Z", + "iopub.status.busy": "2026-07-28T10:57:21.259533Z", + "iopub.status.idle": "2026-07-28T10:57:21.503707Z", + "shell.execute_reply": "2026-07-28T10:57:21.502878Z" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABEEAAAHpCAYAAABtFiLwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hTdRvG8e9J0j0ZXZRCS1lll03ZyN7LBYogIiCIiChOQERQGYILVJChyBKQvQTK3hvKhlJWKbMLOpKc949IXiqrLSmn4/lcVy6TkzPuc5JI8+Q3FFVVVYQQQgghhBBCCCFyOZ3WAYQQQgghhBBCCCGeBSmCCCGEEEIIIYQQIk+QIogQQgghhBBCCCHyBCmCCCGEEEIIIYQQIk+QIogQQgghhBBCCCHyBCmCCCGEEEIIIYQQIk+QIogQQgghhBBCCCHyBCmCCCGEEEIIIYQQIk+QIogQQgghhBBCCCHyBCmCCCGEEMD06dNRFOWht8GDB1vXCwwMpHv37pk6xqhRo/j7779tEzibGD58OIqipFnWoEEDGjRooE2gPObPP/9kwoQJmmZYsWIFw4cPf+hzT/N5EUIIIbKCQesAQgghRHYybdo0SpcunWZZoUKFbLLvUaNG0blzZ9q3b2+T/WVXP/30k9YR8ow///yTI0eOMHDgQM0yrFixgh9//PGhhZBFixbh7u7+7EMJIYQQjyBFECGEEOI+5cqVo2rVqlrHyNHKlCnzTI9nMpkwGo04ODika31VVUlKSsLJySmLk2UvGb1OthAaGvrMjiWEEEKkh3SHEUIIIZ5CUlIS7733HpUqVcLDw4P8+fNTq1YtFi9enGY9RVFITExkxowZ1m42T+oykpKSwsiRIyldujQODg54eXnRo0cPrl27lma91NRUPvjgA3x9fXF2dqZOnTrs2rXrga4ID+u6Av/vChQZGWldNnfuXJo2bYqfnx9OTk6EhITw4YcfkpiY+MRr8rDuMJMmTaJixYq4urri5uZG6dKl+fjjj9OsEx0dTe/evSlcuDD29vYEBQXx+eefYzQaretERkaiKArffPMNI0eOJCgoCAcHBzZs2PDIPIqi0L9/fyZPnkxISAgODg7MmDEDgFOnTtGlSxe8vb1xcHAgJCSEH3/88YF93L59m/fee49ixYrh4OCAt7c3LVu25Pjx49Z1bt68yVtvvYW/vz/29vYUK1aMTz75hOTk5Ifm+f333wkJCcHZ2ZmKFSuybNmyNOtdu3aNN998k4CAAOvrX7t2bf755x/rdV6+fDnnz59P033rSdfpYa83QHh4OIqiEB4enmb5qlWreO655/Dw8MDZ2ZmQkBBGjx4NQPfu3a3X6/4M9/b9sO4wUVFRvPLKK2mu+bhx4zCbzdZ17uUfO3Ys48ePJygoCFdXV2rVqsWOHTse9VILIYQQTyQtQYQQQoj73Pu1/H4Gw6P/uUxOTubmzZsMHjwYf39/UlJS+Oeff+jYsSPTpk2jW7duAGzfvp1GjRrRsGFDPvvsM4DHdhMwm820a9eOzZs388EHHxAWFsb58+cZNmwYDRo0YM+ePdaWDL169WLmzJkMHjyYJk2acOTIETp27Eh8fHymr8OpU6do2bIlAwcOxMXFhePHj/P111+za9cu1q9fn6F9zZkzh7feeou3336bsWPHotPpOH36NBEREdZ1oqOjqV69OjqdjqFDhxIcHMz27dsZOXIkkZGRTJs2Lc0+v/vuO0qWLMnYsWNxd3enRIkSj83w999/s3nzZoYOHYqvry/e3t5EREQQFhZGkSJFGDduHL6+vqxevZoBAwZw/fp1hg0bBkB8fDx16tQhMjKSIUOGUKNGDRISEti0aRNXrlyhdOnSJCUl0bBhQ86cOcPnn39OhQoV2Lx5M6NHj+bAgQMsX748TZ7ly5eze/duRowYgaurK9988w0dOnTgxIkTFCtWDIBXX32Vffv28eWXX1KyZElu377Nvn37uHHjBmDpdvTmm29y5swZFi1a9NDzfth1io6OTvdrN3XqVHr16kX9+vWZPHky3t7enDx5kiNHjgDw2WefkZiYyF9//cX27dut2/n5+T10f9euXSMsLIyUlBS++OILAgMDWbZsGYMHD+bMmTMPdKX68ccfKV26tHXck88++4yWLVty7tw5PDw80n0eQgghhJUqhBBCCHXatGkq8NBbamqqdb2iRYuqr7322iP3YzQa1dTUVLVnz55qaGhomudcXFweu+39Zs+erQLqggUL0izfvXu3Cqg//fSTqqqqeuzYMRVQ33333TTrzZo1SwXSHG/YsGHqw/7pv3fu586de2gWs9mspqamqhs3blQB9eDBg4/dZ/369dX69etbH/fv31/19PR87Pn27t1bdXV1Vc+fP59m+dixY1VAPXr0qKqqqnru3DkVUIODg9WUlJTH7vMeQPXw8FBv3ryZZnmzZs3UwoULq7GxsWmW9+/fX3V0dLSuP2LECBVQ165d+8hjTJ48WQXUefPmpVn+9ddfq4C6Zs2aNHl8fHzUuLg467Lo6GhVp9Opo0ePti5zdXVVBw4c+Nhza9WqlVq0aNEHlj/uOj3q9d6wYYMKqBs2bFBVVVXj4+NVd3d3tU6dOqrZbH5khn79+j30faWqD35ePvzwQxVQd+7cmWa9vn37qoqiqCdOnEiTv3z58qrRaLSut2vXLhVQZ8+e/cg8QgghxONIdxghhBDiPjNnzmT37t1pbo9rCQIwf/58ateujaurKwaDATs7O6ZOncqxY8cynWPZsmV4enrSpk0bjEaj9VapUiV8fX2tXRbudQPp2rVrmu1feOGFJ+Z+nLNnz9KlSxd8fX3R6/XY2dlRv359gAyfV/Xq1bl9+zYvv/wyixcv5vr16w+ss2zZMho2bEihQoXSnG+LFi0A2LhxY5r127Zti52dXbozNGrUiHz58lkfJyUlsW7dOjp06ICzs3OaY7Zs2ZKkpCRrt4uVK1dSsmRJGjdu/Mj9r1+/HhcXFzp37pxm+b2uIOvWrUuzvGHDhri5uVkf+/j44O3tzfnz563LqlevzvTp0xk5ciQ7duwgNTU13ed7T0av0/22bdtGXFwcb7311kO7UWXG+vXrKVOmDNWrV0+zvHv37qiq+kAro1atWqHX662PK1SoAJDmOgkhhBAZIUUQIYQQ4j4hISFUrVo1ze1xFi5cyAsvvIC/vz9//PEH27dvZ/fu3bz++uskJSVlOsfVq1e5ffs29vb22NnZpblFR0dbCwn3ukb4+vqm2d5gMFCgQIFMHTshIYG6deuyc+dORo4cSXh4OLt372bhwoUA3L17N0P7e/XVV/ntt984f/48nTp1wtvbmxo1arB27do057t06dIHzrVs2bIADxROHtXd4lH+u/6NGzcwGo18//33DxyzZcuWaY557do1Chcu/Nj937hxA19f3weKBd7e3hgMBuvrdM/DXhsHB4c013bu3Lm89tprTJkyhVq1apE/f366deuWoe4sGb1O97s39syTzj0jbty48dBM92ZgetJ1ujeoa0bfg0IIIcQ9MiaIEEII8RT++OMPgoKCmDt3bpovwP8dDDOjChYsSIECBVi1atVDn7/XiuDel8To6Gj8/f2tzxuNxge+UDo6Olqz3T9DyH8LDOvXr+fy5cuEh4dbW3+AZXDQzOrRowc9evQgMTGRTZs2MWzYMFq3bs3JkycpWrQoBQsWpEKFCnz55ZcP3f6/0xRntGXCf9fPly8fer2eV199lX79+j10m6CgIAC8vLy4ePHiY/dfoEABdu7ciaqqaY4VExOD0WikYMGCGcoLlvfAhAkTmDBhAlFRUSxZsoQPP/yQmJiYR74v/uth1+n+98H9/vs+8PLyAnjiuWdEgQIFuHLlygPLL1++DJCp6ySEEEJkhBRBhBBCiKegKAr29vZpvmxGR0c/MDsMPPhL/+O0bt2aOXPmYDKZqFGjxiPXuzcLy6xZs6hSpYp1+bx58x4Y4DUwMBCAQ4cOUa1aNevypUuXPnBO9/Le7+eff05X9sdxcXGhRYsWpKSk0L59e44ePUrRokVp3bo1K1asIDg4OE23lazi7OxMw4YN2b9/PxUqVMDe3v6R67Zo0YKhQ4eyfv16GjVq9NB1nnvuOebNm8fff/9Nhw4drMtnzpxpff5pFClShP79+7Nu3Tq2bt1qXZ6R99Q9978PSpUqZV2+ZMmSNOuFhYXh4eHB5MmTeemllx5ZeLq/dcaTph1+7rnnGD16NPv27aNy5crW5TNnzkRRFBo2bJihcxFCCCEySoogQgghxFNo3bo1Cxcu5K233qJz585cuHCBL774Aj8/P06dOpVm3fLlyxMeHs7SpUvx8/PDzc0tzZfQ+7300kvMmjWLli1b8s4771C9enXs7Oy4ePEiGzZsoF27dnTo0IGQkBBeeeUVJkyYgJ2dHY0bN+bIkSPW2UDu17JlS/Lnz0/Pnj0ZMWIEBoOB6dOnc+HChTTrhYWFkS9fPvr06cOwYcOws7Nj1qxZHDx4MFPXqFevXjg5OVG7dm38/PyIjo5m9OjReHh4WIsxI0aMYO3atYSFhTFgwABKlSpFUlISkZGRrFixgsmTJ9u0WwbAxIkTqVOnDnXr1qVv374EBgYSHx/P6dOnWbp0qXV8ioEDBzJ37lzatWvHhx9+SPXq1bl79y4bN26kdevWNGzYkG7duvHjjz/y2muvERkZSfny5dmyZQujRo2iZcuWjx1P5GFiY2Np2LAhXbp0oXTp0ri5ubF7925WrVpFx44dreuVL1+ehQsXMmnSJKpUqYJOp3tiF65q1apRqlQpBg8ejNFoJF++fCxatIgtW7akWc/V1ZVx48bxxhtv0LhxY3r16oWPjw+nT5/m4MGD/PDDD9YMAF9//TUtWrRAr9c/srD07rvvMnPmTFq1asWIESMoWrQoy5cv56effqJv376ULFkyQ9dJCCGEyDCtR2YVQgghsoN7M2bs3r37ses9bHaYr776Sg0MDFQdHBzUkJAQ9ddff33orCkHDhxQa9eurTo7O6tAmhlUHiY1NVUdO3asWrFiRdXR0VF1dXVVS5curfbu3Vs9deqUdb3k5GT1vffeU729vVVHR0e1Zs2a6vbt2x+addeuXWpYWJjq4uKi+vv7q8OGDVOnTJnywGwh27ZtU2vVqqU6OzurXl5e6htvvKHu27dPBdRp06ZZ10vP7DAzZsxQGzZsqPr4+Kj29vZqoUKF1BdeeEE9dOhQmu2uXbumDhgwQA0KClLt7OzU/Pnzq1WqVFE/+eQTNSEhQVXV/88aMmbMmMdeu/sBar9+/R763Llz59TXX39d9ff3V+3s7FQvLy81LCxMHTlyZJr1bt26pb7zzjtqkSJFVDs7O9Xb21tt1aqVevz4ces6N27cUPv06aP6+fmpBoNBLVq0qPrRRx+pSUlJ6cpz/+uVlJSk9unTR61QoYLq7u6uOjk5qaVKlVKHDRumJiYmWre5efOm2rlzZ9XT01NVFMX6WjzpOp08eVJt2rSp6u7urnp5ealvv/22unz58jSzw9yzYsUKtX79+qqLi4vq7OyslilTRv3666+tzycnJ6tvvPGG6uXlZc1w7730sPfg+fPn1S5duqgFChRQ7ezs1FKlSqljxoxRTSZTmtflUfkBddiwYQ89LyGEEOJJFFVVVQ1qL0IIIYTIYoGBgTRo0IDp06drHUUIIYQQIluQ2WGEEEIIIYQQQgiRJ0gRRAghhBBCCCGEEHmCdIcRQgghhBBCCCFEniAtQYQQQgghhBBCCJEnSBFECCGEEEIIIYQQeYJB6wDPmtls5vLly7i5uaEoitZxhBBCCCGEEEII8ZRUVSU+Pp5ChQqh0z26vUeeK4JcvnyZgIAArWMIIYQQQgghhBDCxi5cuEDhwoUf+XyeK4K4ubkBlgvj7u6ucRqRGWazmWvXruHl5fXYCp/Qhrw+T0+u4f/l9muR088vJ+XPrlmzay4hhO3J513YiryXHi4uLo6AgADrd/5HyXNFkHtdYNzd3aUIkkOZzWaSkpJwd3eXD302JK/P05Nr+H+5/Vrk9PPLSfmza9bsmksIYXvyeRe2Iu+lx3vSsBdyxYQQQgghhBBCCJEnSBFECCGEEEIIIYQQeYIUQYQQQgghhBBCCJEn5LkxQdLLZDKRmpqqdQzxEGazmdTUVJKSkqQPXDZgb28vr4MQQgghhBAiR5AiyH+oqkp0dDS3b9/WOop4BFVVMZvNxMfHP3HQG5H1dDodQUFB2Nvbax1FCCGEEEIIIR5LiiD/ca8A4u3tjbOzs3zJzoZUVcVoNGIwGOT10ZjZbOby5ctcuXKFIkWKyOshhBBCCCGEyNakCHIfk8lkLYAUKFBA6zjiEaQIkr14eXlx+fJljEYjdnZ2WscRQgghhBBCiEeSjvz3uTcGiLOzs8ZJhMg57nWDMZlMGicRQgghhBBCiMeTIshDSOsCIdJPPi9CCCGEEEKInEKKIEIIIYQQQgghhMgTpAgihBBCCCGEEEKIPEGKILmEqqq8+eab5M+fH0VROHDggNaRnonu3bvTvn37x67ToEEDBg4c+EzyaG348OFUqlRJ6xhCCCGEEEIIkS1JESSXWLVqFdOnT2fZsmVcuXKFcuXKaR0pQ3JToeLKlSt06dKFUqVKodPpHnpeqampjBgxguDgYBwdHalYsSKrVq1Ks87o0aOpVq0abm5ueHt70759e06cOPFU2cLDw1EUhdu3bz/wXGBgIBMmTHiq/QshhBBCCCFEdiZFkFzizJkz+Pn5ERYWhq+vLwbDg7Mfp6SkaJAs70lOTsbLy4tPPvmEihUrPnSdTz/9lJ9//pnvv/+eiIgI+vTpQ4cOHdi/f791nY0bN9KvXz927NjB2rVrMRqNNG3alMTExGd1KkIIIYQQQgiRq0gRJBfo3r07b7/9NlFRUSiKQmBgIGBpXdG/f38GDRpEwYIFadKkCWD5cl29enUcHBzw8/Pjww8/xGg0AhAZGYmiKA/cGjRoYD3etm3bqFevHk5OTgQEBDBgwIA0X8wDAwMZNWoUr7/+Om5ubhQpUoRffvnlsfk3btzIxIkTrceLjIzEZDLRs2dPgoKCcHJyolSpUkycOPGh+/j888/x9vbG3d2d3r17P7bgk5KSwgcffIC/vz8uLi7UqFGD8PBw6/Pnz5+nTZs25MuXDxcXF8qWLcuKFSue9DKkOf+JEyfSrVs3PDw8HrrO77//zscff0zLli0pVqwYffv2pVmzZowbN866zqpVq+jevTtly5alYsWKTJs2jaioKPbu3ZvuLOfOnaN48eL07dsXs9mc7u2mT5/+0PfB8OHD070PkT5Gk5n1x68SeydV6yhCCCGEEELkelIESafx48dTuHDhJ97atm37wLZt27ZN17bjx4/PVLaJEycyYsQIChcuzJUrV9i9e7f1uRkzZmAwGNi6dSs///wzly5domXLllSrVo2DBw8yadIkpk6dysiRIwEICAjgypUr1tv+/fspUKAA9erVA+Dw4cM0a9aMjh07cujQIebOncuWLVvo379/mkzjxo2jatWq7N+/n7feeou+ffty/PjxR+avVasWvXr1sh43ICAAs9lM4cKFmTdvHhEREQwdOpSPP/6YefPmpdl+3bp1HDt2jA0bNjB79mwWLVrE559//sjr1aNHD7Zu3cqcOXM4dOgQzz//PM2bN+fUqVMA9OvXj+TkZDZt2sThw4f5+uuvcXV1zfgL8xjJyck4OjqmWebk5MSWLVseuU1sbCwA+fPnT9cxjhw5Qu3atXn++eeZNGkSOl36P+4vvvhimvfB7NmzMRgM1K5dO937EE924sQJRo39hmJ/1mXOd++TkGzUOpIQQgghhBC52oN9JsRDxcXFcenSpSeuFxAQ8MCya9eupWvbuLi4TGXz8PDAzc0NvV6Pr69vmueKFy/ON998Y338ySefEBAQwA8//ICiKJQuXZrLly8zZMgQhg4dmmYfSUlJtG/fnlq1allbAIwZM4YuXbpYx7koUaIE3333HfXr12fSpEnWL/YtW7bkrbfeAmDIkCF8++23hIeHU7p06Yfmt7e3x9nZOU1+vV6fppgRFBTEtm3bmD9/Ph07drQut7e357fffsPZ2ZmyZcsyYsQI3n//fb744osHvvifOXOG2bNnc/HiRQoVKgTA4MGDWbVqFdOmTWPUqFFERUXRqVMnypcvD0CxYsXS/2KkU7NmzRg/fjz16tUjODiYdevWsXjxYkwm00PXV1WVQYMGUadOnXSN97J9+3Zat27NRx99xODBgx94vnDhwg8su3PnjvW+k5MTTk5OgOWa9e/fn1GjRllbE4mnFxcXR68hw/m74iby6xLonTSN76eVpH/vvlpHE0IIIYQQIteSIkg6ubu74+/v/8T1vLy8HrosPdu6u7tn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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ripple, frozen @192k : 0.814 dB peak to peak\n", + "ripple, generated @192k : 0.814 dB peak to peak\n", + "ripple, generated @176k : 0.891 dB peak to peak\n", + "max |generated - frozen| at 192 kHz: 0.0008 dB\n" + ] + } + ], + "source": [ + "f_gen192, g_gen192 = load_sweep('build/filtercmp_eq_flatsum_192000_gen.txt')\n", + "f_ref192, g_ref192 = load_sweep('build/filtercmp_eq_flatsum_192000_ref.txt')\n", + "f_gen176, g_gen176 = load_sweep('build/filtercmp_eq_flatsum_176400_gen.txt')\n", + "\n", + "plt.figure(figsize=(11, 5))\n", + "plt.semilogx(f_ref192, g_ref192, 'k--', lw=2.0, label='frozen tables, 192 kHz')\n", + "plt.semilogx(f_gen192, g_gen192, lw=1.5, label='generated, 192 kHz')\n", + "plt.semilogx(f_gen176, g_gen176, lw=1.5, label='generated, 176.4 kHz')\n", + "plt.xlabel('frequency (Hz)')\n", + "plt.ylabel('summed gain (dB)')\n", + "plt.title('Flat equaliser reconstruction')\n", + "plt.grid(alpha=0.3, which='both')\n", + "plt.legend()\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "print('ripple, frozen @192k : %.3f dB peak to peak' % np.ptp(g_ref192))\n", + "print('ripple, generated @192k : %.3f dB peak to peak' % np.ptp(g_gen192))\n", + "print('ripple, generated @176k : %.3f dB peak to peak' % np.ptp(g_gen176))\n", + "print('max |generated - frozen| at 192 kHz: %.4f dB' % np.max(np.abs(g_gen192 - g_ref192)))\n" + ] + }, + { + "cell_type": "markdown", + "id": "d5b21d79", + "metadata": {}, + "source": [ + "## Every generated stage, at both rates\n", + "\n", + "`filtercmp_rate_summary.txt` measures a characteristic frequency of every\n", + "generated stage at 192 kHz and 176.4 kHz. Before this work the CW and EQ rows\n", + "read 0.9187.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "52ccf5a2", + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-28T10:57:21.506556Z", + "iopub.status.busy": "2026-07-28T10:57:21.506300Z", + "iopub.status.idle": "2026-07-28T10:57:21.925454Z", + "shell.execute_reply": "2026-07-28T10:57:21.924716Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CW_audio_840_minus6dB 850.5 -> 850.4 Hz ratio 0.9999\n", + "CW_audio_1080_minus6dB 1093.4 -> 1093.3 Hz ratio 0.9999\n", + "CW_audio_1320_minus6dB 1336.3 -> 1336.0 Hz ratio 0.9998\n", + "CW_audio_1800_minus6dB 1821.7 -> 1821.1 Hz ratio 0.9997\n", + "CW_audio_2000_minus6dB 2064.4 -> 2063.5 Hz ratio 0.9996\n", + "EQ_band0_198_peak 198.4 -> 198.4 Hz ratio 1.0000\n", + "EQ_band1_250_peak 250.0 -> 250.0 Hz ratio 1.0000\n", + "EQ_band2_315_peak 315.0 -> 315.0 Hz ratio 1.0000\n", + "EQ_band3_400_peak 400.0 -> 400.0 Hz ratio 1.0000\n", + "EQ_band4_500_peak 500.0 -> 500.0 Hz ratio 1.0000\n", + "EQ_band5_630_peak 630.0 -> 630.0 Hz ratio 1.0000\n", + "EQ_band6_793_peak 793.0 -> 793.0 Hz ratio 1.0000\n", + "EQ_band7_1000_peak 1000.0 -> 1000.0 Hz ratio 1.0000\n", + "EQ_band8_1259_peak 1259.0 -> 1259.0 Hz ratio 1.0000\n", + "EQ_band9_1587_peak 1587.0 -> 1587.0 Hz ratio 1.0000\n", + "EQ_band10_2000_peak 2000.0 -> 2000.0 Hz ratio 1.0000\n", + "EQ_band11_2500_peak 2500.0 -> 2500.0 Hz ratio 1.0000\n", + "EQ_band12_3150_peak 3150.0 -> 3150.0 Hz ratio 1.0000\n", + "EQ_band13_4000_peak 4000.0 -> 4000.0 Hz ratio 1.0000\n", + "TX_audio_bandwidth_minus3dB 2776.1 -> 2797.5 Hz ratio 1.0077\n", + "CW_decode_FIR_minus6dB 1748.0 -> 1748.1 Hz ratio 1.0000\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABEEAAAKyCAYAAAA6t8BZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeXxOZ/7/8dcdkUUQEVupiCUkskiCRNQSpEUs7YygqKI6RlX9Oi1jmWpFW2vpd5rqqNFqxVJbUao61qI0tiSqlAZBETSWUJGInN8fxhm3rCp6S/N+Ph7n8ZBznes6n3Ou+6S9P7mu61gMwzAQEREREREREfmDs7N1ACIiIiIiIiIivwclQURERERERESkRFASRERERERERERKBCVBRERERERERKREUBJEREREREREREoEJUFEREREREREpERQEkRERERERERESgQlQURERERERESkRFASRERERERERERKBCVBRETkgdq3bx8DBgygdu3aODk5UbZsWYKDg5kyZQoXLlwwj/P09KRz5842jPS3++CDD/jkk08eWPsWi4Vx48bdU501a9bkWcfT05P+/fvfd1wAmZmZDB48mEceeYRSpUoRGBhYJO1K0bl27Rrjxo1j8+bNOco++eQTLBYLycnJv3tcxV1+z5jFYmHo0KG/b0C/0YP+/ZWf/v37U7ZsWZucW0RKLntbByAiIn9c//73vxkyZAgNGjRgxIgRNGzYkBs3brB7925mzpzJjh07WL58ua3DvG8ffPABlSpVKrLEwt127NjBo48+ek911qxZw4wZM3L9krZ8+XLKly9fJLH961//4sMPPyQmJobGjRvrC81D6Nq1a0RHRwMQHh5uVdapUyd27NjBI488YoPIirf8nrHi5EH//hIRedgoCSIiIg/Ejh07eOGFF3j88cdZsWIFjo6OZtnjjz/Oq6++ytq1a3/XmG7evElWVpZVLA8rwzC4fv06zs7ONGvWrEjbDgoKKrK29u/fj7Ozc4F/9b7zeuT+3LhxA4vFgr39/f9vXOXKlalcuXIRRPX70Ocof7o/IiIF03QYERF5ICZMmIDFYmHWrFm5Jh0cHBzo2rVrjv1r164lODgYZ2dnvL29+fjjj63Kz58/z5AhQ2jYsCFly5alSpUqtG3blq1bt1odl5ycjMViYcqUKbz11lvUrl0bR0dHNm3axPXr13n11VcJDAzE1dWVihUrEhYWxsqVK3PEk52dTUxMDIGBgTg7O1OhQgWaNWvGF198AdyaWvLDDz/wzTffYLFYsFgseHp6mvXT0tIYPnw4tWvXxsHBgRo1avDyyy/z66+/Wp3n9vD5mTNn4uPjg6OjI59++qlZdudfm69du2a26eTkRMWKFWnSpAkLFy4Ebg0xnzFjhln39nZ7ykNu02EuXbrEq6++Sp06dXB0dKRKlSpERkby448/5rgnd8Y8e/Zs0tPTzXPcHlaf3/X89NNP9O7dmypVquDo6IiPj48Z751+/PFHOnToQJkyZahUqRKDBw9m1apVWCwWq6kdeU3vCQ8PzzHy4V77IzY2Fh8fH8qUKUOjRo1YvXp1rnH26tWLqlWr4ujoiIeHB88++ywZGRkkJydjb2/PxIkTc9TbsmULFouFJUuW5HmPN2/ejMViITY2lldffZUaNWrg6OhIUlJSoZ6F5ORkM8kRHR1t9tPt+5XXdJiPP/6YRo0amZ+vP/3pTxw8eDDPOG8r7PMJkJGRwfjx4/Hx8cHJyQl3d3fatGnD9u3bzWPy+xxt27aNdu3aUa5cOcqUKUPz5s358ssvrc5R0LMCcPToUZ5++mmqV6+Oo6MjVatWpV27diQkJOR5nQU9Y7cV5vNT2OchN/ndn+joaEJDQ6lYsSLly5cnODiYjz76CMMwzPpF9fsrL2vXrqVdu3a4urpSpkwZfHx8cn0WkpKSiIyMpGzZstSsWZNXX32VjIwMq2MKcz23r6lz584F/rcEbn2GwsLCcHJyokaNGowdO5bZs2fn2peLFi0iLCwMFxcXypYtS/v27YmPjy/UfRCRh4tGgoiISJG7efMmGzdupHHjxtSsWbPQ9RITE3n11VcZNWoUVatWZfbs2QwcOJB69erRqlUrAHMdkTfeeINq1apx9epVli9fTnh4OBs2bMjxpfe9996jfv36vPPOO5QvXx4vLy8yMjK4cOECw4cPp0aNGmRmZrJ+/Xr+/Oc/M2fOHJ599lmzfv/+/Zk3bx4DBw5k/PjxODg4sHfvXvN/kJcvX05UVBSurq588MEHAGbS59q1a7Ru3Zqff/6ZMWPGEBAQwA8//MDrr7/O999/z/r167FYLOa5VqxYwdatW3n99depVq0aVapUyfU+vfLKK8TGxvLWW28RFBTEr7/+yv79+0lNTQVg7Nix/PrrryxdupQdO3aY9fKa8nDlyhVatGhBcnIyI0eOJDQ0lKtXr7JlyxbOnDmDt7d3rvV27NjBm2++yaZNm9i4cSMAdevWzfd6Dhw4QPPmzfHw8GDatGlUq1aNr7/+mmHDhvHLL7/wxhtvAHD27Flat25N6dKl+eCDD6hatSrz58+/r3UW7rU/vvzyS3bt2sX48eMpW7YsU6ZM4U9/+hOHDh2iTp06wK3PbIsWLahUqRLjx4/Hy8uLM2fO8MUXX5CZmYmnpyddu3Zl5syZ/P3vf6dUqVJm+++//z7Vq1fnT3/6U4Gxjx49mrCwMGbOnImdnR1VqlTh/PnzQP7PwiOPPMLatWvp0KEDAwcO5PnnnwfId/THxIkTGTNmDL169WLixImkpqYybtw4wsLC2LVrF15eXnnWLezzmZWVRceOHdm6dSsvv/wybdu2JSsri++++44TJ07QvHlzs83cPkfffPMNjz/+OAEBAXz00Uc4OjrywQcf0KVLFxYuXEjPnj2Bgp8VgMjISG7evMmUKVPw8PDgl19+Yfv27Vy6dCnP6yzMM1aYz09hn4f85PV7Izk5mb/+9a94eHgA8N133/HSSy9x6tQpXn/9daBof3/d7aOPPuIvf/kLrVu3ZubMmVSpUoXDhw+zf/9+q+Nu3LhB165dGThwIK+++ipbtmzhzTffxNXV1YyzsNdzW2H+W7Jv3z4ef/xx6tevz6effkqZMmWYOXMm8+bNy3EtEyZM4LXXXmPAgAG89tprZGZmMnXqVFq2bMnOnTtp2LBhgf0kIg8RQ0REpIilpKQYgPH0008Xuk6tWrUMJycn4/jx4+a+9PR0o2LFisZf//rXPOtlZWUZN27cMNq1a2f86U9/MvcfO3bMAIy6desamZmZ+Z77dhsDBw40goKCzP1btmwxAOMf//hHvvV9fX2N1q1b59g/ceJEw87Ozti1a5fV/qVLlxqAsWbNGnMfYLi6uhoXLlzI0Q5gvPHGG+bPfn5+xlNPPZVvTC+++KKR13/ma9WqZfTr18/8efz48QZgrFu3Lt82c9OvXz/DxcUl15hzu5727dsbjz76qHH58mWr/UOHDjWcnJzM40eOHGlYLBYjISHB6rjHH3/cAIxNmzbleT23tW7d2qpf7rU/qlataqSlpZn7UlJSDDs7O2PixInmvrZt2xoVKlQwzp07l+P8t23atMkAjOXLl5v7Tp06Zdjb2xvR0dF51ruzbqtWrfI9zjDyfhbOnz+f4zN025w5cwzAOHbsmGEYhnHx4kXD2dnZiIyMtDruxIkThqOjo9G7d+8C4yhMTHPnzjUA49///ne+9fP6HDVr1syoUqWKceXKFatz+fn5GY8++qiRnZ1tGEbBz8ovv/xiAMb//d//3dN1GUb+z1hhPz+FfR7ykt/vjTvdvHnTuHHjhjF+/HjD3d3dvD+GUTS/v+525coVo3z58kaLFi2sznW3fv36GYCxePFiq/2RkZFGgwYNftP1FPa/Jd27dzdcXFyM8+fPW7XbsGFDq2fixIkThr29vfHSSy/luMZq1aoZPXr0yDNOEXk4aTqMiIg8NAIDA82/8gE4OTlRv359jh8/bnXczJkzCQ4OxsnJCXt7e0qXLs2GDRtyHa7ftWtXSpcunWP/kiVLeOyxxyhbtqzZxkcffWTVxldffQXAiy+++JuuZ/Xq1fj5+REYGEhWVpa5tW/fPseUDoC2bdvi5uZWYLshISF89dVXjBo1is2bN5Oenv6b4rvtq6++on79+kRERNxXO3e7+3quX7/Ohg0b+NOf/kSZMmWs7klkZCTXr1/nu+++A2DTpk34+vrSqFEjqzZ79+79m+O51/5o06YN5cqVM3+uWrUqVapUMT+P165d45tvvqFHjx75jqwIDw+nUaNGVlMcZs6cicViYdCgQYWKvVu3brnuv5dnoTB27NhBenp6julFNWvWpG3btmzYsKHANgoT01dffYWTkxPPPfdcge3d/Tn69ddfiYuLIyoqymoh3lKlStG3b19+/vlnDh06BBT8rFSsWJG6desydepUpk+fTnx8PNnZ2QXGVBgFfX7u5XnIT16/NzZu3EhERASurq6UKlWK0qVL8/rrr5Oamsq5c+cKbPden5c7bd++nbS0NIYMGZLvaBG4NaWnS5cuVvsCAgJy/N6/l+spzH9LvvnmG9q2bUulSpXMfXZ2dvTo0cOqra+//pqsrCyeffZZq/vg5ORE69at870PIvJwUhJERESKXKVKlShTpgzHjh27p3ru7u459jk6Olp9cZk+fTovvPACoaGhLFu2jO+++45du3bRoUOHXJMBuU0B+fzzz+nRowc1atRg3rx57Nixg127dvHcc89x/fp187jz589TqlQpqlWrdk/XcdvZs2fZt28fpUuXttrKlSuHYRj88ssvBcaam/fee4+RI0eyYsUK2rRpQ8WKFXnqqaf46aefflOc58+fv+e3zxTG3deTmppKVlYWMTExOe5JZGQkgHlPUlNTc73vv7Uv4N77o6DP48WLF7l582ah7t2wYcPYsGEDhw4d4saNG/z73/8mKiqq0NeT22fjXp+Fwrg9TSS381WvXt1qGkluChvT+fPnqV69OnZ2Bf+v6N2xXLx4EcMw8ozxzuso6FmxWCxs2LCB9u3bM2XKFIKDg6lcuTLDhg3jypUrBcaWn4I+P/fyPOQnt/uwc+dOnnjiCeDWW7q+/fZbdu3axT/+8Q+AQn0+7vV5udPtqVqFeTbKlCmDk5OT1T5HR0er38X3ej2F+W9JamoqVatWzXHc3fvOnj0LQNOmTXPci0WLFhWqj0Tk4aI1QUREpMiVKlWKdu3a8dVXX/Hzzz8X6RfsefPmER4ezr/+9S+r/Xl9Ycntr5Dz5s2jdu3aLFq0yKr87oX4KleuzM2bN0lJSflNrxCtVKkSzs7OuS7Id7u8oFhz4+LiQnR0NNHR0Zw9e9b8S3eXLl3yXcg0L5UrV+bnn3++53oFuft63NzczL/W5zW6pnbt2sCtLzEpKSk5ynPb5+TklKPv4NYXyDvv8b32R0EqVqxIqVKlCnXvevfuzciRI5kxYwbNmjUjJSXlnkYY5fU5vpdnoTBuf3k8c+ZMjrLTp08XeI8KG1PlypXZtm0b2dnZBSZCcvsc2dnZ5Rkj/K8vC/Os1KpVi48++giAw4cPs3jxYsaNG0dmZiYzZ87MN7b7cS/PQ35y+2x89tlnlC5dmtWrV1slGFasWFHo+O7nebk9Mqqofq8UxfXczd3d3Uxw3Onu3zG3r3Pp0qXUqlXrN59PRB4eGgkiIiIPxOjRozEMg7/85S9kZmbmKL9x4warVq2653YtFkuOt83s27fPanHCwrTh4OBg9eUhJSUlx9thOnbsCJDjC93d7v4L422dO3fmyJEjuLu706RJkxzbnW9h+K2qVq1K//796dWrF4cOHeLatWtmTFC4v/h27NiRw4cPm4ubPihlypShTZs2xMfHExAQkOs9uf0lvE2bNvzwww8kJiZatbFgwYIc7Xp6erJv3z6rfYcPHzanRNxW1P3h7OxM69atWbJkSYF/DXZycmLQoEF8+umnTJ8+ncDAQB577LF7Ot/dCvss3MtnISwsDGdn5xyLQ/78889s3LiRdu3aFUlMHTt25Pr16+bbhO6Fi4sLoaGhfP7551bXlJ2dzbx583j00UepX79+jnp5PSt3ql+/Pq+99hr+/v7s3bs33zju5b7m5l6eh3t1+xXKdy7Em56eTmxsbK7XUdS/v5o3b46rqyszZ87M8faWB309hdW6dWs2btxo9exmZ2fneFtT+/btsbe358iRI7nehyZNmvzmGETENjQSREREHoiwsDD+9a9/MWTIEBo3bswLL7yAr68vN27cID4+nlmzZuHn55djLnhBOnfuzJtvvskbb7xB69atOXToEOPHj6d27dpkZWUVuo3PP/+cIUOGEBUVxcmTJ3nzzTd55JFHrKaUtGzZkr59+/LWW29x9uxZOnfujKOjI/Hx8ZQpU4aXXnoJAH9/fz777DMWLVpEnTp1cHJywt/fn5dffplly5bRqlUr/va3vxEQEEB2djYnTpzgP//5D6+++iqhoaH3dP0AoaGhdO7cmYCAANzc3Dh48CCxsbGEhYVRpkwZMyaAyZMn07FjR0qVKkVAQAAODg452nv55ZdZtGgRTz75JKNGjSIkJIT09HS++eYbOnfuTJs2be45xrz885//pEWLFrRs2ZIXXngBT09Prly5QlJSEqtWrTITMS+//DIff/wxnTp14q233jLfDpPbSJe+ffvyzDPPMGTIELp168bx48eZMmVKjnU6HkR/TJ8+nRYtWhAaGsqoUaOoV68eZ8+e5YsvvuDDDz+0WhNiyJAhTJkyhT179jB79uzfcPesFfZZKFeuHLVq1WLlypW0a9eOihUrUqlSpVy/xFaoUIGxY8cyZswYnn32WXr16kVqairR0dE4OTkV+LaSwsbUq1cv5syZw+DBgzl06BBt2rQhOzubuLg4fHx8ePrpp/M9z8SJE3n88cdp06YNw4cPx8HBgQ8++ID9+/ezcOFCM8FZ0LOyb98+hg4dSvfu3fHy8sLBwYGNGzeyb98+Ro0alW8M9/KM5aWwz8O96tSpE9OnT6d3794MGjSI1NRU3nnnnVxfV/4gfn+VLVuWadOm8fzzzxMREcFf/vIXqlatSlJSEomJibz//vsP7HoK6x//+AerVq2iXbt2/OMf/8DZ2ZmZM2ear/+9PULJ09OT8ePH849//IOjR4/SoUMH3NzcOHv2LDt37jRHG4lIMWLLVVlFROSPLyEhwejXr5/h4eFhODg4GC4uLkZQUJDx+uuvW71Ro1atWkanTp1y1L/7DR8ZGRnG8OHDjRo1ahhOTk5GcHCwsWLFCqNfv35GrVq1zONuvx1m6tSpucY1adIkw9PT03B0dDR8fHyMf//738Ybb7yR420PN2/eNN59913Dz8/PcHBwMFxdXY2wsDBj1apV5jHJycnGE088YZQrV84ArOK4evWq8dprrxkNGjQw6/v7+xt/+9vfjJSUFPM4wHjxxRdzjZW73uwxatQoo0mTJoabm5vh6Oho1KlTx/jb3/5m/PLLL1b36fnnnzcqV65sWCwWq7cd5PY2lYsXLxr/7//9P8PDw8MoXbq0UaVKFaNTp07Gjz/+mGtMt+X3dpi8rufYsWPGc889Z9SoUcMoXbq0UblyZaN58+bGW2+9ZXXcgQMHjMcff9xwcnIyKlasaAwcONBYuXJljrfDZGdnG1OmTDHq1KljODk5GU2aNDE2btyY47NjGPffH7nduwMHDhjdu3c33N3dDQcHB8PDw8Po37+/cf369Rz1w8PDjYoVKxrXrl3L9d7c7fbbYZYsWZKjrLDPgmEYxvr1642goCDD0dHRAMxruPvtMLfNnj3bCAgIMO/Rk08+afzwww8FxnsvMaWnpxuvv/664eXlZTg4OBju7u5G27Ztje3bt5vH5Pc52rp1q9G2bVvDxcXFcHZ2Npo1a2b1XBpGwc/K2bNnjf79+xve3t6Gi4uLUbZsWSMgIMB49913jaysrAKvNa9n7F4+P4V9HnKT3/35+OOPjQYNGpjXPXHiROOjjz7K0d9F8fsrL2vWrDFat25tuLi4GGXKlDEaNmxoTJ482SzP6/dHbr+LC3s9hf1viWHc+gyFhoYajo6ORrVq1YwRI0YYkydPNgDj0qVLVseuWLHCaNOmjVG+fHnD0dHRqFWrlhEVFWWsX7++wPsgIg8Xi2EUwRg1ERERkd/B5s2badOmDZs2bSI8PNzW4dyTc+fOUatWLV566SWmTJli63BEJBdPPPEEycnJHD582NahiMgDoukwIiIiIg/Qzz//zNGjR5k6dSp2dnb8v//3/2wdkogAr7zyCkFBQdSsWZMLFy4wf/581q1bZy6UKyJ/TEqCiIiIiDxAs2fPZvz48Xh6ejJ//nxq1Khh65BEBLh58yavv/46KSkpWCwWGjZsSGxsLM8884ytQxORB0jTYURERERERESkRNArckVERERERESkRFASRERERERERERKBCVBRERERERERKRE0MKoIv+VnZ3N6dOnKVeuHBaLxdbhiIiIiIiIlCiGYXDlyhWqV6+Ond2DGbOhJIjIf50+fZqaNWvaOgwREREREZES7eTJkzz66KMPpG0lQUT+q1y5cgAcP36cChUq2DYYKVB2djbnz5+ncuXKDyxLLPfuaPfuANRZsiRHmfqseFF/FT/qs+JHfVa8hISEkJWVxe7du9VfxYSeseLn0qVL1KpVy/xu9iAoCSLyX7enwJQvX57y5cvbOBopSHZ2NtevX6d8+fL6j9pDpFzp0gC5PkPqs+JF/VX8qM+KH/VZ8VKqVCkMw1B/FSN6xoqf7OxsgAe6PIE+CSIiIiIiIiJSIigJIiIiIiIiIiIlgpIgIiIiIiIiIlIiaE0QEREpMlVHjrJ1CCIiIiIieVISREREikzZli1sHYKIiIiISJ40HUZERERERERESgQlQUREpMgc6dyZI5072zoMEREREZFcKQkiIiIiIiIiIiWCkiAiIiIiIiIiUiIoCSIiIiIiIiIiJYKSICIiIiIiIiJSIigJIiIiIiIiIiIlgr2tAxARkT+OmjNm2DoEEREREZE8KQkiIiJFxqFWLVuHICIiIiKSJ02HERGRIpN5/DiZx4/bOgwRERERkVxpJIiIiBSZky++CEDd1attHImIiIiISE4aCSIiIiIiIiIiJYKSICIiIiIiIiJSIigJIiIiIiIiIiIlgpIgIiIiIiIiIlIiKAkiIiIiIiIiIiWC3g4jIiJFRm+FEREREZGHmUaCiIiIiIiIiEiJoCSIiIgUmatbt3F16zZbhyEiIiIikitNhxERkSJzdvIkAMq21LQYEREREXn4KAkicpfA6P+Ao4utw5AC2GHg42Zw8KKFbCy2Dkf+a+bZqwC0G/VljjL1WfGi/ip+1GfFj/qseDl99gq13Z1tHYaI3CdNhxERERERERGREkFJEBEREREREREpEZQEEREREREREZESQWuCiIhIkTnj4m7rEERERERE8qQkiIiIFJnoZs/ZOgQRERERkTxpOoyIiIiIiIiIlAgPdRIkKyuL8ePH4+3tja+vL97e3gwaNIjAwEDmz59vHjdu3DhcXFzIzMw099WtW5ctW7YU+lzh4eGsXr26SOPPi8Vi4erVq7+p7rhx46hSpQqBgYHmdu7cOZKTk6lUqZJ5nKenJ97e3gQGBtKgQQMmTZpUVOEDEBgYSHp6epG2eZthGIwbN4769evj5+dHeHh4nsfe2W/9+/fn0UcfJTAwkICAAFq1asWPP/74QGIUkdx1PvotnY9+a+swRERERERy9VBPhxk4cCAXLlxgx44duLm5kZ2dzbJly6hRowabNm2iT58+AGzevBl/f3927txJixYt+Pnnnzlz5gyhoaE2voIH49lnn+Wdd96x2pecnJzjuKVLl+Ln58fp06dp2LAhbdu2JSQkpEhiSEhIKJJ2cvPee+/x/fffs3//fhwcHDhz5kyh644aNYqhQ4cCMGXKFMaOHcuSJUseVKgicpfOx7YDsLrOYzaOREREREQkp4d2JEhSUhJLlixhzpw5uLm5AWBnZ0f37t1p06YNmzdvBiAjI4Off/6ZgQMHmvs2bdpE8+bNcXR0zLP9AwcOEBoaSnBwMH369OH69etmWUpKCj169CAkJISAgABef/11s+zgwYO0b9+egIAAAgICmDlzphlvREQEAQEBBAYGsmLFCrPO559/jre3N2FhYbz55ptWcezatYu2bdvSpEkTgoODWbZs2f3ctlxVr16dBg0acPz48XyPCw8PZ8SIEbRq1YqaNWsydepUPvvsM5o3b06tWrX47LPPzGPvHM3i6elJdHQ0zZs3p3bt2rz11ltWbd45wiYqKopPPvkEgNmzZ9OwYUMCAwPx9/cnLi4OgKlTpzJ58mQcHBwAeOSRR8z6+fXbnQzD4NKlS+ZnJzcZGRmkpaVZbSIiIiIiIvLH9dAmQfbu3YuXl5fVFI/bmjVrxunTpzl58iQ7duwgNDSU1q1bs2nTJuBWEqRNmzb5tt+3b1+GDBnC3r17eemll9i1a5dZ1q9fP4YOHcrOnTvZu3cvO3fuZPny5WRlZfHkk08ycOBA9u3bx759+4iKigKgT58+9OjRg3379rFkyRIGDhzIyZMnOXfuHH/5y19YuXIlO3bssErMXLp0ib/+9a/Mnz+f3bt385///IdXXnmFlJSUfGOfO3euORVmwIABBd7LH3/8kV9++SXfaSW3nThxgs2bNxMXF8frr7/O/v372b59O0uWLOGVV17Js96lS5fYvn07O3fuZOrUqZw6darAc7366qusX7+ehIQE9u7di6+vL2lpaZw/f57ly5fTrFkzmjVrxqJFi8w6+fUbwKRJkwgMDOTRRx9l3rx5jBkzJs/zT5w4EVdXV3OrWbNmgTGLiIiIiIhI8fVQT4fJi4ODA82bN2fz5s0cOXKE8PBw6tevz/Hjx8nIyGDz5s08//zzedZPS0tj//799O3bF7iVVPH39wfg119/ZePGjZw9e9Y8/urVq/z444/Ur1+frKwsevToYZZVqlSJK1eukJCQwMCBAwHw8vKiRYsWbNu2DRcXF4KDg2nQoAEAgwYNYuTIkQBs376do0eP0rFjR7M9wzA4dOgQ1apVyzP+3KbD5CYqKgqLxcKhQ4d49913qVy5coF1unfvjp2dHdWrV6dSpUo89dRTADRu3JgzZ85w/fp1nJycctS7PTWpcuXK1KlTh2PHjlGjRo18z9W2bVueffZZunTpQseOHalfvz6pqalkZmaSnp7Od999x4kTJwgLC8PX1xcPD488++22O6fDfPzxx0RFRbF79+5czz969GirxE5aWpoSISIiIiIiIn9gD20SJDg4mJ9++onU1FTc3d1zlLdp04ZNmzZx9OhRZs2aBUDTpk1ZsmQJ586do2nTpvm2b7FYct2fnZ2NxWJh165dlC5d2qrshx9+yLWOYRi5tmmxWMyyvOoFBATc0wKu9+L2miDr16+nS5cutG3bNkfS4G53JjhKlSpl/lyqVCng1mK1hal3+zh7e3tu3rxplt05feXzzz9nz549bN68mcjISN566y2efvppypYtyzPPPAOAh4cHjz32GLt378bDwyPPfsvN008/zcCBAzl//nyuCSBHR8d8p0yJiIiIiIjIH8tDOx2mXr16dOvWjYEDB3Lp0iXgVtJg7ty5HDlyhDZt2rB+/XpOnDhB/fr1gVvrT4wfP54WLVrkSGDcqXz58vj5+ZlvmNm5cyfff/89AOXKlaNly5ZWb1M5ffo0P//8Mw0aNMDBwcFqoc1ffvmF8uXLExgYyKeffgrAkSNH+Pbbb3nssccICwsjPj6ew4cPA7fWwbitefPm/PTTT2zcuNHcl5CQYPWWm6IQERHBCy+8wGuvvVak7RZG3bp1zbU+jh07xrZt24BbyZQjR47QpEkThg8fTlRUFDt37gSgV69erF27FoCLFy+yc+dOAgIC8u233GzYsAF3d/dck2gi8mDsrVKfvVXq2zoMEREREZFcPbRJELg1naFRo0aEhobi6+uLr68v27dvx93dnaZNm3Lx4kWrN8C0bt2an376qVBrX8ydO5f333+f4OBgZs2aZdXO/PnzOXjwIP7+/vj7+9OtWzdSU1Oxt7dn5cqVzJo1C39/fwICAsyFTOfPn8+8efNo1KgR3bp1Y/bs2dSsWZMqVaowa9YsunTpQvPmzbGz+98td3NzY9WqVbz55ps0atSIhg0bMmrUKLKzs4vuJv7X2LFj2bZtG3v27CnytvMzcuRI1q1bR+PGjfnHP/5h3uebN28yYMAA/Pz8CAwMZM+ePebUlAkTJvDVV1/h5+dHy5YtGT16NMHBwUD+/Qb/WxOkUaNGvPnmmyxbtszqnovIgzXL/0lm+T9p6zBERERERHJlMfKbryFSgqSlpeHq6kqtlxeBo4utw5EC2GHg42Zw8KKFbAo/TUpsR31WvKi/ih/1WfGjPiteTs9+gdruzhw8eFB/ZCsmsrOzOXfuHFWqVFGfFRO33/B5+fJlypcv/0DOoU+CiIgUmUHfr2TQ9yttHYaIiIiISK4e2oVRi8KaNWtyfUXq6NGj6dmzpw0iKpyEhAT69++fY3+/fv3429/+dl9tF9d7IiLFQ/C5w7YOQUREREQkT3/oJEhkZCSRkZG2DuOeBQYGkpCQ8EDaLq73REREREREROR+aTqMiIiIiIiIiJQISoKIiIiIiIiISInwh54OI/JbJLzxBBUqVLB1GFIArfb9cDrS+V8AJE/qlKNMfVa8qL+KH/VZ8aM+K158V5UjKyvL1mGIyH1SEkRERIqMW69etg5BRERERCRPSoKIiEiRqdinj61DEBERERHJk8bdiYiIiIiIiEiJoCSIiIgUmZMvDOHkC0NsHYaIiIiISK40HUbkLoHR/wFHF1uHIQWww8DHzeDgRQvZWGwdjvzXzN0HAGg56sscZeqz4kX9Vfyoz4of9VnxcvrsFRxLQb0xax76/sptgXIRuUUjQURERERERESkRFASRERERERERERKBCVBRERERERERKREUBJEREREREREREoELYwqIiJFZpZfV1uHICIiIiKSJyVBRESkyOyt2sDWIYiIiIiI5EnTYURERERERESkRCh0EiQwMJDAwEAaNmyIvb29+XPPnj3ZsWMHHh4eXLx40Ty+e/fujBs37kHEbGXz5s00adIEgN27d9OnT5/f3Janpyf79+8vqtByZbFYuHr1aqGPj4yM5MiRI7mWhYeHs3r1agA++eQTDh8+bJZ98sknREVF3V+w+QgMDCQ9Pf2BtD1gwAACAgIIDAykadOmbNiwIc9j77wH/fv359FHHyUwMJCAgABatWrFjz/++EBiFJHczdwwlZkbpto6DBERERGRXBV6OkxCQgIAycnJNGnSxPz5tqeffpqXXnqJefPmMX/+fI4cOcKCBQuKMtYCNWnShPnz5/+u53zQ1qxZU6jjPvnkEypVqkT9+vUfcES33N3/Rendd9+lQoUK5nkiIiI4f/48FoulwLqjRo1i6NChAEyZMoWxY8eyZMmSBxariIiIiIiIFB9FNh3mzTffJD4+npiYGIYPH87cuXMpXbp0nsdnZWXRvn17mjRpgq+vL3369OHatWtAzlEMq1evJjw83Pz5tddeo169erRu3docBQDWo0IAYmNj8ff3JyAggE6dOnHq1KkCr2P+/Pm0atWKevXqMX36dHP/iBEjaNq0KYGBgbRu3ZqffvoJuJUUqlSpEq+//jqNGzemXr16VomLzz//HG9vb8LCwnjzzTfN/R9++CF//etfAdi3bx8Wi4V169YBMHbsWPPYO0enHDhwgNDQUIKDg+nTpw/Xr18HYPbs2ezevZthw4YRGBhonv/KlSv06tULf39/mjRpwtGjR/O99vDwcEaMGEGrVq2oWbMmU6dO5bPPPqN58+bUqlWLzz77zDz2zhEtnp6eREdH07x5c2rXrs1bb71l1eadfRQVFcUnn3xixt2wYUMCAwPx9/cnLi4OwEyAAFy6dMkq+ZHXPbibYRhcunQJNze3PK83IyODtLQ0q01ERERERET+uIosCeLo6MiHH37IsGHDGDp0KH5+fvkeX6pUKRYsWMDu3bvZv38/5cuX54MPPijwPKtWreKLL74gISGBjRs3Wk0BudP+/fsZMWIEa9euZd++fTRv3pxBgwYV2P7Zs2fZsmUL3333Hf/85z/NL+YjR45k165dJCQk8MILL/C3v/3NrJOamkrjxo3Zs2cP77//vll27tw5/vKXv7By5Up27NiBo6OjWefxxx83kx4bNmwgLCzMnPaxfv16IiIicsTWt29fhgwZwt69e3nppZfYtWsXAM8//zxNmjThvffeIyEhgcjISADi4uKYNGkS33//PREREUyePLnA6z9x4gSbN28mLi6O119/nf3797N9+3aWLFnCK6+8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X1/OnDljLL9ITk6mqKio2viurq6YzWY++OADAPLy8li/fj133XXXb3oW7dq1Y82aNcZeHl988QX+/v4A/PGPf2Tz5s388MMPALzzzjvGkpJu3bpRUlJi7JUyd+5cBgwYUOezuRLat29PZmYmlZWVnD592mqZzK5du2jXrh2PPfYYEydOZMOGDQAMHz6cb775hsrKSs6ePcuqVavo2rUrAH369GHBggVA1Z4f//rXv2q99v79+9m9e7fxMyIiV8eUkEeZEvKorcMQEREREamRg60DqMk//vEPXn75ZUJCQnBwcMBisRAaGkp0dDSenp4cP36c/v37G/3DwsKIj49n9OjRdY7r6upKYmIiwcHBeHp6Eh0dbdU+e/ZsnnjiCTw8PIiIiKBly5ZAVcXA0qVLSUhIwMnJifDwcDw9PWu8xpIlSxg7diyzZ8/GZDIxf/78OveayMvLIywsjNOnT1NSUsJtt91mVEY88cQT7Ny5k4CAAJo2bUrr1q2NpSHNmzdn/vz5DBgwgIqKCgICAozki52dHYsXLyY+Pp4zZ85w6623snjx4voffAOLiYkhOTmZzp074+Xlhdls5syZM0BVAio1NZWmTZtib2/PzJkzARg2bBiZmZn4+flhb29PaGiosQRo0qRJjB49ms6dO9O2bVv69u1rdb1ze4JYLBYqKiqYOnWqkUARkavj4A3V93MSEREREblWmCyXssZA5HesuLgYNzc32j71MTi62DocqYcdFjq5W9h53EQlv23JmTS81qd+AWpOhmjOGhfNV+OjOWt8NGeNi8sXz1NRUcHOnTuxs7vmCuqlBpWVlRw5cgQPDw/NWSNx4sQJ3N3dKSoqumLbFegnQUREGsxLGxfw0sYFtg5DRERERKRG1+RymMu1cuVKJk6cWO34hAkTGDp06FWP58iRI9xzzz3Vjvft25fXXnvtuotDRERERERExBZ+l0mQqKgooqKibB2GwcPDg+zsbFuHcc3EISIiIiIiImILWg4jIiIiIiIiItcFJUFERERERERE5Lrwu1wOI3I5sl+6hxYtWtg6DKmHdvu+NuX1fxeA/On3VWvTnDUumq/GR3PW+GjOGhe/L563dQgi0gCUBBERkQbTPiXF1iGIiIiIiNRKKWcRERERERERuS4oCSIiIg3m1Np1nFq7ztZhiIiIiIjUSMthRESkwRx+dToAN9yt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rSReXl7Yt28f5s2bh2+++abUY+vfvz/MzMwwd+5ctc/15b1DEhISSvxciYioauJKECIiIqo0WrVqBXd3d/z000/46KOPVOVjxozB4cOHVe+V/0J/7do11eN1FQoFNmzYgJEjR2rde8LCwgIHDhzApEmT4O7ujrp162LQoEH48ssvVXUePnyoelJKWRkwYAAUCgUCAwNhYGBQ7IqOom7fvo3Lly/j8uXLGpvFCiEAvNjro3HjxhpPjFF6+vQpfvnll9dKFADA2LFjsWHDBkycOFFVFh0djVGjRqneK1e4hISEYO7cuQBeJEZmzZqFe/fuwdHREXPmzFFbcREXF4eUlBSkpKRorMJRju1VfHx88PPPP6NHjx6Qy+WYPHmyzuM6cuQIAKj+21FS/vd04sQJPHz4EAMGDNC5TSIiqhpkQte/aYiIiIjKQUxMDIKDg3HhwoVSP5JW33h4eGDq1KkICAjQenzXrl347LPPVKs2SuvZs2do3rw5tm3bBi8vrzfpapUycOBAuLm5Yfbs2RXdFSIiKmNcCUJERESVSo8ePfDHH38gIyMD9vb2Fd2dSis7OxsDBgzA0KFDi61jYWGBRYsWvfY1TE1NsWnTJty5c+e126hq8vLy0KZNm2L3CiEioqqNK0GIiIiIiIiISC9wjSkRERERERER6QUmQYiIiIiIiIhILzAJQkRERERERER6gUkQIiIiIiIiItILTIIQERERERERkV5gEoSIiIiIiIiI9AKTIERERERERESkF5gEISIiIiIiIiK9wCQIEREREREREekFJkGIiIiIiIiISC/8Pwi5IYyEH9oLAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "largest departure from 1.0: 0.0077\n" + ] + } + ], + "source": [ + "rows = np.genfromtxt('build/filtercmp_rate_summary.txt', delimiter=',',\n", + " names=True, dtype=None, encoding='utf-8')\n", + "\n", + "labels = [r['stage'] for r in rows]\n", + "ratios = np.array([r['measured_ratio'] for r in rows])\n", + "\n", + "for r in rows:\n", + " print('%-34s %8.1f -> %8.1f Hz ratio %.4f'\n", + " % (r['stage'], r['f_192k_Hz'], r['f_176k_Hz'], r['measured_ratio']))\n", + "\n", + "plt.figure(figsize=(11, 7))\n", + "y = np.arange(len(labels))\n", + "plt.barh(y, ratios, color='tab:blue')\n", + "plt.axvline(1.0, color='k', lw=1.2, label='rate independent (1.0)')\n", + "plt.axvline(RATE_RATIO, color='tab:red', ls='--', lw=1.2,\n", + " label='old behaviour (%.5f)' % RATE_RATIO)\n", + "plt.yticks(y, labels, fontsize=8)\n", + "plt.xlim(0.88, 1.04)\n", + "plt.xlabel('f(176.4 kHz) / f(192 kHz)')\n", + "plt.title('Characteristic frequency ratio across the rate change')\n", + "plt.grid(alpha=0.3, axis='x')\n", + "plt.legend()\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "print('\\nlargest departure from 1.0: %.4f' % np.max(np.abs(ratios - 1.0)))\n" + ] } ], "metadata": { @@ -408,4 +809,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/code/test/reference_filters.cpp b/code/test/reference_filters.cpp new file mode 100644 index 0000000..db623a5 --- /dev/null +++ b/code/test/reference_filters.cpp @@ -0,0 +1,332 @@ +/** + * Reference copies of the filter coefficient tables Phoenix used to ship. + * + * These tables were designed offline for a single audio sample rate of 24 ksps + * (192 ksps at the ADC, decimated by 8). Production code now generates them at + * run time from an analog spec so that they land on the same frequencies at any + * sample rate - see InitializeReceiveAudioFilterCoeffs() and + * InitializeTransmitFilterCoeffs() in DSP_FIR.cpp. + * + * The originals are kept here, byte for byte, so the test suite can measure the + * generated filters against what the radio actually used to do. They are test + * fixtures: nothing in the firmware links against this file, and changing a + * value here changes what the tests consider correct. + * + * code/tools/extract_filter_prototypes.py reads this file to re-derive the + * analog design constants that DSP_FIR.cpp generates from. + */ + +#include "reference_filters.h" + +const float32_t CW_AudioFilterCoeffs1_ref[30] = { +0.001045672652953040, 0.002091345305906081, 0.001045672652953040, 1.882585857812263620, -0.886768548424075709, //0 +0.002423227458078301, 0.004846454916156603, 0.002423227458078301, 1.884529132690991200, -0.894222042523304395, //1 +0.004829291756048423, 0.009658583512096846, 0.004829291756048423, 1.889384468765871410, -0.908701635790065021, //2 +0.007653393822000297, 0.015306787644000595, 0.007653393822000297, 1.898775913252934710, -0.929389488540935838, //3 +0.010174875101599359, 0.020349750203198718, 0.010174875101599359, 1.914432845416308200, -0.955132345822705675, //4 +0.011739876965796040, 0.023479753931592080, 0.011739876965796040, 1.937529526031872560, -0.984489033895056709, //5 +}; + +const float32_t CW_AudioFilterCoeffs2_ref[30] = { +0.001708601686569496, 0.003417203373138993, 0.001708601686569496, 1.849644394115178780, -0.856478800861456779, //0 +0.003960135567320385, 0.007920271134640770, 0.003960135567320385, 1.850063728088927160, -0.865904270358208716, //1 +0.007896110863694851, 0.015792221727389703, 0.007896110863694851, 1.852618721585121530, -0.884203165039901040, //2 +0.012527469693062619, 0.025054939386125238, 0.012527469693062619, 1.860233461308907320, -0.910343340081157804, //3 +0.016688500558372531, 0.033377001116745061, 0.016688500558372531, 1.876160539268528550, -0.942914541502018699, //4 +0.019316527156182765, 0.038633054312365529, 0.019316527156182765, 1.902936487120827410, -0.980202595745558458 //5 +}; + +const float32_t CW_AudioFilterCoeffs3_ref[30] = { + 0.002526205346474786, 0.005052410692949571, 0.002526205346474786, 1.816854531214501690, -0.826959352600400766, //0 + 0.005854757343402014, 0.011709514686804028, 0.005854757343402014, 1.814915209210166580, -0.838334238583774649, //1 + 0.011674800234072332, 0.023349600468144664, 0.011674800234072332, 1.813684163704128990, -0.860383364640418424, //2 + 0.018533877701340070, 0.037067755402680140, 0.018533877701340070, 1.817698744288731130, -0.891834255094091533, //3 + 0.024728610789430342, 0.049457221578860684, 0.024728610789430342, 1.832107309882979650, -0.931021753040700895, //4 + 0.028704640967983489, 0.057409281935966977, 0.028704640967983489, 1.861191141633472320, -0.976009705505406111 //5 +}; + +const float32_t CW_AudioFilterCoeffs4_ref[30] = { +0.004619667602890411, 0.009239335205780823, 0.004619667602890411, 1.751482350458491770, -0.769961020870053470, //0 +0.010697965393132404, 0.021395930786264807, 0.010697965393132404, 1.742463879042789540, -0.785255740615319220, //1 +0.021310846818856619, 0.042621693637713239, 0.021310846818856619, 1.729488942947587930, -0.814732330223014500, //2 +0.033824238912754968, 0.067648477825509937, 0.033824238912754968, 1.721199473469051890, -0.856496429120071845, //3 +0.045209476618282299, 0.090418953236564598, 0.045209476618282299, 1.727486625620660020, -0.908324532093789383, //4 +0.052728229128958234, 0.105456458257916469, 0.052728229128958234, 1.757051114234371440, -0.967964030750204318 //5 +}; + +const float32_t CW_AudioFilterCoeffs5_ref[30] = { +0.005895699392492981, 0.011791398784985962, 0.005895699392492981, 1.718777480550920830, -0.742360278120892780, //0 +0.013642906943512292, 0.027285813887024585, 0.013642906943512292, 1.705095001540683390, -0.759666629314732500, //1 +0.027147671747232219, 0.054295343494464438, 0.027147671747232219, 1.684291091887056610, -0.792881778875985654, //2 +0.043053647931610858, 0.086107295863221717, 0.043053647931610858, 1.667486185665950420, -0.839700777392394016, //3 +0.057557746560508744, 0.115115493121017487, 0.057557746560508744, 1.667342067521431660, -0.897573053763466633, //4 +0.067256465545230904, 0.134512931090461807, 0.067256465545230904, 1.695113706470476880, -0.964139568651400491, //5 +}; + +const float32_t CW_Filter_Coeffs2_ref[64] = { + 14.11649337493100380E-6, + 26.00645116880263790E-6, + 36.68870031589199950E-6, + 13.68412619593411960E-6, +-78.97178111806820770E-6, +-270.5543007271240870E-6, +-560.2226272240251320E-6, +-895.0536349136069700E-6, +-0.001157191426061149, +-0.001175458847337361, +-766.0401423335821390E-6, + 198.2564157371532760E-6, + 0.001706652959686771, + 0.003541671954793736, + 0.005255696919539346, + 0.006219189024066382, + 0.005752477145569307, + 0.003326972676367999, +-0.001205019703557342, +-0.007414366866133686, +-0.014201761944376253, +-0.019862184667500584, +-0.022329078747153890, +-0.019572975891131203, +-0.010081421213164831, + 0.006688661092777364, + 0.030004344392895913, + 0.057792920156185819, + 0.086867005627322011, + 0.113416964025259234, + 0.133680156710101528, + 0.144647031609622528, + 0.144647031609622528, + 0.133680156710101528, + 0.113416964025259234, + 0.086867005627322011, + 0.057792920156185819, + 0.030004344392895913, + 0.006688661092777364, +-0.010081421213164831, +-0.019572975891131203, +-0.022329078747153890, +-0.019862184667500584, +-0.014201761944376253, +-0.007414366866133686, +-0.001205019703557342, + 0.003326972676367999, + 0.005752477145569307, + 0.006219189024066382, + 0.005255696919539346, + 0.003541671954793736, + 0.001706652959686771, + 198.2564157371532760E-6, +-766.0401423335821390E-6, +-0.001175458847337361, +-0.001157191426061149, +-895.0536349136069700E-6, +-560.2226272240251320E-6, +-270.5543007271240870E-6, +-78.97178111806820770E-6, + 13.68412619593411960E-6, + 36.68870031589199950E-6, + 26.00645116880263790E-6, + 14.11649337493100380E-6 +}; + +const float32_t EQ_Band1Coeffs_ref[20] = { // fc=198.425 BW=60.4, 4 pole Gaussian 1/3 octave + -0.010740354324803263, 0.000000000000000000, 0.010740354324803263, 1.977760288071182870, -0.980176703912204905, + -0.010717730957944621, 0.000000000000000000, 0.010717730957944621, 1.975162619174023470, -0.978112070242933007, + -0.012264037490550410, 0.000000000000000000, 0.012264037490550410, 1.982731279215446560, -0.984673419072692013, + -0.012192623012836674, 0.000000000000000000, 0.012192623012836674, 1.975260232124987250, -0.978939586475078283 +}; + +const float32_t EQ_Band2Coeffs_ref[20] = { // fc=250 BW=72, 4 pole Gaussian 1/3 octave + -0.012933654120114928, 0.000000000000000000, 0.012933654120114928, 1.972230388754230070, -0.976074773963381825, + -0.012902245256420676, 0.000000000000000000, 0.012902245256420676, 1.969054007796797960, -0.973704415266133827, + -0.014776626826402213, 0.000000000000000000, 0.014776626826402213, 1.978267317735213690, -0.981387851708867331, + -0.014677312538120893, 0.000000000000000000, 0.014677312538120893, 1.969044730844959010, -0.974791905478009535 +}; + +const float32_t EQ_Band3Coeffs_ref[20] = { // fc=314.98 BW=91.6, 4 pole Gaussian 1/3 octave + -0.016447315569307643, 0.000000000000000000, 0.016447315569307643, 1.963525244582037700, -0.969599143160199128, + -0.016395762539476878, 0.000000000000000000, 0.016395762539476878, 1.959197203291359160, -0.966559998362339301, + -0.018810466262295416, 0.000000000000000000, 0.018810466262295416, 1.971448267819779780, -0.976369169522296243, + -0.018647471180391263, 0.000000000000000000, 0.018647471180391263, 1.958784738577257430, -0.967908806523534615 +}; + +const float32_t EQ_Band4Coeffs_ref[20] = { // fc=400 BW=117, 4 pole Gaussian 1/3 octave + -0.021107226123143540, 0.000000000000000000, 0.021107226123143540, 1.951288180543548690, -0.961023369255779913, + -0.021020814241623810, 0.000000000000000000, 0.021020814241623810, 1.945259100240296800, -0.957088989767100218, + -0.024173376764279130, 0.000000000000000000, 0.024173376764279130, 1.961858154037972480, -0.969728310529273663, + -0.023900201823886549, 0.000000000000000000, 0.023900201823886549, 1.944062548127177160, -0.958769747478319112 +}; + +const float32_t EQ_Band5Coeffs_ref[20] = { // fc=500 BW=140, 4 pole Gaussian 1/3 octave + -0.025434986078352932, 0.000000000000000000, 0.025434986078352932, 1.937763026417761440, -0.952954919636953890, + -0.025313478543573947, 0.000000000000000000, 0.025313478543573947, 1.930070471504943040, -0.948402481405460684, + -0.029161895846570862, 0.000000000000000000, 0.029161895846570862, 1.950890858299041410, -0.963270463464314108, + -0.028777241258184545, 0.000000000000000000, 0.028777241258184545, 1.927932418232654040, -0.950564622747441468 +}; + +const float32_t EQ_Band6Coeffs_ref[20] = { // fc=630 BW=185, 4 pole Gaussian 1/3 octave + -0.034013087998603600, 0.000000000000000000, 0.034013087998603600, 1.913595532476039860, -0.937338704287993485, + -0.033779293097819303, 0.000000000000000000, 0.033779293097819303, 1.901882114205436290, -0.930895742996760700, + -0.039105400046163162, 0.000000000000000000, 0.039105400046163162, 1.932301402855366890, -0.951404949215225448, + -0.038366657914332684, 0.000000000000000000, 0.038366657914332684, 1.897086382739862300, -0.933431909185264641 +}; + +const float32_t EQ_Band7Coeffs_ref[20] = { // fc=793 BW=215, 4 pole Gaussian 1/3 octave + -0.040044359954689926, 0.000000000000000000, 0.040044359954689926, 1.888394203397243400, -0.925981923711014732, + -0.039740115320392844, 0.000000000000000000, 0.039740115320392844, 1.873614715169800600, -0.918946600083319409, + -0.046099397613266917, 0.000000000000000000, 0.046099397613266917, 1.911355633900693180, -0.942046227315978979, + -0.045135819293132796, 0.000000000000000000, 0.045135819293132796, 1.866325392810697090, -0.922355399057854686 +}; + +const float32_t EQ_Band8Coeffs_ref[20] = { // fc=1000 BW=270, 4 pole Gaussian 1/3 octave + -0.050982851195012183, 0.000000000000000000, 0.050982851195012183, 1.846967337210932980, -0.905880344373915625, + -0.050478998559837972, 0.000000000000000000, 0.050478998559837972, 1.825700576400176360, -0.896927722306557262, + -0.058875166968515282, 0.000000000000000000, 0.058875166968515282, 1.878257463261961750, -0.926279459225752610, + -0.057280286665948199, 0.000000000000000000, 0.057280286665948199, 1.812808299361427180, -0.901187303394047512 +}; + +const float32_t EQ_Band9Coeffs_ref[20] = { //1259 326 4 pole Gaussian 1/3 octave + -0.062436305349349887, 0.000000000000000000, 0.062436305349349887, 1.792407090214479080, -0.884627616406695516, + -0.061695827132588178, 0.000000000000000000, 0.061695827132588178, 1.763182364434806800, -0.874136164738794852, + -0.072306422223616690, 0.000000000000000000, 0.072306422223616690, 1.833501777433602210, -0.909146391672414067, + -0.069961857687408896, 0.000000000000000000, 0.069961857687408896, 1.742557606724184360, -0.879666957860237075 +}; + +const float32_t EQ_Band10Coeffs_ref[20] = { // Band3 //1587 380 4 pole Gaussian 1/3 octave + -0.074363508404526421, 0.000000000000000000, 0.074363508404526421, 1.717508353369523010, -0.862211252084035151, + -0.073370934748750075, 0.000000000000000000, 0.073370934748750075, 1.678381089046226960, -0.850702809396297943, + -0.086324197408935752, 0.000000000000000000, 0.086324197408935752, 1.770356988912942690, -0.890495750927825402, + -0.0831792956517105050, .000000000000000000, 0.083179295651710505, 1.647225955992196010, -0.858053843143523842 +}; + +const float32_t EQ_Band11Coeffs_ref[20] = { // 2000 480 4 pole 4 pole Gaussian 1/3 octave + -0.095836703240171059, 0.000000000000000000, 0.095836703240171059, 1.600465210710192880, -0.822735930728153764, + -0.094139069783896759, 0.000000000000000000, 0.094139069783896759, 1.542179833257436350, -0.808162140160850195, + -0.111862031820526620, 0.000000000000000000, 0.111862031820526620, 1.675022371378555920, -0.858900156431318784, + -0.106503914399111971, 0.000000000000000000, 0.106503914399111971, 1.490054957243781340, -0.817759406379379050 +}; + +const float32_t EQ_Band12Coeffs_ref[20] = { // 2500 579 4 pole Gaussian 1/3 octave + -0.117879553771682077, 0.000000000000000000, 0.117879553771682077, 1.446475829403250920, -0.781724147199137853, + -0.115383310539578524, 0.000000000000000000, 0.115383310539578524, 1.364990025835680850, -0.765170185554548188, + -0.138197674814651450, 0.000000000000000000, 0.138197674814651450, 1.546474742602351290, -0.825007082271826175, + -0.130355600849362346, 0.000000000000000000, 0.130355600849362346, 1.285783233479567580, -0.778191775359172500 +}; + +const float32_t EQ_Band13Coeffs_ref[20] = { //3150 730 4 pole Gaussian 1/3 octave + -0.150762354328435849, 0.000000000000000000, 0.150762354328435849, 1.219119807012296160, -0.720763563050070721, + -0.146749880416786549, 0.000000000000000000, 0.146749880416786549, 1.100462092025051410, -0.701580757063202998, + -0.177820152149393451, 0.000000000000000000, 0.177820152149393451, 1.358721947950491950, -0.774654638713877741, + -0.165372194155001706, 0.000000000000000000, 0.165372194155001706, 0.976661905865581326, -0.720426429558091441 +}; + +const float32_t EQ_Band14Coeffs_ref[20] = { //4000 919 4 pole Gaussian 1/3 octave + -0.191002547843707293, 0.000000000000000000, 0.191002547843707293, 0.899547452783356571, -0.644594993669154070, + -0.185284629488361025, 0.000000000000000000, 0.185284629488361025, 0.731207869008696054, -0.625298174921578354, + -0.226011710394339427, 0.000000000000000000, 0.226011710394339427, 1.091251019040685220, -0.709544302434661267, + -0.208696039181478332, 0.000000000000000000, 0.208696039181478332, 0.546857223443984242, -0.655183243751105593 +}; + +const float32_t FIR_int3_12ksps_48tap_2k7_ref[48] = { + -2.285169471669272310E-6, +-33.85457593285185850E-6, +-90.05495214272963270E-6, +-102.5104398169568180E-6, + 58.41569034528380660E-6, + 454.7904191315104190E-6, + 871.4162433760077420E-6, + 749.7881965886456330E-6, +-468.4956850258753320E-6, +-0.002616105921239791, +-0.004246098300098818, +-0.003078738032270572, + 0.002226282725246520, + 0.009889569653623405, + 0.014414561535852018, + 0.009226938890949424, +-0.007959807904613685, +-0.030336057178768423, +-0.042078062750789499, +-0.025361321875102511, + 0.028447546456669172, + 0.110201064956298028, + 0.193569812629121624, + 0.246261318040085941, + 0.246261318040085941, + 0.193569812629121624, + 0.110201064956298028, + 0.028447546456669172, +-0.025361321875102511, +-0.042078062750789499, +-0.030336057178768423, +-0.007959807904613685, + 0.009226938890949424, + 0.014414561535852018, + 0.009889569653623405, + 0.002226282725246520, +-0.003078738032270572, +-0.004246098300098818, +-0.002616105921239791, +-468.4956850258753320E-6, + 749.7881965886456330E-6, + 871.4162433760077420E-6, + 454.7904191315104190E-6, + 58.41569034528380660E-6, +-102.5104398169568180E-6, +-90.05495214272963270E-6, +-33.85457593285185850E-6, +-2.285169471669272310E-6, +}; + +const float32_t coeffs12K_8K_LPF_FIR_ref[48] = { + 292.7121266034897080E-6, +-488.3180342813371910E-6, + 645.8040165558306850E-6, +-638.1198881550581060E-6, + 309.3480302449689250E-6, + 476.3212758864665380E-6, +-0.001765071979170106, + 0.003440388897049947, +-0.005171865011484901, + 0.006413537425933360, +-0.006472731205884527, + 0.004654709846338252, +-466.7626569695900680E-6, +-0.006156455313021720, + 0.014659150255493822, +-0.023755580034778335, + 0.031441372818989677, +-0.035120434578160220, + 0.031776095760559758, +-0.017990662560858503, +-0.010720286031718308, + 0.063232870546293687, +-0.170792976311007899, + 0.622296121514180789, + 0.622296121514180789, +-0.170792976311007899, + 0.063232870546293687, +-0.010720286031718308, +-0.017990662560858503, + 0.031776095760559758, +-0.035120434578160220, + 0.031441372818989677, +-0.023755580034778335, + 0.014659150255493822, +-0.006156455313021720, +-466.7626569695900680E-6, + 0.004654709846338252, +-0.006472731205884527, + 0.006413537425933360, +-0.005171865011484901, + 0.003440388897049947, +-0.001765071979170106, + 476.3212758864665380E-6, + 309.3480302449689250E-6, +-638.1198881550581060E-6, + 645.8040165558306850E-6, +-488.3180342813371910E-6, + 292.7121266034897080E-6, + +}; diff --git a/code/test/reference_filters.h b/code/test/reference_filters.h new file mode 100644 index 0000000..7cd7825 --- /dev/null +++ b/code/test/reference_filters.h @@ -0,0 +1,52 @@ +/** + * Reference copies of the filter coefficient tables Phoenix used to ship. + * See reference_filters.cpp for what these are and why they are kept. + * + * Test-only. Not part of the firmware build. + */ + +#ifndef REFERENCE_FILTERS_H +#define REFERENCE_FILTERS_H + +#include "arm_math.h" + +/** CW audio lowpass filters: 12 pole Chebyshev type I, 0.02 dB ripple, 24 ksps. + * 6 biquad sections of {b0, b1, b2, -a1, -a2}. Labelled cutoffs, in order: + * 840, 1080, 1320, 1800 and 2000 Hz. */ +extern const float32_t CW_AudioFilterCoeffs1_ref[30]; +extern const float32_t CW_AudioFilterCoeffs2_ref[30]; +extern const float32_t CW_AudioFilterCoeffs3_ref[30]; +extern const float32_t CW_AudioFilterCoeffs4_ref[30]; +extern const float32_t CW_AudioFilterCoeffs5_ref[30]; + +/** CW decoder input filter: 64 tap Parks-McClellan lowpass, 24 ksps. + * -3 dB at 1562 Hz, -6 dB at 1749 Hz, DC gain 0.9992. */ +extern const float32_t CW_Filter_Coeffs2_ref[64]; + +/** Audio equaliser cells: 4 stagger-tuned bandpass biquads each, 24 ksps, + * peak normalised to unity. Centres run 198.425 Hz to 4000 Hz. */ +extern const float32_t EQ_Band1Coeffs_ref[20]; +extern const float32_t EQ_Band2Coeffs_ref[20]; +extern const float32_t EQ_Band3Coeffs_ref[20]; +extern const float32_t EQ_Band4Coeffs_ref[20]; +extern const float32_t EQ_Band5Coeffs_ref[20]; +extern const float32_t EQ_Band6Coeffs_ref[20]; +extern const float32_t EQ_Band7Coeffs_ref[20]; +extern const float32_t EQ_Band8Coeffs_ref[20]; +extern const float32_t EQ_Band9Coeffs_ref[20]; +extern const float32_t EQ_Band10Coeffs_ref[20]; +extern const float32_t EQ_Band11Coeffs_ref[20]; +extern const float32_t EQ_Band12Coeffs_ref[20]; +extern const float32_t EQ_Band13Coeffs_ref[20]; +extern const float32_t EQ_Band14Coeffs_ref[20]; + +/** Transmit interpolate-by-2 (12k -> 24k). This is what set the transmit audio + * bandwidth: 48 tap Kaiser lowpass, -3 dB at 2759 Hz when run at 24 ksps. */ +extern const float32_t FIR_int3_12ksps_48tap_2k7_ref[48]; + +/** Transmit decimate-by-2 (24k -> 12k). Note this table is flat to 0.425 * Fs, + * well past the 0.25 * Fs a decimate-by-2 stage needs, so it aliases. Kept for + * the before/after comparison, not as a target to reproduce. */ +extern const float32_t coeffs12K_8K_LPF_FIR_ref[48]; + +#endif // REFERENCE_FILTERS_H diff --git a/code/tools/extract_filter_prototypes.py b/code/tools/extract_filter_prototypes.py new file mode 100644 index 0000000..a20301c --- /dev/null +++ b/code/tools/extract_filter_prototypes.py @@ -0,0 +1,278 @@ +#!/usr/bin/env python3 +"""Recover the analog design specs behind the Phoenix frozen filter tables. + +The receive chain used to ship several coefficient tables that had been designed +offline at a single sample rate (24 ksps audio, i.e. 192 ksps ADC / 8). Running +the radio at any other rate scaled every corner and centre frequency by +``actual_rate / 24000``. Those tables are now generated at run time from an +analog spec instead, so they land on the same frequencies at any sample rate. + +This script is what produced those specs. It reads the reference tables in +``code/test/reference_filters.cpp`` (verbatim copies of the tables that used to +live in ``DSP_FIR.cpp``) and prints the C literals that belong in +``InitializeReceiveAudioFilterCoeffs()`` and ``InitializeTransmitFilterCoeffs()``. + +It is a developer tool, run once. Its output is pasted into DSP_FIR.cpp - it is +not part of the build. Re-run it if a reference table ever changes. + +Usage: + python3 code/tools/extract_filter_prototypes.py + +Requires numpy and scipy. +""" + +import os +import re +import sys + +import numpy as np + +try: + import scipy.signal as sig +except ImportError: # pragma: no cover - developer tool + sys.exit("scipy is required: pip install scipy") + + +REPO = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +REFERENCE_FILE = os.path.join(REPO, "code", "test", "reference_filters.cpp") + +# The audio sample rate the frozen tables were designed at: 192000 / DF, DF = 8. +DESIGN_FS_HZ = 24000.0 + +# Labelled centre frequencies of the 14 equaliser cells, in Hz. These are the +# values shown in the UI and printed in the original table comments. +EQ_BAND_FC_HZ = [198.425, 250.0, 314.98, 400.0, 500.0, 630.0, 793.0, + 1000.0, 1259.0, 1587.0, 2000.0, 2500.0, 3150.0, 4000.0] + +# Labelled cutoffs of the five CW audio filters, in Hz. Only used to annotate +# the output - the number the generator actually needs is the ripple edge. +CW_LABEL_HZ = [840.0, 1080.0, 1320.0, 1800.0, 2000.0] + +EQ_SECTIONS = 4 # biquads per equaliser cell +CW_ORDER = 12 # poles in each CW audio lowpass + + +def read_table(source, name): + """Return the floats of a `float32_t [N] = { ... };` definition.""" + match = re.search(r"float32_t\s+" + name + r"\s*\[\d+\]\s*=[^{]*\{(.*?)\}\s*;", + source, re.S) + if match is None: + raise KeyError("no table named %s in %s" % (name, REFERENCE_FILE)) + body = re.sub(r"//.*", "", match.group(1)) + return np.array([float(v) for v in + re.findall(r"[-+]?\d*\.?\d+(?:[eE][-+]?\d+)?", body)]) + + +def arm_to_sos(coeffs): + """Convert ARM biquad coefficients {b0,b1,b2,-a1,-a2} to scipy sos rows.""" + coeffs = np.asarray(coeffs).reshape(-1, 5) + sos = np.zeros((coeffs.shape[0], 6)) + sos[:, 0:3] = coeffs[:, 0:3] + sos[:, 3] = 1.0 + sos[:, 4] = -coeffs[:, 3] + sos[:, 5] = -coeffs[:, 4] + return sos + + +def ripple_edge_hz(coeffs, fs_hz): + """Find the ripple edge of a Chebyshev type I lowpass. + + The tables are normalised so DC sits at 0 dB and the passband ripples above + it. The ripple edge is therefore the highest frequency at which the + response is still at or above the DC level; past it the filter rolls off + monotonically. That frequency is exactly the `Wn` a Chebyshev designer + takes as its argument. + """ + freq, resp = sig.sosfreqz(arm_to_sos(coeffs), worN=1000000, fs=fs_hz) + db = 20.0 * np.log10(np.abs(resp) + 1e-30) + at_or_above_dc = np.where(db >= db[0])[0] + return freq[at_or_above_dc[-1]], db[:at_or_above_dc[-1]].max() - db[0] + + +def analog_bandpass_sections(coeffs, fs_hz, fc_hz): + """Recover the analog (wn, Q) of each biquad in a bandpass cascade. + + Each frozen equaliser biquad has b1 = 0 and b2 = -b0, so its zeros sit at + z = +/-1. That is the bilinear image of the analog bandpass + ``(wn/Q)s / (s^2 + (wn/Q)s + wn^2)``, which means the design survives an + inverse bilinear transform exactly. + + wn is returned as a ratio of the *prewarped* centre frequency. Rebuilding + from that ratio pins the digital peak on fc at whatever sample rate the + radio is running, which is the whole point of the exercise. + """ + prewarped_fc = 2.0 * fs_hz * np.tan(np.pi * fc_hz / fs_hz) + sections = [] + for b0, _b1, _b2, neg_a1, neg_a2 in np.asarray(coeffs).reshape(-1, 5): + pole = np.roots([1.0, -neg_a1, -neg_a2])[0] + analog_pole = (2.0 * fs_hz) * (pole - 1.0) / (pole + 1.0) + wn = abs(analog_pole) + sections.append((wn / prewarped_fc, wn / (2.0 * abs(analog_pole.real)))) + return sections + + +def rebuild_bandpass(sections, fc_hz, fs_hz, gain): + """Mirror of CalcBandpassCascadeCoeffs, used here to check the round trip.""" + prewarped_fc = 2.0 * fs_hz * np.tan(np.pi * fc_hz / fs_hz) + k = 2.0 * fs_hz + out = [] + for wn_ratio, q in sections: + wn = wn_ratio * prewarped_fc + denom = k * k + k * wn / q + wn * wn + b0 = (k * wn / q) / denom + out.append([-b0 * gain, 0.0, b0 * gain, + -2.0 * (wn * wn - k * k) / denom, + -(k * k - k * wn / q + wn * wn) / denom]) + return np.array(out).ravel() + + +def rebuild_chebyshev(order, ripple_db, edge_hz, fs_hz): + """Mirror of CalcChebyshevILowpassCoeffs, used here to check the round trip.""" + eps = np.sqrt(10.0 ** (ripple_db / 10.0) - 1.0) + v0 = np.arcsinh(1.0 / eps) / order + wc = 2.0 * fs_hz * np.tan(np.pi * edge_hz / fs_hz) + k = 2.0 * fs_hz + out = [] + for i in range(order // 2): + theta = np.pi * (2 * i + 1) / (2 * order) + real = -np.sinh(v0) * np.sin(theta) * wc + imag = np.cosh(v0) * np.cos(theta) * wc + wn = np.hypot(real, imag) + q = wn / (2.0 * abs(real)) + denom = k * k + k * wn / q + wn * wn + b0 = wn * wn / denom + out.append([b0, 2.0 * b0, b0, + -2.0 * (wn * wn - k * k) / denom, + -(k * k - k * wn / q + wn * wn) / denom]) + out = np.array(out) + dc = abs(sig.sosfreqz(arm_to_sos(out.ravel()), worN=[0], fs=fs_hz)[1][0]) + out[:, 0:3] /= dc ** (1.0 / len(out)) + return out.ravel() + + +def max_error_db(reference, generated, fs_hz, flo_hz, fhi_hz): + """Worst-case magnitude difference between two biquad cascades, in dB.""" + freq, ref = sig.sosfreqz(arm_to_sos(reference), worN=50000, fs=fs_hz) + _, gen = sig.sosfreqz(arm_to_sos(generated), worN=50000, fs=fs_hz) + band = (freq >= flo_hz) & (freq <= fhi_hz) + ref_db = 20.0 * np.log10(np.abs(ref) + 1e-30) + gen_db = 20.0 * np.log10(np.abs(gen) + 1e-30) + return np.max(np.abs(ref_db[band] - gen_db[band])) + + +def corner_hz(coeffs_or_taps, fs_hz, level_db, is_fir=False): + """Frequency at which the response first drops below `level_db`.""" + if is_fir: + freq, resp = sig.freqz(coeffs_or_taps, worN=400000, fs=fs_hz) + else: + freq, resp = sig.sosfreqz(arm_to_sos(coeffs_or_taps), worN=400000, fs=fs_hz) + db = 20.0 * np.log10(np.abs(resp) + 1e-30) + db -= db[0] + below = np.where(db < level_db)[0] + return freq[below[0]] if below.size else float("nan") + + +def main(): + with open(REFERENCE_FILE) as handle: + source = handle.read() + + print("Analog design specs recovered from %s" % os.path.relpath(REFERENCE_FILE, REPO)) + print("Design sample rate: %.0f Hz\n" % DESIGN_FS_HZ) + + # ------------------------------------------------------------------ + # CW audio lowpass filters: Chebyshev type I, 12 poles + # ------------------------------------------------------------------ + print("=" * 72) + print("CW audio lowpass filters (Chebyshev type I, %d poles)" % CW_ORDER) + print("=" * 72) + edges, ripples = [], [] + for index, label in enumerate(CW_LABEL_HZ, start=1): + table = read_table(source, "CW_AudioFilterCoeffs%d_ref" % index) + edge, ripple = ripple_edge_hz(table, DESIGN_FS_HZ) + edges.append(edge) + ripples.append(ripple) + rebuilt = rebuild_chebyshev(CW_ORDER, ripple, edge, DESIGN_FS_HZ) + error = max_error_db(table, rebuilt, DESIGN_FS_HZ, 0.0, label * 3.0) + print(" %6.0f Hz label: ripple edge %8.2f Hz, ripple %.4f dB, " + "round trip %.4f dB, -6 dB at %7.1f Hz" + % (label, edge, ripple, error, corner_hz(table, DESIGN_FS_HZ, -6.0))) + + print("\n Passband ripple across all five filters: %.4f .. %.4f dB" + % (min(ripples), max(ripples))) + print("\n /* C literal for DSP_FIR.cpp */") + print(" static const float32_t CW_AUDIO_RIPPLE_EDGE_HZ[CW_AUDIO_FILTER_COUNT] = {") + print(" " + ", ".join("%.1ff" % e for e in edges)) + print(" };") + + # ------------------------------------------------------------------ + # Equaliser cells: 4 stagger-tuned analog bandpass sections + # ------------------------------------------------------------------ + print("\n" + "=" * 72) + print("Equaliser cells (%d analog bandpass sections each)" % EQ_SECTIONS) + print("=" * 72) + protos, gains, worst = [], [], 0.0 + for index, fc in enumerate(EQ_BAND_FC_HZ, start=1): + table = read_table(source, "EQ_Band%dCoeffs_ref" % index) + sections = analog_bandpass_sections(table, DESIGN_FS_HZ, fc) + protos.append(sections) + + # Per-section gain that puts the cascade peak at unity, matching the + # normalisation of the frozen tables. + unity = rebuild_bandpass(sections, fc, DESIGN_FS_HZ, 1.0) + _, resp = sig.sosfreqz(arm_to_sos(unity), worN=200000, fs=DESIGN_FS_HZ) + gain = (1.0 / np.max(np.abs(resp))) ** (1.0 / EQ_SECTIONS) + gains.append(gain) + + rebuilt = rebuild_bandpass(sections, fc, DESIGN_FS_HZ, gain) + error = max_error_db(table, rebuilt, DESIGN_FS_HZ, fc * 0.3, fc * 3.0) + worst = max(worst, error) + print(" band %2d fc %8.2f Hz gain %.6f round trip %.2e dB" + % (index, fc, gain, error)) + + print("\n Worst round trip error over all %d cells: %.2e dB" % (len(protos), worst)) + print("\n /* C literals for DSP_FIR.cpp */") + print(" static const float32_t EQ_BAND_FC_HZ[EQUALIZER_CELL_COUNT] = {") + for row in range(0, len(EQ_BAND_FC_HZ), 5): + chunk = EQ_BAND_FC_HZ[row:row + 5] + print(" " + ", ".join("%.3ff" % f for f in chunk) + ",") + print(" };") + print(" static const float32_t EQ_BAND_GAIN[EQUALIZER_CELL_COUNT] = {") + for row in range(0, len(gains), 4): + chunk = gains[row:row + 4] + print(" " + ", ".join("%.9ff" % g for g in chunk) + ",") + print(" };") + print(" static const BandpassProtoSection EQ_BAND_PROTO[EQUALIZER_CELL_COUNT]" + "[EQ_PROTO_SECTIONS] = {") + for index, sections in enumerate(protos, start=1): + body = ", ".join("{%.9ff, %.9ff}" % (r, q) for r, q in sections) + print(" {%s}, /* band %d */" % (body, index)) + print(" };") + + # ------------------------------------------------------------------ + # FIR stages: report the corners the Kaiser designs have to reproduce + # ------------------------------------------------------------------ + print("\n" + "=" * 72) + print("FIR stages (targets for CalcFIRCoeffs)") + print("=" * 72) + fir_specs = [ + ("CW_Filter_Coeffs2_ref", DESIGN_FS_HZ, "CW decode FIR"), + ("FIR_int3_12ksps_48tap_2k7_ref", DESIGN_FS_HZ, "TX audio bandwidth (interp by 2)"), + ("coeffs12K_8K_LPF_FIR_ref", DESIGN_FS_HZ, "TX decimate by 2, 24k -> 12k"), + ] + for name, fs_hz, description in fir_specs: + taps = read_table(source, name) + print(" %s (%d taps, %s)" % (description, len(taps), name)) + print(" DC gain %.6f" % taps.sum()) + for level in (-3.0, -6.0, -60.0): + hz = corner_hz(taps, fs_hz, level, is_fir=True) + print(" %5.0f dB at %8.1f Hz (%.4f * Fs)" % (level, hz, hz / fs_hz)) + print("\n CalcFIRCoeffs treats its fc argument as the -6 dB point, so pass the") + print(" -6 dB figure above rather than the -3 dB one when matching a reference.") + print("\n Note: coeffs12K_8K_LPF_FIR feeds a decimate-by-2 stage, so its stopband") + print(" must sit below 0.25 * Fs. The reference table does not - it is flat well") + print(" past that - which is why the replacement is a genuine lowpass rather than") + print(" a reproduction of the original response.") + + +if __name__ == "__main__": + main() From 159e1a5e278c19cadc557249f130a7c5511cc3fc Mon Sep 17 00:00:00 2001 From: Oliver King Date: Wed, 29 Jul 2026 05:45:36 -0400 Subject: [PATCH 09/25] Add CAT control of the DSP settings, and a hardware-in-the-loop filter test The filters made rate independent in the previous commit were only verified in simulation. This adds a suite that measures them on the actual radio, and the CAT commands it needs to drive settings that were previously touchscreen-only. New CAT commands (NUM_SUPPORTED_COMMANDS 25 -> 29): SR SRn; / SR; sample rate, 0 = 176.4k, 1 = 192k CF CFn; / CF; receive CW audio filter index 0-5 EQ EQbbvvv; / EQbb; receive equaliser cell bb = 00-13, level 000-100 FL FL####; / FL; filter low cut, the mirror of FW Note for anyone adding more: command_parser tests the write form first, so set_len and read_len must differ or the read function is unreachable. Three fixes to existing commands, all of which affect CAT users today: * MD_write set bands[].mode but never ED.modulation[]. Demodulate() switches on the latter and InitFilterMask() compares the two, treating a difference as a deliberate departure from the band default and *mirroring the passband*. So MD did not merely fail to change the demodulator - it inverted the receive filter. * MD1/MD2 now dispatch TO_SSB_MODE when in CW receive. That transition existed only on the front-panel button, so CAT could enter CW and never leave. * FW declared set_len == read_len, making FW; unreachable and the filter bandwidth write-only. MD4 now selects AM, which was previously unreachable (MD5 gives SAM). The suite lives in code/tools/filter_hil/. It drives the AD2's W1/W2 into the I/Q receive inputs, reads the demodulated audio off the speaker, and compares each filter's position at both sample rates. Every response is measured as the difference between two captures at the same injected frequency - filter engaged and bypassed - so the AWG, codec, decimation rolloff, volume and speaker amplifier all cancel. The SSB filter, which always derived its coefficients from the true sample rate, is measured as a control on the method. The injection frequency is the part worth knowing about. ReceiveProcessing shifts twice, by Fs/4 and then by the fine tune, so the tone that demodulates to DC sits at |Fs/4 + fineTuneFreq_Hz|. The fine tune is whatever the operator last tuned to and is routinely several kilohertz - far wider than the passband - so leaving it out produces silence at any drive level, which is indistinguishable from a dead rig. Measured on the bench, 95 checks passed and none failed. Every CW corner and equaliser centre holds to within 0.3% across the rate change where the frozen tables moved them by 8.125%; the SSB control reads 0.04%. code/tools/filter_hil/test_filter_hil.py covers the measurement maths without hardware, including a check that the comparison fails when handed a simulated 8.125% shift - without that, a suite that quietly passed everything would look identical to a working radio. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_015tsW6HGrRthm1is6U8tFYG --- .claude/skills/filter-hil-test/SKILL.md | 105 ++ .../docs/Filter_Rate_Independence_HIL_Test.md | 238 +++++ code/src/PhoenixSketch/BuildInfo.h | 4 +- code/src/PhoenixSketch/CAT.cpp | 241 ++++- code/test/CAT_test.cpp | 305 +++++- code/tools/filter_hil/.gitignore | 8 + code/tools/filter_hil/README.md | 192 ++++ code/tools/filter_hil/__init__.py | 10 + code/tools/filter_hil/ad2.py | 423 ++++++++ code/tools/filter_hil/bandtable.py | 107 ++ code/tools/filter_hil/filter_hil_test.py | 490 +++++++++ code/tools/filter_hil/measure.py | 368 +++++++ code/tools/filter_hil/plot_filter_hil.py | 370 +++++++ code/tools/filter_hil/radio.py | 493 +++++++++ code/tools/filter_hil/report.py | 358 +++++++ code/tools/filter_hil/test_filter_hil.py | 412 ++++++++ code/tools/filter_hil/tests.py | 933 ++++++++++++++++++ 17 files changed, 5035 insertions(+), 22 deletions(-) create mode 100644 .claude/skills/filter-hil-test/SKILL.md create mode 100644 code/docs/Filter_Rate_Independence_HIL_Test.md create mode 100644 code/tools/filter_hil/.gitignore create mode 100644 code/tools/filter_hil/README.md create mode 100644 code/tools/filter_hil/__init__.py create mode 100644 code/tools/filter_hil/ad2.py create mode 100644 code/tools/filter_hil/bandtable.py create mode 100644 code/tools/filter_hil/filter_hil_test.py create mode 100644 code/tools/filter_hil/measure.py create mode 100644 code/tools/filter_hil/plot_filter_hil.py create mode 100644 code/tools/filter_hil/radio.py create mode 100644 code/tools/filter_hil/report.py create mode 100644 code/tools/filter_hil/test_filter_hil.py create mode 100644 code/tools/filter_hil/tests.py diff --git a/.claude/skills/filter-hil-test/SKILL.md b/.claude/skills/filter-hil-test/SKILL.md new file mode 100644 index 0000000..869b399 --- /dev/null +++ b/.claude/skills/filter-hil-test/SKILL.md @@ -0,0 +1,105 @@ +--- +name: filter-hil-test +description: Verify on real hardware that the receive DSP filters hold their frequencies when the sample rate changes. Drives the radio's I/Q receive inputs with an Analog Discovery 2's W1/W2 in quadrature, reads the demodulated audio on scope Ch1, and sweeps the CW audio filters, the 14 equaliser cells and the SSB filter at both 192 and 176.4 ksps. Use when the user asks to test the filters on hardware, verify sample-rate independence, or check that a filter change works on the real radio. +when_to_use: "test the filters on hardware", "verify sample rate independence", "HIL filter test", "check the filters on the radio", "run the filter sweep", "does the CW filter move when the sample rate changes" +argument-hint: "[--rates 192000,176400] [--tests iq,level,map,ref,cw,eq,ssb,am] [--rate-tol-pct 1.5] [...]" +allowed-tools: Bash(*venv/bin/python *filter_hil_test.py*) Bash(*venv/bin/python *plot_filter_hil.py*) Bash(*venv/bin/python *test_filter_hil.py*) Bash(ls /dev/ttyACM*) Read +user-invocable: true +--- + +# Filter rate-independence test, hardware in the loop + +Runs `code/tools/filter_hil/filter_hil_test.py` to measure where the receive DSP +filters actually sit on the real radio, at every sample rate, and confirm they do +not move. + +## Hardware setup + +The rig must already be wired: + +- **W1 and W2** drive the radio's I and Q receive inputs. Either order is fine — + the suite detects which is which and compensates in software. +- **Scope Ch1** reads the speaker output. +- **AD2 ground** is shared with the radio. +- CAT on `/dev/ttyACM1` (38400), diagnostics on `/dev/ttyACM0` (115200). + +If the AD2 or the serial ports are missing the suite exits 2. Report that and +stop — do not retry. + +## Preconditions + +- **AGC must be off** on the radio. It compresses the amplitude differences the + suite measures, so the filter skirts would read flat. There is no CAT command + for it; the user must set it from the menu. The suite exits 2 if AGC is on. +- The firmware must have the `SR`, `CF`, `EQ` and `FL` CAT commands. +- The user must not touch the front panel during the run — that triggers a + settings save and would persist the test configuration. + +## Running it + +```bash +/home/oliver/Sync/Ham/T41/Software/Phoenix/code/tools/venv/bin/python \ + /home/oliver/Sync/Ham/T41/Software/Phoenix/code/tools/filter_hil/filter_hil_test.py +``` + +Takes about nine minutes for both rates. Add `-v` for progress. To measure only +part of it, pass `--tests` (from `iq,level,map,ref,cw,eq,ssb,am`) or +`--rates`. `am` is off by default. + +## Exit codes + +| Code | Meaning | +|---|---| +| 0 | All checks passed | +| 1 | At least one filter is not where it should be | +| 2 | Rig or radio problem: no AD2, no serial, or preflight refused (usually AGC on) | +| 3 | Interrupted; the radio may still be in the test configuration | + +## What gets checked + +| Group | What it measures | What a failure means | +|---|---|---| +| `rig` | I/Q wiring sense, image rejection, drive level, AGC state | The rig is not connected as documented | +| `mapping` | That an input tone at `Fs/4 + f` produces audio at `f`, at each rate | The firmware did not reconfigure the frequency shift; everything else at that rate is meaningless and is skipped | +| `cw` | The five CW audio filters' -3 dB corners, ripple and stopband | The Chebyshev design is not being regenerated for the rate | +| `eq` | All 14 equaliser cell centres and Q | The cell prototypes are not being re-transformed for the rate | +| `ssb` | The SSB filter edge versus the commanded bandwidth — **the control** | The rig or the analysis is wrong, *not* the firmware | +| `am` | The AM DC blocker corner (only when requested) | The blocker pole is not derived from the rate | + +## Reading the result + +The primary criterion is **rate invariance**: each frequency must land in the +same place at both sample rates, within 1.5 %. The bug this exists to catch +produces exactly **-8.125 %**, so there is a 5x margin between correct and broken. +When a result matches that figure the report says so explicitly. + +View `_cw_overlay.png` with `Read` first — both rates should lie on top +of each other and well clear of the dotted legacy-shift line. Then +`_summary.png` for the whole picture at a glance. + +The SSB filter is the control: it always derived its coefficients from the true +sample rate, so a shift there indicts the measurement rather than the radio. + +Equaliser cells 0, 1 and 13 are marked *edge limited* and judged loosely on +absolute accuracy — the first two sit at the SSB low cut and the last in the +decimation skirt, which is meant to scale with the rate. Their rate-invariance +check is still applied at full strength. + +## Reporting + +Give one line per group with a PASS/FAIL and the headline number, then the +overall verdict. Quote the worst `delta_pct` and say whether it matches the +-8.125 % signature. Mention the Markdown report and PNG paths. If the radio's +state was not fully restored, say so prominently and name the settings that +drifted. + +## Guardrails + +- **Do not edit the suite in response to a failure.** A failure means the + radio's filters are not where they should be, or the rig is not connected as + documented. `test_filter_hil.py` covers the measurement maths and includes a + check that the comparison fails on a simulated -8.125 % shift — run that if you + suspect the tool rather than the radio. +- Do not widen `--rate-tol-pct` to make a run pass. +- If the run is interrupted, the AWG is silenced automatically but the radio may + be left mid-configuration; re-running the suite restores it. diff --git a/code/docs/Filter_Rate_Independence_HIL_Test.md b/code/docs/Filter_Rate_Independence_HIL_Test.md new file mode 100644 index 0000000..acc0e70 --- /dev/null +++ b/code/docs/Filter_Rate_Independence_HIL_Test.md @@ -0,0 +1,238 @@ +# Measuring filter rate-independence on the bench + +Companion to `Sample_Rate_Independence_Plan.md`. That document describes how the +receive filters are generated; this one describes how we confirm it on the +actual radio, and why each measurement proves what it claims to. + +The tool is `code/tools/filter_hil/`. Its README covers wiring and operation; +this is the reasoning behind it. + +## The problem with measuring a filter through a whole radio + +The only accessible output is the speaker, which sits at the end of everything: +the codec's analog front end, the decimation chain, the SSB convolution mask, +the demodulator, the equaliser, the volume control, the DAC and an audio power +amplifier. A raw amplitude sweep of that path characterises all of it at once, +and none of it individually. Worse, several of those stages have deliberately +rate-dependent behaviour — the decimation filters *should* scale with Fs — so a +naive sweep at two sample rates would differ for entirely legitimate reasons. + +The fix is to never look at an absolute level. Every response is measured as the +difference between two captures **at the same injected frequency**, one with the +filter under test engaged and one with it out of circuit: + +| Filter | Engaged | Reference | +|---|---|---| +| CW audio filters | `CF0`..`CF4` | `CF5` (bypassed) | +| Equaliser cells | one cell at 100, rest at 0 | all cells at 100 | +| SSB convolution filter | `FW` at the width under test | `FW` at its widest | +| AM DC blocker | envelope at `f_mod` | envelope at 300 Hz | + +Everything common to the two captures divides out exactly. What is left is the +filter's own magnitude response, measured through the real signal path, with no +model of the rest of the radio required. + +This works because of where these filters sit. `CWAudioFilter` is a plain series +stage that becomes a no-op at index 5 (`DSP.cpp:944`, `DSP_CWProcessing.cpp:538`), +so bypassing it removes exactly one thing. The equaliser cells are summed in +parallel with alternating signs (`DSP_FFT.cpp:780-830`), so zeroing thirteen of +them leaves precisely one. + +## Getting a signal in + +W1 and W2 drive the I and Q receive inputs directly, at baseband, bypassing the +RF front end. `ReceiveProcessing` then shifts **twice** before decimating: by +Fs/4 (`FreqShiftFs4`, `DSP.cpp:883`) and again by the fine tune plus any CW +sidetone (`FreqShiftF`, `DSP.cpp:895-903`). So the injection that demodulates to +zero audio sits at + +``` +centre = |Fs/4 + fineTuneFreq_Hz| +f_inject = centre +/- (f_audio + sidetone_shift) + mapping_correction +``` + +Worked example, measured on the bench with the radio's fine tune at -12250 Hz: + +| Sample rate | Fs/4 | centre | inject for 1 kHz of audio | +|---|---|---|---| +| 192 ksps | 48000 | 35750 | 36750 | +| 176.4 ksps | 44100 | 31850 | 32850 | + +**Recomputing Fs/4 per rate is the point of the whole exercise**, and a test that +injected the same frequency at both rates would report nonsense. + +**Forgetting the fine tune is worse: it produces silence.** It is whatever the +operator last tuned to and is routinely several kilohertz - far more than the +3 kHz passband - so every injection lands outside the filter and the radio never +responds, at any drive level. The visible symptom is that the injected tone +appears on the radio's spectrum display nowhere near the blue fine-tune bar. + +In CW receive the sidetone offset (`DSP.cpp:894-901`, default 750 Hz) adds to the +same shift, which is why the CW tests re-run the mapping calibration after +entering CW mode - and bypass the CW filter first, so the calibration probes are +not measured through the filter under test. + +The `map` test also reports how far the real centre sits from nominal. On this +radio it is about **-180 ppm at both rates**, which is the Teensy synthesising +its I2S clock with a fractional divider rather than any error; the residual is +folded into `mapping_correction` and the check is deliberately loose enough +(150 Hz) not to trip on it while still catching a rate that was never +reconfigured, which would be kilohertz out. + +Test `map` injects three tones and fits `f_audio = slope * f_inject + offset`. +If that fit disagrees with the expected centre, the firmware failed to +reconfigure its frequency shift for the rate and nothing measured afterwards +would be interpretable — so that rate is skipped rather than reported. + +## Quadrature, and which wire is which + +W1 and W2 must be phase-locked and started atomically: `FDwfAnalogOutMasterSet` +to share a timebase, then a single `FDwfAnalogOutConfigure(hdwf, -1, 1)`. + +Note the `1`. In the WaveForms API **`fStart = 3` means "apply settings to a +channel that is already running"**, and passing it to a stopped channel silently +leaves it stopped — the device reports the frequency and amplitude it was given +while generating nothing at all. When an injection appears to do nothing, read +`FDwfAnalogOutStatus` back and check it says `Running` rather than `Ready`. + +Two unknowns are resolved by experiment rather than by modelling the chain, +because getting either wrong produces silence rather than a subtly wrong answer: + +- **Which side of the demodulation centre to inject.** This is the one that has + to be unambiguous, and it is: the SSB convolution filter's entire job is to + reject the other sideband, and it does so by around 40 dB on this rig. The + suite gates on that number. +- **Which AWG channel drives I.** Much weaker, and deliberately not gated on. An + amplitude imbalance between W1 and W2 at the radio's inputs is normal and + leaves an image at the mirror frequency, but the SSB filter rejects that image + anyway, so both phase senses give a usable tone and only the amplitude differs + — a few decibels in practice. The suite picks the better one and reports the + margin. + +Nothing needs rewiring either way. + +## Why AGC must be off + +AGC compresses exactly the amplitude differences being measured. With it engaged, +a filter skirt reads as a straight line and every corner measurement fails to +bracket. There is no CAT command for AGC, so the suite reads it from the `ED;` +dump on the diagnostic port and refuses to run when it is on. There is a second +guard downstream: if the reference sweep's dynamic range across the passband is +implausibly small, that is reported too. + +## Pass criteria + +**Primary: rate invariance.** Each measured frequency must land in the same place +at both sample rates, within 1.5 %. The frozen-table bug produces exactly +`176400/192000 - 1 = -8.125 %`, so the tolerance sits a factor of five inside the +failure it is looking for. The comparison also flags when a measured shift +matches that signature, and says so in the failure message. + +**Secondary: absolute accuracy**, within 4 % of the labelled frequency. Looser on +purpose. A smooth amplitude tilt anywhere in the analog path — the AWG, the +codec, the speaker amplifier — biases absolute measurements without saying +anything about the firmware. The rate comparison is immune to it, because the +same tilt applies at both rates and divides out. + +**Shape checks.** A corner in the right place is not proof of a working filter: +a broken cascade can still cross -3 dB somewhere plausible. So CW filters are +also checked for passband ripple under 1 dB and stopband beyond -25 dB, and +equaliser cells for Q within 25 % of the design value. + +## The control + +The SSB convolution filter derives its coefficients from the true sample rate +and always has — `InitFilterMask` divides by `SR[SampleRate].rate / DF` +(`DSP_FIR.cpp`). It was never affected by the bug. Measuring it is therefore a +check on the *method*: if it shows an 8 % shift, the rig or the analysis is +wrong, not the firmware. The report says this explicitly so nobody misreads a +control failure as a firmware regression. + +## What the rig can actually resolve + +Measured on this bench, driving 0.89 V into the I/Q inputs with the AF volume at +30 %: + +- The recovered tone sits **15-20 dB above the receiver's own noise**. That noise + is the limit, not the scope: it passes through the same DSP chain as the + signal, so more volume does not help and more drive is the only lever. +- Consequently a response can be followed about **5 dB below the passband** + before the tone disappears into the noise. That is why the SSB filter edge is + called at -3 dB rather than the more usual -6 dB, and why corner searches + record NaN probes rather than pretending to have measured something. +- The AF volume control is steep: 54 % clipped a 5 V scope range outright while + 30 % gives about 30 mV of noise. The suite sets it and restores it. +- Reported THD tracks that noise floor rather than any real distortion, so it is + recorded but does not invalidate a measurement; auto-levelling is the one place + it is used as a limit. + +## Known measurement limits + +**Equaliser cells 0, 1 and 13.** Cells 0 (198.425 Hz) and 1 (250 Hz) sit at or +below the SSB filter's 200 Hz low cut, so their measured shape is the product of +the cell and the skirt. Cell 13 (4000 Hz) sits in the decimation filter's skirt, +whose corner is a fraction of Fs and is *meant* to move with the rate. All three +are flagged `edge_limited` and judged loosely on absolute accuracy. Their +rate-invariance check is still applied at full strength, because the same skirt +applies at both rates and cannot hide a shift. The `FL` CAT command can move the +low cut out of the way if cells 0 and 1 need a cleaner measurement. + +**The AM DC blocker** is only reachable because `MD4;` was added to select AM; +`MD5;` selects SAM, which routes to a different demodulator without the blocker. +It is off by default because it is slower and noisier than the rest — envelope +measurements at 10-40 Hz need long captures. + +**Scope sample rate.** The AD2's record mode drops samples above roughly +250 kHz. The default of 96 kHz is far below that; every capture records its lost +and corrupted counts, and any point with drops is excluded from fits rather than +silently averaged in. + +## CAT additions this required + +Most of the radio state the suite drives was previously touchscreen-only. Four +commands were added and three existing ones fixed: + +| Command | Form | Purpose | +|---|---|---| +| `SR` | `SRn;` / `SR;` | Sample rate, 0 = 176.4 k, 1 = 192 k | +| `CF` | `CFn;` / `CF;` | CW filter index 0-5 | +| `EQ` | `EQbbvvv;` / `EQbb;` | Equaliser cell `bb` = 00-13, level 000-100 | +| `FL` | `FL####;` / `FL;` | Filter low cut, the mirror of `FW` | + +Fixes: + +- `MD_write` now sets `ED.modulation[]` as well as `bands[].mode`. Setting only + the latter left `InitFilterMask` treating the difference as a deliberate + departure from the band default and **mirroring the passband** — so `MD` did + not just fail to change the demodulator, it inverted the receive filter. +- `MD1`/`MD2` now dispatch `TO_SSB_MODE` when in CW receive. Previously that + transition existed only on the front-panel button, so CAT could enter CW and + never leave. +- `FW`'s `read_len` no longer equals its `set_len`. `command_parser` tests the + write form first, so the two being equal made `FW;` unreachable and the filter + bandwidth write-only. + +Note the parser rule for anyone adding more: **`set_len` and `read_len` must +differ**, or the read function can never be called. + +## Regenerating figures + +The JSON keeps every raw sweep point, so figures and the Markdown report can be +rebuilt from a stored result without the hardware: + +```bash +cd code/tools +./venv/bin/python filter_hil/plot_filter_hil.py filter_hil/results/.json +``` + +## Trusting the tool + +`code/tools/filter_hil/test_filter_hil.py` covers the measurement maths against +synthetic signals: amplitude accurate to 0.02 dB on and off bin, corner finding +on analytic filters, Q extraction, and the `ED;` parser against a captured +fixture including interleaved debug output. + +The test that matters most feeds the comparison a synthetic **-8.125 % shift** and +asserts that every CW and equaliser check fails and is identified as the known +frozen-table signature. Without it, a suite that quietly passed everything would +look identical to a working radio. diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index be98509..fc29509 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -9,7 +9,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "7ec824e" -#define BUILD_TIMESTAMP "2026-07-16 18:35:59" +#define GIT_COMMIT_HASH "ad2c3d1" +#define BUILD_TIMESTAMP "2026-07-29 05:45:05" #endif // BUILDINFO_H diff --git a/code/src/PhoenixSketch/CAT.cpp b/code/src/PhoenixSketch/CAT.cpp index 6ef715c..282ae8f 100644 --- a/code/src/PhoenixSketch/CAT.cpp +++ b/code/src/PhoenixSketch/CAT.cpp @@ -78,6 +78,14 @@ char *VX_write( char* cmd ); char *VX_read( char* cmd ); char *ED_read( char* cmd ); char *PR_read( char* cmd); +char *SR_write( char* cmd ); +char *SR_read( char* cmd ); +char *CF_write( char* cmd ); +char *CF_read( char* cmd ); +char *EQ_write( char* cmd ); +char *EQ_read( char* cmd ); +char *FL_write( char* cmd ); +char *FL_read( char* cmd ); typedef struct { char name[3]; //two chars plus zero terminator @@ -90,7 +98,10 @@ typedef struct { // The command_parser will compare the CAT command received against the entires in // this array. If it matches, then it will call the corresponding write_function // or the read_function, depending on the length of the command string. -#define NUM_SUPPORTED_COMMANDS 25 +// Note on set_len / read_len: command_parser() tests the write form FIRST, so a +// command whose two lengths are equal can never reach its read function. Keep +// them distinct for anything that needs to be readable. +#define NUM_SUPPORTED_COMMANDS 29 valid_command valid_commands[ NUM_SUPPORTED_COMMANDS ] = { { "AG", 3+4,4, AG_write, AG_read }, //audio gain @@ -102,7 +113,7 @@ valid_command valid_commands[ NUM_SUPPORTED_COMMANDS ] = { "FB", 3+11,3, FB_write, FB_read }, //VFO B { "FR", 3+1, 3, FR_write, FR_read }, // selects or reads the VFO of the receiver { "FT", 3+1, 3, FT_write, FT_read }, // selects or reads the VFO of the transmitter - { "FW", 3+4,3+4,FW_write, FW_read }, // DSP filter bandwidth + { "FW", 3+4,3, FW_write, FW_read }, // DSP filter bandwidth (high cut) { "ID", 0, 3, unsupported_cmd, ID_read }, // RADIO ID#, read-only { "IF", 0, 3, unsupported_cmd, IF_read }, //radio status, read-only { "KS", 3+1,3, KS_write, KS_read }, // keyer speed @@ -117,7 +128,11 @@ valid_command valid_commands[ NUM_SUPPORTED_COMMANDS ] = { "TX", 3, 0, TX_write, unsupported_cmd }, // set transceiver to transmit. { "VX", 3+1, 3, VX_write, VX_read }, // VOX write/read { "ED", 0, 3, unsupported_cmd, ED_read }, // print out the state of the EEPROM data -- NOT a Kenwood keyword - { "PR", 0, 3, unsupported_cmd, PR_read } // print out the state of the hardware register -- NOT a Kenwood keyword + { "PR", 0, 3, unsupported_cmd, PR_read }, // print out the state of the hardware register -- NOT a Kenwood keyword + { "SR", 3+1,3, SR_write, SR_read }, // sample rate 0=176.4k 1=192k -- NOT a Kenwood keyword + { "CF", 3+1,3, CF_write, CF_read }, // receive CW audio filter index -- NOT a Kenwood keyword + { "EQ", 3+5,3+2, EQ_write, EQ_read }, // receive equalizer cell -- NOT a Kenwood keyword + { "FL", 3+4,3, FL_write, FL_read } // DSP filter low cut -- NOT a Kenwood keyword }; /** @@ -477,37 +492,60 @@ char *KS_write( char* cmd ){ } /** - * CAT command MD - Set operating mode (LSB, USB, CW, AM) - * @param cmd CAT command string with mode number: 1=LSB, 2=USB, 3=CW, 5=AM + * Select the demodulator, keeping every copy of the mode in step. + * + * The mode lives in two places: bands[].mode is the band's default, and + * ED.modulation[] is what Demodulate() actually switches on. InitFilterMask() + * compares the two, and when they disagree it treats the difference as a + * deliberate departure from the band default and mirrors the passband. Setting + * only one of them therefore does not just leave the demodulator alone - it + * inverts the receive filter. + * + * Also leaves CW receive if that is where we are: the mode state machine has no + * other CAT-reachable path back to SSB. + * + * @param mode The modulation to select + */ +static void SetModulation(ModulationType mode){ + if (modeSM.state_id == ModeSm_StateId_CW_RECEIVE){ + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_SSB_MODE); + } + bands[ ED.currentBand[ED.activeVFO] ].mode = mode; + ED.modulation[ED.activeVFO] = mode; + SetInterrupt(iMODE); +} + +/** + * CAT command MD - Set operating mode + * @param cmd CAT command string with mode number: 1=LSB, 2=USB, 3=CW, 4=AM, 5=SAM * @return Empty string */ char *MD_write( char* cmd ){ int p1 = atoi( &cmd[2] ); switch( p1 ){ case 1: // LSB - bands[ ED.currentBand[ED.activeVFO] ].mode = LSB; - SetInterrupt(iMODE); + SetModulation(LSB); break; case 2: // USB - bands[ ED.currentBand[ED.activeVFO] ].mode = USB; - SetInterrupt(iMODE); + SetModulation(USB); break; case 3: // CW // Change to CW mode if in SSB receive mode, otherwise ignore: if (modeSM.state_id == ModeSm_StateId_SSB_RECEIVE){ if( ED.currentBand[ED.activeVFO] < BAND_30M ){ - bands[ ED.currentBand[ED.activeVFO] ].mode = LSB; + SetModulation(LSB); }else{ - bands[ ED.currentBand[ED.activeVFO] ].mode = USB; + SetModulation(USB); } ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_CW_MODE); - SetInterrupt(iMODE); } break; - case 5: // AM - bands[ ED.currentBand[ED.activeVFO] ].mode = SAM; // default to SAM rather than AM - SetInterrupt(iMODE); + case 4: // AM + SetModulation(AM); + break; + case 5: // SAM + SetModulation(SAM); break; default: break; @@ -530,7 +568,7 @@ char *MD_read( char* cmd ){ ( modeSM.state_id == ModeSm_StateId_CW_TRANSMIT_SPACE ) ){ sprintf( obuf, "MD3;" ); return obuf; } if( bands[ ED.currentBand[ED.activeVFO] ].mode == LSB ){ sprintf( obuf, "MD1;" ); return obuf; } if( bands[ ED.currentBand[ED.activeVFO] ].mode == USB ){ sprintf( obuf, "MD2;" ); return obuf; } - if( bands[ ED.currentBand[ED.activeVFO] ].mode == AM ){ sprintf( obuf, "MD5;" ); return obuf; } + if( bands[ ED.currentBand[ED.activeVFO] ].mode == AM ){ sprintf( obuf, "MD4;" ); return obuf; } if( bands[ ED.currentBand[ED.activeVFO] ].mode == SAM ){ sprintf( obuf, "MD5;" ); return obuf; } sprintf( obuf, "?;"); return obuf; //Huh? How'd we get here? @@ -758,6 +796,177 @@ char *PR_read( char* cmd ){ return obuf; } +/** Sample rates reachable over CAT, in the order the SR parameter selects them. + * These are the two rates the front panel menu offers. */ +static const uint8_t SR_CAT_RATES[2] = { SAMPLE_RATE_176K, SAMPLE_RATE_192K }; +#define SR_CAT_RATE_COUNT 2 + +/** + * CAT command SR - set the sample rate (non-standard Kenwood command) + * + * `SR0;` selects 176.4 ksps, `SR1;` selects 192 ksps. Rejected while transmitting, + * because ChangeSampleRate() reconfigures the I2S clock and rebuilds the whole + * DSP chain. + * + * @param cmd CAT command string + * @return Empty string on success, "?;" if the rate is out of range or the radio is not receiving + */ +char *SR_write( char* cmd ){ + int p1 = cmd[2] - '0'; + if( p1 < 0 || p1 >= SR_CAT_RATE_COUNT ){ + sprintf( obuf, "?;"); + return obuf; + } + if( modeSM.state_id != ModeSm_StateId_SSB_RECEIVE && + modeSM.state_id != ModeSm_StateId_CW_RECEIVE ){ + sprintf( obuf, "?;"); + return obuf; + } + ChangeSampleRate( SR_CAT_RATES[ p1 ] ); + return empty_string_p; +} + +/** + * CAT command SR - read the sample rate (non-standard Kenwood command) + * @param cmd CAT command string + * @return Response "SRn;" where n indexes SR_CAT_RATES, or "?;" if the radio is at some other rate + */ +char *SR_read( char* cmd ){ + for( int i = 0; i < SR_CAT_RATE_COUNT; i++ ){ + if( SampleRate == SR_CAT_RATES[ i ] ){ + sprintf( obuf, "SR%d;", i); + return obuf; + } + } + sprintf( obuf, "?;"); + return obuf; +} + +/** + * CAT command CF - select the receive CW audio filter (non-standard Kenwood command) + * + * `CF0;` through `CF4;` select the five CW bandwidths (840, 1080, 1320, 1800 and + * 2000 Hz); `CF5;` bypasses the filter. + * + * @param cmd CAT command string + * @return Empty string on success, "?;" if the index is out of range + */ +char *CF_write( char* cmd ){ + int p1 = cmd[2] - '0'; + if( p1 < 0 || p1 > 5 ){ + sprintf( obuf, "?;"); + return obuf; + } + ED.CWFilterIndex = p1; + return empty_string_p; +} + +/** + * CAT command CF - read the receive CW audio filter index (non-standard Kenwood command) + * @param cmd CAT command string + * @return Response "CFn;" + */ +char *CF_read( char* cmd ){ + sprintf( obuf, "CF%ld;", (long)ED.CWFilterIndex); + return obuf; +} + +/** + * CAT command EQ - set one receive equalizer cell (non-standard Kenwood command) + * + * `EQbbvvv;` where bb is the cell index 00..13 and vvv is the level 000..100. + * + * @param cmd CAT command string + * @return Empty string on success, "?;" if the cell index or level is out of range + */ +char *EQ_write( char* cmd ){ + char idxbuf[3] = { cmd[2], cmd[3], '\0' }; + int band = atoi( idxbuf ); + int value = atoi( &cmd[4] ); + if( band < 0 || band >= EQUALIZER_CELL_COUNT || value < 0 || value > 100 ){ + sprintf( obuf, "?;"); + return obuf; + } + ED.equalizerRec[ band ] = value; + return empty_string_p; +} + +/** + * CAT command EQ - read one receive equalizer cell (non-standard Kenwood command) + * @param cmd CAT command string + * @return Response "EQbbvvv;", or "?;" if the cell index is out of range + */ +char *EQ_read( char* cmd ){ + char idxbuf[3] = { cmd[2], cmd[3], '\0' }; + int band = atoi( idxbuf ); + if( band < 0 || band >= EQUALIZER_CELL_COUNT ){ + sprintf( obuf, "?;"); + return obuf; + } + sprintf( obuf, "EQ%02d%03ld;", band, (long)ED.equalizerRec[ band ]); + return obuf; +} + +/** + * CAT command FL - set the DSP filter low cut (non-standard Kenwood command) + * + * The mirror of FW, which moves the other edge: on USB/AM/SAM this moves + * FLoCut_Hz, on LSB it moves FHiCut_Hz. The value is always the magnitude of the + * edge frequency, as it is for FW. + * + * @param cmd CAT command string + * @return Empty string + */ +char *FL_write( char* cmd ){ + int32_t g = atoi( &cmd[2] ); + switch (bands[ED.currentBand[ED.activeVFO]].mode) { + case LSB:{ + // On LSB the passband is negative, so the low cut is the high edge. + if (g < -bands[ED.currentBand[ED.activeVFO]].FLoCut_Hz) + bands[ED.currentBand[ED.activeVFO]].FHiCut_Hz = -g; + break; + } + case AM: + case SAM: + case USB:{ + if (g < bands[ED.currentBand[ED.activeVFO]].FHiCut_Hz) + bands[ED.currentBand[ED.activeVFO]].FLoCut_Hz = g; + break; + } + case IQ: + case DCF77: + break; + } + UpdateFIRFilterMask(&RXfilters); + return empty_string_p; +} + +/** + * CAT command FL - read the DSP filter low cut (non-standard Kenwood command) + * @param cmd CAT command string + * @return Response "FLnnnn;" + */ +char *FL_read( char* cmd ){ + int32_t flow = 0; + switch (bands[ED.currentBand[ED.activeVFO]].mode) { + case LSB:{ + flow = -bands[ED.currentBand[ED.activeVFO]].FHiCut_Hz; + break; + } + case AM: + case SAM: + case USB:{ + flow = bands[ED.currentBand[ED.activeVFO]].FLoCut_Hz; + break; + } + case IQ: + case DCF77: + break; + } + sprintf( obuf, "FL%04ld;", (long)flow); + return obuf; +} + /** * Poll SerialUSB1 for incoming CAT commands and process them diff --git a/code/test/CAT_test.cpp b/code/test/CAT_test.cpp index dd58001..c38902a 100644 --- a/code/test/CAT_test.cpp +++ b/code/test/CAT_test.cpp @@ -37,6 +37,16 @@ char *PS_write(char* cmd); char *PS_read(char* cmd); char *RX_write(char* cmd); char *TX_write(char* cmd); +char *FW_write(char* cmd); +char *FW_read(char* cmd); +char *SR_write(char* cmd); +char *SR_read(char* cmd); +char *CF_write(char* cmd); +char *CF_read(char* cmd); +char *EQ_write(char* cmd); +char *EQ_read(char* cmd); +char *FL_write(char* cmd); +char *FL_read(char* cmd); void UpdateTransmitAudioGain(void); void ShutdownTeensy(void); @@ -1051,9 +1061,10 @@ TEST(CAT, MD_read_ReturnsAMMode) { char command[] = "MD;"; char *result = MD_read(command); - - // Should return AM mode (5) - EXPECT_STREQ(result, "MD5;"); + + // AM and SAM are distinct demodulators, so they read back distinctly: + // MD4 for AM, MD5 for SAM. + EXPECT_STREQ(result, "MD4;"); } TEST(CAT, MD_read_ReturnsSAMMode) { @@ -2343,4 +2354,290 @@ TEST(CAT, command_parser_RecognizesTXCommands){ char tx_cmd[] = "TX;"; char *result = command_parser(tx_cmd); EXPECT_STREQ(result, ""); -} \ No newline at end of file +} + +// ============================================================================ +// Commands added for the hardware-in-the-loop filter test suite +// +// These drive radio state that was previously reachable only from the +// touchscreen menus. Every one of them is exercised through command_parser() as +// well as directly, because the parser selects write-vs-read purely by where the +// semicolon falls: it tests the write length first, so a command whose set_len +// and read_len are equal can never reach its read function. +// ============================================================================ + +TEST(CAT, SR_write_SetsSampleRate) { + uint8_t saved = SampleRate; + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + + char cmd176[] = "SR0;"; + EXPECT_STREQ(SR_write(cmd176), ""); + EXPECT_EQ(SampleRate, SAMPLE_RATE_176K); + + char cmd192[] = "SR1;"; + EXPECT_STREQ(SR_write(cmd192), ""); + EXPECT_EQ(SampleRate, SAMPLE_RATE_192K); + + SampleRate = saved; +} + +TEST(CAT, SR_read_ReturnsSampleRateIndex) { + uint8_t saved = SampleRate; + + SampleRate = SAMPLE_RATE_176K; + char cmd[] = "SR;"; + EXPECT_STREQ(SR_read(cmd), "SR0;"); + + SampleRate = SAMPLE_RATE_192K; + EXPECT_STREQ(SR_read(cmd), "SR1;"); + + SampleRate = saved; +} + +TEST(CAT, SR_write_RejectsOutOfRange) { + uint8_t saved = SampleRate; + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + SampleRate = SAMPLE_RATE_192K; + + char cmd[] = "SR2;"; + EXPECT_STREQ(SR_write(cmd), "?;"); + EXPECT_EQ(SampleRate, SAMPLE_RATE_192K) << "a rejected rate must not change anything"; + + SampleRate = saved; +} + +TEST(CAT, SR_write_RefusedWhileTransmitting) { + uint8_t saved = SampleRate; + SampleRate = SAMPLE_RATE_192K; + modeSM.state_id = ModeSm_StateId_SSB_TRANSMIT; + + char cmd[] = "SR0;"; + EXPECT_STREQ(SR_write(cmd), "?;"); + EXPECT_EQ(SampleRate, SAMPLE_RATE_192K) + << "changing rate mid-transmission would reconfigure the I2S clock underneath the TX chain"; + + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + SampleRate = saved; +} + +TEST(CAT, SR_ParserReachesBothForms) { + uint8_t saved = SampleRate; + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + + char write_cmd[] = "SR0;"; + EXPECT_STREQ(command_parser(write_cmd), ""); + EXPECT_EQ(SampleRate, SAMPLE_RATE_176K); + + char read_cmd[] = "SR;"; + EXPECT_STREQ(command_parser(read_cmd), "SR0;"); + + SampleRate = saved; +} + +TEST(CAT, CF_write_SetsCWFilterIndex) { + int32_t saved = ED.CWFilterIndex; + + for (int i = 0; i <= 5; i++) { + char cmd[] = "CF0;"; + cmd[2] = '0' + i; + EXPECT_STREQ(CF_write(cmd), ""); + EXPECT_EQ(ED.CWFilterIndex, i); + } + + ED.CWFilterIndex = saved; +} + +TEST(CAT, CF_read_ReturnsCWFilterIndex) { + int32_t saved = ED.CWFilterIndex; + + ED.CWFilterIndex = 4; + char cmd[] = "CF;"; + EXPECT_STREQ(CF_read(cmd), "CF4;"); + + ED.CWFilterIndex = saved; +} + +TEST(CAT, CF_write_RejectsOutOfRange) { + int32_t saved = ED.CWFilterIndex; + ED.CWFilterIndex = 2; + + char cmd[] = "CF6;"; + EXPECT_STREQ(CF_write(cmd), "?;"); + EXPECT_EQ(ED.CWFilterIndex, 2); + + ED.CWFilterIndex = saved; +} + +TEST(CAT, CF_ParserReachesBothForms) { + int32_t saved = ED.CWFilterIndex; + + char write_cmd[] = "CF3;"; + EXPECT_STREQ(command_parser(write_cmd), ""); + EXPECT_EQ(ED.CWFilterIndex, 3); + + char read_cmd[] = "CF;"; + EXPECT_STREQ(command_parser(read_cmd), "CF3;"); + + ED.CWFilterIndex = saved; +} + +TEST(CAT, EQ_write_SetsEqualizerCell) { + int32_t saved = ED.equalizerRec[7]; + + char cmd[] = "EQ07050;"; + EXPECT_STREQ(EQ_write(cmd), ""); + EXPECT_EQ(ED.equalizerRec[7], 50); + + ED.equalizerRec[7] = saved; +} + +TEST(CAT, EQ_read_ReturnsEqualizerCell) { + int32_t saved = ED.equalizerRec[13]; + + ED.equalizerRec[13] = 100; + char cmd[] = "EQ13;"; + EXPECT_STREQ(EQ_read(cmd), "EQ13100;"); + + ED.equalizerRec[13] = 0; + EXPECT_STREQ(EQ_read(cmd), "EQ13000;"); + + ED.equalizerRec[13] = saved; +} + +TEST(CAT, EQ_write_RejectsOutOfRange) { + int32_t saved = ED.equalizerRec[0]; + ED.equalizerRec[0] = 100; + + char bad_cell[] = "EQ14050;"; + EXPECT_STREQ(EQ_write(bad_cell), "?;"); + + char bad_value[] = "EQ00101;"; + EXPECT_STREQ(EQ_write(bad_value), "?;"); + EXPECT_EQ(ED.equalizerRec[0], 100); + + char bad_read[] = "EQ14;"; + EXPECT_STREQ(EQ_read(bad_read), "?;"); + + ED.equalizerRec[0] = saved; +} + +TEST(CAT, EQ_ParserReachesBothForms) { + int32_t saved = ED.equalizerRec[2]; + + char write_cmd[] = "EQ02075;"; + EXPECT_STREQ(command_parser(write_cmd), ""); + EXPECT_EQ(ED.equalizerRec[2], 75); + + char read_cmd[] = "EQ02;"; + EXPECT_STREQ(command_parser(read_cmd), "EQ02075;"); + + ED.equalizerRec[2] = saved; +} + +TEST(CAT, FL_write_SetsLowCutOnUSB) { + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_20M; + bands[BAND_20M].mode = USB; + bands[BAND_20M].FLoCut_Hz = 200; + bands[BAND_20M].FHiCut_Hz = 3000; + + char cmd[] = "FL0400;"; + EXPECT_STREQ(FL_write(cmd), ""); + EXPECT_EQ(bands[BAND_20M].FLoCut_Hz, 400); + EXPECT_EQ(bands[BAND_20M].FHiCut_Hz, 3000) << "FL must not disturb the other edge"; + + bands[BAND_20M].FLoCut_Hz = 200; +} + +TEST(CAT, FL_write_RejectsCrossingTheHighCut) { + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_20M; + bands[BAND_20M].mode = USB; + bands[BAND_20M].FLoCut_Hz = 200; + bands[BAND_20M].FHiCut_Hz = 3000; + + char cmd[] = "FL3500;"; + FL_write(cmd); + EXPECT_EQ(bands[BAND_20M].FLoCut_Hz, 200) << "low cut must stay below the high cut"; +} + +TEST(CAT, FL_read_ReturnsLowCut) { + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_20M; + bands[BAND_20M].mode = USB; + bands[BAND_20M].FLoCut_Hz = 300; + + char cmd[] = "FL;"; + EXPECT_STREQ(FL_read(cmd), "FL0300;"); + + bands[BAND_20M].FLoCut_Hz = 200; +} + +TEST(CAT, FW_read_IsReachableThroughTheParser) { + // FW used to declare set_len == read_len, and because command_parser tests + // the write form first, "FW;" fell through to "?;" and the bandwidth could + // be set but never read back. + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_20M; + bands[BAND_20M].mode = USB; + bands[BAND_20M].FLoCut_Hz = 200; + bands[BAND_20M].FHiCut_Hz = 2800; + + char read_cmd[] = "FW;"; + EXPECT_STREQ(command_parser(read_cmd), "FW2800;"); + + char write_cmd[] = "FW2400;"; + EXPECT_STREQ(command_parser(write_cmd), ""); + EXPECT_EQ(bands[BAND_20M].FHiCut_Hz, 2400); + EXPECT_STREQ(command_parser(read_cmd), "FW2400;"); + + bands[BAND_20M].FHiCut_Hz = 3000; +} + +TEST(CAT, MD_write_SetsModulationNotJustBandMode) { + // Demodulate() switches on ED.modulation, while InitFilterMask() compares it + // against bands[].mode and mirrors the passband when they disagree. Setting + // only bands[].mode therefore inverts the receive filter. + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_20M; + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + + char usb[] = "MD2;"; + MD_write(usb); + EXPECT_EQ(bands[BAND_20M].mode, USB); + EXPECT_EQ(ED.modulation[VFO_A], USB); + + char lsb[] = "MD1;"; + MD_write(lsb); + EXPECT_EQ(bands[BAND_20M].mode, LSB); + EXPECT_EQ(ED.modulation[VFO_A], LSB); + + char am[] = "MD4;"; + MD_write(am); + EXPECT_EQ(bands[BAND_20M].mode, AM); + EXPECT_EQ(ED.modulation[VFO_A], AM); + + char sam[] = "MD5;"; + MD_write(sam); + EXPECT_EQ(bands[BAND_20M].mode, SAM); + EXPECT_EQ(ED.modulation[VFO_A], SAM); +} + +TEST(CAT, MD_write_LeavesCWReceive) { + // TO_SSB_MODE used to be reachable only from the front-panel TOGGLE_MODE + // button, so CAT could enter CW receive and never get back out. + ModeSm_start(&modeSM); + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_20M; + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + + char cw[] = "MD3;"; + MD_write(cw); + ASSERT_EQ(modeSM.state_id, ModeSm_StateId_CW_RECEIVE); + + char usb[] = "MD2;"; + MD_write(usb); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_SSB_RECEIVE) + << "MD1/MD2 must be able to bring the radio back out of CW receive"; + EXPECT_EQ(ED.modulation[VFO_A], USB); +} diff --git a/code/tools/filter_hil/.gitignore b/code/tools/filter_hil/.gitignore new file mode 100644 index 0000000..c783b74 --- /dev/null +++ b/code/tools/filter_hil/.gitignore @@ -0,0 +1,8 @@ +# Run outputs: JSON, Markdown and figures, all timestamped per run. +# Everything needed to regenerate a report is in its JSON, so the artifacts +# themselves are not worth versioning. Commit one deliberately if a particular +# run is worth keeping as a reference. +results/ + +__pycache__/ +*.pyc diff --git a/code/tools/filter_hil/README.md b/code/tools/filter_hil/README.md new file mode 100644 index 0000000..8140f0f --- /dev/null +++ b/code/tools/filter_hil/README.md @@ -0,0 +1,192 @@ +# Filter rate-independence test, hardware in the loop + +Verifies on the real radio that the receive DSP filters land on their labelled +frequencies at every supported sample rate. An Analog Discovery 2 injects a +quadrature tone into the I/Q receive inputs and reads the demodulated audio back +off the speaker output; the suite sweeps, measures, and compares the two rates. + +## Wiring + +``` +AD2 W1 ------> radio I receive input (order does not matter, see below) +AD2 W2 ------> radio Q receive input +AD2 Ch1 <------ speaker output +AD2 GND ------- radio ground (shared return is required) + +/dev/ttyACM1 ... CAT control, 38400 baud +/dev/ttyACM0 ... diagnostic port, 115200 baud +``` + +**W1 and W2 can be either way round.** The suite works out which is which by +trying both quadrature senses and seeing which one the SSB filter passes, then +compensates in software. Nothing needs rewiring. + +**Check how the speaker output is referenced before connecting Ch1.** If the +audio amplifier is bridged, neither terminal sits at ground and tying the scope's +`1-` to chassis shorts half the output stage. Connect Ch1 differentially across +the speaker terminals unless the output is known to be single-ended. + +## Before running + +- **AGC must be off.** It compresses the amplitude differences the suite + measures, so every filter skirt would read flat. There is no CAT command for + it; set it from the radio's menu. The suite refuses to run otherwise. +- **Firmware must have the `SR`, `CF`, `EQ` and `FL` CAT commands.** They were + added alongside this suite. `printf 'SR;' > /dev/ttyACM1` should answer rather + than returning `?;`. +- **Do not touch the front panel while it runs.** Menu interaction triggers a + settings save, which would make the test configuration permanent. + +## Running + +```bash +cd code/tools +./venv/bin/python filter_hil/filter_hil_test.py +``` + +The defaults are the values that were found to work on this bench: AF volume 30, +5 V scope range, up to 1 V of drive, and a 12 dB SNR floor. Takes roughly ten +minutes for both rates. Results land in +`filter_hil/results/filter_hil_.{json,md}` plus PNGs. + +Useful variations: + +```bash +# Just the CW filters, one rate, verbose +./venv/bin/python filter_hil/filter_hil_test.py --tests iq,level,map,ref,cw \ + --rates 192000 -v + +# Faster, coarser pass +./venv/bin/python filter_hil/filter_hil_test.py --grid-points 21 --eq-points 7 + +# Include the AM DC blocker (needs the MD4 -> AM CAT fix) +./venv/bin/python filter_hil/filter_hil_test.py --tests iq,level,map,ref,cw,eq,ssb,am + +# Check arguments and the report path without touching hardware +./venv/bin/python filter_hil/filter_hil_test.py --dry-run + +# Redraw figures from a previous run, no hardware +./venv/bin/python filter_hil/plot_filter_hil.py filter_hil/results/filter_hil_*.json +``` + +Exit codes: `0` pass, `1` fail, `2` error (no hardware, or preflight refused), +`3` aborted. + +## How it works + +The receive chain shifts **twice** before decimating: by Fs/4 (`FreqShiftFs4`) +and then by the fine tune plus any CW sidetone (`FreqShiftF`). So the injection +that demodulates to zero audio sits at + +``` +centre = |Fs/4 + fineTune| +``` + +and a wanted audio frequency is `centre +/- f`. Worked example from this bench, +at 176.4 ksps with the radio tuned to a fine tune of -12250 Hz: + +| Fs/4 | fine tune | centre | inject for 1 kHz | +|---|---|---|---| +| 44100 | -12250 | 31850 | 32850 | +| 48000 (at 192 ksps) | -12250 | 35750 | 36750 | + +**The fine tune is the part that is easy to forget and impossible to work +around.** It is whatever the operator last tuned to and is routinely several +kilohertz, so leaving it out puts every injection far outside the passband: the +radio stays silent, and no amount of extra drive helps. If the tone on the +radio's spectrum display is not sitting under the blue fine-tune bar, this is +why. + +Recomputing Fs/4 per rate is the crux of the whole exercise, and the suite +measures the relationship rather than assuming it (test `map`). That test also +reports how far the real demodulation centre sits from nominal - about +-180 ppm on this radio, which is the Teensy's fractional I2S clock, not an +error. + +Every response is the **difference between two captures at the same injected +frequency** — filter engaged and bypassed. Everything the two have in common +cancels exactly: the AWG's amplitude flatness, the codec front end, the +decimation rolloff, the SSB mask, the volume setting, the DAC and the speaker +amplifier. That is what makes an absolute-level measurement on a speaker output +good enough to characterise a filter. + +| Filter | Measured as | +|---|---| +| CW audio filters | `level(CF=k) - level(CF=5)` | +| Equaliser cells | one cell at 100, the rest at 0, against the flat reference | +| SSB convolution filter | `level(FW=x) - level(FW=widest)` | +| AM DC blocker | envelope level at `f_mod`, against 300 Hz | + +## Reading the result + +**The primary criterion is rate invariance, not absolute accuracy.** A corner +measured at 192 ksps must land at the same frequency at 176.4 ksps. The bug this +suite exists to catch moves it by **-8.125 %** (`176400/192000`); the tolerance is +1.5 %, so there is a factor of five between correct and broken. Absolute accuracy +against the labelled frequency is checked too, but more loosely, because a smooth +tilt anywhere in the analog path can bias it without saying anything about the +firmware. + +Look at `_cw_overlay.png` first. Both rates should lie on top of each other and +well clear of the dotted line marking where the old frozen tables would have put +them. + +**The SSB filter is the control.** It has always derived its coefficients from +the true sample rate, so it was never affected by the bug. If it shows a shift, +the rig or the analysis is wrong, not the firmware. + +Some equaliser cells are marked *edge limited*, meaning the SSB filter rather +than the cell is shaping what was measured. Cells 0 and 1 (198 and 250 Hz) sit at +or below the 200 Hz low cut, and cell 13 (4000 Hz) sits in the decimation skirt, +whose corner is a fraction of the sample rate and is *meant* to move with it. The +suite opens the SSB filter up before sweeping the cells so the top ones are +measurable at all, and marks a cell edge limited by comparing it against the +passband actually in use. Their absolute tolerance is relaxed; their rate +invariance is not, since the same skirt applies at both rates. + +## When it fails + +| Symptom | Likely cause | +|---|---| +| Preflight aborts on AGC | AGC is on. Turn it off in the radio's menu. | +| `iq_order` reports negative SNR for all four combinations, and the speaker output measures a couple of hundred mV RMS with the AWG silent | AGC is on and running the gain up on a quiet band, burying the injected tone 25-30 dB under the hiss. Confirm with `PD;` — if the tone is visible in the radio's own spectrum but not in the audio, the DSP is receiving it and the problem is downstream gain. | +| `iq_order` finds no audio either way | No shared ground, radio muted, W1/W2 not connected - or the fine tune was not accounted for (see "How it works") | +| Everything reads as noise and the tone on the radio's display is nowhere near the blue fine-tune bar | The injection is not allowing for `fineTuneFreq_Hz` | +| `iq_order` rejects the wrong side by only a few dB | The tone is not reaching both I and Q. Check both W1 and W2; the suite reports each channel's contribution as a phase margin. | +| `mapping` offset is wrong | The firmware did not reconfigure the Fs/4 shift for the new rate. Everything downstream is meaningless; that rate is skipped. | +| Everything reads -8.125 % | The frozen coefficient tables are back | +| SSB control also shifts | The rig or the analysis is wrong, not the firmware | +| Reference sweep is flat | AGC or a limiter is active despite the preflight check | +| Audio clips or the noise floor is hundreds of mV | AF volume too high. It rises very steeply: 54 clipped a 5 V range on this radio, 30 gives ~30 mV of noise | +| A corner comes back as "not measured" | The crossing is below the rig's dynamic range. Measured through a receiver the tone vanishes into the noise about 5 dB under the passband, which is why the SSB edge is called at -3 dB rather than -6 dB | +| Points marked invalid | Check `lost`/`corrupted` in the JSON: the scope rate may be too high, or the drive too low or clipping | + +Do not edit the test in response to a failure — a failure means the radio's +filters are not where they should be, or the rig is not connected as documented. + +## Files + +| File | Contents | +|---|---| +| `ad2.py` | ctypes wrapper for libdwf: quadrature AWG, record-mode capture | +| `radio.py` | CAT and diagnostic serial, `ED;` parsing, state save/restore | +| `measure.py` | tone metrology, corner and peak finding | +| `bandtable.py` | design constants mirrored from the firmware | +| `tests.py` | the individual tests and the cross-rate comparison | +| `report.py` | JSON, stdout summary, Markdown report | +| `filter_hil_test.py` | CLI entry point and sequencing | +| `plot_filter_hil.py` | JSON in, PNGs out; runs without hardware | +| `test_filter_hil.py` | self-tests for the measurement maths, no hardware | + +Run the self-tests after changing anything in `measure.py` or `tests.py`: + +```bash +./venv/bin/python filter_hil/test_filter_hil.py +``` + +They include a check that the comparison **fails** when handed a simulated +-8.125 % shift, which is what stops the suite quietly passing everything. + +`bandtable.py` mirrors constants from `DSP_FIR.cpp` and `Globals.cpp` by hand. +Nothing detects a firmware value edited without updating it, so re-check that +file when the filter design constants change. diff --git a/code/tools/filter_hil/__init__.py b/code/tools/filter_hil/__init__.py new file mode 100644 index 0000000..d35a23d --- /dev/null +++ b/code/tools/filter_hil/__init__.py @@ -0,0 +1,10 @@ +"""Hardware-in-the-loop verification of the Phoenix receive DSP filters. + +Injects known quadrature signals into the radio's I/Q receive inputs with an +Analog Discovery 2, measures the demodulated audio, and checks that each filter +lands on its labelled frequency at both supported sample rates. + +See README.md for the wiring and how to run it. +""" + +__all__ = ["ad2", "radio", "measure", "bandtable", "tests", "report"] diff --git a/code/tools/filter_hil/ad2.py b/code/tools/filter_hil/ad2.py new file mode 100644 index 0000000..b7e0dc9 --- /dev/null +++ b/code/tools/filter_hil/ad2.py @@ -0,0 +1,423 @@ +"""Analog Discovery 2 control for the filter HIL suite. + +Wraps the WaveForms SDK (libdwf) through ctypes. There is no pydwf on this +machine and the SDK's own Python support is a constants module plus sample +scripts, so the binding is hand-written; the argtypes table and the record-mode +capture loop are lifted from ``code/tools/receive_chain_test.py``. + +Two capabilities matter here: + +* **Quadrature output.** W1 and W2 drive the radio's I and Q receive inputs. The + two channels must be phase-locked and started atomically, or the phase between + them is undefined and the radio sees a signal that is not analytic. Nothing + else in this repo has driven the AD2's second AWG channel, let alone in + quadrature, so this part has no prior art to copy. + +* **Streaming capture.** Scope Ch1 reads the demodulated audio. Record mode is + used rather than single-shot because the AD2's on-board buffer is only a few + thousand samples; the loop below accounts for lost and corrupted samples so a + capture that dropped data can be discarded rather than silently analysed. + +The device is left driving the radio's ADC inputs if the process dies, so +:class:`Ad2` registers cleanup on ``__exit__``, on SIGINT and at interpreter +exit. +""" + +from __future__ import annotations + +import atexit +import ctypes +import signal +import sys +import time +from dataclasses import dataclass +from datetime import datetime, timezone +from typing import Callable, Optional + +import numpy as np + +# --- SDK constants --------------------------------------------------------- +# Mirrored from /usr/share/digilent/waveforms/samples/py/dwfconstants.py rather +# than imported, so the suite does not depend on the SDK's sample directory +# being present at its default path. + +HDWF_NONE = 0 + +ACQMODE_SINGLE = 0 +ACQMODE_RECORD = 3 + +DWF_STATE_READY = 0 +DWF_STATE_CONFIG = 4 +DWF_STATE_PREFILL = 5 +DWF_STATE_ARMED = 1 +DWF_STATE_RUNNING = 3 +DWF_STATE_DONE = 2 + +ANALOG_OUT_NODE_CARRIER = 0 +ANALOG_OUT_NODE_FM = 1 +ANALOG_OUT_NODE_AM = 2 + +FUNC_DC = 0 +FUNC_SINE = 1 + +DEFAULT_DWF_PATH = "libdwf.so" + + +class DwfError(RuntimeError): + """A WaveForms SDK call failed.""" + + +def load_dwf(path: str = DEFAULT_DWF_PATH) -> ctypes.CDLL: + """Load libdwf for the current platform.""" + if sys.platform.startswith("win"): + return ctypes.cdll.dwf + if sys.platform.startswith("darwin"): + return ctypes.cdll.LoadLibrary("/Library/Frameworks/dwf.framework/dwf") + try: + return ctypes.cdll.LoadLibrary(path) + except OSError as exc: + raise DwfError( + f"could not load {path}. Install the Digilent WaveForms SDK " + f"(the library normally lands in /usr/lib)." + ) from exc + + +def last_error(dwf: ctypes.CDLL) -> str: + """Return the SDK's description of the most recent failure.""" + buf = ctypes.create_string_buffer(512) + dwf.FDwfGetLastErrorMsg(buf) + return buf.value.decode(errors="replace").strip() + + +def dwf_version(dwf: ctypes.CDLL) -> str: + """Return the SDK version string.""" + buf = ctypes.create_string_buffer(32) + dwf.FDwfGetVersion(buf) + return buf.value.decode(errors="replace") + + +def bind_argtypes(dwf: ctypes.CDLL) -> None: + """Declare argument types so 64-bit pointers are not truncated.""" + c_int, c_double, c_byte, c_uint = ( + ctypes.c_int, + ctypes.c_double, + ctypes.c_byte, + ctypes.c_uint, + ) + p_int = ctypes.POINTER(c_int) + p_byte = ctypes.POINTER(c_byte) + p_double = ctypes.POINTER(c_double) + + # Device + dwf.FDwfDeviceOpen.argtypes = [c_int, p_int] + dwf.FDwfDeviceAutoConfigureSet.argtypes = [c_int, c_int] + dwf.FDwfDeviceCloseAll.argtypes = [] + dwf.FDwfGetLastErrorMsg.argtypes = [ctypes.c_char_p] + dwf.FDwfGetVersion.argtypes = [ctypes.c_char_p] + + # Scope + dwf.FDwfAnalogInReset.argtypes = [c_int] + dwf.FDwfAnalogInChannelEnableSet.argtypes = [c_int, c_int, c_int] + dwf.FDwfAnalogInChannelRangeSet.argtypes = [c_int, c_int, c_double] + dwf.FDwfAnalogInChannelOffsetSet.argtypes = [c_int, c_int, c_double] + dwf.FDwfAnalogInAcquisitionModeSet.argtypes = [c_int, c_int] + dwf.FDwfAnalogInFrequencySet.argtypes = [c_int, c_double] + dwf.FDwfAnalogInRecordLengthSet.argtypes = [c_int, c_double] + dwf.FDwfAnalogInConfigure.argtypes = [c_int, c_int, c_int] + dwf.FDwfAnalogInStatus.argtypes = [c_int, c_int, p_byte] + dwf.FDwfAnalogInStatusRecord.argtypes = [c_int, p_int, p_int, p_int] + # void_p rather than POINTER(c_double): the buffer is filled at an offset via + # byref(buf, n), which carries the array's type and a stricter declaration + # would reject it. + dwf.FDwfAnalogInStatusData.argtypes = [c_int, c_int, ctypes.c_void_p, c_int] + + # AWG. None of these appear elsewhere in the repo. + dwf.FDwfAnalogOutReset.argtypes = [c_int, c_int] + dwf.FDwfAnalogOutNodeEnableSet.argtypes = [c_int, c_int, c_int, c_int] + dwf.FDwfAnalogOutNodeFunctionSet.argtypes = [c_int, c_int, c_int, ctypes.c_ubyte] + dwf.FDwfAnalogOutNodeFrequencySet.argtypes = [c_int, c_int, c_int, c_double] + dwf.FDwfAnalogOutNodeAmplitudeSet.argtypes = [c_int, c_int, c_int, c_double] + dwf.FDwfAnalogOutNodeOffsetSet.argtypes = [c_int, c_int, c_int, c_double] + dwf.FDwfAnalogOutNodePhaseSet.argtypes = [c_int, c_int, c_int, c_double] + dwf.FDwfAnalogOutMasterSet.argtypes = [c_int, c_int, c_int] + dwf.FDwfAnalogOutRunSet.argtypes = [c_int, c_int, c_double] + dwf.FDwfAnalogOutRepeatSet.argtypes = [c_int, c_int, c_int] + dwf.FDwfAnalogOutConfigure.argtypes = [c_int, c_int, c_int] + + +@dataclass(frozen=True) +class Ad2Config: + """Scope and AWG settings that stay fixed for a whole run.""" + + scope_rate_hz: float = 96_000.0 + capture_s: float = 0.25 + scope_range_v: float = 2.0 + scope_offset_v: float = 0.0 + awg_offset_v: float = 0.0 + frontend_settle_s: float = 2.0 + dwf_path: str = DEFAULT_DWF_PATH + + +@dataclass +class Capture: + """One block of scope samples.""" + + samples: np.ndarray + sample_rate_hz: float + lost: int + corrupted: int + t_utc: str + + @property + def clean(self) -> bool: + """True when no samples were dropped or flagged corrupt.""" + return self.lost == 0 and self.corrupted == 0 + + +class Ad2: + """Open AD2, drive W1/W2 in quadrature, capture Ch1. + + Use as a context manager; the AWG is always silenced on the way out. + """ + + def __init__(self, cfg: Ad2Config, log: Callable[[str], None] = print) -> None: + self.cfg = cfg + self.log = log + self.dwf: Optional[ctypes.CDLL] = None + self.hdwf = ctypes.c_int(HDWF_NONE) + self._scope_configured = False + self._awg_running = False + self._prev_sigint = None + self.version = "" + + # -- lifecycle --------------------------------------------------------- + + def __enter__(self) -> "Ad2": + self.open() + return self + + def __exit__(self, *exc) -> None: + self.close() + + def open(self) -> None: + """Open the first available device and put it in manual-configure mode.""" + self.dwf = load_dwf(self.cfg.dwf_path) + bind_argtypes(self.dwf) + self.version = dwf_version(self.dwf) + self.log(f"WaveForms SDK {self.version}") + + if self.dwf.FDwfDeviceOpen(ctypes.c_int(-1), ctypes.byref(self.hdwf)) != 1 \ + or self.hdwf.value == HDWF_NONE: + raise DwfError(f"could not open an Analog Discovery: {last_error(self.dwf)}") + + # Manual configure: settings are applied when we say so, not on every set. + self.dwf.FDwfDeviceAutoConfigureSet(self.hdwf, ctypes.c_int(0)) + + atexit.register(self._emergency_stop) + self._prev_sigint = signal.getsignal(signal.SIGINT) + signal.signal(signal.SIGINT, self._on_sigint) + + def close(self) -> None: + """Silence the AWG and release the device.""" + if self.dwf is None: + return + try: + self.awg_off() + finally: + self.dwf.FDwfDeviceCloseAll() + self.hdwf = ctypes.c_int(HDWF_NONE) + self.dwf = None + atexit.unregister(self._emergency_stop) + if self._prev_sigint is not None: + signal.signal(signal.SIGINT, self._prev_sigint) + self._prev_sigint = None + + def _emergency_stop(self) -> None: + """Last-ditch AWG silence; safe to call more than once.""" + if self.dwf is None or self.hdwf.value == HDWF_NONE: + return + try: + self.dwf.FDwfAnalogOutReset(self.hdwf, ctypes.c_int(-1)) + self.dwf.FDwfDeviceCloseAll() + except Exception: + pass + + def _on_sigint(self, signum, frame): + self.log("\nInterrupted - silencing the AWG.") + self._emergency_stop() + raise KeyboardInterrupt + + # -- scope ------------------------------------------------------------- + + def configure_scope(self) -> None: + """Configure Ch1 for record mode. + + The analog frontend needs a couple of seconds to settle after the range + and offset are set. That cost is paid here, once, rather than on every + capture - a sweep makes hundreds of captures and would otherwise spend + most of its time waiting. + """ + assert self.dwf is not None + d, h = self.dwf, self.hdwf + c_int, c_double = ctypes.c_int, ctypes.c_double + + d.FDwfAnalogInReset(h) + d.FDwfAnalogInChannelEnableSet(h, c_int(0), c_int(1)) + d.FDwfAnalogInChannelRangeSet(h, c_int(0), c_double(self.cfg.scope_range_v)) + d.FDwfAnalogInChannelOffsetSet(h, c_int(0), c_double(self.cfg.scope_offset_v)) + d.FDwfAnalogInAcquisitionModeSet(h, c_int(ACQMODE_RECORD)) + d.FDwfAnalogInFrequencySet(h, c_double(self.cfg.scope_rate_hz)) + d.FDwfAnalogInRecordLengthSet(h, c_double(self.cfg.capture_s)) + d.FDwfAnalogInConfigure(h, c_int(1), c_int(0)) # apply, do not start + + self.log(f"Scope: Ch1 @ {self.cfg.scope_rate_hz/1000:.1f} kHz, " + f"{self.cfg.capture_s*1000:.0f} ms, range {self.cfg.scope_range_v} V") + self.log(f"Waiting {self.cfg.frontend_settle_s:.1f} s for the analog frontend to settle...") + time.sleep(self.cfg.frontend_settle_s) + self._scope_configured = True + + def capture(self) -> Capture: + """Re-arm and stream one block from Ch1.""" + assert self.dwf is not None + if not self._scope_configured: + self.configure_scope() + + d, h = self.dwf, self.hdwf + c_int, c_double = ctypes.c_int, ctypes.c_double + + n_samples = int(round(self.cfg.scope_rate_hz * self.cfg.capture_s)) + buf = (ctypes.c_double * n_samples)() + sts = ctypes.c_byte() + avail, lost, corrupted = c_int(), c_int(), c_int() + total_lost = total_corrupted = 0 + + d.FDwfAnalogInConfigure(h, c_int(0), c_int(1)) # start + + got = 0 + deadline = time.monotonic() + self.cfg.capture_s * 5 + 5.0 + while got < n_samples: + if time.monotonic() > deadline: + raise DwfError("timed out waiting for the scope acquisition") + + if d.FDwfAnalogInStatus(h, c_int(1), ctypes.byref(sts)) != 1: + raise DwfError(f"FDwfAnalogInStatus failed: {last_error(d)}") + + if got == 0 and sts.value in (DWF_STATE_CONFIG, DWF_STATE_PREFILL, DWF_STATE_ARMED): + continue + + d.FDwfAnalogInStatusRecord(h, ctypes.byref(avail), ctypes.byref(lost), + ctypes.byref(corrupted)) + # Advance past lost samples so the dropout leaves a hole rather than + # shifting everything after it in time. + got += lost.value + total_lost += lost.value + total_corrupted += corrupted.value + + if avail.value == 0: + continue + + take = min(avail.value, n_samples - got) + d.FDwfAnalogInStatusData( + h, c_int(0), + ctypes.byref(buf, ctypes.sizeof(ctypes.c_double) * got), + c_int(take), + ) + got += take + + return Capture( + samples=np.frombuffer(buf, dtype=np.float64).copy(), + sample_rate_hz=self.cfg.scope_rate_hz, + lost=total_lost, + corrupted=total_corrupted, + t_utc=datetime.now(timezone.utc).isoformat(timespec="seconds"), + ) + + def capture_after(self, settle_s: float) -> Capture: + """Wait for the radio's DSP to settle on the new stimulus, then capture.""" + time.sleep(settle_s) + return self.capture() + + # -- AWG --------------------------------------------------------------- + + def set_quadrature(self, f_hz: float, amplitude_v: float, phase_sign: int) -> None: + """Drive W1/W2 with a phase-locked quadrature pair. + + W1 sits at 0 degrees and W2 leads or lags by 90, which is what makes the + pair analytic: the radio sees a single-sided tone at +f_hz or -f_hz + rather than a real cosine with both images. Which sign corresponds to + which physical wiring is discovered at run time, so the caller passes + ``phase_sign`` rather than assuming. + + ``FDwfAnalogOutMasterSet`` slaves W2 to W1's timebase, and configuring + channel -1 starts both atomically; doing them separately leaves the + phase between the channels undefined. + """ + assert self.dwf is not None + d, h = self.dwf, self.hdwf + c_int, c_double = ctypes.c_int, ctypes.c_double + node = c_int(ANALOG_OUT_NODE_CARRIER) + phase_deg = 90.0 * (1 if phase_sign >= 0 else -1) + + for ch, phase in ((0, 0.0), (1, phase_deg)): + c = c_int(ch) + d.FDwfAnalogOutNodeEnableSet(h, c, node, c_int(1)) + d.FDwfAnalogOutNodeFunctionSet(h, c, node, ctypes.c_ubyte(FUNC_SINE)) + d.FDwfAnalogOutNodeFrequencySet(h, c, node, c_double(f_hz)) + d.FDwfAnalogOutNodeAmplitudeSet(h, c, node, c_double(amplitude_v)) + d.FDwfAnalogOutNodeOffsetSet(h, c, node, c_double(self.cfg.awg_offset_v)) + d.FDwfAnalogOutNodePhaseSet(h, c, node, c_double(phase)) + d.FDwfAnalogOutRunSet(h, c, c_double(0.0)) # run continuously + d.FDwfAnalogOutRepeatSet(h, c, c_int(0)) + + # Slave channel 2 to channel 1 so they share a timebase. + d.FDwfAnalogOutMasterSet(h, c_int(1), c_int(0)) + # -1 = all channels, 1 = start. Note 3 is "apply to a channel that is + # already running" and silently leaves a stopped channel stopped. + d.FDwfAnalogOutConfigure(h, c_int(-1), c_int(1)) + self._awg_running = True + + def set_am_quadrature(self, carrier_hz: float, amplitude_v: float, phase_sign: int, + mod_hz: float, depth_pct: float) -> None: + """Quadrature carrier with amplitude modulation on both channels. + + Used to exercise the AM demodulator's DC blocker, whose corner is only + reachable by varying the envelope rather than the carrier. + """ + assert self.dwf is not None + d, h = self.dwf, self.hdwf + c_int, c_double = ctypes.c_int, ctypes.c_double + carrier = c_int(ANALOG_OUT_NODE_CARRIER) + am = c_int(ANALOG_OUT_NODE_AM) + phase_deg = 90.0 * (1 if phase_sign >= 0 else -1) + + for ch, phase in ((0, 0.0), (1, phase_deg)): + c = c_int(ch) + d.FDwfAnalogOutNodeEnableSet(h, c, carrier, c_int(1)) + d.FDwfAnalogOutNodeFunctionSet(h, c, carrier, ctypes.c_ubyte(FUNC_SINE)) + d.FDwfAnalogOutNodeFrequencySet(h, c, carrier, c_double(carrier_hz)) + d.FDwfAnalogOutNodeAmplitudeSet(h, c, carrier, c_double(amplitude_v)) + d.FDwfAnalogOutNodeOffsetSet(h, c, carrier, c_double(self.cfg.awg_offset_v)) + d.FDwfAnalogOutNodePhaseSet(h, c, carrier, c_double(phase)) + + # The modulation must be in phase on both channels - only the + # carrier is in quadrature - or the envelope itself rotates. + d.FDwfAnalogOutNodeEnableSet(h, c, am, c_int(1)) + d.FDwfAnalogOutNodeFunctionSet(h, c, am, ctypes.c_ubyte(FUNC_SINE)) + d.FDwfAnalogOutNodeFrequencySet(h, c, am, c_double(mod_hz)) + d.FDwfAnalogOutNodeAmplitudeSet(h, c, am, c_double(depth_pct)) + d.FDwfAnalogOutNodeOffsetSet(h, c, am, c_double(0.0)) + d.FDwfAnalogOutNodePhaseSet(h, c, am, c_double(0.0)) + + d.FDwfAnalogOutRunSet(h, c, c_double(0.0)) + d.FDwfAnalogOutRepeatSet(h, c, c_int(0)) + + d.FDwfAnalogOutMasterSet(h, c_int(1), c_int(0)) + d.FDwfAnalogOutConfigure(h, c_int(-1), c_int(1)) + self._awg_running = True + + def awg_off(self) -> None: + """Stop driving the radio's inputs.""" + if self.dwf is None or self.hdwf.value == HDWF_NONE: + return + self.dwf.FDwfAnalogOutReset(self.hdwf, ctypes.c_int(-1)) + self._awg_running = False diff --git a/code/tools/filter_hil/bandtable.py b/code/tools/filter_hil/bandtable.py new file mode 100644 index 0000000..d72a8dd --- /dev/null +++ b/code/tools/filter_hil/bandtable.py @@ -0,0 +1,107 @@ +"""Design constants mirrored from the firmware. + +The suite needs to know what the firmware is aiming at in order to say whether it +got there. These values are copied by hand from the sources named against each +block; ``test_filter_hil.py`` asserts the shapes still line up, but nothing can +detect a value that was edited in the firmware and not here. Re-check this file +whenever the corresponding firmware constants change. +""" + +from __future__ import annotations + +from dataclasses import dataclass + +# --- Sample rates ---------------------------------------------------------- +# Globals.cpp SR[] and the SAMPLE_RATE_* macros in SDT.h. Only these two are +# reachable from the front panel menu or the SR CAT command. +SAMPLE_RATES_HZ = (192000, 176400) + +#: Combined decimation of the receive chain: DF1 * DF2 in ReceiveFilterConfig. +DECIMATION_FACTOR = 8 + +#: The ratio the frozen-table bug used to scale every corner by. +LEGACY_RATE_RATIO = 176400.0 / 192000.0 # 0.91875 +LEGACY_DELTA_PCT = 100.0 * (LEGACY_RATE_RATIO - 1.0) # -8.125 + + +def audio_rate_hz(sample_rate_hz: float) -> float: + """Audio sample rate after the receive chain's decimate-by-8.""" + return sample_rate_hz / DECIMATION_FACTOR + + +def fs_over_4_hz(sample_rate_hz: float) -> float: + """The FreqShiftFs4 offset: an input tone at Fs/4 demodulates to DC.""" + return sample_rate_hz / 4.0 + + +# --- CW audio filters ------------------------------------------------------ +# DSP_FIR.cpp CW_AUDIO_RIPPLE_EDGE_HZ and the CW_AUDIO_FILTER_* macros. +# The nominal figures are what the filters are labelled with in the UI; the +# ripple edge is the Chebyshev design parameter and sits a few percent lower. +CW_FILTER_NOMINAL_HZ = (840.0, 1080.0, 1320.0, 1800.0, 2000.0) +CW_FILTER_RIPPLE_EDGE_HZ = (807.1, 1038.0, 1269.0, 1731.5, 1963.2) +CW_FILTER_ORDER = 12 +CW_FILTER_RIPPLE_DB = 0.02 +#: ED.CWFilterIndex value that bypasses the filter. +CW_FILTER_OFF = 5 + + +# --- Equaliser ------------------------------------------------------------- +# DSP_FIR.cpp EQ_BAND_FC_HZ. Q values are derived from EQ_BAND_PROTO: the +# cascade's -3 dB bandwidth, not any single section's. +EQ_CELL_COUNT = 14 +EQ_CENTRE_HZ = (198.425, 250.0, 314.98, 400.0, 500.0, 630.0, 793.0, + 1000.0, 1259.0, 1587.0, 2000.0, 2500.0, 3150.0, 4000.0) +#: -3 dB bandwidth of each cell at 24 ksps, measured from the shipped tables. +EQ_BANDWIDTH_HZ = (49.4, 59.6, 76.0, 98.0, 118.5, 159.7, 189.0, + 243.0, 300.8, 362.3, 476.3, 598.3, 789.9, 1043.5) + +#: Cells whose measured shape is distorted by something other than the cell. +#: 0 and 1 sit at or below the 200 Hz SSB low cut; 13 sits in the decimation +#: skirt, whose corner is a fraction of Fs and so is meant to move with the rate. +EQ_EDGE_LIMITED_CELLS = (0, 1, 13) + + +def eq_q(index: int) -> float: + """Nominal Q of an equaliser cell.""" + return EQ_CENTRE_HZ[index] / EQ_BANDWIDTH_HZ[index] + + +# --- AM DC blocker --------------------------------------------------------- +# ReceiveFilterConfig::amDCBlockCorner_Hz in SDT.h. +AM_DC_BLOCKER_CORNER_HZ = 38.0 + + +# --- Bands ----------------------------------------------------------------- +# Globals.cpp bands[], ITU region 2. Only the fields the suite uses. + +@dataclass(frozen=True) +class Band: + index: int + name: str + mode: int # ModulationType: 0=USB 1=LSB 2=AM 3=SAM + hi_cut_hz: int + lo_cut_hz: int + + +BANDS: tuple[Band, ...] = ( + Band(0, "160M", 1, -200, -3000), + Band(1, "80M", 1, -200, -3000), + Band(2, "60M", 0, 3000, 200), + Band(3, "40M", 1, -200, -3000), + Band(4, "30M", 0, 3000, 200), + Band(5, "20M", 0, 3000, 200), + Band(6, "17M", 0, 3000, 200), + Band(7, "15M", 0, 3000, 200), + Band(8, "12M", 0, 3000, 200), + Band(9, "10M", 0, 3000, 200), + Band(10, "6M", 0, 3000, 200), + Band(11, "4M", 0, 3000, 200), +) + + +def band(index: int) -> Band: + """Look up a band by its ED.currentBand index.""" + if 0 <= index < len(BANDS): + return BANDS[index] + raise IndexError(f"band index {index} is outside the {len(BANDS)}-band table") diff --git a/code/tools/filter_hil/filter_hil_test.py b/code/tools/filter_hil/filter_hil_test.py new file mode 100644 index 0000000..0ddc6f0 --- /dev/null +++ b/code/tools/filter_hil/filter_hil_test.py @@ -0,0 +1,490 @@ +#!/usr/bin/env python3 +"""Verify the Phoenix receive filters hold their frequencies across sample rates. + +Injects a quadrature tone into the radio's I/Q receive inputs with an Analog +Discovery 2, reads the demodulated audio back off the speaker output, and +measures where each filter actually sits - at every sample rate under test. + + W1, W2 -> the radio's I and Q receive inputs (order is auto-detected) + Scope Ch1 -> the speaker output + /dev/ttyACM1 -> CAT control at 38400 + /dev/ttyACM0 -> diagnostic port at 115200 (needed for the ED settings dump) + +Exit codes: 0 pass, 1 fail, 2 error (no hardware, or preflight refused to run), +3 aborted (radio state may be dirty). + +See README.md for wiring detail and how to read the output. +""" + +from __future__ import annotations + +import argparse +import os +import sys +import time + +import numpy as np + +# Allow running as a script from anywhere, not only as a package module. +if __package__ in (None, ""): + sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + from filter_hil import bandtable as bt + from filter_hil import report as report_mod + from filter_hil import tests as T + from filter_hil.ad2 import Ad2, Ad2Config, DwfError + from filter_hil.measure import geom_grid + from filter_hil.radio import (CatError, EdSnapshot, Radio, RadioStateGuard, + MOD_AM, MOD_NAMES) +else: + from . import bandtable as bt + from . import report as report_mod + from . import tests as T + from .ad2 import Ad2, Ad2Config, DwfError + from .measure import geom_grid + from .radio import (CatError, EdSnapshot, Radio, RadioStateGuard, + MOD_AM, MOD_NAMES) + +REPO_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +ALL_TESTS = ("iq", "level", "map", "ref", "cw", "eq", "ssb", "am") +DEFAULT_TESTS = ("iq", "level", "map", "ref", "cw", "eq", "ssb") + + +def build_parser() -> argparse.ArgumentParser: + p = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + + g = p.add_argument_group("selection") + g.add_argument("--rates", default="192000,176400", + help="sample rates to test, in order (default: %(default)s)") + g.add_argument("--tests", default=",".join(DEFAULT_TESTS), + help=f"tests to run, from {','.join(ALL_TESTS)} (default: %(default)s)") + g.add_argument("--cw-filters", default="0,1,2,3,4", + help="CW filter indices to measure (default: %(default)s)") + g.add_argument("--eq-cells", default="all", + help="equaliser cells to measure, or 'all' (default: %(default)s)") + g.add_argument("--fw-widths", default="1800,2400,2800,3000", + help="SSB filter widths to check, Hz (default: %(default)s)") + + g = p.add_argument_group("serial") + g.add_argument("--cat-port", default="/dev/ttyACM1") + g.add_argument("--diag-port", default="/dev/ttyACM0") + g.add_argument("--cat-baud", type=int, default=38400) + g.add_argument("--diag-baud", type=int, default=115200) + g.add_argument("--cat-timeout", type=float, default=0.5) + + g = p.add_argument_group("analog discovery") + g.add_argument("--scope-rate", type=float, default=96000.0, + help="scope sample rate, Hz. Record mode gets unreliable " + "above ~250 kHz (default: %(default)s)") + g.add_argument("--capture", type=float, default=0.25, + help="seconds per capture (default: %(default)s)") + g.add_argument("--scope-range", type=float, default=5.0, + help="scope input range, volts. The speaker output needs " + "headroom for the receiver noise (default: %(default)s)") + g.add_argument("--awg-offset", type=float, default=0.0) + g.add_argument("--force-phase", type=int, choices=(1, -1), default=None, + help="skip quadrature detection and force this sense") + g.add_argument("--force-sideband", type=int, choices=(1, -1), default=None, + help="force the sideband: +1 takes audio from Fs/4 + f (USB), " + "-1 from Fs/4 - f (LSB). Normally detected.") + + g = p.add_argument_group("drive level") + g.add_argument("--start-amplitude", type=float, default=0.010, + help="initial AWG amplitude, volts peak (default: %(default)s)") + g.add_argument("--max-amplitude", type=float, default=1.0, + help="never drive the radio harder than this, volts peak. " + "Measured on the bench the recovered tone sits only " + "15-20 dB over the receiver's own noise even here, so " + "lowering it costs dynamic range (default: %(default)s)") + g.add_argument("--amp-step-db", type=float, default=3.0) + g.add_argument("--min-snr", type=float, default=12.0, + help="a point below this is not used in fits. The rig is " + "limited by the receiver noise, not the scope " + "(default: %(default)s)") + g.add_argument("--max-thd", type=float, default=-40.0) + g.add_argument("--min-image-rejection", type=float, default=15.0) + g.add_argument("--volume", type=int, default=30, + help="AF volume percent for the run. The audio output rises " + "very steeply with this: 54 clipped a 5 V scope range " + "outright (default: %(default)s)") + + g = p.add_argument_group("timing") + g.add_argument("--settle", type=float, default=0.20, + help="seconds after changing the stimulus (default: %(default)s)") + g.add_argument("--rate-settle", type=float, default=2.0, + help="seconds after a sample rate change (default: %(default)s)") + g.add_argument("--eq-points", type=int, default=9) + g.add_argument("--grid-points", type=int, default=31) + g.add_argument("--cw-tol-hz", type=float, default=5.0) + + g = p.add_argument_group("tolerances") + g.add_argument("--rate-tol-pct", type=float, default=1.5, + help="primary criterion: how far a frequency may move between " + "rates (default: %(default)s)") + g.add_argument("--nominal-tol-pct", type=float, default=4.0, + help="secondary: distance from the labelled frequency " + "(default: %(default)s)") + g.add_argument("--am-depth", type=float, default=50.0) + + g = p.add_argument_group("output") + g.add_argument("--out-dir", default=None, + help="default: results/ next to this script") + g.add_argument("--prefix", default="filter_hil") + g.add_argument("--json", default=None) + g.add_argument("--markdown", default=None) + g.add_argument("--no-plots", action="store_true") + g.add_argument("-v", "--verbose", action="store_true") + g.add_argument("-q", "--quiet", action="store_true") + + g = p.add_argument_group("safety") + g.add_argument("--allow-agc-on", action="store_true", + help="run even with AGC engaged. It compresses the very " + "differences being measured; results will be unreliable") + g.add_argument("--no-restore", action="store_true", + help="leave the radio in the test configuration") + g.add_argument("--dry-run", action="store_true", + help="validate arguments and the report path without hardware") + return p + + +def _int_list(text: str, upper: int) -> list: + if text.strip().lower() == "all": + return list(range(upper)) + return [int(x) for x in text.split(",") if x.strip()] + + +def run(args, argv) -> int: + started = time.monotonic() + quiet = args.quiet + + def log(msg: str = "") -> None: + if not quiet: + print(msg, file=sys.stderr) + + out_dir = args.out_dir or os.path.join(os.path.dirname(os.path.abspath(__file__)), + "results") + stamp = time.strftime("%Y%m%d_%H%M%S") + json_path = args.json or os.path.join(out_dir, f"{args.prefix}_{stamp}.json") + md_path = args.markdown or os.path.join(out_dir, f"{args.prefix}_{stamp}.md") + + rates = [int(r) for r in args.rates.split(",") if r.strip()] + selected = [t.strip() for t in args.tests.split(",") if t.strip()] + cw_indices = _int_list(args.cw_filters, len(bt.CW_FILTER_NOMINAL_HZ)) + eq_cells = _int_list(args.eq_cells, bt.EQ_CELL_COUNT) + fw_widths = [int(x) for x in args.fw_widths.split(",") if x.strip()] + + for r in rates: + if r not in bt.SAMPLE_RATES_HZ: + print(f"error: {r} is not a CAT-selectable sample rate " + f"(choose from {bt.SAMPLE_RATES_HZ})", file=sys.stderr) + return 2 + + if args.scope_rate > 250000: + log("WARNING: scope rates above 250 kHz drop samples in record mode.") + + config = {k: v for k, v in vars(args).items()} + config["resolved"] = {"json": json_path, "markdown": md_path, + "rates": rates, "tests": selected} + + if args.dry_run: + doc = report_mod.build_document( + provenance=report_mod.collect_provenance(argv, REPO_ROOT), + config=config, rig={}, baseline={}, final={}, state_restored=True, + residual_diff={}, per_rate={}, comparison={}, checks=[], + duration_s=time.monotonic() - started, warnings=["dry run: no hardware touched"]) + report_mod.write_json(doc, json_path) + report_mod.write_markdown(doc, md_path) + print(f"Dry run OK. Wrote {json_path} and {md_path}") + return 0 + + warnings: list[str] = [] + per_rate: dict = {} + all_checks: list = [] + rig: dict = {} + baseline_summary: dict = {} + final_summary: dict = {} + residual: dict = {} + restored = False + + cfg = Ad2Config(scope_rate_hz=args.scope_rate, capture_s=args.capture, + scope_range_v=args.scope_range, awg_offset_v=args.awg_offset) + + try: + with Ad2(cfg, log=log) as ad2, Radio( + args.cat_port, args.diag_port, args.cat_baud, args.diag_baud, + args.cat_timeout, log=log) as radio: + + ad2.configure_scope() + + log("\n== Preflight ==") + pre, ed = T.run_preflight(radio, ad2, args.allow_agc_on, log) + all_checks += pre.checks + baseline_summary = dict(pre.data["ed"]) + baseline_summary["id"] = pre.data["id"] + + if not ed.agc_off: + if not args.allow_agc_on: + print("\nerror: AGC is on. It compresses the amplitude " + "differences this suite measures, so every filter skirt " + "would read flat. Turn AGC off in the radio's menu, or " + "pass --allow-agc-on to proceed anyway.", file=sys.stderr) + return 2 + warnings.append("AGC was ON - every measurement here is unreliable") + + if ed.sample_rate_hz not in bt.SAMPLE_RATES_HZ: + print(f"error: radio reports sample rate {ed.sample_rate_hz}, which " + f"this suite cannot restore. Set it from the menu first.", + file=sys.stderr) + return 2 + + with RadioStateGuard(radio, ed, log=log) as guard: + if args.no_restore: + guard.restored = True # registered restores will be skipped + + # Register undo before changing anything. + guard.on_restore("sample rate", + lambda r=ed.sample_rate_hz: radio.set_sample_rate( + r, args.rate_settle)) + guard.on_restore("CW filter", + lambda v=ed.cw_filter_index: radio.set_cw_filter(v)) + guard.on_restore("equaliser", + lambda v=list(ed.equalizer_rec): radio.set_eq_all(v)) + guard.on_restore("noise reduction", + lambda v=ed.nr_option: radio.set_nr(v)) + guard.on_restore("notch", lambda v=ed.notch_on: radio.set_notch(v)) + guard.on_restore("volume", + lambda v=ed.audio_volume: radio.set_volume_pct(v)) + mod0 = ed.modulation[ed.active_vfo] + guard.on_restore("modulation", lambda m=mod0: radio.set_modulation(m)) + + # A quiet, unprocessed baseline for measurement. + radio.set_nr(0) + radio.set_notch(0) + if args.volume is not None: + radio.set_volume_pct(args.volume) + + try: + baseline_hi = radio.get_filter_hi_hz() + except CatError: + baseline_hi = max(fw_widths) + warnings.append("could not read the filter bandwidth back " + "(FW;); it will be restored to " + f"{baseline_hi} Hz") + guard.on_restore("filter bandwidth", + lambda v=baseline_hi: radio.set_filter_hi_hz(v)) + + # The fine tune shifts the demodulation centre away from Fs/4, + # often by kilohertz. Without it every injection misses the + # passband entirely. + plan = T.InjectionPlan(rate_hz=ed.sample_rate_hz, + fine_tune_hz=ed.active_fine_tune_hz, + amplitude_v=args.start_amplitude) + log(f"Demodulation centre: |Fs/4 {bt.fs_over_4_hz(ed.sample_rate_hz):.0f} " + f"{ed.active_fine_tune_hz:+.0f} fine tune| = {plan.centre_hz:.0f} Hz") + + # -- rig characterisation, once, at the starting rate ------ + phase_sign = args.force_phase or 1 + sideband_sign = args.force_sideband or 1 + if "iq" in selected: + log("\n== Detecting the wiring order and sideband ==") + res, phase_sign, sideband_sign = T.detect_iq_order( + ad2, plan, args.settle, args.min_image_rejection, + args.force_phase, args.max_amplitude, log) + all_checks += res.checks + rig.update(res.data) + if not res.checks[0].passed: + log("Cannot proceed without a usable quadrature sense.") + return 1 + plan.phase_sign = phase_sign + plan.sideband_sign = sideband_sign + + amplitude = args.start_amplitude + if "level" in selected: + log("\n== Choosing a drive level ==") + res, amplitude = T.autolevel( + ad2, plan, args.settle, args.start_amplitude, + args.max_amplitude, args.amp_step_db, args.min_snr, + args.max_thd, log) + all_checks += res.checks + if not res.checks[0].passed: + warnings.append(res.checks[0].message) + plan.amplitude_v = amplitude + + rig.update({ + "drive_amplitude_v": amplitude, + "scope_rate_hz": args.scope_rate, + "capture_s": args.capture, + "scope_range_v": args.scope_range, + }) + + grid = geom_grid(120.0, 4400.0, args.grid_points) + + # -- per rate ---------------------------------------------- + for rate in rates: + log(f"\n===== {rate} sps =====") + if rate != radio.get_sample_rate(): + radio.set_sample_rate(rate, args.rate_settle) + plan.rate_hz = rate + plan.fine_tune_hz = radio.dump_ed().active_fine_tune_hz + plan.sidetone_hz = 0.0 + plan.mapping_correction_hz = 0.0 + + bucket: dict = { + "rate_hz": rate, + "fs_over_4_hz": bt.fs_over_4_hz(rate), + "audio_rate_hz": bt.audio_rate_hz(rate), + } + + inj = T.Injector(ad2, plan, args.settle, args.min_snr, args.max_thd) + + if "map" in selected: + log("-- Fs/4 mapping --") + res = T.calibrate_mapping(ad2, plan, args.settle, log) + all_checks += res.checks + bucket["mapping"] = res.data + if not all(c.passed for c in res.checks): + log("Mapping failed; skipping the rest of this rate.") + bucket["skipped"] = "mapping_failed" + per_rate[str(rate)] = bucket + continue + + reference = None + if "ref" in selected: + log("-- Reference sweep --") + reference = T.reference_sweep(inj, grid, log) + all_checks += reference.checks + bucket["reference_sweep"] = reference.data + + if "ssb" in selected: + log("-- SSB filter (control) --") + res = T.test_ssb_filter(radio, inj, fw_widths, baseline_hi, log) + all_checks += res.checks + bucket["ssb_filter"] = res.data + + if "eq" in selected and reference is not None: + log("-- Equaliser cells --") + res = T.test_equalizer_cells(radio, inj, reference, + eq_cells, args.eq_points, + baseline_hi, log) + all_checks += res.checks + bucket["equalizer_cells"] = res.data + + if "cw" in selected: + log("-- CW audio filters --") + radio.enter_cw() + time.sleep(0.5) + # Bypass the filter under test before calibrating, or the + # mapping probes are measured through it and the ones + # outside its passband come back as noise. + radio.set_cw_filter(bt.CW_FILTER_OFF) + plan.sidetone_hz = radio.sidetone_shift_hz(ed, in_cw=True) + plan.mapping_correction_hz = 0.0 + cw_map = T.calibrate_mapping(ad2, plan, args.settle, log) + bucket["cw_mapping"] = cw_map.data + if all(c.passed for c in cw_map.checks): + res = T.test_cw_filters(radio, inj, cw_indices, + args.cw_tol_hz, baseline_hi, + log) + all_checks += res.checks + bucket["cw_filters"] = res.data + else: + all_checks += cw_map.checks + log("CW mapping failed; skipping the CW filters.") + radio.set_modulation(mod0) + time.sleep(0.5) + plan.sidetone_hz = 0.0 + plan.mapping_correction_hz = 0.0 + + if "am" in selected: + if ed.modulation[ed.active_vfo] == MOD_AM or True: + log("-- AM DC blocker --") + radio.set_modulation(MOD_AM) + time.sleep(0.5) + am_plan = T.InjectionPlan( + rate_hz=rate, fine_tune_hz=plan.fine_tune_hz, + phase_sign=plan.phase_sign, + sideband_sign=plan.sideband_sign, + amplitude_v=plan.amplitude_v) + res = T.test_am_dc_blocker( + ad2, am_plan, args.settle, args.am_depth, + args.min_snr, log) + all_checks += res.checks + bucket["am_dc_blocker"] = res.data + radio.set_modulation(mod0) + time.sleep(0.5) + + per_rate[str(rate)] = bucket + + # -- cross-rate comparison --------------------------------- + log("\n== Comparing rates ==") + comparison, cmp_checks = T.compare_rates( + per_rate, args.rate_tol_pct, args.nominal_tol_pct) + all_checks += cmp_checks + + ad2.awg_off() + + restored = guard.restored and not args.no_restore + if not args.no_restore: + residual = guard.verify() + try: + final_summary = radio.dump_ed().summary() + except CatError: + final_summary = {} + if guard.failures: + warnings += guard.failures + else: + warnings.append("--no-restore: the radio was left in the test " + "configuration") + + except DwfError as exc: + print(f"error: {exc}", file=sys.stderr) + return 2 + except CatError as exc: + print(f"error: {exc}", file=sys.stderr) + return 2 + except KeyboardInterrupt: + print("\naborted - the AWG has been silenced, but the radio may still be " + "in the test configuration", file=sys.stderr) + return 3 + + doc = report_mod.build_document( + provenance=report_mod.collect_provenance(argv, REPO_ROOT, + dwf_version=cfg and ""), + config=config, rig=rig, baseline=baseline_summary, final=final_summary, + state_restored=restored, residual_diff=residual, per_rate=per_rate, + comparison=comparison, checks=all_checks, + duration_s=time.monotonic() - started, warnings=warnings) + + report_mod.write_json(doc, json_path) + doc["artifacts"]["json"] = json_path + + png_paths: list = [] + if not args.no_plots: + try: + if __package__ in (None, ""): + from filter_hil.plot_filter_hil import render_all + else: + from .plot_filter_hil import render_all + png_paths = render_all(doc, out_dir, f"{args.prefix}_{stamp}") + doc["artifacts"]["png"] = png_paths + except Exception as exc: + warnings.append(f"could not render plots: {exc}") + doc["warnings"] = warnings + + report_mod.write_markdown(doc, md_path, png_paths) + doc["artifacts"]["markdown"] = md_path + report_mod.write_json(doc, json_path) + + report_mod.print_summary(doc) + return 0 if doc["summary"]["overall"] == "PASS" else 1 + + +def main() -> int: + argv = sys.argv[1:] + args = build_parser().parse_args(argv) + return run(args, ["filter_hil_test.py"] + argv) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/code/tools/filter_hil/measure.py b/code/tools/filter_hil/measure.py new file mode 100644 index 0000000..c505618 --- /dev/null +++ b/code/tools/filter_hil/measure.py @@ -0,0 +1,368 @@ +"""Tone metrology and curve-feature extraction for the filter HIL suite. + +The suite measures filter responses by injecting a tone and reading the level of +that tone out of the demodulated audio. Everything here is about doing that +accurately enough to compare two sample rates: the shift being hunted is 8.125 % +in frequency, and the tolerance is 1.5 %, so amplitude estimates need to be good +to a small fraction of a decibel and frequency estimates to a fraction of a bin. + +The FFT approach is lifted from ``code/tools/receive_chain_test.py`` - Hann +window with coherent-gain correction, plus parabolic interpolation for sub-bin +peak location. Peak picking in the time domain, which some of the older tools +use, is not good enough here: a sine sampled at 6 points per cycle can read over +a decibel low depending on where the samples land. +""" + +from __future__ import annotations + +import math +from dataclasses import dataclass, field +from typing import Callable, Sequence + +import numpy as np + +from .ad2 import Capture + +# Levels below this are the float noise of the measurement, not signal. +FLOOR_DBV = -140.0 + + +def _to_db(x: float) -> float: + return 20.0 * math.log10(max(float(x), 1e-15)) + + +def spectrum_dbv(samples: np.ndarray, fs_hz: float) -> tuple[np.ndarray, np.ndarray]: + """Return (freqs_hz, amplitude) of a real signal. + + Amplitude is in volts peak, corrected for the Hann window's coherent gain, + so a 1 V amplitude sine reads 1.0 at its own frequency. + """ + n = len(samples) + if n < 16: + return np.zeros(0), np.zeros(0) + ac = samples - np.mean(samples) + window = np.hanning(n) + coherent_gain = window.sum() / n + spec = np.fft.rfft(ac * window) / (n * coherent_gain) * 2.0 + freqs = np.fft.rfftfreq(n, d=1.0 / fs_hz) + return freqs, np.abs(spec) + + +def parabolic_peak(mag: np.ndarray, idx: int) -> float: + """Sub-bin offset of a peak, by fitting a parabola to its three points.""" + if idx <= 0 or idx >= len(mag) - 1: + return 0.0 + a, b, c = mag[idx - 1], mag[idx], mag[idx + 1] + denom = a - 2.0 * b + c + if denom == 0.0: + return 0.0 + return float(0.5 * (a - c) / denom) + + +def correlate_amplitude(samples: np.ndarray, fs_hz: float, f_hz: float) -> float: + """Amplitude of a known-frequency component, by windowed correlation. + + Reading the tallest FFT bin costs up to 1.4 dB when the tone falls between + bins - Hann's scalloping loss. That cancels when two captures are compared at + the same frequency, which is how this suite mostly works, but not when an + absolute level is wanted. Correlating against a complex exponential at the + measured frequency has no such error. + """ + n = len(samples) + if n < 16: + return 0.0 + ac = samples - np.mean(samples) + window = np.hanning(n) + phase = 2.0 * np.pi * f_hz * np.arange(n) / fs_hz + ref = np.exp(-1j * phase) + return float(2.0 * np.abs(np.sum(ac * window * ref)) / window.sum()) + + +def band_amplitude(freqs: np.ndarray, mag: np.ndarray, f0_hz: float, + bw_hz: float) -> tuple[float, float]: + """Peak amplitude within +/- bw_hz of f0_hz, and its interpolated frequency. + + A window rather than a single bin, because the radio's audio frequency can + differ from the requested one by a few Hz (the Fs/4 mapping is measured, not + assumed) and because a Hann window spreads a tone over several bins. + """ + if freqs.size == 0: + return 0.0, f0_hz + sel = np.where(np.abs(freqs - f0_hz) <= bw_hz)[0] + if sel.size == 0: + return 0.0, f0_hz + local = int(sel[np.argmax(mag[sel])]) + delta = parabolic_peak(mag, local) + df = freqs[1] - freqs[0] + return float(mag[local]), float((local + delta) * df) + + +@dataclass +class ToneMeasurement: + """One tone level read out of one capture.""" + + f_target_hz: float + f_measured_hz: float + amplitude_v: float + level_dbv: float + rms_v: float + peak_v: float + dc_v: float + snr_db: float + thd_db: float + clipped: bool + lost: int + corrupted: int + valid: bool + reason: str = "" + + +def measure_tone(cap: Capture, f_expect_hz: float, *, scope_range_v: float, + clip_margin: float = 0.90, search_bw_hz: float = 60.0, + n_harmonics: int = 5, min_snr_db: float = 20.0, + max_thd_db: float = -30.0, + thd_invalidates: bool = False) -> ToneMeasurement: + """Measure one tone, and decide whether the measurement can be trusted. + + A point is marked invalid when the capture dropped samples, when the input + clipped, or when the tone is buried. Invalid points are excluded from curve + fits rather than dragging them off. + + ``thd_db`` is always reported but by default does **not** invalidate a + point. Measured through a receiver, the harmonic bins contain the receiver's + own noise as much as any real distortion, so at the 15-20 dB SNR this rig + achieves the figure tracks the noise floor rather than the linearity - and + a little distortion at 2f does not corrupt the level measured at f anyway. + Auto-levelling passes ``thd_invalidates=True`` because there it genuinely is + the signal that the drive has gone too far. + """ + fs = cap.sample_rate_hz + samples = cap.samples + freqs, mag = spectrum_dbv(samples, fs) + + # Locate the tone from the spectrum, then read its amplitude by correlating + # at that frequency - the FFT bin alone is up to 1.4 dB low off-bin. + _, f_measured = band_amplitude(freqs, mag, f_expect_hz, search_bw_hz) + amplitude = correlate_amplitude(samples, fs, f_measured) + dc = float(np.mean(samples)) + ac = samples - dc + rms = float(np.sqrt(np.mean(ac ** 2))) + peak = float(np.max(np.abs(samples))) if samples.size else 0.0 + + # Noise = everything above 20 Hz that is not the tone or its harmonics. + df = freqs[1] - freqs[0] if freqs.size > 1 else 1.0 + mask = freqs > 20.0 + for k in range(1, n_harmonics + 1): + fk = f_measured * k + if fk < fs / 2: + mask &= np.abs(freqs - fk) > max(search_bw_hz, 3 * df) + noise_power = float(np.sum(mag[mask] ** 2)) + tone_power = amplitude ** 2 + snr = 10.0 * math.log10(tone_power / noise_power) if noise_power > 0 and tone_power > 0 else -99.0 + + # Harmonic distortion, relative to the fundamental. + harm_power = 0.0 + for k in range(2, n_harmonics + 1): + fk = f_measured * k + if fk < fs / 2: + hk, _ = band_amplitude(freqs, mag, fk, max(search_bw_hz, 3 * df)) + harm_power += hk ** 2 + thd = 10.0 * math.log10(harm_power / tone_power) if tone_power > 0 and harm_power > 0 else -99.0 + + clipped = peak >= clip_margin * scope_range_v + + reasons = [] + if cap.lost or cap.corrupted: + reasons.append(f"capture dropped {cap.lost} lost / {cap.corrupted} corrupted samples") + if clipped: + reasons.append(f"peak {peak:.3f} V exceeds {clip_margin:.0%} of the {scope_range_v} V range") + if snr < min_snr_db: + reasons.append(f"SNR {snr:.1f} dB below {min_snr_db:.1f} dB") + if thd_invalidates and thd > max_thd_db: + reasons.append(f"THD {thd:.1f} dB above {max_thd_db:.1f} dB") + + return ToneMeasurement( + f_target_hz=f_expect_hz, + f_measured_hz=f_measured, + amplitude_v=amplitude, + level_dbv=_to_db(amplitude), + rms_v=rms, + peak_v=peak, + dc_v=dc, + snr_db=snr, + thd_db=thd, + clipped=clipped, + lost=cap.lost, + corrupted=cap.corrupted, + valid=not reasons, + reason="; ".join(reasons), + ) + + +def dominant_tone(cap: Capture, f_min_hz: float = 50.0, + f_max_hz: float | None = None) -> tuple[float, float]: + """Frequency and amplitude of the strongest component in a band. + + Used by the Fs/4 mapping calibration, which has to find where the audio + actually landed rather than look where it was expected. + """ + freqs, mag = spectrum_dbv(cap.samples, cap.sample_rate_hz) + if freqs.size == 0: + return 0.0, 0.0 + hi = f_max_hz if f_max_hz is not None else cap.sample_rate_hz / 2 + sel = np.where((freqs >= f_min_hz) & (freqs <= hi))[0] + if sel.size == 0: + return 0.0, 0.0 + idx = int(sel[np.argmax(mag[sel])]) + df = freqs[1] - freqs[0] + return float((idx + parabolic_peak(mag, idx)) * df), float(mag[idx]) + + +# --- grids and curve features --------------------------------------------- + +def geom_grid(f_lo_hz: float, f_hi_hz: float, n: int) -> np.ndarray: + """Geometrically spaced frequencies - constant fractional resolution.""" + return np.geomspace(f_lo_hz, f_hi_hz, n) + + +def peak_from_three(freqs: Sequence[float], levels_db: Sequence[float]) -> float: + """Interpolated peak of a resonance, fitted in (log f, dB). + + A bandpass response is close to parabolic in log-frequency near its peak, so + fitting the three highest points there locates the centre far better than + taking the largest sample - which would quantise to the probe grid. + """ + f = np.asarray(freqs, dtype=float) + y = np.asarray(levels_db, dtype=float) + if f.size < 3: + return float(f[int(np.argmax(y))]) if f.size else float("nan") + + i = int(np.argmax(y)) + i = max(1, min(i, f.size - 2)) + x = np.log(f[i - 1:i + 2]) + yy = y[i - 1:i + 2] + denom = yy[0] - 2.0 * yy[1] + yy[2] + if denom == 0.0: + return float(f[i]) + delta = 0.5 * (yy[0] - yy[2]) / denom + # Guard against a fit that runs away when the three points are nearly flat. + if not np.isfinite(delta) or abs(delta) > 1.0: + return float(f[i]) + step = x[1] - x[0] + return float(np.exp(x[1] + delta * step)) + + +def interpolate_crossing(f_lo: float, db_lo: float, f_hi: float, db_hi: float, + target_db: float) -> float: + """Linear interpolation for where a response crosses a level.""" + if db_hi == db_lo: + return f_lo + return f_lo + (target_db - db_lo) * (f_hi - f_lo) / (db_hi - db_lo) + + +def find_crossing(probe: Callable[[float], float], target_db: float, + f_lo_hz: float, f_hi_hz: float, tol_hz: float = 5.0, + max_iter: int = 12) -> tuple[float, list[tuple[float, float]]]: + """Bisect a monotonically falling response for where it crosses target_db. + + Returns the crossing frequency and every (frequency, level) pair probed, so + the report can show how the number was arrived at. + + The caller must supply a bracket where the response is above the target at + f_lo and below it at f_hi; returns NaN if that does not hold, rather than + converging on nonsense. + """ + trace: list[tuple[float, float]] = [] + + def sample(f: float) -> float: + db = probe(f) + trace.append((f, db)) + return db + + lo, hi = float(f_lo_hz), float(f_hi_hz) + db_lo = sample(lo) + db_hi = sample(hi) + + # A probe can come back NaN because the tone dropped below the noise, which + # is what the far side of a filter skirt looks like. Bisect towards it as if + # it were deep in the stopband, but never interpolate through it - the + # crossing is worked out at the end from the finite probes only. + def below(db: float) -> bool: + return (not np.isfinite(db)) or db <= target_db + + if np.isfinite(db_lo) and db_lo < target_db: + return float("nan"), trace + if np.isfinite(db_hi) and db_hi > target_db: + return float("nan"), trace + + for _ in range(max_iter): + if hi - lo <= tol_hz: + break + mid = 0.5 * (lo + hi) + if below(sample(mid)): + hi = mid + else: + lo = mid + + finite = sorted((f, db) for f, db in trace if np.isfinite(db)) + for (f0, d0), (f1, d1) in zip(finite, finite[1:]): + if d0 >= target_db >= d1: + return interpolate_crossing(f0, d0, f1, d1, target_db), trace + return float("nan"), trace + + +def bandwidth_3db(freqs: Sequence[float], levels_db: Sequence[float]) -> tuple[float, float, float]: + """(-3 dB low edge, high edge, Q) of a sampled bandpass response. + + Interpolates between grid points on each side of the peak. Returns NaNs when + the sweep does not actually straddle the -3 dB level on both sides. + """ + f = np.asarray(freqs, dtype=float) + y = np.asarray(levels_db, dtype=float) + if f.size < 3: + return float("nan"), float("nan"), float("nan") + + order = np.argsort(f) + f, y = f[order], y[order] + i = int(np.argmax(y)) + target = y[i] - 3.0 + + lo = float("nan") + for j in range(i, 0, -1): + if y[j - 1] <= target <= y[j]: + lo = interpolate_crossing(f[j - 1], y[j - 1], f[j], y[j], target) + break + + hi = float("nan") + for j in range(i, f.size - 1): + if y[j + 1] <= target <= y[j]: + hi = interpolate_crossing(f[j], y[j], f[j + 1], y[j + 1], target) + break + + if not (np.isfinite(lo) and np.isfinite(hi)) or hi <= lo: + return lo, hi, float("nan") + centre = peak_from_three(f, y) + return lo, hi, float(centre / (hi - lo)) + + +def stats(values: Sequence[float], unit: str = "hz") -> dict: + """Summary statistics, keyed the way flag_timing.py keys them.""" + arr = np.asarray([v for v in values if np.isfinite(v)], dtype=float) + if arr.size == 0: + return {"count": 0} + return { + "count": int(arr.size), + f"min_{unit}": float(np.min(arr)), + f"max_{unit}": float(np.max(arr)), + f"mean_{unit}": float(np.mean(arr)), + f"median_{unit}": float(np.median(arr)), + f"p95_{unit}": float(np.percentile(arr, 95)), + f"stddev_{unit}": float(np.std(arr)), + } + + +def pct_delta(reference: float, other: float) -> float: + """Percentage change from reference to other.""" + if not np.isfinite(reference) or reference == 0.0 or not np.isfinite(other): + return float("nan") + return 100.0 * (other - reference) / reference diff --git a/code/tools/filter_hil/plot_filter_hil.py b/code/tools/filter_hil/plot_filter_hil.py new file mode 100644 index 0000000..729221a --- /dev/null +++ b/code/tools/filter_hil/plot_filter_hil.py @@ -0,0 +1,370 @@ +#!/usr/bin/env python3 +"""Render figures from a filter HIL results file. + +Takes the JSON written by ``filter_hil_test.py`` and produces the PNGs the +Markdown report embeds. Kept separate from the measurement so figures can be +regenerated - restyled, re-cropped, argued about - long after the rig has been +packed away, which is the same split as flag_timing.py and plot_flag_timing.py. + + python3 plot_filter_hil.py results/filter_hil_20260728_101500.json +""" + +from __future__ import annotations + +import argparse +import json +import os +import sys + +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt +import numpy as np + +if __package__ in (None, ""): + sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + from filter_hil import bandtable as bt +else: + from . import bandtable as bt + +DPI = 110 +RATE_STYLE = {0: dict(ls="-", lw=1.8), 1: dict(ls="--", lw=1.3)} + + +def _footer(fig, doc: dict) -> None: + """Stamp provenance under every figure so a stray PNG is still traceable.""" + p = doc.get("provenance", {}) + rig = doc.get("rig", {}) + bits = [ + doc.get("generated_utc", ""), + f"commit {p.get('git_commit', '?')}" + ("+dirty" if p.get("git_dirty") else ""), + rig.get("wiring", ""), + f"drive {rig.get('drive_amplitude_v', 0)*1000:.0f} mV", + ] + fig.text(0.5, 0.012, " | ".join(b for b in bits if b), ha="center", fontsize=7, + bbox=dict(boxstyle="round", facecolor="wheat", alpha=0.5)) + + +def _rates(doc: dict) -> list: + return sorted(doc.get("rates", {}), key=lambda r: -int(r)) + + +def _save(fig, out_dir: str, name: str, paths: list) -> None: + os.makedirs(out_dir, exist_ok=True) + path = os.path.join(out_dir, name) + fig.savefig(path, dpi=DPI, bbox_inches="tight") + plt.close(fig) + paths.append(path) + print(path) + + +def plot_cw_overlay(doc: dict, out_dir: str, prefix: str, paths: list) -> None: + """Both rates on one axis, with the shift the old firmware would have shown. + + This is the figure to look at first: if the solid and dashed curves for a + given filter lie on top of each other and well away from the dotted + prediction, the filters are tracking the sample rate correctly. + """ + rates = _rates(doc) + have = [r for r in rates if doc["rates"][r].get("cw_filters")] + if not have: + return + + fig, ax = plt.subplots(figsize=(11, 6.5)) + colors = plt.cm.viridis(np.linspace(0, 0.85, len(bt.CW_FILTER_NOMINAL_HZ))) + + for ri, rate in enumerate(have): + for f in doc["rates"][rate]["cw_filters"]["filters"]: + k = f["index"] + # Merge the bisection probes into the coarse sweep. A 12 pole + # Chebyshev falls from 0 to -40 dB between adjacent coarse points, + # so without them the plot shows a flat line and a cliff; the + # bisection is exactly where the interesting detail was measured. + pts = [(p["f_audio_hz"], p["resp_db"]) for p in f["points"] + if p["resp_db"] is not None] + pts += [(t[0], t[1]) for t in f.get("bisection_trace", []) + if t[1] is not None] + if not pts: + continue + pts = sorted(set(pts)) + x, y = zip(*sorted(pts)) + ax.semilogx(x, y, color=colors[k], **RATE_STYLE.get(ri, RATE_STYLE[1]), + label=f"{f['nominal_hz']:.0f} Hz @ {int(rate)//1000}k") + + # Where the corners would sit if the coefficient tables were still frozen. + if len(have) > 1: + base = have[0] + for f in doc["rates"][base]["cw_filters"]["filters"]: + c = f.get("corner_3db_hz") + if c: + ax.axvline(c * bt.LEGACY_RATE_RATIO, color="red", ls=":", lw=1.0, alpha=0.6) + ax.plot([], [], color="red", ls=":", lw=1.0, + label=f"where the old frozen tables would put them " + f"({bt.LEGACY_DELTA_PCT:.2f}%)") + + ax.axhline(-3.0, color="k", lw=0.8, alpha=0.5) + ax.set_xlabel("audio frequency (Hz)") + ax.set_ylabel("filter response (dB)") + ax.set_ylim(-45, 6) + ax.set_xlim(200, 5000) + ax.grid(alpha=0.3, which="both") + ax.legend(fontsize=7, ncol=2, loc="lower left") + solid = f"{int(have[0])//1000}k solid" + dashed = f", {int(have[1])//1000}k dashed" if len(have) > 1 else "" + ax.set_title(f"CW audio filters at both sample rates ({solid}{dashed})") + _footer(fig, doc) + _save(fig, out_dir, f"{prefix}_cw_overlay.png", paths) + + +def plot_eq_centres(doc: dict, out_dir: str, prefix: str, paths: list) -> None: + """Measured versus labelled centre, and the error per cell.""" + rates = _rates(doc) + have = [r for r in rates if doc["rates"][r].get("equalizer_cells")] + if not have: + return + + fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(11, 8)) + + for ri, rate in enumerate(have): + cells = doc["rates"][rate]["equalizer_cells"]["cells"] + nom = [c["nominal_hz"] for c in cells if c["peak_hz"]] + meas = [c["peak_hz"] for c in cells if c["peak_hz"]] + ax1.loglog(nom, meas, "o" if ri == 0 else "s", ms=5, + label=f"{int(rate)//1000}k sps", alpha=0.8) + err = [100.0 * (m - n) / n for n, m in zip(nom, meas)] + idx = [c["index"] for c in cells if c["peak_hz"]] + ax2.plot(idx, err, "o-" if ri == 0 else "s--", ms=4, + label=f"{int(rate)//1000}k sps", alpha=0.85) + + lim = [150, 5000] + ax1.plot(lim, lim, "k-", lw=0.8, alpha=0.5, label="ideal") + ax1.set_xlabel("labelled centre (Hz)") + ax1.set_ylabel("measured peak (Hz)") + ax1.set_title("Equaliser cell centres") + ax1.grid(alpha=0.3, which="both") + ax1.legend(fontsize=8) + + tol = doc.get("config", {}).get("nominal_tol_pct", 4.0) + ax2.axhspan(-tol, tol, color="green", alpha=0.12, + label=f"nominal tolerance +/-{tol:.0f}%") + ax2.axhline(bt.LEGACY_DELTA_PCT, color="red", ls=":", lw=1.2, + label=f"old frozen-table shift ({bt.LEGACY_DELTA_PCT:.2f}%)") + ax2.axhline(0.0, color="k", lw=0.8) + ax2.set_xlabel("equaliser cell") + ax2.set_ylabel("error vs labelled (%)") + ax2.set_xticks(range(bt.EQ_CELL_COUNT)) + ax2.grid(alpha=0.3) + ax2.legend(fontsize=8) + + _footer(fig, doc) + plt.tight_layout(rect=[0, 0.035, 1, 1]) + _save(fig, out_dir, f"{prefix}_eq_centres.png", paths) + + +def plot_eq_cells(doc: dict, out_dir: str, prefix: str, paths: list) -> None: + """The response of every cell, per rate.""" + for rate in _rates(doc): + cells = doc["rates"][rate].get("equalizer_cells", {}).get("cells") + if not cells: + continue + fig, ax = plt.subplots(figsize=(11, 6)) + colors = plt.cm.turbo(np.linspace(0, 1, bt.EQ_CELL_COUNT)) + for c in cells: + pts = [(p["f_audio_hz"], p["level_dbv"]) for p in c["points"] + if p.get("level_dbv") is not None and p.get("valid")] + if len(pts) < 2: + continue + x, y = zip(*sorted(pts)) + y = np.asarray(y) - max(y) + ax.semilogx(x, y, color=colors[c["index"]], lw=1.4) + if c["peak_hz"]: + ax.axvline(c["nominal_hz"], color=colors[c["index"]], lw=0.6, alpha=0.4) + ax.set_xlabel("audio frequency (Hz)") + ax.set_ylabel("normalised response (dB)") + ax.set_ylim(-25, 3) + ax.grid(alpha=0.3, which="both") + ax.set_title(f"Equaliser cells at {int(rate)//1000} ksps " + f"(vertical lines are the labelled centres)") + _footer(fig, doc) + _save(fig, out_dir, f"{prefix}_eq_cells_{rate}.png", paths) + + +def plot_ssb_control(doc: dict, out_dir: str, prefix: str, paths: list) -> None: + """The control chart: commanded bandwidth against measured edge.""" + rates = _rates(doc) + have = [r for r in rates if doc["rates"][r].get("ssb_filter")] + if not have: + return + + fig, ax = plt.subplots(figsize=(9, 6)) + for ri, rate in enumerate(have): + rows = doc["rates"][rate]["ssb_filter"]["settings"] + x = [r["fw_hz"] for r in rows if r["hi_edge_6db_hz"]] + y = [r["hi_edge_6db_hz"] for r in rows if r["hi_edge_6db_hz"]] + ax.plot(x, y, "o-" if ri == 0 else "s--", ms=6, + label=f"{int(rate)//1000}k sps") + lo, hi = 1500, 3400 + ax.plot([lo, hi], [lo, hi], "k-", lw=0.8, alpha=0.5, label="ideal") + ax.set_xlabel("commanded bandwidth, FW (Hz)") + ax.set_ylabel("measured -6 dB edge (Hz)") + ax.set_title("SSB convolution filter - the control\n" + "This filter always derived its coefficients from the true sample " + "rate,\nso a shift here means the rig or the analysis is wrong, " + "not the firmware") + ax.grid(alpha=0.3) + ax.legend(fontsize=8) + _footer(fig, doc) + plt.tight_layout(rect=[0, 0.04, 1, 1]) + _save(fig, out_dir, f"{prefix}_ssb_control.png", paths) + + +def plot_am(doc: dict, out_dir: str, prefix: str, paths: list) -> None: + """AM DC blocker envelope response.""" + rates = _rates(doc) + have = [r for r in rates if doc["rates"][r].get("am_dc_blocker")] + if not have: + return + fig, ax = plt.subplots(figsize=(9, 5.5)) + for ri, rate in enumerate(have): + d = doc["rates"][rate]["am_dc_blocker"] + pts = [(p["f_mod_hz"], p["resp_db"]) for p in d["points"] + if p["resp_db"] is not None] + if not pts: + continue + x, y = zip(*sorted(pts)) + ax.semilogx(x, y, "o-" if ri == 0 else "s--", ms=4, + label=f"{int(rate)//1000}k sps " + f"(-3 dB at {d.get('corner_3db_hz', float('nan')):.1f} Hz)") + ax.axhline(-3.0, color="k", lw=0.8, alpha=0.6) + ax.axvline(bt.AM_DC_BLOCKER_CORNER_HZ, color="green", ls="--", lw=1.0, + label=f"design corner {bt.AM_DC_BLOCKER_CORNER_HZ:.0f} Hz") + ax.set_xlabel("modulation frequency (Hz)") + ax.set_ylabel("envelope response (dB)") + ax.set_title("AM demodulator DC blocker") + ax.grid(alpha=0.3, which="both") + ax.legend(fontsize=8) + _footer(fig, doc) + _save(fig, out_dir, f"{prefix}_am_dc_blocker.png", paths) + + +def plot_summary(doc: dict, out_dir: str, prefix: str, paths: list) -> None: + """Every cross-rate result on one chart, against the two reference lines.""" + comp = doc.get("comparison", {}) + rows = [] + for group, key, label in (("cw_filters", "corner_3db_hz", "CW"), + ("eq_cells", "peak_hz", "EQ"), + ("ssb_filter", "hi_edge_6db_hz", "SSB")): + for r in comp.get(group, []): + if r.get("delta_pct") is not None: + rows.append((f"{label} {r['nominal_hz']:.0f}", r["delta_pct"], + r["verdict"])) + if not rows: + return + + labels, deltas, verdicts = zip(*rows) + fig, ax = plt.subplots(figsize=(10, max(5, 0.28 * len(rows) + 2))) + y = np.arange(len(rows)) + colors = ["tab:green" if v == "PASS" else "tab:red" for v in verdicts] + ax.barh(y, deltas, color=colors, alpha=0.85) + # A row that measured exactly zero would otherwise draw no bar at all and + # read as missing data rather than as the best possible result. + ax.scatter(deltas, y, s=14, color=colors, zorder=3) + + tol = doc.get("config", {}).get("rate_tol_pct", 1.5) + ax.axvspan(-tol, tol, color="green", alpha=0.12, label=f"tolerance +/-{tol}%") + ax.axvline(0.0, color="k", lw=1.0) + ax.axvline(bt.LEGACY_DELTA_PCT, color="red", ls=":", lw=1.4, + label=f"old frozen-table shift ({bt.LEGACY_DELTA_PCT:.3f}%)") + + ax.set_yticks(y) + ax.set_yticklabels(labels, fontsize=7) + ax.invert_yaxis() + ax.set_xlabel("frequency change between sample rates (%)") + s = doc["summary"] + ax.set_title(f"Rate independence: {s['overall']} " + f"({s['passed']} passed, {s['failed']} failed, {s['skipped']} skipped)") + ax.grid(alpha=0.3, axis="x") + ax.legend(fontsize=8, loc="lower right") + _footer(fig, doc) + plt.tight_layout(rect=[0, 0.04, 1, 1]) + _save(fig, out_dir, f"{prefix}_summary.png", paths) + + +def plot_iq_detect(doc: dict, out_dir: str, prefix: str, paths: list) -> None: + """The two quadrature trials, for when the wiring detection misbehaves.""" + trials = doc.get("rig", {}).get("trials") + if not trials: + return + fig, ax = plt.subplots(figsize=(9, 4.5)) + names, levels, colors = [], [], [] + chosen_phase = doc["rig"].get("phase_sign") + chosen_side = doc["rig"].get("sideband_sign") + for key, t in sorted(trials.items()): + ph, side = t.get("phase_sign", 0), t.get("sideband_sign", 0) + names.append(f"W2 {ph*90:+d}\n{'above' if side > 0 else 'below'}") + levels.append(t.get("level_dbv") or -140.0) + colors.append("tab:green" if (ph == chosen_phase and side == chosen_side) + else "tab:blue") + ax.bar(names, levels, color=colors, alpha=0.85) + ax.set_xlabel("W2 phase / side of the demodulation centre") + ax.set_ylabel("recovered audio level (dBV)") + rej = doc["rig"].get("image_rejection_db") + ax.set_title(f"I/Q wiring detection\n{doc['rig'].get('wiring', '')}" + + (f" - image rejection {rej:.1f} dB" if rej else "")) + ax.grid(alpha=0.3, axis="y") + _footer(fig, doc) + plt.tight_layout(rect=[0, 0.06, 1, 1]) + _save(fig, out_dir, f"{prefix}_iq_detect.png", paths) + + +RENDERERS = { + "summary": plot_summary, + "cw": plot_cw_overlay, + "eq": lambda *a: (plot_eq_centres(*a), plot_eq_cells(*a)), + "ssb": plot_ssb_control, + "am": plot_am, + "iq": plot_iq_detect, +} + + +def render_all(doc: dict, out_dir: str, prefix: str, + only: list | None = None) -> list: + """Render every figure the document supports; returns the PNG paths.""" + paths: list = [] + for name, fn in RENDERERS.items(): + if only and name not in only: + continue + try: + fn(doc, out_dir, prefix, paths) + except Exception as exc: + print(f"warning: could not render {name}: {exc}", file=sys.stderr) + return paths + + +def main() -> int: + p = argparse.ArgumentParser(description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("json_file") + p.add_argument("--out-dir", default=None) + p.add_argument("--prefix", default=None) + p.add_argument("--only", default=None, + help=f"comma-separated subset of {','.join(RENDERERS)}") + args = p.parse_args() + + with open(args.json_file) as fh: + doc = json.load(fh) + + out_dir = args.out_dir or os.path.dirname(os.path.abspath(args.json_file)) + prefix = args.prefix or os.path.splitext(os.path.basename(args.json_file))[0] + only = [x.strip() for x in args.only.split(",")] if args.only else None + + paths = render_all(doc, out_dir, prefix, only) + if not paths: + print("no figures rendered - does the results file contain any measurements?", + file=sys.stderr) + return 1 + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/code/tools/filter_hil/radio.py b/code/tools/filter_hil/radio.py new file mode 100644 index 0000000..ca35958 --- /dev/null +++ b/code/tools/filter_hil/radio.py @@ -0,0 +1,493 @@ +"""CAT and diagnostic control of the Phoenix radio for the filter HIL suite. + +The radio exposes two USB CDC ports: CAT on the second interface at 38400, and a +diagnostic port on the first at 115200. Commands are terminated with ``;`` in +both directions, with no line ending. + +Two things about the CAT protocol shape this module: + +* **Many writes return nothing.** ``CAT.cpp`` suppresses empty responses, so + waiting for a reply after ``AG``/``MD``/``NR``/``FW``/``SR``/``CF``/``EQ``/``FL`` + costs the full read timeout every time. A sweep issues hundreds of these, so + :data:`SILENT_WRITES` tells :meth:`Radio.cat` to skip the read entirely. + +* **Most radio state is not readable over CAT at all.** AGC, the equaliser and + the sample rate are only visible in the ``ED;`` dump, which the firmware + prints to the *diagnostic* port as plain ``Serial.print`` text. That text is + not a protocol, so :class:`EdSnapshot` parses defensively and keeps the raw + text for the report. + +The suite mutates persisted radio settings, so :class:`RadioStateGuard` records +how to put each one back and runs those restores on the way out, on SIGINT and +at interpreter exit. +""" + +from __future__ import annotations + +import atexit +import re +import time +from dataclasses import dataclass, field +from typing import Callable, Optional, Sequence + +import serial + +CAT_BAUD = 38400 +DIAG_BAUD = 115200 +CAT_PORT = "/dev/ttyACM1" +DIAG_PORT = "/dev/ttyACM0" + +#: Commands whose write form produces no reply. Waiting on these wastes the +#: whole read timeout per command. +SILENT_WRITES = {"AG", "MD", "NR", "NT", "FW", "FL", "SR", "CF", "EQ", "DB", "KS", "MG", "VX", "AI"} + +#: CW sidetone offsets, from Globals.cpp. In CW receive the audio is shifted by +#: the selected offset, so the injection frequency must include it. +CW_TONE_OFFSETS_HZ = (400.0, 562.5, 656.5, 750.0, 843.75) + +#: SR command parameter -> sample rate in Hz. +SR_CAT_ARG = {176400: 0, 192000: 1} +#: ED.sampleRate index -> sample rate in Hz (SDT.h SAMPLE_RATE_* macros). +SR_ED_INDEX = {12: 176400, 13: 192000} + +#: ModulationType enum from SDT.h. +MOD_USB, MOD_LSB, MOD_AM, MOD_SAM = 0, 1, 2, 3 +MOD_NAMES = {MOD_USB: "USB", MOD_LSB: "LSB", MOD_AM: "AM", MOD_SAM: "SAM"} +#: MD command parameter for each modulation. +MOD_TO_MD = {MOD_LSB: 1, MOD_USB: 2, MOD_AM: 4, MOD_SAM: 5} + +EQUALIZER_CELL_COUNT = 14 + +ED_BEGIN = "=== ED Struct Contents ===" +ED_END = "=== End ED Struct ===" + + +class CatError(RuntimeError): + """A CAT command failed or returned an error response.""" + + +def _as_int(text: str, default: int = -1) -> int: + try: + return int(float(text.strip())) + except (ValueError, AttributeError): + return default + + +def _as_float(text: str, default: float = 0.0) -> float: + try: + return float(text.strip()) + except (ValueError, AttributeError): + return default + + +@dataclass +class EdSnapshot: + """Parsed contents of the firmware's ``ED;`` settings dump.""" + + raw: str = "" + fields: dict = field(default_factory=dict) + agc: int = -1 + sample_rate_hz: int = -1 + audio_volume: int = -1 + cw_filter_index: int = -1 + cw_tone_index: int = -1 + nr_option: int = -1 + notch_on: int = -1 + active_vfo: int = 0 + modulation: list = field(default_factory=lambda: [-1, -1]) + current_band: list = field(default_factory=lambda: [-1, -1]) + equalizer_rec: list = field(default_factory=list) + fine_tune_hz: list = field(default_factory=lambda: [0.0, 0.0]) + + @classmethod + def parse(cls, lines: Sequence[str]) -> "EdSnapshot": + """Build a snapshot from the diagnostic port's dump lines. + + Keys on ``name:`` prefixes and ignores anything else, because the + diagnostic port interleaves ``Debug()`` output with the dump. + """ + fields: dict[str, str] = {} + for line in lines: + if ":" not in line: + continue + key, _, value = line.partition(":") + key = key.strip() + if key and re.fullmatch(r"[A-Za-z_][A-Za-z0-9_\[\]]*", key): + fields[key] = value.strip() + + missing = [k for k in ("agc", "sampleRate", "CWFilterIndex", "equalizerRec") + if k not in fields] + if missing: + raise CatError( + f"ED dump did not contain {', '.join(missing)}. " + f"Got {len(fields)} fields; is the diagnostic port right?" + ) + + eq = [_as_int(v) for v in fields.get("equalizerRec", "").split(",") if v.strip()] + sr_index = _as_int(fields.get("sampleRate", "")) + + return cls( + raw="\n".join(lines), + fields=fields, + agc=_as_int(fields.get("agc", "")), + sample_rate_hz=SR_ED_INDEX.get(sr_index, -1), + audio_volume=_as_int(fields.get("audioVolume", "")), + cw_filter_index=_as_int(fields.get("CWFilterIndex", "")), + cw_tone_index=_as_int(fields.get("CWToneIndex", "")), + nr_option=_as_int(fields.get("nrOptionSelect", "")), + notch_on=_as_int(fields.get("ANR_notchOn", "")), + active_vfo=_as_int(fields.get("activeVFO", ""), 0), + modulation=[_as_int(fields.get("modulation[0]", "")), + _as_int(fields.get("modulation[1]", ""))], + current_band=[_as_int(fields.get("currentBand[0]", "")), + _as_int(fields.get("currentBand[1]", ""))], + equalizer_rec=eq, + fine_tune_hz=[_as_float(fields.get("fineTuneFreq_Hz[0]", ""), 0.0), + _as_float(fields.get("fineTuneFreq_Hz[1]", ""), 0.0)], + ) + + def summary(self) -> dict: + """The fields the suite and the report care about.""" + return { + "agc": self.agc, + "sample_rate_hz": self.sample_rate_hz, + "audio_volume": self.audio_volume, + "cw_filter_index": self.cw_filter_index, + "cw_tone_index": self.cw_tone_index, + "nr_option": self.nr_option, + "notch_on": self.notch_on, + "active_vfo": self.active_vfo, + "modulation": list(self.modulation), + "current_band": list(self.current_band), + "equalizer_rec": list(self.equalizer_rec), + "fine_tune_hz": list(self.fine_tune_hz), + } + + def diff(self, other: "EdSnapshot") -> dict: + """Fields that changed between two snapshots.""" + a, b = self.summary(), other.summary() + return {k: {"before": a[k], "after": b[k]} for k in a if a[k] != b[k]} + + @property + def active_fine_tune_hz(self) -> float: + """Fine tune offset applied by the receive chain, in Hz. + + ReceiveProcessing shifts by Fs/4 and then again by this, so it moves the + frequency an injected tone has to sit at. It is whatever the operator + last tuned to and is often several kHz. + """ + return self.fine_tune_hz[self.active_vfo] + + @property + def modulation_name(self) -> str: + return MOD_NAMES.get(self.modulation[self.active_vfo], "?") + + @property + def agc_off(self) -> bool: + """AGCOff is 0 in the AGCMode enum.""" + return self.agc == 0 + + +class Radio: + """Serial control of the radio under test.""" + + def __init__(self, cat_port: str = CAT_PORT, diag_port: Optional[str] = DIAG_PORT, + cat_baud: int = CAT_BAUD, diag_baud: int = DIAG_BAUD, + timeout_s: float = 0.5, log: Callable[[str], None] = print) -> None: + self.cat_port_name = cat_port + self.diag_port_name = diag_port + self.cat_baud = cat_baud + self.diag_baud = diag_baud + self.timeout_s = timeout_s + self.log = log + self.cat: Optional[serial.Serial] = None + self.diag: Optional[serial.Serial] = None + self.round_trips = 0 + self.wait_s = 0.0 + + def __enter__(self) -> "Radio": + self.open() + return self + + def __exit__(self, *exc) -> None: + self.close() + + def open(self) -> None: + try: + self.cat = serial.Serial(self.cat_port_name, self.cat_baud, timeout=self.timeout_s) + except serial.SerialException as exc: + raise CatError(f"could not open the CAT port {self.cat_port_name}: {exc}") from exc + if self.diag_port_name: + try: + self.diag = serial.Serial(self.diag_port_name, self.diag_baud, + timeout=self.timeout_s) + except serial.SerialException as exc: + self.log(f"WARNING: could not open the diagnostic port " + f"{self.diag_port_name}: {exc}") + self.diag = None + time.sleep(0.2) + self.drain_diag() + + def close(self) -> None: + for port in (self.cat, self.diag): + if port is not None and port.is_open: + port.close() + self.cat = self.diag = None + + # -- CAT --------------------------------------------------------------- + + def send(self, cmd: str, expect_reply: Optional[bool] = None) -> Optional[str]: + """Send one CAT command, optionally reading its reply. + + ``expect_reply`` defaults to False for the write forms of commands the + firmware answers with an empty string; see :data:`SILENT_WRITES`. + """ + if self.cat is None: + raise CatError("CAT port is not open") + if not cmd.endswith(";"): + cmd += ";" + + if expect_reply is None: + name = cmd[:2].upper() + is_read = len(cmd) == 3 # "XX;" + expect_reply = is_read or name not in SILENT_WRITES + + self.cat.reset_input_buffer() + self.cat.write(cmd.encode("ascii")) + self.cat.flush() + self.round_trips += 1 + + if not expect_reply: + return None + + started = time.monotonic() + out = [] + deadline = started + self.timeout_s + while time.monotonic() < deadline: + if self.cat.in_waiting: + ch = self.cat.read(1).decode("ascii", errors="replace") + out.append(ch) + if ch == ";": + break + else: + time.sleep(0.002) + self.wait_s += time.monotonic() - started + + reply = "".join(out) + return reply or None + + def expect(self, cmd: str) -> str: + """Send a command that must answer, and reject an error response.""" + reply = self.send(cmd, expect_reply=True) + if reply is None: + raise CatError(f"{cmd!r} produced no reply") + if reply == "?;": + raise CatError(f"{cmd!r} was rejected by the radio") + return reply + + # -- diagnostic port --------------------------------------------------- + + def drain_diag(self) -> None: + if self.diag is not None: + self.diag.reset_input_buffer() + + def read_diag_until(self, sentinel: str, timeout_s: float = 3.0) -> list[str]: + """Collect diagnostic lines until a sentinel appears.""" + if self.diag is None: + raise CatError("the diagnostic port is not open; it is needed to read the ED dump") + lines: list[str] = [] + deadline = time.monotonic() + timeout_s + while time.monotonic() < deadline: + raw = self.diag.readline() + if not raw: + continue + line = raw.decode("ascii", errors="replace").rstrip("\r\n") + lines.append(line) + if sentinel in line: + return lines + raise CatError(f"timed out waiting for {sentinel!r} on the diagnostic port") + + def dump_ed(self, timeout_s: float = 3.0) -> EdSnapshot: + """Ask for the settings dump and parse it off the diagnostic port.""" + self.drain_diag() + self.send("ED;", expect_reply=True) + lines = self.read_diag_until(ED_END, timeout_s) + # Discard anything printed before the dump started. + for i, line in enumerate(lines): + if ED_BEGIN in line: + lines = lines[i + 1:] + break + return EdSnapshot.parse(lines) + + def dump_psd(self, timeout_s: float = 5.0) -> list[float]: + """Read the 512-bin spectrum the firmware prints to the diagnostic port.""" + if self.diag is None: + raise CatError("the diagnostic port is not open; it is needed to read the PSD") + self.drain_diag() + self.send("PD;", expect_reply=True) + values: list[float] = [] + deadline = time.monotonic() + timeout_s + while time.monotonic() < deadline and len(values) < 512: + raw = self.diag.readline() + if not raw: + continue + line = raw.decode("ascii", errors="replace").strip() + if "," in line: + _, _, val = line.partition(",") + try: + values.append(float(val)) + except ValueError: + pass + return values + + # -- radio settings ---------------------------------------------------- + + def get_sample_rate(self) -> int: + reply = self.expect("SR;") + idx = int(reply[2]) + for rate, arg in SR_CAT_ARG.items(): + if arg == idx: + return rate + raise CatError(f"unrecognised SR reply {reply!r}") + + def set_sample_rate(self, rate_hz: int, settle_s: float = 2.0) -> None: + """Switch sample rate and confirm the radio took it. + + ChangeSampleRate() reconfigures the I2S clock and rebuilds the whole DSP + chain, so the settle is not optional. + """ + if rate_hz not in SR_CAT_ARG: + raise CatError(f"{rate_hz} is not a CAT-selectable sample rate") + self.send(f"SR{SR_CAT_ARG[rate_hz]};", expect_reply=False) + time.sleep(settle_s) + actual = self.get_sample_rate() + if actual != rate_hz: + raise CatError(f"asked for {rate_hz} sps but the radio reports {actual}") + + def get_cw_filter(self) -> int: + return int(self.expect("CF;")[2]) + + def set_cw_filter(self, index: int) -> None: + self.send(f"CF{index};", expect_reply=False) + + def get_eq_cell(self, index: int) -> int: + return int(self.expect(f"EQ{index:02d};")[4:7]) + + def set_eq_cell(self, index: int, value: int) -> None: + self.send(f"EQ{index:02d}{value:03d};", expect_reply=False) + + def set_eq_all(self, values: Sequence[int]) -> None: + for i, v in enumerate(values): + self.set_eq_cell(i, int(v)) + + def set_eq_solo(self, index: int, level: int = 100) -> None: + """Leave one equaliser cell up and the rest at zero. + + The cells are summed in parallel with alternating signs, so zeroing the + others isolates this one exactly rather than approximately. + """ + for i in range(EQUALIZER_CELL_COUNT): + self.set_eq_cell(i, level if i == index else 0) + + def set_volume_pct(self, pct: int) -> None: + """Set AF volume. The AG parameter is 0-255 scaled from 0-100 percent.""" + self.send(f"AG0{int(round(pct * 255 / 100)):03d};", expect_reply=False) + + def get_filter_hi_hz(self) -> int: + return int(self.expect("FW;")[2:6]) + + def set_filter_hi_hz(self, hz: int) -> None: + self.send(f"FW{int(hz):04d};", expect_reply=False) + + def get_filter_lo_hz(self) -> int: + return int(self.expect("FL;")[2:6]) + + def set_filter_lo_hz(self, hz: int) -> None: + self.send(f"FL{int(hz):04d};", expect_reply=False) + + def set_nr(self, value: int) -> None: + self.send(f"NR{value};", expect_reply=False) + + def set_notch(self, value: int) -> None: + self.send(f"NT{value};", expect_reply=False) + + def get_mode(self) -> str: + return self.expect("MD;") + + def enter_cw(self) -> None: + self.send("MD3;", expect_reply=False) + + def set_modulation(self, mod: int) -> None: + """Select a demodulator, and leave CW receive if that is where we are.""" + if mod not in MOD_TO_MD: + raise CatError(f"no MD command for modulation {mod}") + self.send(f"MD{MOD_TO_MD[mod]};", expect_reply=False) + + def sidetone_shift_hz(self, ed: EdSnapshot, in_cw: bool) -> float: + """Audio offset applied in CW receive, in Hz. + + In CW the chain shifts by the selected sidetone offset so the beat note + lands where the operator expects, which moves the injection frequency by + the same amount. + """ + if not in_cw: + return 0.0 + idx = ed.cw_tone_index + if 0 <= idx < len(CW_TONE_OFFSETS_HZ): + return CW_TONE_OFFSETS_HZ[idx] + return CW_TONE_OFFSETS_HZ[3] + + +class RadioStateGuard: + """Undo everything the suite changed, however it exits. + + Restores run last-registered-first, so a setting changed twice ends up back + at the value it had before the first change. A restore that raises is logged + and the rest still run; whatever could not be put back shows up in the final + ED diff. + """ + + def __init__(self, radio: Radio, baseline: EdSnapshot, + log: Callable[[str], None] = print) -> None: + self.radio = radio + self.baseline = baseline + self.log = log + self._restores: list[tuple[str, Callable[[], None]]] = [] + self.restored = False + self.residual_diff: dict = {} + self.failures: list[str] = [] + + def __enter__(self) -> "RadioStateGuard": + atexit.register(self.restore) + return self + + def __exit__(self, *exc) -> None: + self.restore() + atexit.unregister(self.restore) + + def on_restore(self, label: str, fn: Callable[[], None]) -> None: + """Register how to undo a change, before making it.""" + self._restores.append((label, fn)) + + def restore(self) -> None: + """Run every registered restore, newest first. Safe to call twice.""" + if self.restored: + return + self.restored = True + for label, fn in reversed(self._restores): + try: + fn() + except Exception as exc: # keep going; a stuck radio is worse + self.failures.append(f"{label}: {exc}") + self.log(f"WARNING: could not restore {label}: {exc}") + self._restores.clear() + + def verify(self) -> dict: + """Re-read the radio and report anything that did not go back.""" + try: + final = self.radio.dump_ed() + except Exception as exc: + self.residual_diff = {"error": str(exc)} + return self.residual_diff + self.residual_diff = self.baseline.diff(final) + return self.residual_diff diff --git a/code/tools/filter_hil/report.py b/code/tools/filter_hil/report.py new file mode 100644 index 0000000..37bfe1f --- /dev/null +++ b/code/tools/filter_hil/report.py @@ -0,0 +1,358 @@ +"""Result assembly and rendering for the filter HIL suite. + +Three tiers, matching the convention the repo's other tools already follow: +a human summary on stdout, a machine-readable JSON document, and a Markdown +report that stitches the numbers together with the generated figures. + +The JSON keeps every raw sweep point, so the report and all its plots can be +regenerated later without the hardware. +""" + +from __future__ import annotations + +import json +import math +import os +import platform +import subprocess +import sys +import time +from datetime import datetime, timezone +from typing import Optional, Sequence + +import numpy as np + +from . import bandtable as bt + +SCHEMA = "phoenix.filter_hil/1" + + +def _run(cmd: Sequence[str], cwd: Optional[str] = None) -> str: + try: + return subprocess.run(cmd, cwd=cwd, capture_output=True, text=True, + timeout=10).stdout.strip() + except Exception: + return "" + + +def collect_provenance(argv: Sequence[str], repo_root: str, + dwf_version: str = "") -> dict: + """Record what was tested and with what, so a result can be traced back.""" + commit = _run(["git", "rev-parse", "--short", "HEAD"], repo_root) + dirty = bool(_run(["git", "status", "--porcelain"], repo_root)) + + build_info = "" + path = os.path.join(repo_root, "code", "src", "PhoenixSketch", "BuildInfo.h") + try: + with open(path) as fh: + for line in fh: + if "GIT_COMMIT_HASH" in line or "BUILD_TIMESTAMP" in line: + build_info += line.strip() + " " + except OSError: + pass + + versions = {"python": platform.python_version()} + for mod in ("numpy", "scipy", "matplotlib", "serial"): + try: + versions[mod] = __import__(mod).__version__ + except Exception: + versions[mod] = "not installed" + + return { + "git_commit": commit, + "git_dirty": dirty, + "build_info": build_info.strip(), + "dwf_version": dwf_version, + "versions": versions, + "command_line": " ".join(argv), + "host": platform.node(), + } + + +def build_document(*, provenance: dict, config: dict, rig: dict, + baseline: dict, final: dict, state_restored: bool, + residual_diff: dict, per_rate: dict, comparison: dict, + checks: Sequence, duration_s: float, + warnings: Sequence[str]) -> dict: + """Assemble the full result document.""" + check_dicts = [c.as_dict() if hasattr(c, "as_dict") else c for c in checks] + + groups: dict[str, str] = {} + for c in check_dicts: + g = c["group"] + if c["skipped"]: + groups.setdefault(g, "SKIPPED") + elif not c["passed"]: + groups[g] = "FAIL" + elif groups.get(g) in (None, "SKIPPED"): + groups[g] = "PASS" + + passed = sum(1 for c in check_dicts if c["passed"] and not c["skipped"]) + failed = sum(1 for c in check_dicts if not c["passed"] and not c["skipped"]) + skipped = sum(1 for c in check_dicts if c["skipped"]) + + overall = "PASS" if failed == 0 and passed > 0 else "FAIL" if failed else "PARTIAL" + + return { + "schema": SCHEMA, + "generated_utc": datetime.now(timezone.utc).isoformat(timespec="seconds"), + "duration_s": round(duration_s, 1), + "provenance": provenance, + "config": config, + "rig": rig, + "radio_baseline": baseline, + "radio_final": final, + "state_restored": state_restored, + "state_residual_diff": residual_diff, + "rates": per_rate, + "comparison": comparison, + "checks": check_dicts, + "warnings": list(warnings), + "summary": { + "overall": overall, + "passed": passed, + "failed": failed, + "skipped": skipped, + "groups": groups, + }, + "artifacts": {}, + } + + +def _jsonable(o): + """Convert numpy scalars, which json does not recognise. + + Comparisons on numpy floats produce numpy bools, and those leak into the + pass/fail fields from every ``a <= b`` written against a fitted value. + """ + if isinstance(o, np.generic): + item = o.item() + return None if isinstance(item, float) and not math.isfinite(item) else item + if isinstance(o, np.ndarray): + return o.tolist() + if isinstance(o, float) and not math.isfinite(o): + return None + raise TypeError(f"cannot serialise {type(o).__name__}") + + +def write_json(doc: dict, path: str) -> str: + os.makedirs(os.path.dirname(os.path.abspath(path)), exist_ok=True) + with open(path, "w") as fh: + json.dump(doc, fh, indent=1, default=_jsonable) + return path + + +# --- stdout ---------------------------------------------------------------- + +def print_summary(doc: dict, stream=sys.stdout) -> None: + """Human-readable result, in the shape the other tools use.""" + s = doc["summary"] + w = stream.write + + w(f"\n[{s['overall']}] Receive filter rate-independence, " + f"{doc['duration_s']:.0f} s\n") + + for warning in doc.get("warnings", []): + w(f" WARNING: {warning}\n") + + rig = doc.get("rig", {}) + if rig: + w(f" Wiring : {rig.get('wiring', '?')}\n") + if rig.get("image_rejection_db") is not None: + w(f" Image rejection : {rig['image_rejection_db']:.1f} dB\n") + if rig.get("drive_amplitude_v") is not None: + w(f" Drive level : {rig['drive_amplitude_v']*1000:.1f} mV\n") + + comp = doc.get("comparison", {}) + rates = sorted(doc.get("rates", {}), key=lambda r: -int(r)) + + def table(title: str, rows: list, key: str) -> None: + if not rows: + return + w(f"\n {title}\n") + head = " {:>10}".format("nominal") + for r in rates: + head += " {:>11}".format(f"{int(r)//1000}k") + head += " {:>9} {:>7}".format("delta", "verdict") + w(head + "\n") + for row in rows: + line = " {:>10.1f}".format(row["nominal_hz"]) + for r in rates: + v = row.get(key, {}).get(str(r)) + line += " {:>11}".format(f"{v:.1f}" if v is not None else "-") + d = row.get("delta_pct") + line += " {:>8}%".format(f"{d:+.2f}" if d is not None else "-") + line += " {:>7}".format(row["verdict"]) + if row.get("legacy_consistent"): + line += " <- matches the old frozen-table shift" + w(line + "\n") + + table("CW audio filters (-3 dB corner, Hz)", comp.get("cw_filters", []), "corner_3db_hz") + table("Equaliser cells (peak, Hz)", comp.get("eq_cells", []), "peak_hz") + table("SSB filter [control] (-6 dB edge, Hz)", comp.get("ssb_filter", []), "hi_edge_6db_hz") + + w("\n Checks:\n") + for c in doc["checks"]: + mark = "SKIP" if c["skipped"] else ("OK " if c["passed"] else "BAD ") + w(f" [{mark}] {c['id']:<32} {c['message']}\n") + + w(f"\n {s['passed']} passed, {s['failed']} failed, {s['skipped']} skipped\n") + if not doc.get("state_restored"): + w(" WARNING: radio state was NOT fully restored\n") + if doc.get("state_residual_diff"): + w(f" Radio settings that did not return to baseline: " + f"{', '.join(doc['state_residual_diff'])}\n") + for name, path in doc.get("artifacts", {}).items(): + if isinstance(path, str): + w(f" {name.capitalize():<9}: {path}\n") + elif isinstance(path, list) and path: + w(f" {name.capitalize():<9}: {len(path)} files in " + f"{os.path.dirname(path[0])}\n") + w("\n") + + +# --- Markdown -------------------------------------------------------------- + +def _md_table(headers: Sequence[str], rows: Sequence[Sequence]) -> str: + out = ["| " + " | ".join(headers) + " |", + "|" + "|".join("---" for _ in headers) + "|"] + for r in rows: + out.append("| " + " | ".join(str(c) for c in r) + " |") + return "\n".join(out) + "\n" + + +def write_markdown(doc: dict, path: str, png_paths: Sequence[str] = ()) -> str: + """Render the report a human reads.""" + s = doc["summary"] + rates = sorted(doc.get("rates", {}), key=lambda r: -int(r)) + md: list[str] = [] + a = md.append + + a(f"# Receive filter rate-independence, hardware in the loop\n") + a(f"**{s['overall']}** - {s['passed']} passed, {s['failed']} failed, " + f"{s['skipped']} skipped, in {doc['duration_s']:.0f} s.\n") + a(f"Generated {doc['generated_utc']}.\n") + + for warning in doc.get("warnings", []): + a(f"> **Warning:** {warning}\n") + + a("\n## What this shows\n") + a("Each filter's characteristic frequency is measured on the real radio at " + "every sample rate under test, by injecting a quadrature tone into the I/Q " + "receive inputs and reading the demodulated audio back off the speaker " + "output.\n") + a(f"\nThese filters used to carry frozen coefficient tables, designed offline " + f"for one audio rate. Run at any other rate, every corner and centre " + f"frequency scaled by the ratio of the rates - **{bt.LEGACY_DELTA_PCT:.3f}%** " + f"between 176.4 and 192 ksps. They are now generated from an analog design " + f"spec on each rate change, so the measured frequencies should not move. " + f"A result column reading close to {bt.LEGACY_DELTA_PCT:.3f}% means the " + f"frozen tables are back.\n") + a("\nResponses are measured as the difference between two captures at the same " + "injected frequency - filter engaged and bypassed - so the AWG, the codec, " + "the decimation rolloff, the volume setting and the speaker amplifier all " + "cancel out.\n") + + a("\n## Rig\n") + rig = doc.get("rig", {}) + a(_md_table(["Property", "Value"], [ + ["Wiring (detected)", rig.get("wiring", "?")], + ["Image rejection", f"{rig.get('image_rejection_db', float('nan')):.1f} dB"], + ["Drive amplitude", f"{rig.get('drive_amplitude_v', 0)*1000:.1f} mV"], + ["Scope rate", f"{rig.get('scope_rate_hz', 0)/1000:.1f} kHz"], + ["Capture length", f"{rig.get('capture_s', 0)*1000:.0f} ms"], + ["WaveForms SDK", doc["provenance"].get("dwf_version", "?")], + ])) + + a("\n## Firmware under test\n") + p = doc["provenance"] + a(_md_table(["Property", "Value"], [ + ["Git commit", f"`{p.get('git_commit', '?')}`" + + (" (working tree dirty)" if p.get("git_dirty") else "")], + ["BuildInfo.h", f"`{p.get('build_info', '?')}`"], + ["Radio ID", doc.get("radio_baseline", {}).get("id", "?")], + ])) + + a("\n## Radio state\n") + base = doc.get("radio_baseline", {}) + a(_md_table(["Setting", "At start"], [ + ["Sample rate", f"{base.get('sample_rate_hz', '?')} sps"], + ["Band", base.get("current_band", ["?"])[base.get("active_vfo", 0)]], + ["Modulation", base.get("modulation", ["?"])[base.get("active_vfo", 0)]], + ["AGC", "off" if base.get("agc") == 0 else f"mode {base.get('agc')}"], + ["Volume", base.get("audio_volume", "?")], + ["CW filter", base.get("cw_filter_index", "?")], + ])) + a(f"\nState restored afterwards: **{'yes' if doc.get('state_restored') else 'NO'}**") + if doc.get("state_residual_diff"): + a(f" - these did not return to baseline: `{doc['state_residual_diff']}`") + a("\n") + + a("\n## Headline result\n") + for title, key, rows in ( + ("CW audio filters (-3 dB corner)", "corner_3db_hz", + doc["comparison"].get("cw_filters", [])), + ("Equaliser cells (peak)", "peak_hz", + doc["comparison"].get("eq_cells", [])), + ("SSB convolution filter (-6 dB edge) - control", "hi_edge_6db_hz", + doc["comparison"].get("ssb_filter", []))): + if not rows: + continue + a(f"\n### {title}\n") + headers = ["Nominal Hz"] + [f"{int(r)//1000}k" for r in rates] + \ + ["Delta %", "If still broken", "Verdict"] + table_rows = [] + for row in rows: + cells = [f"{row['nominal_hz']:.1f}"] + for r in rates: + v = row.get(key, {}).get(str(r)) + cells.append(f"{v:.1f}" if v is not None else "-") + d = row.get("delta_pct") + cells.append(f"{d:+.2f}" if d is not None else "-") + cells.append(f"{row['legacy_predicted_delta_pct']:.3f}") + cells.append(f"**{row['verdict']}**") + table_rows.append(cells) + a(_md_table(headers, table_rows)) + + if doc["comparison"].get("ssb_filter"): + a("\nThe SSB filter is the control. It has always derived its coefficients " + "from the true sample rate, so it was never affected by the bug being " + "hunted. If it shows a shift, the rig or the analysis is wrong rather " + "than the firmware.\n") + + if png_paths: + a("\n## Figures\n") + for png in png_paths: + name = os.path.basename(png) + a(f"\n### {name}\n\n![{name}]({name})\n") + + a("\n## All checks\n") + a(_md_table(["Check", "Result", "Value", "Limit", "Notes"], [ + [f"`{c['id']}`", + "SKIP" if c["skipped"] else ("PASS" if c["passed"] else "**FAIL**"), + f"{c['value']:.3f} {c['units']}" if c["value"] is not None else "-", + f"{c['limit']:.3f}" if c["limit"] is not None else "-", + c["message"]] + for c in doc["checks"]])) + + a("\n## Caveats\n") + a("- Equaliser cells 0, 1 and 13 are marked edge limited. The first two sit " + "at or below the SSB filter's low cut and the last sits in the decimation " + "skirt, whose corner is a fraction of the sample rate and is *meant* to " + "move with it. Their absolute accuracy is checked loosely; their rate " + "invariance is not, since the same skirt applies at both rates.\n") + a("- Absolute frequencies can be biased by a smooth tilt anywhere in the " + "analog path. The rate comparison cannot: it divides that tilt out.\n") + a("- Do not touch the front panel during a run. It triggers a settings save " + "and would persist the test configuration.\n") + + a("\n## Reproduce\n") + a(f"```bash\n{p.get('command_line', '')}\n```\n") + a("\nRegenerate the figures from the saved results without the hardware:\n") + a(f"```bash\npython3 plot_filter_hil.py " + f"{os.path.basename(doc.get('artifacts', {}).get('json', 'results.json'))}\n```\n") + + os.makedirs(os.path.dirname(os.path.abspath(path)), exist_ok=True) + with open(path, "w") as fh: + fh.write("\n".join(md)) + return path diff --git a/code/tools/filter_hil/test_filter_hil.py b/code/tools/filter_hil/test_filter_hil.py new file mode 100644 index 0000000..cee281d --- /dev/null +++ b/code/tools/filter_hil/test_filter_hil.py @@ -0,0 +1,412 @@ +#!/usr/bin/env python3 +"""Self-tests for the filter HIL suite. No hardware required. + +These check the parts that would silently give wrong answers on the bench: the +tone metrology, the curve-feature extraction, the ED dump parser, and - most +importantly - that the cross-rate comparison actually fails when handed the +frequency shift it exists to catch. + + python3 -m pytest test_filter_hil.py # or just run it directly +""" + +from __future__ import annotations + +import math +import os +import sys +import tempfile + +import numpy as np + +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from filter_hil import bandtable as bt +from filter_hil import report as report_mod +from filter_hil import tests as T +from filter_hil.ad2 import Capture +from filter_hil.measure import (bandwidth_3db, find_crossing, geom_grid, + measure_tone, dominant_tone, parabolic_peak, + pct_delta, peak_from_three, spectrum_dbv) +from filter_hil.radio import EdSnapshot + +FS = 96000.0 +N = int(FS * 0.25) + + +def _tone(f_hz: float, amplitude: float = 0.5, noise: float = 0.0, + fs: float = FS, n: int = N) -> Capture: + t = np.arange(n) / fs + x = amplitude * np.cos(2 * np.pi * f_hz * t) + if noise: + rng = np.random.default_rng(1234) + x = x + rng.normal(0.0, noise, n) + return Capture(samples=x, sample_rate_hz=fs, lost=0, corrupted=0, t_utc="") + + +def check(cond: bool, label: str) -> None: + if not cond: + raise AssertionError(label) + print(f" ok {label}") + + +# --- metrology ------------------------------------------------------------- + +def test_measure_tone_recovers_amplitude_and_frequency(): + print("measure_tone") + for f in (137.0, 1000.0, 2750.5, 4000.0): + m = measure_tone(_tone(f, 0.4), f, scope_range_v=2.0) + check(abs(m.amplitude_v - 0.4) < 0.004, + f"amplitude at {f} Hz: {m.amplitude_v:.4f} (want 0.4)") + check(abs(m.f_measured_hz - f) < 1.0, + f"frequency at {f} Hz: {m.f_measured_hz:.2f}") + + +def test_measure_tone_is_accurate_in_db(): + """The whole suite compares levels in dB, so small errors matter.""" + print("measure_tone dB accuracy") + ref = measure_tone(_tone(1000.0, 0.5), 1000.0, scope_range_v=2.0) + for atten_db in (-1.0, -3.0, -6.0, -20.0, -40.0): + amp = 0.5 * 10 ** (atten_db / 20.0) + m = measure_tone(_tone(1000.0, amp), 1000.0, scope_range_v=2.0) + got = m.level_dbv - ref.level_dbv + check(abs(got - atten_db) < 0.05, + f"{atten_db:+.0f} dB reads {got:+.3f} dB") + + +def test_measure_tone_flags_bad_captures(): + print("measure_tone validity") + cap = _tone(1000.0, 0.5) + cap.lost = 12 + check(not measure_tone(cap, 1000.0, scope_range_v=2.0).valid, + "a capture with lost samples is marked invalid") + + clipped = measure_tone(_tone(1000.0, 1.95), 1000.0, scope_range_v=2.0) + check(not clipped.valid and clipped.clipped, "clipping is detected") + + buried = measure_tone(_tone(1000.0, 0.001, noise=0.5), 1000.0, + scope_range_v=2.0, min_snr_db=20.0) + check(not buried.valid, "a tone below the noise is marked invalid") + + +def test_dominant_tone_finds_an_unknown_frequency(): + print("dominant_tone") + f, _ = dominant_tone(_tone(1234.5, 0.3)) + check(abs(f - 1234.5) < 1.0, f"found {f:.2f} Hz (want 1234.5)") + + +def test_parabolic_peak_beats_bin_quantisation(): + print("parabolic_peak") + # A tone deliberately placed between bins. + f = 1000.0 + 0.5 * (FS / N) + freqs, mag = spectrum_dbv(_tone(f, 0.5).samples, FS) + idx = int(np.argmax(mag)) + coarse = freqs[idx] + fine = (idx + parabolic_peak(mag, idx)) * (freqs[1] - freqs[0]) + check(abs(fine - f) < abs(coarse - f), + f"interpolated {fine:.3f} beats bin centre {coarse:.3f} (true {f:.3f})") + + +# --- curve features -------------------------------------------------------- + +def _lowpass_db(f_hz: float, corner_hz: float, order: int = 12) -> float: + """Magnitude of an ideal Butterworth-ish lowpass, in dB.""" + return -10.0 * math.log10(1.0 + (f_hz / corner_hz) ** (2 * order)) + + +def test_find_crossing_locates_a_known_corner(): + print("find_crossing") + for corner in (840.0, 1320.0, 2000.0): + got, trace = find_crossing(lambda f, c=corner: _lowpass_db(f, c), + -3.0, corner * 0.6, corner * 1.45, tol_hz=1.0) + check(abs(got - corner) < 5.0, + f"-3 dB of a {corner:.0f} Hz lowpass found at {got:.1f} Hz") + check(len(trace) >= 3, "the bisection trace was recorded") + + +def test_find_crossing_rejects_a_bad_bracket(): + print("find_crossing bracketing") + got, _ = find_crossing(lambda f: 0.0, -3.0, 100.0, 200.0) + check(math.isnan(got), "a response that never crosses returns NaN") + + +def test_peak_and_bandwidth_of_a_resonance(): + print("peak_from_three / bandwidth_3db") + fc, q = 1000.0, 4.0 + f = geom_grid(fc * 0.6, fc * 1.6, 25) + + def resp(x): + return -10.0 * np.log10(1.0 + (q * (x / fc - fc / x)) ** 2) + + y = resp(f) + peak = peak_from_three(f, y) + check(abs(peak - fc) / fc < 0.01, f"peak found at {peak:.1f} Hz (want {fc:.0f})") + + lo, hi, q_meas = bandwidth_3db(f, y) + check(abs(q_meas - q) / q < 0.10, f"Q measured {q_meas:.2f} (want {q:.1f})") + + +# --- ED parsing ------------------------------------------------------------ + +ED_FIXTURE = """agc: 0 +fineTuneFreq_Hz[0]: -12250 +fineTuneFreq_Hz[1]: 0 +audioVolume: 55 +rfGainAllBands_dB: 0 +nrOptionSelect: 0 +ANR_notchOn: 0 +spectrum_zoom: 1 +sampleRate: 13 +CWFilterIndex: 5 +CWToneIndex: 3 +activeVFO: 0 +modulation[0]: 0 +modulation[1]: 0 +currentBand[0]: 5 +currentBand[1]: 5 +equalizerRec: 100,100,100,100,100,100,100,100,100,100,100,100,100,100 +equalizerXmt: 100,100,100,100,100,100,100,100,100,100,100,100,100,100""" + + +def test_ed_snapshot_parses_the_dump(): + print("EdSnapshot.parse") + ed = EdSnapshot.parse(ED_FIXTURE.splitlines()) + check(ed.agc == 0 and ed.agc_off, "AGC parsed as off") + check(ed.sample_rate_hz == 192000, f"sample rate {ed.sample_rate_hz}") + check(ed.cw_filter_index == 5, "CW filter index") + check(ed.cw_tone_index == 3, "CW tone index") + check(len(ed.equalizer_rec) == 14, "all 14 equaliser cells") + check(ed.modulation_name == "USB", f"modulation {ed.modulation_name}") + check(ed.active_fine_tune_hz == -12250.0, + f"fine tune {ed.active_fine_tune_hz:+.0f} Hz") + + +def test_ed_snapshot_survives_interleaved_debug_output(): + print("EdSnapshot.parse with noise") + noisy = ["Debug: something happened", "USB_RX: 1234 5678"] + \ + ED_FIXTURE.splitlines() + ["Debug: more chatter"] + ed = EdSnapshot.parse(noisy) + check(ed.sample_rate_hz == 192000, "parsed despite interleaved Debug lines") + + +def test_ed_snapshot_reports_what_is_missing(): + print("EdSnapshot.parse failure") + try: + EdSnapshot.parse(["audioVolume: 55"]) + except Exception as exc: + check("agc" in str(exc), f"names the missing field: {exc}") + else: + raise AssertionError("parsing an incomplete dump should raise") + + +# --- the comparison, which is the point of the whole suite ----------------- + +def _synthetic_rates(shift: float) -> dict: + """Build a results structure with 176.4k features scaled by `shift`.""" + out = {} + for rate in (192000, 176400): + s = 1.0 if rate == 192000 else shift + out[str(rate)] = { + "rate_hz": rate, + "cw_filters": {"filters": [ + {"index": k, "nominal_hz": f, "corner_3db_hz": f * 1.012 * s, + "points": [], "bisection_trace": []} + for k, f in enumerate(bt.CW_FILTER_NOMINAL_HZ)]}, + "equalizer_cells": {"cells": [ + {"index": i, "nominal_hz": f, "peak_hz": f * s, "q": bt.eq_q(i), + "q_expected": bt.eq_q(i), + "edge_limited": i in bt.EQ_EDGE_LIMITED_CELLS, "points": []} + for i, f in enumerate(bt.EQ_CENTRE_HZ)]}, + "ssb_filter": {"settings": [ + {"fw_hz": w, "hi_edge_6db_hz": float(w), "bisection_trace": []} + for w in (1800, 2400, 2800, 3000)]}, + } + return out + + +def test_comparison_passes_a_healthy_radio(): + print("compare_rates on a good build") + comp, checks = T.compare_rates(_synthetic_rates(1.0), 1.5, 4.0) + rate_checks = [c for c in checks if c.id.endswith("rate_invariance")] + check(len(rate_checks) == 5 + 14 + 4, f"{len(rate_checks)} rate checks generated") + check(all(c.passed for c in rate_checks), "all rate-invariance checks pass") + check(all(r["verdict"] == "PASS" for r in comp["cw_filters"]), + "every CW filter passes") + + +def test_comparison_catches_the_legacy_shift(): + """The suite must fail on the bug it exists to detect.""" + print("compare_rates on the old frozen-table behaviour") + comp, checks = T.compare_rates(_synthetic_rates(bt.LEGACY_RATE_RATIO), 1.5, 4.0) + + cw = [c for c in checks if c.id.startswith("cw.") and c.id.endswith("rate_invariance")] + eq = [c for c in checks if c.id.startswith("eq.") and c.id.endswith("rate_invariance")] + check(not any(c.passed for c in cw), "every CW filter fails") + check(not any(c.passed for c in eq), "every EQ cell fails") + + check(all(r["legacy_consistent"] for r in comp["cw_filters"]), + "the shift is recognised as the known frozen-table bug") + for row in comp["cw_filters"]: + check(abs(row["delta_pct"] - bt.LEGACY_DELTA_PCT) < 0.01, + f"CW {row['nominal_hz']:.0f} Hz delta {row['delta_pct']:.3f}%") + check(any("frozen coefficient tables" in c.message for c in cw), + "the failure message explains what it matched") + + +def test_comparison_tolerance_has_margin_over_the_bug(): + """A 1.5% tolerance against an 8.125% bug is a 5x margin.""" + print("tolerance margin") + margin = abs(bt.LEGACY_DELTA_PCT) / 1.5 + check(margin > 4.0, f"margin between tolerance and bug is {margin:.1f}x") + + # A shift a quarter the size of the bug must still fail. + comp, checks = T.compare_rates(_synthetic_rates(1.0 - 0.02), 1.5, 4.0) + cw = [c for c in checks if c.id.startswith("cw.") and c.id.endswith("rate_invariance")] + check(not any(c.passed for c in cw), "a 2% shift still fails") + + +def test_comparison_handles_missing_measurements(): + print("compare_rates with gaps") + data = _synthetic_rates(1.0) + data["176400"]["cw_filters"]["filters"][2]["corner_3db_hz"] = None + comp, checks = T.compare_rates(data, 1.5, 4.0) + skipped = [c for c in checks if c.skipped] + check(len(skipped) >= 1, "an unmeasured filter is skipped, not failed") + check(comp["cw_filters"][2]["verdict"] == "SKIP", "verdict is SKIP") + + +# --- report and plotting --------------------------------------------------- + +def _doc(shift: float) -> dict: + per_rate = _synthetic_rates(shift) + comp, checks = T.compare_rates(per_rate, 1.5, 4.0) + return report_mod.build_document( + provenance={"git_commit": "abc1234", "git_dirty": False, + "build_info": "test", "dwf_version": "3.24.4", + "versions": {}, "command_line": "test", "host": "test"}, + config={"rate_tol_pct": 1.5, "nominal_tol_pct": 4.0}, + rig={"wiring": "W1 -> I (codec left), W2 -> Q (codec right)", + "image_rejection_db": 34.2, "drive_amplitude_v": 0.03, + "scope_rate_hz": FS, "capture_s": 0.25, "scope_range_v": 2.0, + "trials": {"1": {"level_dbv": -20.0}, "-1": {"level_dbv": -54.0}}}, + baseline={"agc": 0, "sample_rate_hz": 192000, "audio_volume": 55, + "cw_filter_index": 5, "active_vfo": 0, "modulation": [0, 0], + "current_band": [5, 5], "id": "ID020;"}, + final={}, state_restored=True, residual_diff={}, per_rate=per_rate, + comparison=comp, checks=checks, duration_s=531.0, warnings=[]) + + +def test_report_renders_both_outcomes(): + print("report rendering") + for shift, want in ((1.0, "PASS"), (bt.LEGACY_RATE_RATIO, "FAIL")): + doc = _doc(shift) + check(doc["summary"]["overall"] == want, + f"shift {shift:.5f} gives overall {doc['summary']['overall']}") + with tempfile.TemporaryDirectory() as tmp: + j = report_mod.write_json(doc, os.path.join(tmp, "r.json")) + m = report_mod.write_markdown(doc, os.path.join(tmp, "r.md")) + check(os.path.getsize(j) > 500, "JSON written") + text = open(m).read() + check(want in text, f"Markdown states {want}") + check("frozen" in text.lower(), "Markdown explains the bug being hunted") + + +def test_plots_render_from_a_document(): + print("plot rendering") + from filter_hil.plot_filter_hil import render_all + doc = _doc(bt.LEGACY_RATE_RATIO) + with tempfile.TemporaryDirectory() as tmp: + paths = render_all(doc, tmp, "t") + check(len(paths) >= 4, f"{len(paths)} figures rendered") + for p in paths: + check(os.path.getsize(p) > 3000, f"{os.path.basename(p)} is non-trivial") + + +# --- design constants ------------------------------------------------------ + +def test_bandtable_matches_firmware_shapes(): + print("bandtable consistency") + check(len(bt.CW_FILTER_NOMINAL_HZ) == len(bt.CW_FILTER_RIPPLE_EDGE_HZ), + "one ripple edge per CW filter") + check(len(bt.EQ_CENTRE_HZ) == bt.EQ_CELL_COUNT, "14 equaliser centres") + check(len(bt.EQ_BANDWIDTH_HZ) == bt.EQ_CELL_COUNT, "14 equaliser bandwidths") + check(all(e < n for e, n in zip(bt.CW_FILTER_RIPPLE_EDGE_HZ, + bt.CW_FILTER_NOMINAL_HZ)), + "every ripple edge sits below its labelled cutoff") + check(abs(bt.LEGACY_DELTA_PCT + 8.125) < 1e-9, + f"legacy shift is {bt.LEGACY_DELTA_PCT:.4f}%") + check(bt.fs_over_4_hz(192000) == 48000 and bt.fs_over_4_hz(176400) == 44100, + "Fs/4 for both rates") + + +def test_injection_plan_includes_fine_tune(): + """The demodulation centre is |Fs/4 + fineTune|, not Fs/4. + + Measured on the bench: with Fs/4 = 44100 and fineTune = -12250, injecting + 32350/32850/33350 Hz produced 500/1000/1500 Hz of audio. + """ + print("InjectionPlan fine tune") + p = T.InjectionPlan(rate_hz=176400, fine_tune_hz=-12250.0, sideband_sign=+1) + check(abs(p.centre_hz - 31850.0) < 1e-6, f"centre {p.centre_hz:.0f} Hz") + for f_audio, want in ((500.0, 32350.0), (1000.0, 32850.0), (1500.0, 33350.0)): + got = p.inject_hz(f_audio) + check(abs(got - want) < 1e-6, f"{f_audio:.0f} Hz audio <- {got:.0f} Hz") + + zero = T.InjectionPlan(rate_hz=176400, fine_tune_hz=0.0) + check(abs(zero.centre_hz - 44100.0) < 1e-6, + "with no fine tune the centre is Fs/4") + + +def test_injection_plan_recomputes_per_rate(): + """The crux: the same audio frequency needs a different injection per rate.""" + print("InjectionPlan") + a = T.InjectionPlan(rate_hz=192000) + b = T.InjectionPlan(rate_hz=176400) + check(abs(a.inject_hz(1000.0) - 49000.0) < 1e-6, + f"192k: 1 kHz audio <- {a.inject_hz(1000.0):.1f} Hz") + check(abs(b.inject_hz(1000.0) - 45100.0) < 1e-6, + f"176.4k: 1 kHz audio <- {b.inject_hz(1000.0):.1f} Hz") + + cw = T.InjectionPlan(rate_hz=192000, sidetone_hz=750.0) + check(abs(cw.inject_hz(1000.0) - 49750.0) < 1e-6, + "the CW sidetone offset shifts the injection") + + +def test_injection_plan_handles_lower_sideband(): + """On an LSB band the passband is negative, so audio comes from Fs/4 - f.""" + print("InjectionPlan sideband") + usb = T.InjectionPlan(rate_hz=192000, sideband_sign=+1) + lsb = T.InjectionPlan(rate_hz=192000, sideband_sign=-1) + check(abs(usb.inject_hz(1000.0) - 49000.0) < 1e-6, + f"USB: {usb.inject_hz(1000.0):.0f} Hz") + check(abs(lsb.inject_hz(1000.0) - 47000.0) < 1e-6, + f"LSB: {lsb.inject_hz(1000.0):.0f} Hz") + + lsb176 = T.InjectionPlan(rate_hz=176400, sideband_sign=-1) + check(abs(lsb176.inject_hz(1000.0) - 43100.0) < 1e-6, + f"LSB at 176.4k: {lsb176.inject_hz(1000.0):.0f} Hz") + + cw_lsb = T.InjectionPlan(rate_hz=192000, sideband_sign=-1, sidetone_hz=750.0) + check(abs(cw_lsb.inject_hz(1000.0) - 46250.0) < 1e-6, + "the sidetone also flips with the sideband") + + +def main() -> int: + fns = [v for k, v in sorted(globals().items()) if k.startswith("test_")] + failed = [] + for fn in fns: + try: + fn() + except AssertionError as exc: + print(f" FAIL {fn.__name__}: {exc}") + failed.append(fn.__name__) + except Exception as exc: + print(f" ERROR {fn.__name__}: {type(exc).__name__}: {exc}") + failed.append(fn.__name__) + print(f"\n{len(fns) - len(failed)}/{len(fns)} passed") + for name in failed: + print(f" failed: {name}") + return 1 if failed else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/code/tools/filter_hil/tests.py b/code/tools/filter_hil/tests.py new file mode 100644 index 0000000..864e4e7 --- /dev/null +++ b/code/tools/filter_hil/tests.py @@ -0,0 +1,933 @@ +"""The individual hardware tests. + +Every filter response here is measured as the *difference* between two captures +taken at the same injected frequency, one with the filter under test engaged and +one with it bypassed or flat. Everything the two captures have in common - the +AWG's amplitude flatness, the codec front end, the decimation rolloff, the SSB +mask, the volume setting, the DAC and the speaker amplifier - cancels exactly, +leaving only the filter. Absolute levels are never compared across rates. + +The pass criterion that matters is **rate invariance**: a corner or centre +measured at 192 ksps must land at the same frequency when measured at +176.4 ksps. The bug this suite exists to catch moves them by 8.125 %, and the +tolerance is 1.5 %, so there is a factor of five between "correct" and "broken". +Absolute agreement with the labelled frequency is checked too, but more loosely, +because a smooth tilt in the analog path can bias it without saying anything +about the firmware. +""" + +from __future__ import annotations + +import math +import time +from dataclasses import dataclass, field +from typing import Callable, Iterable, Optional, Sequence + +import numpy as np + +from . import bandtable as bt +from .ad2 import Ad2 +from .measure import (ToneMeasurement, bandwidth_3db, find_crossing, geom_grid, + measure_tone, dominant_tone, peak_from_three, pct_delta) +from .radio import EdSnapshot, Radio, RadioStateGuard + + +@dataclass +class Check: + """One pass/fail assertion, flat enough to drop straight into a report.""" + + id: str + group: str + description: str + value: Optional[float] + limit: Optional[float] + units: str + passed: bool + skipped: bool = False + message: str = "" + + def as_dict(self) -> dict: + return { + "id": self.id, "group": self.group, "description": self.description, + "value": _clean(self.value), "limit": _clean(self.limit), "units": self.units, + "passed": self.passed, "skipped": self.skipped, "message": self.message, + } + + +@dataclass +class TestResult: + name: str + checks: list = field(default_factory=list) + data: dict = field(default_factory=dict) + skipped: bool = False + reason: str = "" + + +def _clean(x): + """JSON has no NaN; represent unmeasurable values as null.""" + if x is None: + return None + if isinstance(x, (int, bool)): + return x + return float(x) if np.isfinite(x) else None + + +@dataclass +class InjectionPlan: + """How to turn a wanted audio frequency into an AWG frequency. + + ``ReceiveProcessing`` shifts twice before decimating: by Fs/4 + (``FreqShiftFs4``, DSP.cpp) and then by the fine tune plus any CW sidetone + (``FreqShiftF``). So the tone that demodulates to zero audio sits at + ``|Fs/4 + fineTune|``, and everything else is measured either side of it. + + Fs/4 is 48 kHz at 192 ksps but 44.1 kHz at 176.4 ksps; recomputing it per + rate is the whole point of the exercise. The fine tune is whatever the + operator last tuned to - routinely several kHz - and leaving it out puts + every injection outside the passband, so the radio stays silent and no + amount of extra drive helps. + + ``sideband_sign`` says which side of that centre the passband lies on, and + ``phase_sign`` says which AWG channel drives I. Both are discovered by + experiment rather than derived from the radio's reported mode: getting + either wrong produces silence rather than a subtly wrong answer, so trying + all four combinations is both cheap and safer than modelling the chain. + """ + + rate_hz: int + fine_tune_hz: float = 0.0 + sidetone_hz: float = 0.0 + mapping_correction_hz: float = 0.0 + phase_sign: int = 1 + sideband_sign: int = 1 + amplitude_v: float = 0.03 + + @property + def fs_over_4_hz(self) -> float: + return bt.fs_over_4_hz(self.rate_hz) + + @property + def centre_hz(self) -> float: + """Injection frequency that demodulates to DC. + + ReceiveProcessing shifts by Fs/4 (`FreqShiftFs4`) and then again by the + fine tune (`FreqShiftF`), so the tone that lands at zero audio sits at + |Fs/4 + fineTune| - **not** at Fs/4. The fine tune is whatever the + operator last tuned to and is routinely several kHz, so ignoring it puts + every injection far outside the passband and nothing is heard at all. + """ + return abs(self.fs_over_4_hz + self.fine_tune_hz) + + def inject_hz(self, f_audio_hz: float) -> float: + offset = self.sideband_sign * (f_audio_hz + self.sidetone_hz) + return self.centre_hz + offset + self.mapping_correction_hz + + +class Injector: + """Drives one audio frequency and reads its level back.""" + + def __init__(self, ad2: Ad2, plan: InjectionPlan, settle_s: float, + min_snr_db: float, max_thd_db: float) -> None: + self.ad2 = ad2 + self.plan = plan + self.settle_s = settle_s + self.min_snr_db = min_snr_db + self.max_thd_db = max_thd_db + + def point(self, f_audio_hz: float) -> ToneMeasurement: + f_in = self.plan.inject_hz(f_audio_hz) + self.ad2.set_quadrature(f_in, self.plan.amplitude_v, self.plan.phase_sign) + cap = self.ad2.capture_after(self.settle_s) + return measure_tone(cap, f_audio_hz, + scope_range_v=self.ad2.cfg.scope_range_v, + min_snr_db=self.min_snr_db, + max_thd_db=self.max_thd_db) + + def sweep(self, freqs_hz: Iterable[float]) -> list[ToneMeasurement]: + return [self.point(float(f)) for f in freqs_hz] + + +def _point_dict(f_audio: float, plan: InjectionPlan, m: ToneMeasurement, + ref_dbv: Optional[float] = None) -> dict: + d = { + "f_audio_hz": round(f_audio, 3), + "f_inject_hz": round(plan.inject_hz(f_audio), 3), + "f_measured_hz": _clean(m.f_measured_hz), + "level_dbv": _clean(m.level_dbv), + "snr_db": _clean(m.snr_db), + "thd_db": _clean(m.thd_db), + "clipped": m.clipped, + "valid": m.valid, + } + if ref_dbv is not None: + d["ref_dbv"] = _clean(ref_dbv) + d["resp_db"] = _clean(m.level_dbv - ref_dbv) + if m.reason: + d["reason"] = m.reason + return d + + +# =========================================================================== +# T0 preflight +# =========================================================================== + +def run_preflight(radio: Radio, ad2: Ad2, allow_agc_on: bool, + log: Callable[[str], None]) -> tuple[TestResult, EdSnapshot]: + """Confirm the rig answers and the radio is in a measurable state.""" + checks: list[Check] = [] + + ident = radio.expect("ID;") + checks.append(Check("rig.cat", "rig", "Radio answers on the CAT port", + None, None, "", True, message=f"ID reply {ident}")) + + ed = radio.dump_ed() + log(f"Radio: rate {ed.sample_rate_hz} sps, band {ed.current_band[ed.active_vfo]}, " + f"mode {ed.modulation_name}, AGC {'off' if ed.agc_off else 'ON'}, " + f"volume {ed.audio_volume}") + + # AGC would compress the very amplitude differences the suite measures, + # flattening every filter skirt into a straight line. There is no CAT + # command for it, so this can only be checked, not fixed. + agc_ok = ed.agc_off + checks.append(Check( + "rig.agc_off", "rig", "AGC is off so amplitude sweeps are meaningful", + float(ed.agc), 0.0, "mode", agc_ok or allow_agc_on, skipped=False, + message=("AGC is off" if agc_ok else + f"AGC mode is {ed.agc}; it will flatten every filter skirt. " + f"Turn it off in the radio's menu." + + (" Continuing because --allow-agc-on was given; RESULTS ARE UNRELIABLE." + if allow_agc_on else "")))) + + checks.append(Check( + "rig.sample_rate_known", "rig", "Radio reports a CAT-selectable sample rate", + float(ed.sample_rate_hz), None, "hz", ed.sample_rate_hz in bt.SAMPLE_RATES_HZ, + message=f"{ed.sample_rate_hz} sps")) + + return TestResult("preflight", checks, {"ed": ed.summary(), "id": ident}), ed + + +# =========================================================================== +# T1 I/Q wiring order +# =========================================================================== + +def detect_iq_order(ad2: Ad2, plan: InjectionPlan, settle_s: float, + min_rejection_db: float, forced_sign: Optional[int], + amplitude_v: float, + log: Callable[[str], None]) -> tuple[TestResult, int, int]: + """Find the quadrature sense and the sideband, by trying all four. + + Two independent unknowns: + + * **Which AWG channel drives I.** Swapping I and Q conjugates the baseband + signal, so a tone that lands at +1 kHz with one wiring lands at -1 kHz with + the other. + * **Which side of Fs/4 the passband sits on.** An upper-sideband band takes + audio from ``Fs/4 + f``, a lower-sideband band from ``Fs/4 - f``. + + Either one wrong puts the tone outside the SSB convolution filter, which + rejects it hard - discriminating against the unwanted sideband is that + filter's entire job. So the right combination stands out unmistakably, and + the wrong ones fail loudly rather than quietly reading a bit low. + + Nothing needs rewiring: the suite compensates in software. + """ + probe_hz = 1000.0 + # Detection runs at the approved ceiling rather than the auto-level floor: + # picking the right combination is a relative comparison, and at 10 mV the + # tone is under the receiver's own noise so all four look alike. The level is + # brought back down by autolevel immediately afterwards. + plan.amplitude_v = amplitude_v + trials: dict[str, dict] = {} + best_key, best_amp, best = None, -1.0, None + second_amp = -1.0 + + phase_candidates = (forced_sign,) if forced_sign is not None else (+1, -1) + + for phase in phase_candidates: + for side in (+1, -1): + plan.phase_sign, plan.sideband_sign = phase, side + f_in = plan.inject_hz(probe_hz) + ad2.set_quadrature(f_in, plan.amplitude_v, phase) + cap = ad2.capture_after(settle_s) + m = measure_tone(cap, probe_hz, scope_range_v=ad2.cfg.scope_range_v, + min_snr_db=0.0, max_thd_db=99.0) + key = f"phase{phase:+d}_side{side:+d}" + trials[key] = {"phase_sign": phase, "sideband_sign": side, + **_point_dict(probe_hz, plan, m)} + log(f" W2 {phase*90:+d} deg, {'USB' if side > 0 else 'LSB'} side: " + f"{m.level_dbv:7.1f} dBV at {m.f_measured_hz:7.1f} Hz, " + f"SNR {m.snr_db:5.1f} dB (inject {f_in:.0f} Hz)") + if m.amplitude_v > best_amp: + second_amp, best_amp = best_amp, m.amplitude_v + best_key, best = key, m + elif m.amplitude_v > second_amp: + second_amp = m.amplitude_v + + phase_sign = trials[best_key]["phase_sign"] + sideband_sign = trials[best_key]["sideband_sign"] + plan.phase_sign, plan.sideband_sign = phase_sign, sideband_sign + + # The number that has to be unambiguous is the *sideband*: which side of the + # demodulation centre to inject. Compare like with like - same phase sense, + # opposite side - because that is the choice being made. + # + # The phase sense is a much weaker effect and is deliberately not gated on. + # Imperfect quadrature (an amplitude imbalance between W1 and W2 at the + # radio's inputs is normal) leaves an image at the mirror frequency, but the + # SSB convolution filter rejects that image anyway, so both phase senses + # produce a usable tone and only the amplitude differs. Requiring them to + # differ would fail a perfectly good rig. + other_side = trials.get(f"phase{phase_sign:+d}_side{-sideband_sign:+d}") + other_amp = other_side["level_dbv"] if other_side else None + rejection = (best.level_dbv - other_amp) if other_amp is not None else 99.0 + + phase_margin = 99.0 + other_phase = trials.get(f"phase{-phase_sign:+d}_side{sideband_sign:+d}") + if other_phase and other_phase["level_dbv"] is not None: + phase_margin = best.level_dbv - other_phase["level_dbv"] + + wiring = ("W1 -> I (codec left), W2 -> Q (codec right)" if phase_sign > 0 + else "W1 -> Q (codec right), W2 -> I (codec left)") + sideband = ("above the demodulation centre" if sideband_sign > 0 + else "below the demodulation centre") + + passed = rejection >= min_rejection_db and best.snr_db > 6.0 + if best.snr_db <= 6.0: + msg = ("no audio from any combination - check that the AD2 ground is " + "shared with the radio, that W1 and W2 are connected to the I/Q " + "inputs, and that the radio is unmuted") + elif rejection < min_rejection_db: + msg = (f"only {rejection:.1f} dB between injecting above and below the " + f"demodulation centre; the SSB filter should reject the wrong " + f"side much harder than that") + else: + msg = (f"inject {sideband}; {wiring} (phase margin {phase_margin:+.1f} dB); " + f"wrong side rejected by {rejection:.1f} dB") + + check = Check("rig.sideband", "rig", + "The wrong side of the demodulation centre is clearly rejected", + rejection, min_rejection_db, "db", passed, message=msg) + + data = { + "phase_sign": phase_sign, + "sideband_sign": sideband_sign, + "detect_amplitude_v": amplitude_v, + "wiring": wiring, + "sideband": sideband, + "image_rejection_db": _clean(rejection), + "phase_margin_db": _clean(phase_margin), + "forced": forced_sign is not None, + "trials": trials, + } + return TestResult("iq_order", [check], data), phase_sign, sideband_sign + + +# =========================================================================== +# T2 drive level +# =========================================================================== + +def autolevel(ad2: Ad2, plan: InjectionPlan, settle_s: float, start_v: float, + max_v: float, step_db: float, min_snr_db: float, max_thd_db: float, + log: Callable[[str], None]) -> tuple[TestResult, float]: + """Find the smallest drive that gives a clean measurement. + + Steps up only, and never past ``max_v``: the tolerance of these inputs is + not documented, so the suite starts quiet and stops as soon as the signal is + good enough rather than reaching for the largest usable level. + """ + probe_hz = 1000.0 + amplitude = start_v + trials = [] + chosen = None + + while amplitude <= max_v * 1.0001: + plan.amplitude_v = amplitude + ad2.set_quadrature(plan.inject_hz(probe_hz), amplitude, plan.phase_sign) + cap = ad2.capture_after(settle_s) + m = measure_tone(cap, probe_hz, scope_range_v=ad2.cfg.scope_range_v, + min_snr_db=min_snr_db, max_thd_db=max_thd_db, + thd_invalidates=True) + trials.append({"amplitude_v": round(amplitude, 6), **_point_dict(probe_hz, plan, m)}) + log(f" {amplitude*1000:6.1f} mV -> {m.level_dbv:6.1f} dBV, " + f"SNR {m.snr_db:5.1f} dB, THD {m.thd_db:6.1f} dB, peak {m.peak_v:.3f} V") + + if m.snr_db >= min_snr_db and m.thd_db <= max_thd_db and not m.clipped: + chosen = amplitude + break + amplitude *= 10.0 ** (step_db / 20.0) + + if chosen is None: + chosen = min(amplitude, max_v) + plan.amplitude_v = chosen + msg = (f"never reached {min_snr_db:.0f} dB SNR below {max_v*1000:.0f} mV; " + f"raise --max-amplitude or the radio's volume") + passed = False + else: + plan.amplitude_v = chosen + msg = f"{chosen*1000:.1f} mV" + passed = True + + check = Check("rig.drive_level", "rig", + "A drive level giving adequate SNR without clipping", + chosen * 1000.0, max_v * 1000.0, "mv", passed, message=msg) + return TestResult("autolevel", [check], {"amplitude_v": chosen, "trials": trials}), chosen + + +# =========================================================================== +# T3 Fs/4 mapping +# =========================================================================== + +#: How far the measured demodulation centre may sit from its nominal position. +#: Generous on purpose: the Teensy synthesises its I2S clock with a fractional +#: divider, so the true sample rate is a few tens of ppm off nominal and the +#: centre moves with it. The residual is folded into `mapping_correction_hz` +#: rather than treated as an error. What this check exists to catch is the gross +#: case - a chain that did not reconfigure its frequency shift for the new rate, +#: which would land kilohertz away, not tens of hertz. +MAPPING_OFFSET_TOL_HZ = 150.0 + + +def calibrate_mapping(ad2: Ad2, plan: InjectionPlan, settle_s: float, + log: Callable[[str], None]) -> TestResult: + """Confirm - and trim - the input-to-audio frequency relationship. + + Fits ``f_audio = slope * f_inject + offset`` over three probes. The offset + must come out at -(Fs/4) plus any sidetone shift; if the firmware failed to + reconfigure the frequency shift for the new rate, this is where it shows, + and nothing measured afterwards would mean anything. + """ + probes = (400.0, 800.0, 1400.0) + f_in, f_out = [], [] + for f_audio in probes: + fi = plan.inject_hz(f_audio) + ad2.set_quadrature(fi, plan.amplitude_v, plan.phase_sign) + cap = ad2.capture_after(settle_s) + f_meas, _ = dominant_tone(cap, f_min_hz=100.0) + f_in.append(fi) + f_out.append(f_meas) + log(f" inject {fi:9.1f} Hz -> audio {f_meas:7.1f} Hz (wanted {f_audio:.1f})") + + slope, offset = np.polyfit(np.asarray(f_in), np.asarray(f_out), 1) + residuals = [abs(o - (slope * i + offset)) for i, o in zip(f_in, f_out)] + + # On a lower-sideband band the audio frequency falls as the injected one + # rises, so the fitted slope is -1 and the offset has the opposite sign. + s = plan.sideband_sign + expected_slope = float(s) + expected_offset = -s * (plan.centre_hz + plan.mapping_correction_hz) \ + - plan.sidetone_hz + offset_err = offset - expected_offset + + checks = [ + Check("map.slope", "mapping", + "Audio frequency tracks the injected frequency one for one", + float(slope), expected_slope, "ratio", + abs(slope - expected_slope) <= 2e-3, + message=f"slope {slope:+.5f} (expected {expected_slope:+.0f})"), + Check("map.offset", "mapping", + f"Demodulation centre is |Fs/4 + fineTune| = {plan.centre_hz:.0f} Hz " + f"(Fs/4 {plan.fs_over_4_hz:.0f}, fine tune {plan.fine_tune_hz:+.0f})", + float(offset), float(expected_offset), "hz", + abs(offset_err) <= MAPPING_OFFSET_TOL_HZ, + message=(f"measured offset {offset:.1f} Hz, expected " + f"{expected_offset:.1f} Hz ({offset_err:+.1f} Hz, " + f"{1e6*offset_err/plan.fs_over_4_hz:+.0f} ppm of Fs/4)")), + Check("map.residual", "mapping", "Per-probe fit residual is small", + float(max(residuals)), 5.0, "hz", max(residuals) <= 5.0, + message=f"worst residual {max(residuals):.2f} Hz"), + ] + + # Fold the error back in so later injections land where they are asked to. + # inject_hz adds the correction directly, so it carries the sideband sign. + correction = plan.mapping_correction_hz - s * offset_err + data = { + "slope": _clean(slope), + "offset_hz": _clean(offset), + "expected_offset_hz": _clean(expected_offset), + "centre_hz": _clean(plan.centre_hz), + "fine_tune_hz": _clean(plan.fine_tune_hz), + "residual_hz": _clean(max(residuals)), + "correction_hz": _clean(correction), + "offset_error_hz": _clean(offset_err), + "offset_error_ppm": _clean(1e6 * offset_err / plan.fs_over_4_hz), + "sidetone_hz": plan.sidetone_hz, + "probes": [{"f_audio_hz": a, "f_inject_hz": i, "f_measured_hz": o} + for a, i, o in zip(probes, f_in, f_out)], + } + if all(c.passed for c in checks): + plan.mapping_correction_hz = correction + + return TestResult("mapping", checks, data) + + +# =========================================================================== +# T4 reference sweep +# =========================================================================== + +def reference_sweep(inj: Injector, grid_hz: np.ndarray, + log: Callable[[str], None]) -> TestResult: + """The common-path denominator every filter response divides by.""" + points = [] + levels = {} + for f in grid_hz: + m = inj.point(float(f)) + points.append(_point_dict(float(f), inj.plan, m)) + levels[float(f)] = m.level_dbv + + valid = [p for p in points if p["valid"]] + in_band = [p for p in points if 300.0 <= p["f_audio_hz"] <= 2500.0] + in_band_valid = [p for p in in_band if p["valid"]] + frac = len(in_band_valid) / len(in_band) if in_band else 0.0 + + db = [p["level_dbv"] for p in in_band if p["level_dbv"] is not None] + dyn = (max(db) - min(db)) if db else 0.0 + + # A passband that is flat to within a decibel across two octaves is not a + # passband, it is a compressor. Most likely AGC is on after all. + # Compare two in-band frequencies; a point outside the SSB passband would + # report the filter skirt as an analog tilt. + tilt = 0.0 + in_band_levels = {p["f_audio_hz"]: p["level_dbv"] for p in in_band_valid + if p["level_dbv"] is not None} + if len(in_band_levels) >= 2: + lo = min(in_band_levels, key=lambda k: abs(k - 500.0)) + hi = max(in_band_levels) + tilt = in_band_levels[hi] - in_band_levels[lo] + + checks = [ + Check("ref.coverage", "reference", + "Most of the passband gives a usable measurement", + 100.0 * frac, 95.0, "percent", frac >= 0.95, + message=f"{len(in_band_valid)}/{len(in_band)} points valid in 300-2500 Hz"), + ] + + log(f" {len(valid)}/{len(points)} points valid, in-band dynamic range " + f"{dyn:.1f} dB, 1k->4k tilt {tilt:+.1f} dB") + + return TestResult("reference_sweep", checks, { + "points": points, + "analog_tilt_db": _clean(tilt), + "in_band_dynamic_range_db": _clean(dyn), + }) + + +def _ref_lookup(reference: TestResult) -> dict: + return {p["f_audio_hz"]: p["level_dbv"] for p in reference.data["points"] + if p["level_dbv"] is not None} + + +# =========================================================================== +# T5 CW audio filters +# =========================================================================== + +def test_cw_filters(radio: Radio, inj: Injector, indices: Sequence[int], + tol_hz: float, passband_hi_hz: float, + log: Callable[[str], None]) -> TestResult: + """Measure each CW filter's -3 dB corner, ripple and stopband. + + Every probe is a pair: the same injected frequency captured with the filter + bypassed (``CF5``) and engaged. ``CWAudioFilter`` is a plain series stage, so + the difference is exactly the Chebyshev response and nothing else. + """ + filters = [] + checks: list[Check] = [] + + for k in indices: + nominal = bt.CW_FILTER_NOMINAL_HZ[k] + log(f" CW filter {k} ({nominal:.0f} Hz)") + + cache: dict[float, float] = {} + + def response_db(f_hz: float, _k=k, _cache=cache) -> float: + """Filter magnitude at f_hz, as engaged-minus-bypassed.""" + key = round(f_hz, 2) + if key in _cache: + return _cache[key] + radio.set_cw_filter(bt.CW_FILTER_OFF) + off = inj.point(f_hz) + radio.set_cw_filter(_k) + on = inj.point(f_hz) + val = on.level_dbv - off.level_dbv if (on.valid and off.valid) else float("nan") + _cache[key] = val + return val + + # Coarse shape first, so the report has a curve and not just a number. + coarse_f = geom_grid(nominal * 0.45, nominal * 1.6, 13) + coarse_db = [response_db(float(f)) for f in coarse_f] + + corner, trace = find_crossing(response_db, -3.0, + nominal * 0.6, nominal * 1.45, tol_hz) + + passband = [d for f, d in zip(coarse_f, coarse_db) + if 0.2 * nominal <= f <= 0.7 * nominal and np.isfinite(d)] + ripple = (max(passband) - min(passband)) if len(passband) >= 2 else float("nan") + # Probe the stopband where the CW filter is the only thing attenuating. + # 1.5x the cutoff would sit on the SSB filter's own skirt for the wider + # CW settings, and would measure that instead. + stop_hz = min(nominal * 1.5, 0.85 * passband_hi_hz) + stop = response_db(stop_hz) if stop_hz > nominal * 1.15 else float("nan") + + filters.append({ + "index": k, + "nominal_hz": nominal, + "corner_3db_hz": _clean(corner), + "passband_ripple_db": _clean(ripple), + "stopband_atten_db": _clean(stop), + "stopband_probe_hz": _clean(stop_hz), + "points": [{"f_audio_hz": round(float(f), 2), "resp_db": _clean(d)} + for f, d in zip(coarse_f, coarse_db)], + "bisection_trace": [[round(f, 2), _clean(d)] for f, d in trace], + }) + log(f" -3 dB at {corner:.1f} Hz, ripple {ripple:.2f} dB, " + f"stopband {stop:.1f} dB") + + checks.append(Check( + f"cw.{k}.shape_ripple", "cw", + f"{nominal:.0f} Hz CW filter passband is flat", + _clean(ripple), 1.0, "db", + bool(np.isfinite(ripple) and ripple <= 1.0), + message=f"{ripple:.2f} dB peak to peak" if np.isfinite(ripple) else "not measured")) + checks.append(Check( + f"cw.{k}.stopband", "cw", + f"{nominal:.0f} Hz CW filter attenuates above its cutoff", + _clean(stop), -25.0, "db", + bool(np.isfinite(stop) and stop <= -25.0), + skipped=not np.isfinite(stop), + message=(f"{stop:.1f} dB at {stop_hz:.0f} Hz" if np.isfinite(stop) + else f"no room between the {nominal:.0f} Hz cutoff and the " + f"{passband_hi_hz:.0f} Hz SSB passband to probe a stopband"))) + + radio.set_cw_filter(bt.CW_FILTER_OFF) + return TestResult("cw_filters", checks, {"filters": filters}) + + +# =========================================================================== +# T6 equaliser cells +# =========================================================================== + +def test_equalizer_cells(radio: Radio, inj: Injector, reference: TestResult, + cells: Sequence[int], n_points: int, + passband_hi_hz: float, + log: Callable[[str], None]) -> TestResult: + """Locate each equaliser cell's peak and bandwidth. + + A cell is isolated by setting it to 100 and the other thirteen to 0. The + cells are summed in parallel, so this leaves exactly one of them - no + approximation. + + The SSB filter is opened up first. At its normal 3 kHz the top two cells + (3150 and 4000 Hz) sit on or beyond the skirt and their shape is set by the + SSB filter rather than by the cell, so they cannot be measured at all. + """ + results = [] + checks: list[Check] = [] + + wanted_hi = max(bt.EQ_CENTRE_HZ[b] * 1.45 for b in cells) if cells else passband_hi_hz + widened_hi = passband_hi_hz + if wanted_hi > passband_hi_hz: + widened_hi = float(min(wanted_hi, 5500.0)) + radio.set_filter_hi_hz(int(widened_hi)) + time.sleep(0.5) + log(f" opened the SSB filter to {widened_hi:.0f} Hz so the top cells " + f"are not measured through its skirt") + + for b in cells: + fc = bt.EQ_CENTRE_HZ[b] + radio.set_eq_solo(b) + probe = geom_grid(fc * 0.72, fc * 1.4, n_points) + + freqs, resp, points = [], [], [] + for f in probe: + m = inj.point(float(f)) + points.append(_point_dict(float(f), inj.plan, m)) + if m.valid: + freqs.append(float(f)) + resp.append(m.level_dbv) + + if len(freqs) >= 3: + peak = peak_from_three(freqs, resp) + lo, hi, q = bandwidth_3db(freqs, resp) + else: + peak = lo = hi = q = float("nan") + + # A cell is edge limited when the SSB filter, not the cell, decides its + # shape. That depends on the filter width in use, so it is judged + # against the actual passband rather than a fixed list of cells. + edge_limited = (b in bt.EQ_EDGE_LIMITED_CELLS + or fc > 0.85 * widened_hi) + results.append({ + "index": b, + "nominal_hz": fc, + "peak_hz": _clean(peak), + "bw_3db_hz": _clean(hi - lo if np.isfinite(hi) and np.isfinite(lo) else float("nan")), + "q": _clean(q), + "q_expected": _clean(bt.eq_q(b)), + "edge_limited": edge_limited, + "points": points, + }) + log(f" cell {b:2d} ({fc:7.1f} Hz): peak {peak:7.1f} Hz, Q {q:5.2f}" + + (" [edge limited]" if edge_limited else "")) + + if np.isfinite(q) and not edge_limited: + q_err = abs(q - bt.eq_q(b)) / bt.eq_q(b) + checks.append(Check( + f"eq.{b}.q", "eq", f"{fc:.0f} Hz cell has the designed shape", + 100.0 * q_err, 25.0, "percent", q_err <= 0.25, + message=f"Q {q:.2f} vs {bt.eq_q(b):.2f} expected")) + + radio.set_eq_all([100] * bt.EQ_CELL_COUNT) + if widened_hi != passband_hi_hz: + radio.set_filter_hi_hz(int(passband_hi_hz)) + time.sleep(0.3) + return TestResult("equalizer_cells", checks, + {"cells": results, "passband_hi_hz": widened_hi}) + + +# =========================================================================== +# T7 SSB convolution filter - the control +# =========================================================================== + +#: Level at which the SSB filter edge is called. See test_ssb_filter. +SSB_EDGE_DB = -3.0 + + +def test_ssb_filter(radio: Radio, inj: Injector, widths_hz: Sequence[int], + baseline_hi_hz: int, log: Callable[[str], None]) -> TestResult: + """Check the SSB filter edge follows the commanded bandwidth. + + This filter derives its coefficients from the true sample rate and always + did, so it was never affected by the frozen-table bug. That makes it the + control: if it shows a shift between rates, the rig or the analysis is + wrong, not the firmware. + """ + settings = [] + checks: list[Check] = [] + widest = max(widths_hz) + + for width in [w for w in widths_hz if w != widest]: + cache: dict[float, float] = {} + + def response_db(f_hz: float, _w=width, _cache=cache) -> float: + key = round(f_hz, 2) + if key in _cache: + return _cache[key] + radio.set_filter_hi_hz(widest) + ref = inj.point(f_hz) + radio.set_filter_hi_hz(_w) + cur = inj.point(f_hz) + val = cur.level_dbv - ref.level_dbv if (cur.valid and ref.valid) else float("nan") + _cache[key] = val + return val + + # -3 dB rather than -6: measured through a receiver, the tone drops + # into the noise about 5 dB below the passband, so a -6 dB crossing is + # outside the dynamic range this rig has at the filter edge. + edge, trace = find_crossing(response_db, SSB_EDGE_DB, + width * 0.75, min(width * 1.25, 4200.0), 10.0) + settings.append({ + "fw_hz": width, + "hi_edge_6db_hz": _clean(edge), + "bisection_trace": [[round(f, 2), _clean(d)] for f, d in trace], + }) + log(f" FW {width} Hz -> {SSB_EDGE_DB:.0f} dB edge at {edge:.1f} Hz") + + if np.isfinite(edge): + checks.append(Check( + f"ssb.{width}.edge", "ssb", + f"SSB filter edge follows FW{width}", + float(edge), float(width), "hz", abs(edge - width) <= 200.0, + message=f"{SSB_EDGE_DB:.0f} dB edge at {edge:.1f} Hz for a " + f"commanded {width} Hz")) + + radio.set_filter_hi_hz(baseline_hi_hz) + return TestResult("ssb_filter", checks, {"settings": settings}) + + +# =========================================================================== +# T8 AM DC blocker +# =========================================================================== + +def test_am_dc_blocker(ad2: Ad2, plan: InjectionPlan, settle_s: float, + depth_pct: float, min_snr_db: float, + log: Callable[[str], None]) -> TestResult: + """Measure the AM demodulator's DC blocker corner. + + The blocker acts on the recovered envelope, so it can only be probed by + modulating the carrier and sweeping the modulation frequency - the carrier + itself sits at DC after demodulation. + """ + carrier = plan.inject_hz(0.0) + mods = geom_grid(10.0, 300.0, 12) + + def envelope_db(f_mod: float) -> float: + ad2.set_am_quadrature(carrier, plan.amplitude_v, plan.phase_sign, + f_mod, depth_pct) + cap = ad2.capture_after(settle_s) + m = measure_tone(cap, f_mod, scope_range_v=ad2.cfg.scope_range_v, + search_bw_hz=max(6.0, f_mod * 0.25), + min_snr_db=min_snr_db, max_thd_db=99.0) + return m.level_dbv if m.valid else float("nan") + + ref = envelope_db(300.0) + points = [] + for f in mods: + db = envelope_db(float(f)) + points.append({"f_mod_hz": round(float(f), 2), "resp_db": _clean(db - ref)}) + + corner, trace = find_crossing(lambda f: envelope_db(f) - ref, -3.0, + 120.0, 12.0, 1.0) + log(f" DC blocker -3 dB at {corner:.1f} Hz (design {bt.AM_DC_BLOCKER_CORNER_HZ:.0f} Hz)") + + checks = [Check( + "am.corner_nominal", "am", "AM DC blocker sits at its design corner", + _clean(corner), bt.AM_DC_BLOCKER_CORNER_HZ, "hz", + bool(np.isfinite(corner) and abs(corner - bt.AM_DC_BLOCKER_CORNER_HZ) <= 6.0), + message=f"{corner:.1f} Hz" if np.isfinite(corner) else "not measured")] + + return TestResult("am_dc_blocker", checks, { + "corner_3db_hz": _clean(corner), + "depth_pct": depth_pct, + "points": points, + "bisection_trace": [[round(f, 2), _clean(d)] for f, d in trace], + }) + + +# =========================================================================== +# Cross-rate comparison - the headline result +# =========================================================================== + +def _compare_feature(label: str, group: str, key: str, per_rate: dict, + extract: Callable[[dict], list], nominal_of: Callable[[dict], float], + id_of: Callable[[dict], str], rate_tol_pct: float, + nominal_tol_pct: float, + relaxed: Callable[[dict], bool] = lambda _: False, + relaxed_tol_pct: float = 8.0) -> tuple[list, list]: + """Compare one measured feature across sample rates.""" + rates = sorted(per_rate) + if len(rates) < 2: + return [], [] + + base_rate = max(rates) # 192000 is the historical reference + other_rates = [r for r in rates if r != base_rate] + + by_rate = {r: {id_of(item): item for item in extract(per_rate[r])} for r in rates} + rows, checks = [], [] + + for ident in by_rate[base_rate]: + base_item = by_rate[base_rate][ident] + base_val = base_item.get(key) + nominal = nominal_of(base_item) + measured = {str(base_rate): base_val} + worst_delta = 0.0 + measurable = base_val is not None + + for r in other_rates: + item = by_rate.get(r, {}).get(ident) + val = item.get(key) if item else None + measured[str(r)] = val + if val is None or base_val is None: + measurable = False + continue + d = pct_delta(base_val, val) + if abs(d) > abs(worst_delta): + worst_delta = d + + tol = relaxed_tol_pct if relaxed(base_item) else nominal_tol_pct + nominal_err = (pct_delta(nominal, base_val) + if base_val is not None and nominal else float("nan")) + + legacy_consistent = (measurable and + abs(worst_delta - bt.LEGACY_DELTA_PCT) < 2.0) + + rows.append({ + "id": ident, + "nominal_hz": nominal, + key: measured, + "delta_pct": _clean(worst_delta) if measurable else None, + "legacy_predicted_delta_pct": bt.LEGACY_DELTA_PCT, + "legacy_consistent": legacy_consistent, + "nominal_error_pct": _clean(nominal_err), + "verdict": ("PASS" if measurable and abs(worst_delta) <= rate_tol_pct + else "SKIP" if not measurable else "FAIL"), + }) + + msg = (f"{base_val:.1f} Hz at {base_rate} sps vs " + f"{measured.get(str(other_rates[0])):.1f} Hz at {other_rates[0]} sps" + if measurable else "not measured at both rates") + if legacy_consistent: + msg += (f" - this matches the {bt.LEGACY_DELTA_PCT:.3f}% shift the " + f"frozen coefficient tables used to produce") + + checks.append(Check( + f"{group}.{ident}.rate_invariance", group, + f"{label} {nominal:.0f} Hz holds across sample rates", + _clean(worst_delta) if measurable else None, rate_tol_pct, "percent", + measurable and abs(worst_delta) <= rate_tol_pct, + skipped=not measurable, message=msg)) + + if measurable: + checks.append(Check( + f"{group}.{ident}.nominal", group, + f"{label} {nominal:.0f} Hz is near its labelled frequency", + _clean(nominal_err), tol, "percent", + bool(np.isfinite(nominal_err) and abs(nominal_err) <= tol), + message=f"measured {base_val:.1f} Hz for a labelled {nominal:.0f} Hz")) + + return rows, checks + + +def compare_rates(per_rate: dict, rate_tol_pct: float, + nominal_tol_pct: float) -> tuple[dict, list]: + """Roll every per-rate measurement up into the cross-rate verdict.""" + comparison: dict = {} + checks: list[Check] = [] + + rows, cw_checks = _compare_feature( + "CW filter", "cw", "corner_3db_hz", per_rate, + extract=lambda d: d.get("cw_filters", {}).get("filters", []), + nominal_of=lambda i: i["nominal_hz"], + id_of=lambda i: str(i["index"]), + rate_tol_pct=rate_tol_pct, nominal_tol_pct=nominal_tol_pct) + comparison["cw_filters"] = rows + checks += cw_checks + + rows, eq_checks = _compare_feature( + "EQ cell", "eq", "peak_hz", per_rate, + extract=lambda d: d.get("equalizer_cells", {}).get("cells", []), + nominal_of=lambda i: i["nominal_hz"], + id_of=lambda i: str(i["index"]), + rate_tol_pct=rate_tol_pct, nominal_tol_pct=nominal_tol_pct, + relaxed=lambda i: bool(i.get("edge_limited"))) + comparison["eq_cells"] = rows + checks += eq_checks + + rows, ssb_checks = _compare_feature( + "SSB filter", "ssb", "hi_edge_6db_hz", per_rate, + extract=lambda d: d.get("ssb_filter", {}).get("settings", []), + nominal_of=lambda i: float(i["fw_hz"]), + id_of=lambda i: str(i["fw_hz"]), + rate_tol_pct=rate_tol_pct, nominal_tol_pct=nominal_tol_pct) + comparison["ssb_filter"] = rows + checks += ssb_checks + + am = {r: per_rate[r].get("am_dc_blocker") for r in per_rate} + if all(v and v.get("corner_3db_hz") for v in am.values()) and len(am) > 1: + rates = sorted(am) + base = max(rates) + other = [r for r in rates if r != base][0] + delta = pct_delta(am[base]["corner_3db_hz"], am[other]["corner_3db_hz"]) + comparison["am_dc_blocker"] = { + "nominal_hz": bt.AM_DC_BLOCKER_CORNER_HZ, + "corner_3db_hz": {str(r): am[r]["corner_3db_hz"] for r in rates}, + "delta_pct": _clean(delta), + "legacy_predicted_delta_pct": bt.LEGACY_DELTA_PCT, + "verdict": "PASS" if abs(delta) <= 3.0 else "FAIL", + } + checks.append(Check( + "am.corner.rate_invariance", "am", + "AM DC blocker corner holds across sample rates", + _clean(delta), 3.0, "percent", abs(delta) <= 3.0, + message=f"{am[base]['corner_3db_hz']:.1f} Hz vs " + f"{am[other]['corner_3db_hz']:.1f} Hz")) + + return comparison, checks From fe070a078e7b866c8dc7903f7d60052df8c3b6b0 Mon Sep 17 00:00:00 2001 From: Oliver King Date: Wed, 29 Jul 2026 05:49:43 -0400 Subject: [PATCH 10/25] Stamp BuildInfo.h from a pre-commit hook The post-commit hook wrote this file after the commit was made, so it was left permanently modified in the working tree and a stale stamp got swept into whatever was committed next. It is now written and staged before the commit. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_015tsW6HGrRthm1is6U8tFYG --- code/src/PhoenixSketch/BuildInfo.h | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index fc29509..2724af8 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -2,14 +2,19 @@ * @file BuildInfo.h * @brief Build information automatically updated by git hooks * - * This file is automatically generated by the post-commit git hook. - * Do not edit manually - your changes will be overwritten. + * This file is automatically generated by the pre-commit git hook and is + * committed along with the change. Do not edit manually - your edits will be + * overwritten. + * + * GIT_COMMIT_HASH names the PARENT of the commit that contains this file. A + * commit cannot record its own hash, because the hash is derived from the tree + * that this file is part of. */ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "ad2c3d1" -#define BUILD_TIMESTAMP "2026-07-29 05:45:05" +#define GIT_COMMIT_HASH "159e1a5" +#define BUILD_TIMESTAMP "2026-07-29 05:49:43" #endif // BUILDINFO_H From 899f85954960a67d1b9d65e810f8ee00d9eb2c88 Mon Sep 17 00:00:00 2001 From: Oliver King Date: Wed, 29 Jul 2026 05:52:06 -0400 Subject: [PATCH 11/25] Resolve BuildInfo.h merges in favour of whichever side is kept The pre-commit hook restamps BuildInfo.h on every commit, so every branch touches it and any merge or rebase between two of them conflicts on it. A rebase across a one-commit side branch was enough to trigger it. The file is derived, never authored, so taking either side is always correct - the next commit restamps it regardless. merge=ours makes git do that silently instead of stopping. The driver has to be defined once per clone, which the file explains: git config merge.ours.driver true Without it git falls back to a normal merge and the conflicts come back, so this degrades to the current behaviour rather than to anything worse. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_015tsW6HGrRthm1is6U8tFYG --- .gitattributes | 9 +++++++++ code/src/PhoenixSketch/BuildInfo.h | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..c813228 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,9 @@ +# BuildInfo.h is regenerated by the pre-commit hook, so every commit touches it +# and any merge or rebase between branches would otherwise conflict on it. Its +# contents are derived, never authored, so resolving in favour of whichever side +# we are keeping is always right - the next commit restamps it anyway. +# +# Requires the driver to be defined once per clone: +# git config merge.ours.driver true +# Without it git falls back to a normal merge and the conflicts return. +code/src/PhoenixSketch/BuildInfo.h merge=ours diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index 2724af8..455c0c8 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -14,7 +14,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "159e1a5" -#define BUILD_TIMESTAMP "2026-07-29 05:49:43" +#define GIT_COMMIT_HASH "fe070a0" +#define BUILD_TIMESTAMP "2026-07-29 05:52:06" #endif // BUILDINFO_H From 2f650bc524eea2179a55ee841cadd5fbf25d2942 Mon Sep 17 00:00:00 2001 From: Oliver King Date: Wed, 29 Jul 2026 05:55:40 -0400 Subject: [PATCH 12/25] Version the pre-commit hook so every clone gets it The BuildInfo.h stamping hook lived in .git/hooks, which git does not clone, so it existed only on the machine it was written on. It now lives in hooks/ with an installer that points core.hooksPath at it and defines the merge driver the .gitattributes entry needs. Git has no way to install hooks automatically on clone, so ./hooks/install.sh has to be run once per working copy. CONTRIBUTING.md gains a Repository Setup section saying so, and explaining why the recorded hash is the parent commit rather than the commit itself. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_015tsW6HGrRthm1is6U8tFYG --- CONTRIBUTING.md | 54 +++++++++++++++++---- code/src/PhoenixSketch/BuildInfo.h | 4 +- hooks/install.sh | 40 ++++++++++++++++ hooks/pre-commit | 75 ++++++++++++++++++++++++++++++ 4 files changed, 162 insertions(+), 11 deletions(-) create mode 100755 hooks/install.sh create mode 100755 hooks/pre-commit diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d43251e..1fb8607 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,15 +4,51 @@ Thank you for your interest in contributing to the Phoenix SDR project! This gui ## Table of Contents -1. [Quick Reference Summary](#quick-reference-summary) -2. [Project Structure](#project-structure) -3. [File Naming Conventions](#file-naming-conventions) -4. [Coding Style](#coding-style) -5. [Architecture Rules](#architecture-rules) -6. [Adding Display Screens](#adding-display-screens) -7. [Testing Guidelines](#testing-guidelines) -8. [State Machine Modifications](#state-machine-modifications) -9. [Pull Request Process](#pull-request-process) +1. [Repository Setup](#repository-setup) +2. [Quick Reference Summary](#quick-reference-summary) +3. [Project Structure](#project-structure) +4. [File Naming Conventions](#file-naming-conventions) +5. [Coding Style](#coding-style) +6. [Architecture Rules](#architecture-rules) +7. [Adding Display Screens](#adding-display-screens) +8. [Testing Guidelines](#testing-guidelines) +9. [State Machine Modifications](#state-machine-modifications) +10. [Pull Request Process](#pull-request-process) + +## Repository Setup + +Run this once per clone: + +```bash +./hooks/install.sh +``` + +Git cannot install hooks automatically on clone, so this step is manual. It +points `core.hooksPath` at the versioned `hooks/` directory and defines one +merge driver. Skipping it does not break the build - you simply will not get the +pre-commit hook. + +**What the hook does.** `code/src/PhoenixSketch/BuildInfo.h` records the commit +the firmware was built from, so a running radio can report its version. The +pre-commit hook regenerates that file and stages it, so it is part of the commit +and the working tree stays clean afterwards. + +The hash it records is the **parent** of the commit containing it. That is not +an oversight: a commit cannot record its own hash, because the hash is computed +from the tree that `BuildInfo.h` is part of. Firmware built from a checkout +therefore reports the commit immediately before the one it was built from. The +timestamp is exact. + +**Why the merge driver.** Because every commit restamps `BuildInfo.h`, every +branch touches it, and a merge or rebase between two branches would conflict on +it every time. `.gitattributes` marks the file `merge=ours` so git resolves it +silently instead of stopping; the installer defines the driver that makes that +work. The file is generated rather than authored, so either side is correct - +the next commit restamps it anyway. + +Note that `core.hooksPath` replaces `.git/hooks` rather than adding to it. If +you keep your own hooks there, move them into `hooks/`; the installer warns you +if it finds any. ## Quick Reference Summary diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index 455c0c8..06b2483 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -14,7 +14,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "fe070a0" -#define BUILD_TIMESTAMP "2026-07-29 05:52:06" +#define GIT_COMMIT_HASH "899f859" +#define BUILD_TIMESTAMP "2026-07-29 05:55:40" #endif // BUILDINFO_H diff --git a/hooks/install.sh b/hooks/install.sh new file mode 100755 index 0000000..922a6fe --- /dev/null +++ b/hooks/install.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# +# One-time setup for a fresh clone. Safe to re-run. +# +# Git does not install hooks on clone and has no way to make it happen +# automatically, so this has to be run by hand once per working copy: +# +# ./hooks/install.sh +# + +set -e + +cd "$(git rev-parse --show-toplevel)" + +# Point git at the versioned hooks directory instead of .git/hooks. +# +# Note this *replaces* .git/hooks wholesale rather than adding to it - any +# hooks you have installed there yourself will stop running. This repository +# ships only pre-commit, so move anything of your own into hooks/ alongside it. +if [ -n "$(ls -A .git/hooks 2>/dev/null | grep -v '\.sample$')" ]; then + echo "Note: .git/hooks still contains:" + ls -A .git/hooks | grep -v '\.sample$' | sed 's/^/ /' + echo " These will no longer run. Move any you want to keep into hooks/." +fi + +git config core.hooksPath hooks +echo "core.hooksPath -> hooks" + +# BuildInfo.h is restamped by the pre-commit hook on every commit, so every +# branch touches it and merges between branches would conflict on it. The +# .gitattributes entry marks it merge=ours, which needs this driver defined to +# take effect. "true" is the shell builtin: it succeeds without doing anything, +# which leaves the file as-is - correct here, because the next commit restamps +# it regardless of which side won. +git config merge.ours.driver true +echo "merge.ours.driver -> true" + +echo +echo "Done. The pre-commit hook now stamps code/src/PhoenixSketch/BuildInfo.h" +echo "with the parent commit and stages it, so the working tree stays clean." diff --git a/hooks/pre-commit b/hooks/pre-commit new file mode 100755 index 0000000..9b79479 --- /dev/null +++ b/hooks/pre-commit @@ -0,0 +1,75 @@ +#!/bin/bash +# +# Pre-commit hook to stamp BuildInfo.h and include it in the commit. +# +# This replaces an earlier post-commit hook that wrote the file after the commit +# was made. That version left BuildInfo.h permanently modified in the working +# tree, so `git status` was never clean and the stale stamp got swept into +# whatever was committed next. +# +# Note what the hash means here. A commit cannot contain its own hash: the hash +# is computed from the tree, and the tree includes this file. So the stamp names +# the commit this work was based on - the parent - not the commit being created. +# Firmware built from a checkout therefore reports the commit *before* the one +# it was built from. +# +# The timestamp is the only part that is exact. + +set -e + +BUILD_INFO_FILE="code/src/PhoenixSketch/BuildInfo.h" + +# Leave replayed commits alone. Rebase, merge and cherry-pick re-create commits +# whose parents are not what the working tree was developed against, so a stamp +# written here would be wrong and would also collide on every conflict. +if [ -d "$(git rev-parse --git-path rebase-merge)" ] || + [ -d "$(git rev-parse --git-path rebase-apply)" ] || + [ -f "$(git rev-parse --git-path MERGE_HEAD)" ] || + [ -f "$(git rev-parse --git-path CHERRY_PICK_HEAD)" ]; then + exit 0 +fi + +# Work out which commit is the parent of the one being created. +# +# Normally that is HEAD. During `git commit --amend` it is not: HEAD is still the +# commit being replaced, so stamping it would name a commit that is about to stop +# existing. There is no environment variable for this, so read the arguments of +# the git process that invoked us. +PARENT_REF=HEAD +if grep -qe '--amend' "/proc/$PPID/cmdline" 2>/dev/null || + ps -o args= -p "$PPID" 2>/dev/null | grep -qe '--amend'; then + PARENT_REF=HEAD^ +fi + +# On a root commit, and when amending one, there is no parent to name. +GIT_HASH=$(git rev-parse --short "$PARENT_REF" 2>/dev/null || echo "unknown") +BUILD_TIME=$(date '+%Y-%m-%d %H:%M:%S') + +cat > "$BUILD_INFO_FILE" < Date: Wed, 29 Jul 2026 06:45:14 -0400 Subject: [PATCH 13/25] Bring the wiki current with the V1.4RC merge The wiki was written entirely on fast_encoder, so it knew nothing of the sample-rate work that rx-dsp-176k-stage-test brought into the merge. Three new pages: firmware/sample-rate-switching 192 / 176.4 ksps at run time, persisted. ChangeSampleRate() step by step, and why centerFreq_Hz has to be compensated for the change in the Fs/4 IF offset before SampleRate is updated. firmware/runtime-filter-design Why the Hz-specified filters had to be regenerated first, how the analog prototypes were recovered from the shipped tables, and why prewarping is what makes the result rate independent rather than merely re-derived. firmware/filter-hil-test The bench method, the |Fs/4 + fineTune| injection trap, and the AGC-off requirement. theory/multirate-decimation said the runtime design path's rate independence was "dormant - SampleRate is set once and never reassigned anywhere in the firmware". That was true on fast_encoder and is now false. Corrected in place with a date, and the corresponding clause of the 2026-06-14 Resolved entry marked superseded rather than deleted, per the wiki's contradiction rule. The heritage explanation for the RX/TX asymmetry still stands. Two open questions closed by the new code: the 14 equaliser band centre frequencies, which the generator exposed as named constants, and the rate the CW decoder runs at. The second turned up an error in the wiki itself - it had quoted the stale "/ 24000" comment at DSP_CWProcessing.cpp:64 as if it were the code, when the line below it divides by the live rate. 19 other pages updated, the largest being cat-control: 25 -> 29 commands, the new SR/CF/EQ/FL group, and the three pre-existing bugs, including MD, which did not merely fail to change the demodulator but mirrored the receive passband. Not answered anywhere in the tree: why 176.4 ksps was added. Left as an owner question rather than guessed at. Co-Authored-By: Claude Opus 5 --- code/src/PhoenixSketch/BuildInfo.h | 4 +- wiki/firmware/audio-io.md | 28 ++++- wiki/firmware/cat-control.md | 61 ++++++++-- wiki/firmware/cw-processing.md | 60 +++++++--- wiki/firmware/display-subsystem.md | 43 +++++-- wiki/firmware/dsp-chain.md | 26 ++++- wiki/firmware/filter-hil-test.md | 127 +++++++++++++++++++++ wiki/firmware/mode-state-machine.md | 10 +- wiki/firmware/overview.md | 7 +- wiki/firmware/persistent-config.md | 17 ++- wiki/firmware/runtime-filter-design.md | 143 ++++++++++++++++++++++++ wiki/firmware/sample-rate-switching.md | 122 ++++++++++++++++++++ wiki/firmware/tune-frequency-control.md | 20 +++- wiki/firmware/ui-state-machine.md | 16 ++- wiki/hardware/hardware-platform.md | 16 ++- wiki/index.md | 17 ++- wiki/log.md | 66 +++++++++++ wiki/roadmap/documentation-todos.md | 41 ++++++- wiki/roadmap/usb-audio.md | 16 ++- wiki/theory/audio-equalizer.md | 59 ++++++++-- wiki/theory/iq-imbalance-correction.md | 15 ++- wiki/theory/multirate-decimation.md | 73 +++++++----- wiki/theory/theory-overview.md | 24 ++-- wiki/theory/zoom-fft.md | 37 +++--- 24 files changed, 910 insertions(+), 138 deletions(-) create mode 100644 wiki/firmware/filter-hil-test.md create mode 100644 wiki/firmware/runtime-filter-design.md create mode 100644 wiki/firmware/sample-rate-switching.md diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index 06b2483..f4548f9 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -14,7 +14,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "899f859" -#define BUILD_TIMESTAMP "2026-07-29 05:55:40" +#define GIT_COMMIT_HASH "942c8e5" +#define BUILD_TIMESTAMP "2026-07-29 06:45:14" #endif // BUILDINFO_H diff --git a/wiki/firmware/audio-io.md b/wiki/firmware/audio-io.md index 0fe45c5..d20522e 100644 --- a/wiki/firmware/audio-io.md +++ b/wiki/firmware/audio-io.md @@ -3,10 +3,10 @@ title: Audio I/O (MainBoard_AudioIO — OpenAudio quad-I2S graph) type: module status: draft created: 2026-06-15 -updated: 2026-06-15 -tags: [audio, i2s, openaudio, codec, queues, mixers, sidetone, mode-routing] +updated: 2026-07-29 +tags: [audio, i2s, openaudio, codec, queues, mixers, sidetone, mode-routing, sample-rate] source_refs: [sources/t41-ep-schematics] -related: ["[[overview]]", "[[hardware-platform]]", "[[dsp-chain]]", "[[mode-state-machine]]", "[[main-loop]]", "[[cw-processing]]", "[[real-time-constraints]]", "[[iq-imbalance-correction]]"] +related: ["[[overview]]", "[[hardware-platform]]", "[[dsp-chain]]", "[[mode-state-machine]]", "[[main-loop]]", "[[cw-processing]]", "[[real-time-constraints]]", "[[iq-imbalance-correction]]", "[[sample-rate-switching]]"] --- # Audio I/O (MainBoard_AudioIO) @@ -93,10 +93,24 @@ them, and [[dsp-chain]] reads/writes them from the main loop ([[real-time-constr `InitializeAudio()` (`:446`): `SetI2SFreq(SR[SampleRate].rate)`, allocate `AudioMemory(500)` + `AudioMemory_F32(10)`, configure the codecs, and set the sidetone -oscillator amplitude/frequency (`:452-475`). `SetI2SFreq()` (`:488`) reprograms the Teensy I²S -PLL for **48 / 96 / 192 kHz** — Phoenix runs **192 kHz** raw ([[multirate-decimation]]). +oscillator amplitude/frequency (`:452-475`). `SetI2SFreq()` (`:565`) computes the SAI1 PLL +divider chain (`n1`, `n2`, fractional `C`) for the requested rate. `WarmUpAudioIO()` clears the I²S/codec power-on glitch that otherwise corrupts the first PTT. +### Changing the rate at run time + +This module owns the rate switch. **`ChangeSampleRate(uint8_t newRate)`** (`:519`) is the entry +point for the "Sample Rate" menu and the `SR` CAT command — full sequence, and why each step is +ordered where it is, on [[sample-rate-switching]]. In outline: compensate `centerFreq_Hz` for +the change in the Fs/4 IF offset → `AudioNoInterrupts()` → `SetI2SFreq()` → +`InitializeSignalProcessing()` → retune the oscillators → flush the four input queues → +`AudioInterrupts()` → reprogram the Si5351 outside the critical section. + +**`UpdateSampleRateDependentOscillators()`** (`:503`) is the piece that belongs to this module +specifically. The sidetone and TX-IQ-cal tones are OpenAudio synthesized oscillators whose +`frequency()` argument is scaled by `AUDIO_SAMPLE_RATE_EXACT / SR[SampleRate].rate`, so they +shift audibly if the rate changes without them being retuned. + ## Codec control objects - **`sgtl5000_teensy`** (`AudioControlSGTL5000_Extended`) — the **real SGTL5000** on the Teensy Audio Board: `inputSelect(MIC)`, `micGain(ED.currentMicGain)` (`:320`, @@ -107,5 +121,7 @@ PLL for **48 / 96 / 192 kHz** — Phoenix runs **192 kHz** raw ([[multirate-deci code-clarity fix, not a bug. ## Open questions -- Whether the `transmitIQcal_oscillator` amplitude/frequency are set per-calibration or fixed. +- Whether the `transmitIQcal_oscillator` **amplitude** is set per-calibration or fixed. *(The + frequency half of this is resolved: a fixed nominal **800 Hz**, rescaled on every rate change + by `UpdateSampleRateDependentOscillators()` `:505`.)* - Exact `AudioMemory` headroom vs. the worst-case quad-stream block backlog. diff --git a/wiki/firmware/cat-control.md b/wiki/firmware/cat-control.md index 84a9dc3..f24dc57 100644 --- a/wiki/firmware/cat-control.md +++ b/wiki/firmware/cat-control.md @@ -3,10 +3,10 @@ title: CAT Control (Kenwood emulation) type: module status: draft created: 2026-06-08 -updated: 2026-06-08 +updated: 2026-07-29 tags: [cat, kenwood, ts-480, ts-2000, serial, rig-control, usb] source_refs: [] -related: ["[[overview]]", "[[main-loop]]", "[[mode-state-machine]]", "[[tune-frequency-control]]", "[[persistent-config]]"] +related: ["[[overview]]", "[[main-loop]]", "[[mode-state-machine]]", "[[tune-frequency-control]]", "[[persistent-config]]", "[[sample-rate-switching]]", "[[filter-hil-test]]", "[[audio-equalizer]]", "[[cw-processing]]"] --- # CAT Control (Kenwood emulation) @@ -30,7 +30,8 @@ two share most commands so it works either way, but the docs should be reconcile ## Architecture: a command-dispatch table -The core is a static table of `valid_command` entries (`NUM_SUPPORTED_COMMANDS = 25`): +The core is a static table of `valid_command` entries (`NUM_SUPPORTED_COMMANDS = 29`, +`CAT.cpp:104-136`): ```c typedef struct { char name[3]; // 2-letter command + NUL @@ -44,11 +45,16 @@ typedef struct { bare command (e.g. `FA;`), a set carries a payload (`FA00014200000;`). Read handlers format `ED`/hardware state into a Kenwood response string; write handlers apply the change. -## Implemented commands (25) +> ⚠️ **Adding a command? `set_len` and `read_len` must differ.** `command_parser` tests the +> **write form first**, so a command declaring `set_len == read_len` has an **unreachable read +> handler** — it becomes silently write-only. This is not hypothetical: it is exactly the bug +> that made `FW;` unreadable for as long as `FW` has existed (see below). + +## Implemented commands (29) | Group | Commands | |---|---| -| Frequency / VFO | `FA`/`FB` (VFO A/B freq), `FR`/`FT` (RX/TX VFO select), `FW` (filter width) | +| Frequency / VFO | `FA`/`FB` (VFO A/B freq), `FR`/`FT` (RX/TX VFO select), `FW` (filter high cut) | | Mode / status | `MD` (mode), `IF` (transceiver status string), `ID` (radio id) | | Band | `BU`/`BD` (band up/down) | | Gain / audio | `AG` (AF gain), `MG` (mic gain), `PC` (power control) | @@ -56,11 +62,41 @@ bare command (e.g. `FA;`), a set carries a payload (`FA00014200000;`). Read hand | Keyer | `KS` (keyer speed / WPM) | | PTT | `TX` (transmit), `RX` (receive) | | Misc | `AI` (auto-info), `PS` (power on/off), `PD`, `DB` | -| **Custom (non-Kenwood)** | `ED` (dump the `ED` config), `PR` (dump the `hardwareRegister`) | +| **Custom (non-Kenwood)** | `ED` (dump the `ED` config), `PR` (dump the `hardwareRegister`), **`SR`**, **`CF`**, **`EQ`**, **`FL`** | + +`ED` and `PR` are Phoenix extensions explicitly marked "NOT a Kenwood keyword" — handy debug +dumps of [[persistent-config]] and the [[filter-boards]] `hardwareRegister`. + +### DSP-settings commands (added 2026-07, `CAT.cpp:132-135`) + +Added so [[filter-hil-test]] could drive settings that were previously **touchscreen-only**. + +| Cmd | Set | Read | Meaning | +|---|---|---|---| +| `SR` | `SRn;` | `SR;` | Sample rate: `0` = 176.4 ksps, `1` = 192 ksps ([[sample-rate-switching]]). **Rejected while transmitting** — it reconfigures the I²S clock and rebuilds the whole DSP chain (`CAT.cpp:804-827`). | +| `CF` | `CFn;` | `CF;` | Receive CW audio filter index 0–5 ([[cw-processing]]). | +| `EQ` | `EQbbvvv;` | `EQbb;` | Receive equaliser cell `bb` = 00–13, level `vvv` = 000–100 ([[audio-equalizer]]). Note set/read lengths differ by design. | +| `FL` | `FL####;` | `FL;` | DSP filter **low** cut — the mirror of `FW`'s high cut. | + +⚠️ **Still no CAT command for AGC mode.** That is the one setting [[filter-hil-test]] needs and +cannot have, so the suite refuses to run rather than setting it. + +## Three fixes to pre-existing commands + +All three affected CAT users on earlier releases: -`ED` and `PR` are Phoenix extensions explicitly marked "NOT a Kenwood keyword" -(`CAT.cpp:119-120`) — handy debug dumps of [[persistent-config]] and the -[[filter-boards]] `hardwareRegister`. +- ⚠️ **`MD` inverted the receive filter.** `MD_write` set `bands[].mode` but never + `ED.modulation[]`. `Demodulate()` switches on the *latter*, while `InitFilterMask()` *compares + the two* and treats a difference as a deliberate departure from the band default — by + **mirroring the passband**. So `MD` did not merely fail to change the demodulator; it flipped + the sideband of the receive filter. (Same normalization the display had to learn — see + `EffectivePassbandEdges_Hz` in [[display-subsystem]].) +- **`MD1`/`MD2` could not escape CW.** They now dispatch `TO_SSB_MODE` when in CW receive. That + transition previously existed **only on the front-panel button**, so CAT could enter CW mode + and never leave it ([[mode-state-machine]]). +- **`FW` was write-only.** It declared `set_len == read_len`, making `FW;` unreachable per the + parser rule above. Also `MD4` now selects **AM**, which was previously unreachable (`MD5` + gives SAM). ## How commands apply CAT does **not** have a private path to the hardware — it feeds the **same channels as the @@ -80,6 +116,13 @@ mode, RX/TX, etc.); `FA_read`/`MD_read`/`KS_read`/… each return one field. ## Open questions - Reconcile TS-480 (`CAT.cpp`) vs TS-2000 (`CAT.h`) and verify the `IF` status-string field layout against `code/docs/ts_480_pc.pdf`. +- A CAT command for **AGC mode** — the remaining gap for [[filter-hil-test]], which currently + has to demand the operator set it by hand. +- `SR` is interlocked against transmit, but the **menu path is not** ([[sample-rate-switching]]). + Whether that asymmetry is deliberate. +- The set/read-length constraint is a parser property enforced only by convention. Nothing + fails at build time if a new command violates it — a static assertion over the table would + catch the next `FW`. - Which `unsupported_cmd` stubs exist and how the radio replies to unknown commands (the `?` error response?). - Whether `AI` (auto-information) actually pushes unsolicited updates or is a no-op. diff --git a/wiki/firmware/cw-processing.md b/wiki/firmware/cw-processing.md index 8cf8351..ccd414e 100644 --- a/wiki/firmware/cw-processing.md +++ b/wiki/firmware/cw-processing.md @@ -3,10 +3,10 @@ title: CW Processing (audio filter + Morse decoder) type: module status: draft created: 2026-06-09 -updated: 2026-06-09 -tags: [cw, morse, decoder, goertzel, sidetone, audio-filter, adaptive] +updated: 2026-07-29 +tags: [cw, morse, decoder, goertzel, sidetone, audio-filter, adaptive, chebyshev, sample-rate] source_refs: [] -related: ["[[overview]]", "[[dsp-chain]]", "[[mode-state-machine]]", "[[tune-frequency-control]]", "[[rf-board]]", "[[display-subsystem]]", "[[persistent-config]]", "[[audio-io]]"] +related: ["[[overview]]", "[[dsp-chain]]", "[[mode-state-machine]]", "[[tune-frequency-control]]", "[[rf-board]]", "[[display-subsystem]]", "[[persistent-config]]", "[[audio-io]]", "[[runtime-filter-design]]", "[[filter-hil-test]]", "[[cat-control]]"] --- # CW Processing (audio filter + Morse decoder) @@ -26,13 +26,26 @@ CW (Morse) spans the whole radio; this module is the **receive-side audio** half ## CW audio filter — `CWAudioFilter()` -A narrow bandpass on the demodulated audio, selected by `ED.CWFilterIndex` -([[persistent-config]]) from five precomputed biquad cascades (`arm_biquad_cascade_df2T_f32` -over `S1_CW_AudioFilter1..5`, the cascades defined in `ReceiveFilterConfig`): +A narrow lowpass on the demodulated audio, selected by `ED.CWFilterIndex` +([[persistent-config]]) from five biquad cascades (`arm_biquad_cascade_df2T_f32` over +`S1_CW_AudioFilter1..5`, the cascades defined in `ReceiveFilterConfig`): | `CWFilterIndex` | 0 | 1 | 2 | 3 | 4 | 5 | |---|---|---|---|---|---|---| -| width (code label) | 0.8 kHz | 1.0 kHz | 1.3 kHz | 1.8 kHz | 2.0 kHz | Off | +| nominal cutoff | 840 Hz | 1080 Hz | 1320 Hz | 1800 Hz | 2000 Hz | Off | +| ripple edge (design param) | 807.1 | 1038.0 | 1269.0 | 1731.5 | 1963.2 | — | + +Each is a **12-pole Chebyshev type I** with **0.02 dB** passband ripple. A Chebyshev is specified +by its *ripple edge*, which sits a few percent below the nominal cutoff — hence the second row +(`CW_AUDIO_RIPPLE_EDGE_HZ[]`, `DSP_FIR.cpp:1242-1244`). + +⚠️ **Generated per sample rate, not stored.** These were frozen tables designed for 24 ksps +audio; run at 176.4 ksps the "2.0 kHz" filter actually cut at **1.84 kHz**. They are now +regenerated by `CalcChebyshevILowpassCoeffs()` on every rate change — see +[[runtime-filter-design]], and [[filter-hil-test]] for the bench measurement (every corner holds +to within 0.3 % across the rate change). + +Also selectable over CAT: **`CFn;`** / `CF;` ([[cat-control]]). Narrowing the audio passband around the CW tone dramatically improves SNR against adjacent signals — the receive counterpart to picking a CW filter on an analog rig. @@ -86,16 +99,37 @@ text accumulates in a buffer; `GetMorseCharacterBuffer()` / `IsMorseCharacterBuf let the [[display-subsystem]] refresh only when new characters arrive. Decoding is gated by `ED.decoderFlag`. +## Decoder input filter +Separate from the operator-selectable filters above: a 64-tap FIR ahead of the tone detector +(`CW_Filter_Coeffs2`), also regenerated per rate. ⚠️ Its constant is `CW_DECODE_FIR_FC_HZ = +1749.1` Hz, which is a **−6 dB** corner because that is what `CalcFIRCoeffs` takes as its +argument — the filter is nominally described by its **−3 dB** point of **1560 Hz** +(`DSP_FIR.cpp:1280-1283`). The two numbers describe the same filter; do not read them as a +contradiction. + ## Sidetone (transmit) -`InitializeCWProcessing()` also precomputes the **CW sidetone** phase -(`phs = 2π·freqSideTone / 24000`, into `sinBuffer`) so the operator hears their own keying; -volume is `ED.sidetoneVolume`. +`InitializeCWProcessing()` also precomputes the **correlator reference sine** into `sinBuffer` +at the configured CW tone. The *audible* sidetone is separate — it comes from +`sidetone_oscillator` in [[audio-io]], whose frequency is rescaled on every sample-rate change +(`UpdateSampleRateDependentOscillators()`). Volume is `ED.sidetoneVolume`, which ranges **0–500 +in steps of 1** and carries an `UpdateSidetoneOscillator` post-update callback so a menu change +reaches the running oscillator ([[display-subsystem]]). + +> ⚠️ **Stale comment, correct code.** `DSP_CWProcessing.cpp:64` says +> `// phs = 2 * PI * freqSideTone / 24000`, but the line below it actually divides by +> `SR[SampleRate].rate / RXfilters->DF` (`:65-66`) — the live audio rate. The reference sine is +> therefore already correct at 176.4 ksps; only the comment is frozen at 24 kHz. An earlier +> revision of this page quoted that comment as if it were the code. → [[documentation-todos]] ## Open questions / discrepancies - **Filter-width mismatch:** the header doc says "very narrow filter (50–500 Hz typical)" but - the code labels the five filters **0.8–2.0 kHz**. Reconcile (audio passband vs. RF bandwidth?). + the five filters cut at **840–2000 Hz**. Reconcile (audio passband vs. RF bandwidth?). → [[documentation-todos]] - The empirical scaling in `combinedCoeff` (`10 × … × 100 ×`) and the correlation-vs-Goertzel weighting — document the tuning rationale. -- Confirm the sample rate the decoder/Goertzel operate at (24 kHz RX path vs the 12 kHz the - sidetone phase implies). + +## Resolved +- **Which sample rate the decoder/Goertzel run at.** The **audio** rate, + `SR[SampleRate].rate / RXfilters->DF` — 24 kHz at 192 ksps, 22.05 kHz at 176.4 ksps + (`DSP_CWProcessing.cpp:65-66`). The "12 kHz the sidetone phase implies" that prompted this + question came from the stale comment above, not from the code. *(resolved 2026-07-29)* diff --git a/wiki/firmware/display-subsystem.md b/wiki/firmware/display-subsystem.md index 05ddc12..53aff4d 100644 --- a/wiki/firmware/display-subsystem.md +++ b/wiki/firmware/display-subsystem.md @@ -3,10 +3,10 @@ title: Display Subsystem (RA8875, panes, menus, calibration screens) type: module status: draft created: 2026-06-08 -updated: 2026-06-08 -tags: [display, ra8875, ui, spectrum, waterfall, menus, panes, stale-flags] +updated: 2026-07-29 +tags: [display, ra8875, ui, spectrum, waterfall, menus, panes, stale-flags, sample-rate] source_refs: [] -related: ["[[overview]]", "[[ui-state-machine]]", "[[dsp-chain]]", "[[zoom-fft]]", "[[hardware-state-machine]]", "[[persistent-config]]", "[[spectrum-refresh-floor]]", "[[rapid-tune-mute-freeze]]"] +related: ["[[overview]]", "[[ui-state-machine]]", "[[dsp-chain]]", "[[zoom-fft]]", "[[hardware-state-machine]]", "[[persistent-config]]", "[[spectrum-refresh-floor]]", "[[rapid-tune-mute-freeze]]", "[[sample-rate-switching]]", "[[cat-control]]"] --- # Display Subsystem (RA8875) @@ -81,15 +81,44 @@ cyan tuned-frequency marker over the trace; the bar-stamping math is factored in [[rapid-tune-mute-freeze]] hijacks `DrawSpectrumPane()` to freeze the sweep (and, for Fine Tune, keep only the bar moving via a cheap L2→L1 blit of a held bar-less backdrop). +### The filter bar draws on the *effective* passband +`EffectivePassbandEdges_Hz()` (`MainBoard_DisplayHome.cpp:457`) exists because the stored +`FLoCut_Hz`/`FHiCut_Hz` follow the sign convention of the **band's default mode** +(`bands[].mode`), which is not necessarily the current `ED.modulation`: the front-panel +DEMODULATION toggle changes the modulation without converting the stored cuts. `InitFilterMask()` +applies the same normalization, so display code that positions the markers must too — otherwise +a USB-over-an-LSB-band bar draws on the **wrong sideband**, and an AM-over-SSB marker lands on +the wrong edge. The AM/SAM case is made symmetric about the carrier. This is the display-side +counterpart of the `MD` CAT bug described in [[cat-control]]: same normalization rule, two +places that had to learn it. + +### Rate-dependent axes +Three things that used to assume 192 ksps now derive from `SR[SampleRate].rate` +([[sample-rate-switching]]): +- **Spectrum frequency ticks** are positioned by `FreqToBin()` at round frequencies + (`:550-571`) rather than from a fixed pixel table with a non-round step, so labels stay + aligned with the trace at any rate; the clear strip was widened so old ticks are wiped on + zoom/tune changes. +- **Audio-spectrum span** is `Fs/32` (`:1301-1303`) — 6.0 kHz at 192 ksps, 5.5 kHz at 176.4 ksps + — not a hard-coded 0–6000 Hz. +- **Settings pane** gained a `"Rate:"` row (`:1654`); Key Type moved down one. + ## Parameter editing & menus - **`VariableParameter`** (`MainBoard_Display.h:103`) — a type-safe editor (union over i8/i16/ i32/i64/f32/bool/KeyTypeId with per-type min/max/step). Drives the `UPDATE` state: the encoder adjusts a bounded `ED` field, `DrawParameter()` overlays the value on the home screen. -- **Menus** — `PrimaryMenuOption primaryMenu[8]` and nested `SecondaryMenuOption`s. A secondary - option is either a `variableOption` (→ UPDATE editor) or a function pointer (→ runs an action, - e.g. start a calibration). This is the data model behind the [[ui-state-machine]] menu stack. +- **Menus** — `PrimaryMenuOption primaryMenu[9]` (`MainBoard_DisplayMenus.cpp:602`, + `MainBoard_Display.h:371`) and nested `SecondaryMenuOption`s. A secondary option is either a + `variableOption` (→ UPDATE editor) or a function pointer (→ runs an action, e.g. start a + calibration). This is the data model behind the [[ui-state-machine]] menu stack. It grew + 8 → 9 with the **"Sample Rate"** menu (`:580-611`, [[sample-rate-switching]]). +- A secondary option may also carry a **`postUpdateFunc`**, run after the value changes — e.g. + "Sidetone volume" calls `UpdateSidetoneOscillator` so the change is applied to the running + oscillator rather than only stored. ## Open questions - Waterfall scroll/colour-map implementation and how `psdnew` bins map to pixel columns. - Touch input: does the RA8875 touchscreen drive any UI, or is navigation encoder/button-only? -- The full `primaryMenu[8]` contents (top-level menu items). + *(Partly answered: AGC mode is touchscreen-only — see [[filter-hil-test]], which cannot set + it over CAT.)* +- The full `primaryMenu[9]` contents (top-level menu items). diff --git a/wiki/firmware/dsp-chain.md b/wiki/firmware/dsp-chain.md index 6edfadc..e65d7ad 100644 --- a/wiki/firmware/dsp-chain.md +++ b/wiki/firmware/dsp-chain.md @@ -3,10 +3,10 @@ title: DSP Chain (Audio, FFT, FIR, Noise, CW) type: module status: draft created: 2026-06-08 -updated: 2026-06-09 -tags: [dsp, fft, fir, agc, noise-reduction, cw, openaudio] +updated: 2026-07-29 +tags: [dsp, fft, fir, agc, noise-reduction, cw, openaudio, sample-rate] source_refs: [] -related: ["[[overview]]", "[[real-time-constraints]]", "[[mode-state-machine]]", "[[display-subsystem]]", "[[code-heritage]]", "[[audio-io]]"] +related: ["[[overview]]", "[[real-time-constraints]]", "[[mode-state-machine]]", "[[display-subsystem]]", "[[code-heritage]]", "[[audio-io]]", "[[runtime-filter-design]]", "[[sample-rate-switching]]"] --- # DSP Chain (Audio, FFT, FIR, Noise, CW) @@ -39,11 +39,31 @@ Teensy Convolution SDR ([[code-heritage]]). Filter configuration structs (`ReceiveFilterConfig`, `TransmitFilterConfig`, `DecimationFilter`, `AGCConfig`) live in `SDT.h` → see [[persistent-config]]. +## Rebuilding the chain + +`InitializeSignalProcessing()` (`DSP.cpp:758-762`) builds all four filter configurations — the +three `ReceiveFilterConfig` instances (`RXfilters` at the user's zoom, `RXTXfilters`, +`TXIQfilters`) plus `TXfilters`. It runs at boot **and on every sample-rate change** +([[sample-rate-switching]]), which is what regenerates the Hz-specified coefficients +([[runtime-filter-design]]). + +That the three receive instances share code but not state matters: two bugs found in 2026-07 +were exactly a failure of that separation — the AM DC blocker's state was a **file-scope static +shared across all three**, and `ApplyEQBandFilter` scrubbed the *receive* instance's state even +when called on the transmit path. + +⚠️ **Transmit audio changed in V1.4.0 even at 192 ksps.** The decimate-by-2 feeding the Hilbert +stage had a stopband that did not exist (flat to 0.425·Fs where ÷2 needs 0.25·Fs), folding +6–9.5 kHz back into the transmitted audio. See [[runtime-filter-design]]. + ## Related theory - [[iq-quadrature-sampling]] — complex baseband, the foundation - [[ssb-phasing-method]] — Hilbert ±45° TX pair + frequency-domain RX sideband selection - [[fast-convolution-filtering]] — the FFT overlap-save channel filter (Convolution-SDR core) - [[multirate-decimation]] — ÷8 RX / ÷16 TX rate changes +- [[runtime-filter-design]] — which stages are specified in Hz (regenerated per rate) vs as a + fraction of Fs (left alone), and why prewarping is what makes that work +- [[filter-hil-test]] — bench verification of the above on the real radio - [[iq-imbalance-correction]], [[agc-design]], [[noise-reduction]], [[zoom-fft]] - [[synchronous-am-detection]] — SAM (PLL carrier recovery) vs envelope AM - [[audio-equalizer]] — 14-band parallel filterbank (RX + TX) diff --git a/wiki/firmware/filter-hil-test.md b/wiki/firmware/filter-hil-test.md new file mode 100644 index 0000000..482c05e --- /dev/null +++ b/wiki/firmware/filter-hil-test.md @@ -0,0 +1,127 @@ +--- +title: Filter Hardware-in-the-Loop Test +type: decision +status: draft +created: 2026-07-29 +updated: 2026-07-29 +tags: [test, verification, hil, analog-discovery, filters, sample-rate, cat, agc] +source_refs: [] +related: ["[[runtime-filter-design]]", "[[sample-rate-switching]]", "[[cat-control]]", "[[dsp-chain]]", "[[agc-design]]", "[[tune-frequency-control]]", "[[iq-quadrature-sampling]]"] +--- + +# Filter Hardware-in-the-Loop Test + +`code/tools/filter_hil/` — a Python suite that measures the receive DSP filters **on the actual +radio** and checks they land on their labelled frequencies at both sample rates. It exists +because [[runtime-filter-design]] was otherwise only verified in simulation. + +Full operating instructions live in `code/tools/filter_hil/README.md`. This page records the +parts worth knowing without reading it: the method, the two traps, and the result. + +## Rig + +An Analog Discovery 2 drives `W1`/`W2` into the radio's I/Q receive inputs as a quadrature pair +and reads the demodulated audio back off the speaker with `Ch1`. CAT on `/dev/ttyACM1`, +diagnostics on `/dev/ttyACM0`. W1/W2 order does not matter — the suite tries both quadrature +senses and keeps whichever the SSB filter passes. + +## The method: differential measurement + +Every response is the **difference between two captures at the same injected frequency**, one +with the filter engaged and one with it bypassed: + +| Filter | Measured as | +|---|---| +| CW audio filters | `level(CF=k) − level(CF=5)` | +| Equaliser cells | one cell at 100, the rest at 0, against the flat reference | +| SSB convolution filter | `level(FW=x) − level(FW=widest)` | +| AM DC blocker | envelope level at `f_mod`, against 300 Hz | + +Everything the two captures have in common cancels exactly — AWG amplitude flatness, the codec +front end, the decimation rolloff, the SSB mask, the AF volume setting, the DAC, the speaker +amplifier. **That is what makes an absolute-level measurement taken off a speaker terminal good +enough to characterise a filter.** + +The **SSB filter is the control**: it always derived its coefficients from the true sample rate, +so it was never subject to the bug. If it shifts, the rig or the analysis is wrong, not the +firmware. + +## Trap 1: the injection frequency + +⚠️ The single most expensive thing to get wrong. `ReceiveProcessing` shifts **twice** before +decimating — by Fs/4 (`FreqShiftFs4`) and then by the fine tune plus any CW sidetone +(`FreqShiftF`). The tone that demodulates to DC therefore sits at: + +``` +centre = |Fs/4 + fineTuneFreq_Hz| +``` + +and a wanted audio frequency `f` is at `centre ± f`. Worked example from the bench, fine tune +−12250 Hz: + +| Fs | Fs/4 | fine tune | centre | inject for 1 kHz | +|---|---|---|---|---| +| 176.4 ksps | 44100 | −12250 | 31850 | 32850 | +| 192 ksps | 48000 | −12250 | 35750 | 36750 | + +`fineTuneFreq_Hz` is whatever the operator last tuned to and is routinely **several kilohertz** — +far wider than any passband being measured. Omitting it produces **silence at any drive level**, +which is indistinguishable from a dead rig. See [[tune-frequency-control]] for the shift +arithmetic. + +The suite does not assume the relationship; test `map` **measures** it. That test also reports +how far the real demodulation centre sits from nominal — about **−180 ppm** on this radio, which +is the Teensy's fractional I²S clock, not an error. + +## Trap 2: AGC must be off + +⚠️ [[agc-design]]'s look-ahead AGC compresses exactly the amplitude differences the suite +measures, so every filter skirt reads flat. Worse, on a quiet band it runs the gain up and +buries the injected tone 25–30 dB under the hiss — which presents as `iq_order` reporting +negative SNR for *all four* quadrature combinations, and a couple of hundred mV RMS on the +speaker with the AWG silent. + +There is **no CAT command for AGC**; it must be set from the touchscreen menu. The suite +refuses to run otherwise. (Diagnostic: if `PD;` shows the tone in the radio's own spectrum but +the audio does not, the DSP is receiving it and the problem is downstream gain.) + +## The pass criterion + +**Rate invariance, not absolute accuracy.** A corner measured at 192 ksps must land at the same +frequency at 176.4 ksps. The bug moves it by **−8.125 %**; the tolerance is **1.5 %** — a factor +of five between correct and broken. Absolute accuracy against the labelled frequency is checked +more loosely, because a smooth tilt anywhere in the analog path biases it without saying +anything about the firmware. + +Some equaliser cells are marked *edge limited*, where the SSB filter rather than the cell shapes +what was measured: cells 0 and 1 (198, 250 Hz) sit at or below the 200 Hz low cut, and cell 13 +(4000 Hz) sits in the decimation skirt — whose corner is a fraction of Fs and is *meant* to move +with it. Their absolute tolerance is relaxed; their rate invariance is not. + +## Result + +Measured on the bench: **95 checks passed, 0 failed.** Every CW corner and equaliser centre holds +to within **0.3 %** across the rate change where the frozen tables moved them by 8.125 %. The SSB +control reads **0.04 %**. + +## The suite tests itself + +`test_filter_hil.py` covers the measurement maths without hardware, **including a check that the +comparison fails when handed a simulated −8.125 % shift**. Without that, a suite that quietly +passed everything would look identical to a working radio. + +## Coupling to the firmware + +- It needed CAT access to settings that were previously touchscreen-only — which is why the + `SR`, `CF`, `EQ` and `FL` commands were added ([[cat-control]]). +- ⚠️ `bandtable.py` **mirrors design constants from `DSP_FIR.cpp` and `Globals.cpp` by hand**. + Nothing detects a firmware value edited without updating it. Re-check that file whenever the + filter design constants change. +- Do not touch the front panel while it runs — menu interaction triggers a settings save, which + would make the test configuration permanent in [[persistent-config]]. + +## Open questions +- AGC-off is enforced by refusal rather than by control. A CAT command for AGC mode would let + the suite set and restore it like everything else it touches. +- The −180 ppm I²S clock offset is measured and tolerated; it has not been checked against the + Teensy's spec or across temperature. diff --git a/wiki/firmware/mode-state-machine.md b/wiki/firmware/mode-state-machine.md index 645f49c..8bb2cb8 100644 --- a/wiki/firmware/mode-state-machine.md +++ b/wiki/firmware/mode-state-machine.md @@ -3,10 +3,10 @@ title: Mode State Machine (ModeSm) type: module status: draft created: 2026-06-08 -updated: 2026-06-08 +updated: 2026-07-29 tags: [state-machine, ssb, cw, transmit, keyer, iambic, calibration, statesmith] source_refs: [] -related: ["[[overview]]", "[[state-machine-architecture]]", "[[tune-frequency-control]]", "[[main-loop]]", "[[hardware-state-machine]]", "[[ssb-phasing-method]]", "[[rf-board]]", "[[audio-io]]"] +related: ["[[overview]]", "[[state-machine-architecture]]", "[[tune-frequency-control]]", "[[main-loop]]", "[[hardware-state-machine]]", "[[ssb-phasing-method]]", "[[rf-board]]", "[[audio-io]]", "[[cat-control]]"] --- # Mode State Machine (ModeSm) @@ -73,6 +73,12 @@ All dispatched from [[main-loop]] (`ModeSm_dispatch_event(&modeSM, …)`): - **CW_RECEIVE** → `KEY_PRESSED` ⇒ CW_TRANSMIT_MARK (straight key); `DIT_PRESSED` ⇒ CW_TRANSMIT_DIT_MARK; `DAH_PRESSED` ⇒ CW_TRANSMIT_DAH_MARK (keyer); `TO_SSB_MODE` ⇒ SSB_RECEIVE. + +> ⚠️ **`TO_SSB_MODE` used to be dispatched only from the front-panel button** +> (`Loop.cpp:479/484`). CAT's `MD` command changed `bands[].mode` without dispatching it, so a +> CAT client could put the radio into CW and **never get it out**. `MD1`/`MD2` now dispatch +> `TO_SSB_MODE` when in CW receive — see [[cat-control]]. The general lesson: a mode change that +> does not go through this state machine is not a mode change. - Transmit transitions are guarded by **`IsTxAllowed()`** = current band is a `HAM_BAND` (`Mode.cpp:39`) — the safety interlock that blocks TX out of band. diff --git a/wiki/firmware/overview.md b/wiki/firmware/overview.md index 94b1c7d..83231fa 100644 --- a/wiki/firmware/overview.md +++ b/wiki/firmware/overview.md @@ -3,10 +3,10 @@ title: Firmware Architecture Overview type: overview status: draft created: 2026-06-08 -updated: 2026-06-08 +updated: 2026-07-29 tags: [architecture, state-machines, dsp, teensy] source_refs: [] -related: ["[[main-loop]]", "[[mode-state-machine]]", "[[ui-state-machine]]", "[[tune-frequency-control]]", "[[hardware-state-machine]]", "[[rf-board]]", "[[filter-boards]]", "[[dsp-chain]]", "[[display-subsystem]]", "[[front-panel]]", "[[cat-control]]", "[[persistent-config]]", "[[code-heritage]]", "[[hardware-platform]]", "[[i2c-bus-map]]"] +related: ["[[main-loop]]", "[[mode-state-machine]]", "[[ui-state-machine]]", "[[tune-frequency-control]]", "[[hardware-state-machine]]", "[[rf-board]]", "[[filter-boards]]", "[[dsp-chain]]", "[[display-subsystem]]", "[[front-panel]]", "[[cat-control]]", "[[persistent-config]]", "[[code-heritage]]", "[[hardware-platform]]", "[[i2c-bus-map]]", "[[sample-rate-switching]]", "[[runtime-filter-design]]"] --- # Firmware Architecture Overview @@ -113,7 +113,8 @@ screens), [[ui-state-machine]]. - **MCU**: Teensy 4.1 (ARM Cortex-M7, 600 MHz) - **RF**: Si5351 clock generator for quadrature VFO; relay-switched BPF/LPF banks -- **Audio**: real-time 48/96/192 kHz via the OpenAudio_ArduinoLibrary +- **Audio**: real-time via the OpenAudio_ArduinoLibrary; raw rate **192 kHz** default or + **176.4 kHz**, selectable at run time and persisted ([[sample-rate-switching]]) - **Display**: RA8875-driven TFT - **Front panel I/O**: MCP23017 I²C GPIO expanders; rotary encoders diff --git a/wiki/firmware/persistent-config.md b/wiki/firmware/persistent-config.md index 5878e65..87dccfd 100644 --- a/wiki/firmware/persistent-config.md +++ b/wiki/firmware/persistent-config.md @@ -3,10 +3,10 @@ title: Persistent Configuration (ED struct, Storage, ParamSave) type: module status: draft created: 2026-06-08 -updated: 2026-06-08 -tags: [config, ed-struct, littlefs, sdcard, json, persistence, globals, bands] +updated: 2026-07-29 +tags: [config, ed-struct, littlefs, sdcard, json, persistence, globals, bands, sample-rate] source_refs: [] -related: ["[[overview]]", "[[main-loop]]", "[[tune-frequency-control]]", "[[hardware-state-machine]]", "[[iq-imbalance-correction]]", "[[dsp-chain]]"] +related: ["[[overview]]", "[[main-loop]]", "[[tune-frequency-control]]", "[[hardware-state-machine]]", "[[iq-imbalance-correction]]", "[[dsp-chain]]", "[[sample-rate-switching]]"] --- # Persistent Configuration @@ -21,7 +21,7 @@ operating configuration and calibration**, with sensible inline defaults. Field | Group | Fields (selected) | |---|---| -| Audio / DSP | `agc`, `audioVolume`, `rfGainAllBands_dB`, `nrOptionSelect`, `ANR_notchOn`, `currentMicGain` | +| Audio / DSP | `agc`, `audioVolume`, `rfGainAllBands_dB`, `nrOptionSelect`, `ANR_notchOn`, `currentMicGain`, **`sampleRate`** | | Tuning | `activeVFO`, `currentBand[2]`, `centerFreq_Hz[2]`, `fineTuneFreq_Hz[2]`, `stepFineTune`, `freqIncrement`, `freqCorrectionFactor`, `lastFrequencies[band][3]` | | Modulation/CW | `modulation[2]`, `keyType`, `currentWPM`, `keyerFlip`, `CWToneIndex`, `CWFilterIndex`, `sidetoneVolume`, `decoderFlag` | | Spectrum/display | `spectrum_zoom`, `spectrumScale`, `spectrumNoiseFloor[band]`, `spectrumFloorAuto`, `dbm_calibration[band]` (S-meter) | @@ -45,6 +45,15 @@ power-cal tanh fit in [[tune-frequency-control]]; the tuning fields by - **`Globals.cpp`** — definitions of everything declared `extern` in `SDT.h`: `ED` itself, `SampleRate`, the `hardwareRegister`, the state-machine instances (`modeSM`, `uiSM`, …), the `SR[]` sample-rate table, and the `bands[]` table. Also `ComputeDitDuration` etc. + +> **`SampleRate` is a reference, not a copy.** `uint8_t& SampleRate = ED.sampleRate;` +> (`Globals.cpp:106-109`, declared `SDT.h:735`). This is how a value that hundreds of +> `SR[SampleRate].rate` call sites read as a plain global got moved into `ED` — and hence into +> the saved JSON (`Storage.cpp:69`, restored `:278`/`:504`) — without touching any of them. +> Because `InitializeStorage()` runs *before* `InitializeSignalProcessing()` and +> `InitializeAudio()` (`Globals.cpp:528-533`), the restored rate is simply in force by the time +> the DSP chain is built; there is no separate "apply saved rate" step. +> See [[sample-rate-switching]]. - **`bands[]`** — per-band static data (edges `fBandLow/High_Hz`, filter cuts `FLoCut/FHiCut_Hz`, type `HAM_BAND`/etc., name). Read constantly by tuning, filtering, and the TX interlock (`IsTxAllowed`). diff --git a/wiki/firmware/runtime-filter-design.md b/wiki/firmware/runtime-filter-design.md new file mode 100644 index 0000000..8cffc62 --- /dev/null +++ b/wiki/firmware/runtime-filter-design.md @@ -0,0 +1,143 @@ +--- +title: Run-Time Filter Design (rate-independent coefficients) +type: decision +status: draft +created: 2026-07-29 +updated: 2026-07-29 +tags: [dsp, filters, chebyshev, bilinear, prewarp, equalizer, cw, sample-rate, iir, fir] +source_refs: [] +related: ["[[sample-rate-switching]]", "[[dsp-chain]]", "[[cw-processing]]", "[[audio-equalizer]]", "[[multirate-decimation]]", "[[filter-hil-test]]", "[[ssb-phasing-method]]", "[[theory-overview]]"] +--- + +# Run-Time Filter Design (rate-independent coefficients) + +Several audio-rate filter stages shipped as **coefficient tables designed offline for one +sample rate** — 24 ksps, i.e. 192 ksps at the ADC decimated by 8. They are now **generated from +an analog design spec on every rate change**, which is what makes +[[sample-rate-switching]] possible without every labelled frequency moving. + +## The bug this fixes + +A frozen digital coefficient table encodes frequencies as *fractions of Fs*. Run the same table +at a different Fs and every corner scales with it: + +``` +176400 / 192000 = 0.91875 +``` + +So at 176.4 ksps: + +| Filter | Labelled | Actually was | +|---|---|---| +| CW audio filter | 2.0 kHz | **1.84 kHz** | +| Equaliser top cell | 4000 Hz | **3675 Hz** | + +An 8.125 % error on every CW corner and every equaliser centre — not subtle, and exactly the +kind of thing a user would report as "the 2 kHz filter sounds narrow". + +## Recovering the prototypes rather than guessing them + +The point of pride in this change is that **the filter families are unchanged**: what was a +12-pole Chebyshev is still a 12-pole Chebyshev. The design constants were *recovered* from the +shipped tables, not re-invented: + +- **CW audio filters.** The tables measure **0.0200 dB** of passband ripple, and `cheby1(12, + 0.02)` fits them to **0.013 dB RMSE**. That identifies them as Chebyshev type I, whose natural + design parameter is the ripple edge — hence `CW_AUDIO_RIPPLE_EDGE_HZ[] = {807.1, 1038.0, + 1269.0, 1731.5, 1963.2}` (`DSP_FIR.cpp:1242-1244`), sitting a few percent below the nominal + 840/1080/1320/1800/2000 Hz labels. +- **Equaliser cells.** Every biquad has `b1 = 0` and `b2 = −b0`, which puts its zeros at + `z = ±1`. That is precisely the bilinear image of an **analog bandpass**, so an *inverse* + bilinear transform recovers the analog prototype exactly — four bandpass sections per cell, + stored as (frequency-ratio, Q) pairs in `EQ_BAND_PROTO[14][4]` (`DSP_FIR.cpp:1263-1278`). + +`code/tools/extract_filter_prototypes.py` performs that recovery and prints the C literals. It +reads the original tables, which are **kept verbatim as test fixtures** in +`code/test/reference_filters.cpp` — so the thing the generator is checked against is the thing +it replaced. + +## Prewarping is the load-bearing part + +Designing in the analog domain and bilinear-transforming is not by itself enough. The bilinear +transform **compresses the analog frequency axis** as it wraps it onto the unit circle, so a +section designed at ω lands slightly below ω once discretised — and by a rate-dependent amount. +`PrewarpRadians()` (`DSP_FIR.cpp:998`) cancels that: + +``` +ω_prewarped = 2·Fs·tan(π·f / Fs) +``` + +**This is what makes the result rate-independent rather than merely re-derived.** Without it the +corners would still drift with Fs, just by less. + +## The generators + +| Function | `DSP_FIR.cpp` | Produces | +|---|---|---| +| `PrewarpRadians` | `:998` | prewarped analog frequency | +| `BilinearBiquad` | `:968` | one analog 2nd-order section → one ARM biquad | +| `CalcChebyshevILowpassCoeffs` | `:1024` | Chebyshev I lowpass as a biquad cascade; poles on the s-plane ellipse, normalised to unity DC gain | +| `CalcBandpassCascadeCoeffs` | `:1086` | an equaliser cell from its 4-section analog prototype | +| `NormalizeFIRDCGain` | `:1310` | unity-DC-gain scaling for the generated FIRs | + +Two entry points call them: + +- **`InitializeReceiveAudioFilterCoeffs(audioFs_Hz)`** (`:1330`) — the 5 CW audio lowpasses, the + 14 equaliser cells, and the CW decoder input FIR. Called from the top of `InitializeFilters()` + (`DSP_FFT.cpp:342`), so it runs at startup *and* on every rate change, before the ARM instances + are bound. +- **`InitializeTransmitFilterCoeffs(audioFs_Hz)`** (`:1369`) — the two stages either side of the + Hilbert transform. Called from `InitializeTransmitFilters()` (`DSP_FFT.cpp:447`). + +Note the argument in both cases is `SR[SampleRate].rate / RXfilters.DF` — the **audio** rate, +not the raw rate. A decimating FIR filters at its input rate and an interpolating one at its +output rate; for both transmit stages that rate is the audio rate, not the 12 ksps the Hilbert +transform between them runs at (`DSP_FIR.cpp:1363-1365`). + +## Deliberately *not* generated + +The decimation, interpolation, Hilbert and [[zoom-fft]] filters are left alone. Their corners +are specified **as a fraction of Fs**, and scaling with Fs is exactly what an anti-alias or +anti-image filter *should* do (`DSP_FIR.cpp:1322-1326`). Regenerating them would be a no-op at +best. + +This resolves the asymmetry [[multirate-decimation]] describes: the split is not "RX runtime / +TX fixed", it is **"specified in Hz → must be generated" vs "specified as a fraction of Fs → +already correct"**. + +## Three bugs found while in there + +- ⚠️ **The transmit decimate-by-2 feeding the Hilbert stage had no usable stopband.** Its table + was flat to **0.425·Fs** where a decimate-by-2 needs everything below **0.25·Fs** gone, so + **6–9.5 kHz folded back into the transmit audio unattenuated**. Replaced with a real lowpass at + 3.5 kHz (`TX_DECIMATE3_FC_HZ`, `DSP_FIR.cpp:1296`), which sits above the 2.76 kHz the audio + bandwidth filter passes and so costs no wanted signal. **Transmitted audio therefore differs + from previous releases even at 192 ksps** — the one user-visible behaviour change in this work + that is not a rate-change effect. +- **The AM DC blocker** had a fixed pole at 0.99 and, worse, its state was a **file-scope static + shared across all three `ReceiveFilterConfig` instances**. +- **`ApplyEQBandFilter` scrubbed the receive instance's state even on the transmit path.** + +## Verification + +`code/test/FilterDesign_test.cpp` (683 lines) does two things: + +1. **Fidelity** — measures each generated filter against the reference table it replaces: + **CW audio within 0.05 dB, equaliser cells within 0.01 dB**. +2. **Rate independence** — checks every corner holds across both rates, where the frozen tables + moved it by 8.125 %. + +Both are simulation. The on-the-bench measurement is [[filter-hil-test]], which found **95 +checks passed, 0 failed**, every CW corner and equaliser centre holding to **within 0.3 %** +across the rate change. + +## Open questions +- The equaliser prototypes are stored to 9 decimal places as recovered floats. Nobody has + identified what the *original* analog design was (a specific filterbank standard?), which + would let the table be replaced by a formula. See [[audio-equalizer]]. +- Whether the AM DC blocker's pole should itself be rate-derived now that it is per-instance — + it was made per-instance but the fixed 0.99 was not obviously revisited. +- `CW_DECODE_FIR_FC_HZ` (1749.1 Hz) is a **−6 dB** corner because that is what `CalcFIRCoeffs` + takes, while the filter is nominally described by its −3 dB point of 1560 Hz + (`DSP_FIR.cpp:1280-1283`). Worth a note on [[cw-processing]] so the two numbers are not read + as a contradiction. diff --git a/wiki/firmware/sample-rate-switching.md b/wiki/firmware/sample-rate-switching.md new file mode 100644 index 0000000..728d1df --- /dev/null +++ b/wiki/firmware/sample-rate-switching.md @@ -0,0 +1,122 @@ +--- +title: Runtime Sample-Rate Switching (192 / 176.4 ksps) +type: decision +status: draft +created: 2026-07-29 +updated: 2026-07-29 +tags: [sample-rate, dsp, i2s, menu, cat, persistent-config, 176k, 192k] +source_refs: [] +related: ["[[runtime-filter-design]]", "[[multirate-decimation]]", "[[audio-io]]", "[[persistent-config]]", "[[tune-frequency-control]]", "[[cat-control]]", "[[ui-state-machine]]", "[[display-subsystem]]", "[[zoom-fft]]", "[[theory-overview]]"] +--- + +# Runtime Sample-Rate Switching (192 / 176.4 ksps) + +The raw ADC/DAC rate is now **selectable at run time and persisted**, where it used to be a +compile-time constant in all but name. Two rates are offered: **192 ksps** (the historical +rate) and **176.4 ksps**. Landed on `rx-dsp-176k-stage-test`, merged for V1.4.0. + +This page covers the *mechanism*. The filters that had to be made rate-independent before it +could work are in [[runtime-filter-design]]; the bench verification is in +[[filter-hil-test]]. + +## What changed, in one line + +`SampleRate` used to be a plain `uint8_t` written once at startup. It is now a **reference into +the persisted config**: + +```c +// Globals.cpp:106-109 +uint8_t& SampleRate = ED.sampleRate; +``` + +with `ED.sampleRate` defaulting to `SAMPLE_RATE_192K` (`SDT.h:287`) and declared `extern uint8_t& +SampleRate` (`SDT.h:735`). Every one of the many `SR[SampleRate].rate` call sites keeps working +unmodified while the value moves into [[persistent-config]] and gets serialized to JSON +(`Storage.cpp:69`, restored at `:278` and `:504`). + +This supersedes the wiki's earlier claim that `SampleRate` is "set once and **never reassigned** +anywhere in the firmware" — see [[multirate-decimation]], corrected 2026-07-29. + +## `ChangeSampleRate()` — the switch itself + +`MainBoard_AudioIO.cpp:519`. Order matters throughout: + +1. **Bail if unchanged** (`:520`) — the whole operation is expensive and audibly disruptive. +2. **Compensate the tuning, before `SampleRate` is updated** (`:530-532`). The RX VFO is + programmed to `centerFreq_Hz` and the receive DSP shifts by +Fs/4, so the received frequency + is `centerFreq_Hz − Fs/4`. Changing Fs moves that by `ΔFs/4` — 3.9 kHz between these two + rates — so `centerFreq_Hz` is shifted by the same amount to hold the dial frequency + constant. Applied to **both VFOs** so a later VFO switch is also correct. This must be + computed while `SR[SampleRate]` still names the *old* rate. +3. **`AudioNoInterrupts()`** (`:534`), then assign `SampleRate`. +4. **`SetI2SFreq()`** (`:537`) reprograms the SAI1 PLL divider chain for the new rate. +5. **`InitializeSignalProcessing()`** (`:541`) rebuilds the entire DSP chain — all three + `ReceiveFilterConfig` instances plus the transmit one (`DSP.cpp:758-762`), which is what + regenerates the rate-dependent coefficients ([[runtime-filter-design]]) and re-derives AGC + and CW parameters. +6. **`UpdateSampleRateDependentOscillators()`** (`:503`) retunes the sidetone and the TX-IQ-cal + tone. Both are OpenAudio synthesized oscillators whose `frequency()` argument is scaled by + `AUDIO_SAMPLE_RATE_EXACT / SR[SampleRate].rate`, so without this they shift audibly. +7. **Flush the four input queues** (`:545-548`) so samples captured at the old rate are not + processed at the new one, then `AudioInterrupts()`. +8. **`UpdateTuneState()`** (`:554`) reprograms the Si5351 for the compensated centre frequency. + Deliberately *outside* the interrupts-disabled window, because it does I²C transactions. + +### The leak that had to be fixed first +`InitializeDecimationFilter` `malloc`s its coefficient and state buffers. At boot-only +initialization nobody noticed it never freed; called repeatedly on rate changes it would leak +every time. It now frees the previous allocation first — a prerequisite for step 5 being +callable more than once. + +## Ways to reach it + +| Path | Where | Notes | +|---|---|---| +| Front panel | new **"Sample Rate"** primary menu, `MainBoard_DisplayMenus.cpp:580-611` | Two options, "192 ksps" / "176.4 ksps". `primaryMenu[]` grew 8 → **9** entries (`:602`, `MainBoard_Display.h:371`). | +| CAT | `SR0;` = 176.4k, `SR1;` = 192k; `SR;` reads back | `CAT.cpp:801-838`. **Rejected while transmitting** — see [[cat-control]]. | +| Boot | automatic | `InitializeStorage()` runs before `InitializeSignalProcessing()`/`InitializeAudio()` (`Globals.cpp:528-533`), so the restored rate is simply in force by the time the DSP is built. There is no "apply saved rate" step. | + +## Display paths that assumed 192 kHz + +Three places had the old rate baked in and were rewritten to derive from `SR[SampleRate].rate`: + +- **Spectrum frequency ticks.** Previously a fixed pixel table with a non-round frequency step. + Ticks are now positioned by `FreqToBin()` at *round* frequencies + (`MainBoard_DisplayHome.cpp:550-571`), so labels stay aligned with the trace at any rate. The + clear strip was widened so old ticks are wiped on zoom/tune changes. +- **Audio spectrum axis.** Span is now `SR[SampleRate].rate / 32` (`:1301-1303`) rather than a + hard-coded 0–6000 Hz — 6.0 kHz at 192 ksps, 5.5 kHz at 176.4 ksps. Without this, tone + frequencies read wrong at the new rate. +- **Settings pane** gained a `"Rate:"` row (`:1654`); Key Type moved down one. + +See [[display-subsystem]]. [[zoom-fft]]'s bin widths are likewise rate-dependent and its +"375 Hz base bin" figure is now a 192-ksps-only number. + +## Simulator + +The OpenAudio mock was made rate-aware: test-tone carrier at Fs/4, sample pacing and SDL output +rate derived from the current rate, and SDL audio re-initialized when the rate changes +(`code/test/OpenAudio_ArduinoLibrary_mock.cpp`, `RadioSimulator_main.cpp`). + +## The 176.4 ksps rate + +What is verifiable from the code: 176400 = 44100 × 4, so after the `÷8` RX decimation +([[multirate-decimation]]) the audio rate is **22.05 ksps** rather than the 24 ksps of the +192 ksps path — i.e. it lands on the 44.1 kHz family instead of the 48 kHz one. Both rates are +marked `// OK` in the `SR[]` table (`Globals.cpp:79-98`); most of the other 16 entries are +marked `NOT OK` and are not offered by the menu. + +⚠️ **The motivation is not recorded anywhere in the tree** — not in the commit message +(`9c8bb16`), not in `code/docs/RX_DSP_Chain_Parameters.md`. Host-side resampling +([[usb-audio]]) is the obvious guess but is a guess; see Open questions. + +## Open questions +- **Why 176.4 ksps was added.** Owner question — the tree does not say. If it is USB-audio + resampling, that connection belongs on [[usb-audio]]. +- Whether a rate change during CW keying or with the AGC hung can produce an audible artefact + beyond the intended brief mute — `ChangeSampleRate` is only interlocked against *transmit* + over CAT, not over the menu. +- Whether `ED.sampleRate` restored from a config written by an older firmware (no `sampleRate` + key) reliably falls back to 192 ksps. The `doc["sampleRate"] | ED.sampleRate` idiom + (`Storage.cpp:278`) says yes, but it has not been tested against a real V1.3 config file. +- Group delay and loop-budget impact at 176.4 ksps versus 192 ksps ([[real-time-constraints]]). diff --git a/wiki/firmware/tune-frequency-control.md b/wiki/firmware/tune-frequency-control.md index bca1f46..57e2085 100644 --- a/wiki/firmware/tune-frequency-control.md +++ b/wiki/firmware/tune-frequency-control.md @@ -3,10 +3,10 @@ title: Frequency Control & Tuning Math (Tune.cpp) type: module status: draft created: 2026-06-08 -updated: 2026-06-16 -tags: [tuning, vfo, frequency, fs-over-4, cw-offset, fast-tune, power-calibration] +updated: 2026-07-29 +tags: [tuning, vfo, frequency, fs-over-4, cw-offset, fast-tune, power-calibration, sample-rate] source_refs: [] -related: ["[[overview]]", "[[hardware-state-machine]]", "[[rf-board]]", "[[mode-state-machine]]", "[[iq-quadrature-sampling]]", "[[dsp-chain]]", "[[rapid-tune-mute-freeze]]"] +related: ["[[overview]]", "[[hardware-state-machine]]", "[[rf-board]]", "[[mode-state-machine]]", "[[iq-quadrature-sampling]]", "[[dsp-chain]]", "[[rapid-tune-mute-freeze]]", "[[sample-rate-switching]]", "[[filter-hil-test]]"] --- # Frequency Control & Tuning Math (Tune.cpp) @@ -49,6 +49,20 @@ that junk, then shifts it back in software. The complex baseband ([[iq-quadratur makes the negative-frequency placement meaningful. (Fs/4 is also the cheapest possible digital mix — multiplies are just ±1, ±j.) +**Fs/4 is 48 kHz at 192 ksps and 44.1 kHz at 176.4 ksps** ([[sample-rate-switching]]), and this +has two consequences: + +- **Changing the rate moves the dial** unless compensated. `ChangeSampleRate()` shifts + `ED.centerFreq_Hz` for **both VFOs** by `Δ(Fs/4)` — 3.9 kHz between the two rates — before it + updates `SampleRate`, so `centerFreq_Hz − Fs/4` is held constant and the operator stays on + frequency (`MainBoard_AudioIO.cpp:523-532`). +- ⚠️ **Anything injecting a signal into the receive path must allow for the fine tune as well.** + `ReceiveProcessing` shifts *twice* — by Fs/4 (`FreqShiftFs4`) and then by the fine tune + (`FreqShiftF`) — so the input frequency that demodulates to DC is `|Fs/4 + fineTuneFreq_Hz|`, + not Fs/4. `fineTuneFreq_Hz` is routinely several kHz, far wider than any passband, so omitting + it produces **silence rather than a small error**. This is the single most expensive trap in + [[filter-hil-test]]. + ## The frequency functions | Function | Returns | Notes | diff --git a/wiki/firmware/ui-state-machine.md b/wiki/firmware/ui-state-machine.md index b15ec09..88145e1 100644 --- a/wiki/firmware/ui-state-machine.md +++ b/wiki/firmware/ui-state-machine.md @@ -3,10 +3,10 @@ title: UI State Machine (UISm) type: module status: draft created: 2026-06-08 -updated: 2026-06-08 +updated: 2026-07-29 tags: [state-machine, ui, menus, screens, splash, statesmith] source_refs: [] -related: ["[[overview]]", "[[state-machine-architecture]]", "[[display-subsystem]]", "[[front-panel]]", "[[main-loop]]", "[[mode-state-machine]]"] +related: ["[[overview]]", "[[state-machine-architecture]]", "[[display-subsystem]]", "[[front-panel]]", "[[main-loop]]", "[[mode-state-machine]]", "[[sample-rate-switching]]"] --- # UI State Machine (UISm) @@ -95,8 +95,18 @@ Two distinct shapes: ModeSm (into `CALIBRATION_STATES`, hardware) — see [[mode-state-machine]], [[hardware-state-machine]]. +## Menu content is data, not states +The structural states above are fixed; the menu *contents* live in +`MainBoard_DisplayMenus.cpp` as `PrimaryMenuOption primaryMenu[9]` with nested +`SecondaryMenuOption` arrays ([[display-subsystem]]). Adding a menu therefore does **not** touch +UISm or the `.drawio` diagram — the **"Sample Rate"** menu ([[sample-rate-switching]]) grew the +array from 8 to 9 entries and required no state-machine regeneration. Worth knowing before +reaching for StateSmith. + ## Open questions - How encoder rotation maps to `mainMenuSelection`/`secondMenuSelection` movement (selection is updated outside UISm, in the front-panel/menu code). - What `uiUp` actually points at and how deep back-navigation works. -- The menu *content* model (where the menu item lists live) vs. UISm's structural states. +- `mainMenuLength`/`secondMenuLength` are UISm state variables while the arrays they describe + live in the display module. Nothing links the two at compile time, so a menu added without + updating the length would silently truncate — check how they are kept in step. diff --git a/wiki/hardware/hardware-platform.md b/wiki/hardware/hardware-platform.md index 0abe96c..3692105 100644 --- a/wiki/hardware/hardware-platform.md +++ b/wiki/hardware/hardware-platform.md @@ -3,10 +3,10 @@ title: Hardware Platform (T41-EP) type: hardware status: stable created: 2026-06-14 -updated: 2026-06-16 -tags: [hardware, teensy, t41-ep, board-stack, codec, i2c, platform] +updated: 2026-07-29 +tags: [hardware, teensy, t41-ep, board-stack, codec, i2c, platform, sample-rate] source_refs: [sources/t41-ep-schematics] -related: ["[[overview]]", "[[i2c-bus-map]]", "[[rf-board-electronics]]", "[[filter-board-electronics]]", "[[rf-board]]", "[[filter-boards]]", "[[front-panel]]", "[[display-subsystem]]", "[[hardware-state-machine]]", "[[audio-io]]"] +related: ["[[overview]]", "[[i2c-bus-map]]", "[[rf-board-electronics]]", "[[filter-board-electronics]]", "[[rf-board]]", "[[filter-boards]]", "[[front-panel]]", "[[display-subsystem]]", "[[hardware-state-machine]]", "[[audio-io]]", "[[sample-rate-switching]]", "[[filter-hil-test]]"] --- # Hardware Platform (T41-EP) @@ -76,10 +76,16 @@ i2s_quadIn ch0/1 = mic L/R (Audio Board) ch2/3 = RX I/Q (PCM1808) i2s_quadOut ch0/1 = TX I/Q (Audio Board) ch2/3 = speaker L/R (PCM5102) ``` -I²S sample rate is PLL-configured for **48 / 96 / 192 kHz** (`SetI2SFreq`); Phoenix runs at -**192 kHz** raw ([[multirate-decimation]], [[zoom-fft]]). Mode-based mixer routing in +I²S sample rate is set by `SetI2SFreq()`, which computes the SAI1 PLL divider chain +(`n1`, `n2`, fractional `C`) for an arbitrary requested rate. Phoenix offers **192 kHz** +(default) and **176.4 kHz**, switchable at run time and persisted +([[sample-rate-switching]], [[multirate-decimation]], [[zoom-fft]]). The three converters share +clocks, so the rate change applies to all of them at once. Mode-based mixer routing in `UpdateAudioIOState()` connects mic→DSP→TX-I/Q on transmit and RX-I/Q→DSP→speaker on receive. +The generated clock is not exact: [[filter-hil-test]] measures the real demodulation centre +**≈ −180 ppm** from nominal, which is the Teensy's fractional I²S clock rather than an error. + **I²S pin routing (Teensy quad-I2S, schematic-confirmed 2026-06-15).** The three clocks are **shared** by all three converters (U5 PCM5102, U6 PCM1808, U7 SGTL5000 adapter): diff --git a/wiki/index.md b/wiki/index.md index 2669c42..5c2e242 100644 --- a/wiki/index.md +++ b/wiki/index.md @@ -3,10 +3,10 @@ title: Phoenix Wiki Index type: index status: stub created: 2026-06-08 -updated: 2026-06-16 +updated: 2026-07-29 --- - + # Phoenix Wiki — Index @@ -27,6 +27,11 @@ _Modules, architecture, state machines, DSP chains, design decisions, code herit - [[rapid-tune-mute-freeze]] — `MUTE_ON_RAPID_TUNE`: mute audio + freeze spectrum on fast tuning; Fine Tune keeps only the blue bar moving. *(draft)* - [[code-heritage]] — lineage from DD4WH Teensy Convolution SDR; contributor list; GPLv3. +**Sample rate & filter design** _(V1.4.0)_ +- [[sample-rate-switching]] — 192 / 176.4 ksps selectable at run time and persisted; `ChangeSampleRate()`, the Fs/4 dial compensation, menu + `SR` CAT paths. *(draft)* +- [[runtime-filter-design]] — Hz-specified filters regenerated per rate from recovered analog prototypes; why prewarping is the load-bearing part; the TX decimate-by-2 aliasing fix. *(draft)* +- [[filter-hil-test]] — bench measurement of the above on the real radio; the `|Fs/4 + fineTune|` injection trap and the AGC-off requirement. *(draft)* + **State machines** - [[mode-state-machine]] — ModeSm: SSB/CW × RX/TX, iambic keyer, calibration entry (generated). *(draft)* - [[ui-state-machine]] — UISm: splash→home→menu stack + tool screens (DFE/EQ/BIT/cal) (generated). *(draft)* @@ -48,7 +53,7 @@ _Modules, architecture, state machines, DSP chains, design decisions, code herit **Control flow & config** - [[main-loop]] — Loop.cpp: `loop()` sequence + interrupt FIFO + CW key/PTT handling. -- [[cat-control]] — CAT.cpp: Kenwood (TS-480/2000) emulation, 25-command dispatch table on SerialUSB1; +custom ED/PR dumps. *(draft)* +- [[cat-control]] — CAT.cpp: Kenwood (TS-480) emulation, **29**-command dispatch table on SerialUSB1; custom ED/PR dumps + SR/CF/EQ/FL DSP settings; the `MD` sideband-mirroring fix. *(draft)* - [[persistent-config]] — the `ED` struct (single source of truth) → JSON on LittleFS+SD; Config.h/Globals/ParamSave. *(draft)* ## Theory @@ -59,14 +64,14 @@ fundamentals (no copy of the Purdum & Peter book). Code claims cited `file:line` - [[iq-quadrature-sampling]] — complex baseband; sign-of-frequency; image problem. *(draft)* - [[ssb-phasing-method]] — SSB by phasing: ±45° Hilbert TX pair + freq-domain RX. *(draft)* - [[fast-convolution-filtering]] — FFT overlap-save channel filter; the Convolution-SDR core. *(draft)* -- [[multirate-decimation]] — ÷8 RX / ÷16 TX polyphase rate changes; tap-count tradeoff. *(draft)* +- [[multirate-decimation]] — ÷8 RX / ÷16 TX polyphase rate changes; tap-count tradeoff; Hz-specified vs Fs-fraction stages. *(draft)* - [[iq-imbalance-correction]] — per-band amp/phase correction & 3-pass calibration sweep. *(draft)* - [[agc-design]] — wdsp look-ahead AGC: ring-buffer attack, hang state machine. *(draft)* - [[noise-reduction]] — Kim / MMSE-spectral / LMS-notch NR. *(draft)* - [[synchronous-am-detection]] — SAM: PLL carrier recovery for fade-robust AM. *(draft)* -- [[audio-equalizer]] — 14-band parallel filterbank (RX + TX audio). *(draft)* +- [[audio-equalizer]] — 14-band parallel filterbank (RX + TX audio); centre-frequency table; cells generated per rate. *(draft)* - [[tx-carrier-null]] — LO-leakage suppression via per-band DC offset (distinct from image). *(draft)* -- [[zoom-fft]] — spectrum-display zoom via IIR decimation (raw 192 kHz, 375 Hz base bin). *(draft)* +- [[zoom-fft]] — spectrum-display zoom via IIR decimation (raw 192 kHz → 375 Hz base bin; rate-dependent). *(draft)* ## Hardware _The physical T41-EP platform the firmware drives: boards, chips, buses, power. Distinct from diff --git a/wiki/log.md b/wiki/log.md index 8da4e68..9ac329f 100644 --- a/wiki/log.md +++ b/wiki/log.md @@ -704,3 +704,69 @@ vs speed-up; same draw-cost lesson) and the trace-over-highlight trade-off of th spectrum-refresh-floor (all in `related` + inline). **index.md** bumped firmware 21→22 (44 content pages). Status `draft` — display fast-path is hardware-exercised, not unit-tested; thresholds (`RAPID_TUNE_ENGAGE_MS=60`/`RAPID_TUNE_RELEASE_MS=180`) pending bench tuning. + +## [2026-07-29] ingest | V1.4RC merge — runtime sample rate, rate-independent filters, HIL suite +Brought the wiki current with the `V1.4RC` merge (`rx-dsp-176k-stage-test` + `fast_encoder`). +The wiki had been written entirely on `fast_encoder` and knew nothing of the sample-rate work, +so this is a content ingest from source rather than from a `raw/` document. + +**Three new pages** (all `type: decision`, `status: draft`): +- **firmware/sample-rate-switching.md** — 192 / 176.4 ksps selectable at run time and persisted. + `SampleRate` is now `uint8_t& = ED.sampleRate` (`Globals.cpp:106-109`), which is how a value + read by hundreds of `SR[SampleRate].rate` call sites moved into the saved JSON untouched. + Covers `ChangeSampleRate()` (`MainBoard_AudioIO.cpp:519`) step by step and why the order + matters — in particular the `centerFreq_Hz` compensation for the change in the Fs/4 IF offset + (3.9 kHz between the rates, applied to both VFOs, computed *before* `SampleRate` is updated), + and the `InitializeDecimationFilter` free-before-malloc that had to land first. Menu (primary + menu 8→9), `SR` CAT command, and the boot path (`InitializeStorage()` precedes + `InitializeSignalProcessing()`, so there is no "apply saved rate" step). +- **firmware/runtime-filter-design.md** — the filters that had to be fixed before any of that + worked. Frozen tables designed for 24 ksps audio scaled by `176400/192000 = 0.91875`, so a + "2.0 kHz" CW filter cut at 1.84 kHz and the 4000 Hz EQ cell peaked at 3675 Hz. Now generated + from analog prototypes *recovered* from the shipped tables (CW: 0.0200 dB ripple fits + `cheby1(12, 0.02)` to 0.013 dB RMSE; EQ: every biquad has `b1=0`, `b2=-b0`, i.e. zeros at + `z=±1`, the bilinear image of an analog bandpass). Prewarping is the load-bearing part. + Recorded the framing that actually predicts behaviour: **Hz-specified → must be regenerated** + vs **fraction-of-Fs → already correct**. Also the three bugs found in passing, of which one is + user-visible: the TX decimate-by-2 was flat to 0.425*Fs, folding 6-9.5 kHz into transmitted + audio, so **TX audio differs from previous releases even at 192 ksps**. +- **firmware/filter-hil-test.md** — the AD2 bench suite. Kept to the durable parts: the + differential (engaged-minus-bypassed) method and why it makes a speaker-terminal measurement + sufficient; the SSB filter as control; the two traps — injection at `|Fs/4 + fineTuneFreq_Hz|` + (omitting the fine tune gives *silence*, not a small error) and AGC-off (no CAT command + exists, so the suite refuses to run); rate-invariance-not-absolute-accuracy as the criterion; + 95 checks passed / 0 failed, corners within 0.3%. + +**Contradiction resolved (house rule: flag, don't overwrite).** theory/multirate-decimation said +the runtime-design path's rate independence was "**dormant** — `SampleRate` is set once and +**never reassigned** anywhere in the firmware". That was true on `fast_encoder` and is now false. +Rewrote the section with a dated correction, kept the heritage explanation for the RX/TX +asymmetry (still valid), and marked the "dormant" clause of the 2026-06-14 *Resolved* entry as +superseded rather than deleting it. Same treatment in roadmap/documentation-todos. + +**Two open questions closed from the new code:** +- audio-equalizer's "tabulate the 14 band centre frequencies" — the generator exposed them as + `EQ_BAND_FC_HZ[]` (`DSP_FIR.cpp:1247-1251`), roughly 1/3-octave / R40. Tabulated. +- cw-processing's "confirm the sample rate the decoder/Goertzel operate at" — the **audio** rate, + `SR[SampleRate].rate / RXfilters->DF`. The "12 kHz the sidetone phase implies" that prompted + the question came from a **stale comment** (`DSP_CWProcessing.cpp:64` still says `/ 24000` + while `:65-66` divides by the live rate). An earlier revision of the page had quoted that + comment as if it were the code; corrected in place and logged as a comment-only source fix. + +**Pages updated:** cat-control (25→29 commands; the new SR/CF/EQ/FL group; the parser rule that +`set_len` must differ from `read_len` or the read handler is unreachable — the bug that made +`FW;` write-only; and the `MD` fix, which did not merely fail to change the demodulator but +**mirrored the receive passband**), multirate-decimation, theory-overview, zoom-fft, +audio-equalizer, cw-processing, dsp-chain, audio-io, persistent-config, display-subsystem (the +`EffectivePassbandEdges_Hz` normalization — display-side counterpart of the same `MD` bug — plus +the three rate-derived axes), ui-state-machine (menu content is data, not states: the new menu +needed no StateSmith regeneration), mode-state-machine (`TO_SSB_MODE` was front-panel-only, so +CAT could enter CW and never leave), tune-frequency-control, iq-imbalance-correction, +hardware-platform (I2S clock is fractional; HIL measures ~-180 ppm), overview, usb-audio, +documentation-todos. index.md: 44→47 content pages (firmware 22→25). + +**Suggested next:** the "why 176.4 ksps" question is unanswered anywhere in the tree — worth +asking the owner, because if the answer is USB-audio resampling (22.05 kHz being an exact 1:2 of +44.1 where 24 kHz needs 147:160) it belongs on roadmap/usb-audio and changes how that feature is +scoped. Also worth a bench follow-up: loop-budget and group delay at 176.4 vs 192 ksps, which +[[real-time-constraints]] currently only characterises at 192. diff --git a/wiki/roadmap/documentation-todos.md b/wiki/roadmap/documentation-todos.md index f707ef2..920b2a5 100644 --- a/wiki/roadmap/documentation-todos.md +++ b/wiki/roadmap/documentation-todos.md @@ -3,10 +3,10 @@ title: Documentation TODOs & Open Questions type: roadmap status: draft created: 2026-06-08 -updated: 2026-06-16 +updated: 2026-07-29 tags: [todo, open-questions, discrepancies, wiki-maintenance] source_refs: [] -related: ["[[index]]", "[[iq-imbalance-correction]]", "[[multirate-decimation]]", "[[noise-reduction]]", "[[fast-convolution-filtering]]", "[[dsp-chain]]"] +related: ["[[index]]", "[[iq-imbalance-correction]]", "[[multirate-decimation]]", "[[noise-reduction]]", "[[fast-convolution-filtering]]", "[[dsp-chain]]", "[[runtime-filter-design]]", "[[sample-rate-switching]]", "[[filter-hil-test]]"] --- # Documentation TODOs & Open Questions @@ -83,6 +83,9 @@ is tagged **⚠ possible bug** so it stands out. rate-independence is dormant — `SampleRate` is hardcoded 192 kHz (`Globals.cpp:106`, never reassigned), so RX recomputes identical coeffs each boot. (RX is a hybrid: decimation runtime-sized; interpolation fixed 48/32 taps.) → [[multirate-decimation]] + - ⚠ **The "dormant" half of that resolution expired 2026-07-29.** `SampleRate` is now a + reference to the persisted `ED.sampleRate` and is reassigned at run time + ([[sample-rate-switching]]). The heritage explanation for the *asymmetry* still holds. - **Round-trip group delay.** Measure the RX decimate→convolve→interpolate latency against the ~10 ms loop budget. → [[multirate-decimation]], [[real-time-constraints]] - **Spectrum refresh floor.** Reconcile the `.ino`'s 200 ms spectrum figure with the measured @@ -93,6 +96,30 @@ is tagged **⚠ possible bug** so it stands out. governed solely by `ED.spectrum_zoom` (default `1` = 2×, `SDT.h:274`; or a restored JSON value). → [[zoom-fft]] +### DSP — rate independence (V1.4.0, merged 2026-07-29) +- ~~**Frozen coefficient tables drift with the sample rate.**~~ — **RESOLVED (2026-07-29).** The + CW audio filters, equaliser cells, CW decoder FIR and the two TX stages around the Hilbert are + now generated per rate from recovered analog prototypes. → [[runtime-filter-design]] +- ⚠ **Stale sidetone comment.** `DSP_CWProcessing.cpp:64` still says + `// phs = 2 * PI * freqSideTone / 24000` while the code below it divides by the live + `SR[SampleRate].rate / RXfilters->DF`. Comment-only fix; the code is correct. An earlier + revision of the wiki quoted the comment as if it were the code. → [[cw-processing]] +- **AM DC blocker pole.** Made per-instance (it was a file-scope static shared across all three + `ReceiveFilterConfig`s), but its fixed 0.99 was not obviously revisited now that the rate can + change. → [[runtime-filter-design]], [[dsp-chain]] +- **`bandtable.py` mirrors firmware constants by hand.** Nothing detects a value edited in + `DSP_FIR.cpp`/`Globals.cpp` without updating `code/tools/filter_hil/bandtable.py`. + → [[filter-hil-test]] +- **No CAT command for AGC mode.** The one setting [[filter-hil-test]] needs and cannot set; + the suite refuses to run instead. → [[cat-control]] +- **CAT `set_len` / `read_len` must differ**, or the read handler is unreachable — the bug that + made `FW;` write-only. Enforced by convention only; a static assertion over + `valid_commands[]` would catch the next one. → [[cat-control]] +- **Rate-change interlock asymmetry.** `SR` over CAT is rejected while transmitting; the + front-panel menu path is not. Deliberate? → [[sample-rate-switching]], [[cat-control]] +- **Why 176.4 ksps?** Not recorded in the commit message or `code/docs/`. Owner question. + → [[sample-rate-switching]] + ### Units / naming - ~~**VFO frequency unit mislabeled.**~~ — **FULLY RESOLVED (2026-06-16).** First the `RFBoard.h` / `Tune.h` docstrings were corrected to centi-Hz (Hz × 100) on 2026-06-14; then the owner @@ -147,9 +174,15 @@ is tagged **⚠ possible bug** so it stands out. ### Not yet written (new pages needed) - ~~**CW processing**~~ — **done** ([[cw-processing]]: audio filter, hybrid correlation+Goertzel tone detection, adaptive Morse decoder via flat tree + timing histograms, sidetone). Remaining: - reconcile the header "50–500 Hz" vs code "0.8–2.0 kHz" filter-width labels; decoder sample rate. + reconcile the header "50–500 Hz" vs code "840–2000 Hz" filter-width labels. *(Decoder sample + rate resolved 2026-07-29: the audio rate, `SR[SampleRate].rate / DF`.)* - ~~**Equalizer**~~ — **done** ([[audio-equalizer]]: parallel 14-band biquad filterbank, RX/TX - gains, alternating-sign reconstruction). Remaining: band centre-freq/Q table; gain range. + gains, alternating-sign reconstruction). Remaining: gain range. *(Band centre frequencies + tabulated 2026-07-29 from `EQ_BAND_FC_HZ[]`, which [[runtime-filter-design]] exposed as named + constants.)* +- ~~**Runtime sample-rate switching**~~ — **done 2026-07-29** ([[sample-rate-switching]]). +- ~~**Run-time filter design**~~ — **done 2026-07-29** ([[runtime-filter-design]]). +- ~~**Filter hardware-in-the-loop test**~~ — **done 2026-07-29** ([[filter-hil-test]]). - ~~**Synchronous AM (SAM) detection**~~ — **done** ([[synchronous-am-detection]]: 2nd-order PLL carrier recovery, fade leveler, carrier-offset readout). Remaining: exact zeta/tau constants. - ~~**TX carrier-null calibration**~~ — **done** ([[tx-carrier-null]]: DC-offset LO-leakage diff --git a/wiki/roadmap/usb-audio.md b/wiki/roadmap/usb-audio.md index d81c99e..e88ac3e 100644 --- a/wiki/roadmap/usb-audio.md +++ b/wiki/roadmap/usb-audio.md @@ -3,10 +3,10 @@ title: "Dev: Bi-directional USB Audio (#13)" type: roadmap status: draft created: 2026-06-09 -updated: 2026-06-09 -tags: [development, feature, usb, audio, digital-modes, openaudio] +updated: 2026-07-29 +tags: [development, feature, usb, audio, digital-modes, openaudio, sample-rate] source_refs: [] -related: ["[[development-backlog]]", "[[dsp-chain]]", "[[openaudio-library]]", "[[cat-control]]"] +related: ["[[development-backlog]]", "[[dsp-chain]]", "[[openaudio-library]]", "[[cat-control]]", "[[sample-rate-switching]]"] --- # Dev: Bi-directional USB Audio (#13) @@ -38,8 +38,14 @@ Scoping note — not a solution design. primary source — read them first). - Decide the USB device composition (audio + serial coexistence) and sample-rate/format. - Route USB audio into/out of the DSP chain (RX audio → USB in; USB out → TX modulator), - including resampling to/from the internal rates ([[dsp-chain]] runs RX at 24 kHz, TX audio at - 12 kHz). + including resampling to/from the internal rates. ⚠️ **Those rates are no longer fixed** + ([[sample-rate-switching]]): [[dsp-chain]] runs RX audio at **24 kHz @192 ksps / 22.05 kHz + @176.4 ksps**, TX audio at **12 / 11.025 kHz**. Any resampler has to be rebuilt on a rate + change, the same way the filters are ([[runtime-filter-design]]). +- **Possible shortcut:** at 176.4 ksps the RX audio rate is 22.05 kHz — an exact 1:2 of 44.1 kHz, + where 24 kHz needs a 147:160 ratio to reach 44.1. Whether that is *why* 176.4 ksps was added is + unrecorded and an open question for the owner ([[sample-rate-switching]]); if so, this page is + where the connection belongs. - Relationship to [[openaudio-library]] (#14): a library change may change the USB-audio path, so sequence the two. diff --git a/wiki/theory/audio-equalizer.md b/wiki/theory/audio-equalizer.md index afd1454..ef08c2c 100644 --- a/wiki/theory/audio-equalizer.md +++ b/wiki/theory/audio-equalizer.md @@ -3,10 +3,10 @@ title: Audio Equalizer (14-band parallel filterbank) type: concept status: draft created: 2026-06-09 -updated: 2026-06-09 -tags: [equalizer, eq, filterbank, biquad, audio, tx, rx] +updated: 2026-07-29 +tags: [equalizer, eq, filterbank, biquad, audio, tx, rx, sample-rate] source_refs: [] -related: ["[[theory-overview]]", "[[dsp-chain]]", "[[ssb-phasing-method]]", "[[display-subsystem]]", "[[persistent-config]]", "[[front-panel]]"] +related: ["[[theory-overview]]", "[[dsp-chain]]", "[[ssb-phasing-method]]", "[[display-subsystem]]", "[[persistent-config]]", "[[front-panel]]", "[[runtime-filter-design]]", "[[filter-hil-test]]", "[[cat-control]]"] --- # Audio Equalizer (14-band parallel filterbank) @@ -28,13 +28,42 @@ audio ─┬─ band1 BPF ─×g1─┐ └─ band14 BPF ─×g14┘ ``` +## The 14 bands + +Centre frequencies, from `EQ_BAND_FC_HZ[]` (`DSP_FIR.cpp:1247-1251`): + +| # | 0 | 1 | 2 | 3 | 4 | 5 | 6 | +|---|---|---|---|---|---|---|---| +| **Hz** | 198.4 | 250 | 315 | 400 | 500 | 630 | 793 | + +| # | 7 | 8 | 9 | 10 | 11 | 12 | 13 | +|---|---|---|---|---|---|---|---| +| **Hz** | 1000 | 1259 | 1587 | 2000 | 2500 | 3150 | 4000 | + +Roughly ⅓-octave spacing (the R40 series), i.e. a standard graphic-EQ layout. Each cell is +**four bandpass sections** whose resonances straddle the centre, stored as (frequency-ratio, Q) +pairs in `EQ_BAND_PROTO[14][4]` (`:1263-1278`), with a per-section gain putting the peak at +unity (`EQ_BAND_GAIN[]`, `:1254-1259`). + ## Implementation -- **Band filters:** `EQ_Coeffs[14]` (`DSP_FIR.cpp:475`) — 14 fixed biquad-cascade coefficient - sets (`EQ_Band1Coeffs…EQ_Band14Coeffs`), `eqNumStages = 4` each, run with +- **Band filters:** `EQ_Coeffs[14]` (`DSP_FIR.cpp:184`) — 14 biquad-cascade coefficient sets + (`EQ_Band1Coeffs…EQ_Band14Coeffs`), `eqNumStages = 4` each, run with `arm_biquad_cascade_df2T_f32`. +- ⚠️ **The coefficients are generated, not stored.** They used to be frozen tables designed for + 24 ksps audio, so at 176.4 ksps the 4000 Hz cell peaked at **3675 Hz**. They are now + regenerated from the analog prototype on every rate change + (`CalcBandpassCascadeCoeffs`, `InitializeReceiveAudioFilterCoeffs` `:1344-1347`) — + see [[runtime-filter-design]] for how the prototypes were recovered from the shipped tables + (every biquad had `b1 = 0`, `b2 = −b0`, i.e. zeros at `z = ±1`, the bilinear image of an + analog bandpass) and why prewarping is what makes them rate-independent. Verified to within + **0.01 dB** of the original tables in simulation, and to **0.3 %** of centre across the rate + change on the bench ([[filter-hil-test]]). - **Separate RX/TX instances, shared coefficients:** `S_Rec[14]` and `S_Xmt[14]` filter states both point at the same `EQ_Coeffs[i]` (`DSP_FFT.cpp:396-397`) — same bands, independent filter - memory for the two paths. + memory for the two paths. One set of coefficients serves both because the receive and transmit + chains run at the same audio rate. ⚠️ That separation was **broken in practice** until 2026-07: + `ApplyEQBandFilter` scrubbed the *receive* instance's state even on the transmit path + ([[runtime-filter-design]]). - **Per-band gains:** `ED.equalizerRec[14]` (RX) and `ED.equalizerXmt[14]` (TX), [[persistent-config]]. Stored as integers, scaled `/100` (100 = unity), default all 100 (flat). - **The summation** (`ApplyEQBandFilter`): each band filters `data->I` → `eqFiltBuffer`, scales @@ -58,7 +87,21 @@ Edited on the dedicated equalizer screen `MainBoard_DisplayEqualizer` (the UISm state, [[display-subsystem]]); the operator selects a band and adjusts its gain with the front-panel encoder ([[front-panel]]). A toggle switches between editing the RX and TX curves. +Also settable over CAT: **`EQbbvvv;`** sets receive cell `bb` = 00–13 to level `vvv` = 000–100, +`EQbb;` reads one back ([[cat-control]]). Added for [[filter-hil-test]], which sweeps one cell at +100 with the rest at 0. + ## Open questions -- The 14 band centre frequencies / Q (from `EQ_Band*Coeffs`) — tabulate them. -- Gain range of the `equalizerRec/Xmt` sliders (just 0–100, or boost above 100?). +- Gain range of the `equalizerRec/Xmt` sliders (just 0–100, or boost above 100?). The CAT `EQ` + command clamps to 000–100, which suggests no boost — worth confirming against the encoder path. - Confirm the RX-vs-TX edit toggle path (`ToggleRXTXEqualizerEdit` referenced in `Loop.cpp`). +- What the *original* analog design was. The prototypes in `EQ_BAND_PROTO` are floats recovered + by inverse bilinear transform from the shipped tables, not a formula anyone has identified; + if it is a known filterbank standard, the 56-entry table could collapse to a generator + ([[runtime-filter-design]]). + +## Resolved +- **The 14 band centre frequencies.** Tabulated above from `EQ_BAND_FC_HZ[]` + (`DSP_FIR.cpp:1247-1251`), which the run-time filter generation exposed as named constants — + they were previously only implicit in the frozen `EQ_Band*Coeffs` tables. *(resolved + 2026-07-29)* diff --git a/wiki/theory/iq-imbalance-correction.md b/wiki/theory/iq-imbalance-correction.md index f75d558..52ff5d5 100644 --- a/wiki/theory/iq-imbalance-correction.md +++ b/wiki/theory/iq-imbalance-correction.md @@ -3,10 +3,10 @@ title: I/Q Imbalance Correction & Image Rejection type: concept status: draft created: 2026-06-08 -updated: 2026-06-14 -tags: [iq, imbalance, image-rejection, calibration, amplitude, phase] +updated: 2026-07-29 +tags: [iq, imbalance, image-rejection, calibration, amplitude, phase, sample-rate] source_refs: [] -related: ["[[theory-overview]]", "[[iq-quadrature-sampling]]", "[[ssb-phasing-method]]", "[[hardware-state-machine]]", "[[dsp-chain]]", "[[persistent-config]]"] +related: ["[[theory-overview]]", "[[iq-quadrature-sampling]]", "[[ssb-phasing-method]]", "[[hardware-state-machine]]", "[[dsp-chain]]", "[[persistent-config]]", "[[sample-rate-switching]]"] --- # I/Q Imbalance Correction & Image Rejection @@ -75,9 +75,12 @@ tone exactly `SampleRate/4` above it** via the cal loopback: SetRXVFOFrequency( band_center*100 ); // HardwareSm.cpp:609 — LO = band center SetCWVFOFrequency( (band_center + SR[SampleRate].rate/4)*100 ); // line 613 — tone = LO + Fs/4 ``` -With the default raw rate `SampleRate = SAMPLE_RATE_192K` (`Globals.cpp:106`, -`SR[].rate = 192000`), `Fs/4 = 48 kHz` — **this is what "48 kHz above/below the LO" in the -code comment means**; it is not arbitrary, it is the [[iq-quadrature-sampling]] Fs/4 offset. +Both the tone placement and the bin arithmetic below are written in terms of `Fs`, so they +follow the rate automatically ([[sample-rate-switching]]). Worked here at the default +**192 ksps** (`SR[].rate = 192000`), where `Fs/4 = 48 kHz` — **this is what "48 kHz above/below +the LO" in the code comment means**; it is not arbitrary, it is the [[iq-quadrature-sampling]] +Fs/4 offset. At 176.4 ksps the same expressions give 44.1 kHz, and every bin index below is +unchanged, because the tone offset and the bin width scale together. The measurement uses the **512-bin spectrum-display FFT** (`psdnew[SPECTRUM_RES]`, `SPECTRUM_RES = 512`), *not* the 24 kHz baseband. Cal forces **`spectrum_zoom = 0` (1×)** diff --git a/wiki/theory/multirate-decimation.md b/wiki/theory/multirate-decimation.md index 5afbd11..48b4c95 100644 --- a/wiki/theory/multirate-decimation.md +++ b/wiki/theory/multirate-decimation.md @@ -3,15 +3,16 @@ title: Multirate Decimation & Interpolation type: concept status: draft created: 2026-06-08 -updated: 2026-06-14 +updated: 2026-07-29 tags: [decimation, interpolation, multirate, polyphase, fir, sample-rate] source_refs: [] -related: ["[[theory-overview]]", "[[fast-convolution-filtering]]", "[[iq-quadrature-sampling]]", "[[dsp-chain]]", "[[real-time-constraints]]"] +related: ["[[theory-overview]]", "[[fast-convolution-filtering]]", "[[iq-quadrature-sampling]]", "[[dsp-chain]]", "[[real-time-constraints]]", "[[sample-rate-switching]]", "[[runtime-filter-design]]"] --- # Multirate Decimation & Interpolation -Phoenix digitizes at **192 kHz** but does its channel filtering at a much lower rate, then +Phoenix digitizes at **192 or 176.4 kHz** ([[sample-rate-switching]]) but does its channel +filtering at a much lower rate, then brings audio back up to the output rate. Working at the lower rate is what makes the sharp SSB/CW channel filter affordable: a narrow filter needs a transition band that is a *large fraction* of Nyquist, which costs few taps at low fs and many at high fs. @@ -28,12 +29,12 @@ only the samples that survive, so cost ∝ `numTaps × outputRate`, not input ra ## What Phoenix does -| Path | Stages | Net | Result | Where | -|---|---|---|---|---| -| **RX** | ÷4 then ÷2 | **÷8** | 192 → 24 kHz | `DecimateRxStage1/2`, `SDT.h:407-411` | -| RX out | ×2 then ×4 | ×8 | 24 → 192 kHz | `FIR_int1/2`, `InterpolateReceiveData` `DSP.cpp:697` | -| **TX** | ÷4·÷2·÷2 | **÷16** | 192 → 12 kHz | `TransmitFilterConfig`, `SDT.h:537-553` | -| TX out | ×2·×2·×4 | ×16 | 12 → 192 kHz | same struct | +| Path | Stages | Net | Result @192k | @176.4k | Where | +|---|---|---|---|---|---| +| **RX** | ÷4 then ÷2 | **÷8** | 192 → 24 kHz | 176.4 → 22.05 kHz | `DecimateRxStage1/2`, `SDT.h:407-411` | +| RX out | ×2 then ×4 | ×8 | 24 → 192 kHz | 22.05 → 176.4 kHz | `FIR_int1/2`, `InterpolateReceiveData` `DSP.cpp:697` | +| **TX** | ÷4·÷2·÷2 | **÷16** | 192 → 12 kHz | 176.4 → 11.025 kHz | `TransmitFilterConfig`, `SDT.h:537-553` | +| TX out | ×2·×2·×4 | ×16 | 12 → 192 kHz | 11.025 → 176.4 kHz | same struct | RX decimation filters are **designed at runtime** (`InitializeDecimationFilter`, `DSP_FIR.cpp:1284`) to a 9 kHz passband and **90 dB** stopband (`SDT.h:412-413`). TX instead @@ -53,23 +54,31 @@ latency choice.** The evidence: heap-allocated `malloc`, `DSP_FIR.cpp:1295-1300`); the TX path was built by **reusing the legacy fixed tables wholesale**. -- **The runtime path's only structural benefit — rate independence — is currently dormant.** +- **The runtime path's structural benefit — rate independence — is now live.** ⚠️ *Corrected + 2026-07-29:* this section previously said the benefit was "dormant" because `SampleRate` was + "set once to `SAMPLE_RATE_192K` and **never reassigned** anywhere in the firmware". **That is + no longer true.** `SampleRate` is a reference to the persisted `ED.sampleRate` + (`Globals.cpp:106-109`) and is reassigned by `ChangeSampleRate()` + (`MainBoard_AudioIO.cpp:519`) from a menu or over CAT — see [[sample-rate-switching]]. `InitializeDecimationFilter` derives both `n_dec_taps` and the coefficients from - `SR[SampleRate].rate`, so RX *could* retune to any rate in the `SR[]` table. But - `SampleRate` is set once to `SAMPLE_RATE_192K` (`Globals.cpp:106`) and **never reassigned** - anywhere in the firmware. So in practice RX also always runs at 192 kHz, and the runtime - design recomputes the **same** coefficients on every boot. TX's hardcoded `coeffs192K_*/ - 48K_*/12K_*` tables are simply 192 kHz-specific and would need replacing to change rate. - -- **Net trade-off as it stands:** TX = no heap, fully deterministic, but locked to its baked-in - 192 kHz cutoffs; RX = small init-time heap allocations, recomputed each boot — but to a - constant result, since the rate is fixed. - -**Nuance:** "RX designs at runtime, TX is fixed" over-simplifies. RX is itself a hybrid — only -RX *decimation* is fully runtime (harris-sized). RX *interpolation* uses **fixed tap counts -(48 and 32)** with coefficients still computed at runtime by `CalcFIRCoeffs` -(`DSP_FFT.cpp:401-403`). The cleaner framing is: **RX computes its coefficients at boot; TX -stores them as constants** — both at 192 kHz today. + `SR[SampleRate].rate`, so RX genuinely does retune, and the whole DSP chain is rebuilt on + each change. `InitializeDecimationFilter` now also **frees its previous allocations**, which + it did not need to do while this path ran once per boot. + +- **Net trade-off as it stands:** TX = no heap, fully deterministic; RX = small heap + allocations, recomputed on every rate change rather than to a constant result. + +**Nuance:** "RX designs at runtime, TX is fixed" over-simplifies, and after +[[runtime-filter-design]] it is the wrong axis entirely. RX is itself a hybrid — only RX +*decimation* is fully runtime (harris-sized); RX *interpolation* uses **fixed tap counts (48 and +32)** with coefficients still computed at runtime by `CalcFIRCoeffs` (`DSP_FFT.cpp:401-403`). + +The framing that actually predicts behaviour is **how a stage's corner is specified**: + +| Specification | Behaviour under a rate change | Action taken | +|---|---|---| +| **Fraction of Fs** — decimation, interpolation, Hilbert, [[zoom-fft]] | corner scales with Fs, which is *correct* for anti-alias/anti-image | left alone | +| **Absolute Hz** — CW audio, equaliser cells, CW decoder FIR, the two TX stages around the Hilbert | corner drifts by the rate ratio, which is a **bug** | regenerated per rate ([[runtime-filter-design]]) | ## The filter-length formula (and why two stages) @@ -91,6 +100,10 @@ Working it for Phoenix's RX (BW = 9 kHz, att = 90 dB): | **Two-stage total** | | | ≈60 | | **≈2.1 M** | | Single ÷8 | 8, 192 kHz | 0.031 | ≈132 | 24 kHz out | ≈3.2 M | +*(Worked at 192 ksps. The normalized quantities `Δf` and the tap counts are unchanged at +176.4 ksps — BW is absolute so `n_fpass` shifts slightly, but the argument and the ≈5× ratio +hold.)* + A single ÷8 stage needs a far sharper (5×) filter because its transition band is squeezed against the *final* 12 kHz Nyquist while still running at 192 kHz. Splitting lets the first stage be lazy (wide transition, the new Nyquist is still 24 kHz) and only the last stage be @@ -112,8 +125,12 @@ formula, not read from code; exact values depend on integer rounding.)* - **TX fixed taps vs RX runtime harris.** Primarily **heritage**, not a deliberate determinism/latency choice: the fixed 48-tap tables are legacy DD4WH coefficients (the arrays are even named/commented "RXfilters", `DSP_FIR.cpp:174-175`) reused wholesale by the TX path, - while RX *decimation* was refactored into the parametrized harris-formula design. The runtime - path's rate-independence is currently dormant — `SampleRate` is fixed at 192 kHz - (`Globals.cpp:106`, never reassigned), so RX recomputes the same coeffs every boot. RX is + while RX *decimation* was refactored into the parametrized harris-formula design. RX is itself a hybrid (decimation runtime-sized; interpolation fixed 48/32 taps, `DSP_FFT.cpp:401-403`). *(resolved 2026-06-14)* + - ⚠️ **Superseded in part 2026-07-29.** The original resolution added that the rate-independence + was "dormant — `SampleRate` is fixed at 192 kHz, so RX recomputes the same coeffs every + boot". `rx-dsp-176k-stage-test` made the rate switchable at run time + ([[sample-rate-switching]]) and regenerated the Hz-specified filters + ([[runtime-filter-design]]), so that clause no longer holds. The heritage explanation for + the *asymmetry* still stands; the "dormant" characterisation does not. diff --git a/wiki/theory/theory-overview.md b/wiki/theory/theory-overview.md index 14b6d69..feb112b 100644 --- a/wiki/theory/theory-overview.md +++ b/wiki/theory/theory-overview.md @@ -3,10 +3,10 @@ title: DSP / SDR Theory — Overview type: overview status: draft created: 2026-06-08 -updated: 2026-06-08 -tags: [dsp, sdr, theory, iq, ssb, filtering] +updated: 2026-07-29 +tags: [dsp, sdr, theory, iq, ssb, filtering, sample-rate] source_refs: [] -related: ["[[iq-quadrature-sampling]]", "[[ssb-phasing-method]]", "[[fast-convolution-filtering]]", "[[multirate-decimation]]", "[[iq-imbalance-correction]]", "[[agc-design]]", "[[zoom-fft]]", "[[dsp-chain]]"] +related: ["[[iq-quadrature-sampling]]", "[[ssb-phasing-method]]", "[[fast-convolution-filtering]]", "[[multirate-decimation]]", "[[iq-imbalance-correction]]", "[[agc-design]]", "[[zoom-fft]]", "[[dsp-chain]]", "[[sample-rate-switching]]", "[[runtime-filter-design]]"] --- # DSP / SDR Theory — Overview @@ -28,12 +28,17 @@ software. Defaults (`Globals.cpp:106`, `SDT.h`): | Quantity | Value | Where | |---|---|---| -| I/O sample rate | **192 kHz** | `SampleRate = SAMPLE_RATE_192K`, `Globals.cpp:106` | -| Block size | **2048** samples (≈10.7 ms) | `READ_BUFFER_SIZE = 128×16`, `SDT.h:175-178` | -| RX decimation | ÷4 then ÷2 = **÷8** → 24 kHz | `ReceiveFilterConfig`, `SDT.h:409-411` | -| TX decimation | ÷4·÷2·÷2 = **÷16** → 12 kHz | `TransmitFilterConfig`, `SDT.h:537-553` | +| I/O sample rate | **192 kHz** default, **176.4 kHz** selectable | `SampleRate` → `ED.sampleRate`, `Globals.cpp:106-109`, `SDT.h:287` | +| Block size | **2048** samples (≈10.7 ms @192k) | `READ_BUFFER_SIZE = 128×16`, `SDT.h:175-178` | +| RX decimation | ÷4 then ÷2 = **÷8** → 24 / 22.05 kHz | `ReceiveFilterConfig`, `SDT.h:409-411` | +| TX decimation | ÷4·÷2·÷2 = **÷16** → 12 / 11.025 kHz | `TransmitFilterConfig`, `SDT.h:537-553` | | FFT length | **512** | `FFT_LENGTH = SPECTRUM_RES`, `SDT.h:145-146` | +⚠️ The rate is **no longer fixed at boot** — it is user-selectable and persisted +([[sample-rate-switching]]). Every derived figure on this page and its children that is quoted +in Hz rather than as a fraction of Fs is a *192 ksps* figure; at 176.4 ksps multiply by +`176400/192000 = 0.91875`. + This block size is exactly the ~10 ms real-time budget the firmware is built around — see [[real-time-constraints]]. @@ -59,6 +64,11 @@ This block size is exactly the ~10 ms real-time budget the firmware is built aro Plus CW receive (filter + adaptive Morse decoder) in [[cw-processing]] (a firmware page). +**Rate independence** cuts across all of these: a filter specified as a *fraction of Fs* is +already correct at any rate, while one specified in *Hz* drifts with the rate unless it is +regenerated. [[runtime-filter-design]] is the page on which stages are which, and why +prewarping the bilinear transform is what makes the difference. + ## How theory maps to firmware The implementation lives in [[dsp-chain]] (`DSP.cpp`, `DSP_FFT.cpp`, `DSP_FIR.cpp`, diff --git a/wiki/theory/zoom-fft.md b/wiki/theory/zoom-fft.md index 2a8796a..1dc2105 100644 --- a/wiki/theory/zoom-fft.md +++ b/wiki/theory/zoom-fft.md @@ -3,10 +3,10 @@ title: Zoom FFT (Spectrum Display) type: concept status: draft created: 2026-06-08 -updated: 2026-06-14 -tags: [fft, zoom, spectrum, waterfall, decimation, display, psd] +updated: 2026-07-29 +tags: [fft, zoom, spectrum, waterfall, decimation, display, psd, sample-rate] source_refs: [] -related: ["[[theory-overview]]", "[[fast-convolution-filtering]]", "[[multirate-decimation]]", "[[display-subsystem]]", "[[dsp-chain]]", "[[real-time-constraints]]"] +related: ["[[theory-overview]]", "[[fast-convolution-filtering]]", "[[multirate-decimation]]", "[[display-subsystem]]", "[[dsp-chain]]", "[[real-time-constraints]]", "[[sample-rate-switching]]", "[[runtime-filter-design]]"] --- # Zoom FFT (Spectrum Display) @@ -18,10 +18,12 @@ same 512 bins cover proportionally less bandwidth. Implementation: `ZoomFFTExe() `psdnew` array consumed by the [[display-subsystem]]. ## Two different spectra — don't confuse them -- **Band spectrum / waterfall** — `ZoomFFTExe` → `psdnew`. Computed from the **raw 192 kHz - I/Q** (full RF span), zoomable. *This page.* -- **Audio-passband spectrum** — computed inside `ConvolutionFilter` → `audioYPixel`, always at - the 24 kHz processing rate (46.875 Hz/bin). See [[fast-convolution-filtering]]. +- **Band spectrum / waterfall** — `ZoomFFTExe` → `psdnew`. Computed from the **raw I/Q** + (192 or 176.4 kHz, full RF span), zoomable. *This page.* +- **Audio-passband spectrum** — computed inside `ConvolutionFilter` → `audioYPixel`, at the + audio processing rate (24 kHz / 46.875 Hz per bin at 192 ksps). See + [[fast-convolution-filtering]]. Its displayed axis span is `Fs/32` + (`MainBoard_DisplayHome.cpp:1301-1303`) — 6.0 kHz at 192 ksps, 5.5 kHz at 176.4 ksps. They run at different rates and serve different display panes. @@ -36,17 +38,24 @@ and the bin width by `2^zoom`: you see less of the band, in more detail. `zoom_M = 1 << spectrum_zoom` (`DSP_FFT.cpp:548`): -| `spectrum_zoom` | `zoom_M` | Effective Fsample | PSD bin width | -|---|---|---|---| -| 0 (`ZOOM_1`) | 1 | 192 kHz | **375 Hz** | -| 1 (`ZOOM_2`) | 2 | 96 kHz | 187.5 Hz | -| 2 (`ZOOM_4`) | 4 | 48 kHz | 93.75 Hz | -| 3 (`ZOOM_8`) | 8 | 24 kHz | 46.875 Hz | -| 4 (`ZOOM_16`) | 16 | 12 kHz | 23.4375 Hz | +| `spectrum_zoom` | `zoom_M` | Effective Fsample | PSD bin width | @176.4 ksps | +|---|---|---|---|---| +| 0 (`ZOOM_1`) | 1 | 192 kHz | **375 Hz** | 344.5 Hz | +| 1 (`ZOOM_2`) | 2 | 96 kHz | 187.5 Hz | 172.3 Hz | +| 2 (`ZOOM_4`) | 4 | 48 kHz | 93.75 Hz | 86.1 Hz | +| 3 (`ZOOM_8`) | 8 | 24 kHz | 46.875 Hz | 43.1 Hz | +| 4 (`ZOOM_16`) | 16 | 12 kHz | 23.4375 Hz | 21.5 Hz | Note the base (zoom 1) resolution is **375 Hz/bin** = 192000/512, *not* the 46.875 Hz of the audio FFT — a common point of confusion since both use a 512-point transform. +⚠️ **These are Fs-relative, and Fs is now user-selectable** ([[sample-rate-switching]]). The +zoom filters are deliberately *not* regenerated on a rate change, because their corners are +specified as a fraction of Fs and scaling with Fs is correct for anti-alias filtering +([[runtime-filter-design]]). What does change is the numbers in this table — hence the +spectrum's frequency ticks are now positioned via `FreqToBin()` at round frequencies rather +than from a fixed pixel table ([[display-subsystem]]). + ## How it's implemented 1. **Zoom 1 fast path**: no decimation, `CalcPSD512(I, Q)` directly (`DSP_FFT.cpp:583-586`). From 5f996e5237bd5a776e07c0e7667d156764049c1c Mon Sep 17 00:00:00 2001 From: Oliver King Date: Thu, 30 Jul 2026 17:38:10 -0400 Subject: [PATCH 14/25] Add the transmit-filter HIL suite and the bench tool collection tx_filter_hil/ is the transmit-side companion to filter_hil/: it drives the microphone input with a tone and captures both exciter outputs synchronously, so I + jQ reconstructs the two-sided spectrum. That gives the audio response and the opposite-sideband suppression from one capture; two single-channel captures would have no defined phase relationship and could not measure suppression at all. The tolerance is 2.5 %, looser than the receive suite's 1.5 %, and deliberately so. Both generated transmit stages are 48-tap Kaiser-Bessel windowed sincs, and a 48-tap design does not scale exactly when its normalised cutoff changes: evaluating the tap sets gives a cascade corner of 2726 Hz at 24 ksps and 2759 Hz at 22.05 ksps, +1.2 % on a correct radio. The regression being hunted is still -8.125 %, so there is better than a factor of three between correct and broken. A tolerance tighter than the design's own reproducibility would cry wolf. What it cannot do is recorded in its README rather than glossed: nothing in the transmit chain can be bypassed over CAT, so every response is a composite of the whole path. That costs absolute accuracy but nothing in the rate comparison, since no part of the analog path changes when the rate does. Also in this commit: flag_timing.py Captures the Flag() pin transitions on AD2 digital plot_flag_timing.py inputs and reports where the firmware spends its time. JSON on stdout, PNGs from the plotter. siglent_capture.py Pulls traces off the networked scope over VISA. usb_audio_test.py Tone into a host audio device. filter_hil/radio.py SILENT_SHORT_WRITES, because TX;/RX; are writes that answer nothing and a length-based read/write inference otherwise blocks for its full timeout on every key. serial_diag.py carried three bugs, all found by checking it against CAT.cpp rather than by running it. It sent "TX1;" to key, which the firmware rejected, so the tool printed "TX ON" at a radio sitting in receive; success was assumed for every command rather than tested, which is what let that go unnoticed; and in single-port mode a semicolon-terminated line arriving unsolicited stayed in the buffer and was handed back as the response to the next command. Note that an accepted write is frequently silent - TX_write and RX_write both return an empty string - so "?;" is the only failure signal available and the obvious "no reply means it failed" test would have been backwards. The tools README described only serial_diag.py and told the reader to enable USB_AUDIO_RX_DIAGNOSTICS in usb_audio_48k.cpp, a file that exists only on the unmerged usb_audio branch. Rewritten to cover every tool in the tree, with the dead instrumentation labelled as such instead of silently dropped. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01T9L3rdDh97Ywei8kr3YC6j --- .gitignore | 3 + code/src/PhoenixSketch/BuildInfo.h | 4 +- code/tools/README.md | 354 +++++++ code/tools/filter_hil/radio.py | 95 +- code/tools/flag_timing.py | 668 +++++++++++++ code/tools/plot_flag_timing.py | 244 +++++ code/tools/serial_diag.py | 915 ++++++++++++++++++ code/tools/siglent_capture.py | 145 +++ code/tools/tx_filter_hil/.gitignore | 8 + code/tools/tx_filter_hil/README.md | 265 +++++ code/tools/tx_filter_hil/__init__.py | 8 + code/tools/tx_filter_hil/ad2.py | 341 +++++++ code/tools/tx_filter_hil/bandtable.py | 198 ++++ code/tools/tx_filter_hil/measure.py | 364 +++++++ .../tools/tx_filter_hil/plot_tx_filter_hil.py | 317 ++++++ code/tools/tx_filter_hil/report.py | 321 ++++++ .../tools/tx_filter_hil/test_tx_filter_hil.py | 551 +++++++++++ code/tools/tx_filter_hil/tests.py | 902 +++++++++++++++++ .../tools/tx_filter_hil/tx_filter_hil_test.py | 520 ++++++++++ code/tools/usb_audio_test.py | 173 ++++ 20 files changed, 6392 insertions(+), 4 deletions(-) create mode 100644 code/tools/README.md create mode 100644 code/tools/flag_timing.py create mode 100644 code/tools/plot_flag_timing.py create mode 100755 code/tools/serial_diag.py create mode 100644 code/tools/siglent_capture.py create mode 100644 code/tools/tx_filter_hil/.gitignore create mode 100644 code/tools/tx_filter_hil/README.md create mode 100644 code/tools/tx_filter_hil/__init__.py create mode 100644 code/tools/tx_filter_hil/ad2.py create mode 100644 code/tools/tx_filter_hil/bandtable.py create mode 100644 code/tools/tx_filter_hil/measure.py create mode 100644 code/tools/tx_filter_hil/plot_tx_filter_hil.py create mode 100644 code/tools/tx_filter_hil/report.py create mode 100644 code/tools/tx_filter_hil/test_tx_filter_hil.py create mode 100644 code/tools/tx_filter_hil/tests.py create mode 100644 code/tools/tx_filter_hil/tx_filter_hil_test.py create mode 100755 code/tools/usb_audio_test.py diff --git a/.gitignore b/.gitignore index bd7309d..3021b1d 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,9 @@ code/test/CMakeCache.txt code/test/Makefile code/test/all_*.cmake code/test/all_*.a +code/tools/*.png +code/tools/*.csv +code/tools/__pycache__/ *.log *.bin *.so diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index f4548f9..5ddb025 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -14,7 +14,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "942c8e5" -#define BUILD_TIMESTAMP "2026-07-29 06:45:14" +#define GIT_COMMIT_HASH "29ca4dd" +#define BUILD_TIMESTAMP "2026-07-30 17:38:10" #endif // BUILDINFO_H diff --git a/code/tools/README.md b/code/tools/README.md new file mode 100644 index 0000000..e8c38ea --- /dev/null +++ b/code/tools/README.md @@ -0,0 +1,354 @@ +# Phoenix SDR Bench Tools + +Host-side Python tools for testing and diagnosing the radio. None of them are +part of the firmware build; they drive the radio over its USB serial ports and +read it back through test instruments on the bench. + +| Tool | What it is for | Hardware needed | +|---|---|---| +| [`filter_hil/`](filter_hil/README.md) | Receive filter rate-independence test suite | AD2 + radio | +| [`tx_filter_hil/`](tx_filter_hil/README.md) | Transmit filter rate-independence test suite | AD2 + radio | +| [`flag_timing.py`](#flag_timingpy) | Measure firmware execution timing from `Flag()` pin transitions | AD2 + radio | +| [`plot_flag_timing.py`](#plot_flag_timingpy) | Plot distributions from a `flag_timing.py` capture | none | +| [`serial_diag.py`](#serial_diagpy) | Interactive CAT control + live diagnostic monitor | radio | +| [`usb_audio_test.py`](#usb_audio_testpy) | Send a test tone into the radio's USB audio input | radio | +| [`siglent_capture.py`](#siglent_capturepy) | Bare two-channel capture from a networked SIGLENT scope | SIGLENT scope | +| [`extract_filter_prototypes.py`](#extract_filter_prototypespy) | Recover analog specs from the old frozen filter tables | none | + +"AD2" is a Digilent Analog Discovery 2. + +## Setup + +Everything runs from a virtual environment in this directory. It is not +versioned — create it once: + +```bash +cd code/tools +python3 -m venv venv +./venv/bin/pip install numpy scipy matplotlib pyserial sounddevice pyvisa pyvisa-py +``` + +The HIL suites and the project Skills invoke `code/tools/venv/bin/python` +explicitly, so use that interpreter rather than activating the environment. + +Per-tool dependencies, if you would rather install selectively: + +| Package | Needed by | +|---|---| +| `numpy` | everything except `serial_diag.py`'s CAT-only mode | +| `matplotlib` | the plotting tools and both HIL suites | +| `scipy` | `extract_filter_prototypes.py` | +| `pyserial` | anything that talks CAT: `serial_diag.py`, both HIL suites | +| `sounddevice` | `usb_audio_test.py`, and the audio commands in `serial_diag.py` | +| `pyvisa`, `pyvisa-py` | `siglent_capture.py` | + +### The Digilent WaveForms SDK + +The AD2 tools bind `libdwf` through `ctypes`, so the WaveForms runtime must be +installed system-wide (`libdwf.so` on Linux, the `dwf` framework on macOS, the +`dwf` DLL on Windows). It is not a pip package. If a tool exits with +"libdwf.so not found", install WaveForms from Digilent rather than looking for +a Python package. + +### Serial ports + +With the Teensy configured for **Dual Serial** the radio presents two ports: + +| Port | Teensy name | Purpose | Baud | +|---|---|---|---| +| `/dev/ttyACM0`, `COM3` | `Serial` / `SerialUSB` | Diagnostic output | 115200 | +| `/dev/ttyACM1`, `COM4` | `SerialUSB1` | CAT commands | 38400 | + +With the **serial+midi+audio** USB type there is only one port, carrying both; +`serial_diag.py --port` covers that case. + +On Linux, add yourself to the `dialout` group once: + +```bash +sudo usermod -a -G dialout $USER # log out and back in +``` + +### Outputs + +PNGs and CSVs written into this directory are gitignored, as are the +`results/` directories of the two HIL suites. Everything needed to regenerate +a HIL report lives in its JSON, so commit a run artifact only when you +deliberately want it as a reference. + +--- + +## Hardware-in-the-loop filter test suites + +Two full test suites, each with its own README. They verify on the real radio +that the DSP filters land on their labelled frequencies at **every** supported +sample rate — the regression they exist to catch scales every corner by +`176400/192000`, i.e. −8.125 %. + +- **[`filter_hil/`](filter_hil/README.md)** — receive chain. An AD2 injects a + quadrature tone into the I/Q inputs and reads demodulated audio off the + speaker output. Requires **AGC off**; the suite refuses to run otherwise. +- **[`tx_filter_hil/`](tx_filter_hil/README.md)** — transmit chain. An AD2 + drives the microphone input and captures both exciter outputs synchronously, + giving the two-sided spectrum and with it opposite-sideband suppression. Keys + the radio continuously for minutes at a time, so fit a dummy load. + +Both take the same shape of command line: + +```bash +cd code/tools +./venv/bin/python filter_hil/filter_hil_test.py +./venv/bin/python tx_filter_hil/tx_filter_hil_test.py + +# check arguments without touching hardware +./venv/bin/python filter_hil/filter_hil_test.py --dry-run + +# redraw figures from a previous run +./venv/bin/python filter_hil/plot_filter_hil.py filter_hil/results/filter_hil_*.json + +# self-tests for the measurement maths, no hardware +./venv/bin/python filter_hil/test_filter_hil.py +./venv/bin/python tx_filter_hil/test_tx_filter_hil.py +``` + +Exit codes for both: `0` pass, `1` fail, `2` error (no hardware, or preflight +refused), `3` aborted. + +Read the suite's own README before running one — the wiring, the preflight +conditions, and the failure table are all there. Background and results are in +`wiki/firmware/filter-hil-test.md` and `wiki/firmware/tx-filter-hil-test.md`. + +--- + +## `flag_timing.py` + +Measures how long firmware code takes to run. `Flag(val)` in `Globals.cpp` +writes a 4-bit value across Teensy pins 28–31; this tool captures those pins on +the AD2's digital inputs, decodes them back into flag values, and reports how +long the code spent in each one. + +Wiring (overridable with `--dio-map`): + +``` +Teensy 28 -> AD2 DIO1 (flag bit 3, MSB) +Teensy 29 -> AD2 DIO2 (flag bit 2) +Teensy 30 -> AD2 DIO3 (flag bit 1) +Teensy 31 -> AD2 DIO4 (flag bit 0, LSB) +``` + +Output is a single JSON document on **stdout**; progress goes to stderr. On +error, stdout still holds JSON — `{"error": "..."}` — so a caller can parse it +uniformly. Exit code is non-zero on any error. + +```bash +# 100 ms capture, streamed over USB +./venv/bin/python flag_timing.py --duration 0.1 --mode record > profile.json + +# time from Flag(2) to the next Flag(3), triggered on entry to Flag(2) +./venv/bin/python flag_timing.py --duration 0.5 --trigger flag --trigger-flag 2 \ + --measure 2 3 > profile.json +``` + +Key options: + +| Option | Default | Notes | +|---|---|---| +| `--sample-rate` | 10 MHz | Rounded to the nearest AD2 clock divider | +| `--duration` | — | Seconds; overrides `--buffer-size` | +| `--buffer-size` | 8192 | Clamped to the device maximum | +| `--mode` | `auto` | `single` uses the on-board buffer (~8K samples, fastest); `record` streams over USB for 1 s+ captures | +| `--debounce-us` | 2.0 | `Flag()` writes its four pins sequentially, so brief intermediate values appear during a transition. Discards segments shorter than this | +| `--max-lost-frac` | 0.001 | Record mode: fail if USB dropped more than this fraction of samples | +| `--trigger` | `none` | `change` on any pin transition, `flag` on a specific value | +| `--measure FROM TO` | — | Adds a `measurement` block: intervals from `Flag(FROM)` to the next `Flag(TO)` | +| `--dio-map` | `28:1,29:2,30:3,31:4` | Teensy pin to AD2 DIO line | + +The JSON contains `metadata`, `transitions`, `segments`, a `summary` with +per-flag statistics and transition counts, and `measurement` when `--measure` +was given. `--include-raw` adds the decoded sample array (large). + +The `timing-measurement` Skill wraps the whole workflow: instrument the +firmware, flash it, capture, plot. + +## `plot_flag_timing.py` + +Turns a `flag_timing.py` JSON into PNGs. No hardware. + +For each flag value with enough events it writes a two-panel figure — a +duration histogram with mean/median/p95/p99 marked, which makes bimodal +distributions obvious, and a duration-vs-iteration scatter, which reveals drift +or clustering of slow events. It also writes a timeline strip of the whole +capture coloured by flag. + +```bash +./venv/bin/python plot_flag_timing.py profile.json + +./venv/bin/python plot_flag_timing.py profile.json --out-dir docs/ --prefix baseline \ + --flag-labels 1=DrawDisplay-other,2=SignalProcessing,3=DrawSpectrumPane +``` + +Options: `--out-dir` (defaults to beside the JSON), `--prefix`, `--flag-labels`, +`--min-count` (skip flags with fewer events, default 2), `--no-timeline`, +`--quiet`. PNG paths are printed to stdout. + +--- + +## `serial_diag.py` + +Interactive CAT control of the radio with the diagnostic stream displayed live +in the same window, plus USB audio tone generation so a transmit test needs +only this one tool. + +```bash +# list ports +./venv/bin/python serial_diag.py --list + +# dual-serial firmware: separate diagnostic and CAT ports +./venv/bin/python serial_diag.py --diag /dev/ttyACM0 --cat /dev/ttyACM1 + +# serial+midi+audio firmware: one port for both +./venv/bin/python serial_diag.py --port /dev/ttyACM0 + +# monitor only, or control only +./venv/bin/python serial_diag.py --diag /dev/ttyACM0 +./venv/bin/python serial_diag.py --cat /dev/ttyACM1 +``` + +Baud rates default to 115200 for diagnostics and 38400 for CAT +(`--diag-baud`, `--cat-baud`, `--baud` for single-port mode). + +### Interactive commands + +| Command | Description | +|---|---| +| `tx` | Key the transmitter and start the test tone | +| `rx` | Unkey and stop the tone | +| `tone ` | Set tone frequency (default 1000) | +| `monitor` | Toggle RX audio monitoring, showing RMS level | +| `devices` | List host audio devices | +| `audio ` | Select audio device by index | +| `usb` | Switch to USB audio mode (PC audio input) — **`UM` CAT command, not in this firmware** | +| `ssb` | Switch to SSB / microphone mode — **`UM` CAT command, not in this firmware** | +| `lsb` / `usbsb` | Select lower / upper sideband | +| `cw` | Switch to CW mode | +| `freq ` | Set frequency, e.g. `freq 14074` | +| `id` | Query radio ID | +| `if` | Query full radio status | +| `stats` | Show the last USB_RX statistics block | +| `cat ` | Send a raw CAT command, e.g. `cat FA;` | +| `help` | Command help | +| `quit` / `exit` | Exit (auto-unkeys TX) | + +The audio commands need `sounddevice`; without it the tool still runs and says +so in the help text. + +`usb` and `ssb` send `UM1;`/`UM0;`, which only exist on the unmerged `usb_audio` +branch. On this branch the radio answers `?;` and the tool now says so rather +than reporting success. Every other command above maps to a handler that is +present in `CAT.cpp`. + +Note that an accepted write frequently produces **no** reply — `TX_write` and +`RX_write` both return an empty string — so silence means success and `?;` is +the only failure signal. `tx` and `rx` therefore take about half a second to +return, waiting out the response timeout. + +### Diagnostic output + +Whatever the firmware prints on the diagnostic port is shown with a host +timestamp. Two line formats are additionally parsed and accumulated for the +`stats` command: + +``` +[14:32:15.123] USB_RX: RUNNING reads=94 underruns=0 zeros=0 | buf=2048/2052/2056 | ratio=1.0000/1.0001/1.0002 | rms=0.1234 +[14:32:15.123] USB_TX: cb=48 samples=6144 zeros=0(0%) overruns=0 | buf=2048/2052/2056 | samp/cb=128/128 | rms=0.1234 +``` + +`USB_RX` is the ASRC consumer side, `USB_TX` the PC-to-radio USB callback side. +Lines with `underruns > 0` are highlighted red; `WARMUP` lines yellow. + +| Field | Meaning | Expected | +|---|---|---| +| `state` | ASRC state | `RUNNING`; `WARMUP` while initialising | +| `reads` | Successful read operations | Incrementing | +| `underruns` / `overruns` | Buffer underflow / overflow | 0 | +| `zeros` | Blocks with near-zero signal | Low while transmitting | +| `buf=min/avg/max` | Ring buffer level, samples | ~2048 (half of 4096) | +| `ratio=min/avg/max` | ASRC resampling ratio | ~1.0000, limits at 0.97/1.03 | +| `rms` | Signal RMS | Non-zero while transmitting | + +**No current firmware emits these lines.** They came from +`usb_audio_48k.cpp` behind a `USB_AUDIO_RX_DIAGNOSTICS` `#define`; that file was +replaced by `MainBoard_AudioIO.cpp` and neither the macro nor the instrumentation +survives in the tree. The parser is documented here because it is what the tool +still expects — restore an equivalent one-per-second print in the audio path and +`stats` works again. Everything else in the tool (CAT control, tone generation, +RX monitoring, raw line display) is unaffected. + +Typical USB-audio TX investigation: start the tool, `usb`, `if` to confirm +state, run the transmitting application (WSJT-X or similar), and watch for +`underruns` above zero, `buf` falling below 1024, `ratio` pinned at a limit, or +`rms` stuck at zero. `stats` prints the accumulated totals. + +If nothing appears: check that the instrumentation exists in the firmware you +flashed, that you are on the diagnostic port rather than the CAT port, and that +the radio is actually in USB transmit. If CAT does not respond: check the port +and the 38400 baud rate, and try `id`. + +## `usb_audio_test.py` + +Sends a sine wave to a host audio output — normally the Teensy's USB audio +device — to exercise the PC-to-radio audio path on its own. + +```bash +./venv/bin/python usb_audio_test.py -l # list output devices +./venv/bin/python usb_audio_test.py -d 5 # device index 5, 1 kHz +./venv/bin/python usb_audio_test.py -f 800 -a 0.5 # 800 Hz at 50 % +./venv/bin/python usb_audio_test.py -t 10 -s # 10 s, stereo +``` + +Options: `-d/--device`, `-l/--list`, `-f/--frequency` (1000), `-a/--amplitude` +(0.3), `-r/--rate` (48000), `-t/--duration` (continuous until Ctrl+C), +`-s/--stereo`. Requires `sounddevice`. + +--- + +## `siglent_capture.py` + +Pulls the current traces off a networked SIGLENT oscilloscope over VISA/LAN +without changing any of its settings — useful when the scope is already set up +by hand and you want the data on the host. + +```bash +./venv/bin/python siglent_capture.py +``` + +Prints point count, time span, voltage range and Vpp for each channel, and +writes `channel1_data.csv` / `channel2_data.csv`. The scope address is the +`SCOPE_IP` constant at the top of the file — edit it for your bench. Requires +`pyvisa` and `pyvisa-py`. + +For AD2 captures there is no equivalent standalone script: use the `ad2.py` +module inside whichever HIL suite matches the measurement +(`filter_hil.ad2.Ad2` for single-channel scope plus quadrature AWG, +`tx_filter_hil.ad2.TxAd2` for synchronous two-channel I/Q). + +--- + +## `extract_filter_prototypes.py` + +A one-shot developer tool, not a bench instrument, and it needs no hardware. + +The receive chain used to ship coefficient tables designed offline at a single +sample rate (24 ksps audio, i.e. 192 ksps / 8), so running at any other rate +scaled every corner by `actual_rate / 24000`. Those tables are now generated at +run time from an analog spec instead. This script is what recovered those +specs: it reads the reference tables in `code/test/reference_filters.cpp` and +prints the C literals belonging in `InitializeReceiveAudioFilterCoeffs()` and +`InitializeTransmitFilterCoeffs()`. + +```bash +./venv/bin/python extract_filter_prototypes.py +``` + +Its output is pasted into `DSP_FIR.cpp`; it is not part of the build. Re-run it +if a reference table ever changes. Requires `numpy` and `scipy`. See +`wiki/firmware/runtime-filter-design.md` for the background. diff --git a/code/tools/filter_hil/radio.py b/code/tools/filter_hil/radio.py index ca35958..3b08f2e 100644 --- a/code/tools/filter_hil/radio.py +++ b/code/tools/filter_hil/radio.py @@ -41,6 +41,16 @@ #: whole read timeout per command. SILENT_WRITES = {"AG", "MD", "NR", "NT", "FW", "FL", "SR", "CF", "EQ", "DB", "KS", "MG", "VX", "AI"} +#: Commands that take no parameter and yet are *writes*, not reads. +#: +#: :meth:`Radio.send` normally infers the form from the length - a bare ``"XX;"`` +#: is a read - and that inference is right for everything in +#: :data:`SILENT_WRITES`, whose read forms all answer. ``TX;`` and ``RX;`` break +#: it: they are three characters long, they are writes, and ``CAT.cpp`` suppresses +#: their empty responses, so treating them as reads costs the whole read timeout +#: on every key and unkey. +SILENT_SHORT_WRITES = {"TX", "RX"} + #: CW sidetone offsets, from Globals.cpp. In CW receive the audio is shifted by #: the selected offset, so the injection frequency must include it. CW_TONE_OFFSETS_HZ = (400.0, 562.5, 656.5, 750.0, 843.75) @@ -98,6 +108,10 @@ class EdSnapshot: current_band: list = field(default_factory=lambda: [-1, -1]) equalizer_rec: list = field(default_factory=list) fine_tune_hz: list = field(default_factory=lambda: [0.0, 0.0]) + equalizer_xmt: list = field(default_factory=list) + mic_gain_db: int = -99 + power_out_ssb: list = field(default_factory=list) + pa_100w: int = -1 @classmethod def parse(cls, lines: Sequence[str]) -> "EdSnapshot": @@ -124,6 +138,8 @@ def parse(cls, lines: Sequence[str]) -> "EdSnapshot": ) eq = [_as_int(v) for v in fields.get("equalizerRec", "").split(",") if v.strip()] + eq_xmt = [_as_int(v) for v in fields.get("equalizerXmt", "").split(",") if v.strip()] + power_ssb = [_as_float(v) for v in fields.get("powerOutSSB", "").split(",") if v.strip()] sr_index = _as_int(fields.get("sampleRate", "")) return cls( @@ -144,6 +160,10 @@ def parse(cls, lines: Sequence[str]) -> "EdSnapshot": equalizer_rec=eq, fine_tune_hz=[_as_float(fields.get("fineTuneFreq_Hz[0]", ""), 0.0), _as_float(fields.get("fineTuneFreq_Hz[1]", ""), 0.0)], + equalizer_xmt=eq_xmt, + mic_gain_db=_as_int(fields.get("currentMicGain", ""), -99), + power_out_ssb=power_ssb, + pa_100w=_as_int(fields.get("PA100Wactive", "")), ) def summary(self) -> dict: @@ -161,6 +181,10 @@ def summary(self) -> dict: "current_band": list(self.current_band), "equalizer_rec": list(self.equalizer_rec), "fine_tune_hz": list(self.fine_tune_hz), + "equalizer_xmt": list(self.equalizer_xmt), + "mic_gain_db": self.mic_gain_db, + "power_out_ssb": list(self.power_out_ssb), + "pa_100w": self.pa_100w, } def diff(self, other: "EdSnapshot") -> dict: @@ -182,6 +206,23 @@ def active_fine_tune_hz(self) -> float: def modulation_name(self) -> str: return MOD_NAMES.get(self.modulation[self.active_vfo], "?") + @property + def active_modulation(self) -> int: + return self.modulation[self.active_vfo] + + @property + def active_power_ssb(self) -> float: + """SSB power setting for the band in use, in watts. + + ``TXGain`` derives the transmit DSP gain from this, so it scales the + amplitude of the exciter I/Q output. It has to stay put for the duration + of a run or every level measured moves with it. + """ + band = self.current_band[self.active_vfo] + if 0 <= band < len(self.power_out_ssb): + return self.power_out_ssb[band] + return float("nan") + @property def agc_off(self) -> bool: """AGCOff is 0 in the AGCMode enum.""" @@ -249,8 +290,11 @@ def send(self, cmd: str, expect_reply: Optional[bool] = None) -> Optional[str]: if expect_reply is None: name = cmd[:2].upper() - is_read = len(cmd) == 3 # "XX;" - expect_reply = is_read or name not in SILENT_WRITES + if name in SILENT_SHORT_WRITES: + expect_reply = False + else: + is_read = len(cmd) == 3 # "XX;" + expect_reply = is_read or name not in SILENT_WRITES self.cat.reset_input_buffer() self.cat.write(cmd.encode("ascii")) @@ -423,6 +467,53 @@ def set_modulation(self, mod: int) -> None: raise CatError(f"no MD command for modulation {mod}") self.send(f"MD{MOD_TO_MD[mod]};", expect_reply=False) + # -- transmit ----------------------------------------------------------- + + def ptt_press(self, settle_s: float = 0.5) -> None: + """Key the transmitter. + + ``TX;`` is only honoured from ``SSB_RECEIVE`` or ``CW_RECEIVE``; from any + other state ``TX_write`` falls through its switch and does nothing at + all, silently. Callers that need to know whether the radio actually keyed + have to look at the exciter output, not at the CAT reply. + """ + self.send("TX;", expect_reply=False) + time.sleep(settle_s) + + def ptt_release(self, settle_s: float = 0.3) -> None: + """Unkey. Safe to call when already receiving.""" + self.send("RX;", expect_reply=False) + time.sleep(settle_s) + + def get_mic_gain_pct(self) -> int: + """Mic gain as the 0-100 scale the MG command uses.""" + return int(self.expect("MG;")[2:5]) + + def set_mic_gain_pct(self, pct: int) -> None: + """Set mic gain on the MG 0-100 scale, which maps to -40..+30 dB.""" + self.send(f"MG{int(round(max(0, min(100, pct)))):03d};", expect_reply=False) + + @staticmethod + def mic_gain_pct_from_db(db: float) -> int: + """Invert the MG command's -40..+30 dB mapping.""" + return int(round((float(db) + 40.0) * 100.0 / 70.0)) + + @staticmethod + def mic_gain_db_from_pct(pct: float) -> int: + """The dB value the firmware will store for an MG parameter. + + ``MG_write`` truncates to an integer number of dB, so a percentage does + not round-trip exactly; this reproduces what the radio will end up with. + """ + return int((float(pct) * 70.0 / 100.0) - 40.0) + + def get_power_w(self) -> float: + """Requested output power, watts. Mode dependent in the firmware.""" + return float(self.expect("PC;")[2:5]) + + def set_power_w(self, watts: float) -> None: + self.send(f"PC{int(round(watts)):03d};", expect_reply=True) + def sidetone_shift_hz(self, ed: EdSnapshot, in_cw: bool) -> float: """Audio offset applied in CW receive, in Hz. diff --git a/code/tools/flag_timing.py b/code/tools/flag_timing.py new file mode 100644 index 0000000..dc4500b --- /dev/null +++ b/code/tools/flag_timing.py @@ -0,0 +1,668 @@ +#!/usr/bin/env python3 +""" +Measure timing of code execution flow by capturing the Flag(uint8_t) signal +output on Teensy pins 28-31 via an Analog Discovery 2 (AD2) digital input. + +Flag value encoding (set inside Globals.cpp::Flag(val)): + pin 31 -> bit 0 (LSB) + pin 30 -> bit 1 + pin 29 -> bit 2 + pin 28 -> bit 3 (MSB) +so Flag(val) writes the 4-bit value `val` (0..15) across the four pins. + +Default physical wiring (Teensy pin -> AD2 DIO line): + 28 -> DIO1, 29 -> DIO2, 30 -> DIO3, 31 -> DIO4 +The DIO mapping is overridable on the command line. + +Output is a single JSON document on stdout, intended for ingestion by a +Claude Code Skill. All progress / diagnostic text goes to stderr (suppressed +with --quiet). The exit code is 0 on success, non-zero on any error; in the +error case stdout contains a JSON object with {"error": "..."} so the caller +can parse it uniformly. + +Top-level JSON shape: + { + "metadata": { sample_rate_hz, sample_period_s, buffer_size, + duration_s, trigger, debounce_us, pin_mapping, ... }, + "transitions": [ {index, time_s, from_flag, to_flag}, ... ], + "segments": [ {flag, start_time_s, end_time_s, duration_s}, ... ], + "summary": { flag_segment_stats: { "": {count, min_s, ...} }, + transition_counts: { "->": N, ... } }, + "measurement": (only if --measure FROM TO given) { + from_flag, to_flag, count, intervals_s, + min_s, max_s, mean_s, median_s, stddev_s } + } +""" + +import argparse +import ctypes +import json +import sys +import time + +import numpy as np + +# ----- Pin / bit mapping --------------------------------------------------- + +# Teensy pin -> Flag bit position. Fixed by the Flag() implementation. +TEENSY_PIN_TO_BIT = {28: 3, 29: 2, 30: 1, 31: 0} + +# Teensy pin -> AD2 DIO line (default; overridable via --dio-map). +DEFAULT_TEENSY_TO_DIO = {28: 1, 29: 2, 30: 3, 31: 4} + + +# ----- DWF library binding ------------------------------------------------- + +def _load_dwf(): + if sys.platform.startswith("win"): + return ctypes.cdll.dwf + if sys.platform.startswith("darwin"): + return ctypes.cdll.LoadLibrary("/Library/Frameworks/dwf.framework/dwf") + return ctypes.cdll.LoadLibrary("libdwf.so") + + +def _bind_dwf_argtypes(dwf): + """Declare argtypes for the DWF entrypoints we use.""" + c_int = ctypes.c_int + c_uint = ctypes.c_uint + c_double = ctypes.c_double + c_byte = ctypes.c_byte + + dwf.FDwfDeviceOpen.argtypes = [c_int, ctypes.POINTER(c_int)] + dwf.FDwfDeviceCloseAll.argtypes = [] + dwf.FDwfGetLastErrorMsg.argtypes = [ctypes.c_char_p] + + dwf.FDwfDigitalInReset.argtypes = [c_int] + dwf.FDwfDigitalInInternalClockInfo.argtypes = [c_int, ctypes.POINTER(c_double)] + dwf.FDwfDigitalInDividerSet.argtypes = [c_int, c_uint] + dwf.FDwfDigitalInBufferSizeSet.argtypes = [c_int, c_int] + dwf.FDwfDigitalInBufferSizeInfo.argtypes = [c_int, ctypes.POINTER(c_int)] + dwf.FDwfDigitalInSampleFormatSet.argtypes = [c_int, c_int] + dwf.FDwfDigitalInAcquisitionModeSet.argtypes = [c_int, c_int] + dwf.FDwfDigitalInTriggerSourceSet.argtypes = [c_int, c_byte] + dwf.FDwfDigitalInTriggerPositionSet.argtypes = [c_int, c_uint] + dwf.FDwfDigitalInTriggerSet.argtypes = [c_int, c_uint, c_uint, c_uint, c_uint] + dwf.FDwfDigitalInConfigure.argtypes = [c_int, c_int, c_int] + dwf.FDwfDigitalInStatus.argtypes = [c_int, c_int, ctypes.POINTER(c_byte)] + dwf.FDwfDigitalInStatusData.argtypes = [c_int, ctypes.c_void_p, c_int] + dwf.FDwfDigitalInStatusRecord.argtypes = [ + c_int, + ctypes.POINTER(c_int), + ctypes.POINTER(c_int), + ctypes.POINTER(c_int), + ] + + +# ----- Acquisition --------------------------------------------------------- + +# DWF constants we need +TRIG_SRC_NONE = 0 +TRIG_SRC_DETECTOR_DIGITAL_IN = 3 +ACQMODE_SINGLE = 0 +ACQMODE_RECORD = 3 +STATE_DONE = 2 + + +def _dwf_last_error(dwf): + buf = ctypes.create_string_buffer(512) + dwf.FDwfGetLastErrorMsg(buf) + return buf.value.decode("utf-8", errors="replace") + + +def acquire(sample_rate_hz, buffer_size, trigger, trigger_pattern_mask, + trigger_pattern_value, trigger_change_mask, trigger_position_frac, + mode, log): + """Capture digital samples from the AD2 and return them as a uint16 array. + + `mode` is one of "auto", "single", "record". In "auto" the path is chosen + based on whether the requested capture fits in the device's on-board + buffer. Single-shot is preferred for short windows (less overhead); + record mode streams over USB so it supports arbitrary-length captures. + + Returns (samples, actual_sample_rate_hz, extras), where extras is a dict + with keys: mode, lost_samples, corrupt_samples, device_buffer_size. + Each sample's bits correspond to DIO0..DIO15 (bit 0 = DIO0). + """ + dwf = _load_dwf() + _bind_dwf_argtypes(dwf) + + hdwf = ctypes.c_int() + log(f"Opening AD2 device...") + if dwf.FDwfDeviceOpen(-1, ctypes.byref(hdwf)) != 1 or hdwf.value == 0: + raise RuntimeError(f"Failed to open AD2: {_dwf_last_error(dwf)}") + + try: + dwf.FDwfDigitalInReset(hdwf) + + # Internal clock is typically 100 MHz; compute divider for requested rate. + clk = ctypes.c_double() + dwf.FDwfDigitalInInternalClockInfo(hdwf, ctypes.byref(clk)) + internal_clock_hz = clk.value + divider = max(1, int(round(internal_clock_hz / sample_rate_hz))) + actual_rate = internal_clock_hz / divider + log(f"Internal clock: {internal_clock_hz/1e6:.3f} MHz, " + f"divider={divider}, actual sample rate {actual_rate/1e6:.6f} MHz") + + dwf.FDwfDigitalInDividerSet(hdwf, ctypes.c_uint(divider)) + + # 16-bit samples cover DIO0..DIO15 in one word. + dwf.FDwfDigitalInSampleFormatSet(hdwf, 16) + + # Device-reported max buffer size determines single-vs-record choice. + max_buf = ctypes.c_int() + dwf.FDwfDigitalInBufferSizeInfo(hdwf, ctypes.byref(max_buf)) + device_max = max_buf.value + + if mode == "auto": + mode = "single" if buffer_size <= device_max else "record" + log(f"Auto-selected acquisition mode: {mode} " + f"(requested {buffer_size} samples, device max {device_max}).") + elif mode == "single" and buffer_size > device_max: + log(f"Forced single mode but requested buffer {buffer_size} > " + f"device max {device_max}; clamping to {device_max}.") + buffer_size = device_max + + if mode == "single": + dwf.FDwfDigitalInBufferSizeSet(hdwf, buffer_size) + dwf.FDwfDigitalInAcquisitionModeSet(hdwf, ACQMODE_SINGLE) + else: + # Record mode: set mode FIRST, then query the device max again + # (some firmwares report different maxima per acquisition mode), + # then size the on-device ring buffer to the largest available + # for USB headroom. Total capture length is set via + # TriggerPositionSet. + dwf.FDwfDigitalInAcquisitionModeSet(hdwf, ACQMODE_RECORD) + dwf.FDwfDigitalInBufferSizeInfo(hdwf, ctypes.byref(max_buf)) + device_max = max_buf.value + dwf.FDwfDigitalInBufferSizeSet(hdwf, device_max) + + # Trigger configuration. + if trigger == "none": + dwf.FDwfDigitalInTriggerSourceSet(hdwf, ctypes.c_byte(TRIG_SRC_NONE)) + if mode == "record": + # In record mode, TriggerPositionSet specifies total samples + # to acquire (not a buffer offset like in single mode). + dwf.FDwfDigitalInTriggerPositionSet( + hdwf, ctypes.c_uint(buffer_size)) + else: + dwf.FDwfDigitalInTriggerSourceSet( + hdwf, ctypes.c_byte(TRIG_SRC_DETECTOR_DIGITAL_IN)) + if mode == "single": + # Pre-trigger position measured in samples from the start of + # the buffer; default is mid-buffer so we see context either + # side of the trigger event. + pre_trig_samples = int(buffer_size * trigger_position_frac) + dwf.FDwfDigitalInTriggerPositionSet( + hdwf, ctypes.c_uint(buffer_size - pre_trig_samples)) + else: + # Record mode: TriggerPositionSet is total samples after trigger. + dwf.FDwfDigitalInTriggerPositionSet( + hdwf, ctypes.c_uint(buffer_size)) + + fs_low = trigger_pattern_mask & ~trigger_pattern_value + fs_high = trigger_pattern_mask & trigger_pattern_value + fs_rise = trigger_change_mask + fs_fall = trigger_change_mask + dwf.FDwfDigitalInTriggerSet( + hdwf, + ctypes.c_uint(fs_low), + ctypes.c_uint(fs_high), + ctypes.c_uint(fs_rise), + ctypes.c_uint(fs_fall), + ) + log(f"Trigger configured: mode={trigger}, " + f"low=0x{fs_low:04x}, high=0x{fs_high:04x}, " + f"rise=0x{fs_rise:04x}, fall=0x{fs_fall:04x}") + + # Give analog/digital front end a moment to settle. + time.sleep(0.5) + + log(f"Starting {mode}-mode acquisition for {buffer_size} samples " + f"({buffer_size/actual_rate*1e3:.3f} ms)...") + dwf.FDwfDigitalInConfigure(hdwf, 0, 1) + + extras = { + "mode": mode, + "lost_samples": 0, + "corrupt_samples": 0, + "device_buffer_size": device_max, + } + + if mode == "single": + sts = ctypes.c_byte() + deadline = time.time() + 30.0 + while True: + dwf.FDwfDigitalInStatus(hdwf, 1, ctypes.byref(sts)) + if sts.value == STATE_DONE: + break + if time.time() > deadline: + raise RuntimeError( + "Timed out waiting for acquisition to complete " + "(trigger may never have fired)") + time.sleep(0.005) + + log("Acquisition done; reading samples.") + raw = (ctypes.c_uint16 * buffer_size)() + dwf.FDwfDigitalInStatusData(hdwf, raw, buffer_size * 2) + samples = np.frombuffer(raw, dtype=np.uint16).copy() + return samples, actual_rate, extras + + # ---- Record (streaming) mode ---------------------------------------- + # Preallocate the destination numpy buffer and read DWF chunks + # directly into it via pointer arithmetic. This avoids per-iteration + # ctypes allocation and an extra memcpy, both of which cost enough + # to overflow the AD2's small on-device ring buffer at >=500 kHz. + samples = np.empty(buffer_size, dtype=np.uint16) + samples_base = samples.ctypes.data + idx = 0 + c_available = ctypes.c_int() + c_lost = ctypes.c_int() + c_corrupt = ctypes.c_int() + sts = ctypes.c_byte() + # Allow up to 3x expected duration plus 10 s slack for trigger wait. + expected_s = buffer_size / actual_rate + deadline = time.time() + max(30.0, expected_s * 3 + 10.0) + last_log = time.time() + + while idx < buffer_size: + dwf.FDwfDigitalInStatus(hdwf, 1, ctypes.byref(sts)) + dwf.FDwfDigitalInStatusRecord( + hdwf, ctypes.byref(c_available), + ctypes.byref(c_lost), ctypes.byref(c_corrupt)) + extras["lost_samples"] += c_lost.value + extras["corrupt_samples"] += c_corrupt.value + + n = c_available.value + if n > 0: + n = min(n, buffer_size - idx) + dst = ctypes.c_void_p(samples_base + idx * 2) + dwf.FDwfDigitalInStatusData(hdwf, dst, n * 2) + idx += n + # When draining backlog, loop again immediately without + # sleeping so we don't fall behind. + if n >= 256: + continue + + if sts.value == STATE_DONE and c_available.value == 0: + break + + now = time.time() + if now - last_log > 1.0: + log(f"Record progress: {idx}/{buffer_size} samples " + f"({idx/buffer_size*100:.1f}%), " + f"lost={extras['lost_samples']}, " + f"corrupt={extras['corrupt_samples']}") + last_log = now + if now > deadline: + raise RuntimeError( + f"Timed out in record mode after {idx}/{buffer_size} " + f"samples (trigger may never have fired, or USB throughput " + f"is insufficient at {actual_rate/1e6:.3f} MHz)") + # Short sleep only when ring is mostly empty; long enough to let + # the device accumulate a useful chunk, short enough to stay + # well below the ring-buffer overflow time. + time.sleep(0.0002) + + log(f"Record done; captured {idx} samples, " + f"lost={extras['lost_samples']}, corrupt={extras['corrupt_samples']}.") + return samples[:idx], actual_rate, extras + finally: + dwf.FDwfDeviceCloseAll() + + +# ----- Analysis ------------------------------------------------------------ + +def decode_flag_values(samples, teensy_to_dio): + """Map 16-bit DIO samples down to the 4-bit Flag value at each sample.""" + flag = np.zeros(samples.shape, dtype=np.uint8) + for teensy_pin, bit in TEENSY_PIN_TO_BIT.items(): + dio = teensy_to_dio[teensy_pin] + bit_vals = ((samples >> dio) & 1).astype(np.uint8) + flag |= bit_vals << bit + return flag + + +def find_segments(flag_values): + """Return contiguous-run segments as (start_idx, end_idx_exclusive, flag). + + A segment covers samples [start, end). end == start + length. + """ + if flag_values.size == 0: + return [] + change_idx = np.flatnonzero(np.diff(flag_values.astype(np.int16)) != 0) + 1 + starts = np.concatenate(([0], change_idx)) + ends = np.concatenate((change_idx, [flag_values.size])) + return [(int(s), int(e), int(flag_values[s])) for s, e in zip(starts, ends)] + + +def debounce_segments(segments, min_samples): + """Drop transient segments shorter than min_samples by merging them into + their predecessor. This collapses the brief intermediate states produced + by Flag()'s four sequential digitalWrite() calls. + """ + if min_samples <= 1 or not segments: + return segments + out = [] + for seg in segments: + start, end, flag = seg + length = end - start + if length < min_samples and out: + # Extend the previous segment over this transient. + ps, pe, pf = out[-1] + out[-1] = (ps, end, pf) + else: + out.append(seg) + # Merge any now-adjacent runs that share the same flag value. + merged = [] + for seg in out: + if merged and merged[-1][2] == seg[2]: + ps, _, pf = merged[-1] + merged[-1] = (ps, seg[1], pf) + else: + merged.append(seg) + return merged + + +def build_transitions(segments, sample_period_s): + transitions = [] + for prev, curr in zip(segments, segments[1:]): + idx = curr[0] + transitions.append({ + "index": idx, + "time_s": idx * sample_period_s, + "from_flag": prev[2], + "to_flag": curr[2], + }) + return transitions + + +def build_segment_dicts(segments, sample_period_s): + out = [] + for start, end, flag in segments: + out.append({ + "flag": flag, + "start_index": start, + "end_index": end, + "start_time_s": start * sample_period_s, + "end_time_s": end * sample_period_s, + "duration_s": (end - start) * sample_period_s, + }) + return out + + +def stats(values): + if not values: + return {"count": 0} + arr = np.asarray(values, dtype=np.float64) + n = arr.size + return { + "count": int(n), + "min_s": float(arr.min()), + "max_s": float(arr.max()), + "mean_s": float(arr.mean()), + "median_s": float(np.median(arr)), + "p95_s": float(np.percentile(arr, 95)), + "p99_s": float(np.percentile(arr, 99)), + "stddev_s": float(arr.std(ddof=0)) if n > 1 else 0.0, + "total_s": float(arr.sum()), + } + + +def summarize(segments, transitions, sample_period_s): + flag_durations = {} + for start, end, flag in segments: + flag_durations.setdefault(flag, []).append((end - start) * sample_period_s) + + transition_counts = {} + for t in transitions: + key = f"{t['from_flag']}->{t['to_flag']}" + transition_counts[key] = transition_counts.get(key, 0) + 1 + + return { + "flag_segment_stats": { + str(flag): stats(durs) for flag, durs in sorted(flag_durations.items()) + }, + "transition_counts": dict(sorted(transition_counts.items())), + } + + +def compute_measurement(segments, from_flag, to_flag, sample_period_s): + """Time from the *start* of each `from_flag` segment to the *start* of the + next `to_flag` segment. This is the natural way to read 'how long did the + code between Flag(FROM) and Flag(TO) take?' + """ + intervals = [] + i = 0 + while i < len(segments): + if segments[i][2] != from_flag: + i += 1 + continue + from_start = segments[i][0] + # Look for the next segment whose flag is to_flag. + j = i + 1 + while j < len(segments) and segments[j][2] != to_flag: + j += 1 + if j < len(segments): + to_start = segments[j][0] + intervals.append((to_start - from_start) * sample_period_s) + i = j + else: + break + return { + "from_flag": from_flag, + "to_flag": to_flag, + "intervals_s": [float(x) for x in intervals], + **stats(intervals), + } + + +# ----- CLI ----------------------------------------------------------------- + +def parse_dio_map(arg): + """Parse "28:1,29:2,30:3,31:4" -> {28: 1, ...}.""" + out = {} + for item in arg.split(","): + item = item.strip() + if not item: + continue + pin_str, dio_str = item.split(":") + out[int(pin_str)] = int(dio_str) + for pin in TEENSY_PIN_TO_BIT: + if pin not in out: + raise argparse.ArgumentTypeError( + f"--dio-map must include Teensy pin {pin}") + return out + + +def build_parser(): + p = argparse.ArgumentParser( + description="Capture Flag() pin signals on AD2 and report timing.") + p.add_argument("--sample-rate", type=float, default=10e6, + help="Target sample rate in Hz (default 10 MHz). " + "Actual rate is the nearest integer divider of the " + "AD2 internal clock (typically 100 MHz).") + p.add_argument("--duration", type=float, default=None, + help="Record duration in seconds. If set, overrides " + "--buffer-size: buffer_size = sample_rate * duration.") + p.add_argument("--buffer-size", type=int, default=8192, + help="Number of samples to capture (default 8192). " + "Clamped to device maximum.") + p.add_argument("--debounce-us", type=float, default=2.0, + help="Discard transient flag segments shorter than this " + "duration in microseconds. Useful because Flag() " + "writes its four pins sequentially, producing brief " + "intermediate values during the transition (~1us " + "total on Teensy 4.1). Default 2us covers the " + "transient at sample rates from 500kHz to 10MHz. " + "Set to 0 to disable.") + p.add_argument("--mode", default="auto", + choices=["auto", "single", "record"], + help="Acquisition mode. 'auto' (default) picks single-shot " + "if the request fits in the AD2's on-board buffer, " + "otherwise switches to record (USB streaming) mode " + "for arbitrary-length captures. 'single' is fastest " + "for short windows but capped at the device buffer " + "(~8K samples). 'record' streams over USB and " + "supports 1+ second captures, but watch for " + "lost_samples in the output.") + p.add_argument("--max-lost-frac", type=float, default=0.001, + help="In record mode, fail (exit non-zero) if the " + "fraction of lost samples exceeds this threshold " + "(default 0.001 = 0.1%%). Lost samples mean USB " + "couldn't keep up; the resulting timing is suspect.") + p.add_argument("--trigger", default="none", + choices=["none", "change", "flag"], + help="Trigger mode. 'none' captures immediately. " + "'change' triggers on any transition of the four " + "flag pins. 'flag' triggers when the four pins " + "match --trigger-flag.") + p.add_argument("--trigger-flag", type=int, default=None, + help="With --trigger=flag, the 4-bit flag value (0-15) " + "to trigger on.") + p.add_argument("--trigger-position", type=float, default=0.1, + help="Fraction of the buffer to capture BEFORE the " + "trigger event (0.0..1.0, default 0.1).") + p.add_argument("--measure", nargs=2, metavar=("FROM", "TO"), type=int, + default=None, + help="Report intervals from Flag(FROM) start to the next " + "Flag(TO) start. Adds a 'measurement' key to the JSON.") + p.add_argument("--dio-map", type=parse_dio_map, + default=DEFAULT_TEENSY_TO_DIO, + help="Teensy-pin:AD2-DIO mapping, comma-separated. " + "Default: 28:1,29:2,30:3,31:4") + p.add_argument("--include-raw", action="store_true", + help="Include the raw decoded flag-value array in the " + "JSON output (large; off by default).") + p.add_argument("--quiet", action="store_true", + help="Suppress progress messages on stderr.") + return p + + +def main(argv=None): + args = build_parser().parse_args(argv) + + def log(msg): + if not args.quiet: + print(msg, file=sys.stderr, flush=True) + + try: + # Resolve buffer size. + if args.duration is not None: + buffer_size = max(2, int(round(args.sample_rate * args.duration))) + else: + buffer_size = args.buffer_size + + # Build trigger masks from the DIO map. + flag_dio_mask = 0 + for pin, dio in args.dio_map.items(): + flag_dio_mask |= (1 << dio) + + if args.trigger == "none": + trigger = "none" + pattern_mask = 0 + pattern_value = 0 + change_mask = 0 + elif args.trigger == "change": + trigger = "change" + pattern_mask = 0 + pattern_value = 0 + change_mask = flag_dio_mask + elif args.trigger == "flag": + if args.trigger_flag is None or not 0 <= args.trigger_flag <= 15: + raise ValueError( + "--trigger=flag requires --trigger-flag in 0..15") + trigger = f"flag={args.trigger_flag}" + pattern_mask = flag_dio_mask + pattern_value = 0 + for pin, bit in TEENSY_PIN_TO_BIT.items(): + if (args.trigger_flag >> bit) & 1: + pattern_value |= (1 << args.dio_map[pin]) + change_mask = 0 # level trigger + else: + raise ValueError(f"Unknown trigger mode: {args.trigger}") + + samples, actual_rate, extras = acquire( + sample_rate_hz=args.sample_rate, + buffer_size=buffer_size, + trigger=trigger, + trigger_pattern_mask=pattern_mask, + trigger_pattern_value=pattern_value, + trigger_change_mask=change_mask, + trigger_position_frac=args.trigger_position, + mode=args.mode, + log=log, + ) + sample_period_s = 1.0 / actual_rate + + lost_frac = (extras["lost_samples"] / samples.size + if samples.size else 0.0) + if extras["lost_samples"] or extras["corrupt_samples"]: + log(f"WARNING: lost={extras['lost_samples']} " + f"corrupt={extras['corrupt_samples']} " + f"({lost_frac*100:.3f}% lost). " + f"Timing may be inaccurate.") + + flag_values = decode_flag_values(samples, args.dio_map) + raw_segments = find_segments(flag_values) + debounce_samples = int(round(args.debounce_us * 1e-6 * actual_rate)) + segments = debounce_segments(raw_segments, debounce_samples) + log(f"Decoded {len(raw_segments)} raw segments, " + f"{len(segments)} after debounce ({debounce_samples} samples).") + + transitions = build_transitions(segments, sample_period_s) + summary = summarize(segments, transitions, sample_period_s) + + output = { + "metadata": { + "sample_rate_hz": actual_rate, + "sample_period_s": sample_period_s, + "buffer_size": int(samples.size), + "duration_s": samples.size * sample_period_s, + "trigger": trigger, + "trigger_position_frac": args.trigger_position + if trigger != "none" else None, + "debounce_us": args.debounce_us, + "debounce_samples": debounce_samples, + "acquisition_mode": extras["mode"], + "lost_samples": extras["lost_samples"], + "corrupt_samples": extras["corrupt_samples"], + "lost_fraction": lost_frac, + "device_buffer_size": extras["device_buffer_size"], + "pin_mapping": { + str(pin): {"bit": TEENSY_PIN_TO_BIT[pin], + "dio": args.dio_map[pin]} + for pin in sorted(TEENSY_PIN_TO_BIT) + }, + }, + "transitions": transitions, + "segments": build_segment_dicts(segments, sample_period_s), + "summary": summary, + } + + if args.measure is not None: + from_flag, to_flag = args.measure + output["measurement"] = compute_measurement( + segments, from_flag, to_flag, sample_period_s) + + if args.include_raw: + output["raw_flag_values"] = flag_values.tolist() + + json.dump(output, sys.stdout, separators=(",", ":")) + sys.stdout.write("\n") + + if lost_frac > args.max_lost_frac: + log(f"ERROR: lost sample fraction {lost_frac*100:.3f}% exceeds " + f"--max-lost-frac {args.max_lost_frac*100:.3f}%.") + return 2 + return 0 + + except Exception as exc: + err = {"error": str(exc), "error_type": type(exc).__name__} + json.dump(err, sys.stdout) + sys.stdout.write("\n") + log(f"ERROR: {exc}") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/code/tools/plot_flag_timing.py b/code/tools/plot_flag_timing.py new file mode 100644 index 0000000..6085c0b --- /dev/null +++ b/code/tools/plot_flag_timing.py @@ -0,0 +1,244 @@ +#!/usr/bin/env python3 +"""Plot per-flag duration distributions from flag_timing.py JSON output. + +For each flag value with enough events, produces a 2-panel PNG: + top: histogram of segment durations (with mean / median / p95 / p99 + marked as vertical lines) — makes bimodal distributions obvious. + bottom: scatter of duration vs. iteration index — reveals drift or + clustering of slow events over the capture window. + +Also writes a single timeline strip showing the full capture, colored by +flag, useful for spotting where slow events sit in real time. + +Usage: + plot_flag_timing.py PROFILE.json + plot_flag_timing.py PROFILE.json --out-dir docs/ --prefix baseline \\ + --flag-labels 1=DrawDisplay-other,2=SignalProcessing,3=DrawSpectrumPane + +Outputs are written next to the JSON by default. PNG paths are printed to +stdout unless --quiet. +""" + +import argparse +import json +import os +import sys + +import warnings + +import numpy as np +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt + +# tight_layout occasionally complains about in-axes legends and grid spec +# height ratios used here; the layout still renders correctly. +warnings.filterwarnings( + "ignore", message=".*not compatible with tight_layout.*") + + +# Distinct colors for flag values 0..15. Picked to remain readable when +# adjacent in the timeline strip. +FLAG_COLORS = { + 0: "#cccccc", 1: "#1f77b4", 2: "#ff7f0e", 3: "#2ca02c", + 4: "#d62728", 5: "#9467bd", 6: "#8c564b", 7: "#e377c2", + 8: "#7f7f7f", 9: "#bcbd22", 10: "#17becf", + 11: "#aec7e8", 12: "#ffbb78", 13: "#98df8a", + 14: "#ff9896", 15: "#c5b0d5", +} + + +def parse_labels(arg): + out = {} + if not arg: + return out + for item in arg.split(","): + item = item.strip() + if "=" not in item: + continue + k, v = item.split("=", 1) + out[int(k.strip())] = v.strip() + return out + + +def label_for(flag, labels): + name = labels.get(flag) + return f"Flag {flag} ({name})" if name else f"Flag {flag}" + + +def plot_flag(flag, flag_segments, stats, label, out_path): + """Two-panel figure: duration histogram + per-iteration scatter.""" + durations_us = np.array( + [s["duration_s"] * 1e6 for s in flag_segments], dtype=np.float64) + times_ms = np.array( + [s["start_time_s"] * 1e3 for s in flag_segments], dtype=np.float64) + + fig, (ax_hist, ax_scat) = plt.subplots( + 2, 1, figsize=(9, 6.5), + gridspec_kw={"height_ratios": [1.3, 1.0], "hspace": 0.35}, + ) + + color = FLAG_COLORS.get(flag, "#444444") + + # ---- Histogram ------------------------------------------------------ + # Auto bin count: sqrt rule, capped, with a floor. + nbins = int(np.clip(np.sqrt(durations_us.size) * 2.5, 12, 80)) + ax_hist.hist(durations_us, bins=nbins, color=color, alpha=0.75, + edgecolor="black", linewidth=0.4) + + markers = [ + ("median_s", "median", "#222222", "--"), + ("mean_s", "mean", "#222222", "-"), + ("p95_s", "p95", "#b00000", ":"), + ("p99_s", "p99", "#b00000", "-."), + ] + for key, mlabel, mcolor, style in markers: + v = stats[key] * 1e6 + ax_hist.axvline(v, color=mcolor, linestyle=style, linewidth=1.2, + label=f"{mlabel} {_fmt_us(v)}") + + ax_hist.set_xlabel("Segment duration (µs)") + ax_hist.set_ylabel("Count") + ax_hist.set_title( + f"{label} — distribution (n={stats['count']}, " + f"range {_fmt_us(stats['min_s']*1e6)}–{_fmt_us(stats['max_s']*1e6)})" + ) + ax_hist.grid(True, alpha=0.3) + ax_hist.legend(loc="upper right", fontsize=8, framealpha=0.85) + + # ---- Per-iteration scatter ------------------------------------------ + ax_scat.scatter(times_ms, durations_us, s=18, color=color, + alpha=0.7, edgecolor="black", linewidth=0.3) + ax_scat.axhline(stats["median_s"] * 1e6, color="#222222", + linestyle="--", linewidth=1, label="median") + ax_scat.axhline(stats["p95_s"] * 1e6, color="#b00000", + linestyle=":", linewidth=1, label="p95") + ax_scat.set_xlabel("Time in capture (ms)") + ax_scat.set_ylabel("Duration (µs)") + ax_scat.set_title(f"{label} — duration over time") + ax_scat.grid(True, alpha=0.3) + ax_scat.legend(loc="upper right", fontsize=8, framealpha=0.85) + + plt.tight_layout() + fig.savefig(out_path, dpi=120) + plt.close(fig) + + +def plot_timeline(segments, duration_s, labels, out_path): + """Stacked timeline: one horizontal row per flag value, each row showing + that flag's segments as filled bars over the capture window. Readable + even when some flags have short segments that would be invisible in a + single-row strip. + """ + flags_present = sorted({s["flag"] for s in segments}) + n_rows = len(flags_present) + row_for_flag = {f: i for i, f in enumerate(flags_present)} + + fig_height = max(2.0, 0.6 * n_rows + 1.2) + fig, ax = plt.subplots(figsize=(12, fig_height)) + + for s in segments: + row = row_for_flag[s["flag"]] + ax.barh( + row, + s["duration_s"] * 1000, + left=s["start_time_s"] * 1000, + height=0.75, + color=FLAG_COLORS.get(s["flag"], "#444444"), + edgecolor="none", + ) + + ax.set_xlim(0, duration_s * 1000) + ax.set_ylim(-0.6, n_rows - 0.4) + ax.set_yticks(range(n_rows)) + ax.set_yticklabels([label_for(f, labels) for f in flags_present], + fontsize=9) + ax.invert_yaxis() # flag 0 at top, increasing flag value downward + ax.set_xlabel("Time in capture (ms)") + ax.set_title(f"Flag timeline — {duration_s*1000:.0f} ms capture " + f"(one row per flag)") + ax.grid(True, axis="x", alpha=0.3) + plt.tight_layout() + fig.savefig(out_path, dpi=120) + plt.close(fig) + + +def _fmt_us(v): + """Format microseconds with a reasonable precision.""" + if v >= 1000: + return f"{v/1000:.2f} ms" + if v >= 100: + return f"{v:.0f} µs" + if v >= 10: + return f"{v:.1f} µs" + return f"{v:.2f} µs" + + +def main(argv=None): + p = argparse.ArgumentParser( + description=__doc__.splitlines()[0], + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + p.add_argument("input", help="Path to JSON file produced by flag_timing.py") + p.add_argument("--out-dir", default=None, + help="Directory for output PNGs (default: same as input).") + p.add_argument("--prefix", default=None, + help="Filename prefix for output PNGs (default: input " + "basename without extension).") + p.add_argument("--flag-labels", default="", + help="Comma-separated 'flag=name' pairs for prettier " + "titles and legends, e.g. " + "'1=DrawDisplay-other,3=DrawSpectrumPane'.") + p.add_argument("--min-count", type=int, default=2, + help="Skip per-flag plots when the flag has fewer than " + "this many segments (default 2).") + p.add_argument("--no-timeline", action="store_true", + help="Skip the timeline strip plot.") + p.add_argument("--quiet", action="store_true", + help="Suppress 'wrote ...' messages on stdout.") + args = p.parse_args(argv) + + with open(args.input) as f: + data = json.load(f) + if "error" in data: + print(f"Input JSON contains an error: {data['error']}", + file=sys.stderr) + return 1 + + labels = parse_labels(args.flag_labels) + out_dir = (args.out_dir + or os.path.dirname(os.path.abspath(args.input)) + or ".") + prefix = (args.prefix + or os.path.splitext(os.path.basename(args.input))[0]) + os.makedirs(out_dir, exist_ok=True) + + segments = data.get("segments", []) + stats_by_flag = data.get("summary", {}).get("flag_segment_stats", {}) + duration_s = data.get("metadata", {}).get("duration_s", 0.0) + + written = [] + for flag_str, stats in stats_by_flag.items(): + if stats.get("count", 0) < args.min_count: + continue + flag = int(flag_str) + flag_segs = [s for s in segments if s["flag"] == flag] + if len(flag_segs) < args.min_count: + continue + out_path = os.path.join(out_dir, f"{prefix}_flag{flag}.png") + plot_flag(flag, flag_segs, stats, label_for(flag, labels), out_path) + written.append(out_path) + + if not args.no_timeline and segments: + out_path = os.path.join(out_dir, f"{prefix}_timeline.png") + plot_timeline(segments, duration_s, labels, out_path) + written.append(out_path) + + if not args.quiet: + for w in written: + print(w) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/code/tools/serial_diag.py b/code/tools/serial_diag.py new file mode 100755 index 0000000..021d789 --- /dev/null +++ b/code/tools/serial_diag.py @@ -0,0 +1,915 @@ +#!/usr/bin/env python3 +""" +Phoenix SDR Serial Diagnostics Tool + +Monitors diagnostic output while allowing CAT control of the radio. +Supports USB audio for transmitting test tones and receiving audio. + +Supports two modes: + 1. Single-port mode (serial+midi+audio USB): One port for both diagnostics and CAT + python serial_diag.py --port /dev/ttyACM0 + + 2. Dual-port mode (Dual Serial USB): Separate ports for diagnostics and CAT + python serial_diag.py --diag /dev/ttyACM0 --cat /dev/ttyACM1 + +Commands (type at the prompt): + tx - Key transmitter and start 1kHz tone via USB audio + rx - Unkey transmitter and stop tone + tone - Set tone frequency (default 1000 Hz) + monitor - Start/stop RX audio monitoring (shows RMS level) + devices - List available audio devices + audio - Select audio device by index + usb - Switch to USB audio mode (PC audio input) + ssb - Switch to SSB/microphone mode + lsb - Switch to LSB sideband + usbsb - Switch to USB sideband + cw - Switch to CW mode + freq 14074 - Set frequency in kHz + id - Query radio ID + if - Query radio status + stats - Show USB_RX statistics + cat - Send raw CAT command (e.g., 'cat FA;') + help - Show this help + quit - Exit program + +Requirements for audio: + sudo apt install python3-numpy python3-sounddevice + # or: pip install numpy sounddevice +""" + +import argparse +import serial +import threading +import sys +import time +import re +from datetime import datetime + +# Optional audio support +try: + import numpy as np + import sounddevice as sd + AUDIO_AVAILABLE = True +except ImportError: + AUDIO_AVAILABLE = False + np = None + sd = None + + +class PhoenixDiagnostics: + def __init__(self, diag_port=None, cat_port=None, shared_port=None, + diag_baud=115200, cat_baud=38400, shared_baud=115200): + self.diag_port = diag_port + self.cat_port = cat_port + self.shared_port = shared_port + self.diag_baud = diag_baud + self.cat_baud = cat_baud + self.shared_baud = shared_baud + self.diag_serial = None + self.cat_serial = None + self.shared_serial = None + self.running = False + self.diag_thread = None + self.tx_active = False + + # For single-port mode: coordinate CAT commands with reader thread + self.serial_lock = threading.Lock() + self.cat_response_queue = [] + self.waiting_for_cat_response = False + + # Statistics + self.last_usb_rx_stats = {} + self.stats_count = 0 + self.last_usb_tx_stats = {} + self.tx_stats_count = 0 + + # Audio settings + self.audio_device = None # None = default, or device index + self.tone_freq = 1000 # Hz + self.sample_rate = 48000 # Must match Teensy USB audio + self.audio_stream = None + self.audio_phase = 0.0 + self.tone_active = False + self.monitor_active = False + self.monitor_thread = None + self.rx_rms_history = [] + + def connect(self): + """Connect to serial port(s).""" + try: + # Single-port mode + if self.shared_port: + print(f"Connecting to {self.shared_port} at {self.shared_baud} baud (single-port mode)...") + self.shared_serial = serial.Serial( + self.shared_port, + self.shared_baud, + timeout=0.1 + ) + print(f" Connected (diagnostics and CAT on same port)") + return True + + # Dual-port mode + if self.diag_port: + print(f"Connecting to diagnostic port {self.diag_port} at {self.diag_baud} baud...") + self.diag_serial = serial.Serial( + self.diag_port, + self.diag_baud, + timeout=0.1 + ) + print(f" Connected to diagnostic port") + + if self.cat_port: + print(f"Connecting to CAT port {self.cat_port} at {self.cat_baud} baud...") + self.cat_serial = serial.Serial( + self.cat_port, + self.cat_baud, + timeout=0.5 + ) + print(f" Connected to CAT port") + + return True + + except serial.SerialException as e: + print(f"Error connecting to serial port: {e}") + return False + + def disconnect(self): + """Disconnect from serial port(s).""" + self.running = False + if self.diag_thread: + self.diag_thread.join(timeout=1.0) + if self.shared_serial: + self.shared_serial.close() + if self.diag_serial: + self.diag_serial.close() + if self.cat_serial: + self.cat_serial.close() + + def start_diag_monitor(self): + """Start the diagnostic monitoring thread.""" + self.running = True + self.diag_thread = threading.Thread(target=self._diag_reader, daemon=True) + self.diag_thread.start() + + def _diag_reader(self): + """Background thread to read diagnostic output.""" + buffer = "" + ser = self.shared_serial if self.shared_serial else self.diag_serial + + while self.running: + try: + if ser and ser.in_waiting: + with self.serial_lock: + data = ser.read(ser.in_waiting) + buffer += data.decode('utf-8', errors='replace') + + # Process complete lines + while '\n' in buffer: + line, buffer = buffer.split('\n', 1) + line = line.strip() + if line: + self._process_diag_line(line) + + # In single-port mode, check for CAT responses (end with ;) + # CAT responses don't have newlines, so check buffer for semicolons + # Drain them whether or not a command is outstanding: anything + # arriving unsolicited (AI mode, a late reply) would otherwise sit + # in the buffer and be handed back as the response to the *next* + # command sent. + if self.shared_serial: + while ';' in buffer: + # Extract CAT response up to and including semicolon + idx = buffer.index(';') + response = buffer[:idx + 1] + buffer = buffer[idx + 1:] + # Check if this looks like a CAT response (not diagnostic) + if not response.startswith(('USB_', '[', 'DEBUG', 'INFO', 'WARN', 'ERR')): + if self.waiting_for_cat_response: + self.cat_response_queue.append(response) + else: + time.sleep(0.01) + except Exception as e: + if self.running: + print(f"\nDiagnostic read error: {e}") + time.sleep(0.1) + + def _process_diag_line(self, line): + """Process and display a diagnostic line.""" + if not line: + return + + timestamp = datetime.now().strftime("%H:%M:%S.%f")[:-3] + + # Parse USB_RX diagnostic lines (ASRC consumer side) + if line.startswith("USB_RX:"): + self._parse_usb_rx_stats(line) + # Color code based on content + if "underruns=" in line: + match = re.search(r'underruns=(\d+)', line) + if match and int(match.group(1)) > 0: + # Highlight underruns in red + print(f"\033[91m[{timestamp}] {line}\033[0m") + return + if "WARMUP" in line: + # Highlight warmup in yellow + print(f"\033[93m[{timestamp}] {line}\033[0m") + return + # Normal RX line in cyan + print(f"\033[96m[{timestamp}] {line}\033[0m") + return + + # Parse USB_TX diagnostic lines (USB receive callback side) + if line.startswith("USB_TX:"): + self._parse_usb_tx_stats(line) + # Color code based on content + # Highlight high zero percentage in red (problem indicator) + match = re.search(r'zeros=\d+\(([\d.]+)%\)', line) + if match: + zero_pct = float(match.group(1)) + if zero_pct > 10.0: # More than 10% zeros is concerning + print(f"\033[91m[{timestamp}] {line}\033[0m") + return + # Highlight overruns in red + match = re.search(r'overruns=(\d+)', line) + if match and int(match.group(1)) > 0: + print(f"\033[91m[{timestamp}] {line}\033[0m") + return + # Normal TX line in green + print(f"\033[92m[{timestamp}] {line}\033[0m") + return + + # Default: print with timestamp + print(f"[{timestamp}] {line}") + + def _parse_usb_rx_stats(self, line): + """Parse USB_RX statistics from diagnostic line.""" + # Format: USB_RX: RUNNING reads=X underruns=Y zeros=Z | buf=min/avg/max | ratio=min/avg/max | rms=X + try: + stats = {} + + # Extract state + if "RUNNING" in line: + stats['state'] = 'RUNNING' + elif "WARMUP" in line: + stats['state'] = 'WARMUP' + + # Extract numeric values + patterns = [ + (r'reads=(\d+)', 'reads'), + (r'underruns=(\d+)', 'underruns'), + (r'zeros=(\d+)', 'zeros'), + (r'buf=(\d+)/(\d+)/(\d+)', 'buf_min', 'buf_avg', 'buf_max'), + (r'ratio=([\d.]+)/([\d.]+)/([\d.]+)', 'ratio_min', 'ratio_avg', 'ratio_max'), + (r'rms=([\d.]+)', 'rms'), + ] + + for pattern in patterns: + if len(pattern) == 2: + match = re.search(pattern[0], line) + if match: + stats[pattern[1]] = float(match.group(1)) if '.' in match.group(1) else int(match.group(1)) + else: + match = re.search(pattern[0], line) + if match: + for i, name in enumerate(pattern[1:]): + val = match.group(i + 1) + stats[name] = float(val) if '.' in val else int(val) + + self.last_usb_rx_stats = stats + self.stats_count += 1 + + except Exception as e: + pass # Ignore parsing errors + + def _parse_usb_tx_stats(self, line): + """Parse USB_TX statistics from diagnostic line.""" + # Format: USB_TX: cb=N samples=N zeros=N(X%) overruns=N | buf=min/avg/max | samp/cb=min/max | rms=X.XXXX + try: + stats = {} + + # Extract numeric values + patterns = [ + (r'cb=(\d+)', 'callbacks'), + (r'samples=(\d+)', 'samples'), + (r'zeros=(\d+)', 'zeros'), + (r'zeros=\d+\(([\d.]+)%\)', 'zeros_pct'), + (r'overruns=(\d+)', 'overruns'), + (r'buf=(\d+)/(\d+)/(\d+)', 'buf_min', 'buf_avg', 'buf_max'), + (r'samp/cb=(\d+)/(\d+)', 'samp_cb_min', 'samp_cb_max'), + (r'rms=([\d.]+)', 'rms'), + ] + + for pattern in patterns: + if len(pattern) == 2: + match = re.search(pattern[0], line) + if match: + val = match.group(1) + stats[pattern[1]] = float(val) if '.' in val else int(val) + else: + match = re.search(pattern[0], line) + if match: + for i, name in enumerate(pattern[1:]): + val = match.group(i + 1) + stats[name] = float(val) if '.' in val else int(val) + + self.last_usb_tx_stats = stats + self.tx_stats_count += 1 + + except Exception as e: + pass # Ignore parsing errors + + @staticmethod + def rejected(response): + """True if the radio rejected a CAT command. + + command_parser() in CAT.cpp answers "?;" for an unrecognised keyword or + a wrong-length parameter block. Note that an *accepted* write often + answers nothing at all - TX_write and RX_write both return an empty + string - so an empty response means success, not failure, and the + absence of "?;" is the only positive signal available. + """ + return response is not None and response.strip().startswith('?') + + def send_cat(self, command): + """Send a CAT command and return the response.""" + # Determine which serial port to use + if self.shared_serial: + ser = self.shared_serial + elif self.cat_serial: + ser = self.cat_serial + else: + print("No CAT port connected") + return None + + # Ensure command ends with semicolon + if not command.endswith(';'): + command += ';' + + try: + if self.shared_serial: + # Single-port mode: coordinate with reader thread + self.cat_response_queue.clear() + self.waiting_for_cat_response = True + + with self.serial_lock: + ser.write(command.encode('ascii')) + ser.flush() + + # Wait for response from queue + start_time = time.time() + while time.time() - start_time < 0.5: + if self.cat_response_queue: + response = self.cat_response_queue.pop(0) + self.waiting_for_cat_response = False + return response.strip() if response else None + time.sleep(0.01) + + self.waiting_for_cat_response = False + return None + else: + # Dual-port mode: read directly + ser.reset_input_buffer() + ser.write(command.encode('ascii')) + ser.flush() + + # Read response (wait for semicolon or timeout) + response = "" + start_time = time.time() + while time.time() - start_time < 0.5: + if ser.in_waiting: + char = ser.read(1).decode('ascii', errors='replace') + response += char + if char == ';': + break + else: + time.sleep(0.01) + + return response.strip() if response else None + + except Exception as e: + print(f"CAT command error: {e}") + return None + + # ==================== Audio Methods ==================== + + def find_teensy_audio_device(self): + """Find the Teensy USB audio device.""" + if not AUDIO_AVAILABLE: + return None + + devices = sd.query_devices() + for i, dev in enumerate(devices): + name = dev['name'].lower() + if 'teensy' in name and dev['max_output_channels'] >= 2: + return i + return None + + def list_audio_devices(self): + """List available audio devices.""" + if not AUDIO_AVAILABLE: + print("Audio not available. Install: pip install numpy sounddevice") + return + + print("\nAvailable audio devices:") + devices = sd.query_devices() + for i, dev in enumerate(devices): + marker = "" + if self.audio_device == i: + marker = " [SELECTED]" + elif self.audio_device is None and i == sd.default.device[1]: + marker = " [DEFAULT OUTPUT]" + + out_ch = dev['max_output_channels'] + in_ch = dev['max_input_channels'] + if out_ch > 0 or in_ch > 0: + print(f" {i}: {dev['name']} (out={out_ch}, in={in_ch}){marker}") + + teensy = self.find_teensy_audio_device() + if teensy is not None: + print(f"\nTeensy detected at device {teensy}") + print() + + def set_audio_device(self, device_idx): + """Set the audio device by index.""" + if not AUDIO_AVAILABLE: + print("Audio not available. Install: pip install numpy sounddevice") + return False + + try: + device_idx = int(device_idx) + dev = sd.query_devices(device_idx) + self.audio_device = device_idx + print(f"Audio device set to {device_idx}: {dev['name']}") + return True + except Exception as e: + print(f"Invalid device index: {e}") + return False + + def _tone_callback(self, outdata, frames, time_info, status): + """Callback for audio output stream - generates sine wave.""" + if status: + print(f"Audio status: {status}") + + if not self.tone_active: + outdata.fill(0) + return + + # Generate sine wave + t = (np.arange(frames) + self.audio_phase) / self.sample_rate + tone = np.sin(2 * np.pi * self.tone_freq * t).astype(np.float32) + + # Stereo: same tone on both channels (I and Q) + # For USB mode, this produces a carrier at the tone frequency offset + outdata[:, 0] = tone * 0.1 # Left channel (I) - 10% amplitude + outdata[:, 1] = tone * 0.1 # Right channel (Q) - 10% amplitude + + self.audio_phase += frames + + def start_tone(self): + """Start outputting a tone via USB audio.""" + if not AUDIO_AVAILABLE: + print("Audio not available. Install: pip install numpy sounddevice") + return False + + if self.audio_stream is not None: + self.stop_tone() + + try: + device = self.audio_device + if device is None: + device = self.find_teensy_audio_device() + if device is not None: + print(f"Auto-selected Teensy audio device {device}") + + self.audio_phase = 0.0 + self.tone_active = True + self.audio_stream = sd.OutputStream( + device=device, + samplerate=self.sample_rate, + channels=2, + dtype='float32', + callback=self._tone_callback, + blocksize=1024 + ) + self.audio_stream.start() + print(f"Tone started: {self.tone_freq} Hz at {self.sample_rate} Hz sample rate") + return True + except Exception as e: + print(f"Failed to start tone: {e}") + self.tone_active = False + return False + + def stop_tone(self): + """Stop the audio tone.""" + self.tone_active = False + if self.audio_stream is not None: + try: + self.audio_stream.stop() + self.audio_stream.close() + except Exception: + pass + self.audio_stream = None + print("Tone stopped") + + def _monitor_callback(self, indata, frames, time_info, status): + """Callback for audio input stream - monitors RX audio.""" + if status: + print(f"Audio input status: {status}") + + # Calculate RMS of input + rms_l = np.sqrt(np.mean(indata[:, 0] ** 2)) + rms_r = np.sqrt(np.mean(indata[:, 1] ** 2)) + rms = (rms_l + rms_r) / 2 + + self.rx_rms_history.append(rms) + if len(self.rx_rms_history) > 50: + self.rx_rms_history.pop(0) + + def _monitor_display_thread(self): + """Thread to display RX audio levels.""" + while self.monitor_active: + if self.rx_rms_history: + rms = self.rx_rms_history[-1] + avg_rms = sum(self.rx_rms_history) / len(self.rx_rms_history) + + # Create a simple bar graph + bar_len = int(rms * 50) + bar = '=' * min(bar_len, 50) + + # Print on same line + sys.stdout.write(f"\rRX RMS: {rms:.4f} (avg: {avg_rms:.4f}) [{bar:<50}]") + sys.stdout.flush() + + time.sleep(0.1) + print() # New line when stopping + + def start_monitor(self): + """Start monitoring RX audio from USB.""" + if not AUDIO_AVAILABLE: + print("Audio not available. Install: pip install numpy sounddevice") + return False + + if self.monitor_active: + self.stop_monitor() + return True + + try: + device = self.audio_device + if device is None: + device = self.find_teensy_audio_device() + if device is not None: + print(f"Auto-selected Teensy audio device {device}") + + self.rx_rms_history = [] + self.monitor_active = True + + self.input_stream = sd.InputStream( + device=device, + samplerate=self.sample_rate, + channels=2, + dtype='float32', + callback=self._monitor_callback, + blocksize=1024 + ) + self.input_stream.start() + + self.monitor_thread = threading.Thread(target=self._monitor_display_thread, daemon=True) + self.monitor_thread.start() + + print("RX monitor started (press Enter to stop)") + return True + except Exception as e: + print(f"Failed to start monitor: {e}") + self.monitor_active = False + return False + + def stop_monitor(self): + """Stop monitoring RX audio.""" + self.monitor_active = False + if hasattr(self, 'input_stream') and self.input_stream is not None: + try: + self.input_stream.stop() + self.input_stream.close() + except Exception: + pass + self.input_stream = None + if self.monitor_thread: + self.monitor_thread.join(timeout=0.5) + self.monitor_thread = None + print("RX monitor stopped") + + # ==================== Command Handlers ==================== + + def cmd_tx(self): + """Key the transmitter and start tone.""" + # "TX;", not "TX1;". CAT.cpp declares TX with set_len 3, so the parser + # only accepts a semicolon in position 2; "TX1;" is answered "?;" and + # the radio stays in receive. + response = self.send_cat("TX") + if self.rejected(response): + print(f"TX refused by radio ({response}) - still in receive") + return + self.tx_active = True + print("TX ON") + if AUDIO_AVAILABLE: + self.start_tone() + + def cmd_rx(self): + """Unkey the transmitter and stop tone.""" + if AUDIO_AVAILABLE and self.tone_active: + self.stop_tone() + response = self.send_cat("RX") + if self.rejected(response): + # Do not clear tx_active: the radio may still be keyed, and the + # quit path relies on this flag to unkey it. + print(f"RX refused by radio ({response}) - may still be transmitting") + return + self.tx_active = False + print("TX OFF") + + def _set_mode(self, command, description): + """Send a mode/audio-routing command and report honestly.""" + response = self.send_cat(command) + if self.rejected(response): + print(f"{description}: refused by radio ({response}) - " + f"'{command};' not supported by this firmware") + return False + print(description) + return True + + def cmd_usb(self): + """Switch to USB audio mode (PC audio input instead of microphone).""" + self._set_mode("UM1", "Audio: USB (PC input)") + + def cmd_ssb(self): + """Switch to SSB/microphone mode.""" + self._set_mode("UM0", "Audio: SSB (microphone)") + + def cmd_lsb(self): + """Switch to LSB sideband.""" + self._set_mode("MD1", "Sideband: LSB") + + def cmd_usb_sideband(self): + """Switch to USB sideband.""" + self._set_mode("MD2", "Sideband: USB") + + def cmd_cw(self): + """Switch to CW mode.""" + self._set_mode("MD3", "Mode: CW") + + def cmd_freq(self, freq_khz): + """Set frequency in kHz.""" + try: + freq_hz = int(float(freq_khz) * 1000) + except ValueError: + print(f"Invalid frequency: {freq_khz}") + return + self._set_mode(f"FA{freq_hz:011d}", f"Frequency: {freq_khz} kHz") + + def cmd_id(self): + """Query radio ID.""" + response = self.send_cat("ID") + print(f"Radio ID: {response}") + + def cmd_if(self): + """Query radio status.""" + response = self.send_cat("IF") + if response: + print(f"Status: {response}") + # Parse IF response + # IF[freq11][step5][rit5][rit_on][xit_on][mem2][rx_tx][mode][vr][scan][split][tone][tone_num][shift]; + if response.startswith("IF") and len(response) >= 38: + freq = int(response[2:13]) + mode_num = response[29:30] + modes = {'1': 'LSB', '2': 'USB', '3': 'CW', '4': 'FM', '5': 'AM'} + mode = modes.get(mode_num, f'?({mode_num})') + tx = response[28:29] + print(f" Frequency: {freq/1000:.3f} kHz") + print(f" Mode: {mode}") + print(f" TX: {'ON' if tx == '1' else 'OFF'}") + + def cmd_stats(self): + """Show current USB statistics.""" + print("\n=== USB Audio Statistics ===") + + # TX stats (PC -> Radio for transmission) + if self.last_usb_tx_stats: + print("\nUSB_TX (PC -> Radio, for RF transmission):") + for key, value in self.last_usb_tx_stats.items(): + print(f" {key}: {value}") + print(f" Total reports: {self.tx_stats_count}") + else: + print("\nUSB_TX: No statistics received yet") + + # RX stats (ASRC consumer side) + if self.last_usb_rx_stats: + print("\nUSB_RX (ASRC consumer):") + for key, value in self.last_usb_rx_stats.items(): + print(f" {key}: {value}") + print(f" Total reports: {self.stats_count}") + else: + print("\nUSB_RX: No statistics received yet") + print() + + def print_help(self): + """Print command help.""" + audio_status = "available" if AUDIO_AVAILABLE else "NOT INSTALLED" + print(f""" +Commands: + tx - Key transmitter (PTT on) and start 1kHz tone + rx - Unkey transmitter (PTT off) and stop tone + tone - Set tone frequency (default 1000, current: {self.tone_freq}) + monitor - Toggle RX audio monitoring (shows RMS level) + devices - List available audio devices + audio - Select audio device by index + + usb - Switch to USB audio mode (PC audio input) + ssb - Switch to SSB/microphone mode + lsb - Switch to LSB sideband + usbsb - Switch to USB sideband + cw - Switch to CW mode + freq - Set frequency (e.g., 'freq 14074') + id - Query radio ID + if - Query radio status + stats - Show last USB_RX statistics + cat - Send raw CAT command (e.g., 'cat FA;') + help - Show this help + quit/exit - Exit program + +Audio support: {audio_status} +Diagnostic output is displayed continuously with timestamps. +Lines containing 'underruns' > 0 are highlighted in red. +Lines containing 'WARMUP' are highlighted in yellow. +""") + + def run_interactive(self): + """Run interactive command loop.""" + self.print_help() + print("\nReady. Type 'help' for commands.\n") + + try: + while True: + try: + cmd = input("\033[94mphoenix>\033[0m ").strip() + except EOFError: + break + + if not cmd: + continue + + parts = cmd.lower().split(maxsplit=1) + command = parts[0] + args = parts[1] if len(parts) > 1 else "" + + if command in ('quit', 'exit', 'q'): + if self.tx_active: + self.cmd_rx() # Safety: ensure TX off + if self.monitor_active: + self.stop_monitor() + break + elif command == 'tx': + self.cmd_tx() + elif command == 'rx': + self.cmd_rx() + elif command == 'tone': + if args: + try: + self.tone_freq = int(args) + print(f"Tone frequency set to {self.tone_freq} Hz") + # If tone is active, restart it with new frequency + if self.tone_active: + self.stop_tone() + self.start_tone() + except ValueError: + print(f"Invalid frequency: {args}") + else: + print(f"Current tone frequency: {self.tone_freq} Hz") + elif command == 'monitor': + if self.monitor_active: + self.stop_monitor() + else: + self.start_monitor() + elif command == 'devices': + self.list_audio_devices() + elif command == 'audio' and args: + self.set_audio_device(args) + elif command == 'usb': + self.cmd_usb() + elif command == 'ssb': + self.cmd_ssb() + elif command == 'lsb': + self.cmd_lsb() + elif command == 'usbsb': + self.cmd_usb_sideband() + elif command == 'cw': + self.cmd_cw() + elif command == 'freq' and args: + self.cmd_freq(args) + elif command == 'id': + self.cmd_id() + elif command == 'if': + self.cmd_if() + elif command == 'stats': + self.cmd_stats() + elif command == 'cat' and args: + response = self.send_cat(args.upper()) + print(f"Response: {response}") + elif command == 'help': + self.print_help() + else: + print(f"Unknown command: {cmd}. Type 'help' for commands.") + + except KeyboardInterrupt: + print("\n") + finally: + # Clean up audio + if self.monitor_active: + self.stop_monitor() + if self.tone_active: + self.stop_tone() + if self.tx_active: + print("Turning off TX...") + self.cmd_rx() + + +def find_serial_ports(): + """List available serial ports.""" + import serial.tools.list_ports + ports = serial.tools.list_ports.comports() + return [(p.device, p.description) for p in ports] + + +def main(): + parser = argparse.ArgumentParser( + description='Phoenix SDR Serial Diagnostics Tool', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + parser.add_argument('--port', '-p', + help='Single serial port for both diagnostics and CAT (serial+midi+audio mode)') + parser.add_argument('--diag', '-d', + help='Diagnostic serial port (dual-port mode)') + parser.add_argument('--cat', '-c', + help='CAT control serial port (dual-port mode)') + parser.add_argument('--baud', '-b', type=int, default=115200, + help='Baud rate for single-port mode (default: 115200)') + parser.add_argument('--diag-baud', type=int, default=115200, + help='Diagnostic port baud rate (default: 115200)') + parser.add_argument('--cat-baud', type=int, default=38400, + help='CAT port baud rate (default: 38400)') + parser.add_argument('--list', '-l', action='store_true', + help='List available serial ports and exit') + + args = parser.parse_args() + + if args.list: + print("\nAvailable serial ports:") + ports = find_serial_ports() + if ports: + for device, description in ports: + print(f" {device}: {description}") + else: + print(" No serial ports found") + print() + return 0 + + if not args.port and not args.diag and not args.cat: + print("Error: Specify --port for single-port mode, or --diag/--cat for dual-port mode") + print("Use --list to see available ports") + return 1 + + if args.port and (args.diag or args.cat): + print("Error: Cannot use --port with --diag or --cat") + print("Use --port alone for single-port mode, or --diag/--cat for dual-port mode") + return 1 + + # Create diagnostics instance + diag = PhoenixDiagnostics( + diag_port=args.diag, + cat_port=args.cat, + shared_port=args.port, + diag_baud=args.diag_baud, + cat_baud=args.cat_baud, + shared_baud=args.baud + ) + + # Connect to serial ports + if not diag.connect(): + return 1 + + try: + # Start diagnostic monitoring (for single-port or dual-port with diag) + if args.port or args.diag: + diag.start_diag_monitor() + + # Run interactive command loop + diag.run_interactive() + + finally: + diag.disconnect() + + return 0 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/code/tools/siglent_capture.py b/code/tools/siglent_capture.py new file mode 100644 index 0000000..0bba33a --- /dev/null +++ b/code/tools/siglent_capture.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python3 +""" +Capture trace data from SIGLENT oscilloscope using pyvisa. +Retrieves waveform data from channels 1 and 2 without modifying settings. +""" + +import pyvisa +import numpy as np +import sys + +SCOPE_IP = "192.168.86.101" + +# Global scope connection +scope = None + +def connect_scope(): + """Connect to the oscilloscope.""" + global scope + resource_str = f'TCPIP0::{SCOPE_IP}::INSTR' + rm = pyvisa.ResourceManager() + scope = rm.open_resource(resource_str) + scope.timeout = 20000 + scope.chunk_size = 1024 * 1024 + scope.write("CHDR OFF") # Turn off headers for clean numeric responses + return scope + +def close_scope(): + """Close the oscilloscope connection.""" + global scope + if scope: + scope.close() + scope = None + +def get_channel_data(channel): + """ + Retrieve waveform data from specified channel. + Returns tuple of (time_array, voltage_array) or (None, None) on error. + """ + ch = f"C{channel}" + + try: + # Get vertical scale and offset (CHDR OFF gives clean numeric values) + vdiv = float(scope.query(f"{ch}:VDIV?")) + voffset = float(scope.query(f"{ch}:OFFSET?")) + + # Get time base + tdiv = float(scope.query("TDIV?")) + + # Request waveform data + scope.write(f"{ch}:WF? DAT2") + raw_data = scope.read_raw() + + # Strip the header (Standard for Siglent binary blocks) + # The header format is #N followed by N digits of length, then data + header_start = raw_data.find(b'#') + if header_start == -1: + print(f"Could not find waveform header in response") + return None, None + + # The byte after '#' tells you how many digits are in the length field + length_digits = int(raw_data[header_start+1:header_start+2]) + data_start = header_start + 2 + length_digits + + # Convert binary bytes to integers (signed 8-bit) + samples = np.frombuffer(raw_data[data_start:-1], dtype=np.int8) + + # Convert to Voltage using the manual's formula + # Voltage = code * (vdiv / 25) - voffset + voltages = samples * (vdiv / 25) - voffset + + # Create time array + num_points = len(voltages) + total_time = 14 * tdiv # 14 divisions on SIGLENT scopes + times = np.linspace(-total_time/2, total_time/2, num_points) + + return times, voltages + + except Exception as e: + print(f"Failed to get data for channel {channel}: {e}") + return None, None + +def main(): + try: + # Connect to scope + connect_scope() + + # Identify the scope + idn = scope.query("*IDN?") + print(f"Connected to: {idn}") + print() + + # Get channel 1 data + print("Retrieving Channel 1 data...") + time1, volt1 = get_channel_data(1) + + # Get channel 2 data + print("Retrieving Channel 2 data...") + time2, volt2 = get_channel_data(2) + + # Print summary + print() + print("=" * 50) + + if time1 is not None and volt1 is not None: + print(f"Channel 1: {len(volt1)} points") + print(f" Time range: {time1[0]*1e6:.2f} µs to {time1[-1]*1e6:.2f} µs") + print(f" Voltage range: {volt1.min():.3f} V to {volt1.max():.3f} V") + print(f" Vpp: {volt1.max() - volt1.min():.3f} V") + else: + print("Channel 1: No data retrieved") + + print() + + if time2 is not None and volt2 is not None: + print(f"Channel 2: {len(volt2)} points") + print(f" Time range: {time2[0]*1e6:.2f} µs to {time2[-1]*1e6:.2f} µs") + print(f" Voltage range: {volt2.min():.3f} V to {volt2.max():.3f} V") + print(f" Vpp: {volt2.max() - volt2.min():.3f} V") + else: + print("Channel 2: No data retrieved") + + # Save data to CSV files + if time1 is not None and volt1 is not None: + filename = "channel1_data.csv" + np.savetxt(filename, np.column_stack((time1, volt1)), + delimiter=',', header='time_s,voltage_v', comments='') + print(f"\nChannel 1 data saved to {filename}") + + if time2 is not None and volt2 is not None: + filename = "channel2_data.csv" + np.savetxt(filename, np.column_stack((time2, volt2)), + delimiter=',', header='time_s,voltage_v', comments='') + print(f"Channel 2 data saved to {filename}") + + return time1, volt1, time2, volt2 + + except Exception as e: + print(f"Failed to connect to oscilloscope: {e}") + sys.exit(1) + + finally: + close_scope() + +if __name__ == "__main__": + main() diff --git a/code/tools/tx_filter_hil/.gitignore b/code/tools/tx_filter_hil/.gitignore new file mode 100644 index 0000000..c783b74 --- /dev/null +++ b/code/tools/tx_filter_hil/.gitignore @@ -0,0 +1,8 @@ +# Run outputs: JSON, Markdown and figures, all timestamped per run. +# Everything needed to regenerate a report is in its JSON, so the artifacts +# themselves are not worth versioning. Commit one deliberately if a particular +# run is worth keeping as a reference. +results/ + +__pycache__/ +*.pyc diff --git a/code/tools/tx_filter_hil/README.md b/code/tools/tx_filter_hil/README.md new file mode 100644 index 0000000..17a1e19 --- /dev/null +++ b/code/tools/tx_filter_hil/README.md @@ -0,0 +1,265 @@ +# Transmit filter rate-independence test, hardware in the loop + +Verifies on the real radio that the transmit DSP filters land on their designed +frequencies at every supported sample rate. An Analog Discovery 2 drives the +microphone input with a tone and captures the exciter's I and Q outputs +*together*; the suite sweeps, measures, and compares the two rates. + +Companion to `../filter_hil/`, which does the same job for the receive chain. +The two share the CAT plumbing and the scalar curve fitting; the measurement +itself is different in kind, and so is what it can and cannot prove. + +## Wiring + +``` +AD2 W1 ------> radio microphone input (Teensy audio hat MIC) +AD2 Ch1 <------ exciter I output (order does not matter, see below) +AD2 Ch2 <------ exciter Q output +AD2 GND ------- radio ground (shared return is required) + +/dev/ttyACM1 ... CAT control, 38400 baud +/dev/ttyACM0 ... diagnostic port, 115200 baud +``` + +**Ch1 and Ch2 can be either way round.** The suite works out which is which and +compensates in software. Nothing needs rewiring. + +**No PTT wiring is needed.** The radio is keyed over CAT with `TX;` and unkeyed +with `RX;`. + +**The exciter outputs sit on a DC bias near +1.6 V.** That is why the scope +offset defaults to 1.6 V; the AD2's range is peak to peak about that offset, so +the usable window is 1.6 ± 2.5 V on the default 5 V range. + +## Before running + +- **The radio transmits continuously for the whole sweep**, several minutes per + sample rate, at 100 % duty. Run it with the exciter I/Q feeding the scope only, + or with a dummy load fitted. The suite reports total key-down time. +- **Leave the power setting alone.** `TXGain` derives the exciter drive from the + requested output power, so changing it mid-run moves every level measured. The + suite reads it, reports it, and does not touch it. +- **The radio must be in SSB.** `TX;` only keys from `SSB_RECEIVE` or + `CW_RECEIVE`, and a CW key-down transmits a carrier from the sidetone + oscillator rather than processed microphone audio, so it exercises none of + these filters. The suite forces USB (or LSB with `--modulation lsb`) and + restores the original modulation afterwards. +- **Do not touch the front panel while it runs.** Menu interaction triggers a + settings save, which would make the test configuration permanent. + +AGC is irrelevant here — it is a receive-path control — so unlike the receive +suite there is nothing to switch off first. + +## Running + +```bash +cd code/tools +./venv/bin/python tx_filter_hil/tx_filter_hil_test.py +``` + +Results land in `tx_filter_hil/results/tx_filter_hil_.{json,md}` plus +PNGs. + +Useful variations: + +```bash +# Passband only, one rate, verbose +./venv/bin/python tx_filter_hil/tx_filter_hil_test.py \ + --tests wiring,level,passband --rates 192000 -v + +# Faster, coarser pass +./venv/bin/python tx_filter_hil/tx_filter_hil_test.py \ + --passband-points 25 --alias-points 9 + +# Measure on the lower sideband instead +./venv/bin/python tx_filter_hil/tx_filter_hil_test.py --modulation lsb + +# Raise the radio's mic gain for the run (restored afterwards) +./venv/bin/python tx_filter_hil/tx_filter_hil_test.py --mic-gain 20 + +# Check arguments and the report path without touching hardware +./venv/bin/python tx_filter_hil/tx_filter_hil_test.py --dry-run + +# Redraw figures from a previous run, no hardware +./venv/bin/python tx_filter_hil/plot_tx_filter_hil.py \ + tx_filter_hil/results/tx_filter_hil_*.json +``` + +Exit codes: `0` pass, `1` fail, `2` error (no hardware, or preflight refused), +`3` aborted. + +## How it works + +### The transmit chain + +From `TransmitProcessing` in `DSP.cpp`: + +| Stage | Rate in → out | Corner specified as | +|---|---|---| +| `TXDecimateBy4` | Fs → Fs/4 | fraction of Fs | +| `TXDecimateBy2` | Fs/4 → Fs/8 | fraction of Fs | +| `BandEQ(TX)` | Fs/8 | **hertz** — 14 cells, 198 Hz to 4 kHz | +| `TXGain` | — | power-dependent scalar | +| `TXDecimateBy2Again` | Fs/8 → Fs/16 | **hertz** — `TX_DECIMATE3_FC_HZ` 3500 | +| `HilbertTransform` | Fs/16 | fixed 100-tap table | +| `TXInterpolateBy2Again` | Fs/16 → Fs/8 | **hertz** — `TX_AUDIO_LPF_FC_HZ` 3039.6 | +| `TXInterpolateBy2` | Fs/8 → Fs/4 | fraction of Fs | +| `TXInterpolateBy4` | Fs/4 → Fs | fraction of Fs | + +The three specified in hertz have to be regenerated on every rate change. The +rest are anti-alias and anti-image filters whose corners are fractions of Fs, and +scaling with the rate is exactly what those should do. + +### Why both scope channels at once + +The exciter output is a complex baseband signal: a 1 kHz microphone tone comes +out as a complex exponential at ±1 kHz, one real sine on each of I and Q, 90° +apart. Reconstructing `I + jQ` from a synchronous capture gives the **two-sided** +spectrum, and with it: + +- the **magnitude response** at `+f`, which is the transmit audio response, and +- the level at `-f`, which is the **opposite-sideband suppression** — the + headline specification of an SSB transmitter. + +Both come out of the same capture, at no extra cost. Two separate single-channel +captures would have no defined phase relationship between them, and suppression +could not be measured at all. + +### Resolving the wiring, and why it takes two captures + +Two unknowns: which scope input is on I, and which side of DC the wanted energy +sits on. Unlike the receive rig they cannot be separated by trying combinations +and seeing which one produces a signal — every combination produces a perfectly +good tone. All that changes is which side of DC it lands on, and one capture +cannot tell "Ch1 on I, upper sideband" from "Ch1 on Q, lower sideband". + +What separates them is the radio's own sideband switch. `SidebandSelection` +inverts I for USB and leaves LSB alone, so commanding USB conjugates the +transmitted signal and moves the tone across DC. Swapping the scope probes +conjugates it too — but nobody rewires the bench between two captures, so the +*change* between LSB and USB isolates the radio's contribution from the wiring's. + +### Scope sample rate + +100 kHz by default, and deliberately **not** a divisor of the radio's 192 kHz +output rate. The exciter DAC leaves residual images near its own sample rate; at +96 ksps an image at `192000 - f` aliases to exactly `-f`, straight onto the mirror +frequency the suppression reading uses, and would cap the measurable suppression. +At 100 ksps the same image lands at `8000 + f`, clear of everything measured. + +## Reading the result + +**The primary criterion is rate invariance.** A corner measured at 192 ksps must +land in the same place at 176.4 ksps. + +The tolerance is **2.5 %**, looser than the receive suite's 1.5 %, and the reason +matters. Both generated transmit stages are 48-tap Kaiser-Bessel windowed sincs, +and a 48-tap design does not scale exactly when its normalised cutoff changes — +the taps are quantised to the same 48 positions at both rates, so the realised +corner lands slightly differently. Evaluating the two tap sets directly gives a +cascade −3 dB corner of 2726 Hz at 24 ksps and 2759 Hz at 22.05 ksps: **+1.2 % on +a correct radio.** `TransmitChain176k.AudioBandwidthHoldsAcrossRates` allows 2 % +for the same reason. The bug this suite exists to catch is still **−8.125 %** +(`176400/192000`), so there is better than a factor of three between correct and +broken. A tolerance tighter than the design's own reproducibility would cry wolf. + +Look at `_summary.png` first: three bars, all of which should sit inside the green +band and nowhere near the dotted −8.125 % line. Then `_passband.png`, where the +two rates' curves should lie on top of each other. + +### What is measured, and what each result is worth + +| Group | Measures | Weight | +|---|---|---| +| `rig` | Wiring order, sideband, quadrature, drive level | Gate: nothing else means anything if this fails | +| `passband` | Composite transmit response; −3 dB high and low corners, ripple | **The result.** High corner is `TXInterpolateBy2Again`; low corner is the equaliser bank's lowest cell | +| `corner` | The cross-rate comparison of those corners | **The headline** | +| `sideband` | Opposite-sideband suppression across the passband | Floor, not rate invariance — see below | +| `alias` | Out-of-band rejection, and fold-back when the audio rate halves | Catches a regression of the old flat decimator table | +| `carrier` | DC residue left by `ED.DCOffsetI/Q` carrier nulling | Diagnostic; a large residue raises every other noise floor | + +## What this measurement cannot do + +Three honest limits, all of which the generated report repeats. + +**Nothing in the transmit chain can be bypassed over CAT.** There is no command +for the transmit equaliser (`ED.equalizerXmt`), and the two generated FIR stages +are unconditional. So every response here is a **composite** of the whole path, +microphone input to exciter output, including the codec's front end. The receive +suite's trick — subtract two captures with a filter engaged and bypassed, so the +analog path cancels exactly — is not available. This costs absolute accuracy, +which is why the absolute tolerances are loose. It costs the rate comparison +nothing: no part of the analog path changes when the sample rate does, so it +divides out of a comparison between rates just as cleanly. + +**Sideband suppression is checked against a floor, not for rate invariance.** The +Hilbert table is not regenerated per rate, and that is correct — a Hilbert +transformer's usable band is a fraction of its sample rate, so one fixed table is +the same design at any rate and its band edges are *meant* to move with Fs. +Requiring the suppression curve to hold still in hertz would fail correct +firmware. What is measured is the Hilbert accuracy, the per-band I/Q amplitude and +phase correction, and any gain difference between the two exciter outputs, lumped +together — from the exciter's terminals they are not separable. + +**A clean fold-back result does not on its own vindicate the decimator.** +`BandEQ` runs *before* `TXDecimateBy2Again` and its highest cell is at 4 kHz, so +it already attenuates an 8 kHz input substantially. A clean result proves nothing +folds into the transmitted audio, which is what matters operationally, but +`TransmitChain176k.DecimatorStopsBeforeTheFoldPoint` is what proves the +decimator's own stopband — it evaluates the tap set at the fold point directly. + +**The transmit equaliser cells are not measured individually**, and deliberately +so. `DSP_FFT.cpp` sets `S_Xmt[i].pCoeffs` and `S_Rec[i].pCoeffs` to the *same* +array, so the transmit cells carry byte-for-byte the coefficients the receive +suite already sweeps. Adding a CAT command to solo them would re-verify one table +through a second biquad instance. They are still exercised here, as part of the +composite passband — the low corner is theirs. + +## When it fails + +| Symptom | Likely cause | +|---|---| +| `rig.sideband_flip` fails: the tone did not change sides between LSB and USB | Only one of Ch1/Ch2 is connected, the radio did not change modulation, or it is not actually transmitting | +| `rig.suppression` reads near 0 dB | The captured pair is real, not complex: one channel missing, or both probes on the same output. A real signal's spectrum is symmetric about DC | +| No tone at all | No shared ground, W1 not on the mic input, the radio did not key (check it is in SSB, not AM/SAM/CW), or the mic gain is at the bottom of its range | +| `rig.drive_level` never reaches the SNR target | Raise `--max-amplitude`, or the radio's mic gain with `--mic-gain 20` | +| Everything reads distorted at any drive | The microphone preamplifier is clipping. Lower `--mic-gain`; the input expects millivolts | +| Levels drift through the run | Something changed the power setting, and with it `TXGain`. Do not touch the front panel | +| Points marked invalid, `clipped` true | Scope range too small or the offset wrong for the exciter's DC bias. Check `--scope-offset` against the reported DC | +| Everything reads −8.125 % | The frozen coefficient tables are back | +| High corner moves 1–2 % | Expected. See the tolerance discussion above | +| Out-of-band rejection reads exactly the noise floor | That is a pass, and the report says so: the true rejection is greater than the rig can see | +| Sideband suppression differs between rates at the band edges | Expected: the Hilbert band scales with Fs by design | + +Do not edit the test in response to a failure — a failure means the radio's +filters are not where they should be, or the rig is not connected as documented. +In particular do not widen `--rate-tol-pct` to make a run pass. + +## Files + +| File | Contents | +|---|---| +| `ad2.py` | Two-channel synchronous record capture, single-channel AWG. Shares the ctypes binding with `filter_hil.ad2` | +| `bandtable.py` | Transmit design constants mirrored from `DSP_FIR.cpp` and `DSP.cpp` | +| `measure.py` | Complex-spectrum metrology: wanted and image levels, suppression, carrier, spurs, corner extraction | +| `tests.py` | The individual tests and the cross-rate comparison | +| `report.py` | Stdout summary and Markdown; document assembly shared with `filter_hil.report` | +| `tx_filter_hil_test.py` | CLI entry point, PTT-safe sequencing, state restore | +| `plot_tx_filter_hil.py` | JSON in, PNGs out; runs without hardware | +| `test_tx_filter_hil.py` | Self-tests for the measurement maths, no hardware | + +Run the self-tests after changing anything in `measure.py` or `tests.py`: + +```bash +./venv/bin/python tx_filter_hil/test_tx_filter_hil.py +``` + +They include a check that the comparison **fails** when handed a simulated +−8.125 % shift, and that it names it as that specific regression rather than as +generic drift. That is what stops the suite quietly passing everything. + +`bandtable.py` mirrors constants from `DSP_FIR.cpp` and `DSP.cpp` by hand. +Nothing detects a firmware value edited without updating it, so re-check that +file when the transmit filter design constants change. `TX_AUDIO_CORNER_3DB_HZ` +and `TX_STOPBAND_*` in particular were derived by evaluating the generated tap +sets, and their derivation is recorded in the comments beside them. diff --git a/code/tools/tx_filter_hil/__init__.py b/code/tools/tx_filter_hil/__init__.py new file mode 100644 index 0000000..b4aae78 --- /dev/null +++ b/code/tools/tx_filter_hil/__init__.py @@ -0,0 +1,8 @@ +"""Hardware-in-the-loop measurement of the Phoenix transmit DSP filters. + +Companion to :mod:`filter_hil`, which does the same job for the receive chain. +The two suites share the CAT plumbing in ``filter_hil.radio`` and the scalar +curve-fitting helpers in ``filter_hil.measure``; everything else differs, because +the transmit chain is measured the other way round - one real tone in at the +microphone, a complex I/Q pair out at the exciter. +""" diff --git a/code/tools/tx_filter_hil/ad2.py b/code/tools/tx_filter_hil/ad2.py new file mode 100644 index 0000000..ddcc8f4 --- /dev/null +++ b/code/tools/tx_filter_hil/ad2.py @@ -0,0 +1,341 @@ +"""Analog Discovery 2 control for the transmit filter HIL suite. + +The receive suite's :mod:`filter_hil.ad2` drives two AWG channels in quadrature +and reads one scope channel. The transmit rig is the mirror image: **one** AWG +channel into the microphone input, and **both** scope channels reading the +exciter's I and Q outputs at the same instant. + +Capturing both channels synchronously is the whole point. The measurement of +interest is the complex signal ``I + jQ``, and its sideband - which side of DC +the transmitted energy sits on - is carried entirely in the phase between the two +channels. Two separate single-channel captures would have no defined phase +relationship, so opposite-sideband suppression could not be measured at all. + +The ctypes binding, the SDK constants and the record-mode idiom are shared with +:mod:`filter_hil.ad2` rather than duplicated; only the configuration and the +capture loop are different. +""" + +from __future__ import annotations + +import atexit +import ctypes +import signal +import time +from dataclasses import dataclass +from datetime import datetime, timezone +from typing import Callable, Optional + +import numpy as np + +from filter_hil.ad2 import (ACQMODE_RECORD, ANALOG_OUT_NODE_CARRIER, + DEFAULT_DWF_PATH, DWF_STATE_ARMED, DWF_STATE_CONFIG, + DWF_STATE_PREFILL, FUNC_SINE, HDWF_NONE, DwfError, + bind_argtypes, dwf_version, last_error, load_dwf) + + +@dataclass(frozen=True) +class TxAd2Config: + """Scope and AWG settings that stay fixed for a whole run. + + ``scope_rate_hz`` deliberately defaults to something that is **not** a + divisor of the radio's 192 kHz output rate. The exciter DAC leaves residual + images around its own sample rate, and at 96 ksps an image at ``192000 - f`` + aliases to exactly ``-f``: straight onto the mirror frequency the sideband + suppression measurement reads. At 100 ksps the same image lands at + ``8000 + f``, harmlessly away from anything being measured. + + ``scope_offset_v`` centres the input window on the exciter output's DC bias, + which sits near +1.6 V on this hardware. Getting it wrong does not clip + quietly - it clips at one extreme of the range and the tone measurement goes + with it. + """ + + scope_rate_hz: float = 100_000.0 + capture_s: float = 0.25 + scope_range_v: float = 5.0 + scope_offset_v: float = 1.6 + awg_offset_v: float = 0.0 + frontend_settle_s: float = 2.0 + dwf_path: str = DEFAULT_DWF_PATH + + +@dataclass +class IqCapture: + """One synchronous block of both scope channels. + + The channels are named for the scope inputs, not for I and Q: which physical + output landed on which input is discovered at run time and is not known when + the capture is taken. + """ + + ch1: np.ndarray + ch2: np.ndarray + sample_rate_hz: float + lost: int + corrupted: int + t_utc: str + + @property + def clean(self) -> bool: + """True when no samples were dropped or flagged corrupt.""" + return self.lost == 0 and self.corrupted == 0 + + def analytic(self, swap: bool = False) -> np.ndarray: + """The complex signal the transmit chain produced, DC removed. + + ``swap`` exchanges the two channels, which conjugates the result and so + mirrors the spectrum about DC. That is exactly the ambiguity introduced by + not knowing which scope input is on I, which is why it is a parameter + here rather than a wiring requirement. + + The DC of each channel is subtracted because the firmware deliberately + puts one there: ``PlayIQData`` adds ``ED.DCOffsetI``/``DCOffsetQ`` to null + the transmitter's carrier. It is a real and interesting quantity, but it + is not part of any filter's response, so it is measured separately by + :meth:`dc` and taken out here. + """ + a = self.ch2 if swap else self.ch1 + b = self.ch1 if swap else self.ch2 + return (a - np.mean(a)) + 1j * (b - np.mean(b)) + + def dc(self) -> tuple[float, float]: + """Mean level of each channel, volts. Carrier nulling lives here.""" + return float(np.mean(self.ch1)), float(np.mean(self.ch2)) + + def peak(self) -> float: + """Largest absolute sample on either channel, volts.""" + if self.ch1.size == 0: + return 0.0 + return float(max(np.max(np.abs(self.ch1)), np.max(np.abs(self.ch2)))) + + def excursion(self, centre_v: float) -> float: + """Largest departure from centre_v on either channel, volts. + + This, not :meth:`peak`, is what decides whether the input clipped. The + AD2's range is peak to peak and sits centred on the configured offset, so + a signal riding on the exciter's +1.6 V bias runs out of window at + ``offset +/- range/2`` - nowhere near ``range`` from zero. + """ + if self.ch1.size == 0: + return 0.0 + return float(max(np.max(np.abs(self.ch1 - centre_v)), + np.max(np.abs(self.ch2 - centre_v)))) + + +class TxAd2: + """Open AD2, drive W1 into the mic input, capture Ch1 and Ch2 together. + + Use as a context manager; the AWG is always silenced on the way out. Unlike + the receive rig this device is not connected to anything that could be + damaged by a stuck output, but a tone left running into the microphone would + be transmitted by the next person to key the radio, so the same cleanup + handlers are installed. + """ + + def __init__(self, cfg: TxAd2Config, log: Callable[[str], None] = print) -> None: + self.cfg = cfg + self.log = log + self.dwf: Optional[ctypes.CDLL] = None + self.hdwf = ctypes.c_int(HDWF_NONE) + self._scope_configured = False + self._prev_sigint = None + self.version = "" + self.captures = 0 + self.dirty_captures = 0 + + # -- lifecycle --------------------------------------------------------- + + def __enter__(self) -> "TxAd2": + self.open() + return self + + def __exit__(self, *exc) -> None: + self.close() + + def open(self) -> None: + """Open the first available device and put it in manual-configure mode.""" + self.dwf = load_dwf(self.cfg.dwf_path) + bind_argtypes(self.dwf) + self.version = dwf_version(self.dwf) + self.log(f"WaveForms SDK {self.version}") + + if self.dwf.FDwfDeviceOpen(ctypes.c_int(-1), ctypes.byref(self.hdwf)) != 1 \ + or self.hdwf.value == HDWF_NONE: + raise DwfError(f"could not open an Analog Discovery: {last_error(self.dwf)}") + + self.dwf.FDwfDeviceAutoConfigureSet(self.hdwf, ctypes.c_int(0)) + + atexit.register(self._emergency_stop) + self._prev_sigint = signal.getsignal(signal.SIGINT) + signal.signal(signal.SIGINT, self._on_sigint) + + def close(self) -> None: + """Silence the AWG and release the device.""" + if self.dwf is None: + return + try: + self.awg_off() + finally: + self.dwf.FDwfDeviceCloseAll() + self.hdwf = ctypes.c_int(HDWF_NONE) + self.dwf = None + atexit.unregister(self._emergency_stop) + if self._prev_sigint is not None: + signal.signal(signal.SIGINT, self._prev_sigint) + self._prev_sigint = None + + def _emergency_stop(self) -> None: + """Last-ditch AWG silence; safe to call more than once.""" + if self.dwf is None or self.hdwf.value == HDWF_NONE: + return + try: + self.dwf.FDwfAnalogOutReset(self.hdwf, ctypes.c_int(-1)) + self.dwf.FDwfDeviceCloseAll() + except Exception: + pass + + def _on_sigint(self, signum, frame): + self.log("\nInterrupted - silencing the AWG.") + self._emergency_stop() + raise KeyboardInterrupt + + # -- scope ------------------------------------------------------------- + + def configure_scope(self) -> None: + """Configure Ch1 and Ch2 for synchronous record-mode capture. + + Both channels take the same range and offset. They are measuring two + halves of one quadrature pair, and a gain difference between them would + appear as an amplitude imbalance - which is indistinguishable from poor + sideband suppression in the radio. + """ + assert self.dwf is not None + d, h = self.dwf, self.hdwf + c_int, c_double = ctypes.c_int, ctypes.c_double + + d.FDwfAnalogInReset(h) + for ch in (0, 1): + c = c_int(ch) + d.FDwfAnalogInChannelEnableSet(h, c, c_int(1)) + d.FDwfAnalogInChannelRangeSet(h, c, c_double(self.cfg.scope_range_v)) + d.FDwfAnalogInChannelOffsetSet(h, c, c_double(self.cfg.scope_offset_v)) + d.FDwfAnalogInAcquisitionModeSet(h, c_int(ACQMODE_RECORD)) + d.FDwfAnalogInFrequencySet(h, c_double(self.cfg.scope_rate_hz)) + d.FDwfAnalogInRecordLengthSet(h, c_double(self.cfg.capture_s)) + d.FDwfAnalogInConfigure(h, c_int(1), c_int(0)) # apply, do not start + + self.log(f"Scope: Ch1+Ch2 @ {self.cfg.scope_rate_hz/1000:.1f} kHz, " + f"{self.cfg.capture_s*1000:.0f} ms, range {self.cfg.scope_range_v} V, " + f"offset {self.cfg.scope_offset_v:+.2f} V") + self.log(f"Waiting {self.cfg.frontend_settle_s:.1f} s for the analog frontend " + f"to settle...") + time.sleep(self.cfg.frontend_settle_s) + self._scope_configured = True + + def capture(self) -> IqCapture: + """Re-arm and stream one block from both channels. + + Both channels are read out at every status poll, with the same sample + offset and the same count, so the two arrays stay sample-aligned. Lost + samples advance the write position on both channels together: a dropout + has to leave a hole rather than shift one channel in time relative to the + other, which would look like a phase error and corrupt every sideband + measurement in the run. + """ + assert self.dwf is not None + if not self._scope_configured: + self.configure_scope() + + d, h = self.dwf, self.hdwf + c_int, c_double = ctypes.c_int, ctypes.c_double + + n_samples = int(round(self.cfg.scope_rate_hz * self.cfg.capture_s)) + buf1 = (ctypes.c_double * n_samples)() + buf2 = (ctypes.c_double * n_samples)() + sts = ctypes.c_byte() + avail, lost, corrupted = c_int(), c_int(), c_int() + total_lost = total_corrupted = 0 + + d.FDwfAnalogInConfigure(h, c_int(0), c_int(1)) # start + + got = 0 + deadline = time.monotonic() + self.cfg.capture_s * 5 + 5.0 + while got < n_samples: + if time.monotonic() > deadline: + raise DwfError("timed out waiting for the scope acquisition") + + if d.FDwfAnalogInStatus(h, c_int(1), ctypes.byref(sts)) != 1: + raise DwfError(f"FDwfAnalogInStatus failed: {last_error(d)}") + + if got == 0 and sts.value in (DWF_STATE_CONFIG, DWF_STATE_PREFILL, + DWF_STATE_ARMED): + continue + + d.FDwfAnalogInStatusRecord(h, ctypes.byref(avail), ctypes.byref(lost), + ctypes.byref(corrupted)) + got += lost.value + total_lost += lost.value + total_corrupted += corrupted.value + + if avail.value == 0: + continue + + take = min(avail.value, n_samples - got) + if take <= 0: + break + offset = ctypes.sizeof(ctypes.c_double) * got + d.FDwfAnalogInStatusData(h, c_int(0), ctypes.byref(buf1, offset), c_int(take)) + d.FDwfAnalogInStatusData(h, c_int(1), ctypes.byref(buf2, offset), c_int(take)) + got += take + + self.captures += 1 + if total_lost or total_corrupted: + self.dirty_captures += 1 + + return IqCapture( + ch1=np.frombuffer(buf1, dtype=np.float64).copy(), + ch2=np.frombuffer(buf2, dtype=np.float64).copy(), + sample_rate_hz=self.cfg.scope_rate_hz, + lost=total_lost, + corrupted=total_corrupted, + t_utc=datetime.now(timezone.utc).isoformat(timespec="seconds"), + ) + + def capture_after(self, settle_s: float) -> IqCapture: + """Wait for the transmit chain to settle on the new tone, then capture.""" + time.sleep(settle_s) + return self.capture() + + # -- AWG --------------------------------------------------------------- + + def set_tone(self, f_hz: float, amplitude_v: float) -> None: + """Drive W1 with a sine into the microphone input. + + Only W1 is used. The transmit chain is fed from the microphone's left + channel alone - ``TransmitProcessing`` overwrites Q with a copy of I + immediately after the equaliser - so a second channel would contribute + nothing. + """ + assert self.dwf is not None + d, h = self.dwf, self.hdwf + c_int, c_double = ctypes.c_int, ctypes.c_double + ch, node = c_int(0), c_int(ANALOG_OUT_NODE_CARRIER) + + d.FDwfAnalogOutNodeEnableSet(h, ch, node, c_int(1)) + d.FDwfAnalogOutNodeFunctionSet(h, ch, node, ctypes.c_ubyte(FUNC_SINE)) + d.FDwfAnalogOutNodeFrequencySet(h, ch, node, c_double(f_hz)) + d.FDwfAnalogOutNodeAmplitudeSet(h, ch, node, c_double(amplitude_v)) + d.FDwfAnalogOutNodeOffsetSet(h, ch, node, c_double(self.cfg.awg_offset_v)) + d.FDwfAnalogOutNodePhaseSet(h, ch, node, c_double(0.0)) + d.FDwfAnalogOutRunSet(h, ch, c_double(0.0)) # run continuously + d.FDwfAnalogOutRepeatSet(h, ch, c_int(0)) + # 1 = start. Configure mode 3 applies to an already-running channel and + # would silently leave a stopped one stopped. + d.FDwfAnalogOutConfigure(h, ch, c_int(1)) + + def awg_off(self) -> None: + """Stop driving the microphone input.""" + if self.dwf is None or self.hdwf.value == HDWF_NONE: + return + self.dwf.FDwfAnalogOutReset(self.hdwf, ctypes.c_int(-1)) diff --git a/code/tools/tx_filter_hil/bandtable.py b/code/tools/tx_filter_hil/bandtable.py new file mode 100644 index 0000000..d465435 --- /dev/null +++ b/code/tools/tx_filter_hil/bandtable.py @@ -0,0 +1,198 @@ +"""Transmit-chain design constants mirrored from the firmware. + +Copied by hand from the sources named against each block. ``test_tx_filter_hil.py`` +checks the internal consistency of what is here, but nothing can detect a value +edited in the firmware and not here, so re-check this file whenever the transmit +filter design constants change. + +The transmit chain, from ``TransmitProcessing`` in ``DSP.cpp``: + + mic -> TXDecimateBy4 Fs -> Fs/4 anti-alias, fraction of Fs + -> TXDecimateBy2 Fs/4 -> Fs/8 anti-alias, fraction of Fs + -> BandEQ(TX) Fs/8 14 bandpass cells, Hz-specified + -> TXGain power-dependent scalar + -> Q := I chain is mono from here + -> TXDecimateBy2Again Fs/8 -> Fs/16 TX_DECIMATE3_FC_HZ, Hz-specified + -> HilbertTransform Fs/16 fixed 100-tap table + -> TXInterpolateBy2Again Fs/16 -> Fs/8 TX_AUDIO_LPF_FC_HZ, Hz-specified + -> ApplyIQCorrection, SidebandSelection + -> TXInterpolateBy2 Fs/8 -> Fs/4 anti-image, fraction of Fs + -> TXInterpolateBy4 Fs/4 -> Fs anti-image, fraction of Fs + -> exciter I/Q DAC + +Three of those stages are specified in **hertz** and so have to be regenerated +when the sample rate changes: the equaliser cells, ``TX_DECIMATE3_FC_HZ`` and +``TX_AUDIO_LPF_FC_HZ``. Everything else is specified as a fraction of Fs and is +*meant* to scale with the rate. That distinction is what this suite tests. +""" + +from __future__ import annotations + +# --- Sample rates ---------------------------------------------------------- +# Globals.cpp SR[] and the SAMPLE_RATE_* macros in SDT.h. Only these two are +# reachable from the front panel menu or the SR CAT command. +SAMPLE_RATES_HZ = (192000, 176400) + +#: ReceiveFilterConfig::DF. The transmit chain decimates to the same audio rate +#: the receive chain uses, and BandEQ runs there. +AUDIO_DECIMATION = 8 + +#: Further decimation into the Hilbert stage (TXDecimateBy2Again). +HILBERT_DECIMATION = 16 + +#: The ratio the frozen-table bug used to scale every Hz-specified corner by. +LEGACY_RATE_RATIO = 176400.0 / 192000.0 # 0.91875 +LEGACY_DELTA_PCT = 100.0 * (LEGACY_RATE_RATIO - 1.0) # -8.125 + + +def audio_rate_hz(sample_rate_hz: float) -> float: + """Rate the equaliser and the transmit audio filters run at.""" + return sample_rate_hz / AUDIO_DECIMATION + + +def hilbert_rate_hz(sample_rate_hz: float) -> float: + """Rate the Hilbert transform runs at: 12 ksps at 192 ksps.""" + return sample_rate_hz / HILBERT_DECIMATION + + +def fold_frequency_hz(sample_rate_hz: float) -> float: + """Input frequency that maps to DC when TXDecimateBy2Again folds. + + ``TXDecimateBy2Again`` halves the audio rate, so its output Nyquist is + ``audio_rate/4`` and an audio-rate component at ``f`` above that folds back + to ``|audio_rate/2 - f|``. This returns that ``audio_rate/2``: 12 kHz at + 192 ksps, 11.025 kHz at 176.4 ksps. + """ + return audio_rate_hz(sample_rate_hz) / 2.0 + + +def nyquist_after_fold_hz(sample_rate_hz: float) -> float: + """Highest frequency that survives the decimation without folding. + + 6 kHz at 192 ksps, 5.5125 kHz at 176.4 ksps. ``TransmitChain176k. + DecimatorStopsBeforeTheFoldPoint`` requires the decimator to be 60 dB down + here. + """ + return audio_rate_hz(sample_rate_hz) / 4.0 + + +def alias_of_hz(f_in_hz: float, sample_rate_hz: float) -> float: + """Where an input at f_in_hz lands after the decimate-by-2 folds it. + + Returns f_in_hz itself when it is below the fold point - nothing happens to + it there. + """ + fold = fold_frequency_hz(sample_rate_hz) + if f_in_hz <= fold / 2.0: + return float(f_in_hz) + return float(abs(fold - f_in_hz)) + + +# --- Transmit audio bandwidth ---------------------------------------------- +# DSP_FIR.cpp. CalcFIRCoeffs takes its fc argument as the -6 dB point, so these +# are not the -3 dB figures the stages are described by. + +#: -6 dB corner of TXInterpolateBy2Again's filter (FIR_int3_12ksps_48tap_2k7). +#: This is the stage that sets the transmitted audio bandwidth. +TX_AUDIO_LPF_FC_HZ = 3039.6 + +#: -6 dB corner of TXDecimateBy2Again's filter (coeffs12K_8K_LPF_FIR). Its job +#: is to stop anything folding when the rate halves; it sits above the audio +#: bandwidth so it costs no wanted signal. +TX_DECIMATE3_FC_HZ = 3500.0 + +#: Taps in each of the two generated transmit FIR stages. +GENERATED_FIR_TAPS = 48 + +#: -3 dB corner of the transmit audio path, measured offline through the real +#: stage functions by ``TransmitChain176k.AudioBandwidthHoldsAcrossRates`` in +#: code/test/TransmitChain_test.cpp, which asserts 2760 +/- 150 Hz. +#: +#: That measurement covers TXDecimateBy2Again, the Hilbert transform and +#: TXInterpolateBy2Again only. On real hardware the equaliser bank is also in +#: the path and cannot be taken out over CAT, so the measured corner can sit a +#: little below this. The absolute tolerance is loose for that reason; the rate +#: comparison is not, because the equaliser is regenerated per rate too. +TX_AUDIO_CORNER_3DB_HZ = 2760.0 + +#: How far the -3 dB corner moves between the two rates on a *correct* radio. +#: +#: Not zero, and this is the one number in this file that is easy to get wrong. +#: Both stages are 48-tap Kaiser-Bessel windowed sincs, and a 48-tap design does +#: not scale exactly when its normalised cutoff changes: the tap set is quantised +#: to the same 48 positions at both rates, so the realised corner lands in a +#: slightly different place. Evaluating the two generated tap sets directly +#: (Kaiser beta from a 90 dB stopband, cutoffs 3500 and 3039.6 Hz) gives a +#: cascade -3 dB corner of 2726 Hz at 24 ksps and 2759 Hz at 22.05 ksps: +1.2 %. +#: +#: ``TransmitChain176k.AudioBandwidthHoldsAcrossRates`` allows 2 % for the same +#: reason. A rate tolerance tighter than this is a tolerance on the design's own +#: reproducibility, not on the firmware, and would cry wolf. The bug being hunted +#: is still -8.125 %, so there is better than a factor of three in hand. +TX_AUDIO_CORNER_RATE_SPREAD_PCT = 1.2 + +#: Where the transmit audio filters are genuinely in their stopband. +#: +#: From the same tap-set evaluation, the cascade reaches -30 dB at 3.68 kHz, +#: -40 dB at 3.84 kHz and -52 dB by 4.0 kHz, beyond which it falls off a cliff +#: (better than 90 dB above 4.5 kHz). Below this frequency the response is on the +#: transition skirt, where demanding tens of decibels of rejection would be +#: demanding the wrong thing - at 3.45 kHz the cascade is only 20 dB down, and +#: correctly so. +TX_STOPBAND_FROM_HZ = 4000.0 + +#: Cascade attenuation predicted at TX_STOPBAND_FROM_HZ, worse rate. The +#: out-of-band check is set well inside this so it has margin against a +#: regression without running into the rig's own noise floor. +TX_STOPBAND_PREDICTED_DB = 52.0 + +#: Nominal -3 dB low corner of the transmit audio path. +#: +#: Nothing in the chain is a deliberate high pass. What rolls the bottom off is +#: the equaliser bank: ``BandEQ`` replaces the audio with the sum of 14 bandpass +#: cells, and the lowest sits at 198.4 Hz, so there is no reconstruction below +#: it. The microphone input's own AC coupling is in series with that and cannot +#: be separated, so this figure is a sanity bound rather than a specification. +TX_AUDIO_LOW_CORNER_HZ = 200.0 + + +# --- Equaliser ------------------------------------------------------------- +# DSP_FIR.cpp EQ_BAND_FC_HZ. The transmit and receive equalisers share one set +# of coefficient tables - DSP_FFT.cpp sets S_Xmt[i].pCoeffs and S_Rec[i].pCoeffs +# to the same array - and both run at the audio rate. The cells are summed with +# alternating signs, which reconstructs a roughly flat response from the lowest +# centre to the highest when every cell is at 100. +EQ_CELL_COUNT = 14 +EQ_CENTRE_HZ = (198.425, 250.0, 314.98, 400.0, 500.0, 630.0, 793.0, + 1000.0, 1259.0, 1587.0, 2000.0, 2500.0, 3150.0, 4000.0) + + +# --- Hilbert transform ----------------------------------------------------- +# DSP_FIR.cpp FIR_Hilbert_coeffs_45 / _neg_45, 100 taps, labelled "12K SPS +# BW 5400". This table is *not* regenerated per rate, and that is correct: a +# Hilbert transformer's usable band is a fraction of its sample rate, so a fixed +# table is the same design at any rate. Its band edges therefore move with Fs by +# design - which is why the sideband suppression checks below are expressed +# against a floor rather than against rate invariance in hertz. +HILBERT_TAPS = 100 +HILBERT_NOMINAL_RATE_HZ = 12000.0 +HILBERT_NOMINAL_BW_HZ = 5400.0 + + +def hilbert_band_hz(sample_rate_hz: float) -> tuple[float, float]: + """Approximate band over which the Hilbert pair holds quadrature. + + Scaled from the table's nominal 5.4 kHz bandwidth at 12 ksps. A Hilbert + transformer is symmetric about the quarter-rate point, so the lower edge sits + as far above DC as the upper edge sits below Nyquist. + """ + fs = hilbert_rate_hz(sample_rate_hz) + half_bw = 0.5 * HILBERT_NOMINAL_BW_HZ * fs / HILBERT_NOMINAL_RATE_HZ + centre = fs / 4.0 + return centre - half_bw, centre + half_bw + + +# --- Modulation ------------------------------------------------------------ +# ModulationType in SDT.h. SidebandSelection() inverts I for USB and leaves LSB +# alone, so these two are the only modulations the transmit chain distinguishes. +MOD_USB, MOD_LSB = 0, 1 diff --git a/code/tools/tx_filter_hil/measure.py b/code/tools/tx_filter_hil/measure.py new file mode 100644 index 0000000..8ad7bf5 --- /dev/null +++ b/code/tools/tx_filter_hil/measure.py @@ -0,0 +1,364 @@ +"""Metrology for the transmit filter HIL suite. + +The receive suite measures a real audio signal, where a tone at ``f`` and one at +``-f`` are the same thing. The transmit suite measures the complex pair ``I + jQ`` +coming out of the exciter, where they are not: a single-sideband transmitter is +*supposed* to put all its energy on one side of DC, and how much leaks onto the +other side is the headline specification of the whole chain. + +So everything here works on the two-sided spectrum, and every level carries a +sign. ``+f`` and ``-f`` are called *wanted* and *image*; which one is which +depends on the selected sideband and on which scope input landed on I, both of +which are discovered at run time. + +Scalar curve fitting that does not care about the signal being complex - grids, +crossings, percentage deltas - is imported from :mod:`filter_hil.measure` rather +than reimplemented, so both suites share one set of well-exercised helpers. +""" + +from __future__ import annotations + +import math +from dataclasses import dataclass +from typing import Optional, Sequence + +import numpy as np + +from filter_hil.measure import (geom_grid, interpolate_crossing, # noqa: F401 + parabolic_peak, pct_delta, stats) + +from .ad2 import IqCapture + +#: Levels below this are the float noise of the measurement, not signal. +FLOOR_DBV = -140.0 + + +def to_db(x: float) -> float: + """Amplitude ratio to decibels, floored so a silent bin does not diverge.""" + return 20.0 * math.log10(max(float(x), 1e-15)) + + +# --- spectra --------------------------------------------------------------- + +def complex_spectrum(z: np.ndarray, fs_hz: float) -> tuple[np.ndarray, np.ndarray]: + """Two-sided spectrum of a complex signal, in volts peak. + + Returns ``(freqs_hz, amplitude)`` with the frequencies sorted ascending from + ``-fs/2``, so negative frequencies are addressable directly rather than + through a wrapped index. + + Scaled so that ``A * exp(2j*pi*f*t)`` reads ``A`` at ``f``. Note the absence + of the factor of two that :func:`filter_hil.measure.spectrum_dbv` applies: a + real cosine splits its amplitude between two conjugate lines and needs them + put back together, a complex exponential has only the one line. + """ + n = len(z) + if n < 16: + return np.zeros(0), np.zeros(0) + ac = z - np.mean(z) + window = np.hanning(n) + coherent_gain = window.sum() / n + spec = np.fft.fftshift(np.fft.fft(ac * window)) / (n * coherent_gain) + freqs = np.fft.fftshift(np.fft.fftfreq(n, d=1.0 / fs_hz)) + return freqs, np.abs(spec) + + +def correlate_complex(z: np.ndarray, fs_hz: float, f_hz: float) -> float: + """Amplitude of a known-frequency component of a complex signal. + + Reading the tallest FFT bin costs up to 1.4 dB when the component falls + between bins. That cancels when two captures are compared at the same + frequency, but not when a ratio between two *different* frequencies is + wanted - which is exactly what sideband suppression is. So the wanted and the + image are both read this way. + + ``f_hz`` is signed. + """ + n = len(z) + if n < 16: + return 0.0 + ac = z - np.mean(z) + window = np.hanning(n) + ref = np.exp(-2j * np.pi * f_hz * np.arange(n) / fs_hz) + return float(np.abs(np.sum(ac * window * ref)) / window.sum()) + + +def locate_line(freqs: np.ndarray, mag: np.ndarray, f0_hz: float, + bw_hz: float) -> tuple[float, float]: + """Interpolated frequency and amplitude of the strongest line near f0_hz. + + A window rather than a single bin: the radio's audio frequency differs from + the requested one by tens of ppm - the Teensy synthesises its I2S clock with a + fractional divider - and a Hann window spreads a line over several bins. + """ + if freqs.size == 0: + return float(f0_hz), 0.0 + sel = np.where(np.abs(freqs - f0_hz) <= bw_hz)[0] + if sel.size == 0: + return float(f0_hz), 0.0 + local = int(sel[np.argmax(mag[sel])]) + delta = parabolic_peak(mag, local) + df = freqs[1] - freqs[0] + return float(freqs[local] + delta * df), float(mag[local]) + + +def dominant_line(cap: IqCapture, swap: bool, f_min_hz: float = 100.0, + f_max_hz: Optional[float] = None) -> tuple[float, float]: + """Signed frequency and amplitude of the strongest line in a capture. + + Used by the wiring detection, which has to find where the transmitted energy + landed rather than look where it was expected. ``f_min_hz`` excludes the + carrier-nulling residue around DC, which is real signal but not the tone. + """ + freqs, mag = complex_spectrum(cap.analytic(swap), cap.sample_rate_hz) + if freqs.size == 0: + return 0.0, 0.0 + hi = f_max_hz if f_max_hz is not None else cap.sample_rate_hz / 2.0 + sel = np.where((np.abs(freqs) >= f_min_hz) & (np.abs(freqs) <= hi))[0] + if sel.size == 0: + return 0.0, 0.0 + idx = int(sel[np.argmax(mag[sel])]) + df = freqs[1] - freqs[0] + return float(freqs[idx] + parabolic_peak(mag, idx) * df), float(mag[idx]) + + +# --- one measured point ---------------------------------------------------- + +@dataclass +class IqMeasurement: + """One tone measured out of one synchronous I/Q capture.""" + + f_target_hz: float # audio frequency asked of the AWG + f_measured_hz: float # signed frequency the energy actually landed on + wanted_v: float # amplitude on the wanted side of DC + image_v: float # amplitude on the other side + level_dbv: float # wanted, in dBV + suppression_db: float # wanted over image, positive is good + carrier_dbc: float # DC residue relative to the wanted tone + thd_db: float # harmonics of the wanted tone, relative to it + snr_db: float + dc_ch1_v: float + dc_ch2_v: float + peak_v: float + clipped: bool + lost: int + corrupted: int + valid: bool + reason: str = "" + + +def measure_iq_tone(cap: IqCapture, f_audio_hz: float, *, swap: bool, + sideband_sign: int, scope_range_v: float, + scope_offset_v: float = 0.0, clip_margin: float = 0.90, + search_bw_hz: float = 60.0, n_harmonics: int = 5, + min_snr_db: float = 20.0, max_thd_db: float = -30.0, + thd_invalidates: bool = False) -> IqMeasurement: + """Measure the transmitted tone, its image, and whether to trust the result. + + ``sideband_sign`` says which side of DC the wanted energy is on once ``swap`` + has been applied; both come from the wiring detection. The image is read at + the exact mirror frequency of where the wanted line was *measured*, not at + the mirror of where it was asked for, so a few tens of ppm of clock error do + not bleed the skirt of the wanted line into the image reading. + + A point is invalid when the capture dropped samples, when the scope input + clipped, or when the tone is buried. Invalid points are excluded from fits + rather than dragging them off. + + ``thd_db`` is reported but by default does not invalidate a point: a little + distortion at 2f does not corrupt the level measured at f. Auto-levelling + passes ``thd_invalidates=True``, because there it is the signal that the + microphone input has been driven too hard. + """ + fs = cap.sample_rate_hz + z = cap.analytic(swap) + freqs, mag = complex_spectrum(z, fs) + + sign = 1 if sideband_sign >= 0 else -1 + f_measured, _ = locate_line(freqs, mag, sign * abs(f_audio_hz), search_bw_hz) + + wanted = correlate_complex(z, fs, f_measured) + image = correlate_complex(z, fs, -f_measured) + + dc1, dc2 = cap.dc() + # The exciter's DC bias is a property of the analog output stage; what the + # firmware controls is the *difference* the carrier-nulling offsets add on + # top of the scope's own centring. Reported relative to the tone, which is + # how carrier suppression is specified. + carrier_v = math.hypot(dc1 - scope_offset_v, dc2 - scope_offset_v) + peak = cap.peak() + + # Noise: everything outside the wanted line, its image, its harmonics and the + # region around DC. The DC exclusion has to be generous - the carrier residue + # is not a single bin once the Hann window has spread it. + df = float(freqs[1] - freqs[0]) if freqs.size > 1 else 1.0 + guard = max(search_bw_hz, 3 * df) + mask = np.abs(freqs) > max(30.0, 3 * df) + mask &= np.abs(freqs - f_measured) > guard + mask &= np.abs(freqs + f_measured) > guard + for k in range(2, n_harmonics + 1): + for fk in (k * f_measured, -k * f_measured): + if abs(fk) < fs / 2: + mask &= np.abs(freqs - fk) > guard + noise_power = float(np.sum(mag[mask] ** 2)) + tone_power = wanted ** 2 + snr = (10.0 * math.log10(tone_power / noise_power) + if noise_power > 0 and tone_power > 0 else -99.0) + + # Harmonic distortion. Harmonics of a single-sideband tone land on the same + # side of DC as the tone itself, so only that side is summed. + harm_power = 0.0 + for k in range(2, n_harmonics + 1): + fk = k * f_measured + if abs(fk) < fs / 2: + _, hk = locate_line(freqs, mag, fk, guard) + harm_power += hk ** 2 + thd = (10.0 * math.log10(harm_power / tone_power) + if tone_power > 0 and harm_power > 0 else -99.0) + + suppression = to_db(wanted) - to_db(image) + carrier_dbc = to_db(carrier_v) - to_db(wanted) + + # The AD2's range is peak to peak and centred on the configured offset, so + # the window is offset +/- range/2 and the clip test is against half the + # range, measured from the window centre rather than from zero. + excursion = cap.excursion(scope_offset_v) + clipped = excursion >= clip_margin * 0.5 * scope_range_v + + reasons = [] + if cap.lost or cap.corrupted: + reasons.append(f"capture dropped {cap.lost} lost / {cap.corrupted} " + f"corrupted samples") + if clipped: + reasons.append(f"excursion {excursion:.3f} V from the {scope_offset_v:+.2f} V " + f"centre exceeds {clip_margin:.0%} of the " + f"{0.5*scope_range_v:.2f} V half-range") + if snr < min_snr_db: + reasons.append(f"SNR {snr:.1f} dB below {min_snr_db:.1f} dB") + if thd_invalidates and thd > max_thd_db: + reasons.append(f"THD {thd:.1f} dB above {max_thd_db:.1f} dB") + + return IqMeasurement( + f_target_hz=float(f_audio_hz), + f_measured_hz=float(f_measured), + wanted_v=wanted, + image_v=image, + level_dbv=to_db(wanted), + suppression_db=suppression, + carrier_dbc=carrier_dbc, + thd_db=thd, + snr_db=snr, + dc_ch1_v=dc1, + dc_ch2_v=dc2, + peak_v=peak, + clipped=clipped, + lost=cap.lost, + corrupted=cap.corrupted, + valid=not reasons, + reason="; ".join(reasons), + ) + + +def spur_level_dbc(cap: IqCapture, swap: bool, f_spur_hz: float, + reference_v: float, search_bw_hz: float = 60.0) -> float: + """Level at a spurious frequency, relative to a passband reference. + + Both signs of ``f_spur_hz`` are examined and the larger returned. A fold-back + product's sideband is not predictable: the decimator folds it before the + Hilbert transform decides which side of DC things end up on, so an alias can + emerge on either side. Looking only at the wanted side would under-report it. + """ + z = cap.analytic(swap) + freqs, mag = complex_spectrum(z, cap.sample_rate_hz) + if freqs.size == 0 or reference_v <= 0.0: + return float("nan") + _, hi_pos = locate_line(freqs, mag, abs(f_spur_hz), search_bw_hz) + _, hi_neg = locate_line(freqs, mag, -abs(f_spur_hz), search_bw_hz) + return to_db(max(hi_pos, hi_neg)) - to_db(reference_v) + + +# --- curve features ------------------------------------------------------- + +def passband_reference_db(freqs: Sequence[float], levels_db: Sequence[float], + f_lo_hz: float, f_hi_hz: float) -> float: + """Passband level of a sweep: the median inside a known-flat window. + + A median rather than a mean or a maximum. The transmit passband is the sum of + 14 equaliser cells and is not perfectly smooth, and a single noisy point near + the top would drag a maximum up and move every corner derived from it. + """ + f = np.asarray(freqs, dtype=float) + y = np.asarray(levels_db, dtype=float) + sel = np.where((f >= f_lo_hz) & (f <= f_hi_hz) & np.isfinite(y))[0] + if sel.size == 0: + return float("nan") + return float(np.median(y[sel])) + + +def corner_from_sweep(freqs: Sequence[float], levels_db: Sequence[float], + target_db: float, *, side: str, + from_hz: float) -> float: + """Frequency at which a sweep crosses target_db, walking away from from_hz. + + ``side='high'`` walks upwards from ``from_hz`` and returns the first crossing; + ``side='low'`` walks downwards. Interpolates linearly in (Hz, dB) between the + two points that straddle the crossing. + + Walking outwards from inside the passband rather than scanning the whole + sweep matters: the response comes back up out of the stopband in places - the + equaliser's reconstruction is not monotonic far from the passband, and fold-back + products land wherever they land - so a global search can return a crossing + on the far side of a stopband ripple. + """ + f = np.asarray(freqs, dtype=float) + y = np.asarray(levels_db, dtype=float) + keep = np.isfinite(f) & np.isfinite(y) + f, y = f[keep], y[keep] + if f.size < 2: + return float("nan") + order = np.argsort(f) + f, y = f[order], y[order] + + start = int(np.argmin(np.abs(f - from_hz))) + if side == "high": + indices = range(start, f.size - 1) + step = 1 + elif side == "low": + indices = range(start, 0, -1) + step = -1 + else: + raise ValueError(f"side must be 'high' or 'low', not {side!r}") + + for i in indices: + j = i + step + if y[i] >= target_db >= y[j]: + return interpolate_crossing(f[i], y[i], f[j], y[j], target_db) + return float("nan") + + +def sweep_ripple_db(freqs: Sequence[float], levels_db: Sequence[float], + f_lo_hz: float, f_hi_hz: float) -> float: + """Peak-to-peak variation of a sweep inside a window.""" + f = np.asarray(freqs, dtype=float) + y = np.asarray(levels_db, dtype=float) + sel = np.where((f >= f_lo_hz) & (f <= f_hi_hz) & np.isfinite(y))[0] + if sel.size < 2: + return float("nan") + return float(np.max(y[sel]) - np.min(y[sel])) + + +def worst_in_band(freqs: Sequence[float], values_db: Sequence[float], + f_lo_hz: float, f_hi_hz: float, + best: bool = False) -> tuple[float, float]: + """The (frequency, value) of the worst - or best - point inside a window. + + Used for sideband suppression, where the number that matters is the worst + case across the passband rather than an average of it. + """ + f = np.asarray(freqs, dtype=float) + y = np.asarray(values_db, dtype=float) + sel = np.where((f >= f_lo_hz) & (f <= f_hi_hz) & np.isfinite(y))[0] + if sel.size == 0: + return float("nan"), float("nan") + idx = int(sel[np.argmax(y[sel])]) if best else int(sel[np.argmin(y[sel])]) + return float(f[idx]), float(y[idx]) diff --git a/code/tools/tx_filter_hil/plot_tx_filter_hil.py b/code/tools/tx_filter_hil/plot_tx_filter_hil.py new file mode 100644 index 0000000..944f4b8 --- /dev/null +++ b/code/tools/tx_filter_hil/plot_tx_filter_hil.py @@ -0,0 +1,317 @@ +#!/usr/bin/env python3 +"""Figures for the transmit filter HIL suite. JSON in, PNGs out. + +Runs without hardware, so a result saved months ago can be redrawn after the +plotting changes: + + python3 plot_tx_filter_hil.py results/tx_filter_hil_20260729_120000.json + +Every figure overlays the sample rates on one set of axes. That is deliberate: +the question these plots answer is whether two curves lie on top of each other, +and side-by-side panels make that the reader's job instead of the plot's. +""" + +from __future__ import annotations + +import json +import os +import sys +from typing import Sequence + +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt # noqa: E402 +import numpy as np # noqa: E402 + +if __package__ in (None, ""): + sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + from tx_filter_hil import bandtable as bt +else: + from . import bandtable as bt + +#: One colour per rate, assigned in descending rate order so 192k is always +#: the same colour across every figure and every run. +RATE_COLOURS = ("#1f77b4", "#d62728", "#2ca02c", "#ff7f0e") + + +def _rates(doc: dict) -> list: + return sorted(doc.get("rates", {}), key=lambda r: -int(r)) + + +def _colour(i: int) -> str: + return RATE_COLOURS[i % len(RATE_COLOURS)] + + +def _label(rate: str) -> str: + return f"{int(rate)/1000:.1f} ksps" + + +def _finish(fig, path: str) -> str: + fig.tight_layout() + os.makedirs(os.path.dirname(os.path.abspath(path)), exist_ok=True) + fig.savefig(path, dpi=130) + plt.close(fig) + return path + + +def _valid_xy(points: Sequence[dict], key: str) -> tuple[np.ndarray, np.ndarray]: + xs, ys = [], [] + for p in points: + y = p.get(key) + if y is not None and p.get("valid", True): + xs.append(p["f_audio_hz"]) + ys.append(y) + return np.asarray(xs, dtype=float), np.asarray(ys, dtype=float) + + +# --- figures --------------------------------------------------------------- + +def plot_passband(doc: dict, path: str) -> str: + """The headline figure: normalised transmit response at every rate. + + Normalised to each rate's own passband reference, because the absolute level + depends on the transmit gain and says nothing about the filters. The dotted + line marks where the high corner would sit if the coefficient tables were + frozen again - the two solid curves should be nowhere near it. + """ + fig, ax = plt.subplots(figsize=(9, 5.5)) + rates = _rates(doc) + + for i, r in enumerate(rates): + pb = doc["rates"][r].get("passband", {}) + if not pb: + continue + f, level = _valid_xy(pb.get("points", []), "level_dbv") + ref = pb.get("reference_dbv") + if f.size == 0 or ref is None: + continue + ax.semilogx(f, level - ref, "o-", ms=3, lw=1.3, color=_colour(i), + label=f"{_label(r)} (-3 dB at " + f"{pb.get('corner_hi_3db_hz', float('nan')):.0f} Hz)") + + base = doc["rates"].get(rates[0], {}).get("passband", {}) if rates else {} + corner = base.get("corner_hi_3db_hz") + if corner: + ax.axvline(corner, color=_colour(0), ls=":", lw=1, alpha=0.6) + broken = corner * bt.LEGACY_RATE_RATIO + ax.axvline(broken, color="k", ls=":", lw=1.4, + label=f"where frozen tables would put it ({broken:.0f} Hz, " + f"{bt.LEGACY_DELTA_PCT:.2f}%)") + + ax.axhline(-3.0, color="grey", ls="--", lw=0.8) + ax.text(105, -2.7, "-3 dB", color="grey", fontsize=8) + window = base.get("passband_window_hz") + if window: + ax.axvspan(window[0], window[1], color="grey", alpha=0.08) + ax.text(np.sqrt(window[0] * window[1]), 2.0, "reference window", + ha="center", fontsize=8, color="grey") + + ax.set_xlabel("microphone frequency (Hz)") + ax.set_ylabel("transmit response (dB, normalised to passband)") + ax.set_title("Transmit audio passband, exciter I/Q output") + ax.set_ylim(-45, 5) + ax.grid(True, which="both", alpha=0.25) + ax.legend(fontsize=8, loc="lower left") + return _finish(fig, path) + + +def plot_sideband(doc: dict, path: str) -> str: + """Opposite-sideband suppression against frequency. + + Checked against a floor rather than for rate invariance: the Hilbert table is + not regenerated per rate and its usable band is *meant* to scale with Fs, so + the two curves are expected to differ slightly at the edges. + """ + fig, ax = plt.subplots(figsize=(9, 5)) + rates = _rates(doc) + floor = None + + for i, r in enumerate(rates): + sb = doc["rates"][r].get("sideband_suppression", {}) + pts = sb.get("points", []) + if not pts: + continue + f = np.asarray([p["f_audio_hz"] for p in pts], dtype=float) + y = np.asarray([p["suppression_db"] if p["suppression_db"] is not None + else np.nan for p in pts], dtype=float) + ax.semilogx(f, y, "o-", ms=3, lw=1.3, color=_colour(i), + label=f"{_label(r)} (worst " + f"{sb.get('worst_db', float('nan')):.1f} dB)") + band = sb.get("hilbert_band_hz") + if band: + ax.axvline(band[0], color=_colour(i), ls=":", lw=0.9, alpha=0.5) + + for c in doc.get("checks", []): + if c["id"] == "sideband.worst" and c["limit"] is not None: + floor = -c["limit"] if c["limit"] < 0 else c["limit"] + if floor is not None: + ax.axhline(floor, color="k", ls="--", lw=1.0, + label=f"required floor ({floor:.0f} dB)") + + ax.set_xlabel("microphone frequency (Hz)") + ax.set_ylabel("wanted over image (dB)") + ax.set_title("Opposite-sideband suppression\n" + "dotted verticals: lower edge of the Hilbert transform's band, " + "which scales with Fs by design") + ax.grid(True, which="both", alpha=0.25) + ax.legend(fontsize=8, loc="lower right") + return _finish(fig, path) + + +def plot_alias(doc: dict, path: str) -> str: + """Out-of-band rejection and any fold-back products. + + The fold point moves with the sample rate - it is a quarter of the audio + rate - so the two rates are probed over the same input frequencies but their + products land in different places. Both are drawn against the input + frequency, with the fold point marked per rate. + """ + fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(9, 7), sharex=True) + rates = _rates(doc) + drew_fold = False + + # The fold point and the noise floor go in the legend rather than as text on + # the axes: they are per-rate, and two rates' annotations land close enough + # together to overprint each other. + for i, r in enumerate(rates): + al = doc["rates"][r].get("alias", {}) + pts = al.get("points", []) + if not pts: + continue + f = np.asarray([p["f_audio_hz"] for p in pts], dtype=float) + direct = np.asarray([p["direct_dbc"] if p["direct_dbc"] is not None + else np.nan for p in pts], dtype=float) + nyq = al.get("nyquist_after_fold_hz") + floor = al.get("noise_floor_dbc") + + tag = _label(r) + if nyq: + tag += f", fold {nyq:.0f} Hz" + if floor is not None: + tag += f", floor {floor:.0f} dBc" + + if np.any(np.isfinite(direct)): + ax1.plot(f, direct, "o-", ms=3, lw=1.3, color=_colour(i), label=tag) + + fold = np.asarray([p["fold_dbc"] if p.get("fold_dbc") is not None + else np.nan for p in pts], dtype=float) + if np.any(np.isfinite(fold)): + ax2.plot(f, fold, "s-", ms=3, lw=1.3, color=_colour(i), label=tag) + drew_fold = True + + if nyq: + for ax in (ax1, ax2): + ax.axvline(nyq, color=_colour(i), ls=":", lw=1.1, alpha=0.7) + # A curve sitting on the floor means "nothing measurable", not "exactly + # this much", so the floor has to be visible to read the plot honestly. + if floor is not None: + for ax in (ax1, ax2): + ax.axhline(floor, color=_colour(i), ls="-.", lw=0.9, alpha=0.55) + + # One limit line per axis, however many rates contributed a check. + for ax, suffix in ((ax1, "alias.direct_rejection"), (ax2, "alias.fold_back")): + limit = next((c["limit"] for c in doc.get("checks", []) + if c["id"].endswith(suffix) and c["limit"] is not None), None) + if limit is not None: + ax.axhline(limit, color="k", ls="--", lw=1.0, + label=f"limit ({limit:.0f} dBc)") + + ax1.set_ylabel("direct level (dBc)") + ax1.set_title("Microphone audio above the transmit passband\n" + "top: what comes straight through, below the fold point. " + "bottom: what folds back, above it") + ax1.grid(True, alpha=0.25) + ax1.legend(fontsize=7, loc="lower left") + + ax2.set_xlabel("microphone frequency (Hz)") + ax2.set_ylabel("fold-back product (dBc)") + ax2.grid(True, alpha=0.25) + if drew_fold: + ax2.legend(fontsize=7, loc="lower left") + else: + ax2.text(0.5, 0.5, "no fold-back product was measurable", + transform=ax2.transAxes, ha="center", fontsize=10, color="grey") + return _finish(fig, path) + + +def plot_summary(doc: dict, path: str) -> str: + """One panel per compared corner: the rate-invariance result at a glance.""" + rows = doc.get("comparison", {}).get("corners", []) + if not rows: + rows = [] + fig, ax = plt.subplots(figsize=(9, max(2.5, 0.9 * len(rows) + 1.8))) + + if not rows: + ax.text(0.5, 0.5, "no cross-rate comparison in this result", + transform=ax.transAxes, ha="center", fontsize=11, color="grey") + ax.axis("off") + return _finish(fig, path) + + labels = [r["label"] for r in rows] + deltas = [r["delta_pct"] if r["delta_pct"] is not None else np.nan + for r in rows] + y = np.arange(len(rows)) + colours = ["#2ca02c" if r["verdict"] == "PASS" + else "#999999" if r["verdict"] == "SKIP" else "#d62728" + for r in rows] + + ax.barh(y, deltas, color=colours, height=0.55) + tol = None + for c in doc.get("checks", []): + if c["id"].endswith(".rate_invariance") and c["limit"] is not None: + tol = c["limit"] + break + if tol: + ax.axvspan(-tol, tol, color="#2ca02c", alpha=0.12) + ax.axvline(tol, color="#2ca02c", lw=0.9) + ax.axvline(-tol, color="#2ca02c", lw=0.9, + label=f"tolerance +/-{tol:.1f}%") + ax.axvline(bt.LEGACY_DELTA_PCT, color="k", ls=":", lw=1.5, + label=f"frozen-table signature ({bt.LEGACY_DELTA_PCT:.3f}%)") + ax.axvline(0.0, color="grey", lw=0.8) + + ax.set_yticks(y) + ax.set_yticklabels(labels, fontsize=9) + ax.invert_yaxis() + ax.set_xlabel("change between sample rates (%)") + ax.set_title(f"Transmit filter rate invariance - " + f"{doc['summary']['overall']}") + ax.grid(True, axis="x", alpha=0.25) + ax.legend(fontsize=8, loc="lower right") + return _finish(fig, path) + + +def render_all(doc: dict, out_dir: str, prefix: str) -> list: + """Render every figure the document supports. Missing data is skipped.""" + made = [] + figures = ( + ("passband", plot_passband), + ("sideband", plot_sideband), + ("alias", plot_alias), + ("summary", plot_summary), + ) + for name, fn in figures: + path = os.path.join(out_dir, f"{prefix}_{name}.png") + try: + made.append(fn(doc, path)) + except Exception as exc: # a missing test should not lose the others + print(f"warning: could not render {name}: {exc}", file=sys.stderr) + return made + + +def main() -> int: + if len(sys.argv) < 2: + print(__doc__, file=sys.stderr) + return 2 + for json_path in sys.argv[1:]: + with open(json_path) as fh: + doc = json.load(fh) + out_dir = os.path.dirname(os.path.abspath(json_path)) + prefix = os.path.splitext(os.path.basename(json_path))[0] + for png in render_all(doc, out_dir, prefix): + print(png) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/code/tools/tx_filter_hil/report.py b/code/tools/tx_filter_hil/report.py new file mode 100644 index 0000000..a72a4ab --- /dev/null +++ b/code/tools/tx_filter_hil/report.py @@ -0,0 +1,321 @@ +"""Result assembly and rendering for the transmit filter HIL suite. + +Three tiers, matching the convention the repo's other tools follow: a human +summary on stdout, a machine-readable JSON document, and a Markdown report that +stitches the numbers together with the generated figures. + +The document assembly, provenance collection and JSON encoding are shared with +:mod:`filter_hil.report` - they say nothing about which chain was measured. The +stdout summary and the Markdown are written here, because what a reader needs to +be told about a transmit result is different. +""" + +from __future__ import annotations + +import os +import sys +from typing import Sequence + +from filter_hil.report import (_jsonable, _md_table, build_document, # noqa: F401 + collect_provenance, write_json) + +from . import bandtable as bt + +SCHEMA = "phoenix.tx_filter_hil/1" + + +def build_tx_document(**kwargs) -> dict: + """Assemble the result document, stamped with this suite's schema.""" + doc = build_document(**kwargs) + doc["schema"] = SCHEMA + return doc + + +# --- stdout ---------------------------------------------------------------- + +def print_summary(doc: dict, stream=sys.stdout) -> None: + """Human-readable result, in the shape the other tools use.""" + s = doc["summary"] + w = stream.write + + w(f"\n[{s['overall']}] Transmit filter rate-independence, " + f"{doc['duration_s']:.0f} s\n") + + for warning in doc.get("warnings", []): + w(f" WARNING: {warning}\n") + + rig = doc.get("rig", {}) + if rig: + w(f" Wiring : {rig.get('wiring', '?')}\n") + if rig.get("suppression_at_1k_db") is not None: + w(f" Suppression @1k : {rig['suppression_at_1k_db']:.1f} dB\n") + if rig.get("drive_amplitude_v") is not None: + w(f" Mic drive : {rig['drive_amplitude_v']*1000:.1f} mV\n") + if rig.get("key_down_s") is not None: + w(f" Key-down time : {rig['key_down_s']:.0f} s\n") + + comp = doc.get("comparison", {}) + rates = sorted(doc.get("rates", {}), key=lambda r: -int(r)) + + rows = comp.get("corners", []) + if rows: + w("\n Transmit audio corners (Hz)\n") + head = " {:<34}{:>9}".format("feature", "nominal") + for r in rates: + head += " {:>10}".format(f"{int(r)//1000}k") + head += " {:>9} {:>8}".format("delta", "verdict") + w(head + "\n") + for row in rows: + nom = row.get("nominal_hz") + line = " {:<34}{:>9}".format(row["label"][:34], + f"{nom:.0f}" if nom else "-") + for r in rates: + v = row.get("value_hz", {}).get(str(r)) + line += " {:>10}".format(f"{v:.1f}" if v is not None else "-") + d = row.get("delta_pct") + line += " {:>8}%".format(f"{d:+.2f}" if d is not None else "-") + line += " {:>8}".format(row["verdict"]) + if row.get("legacy_consistent"): + line += " <- matches the old frozen-table shift" + w(line + "\n") + + def per_rate_line(title: str, block: dict, key: str, unit: str) -> None: + if not block: + return + values = block.get(key, {}) + cells = " ".join(f"{int(r)//1000}k {values.get(str(r)):.1f} {unit}" + if values.get(str(r)) is not None else f"{int(r)//1000}k -" + for r in rates) + w(f" {title:<16}: {cells}\n") + + w("\n") + per_rate_line("Sideband worst", comp.get("sideband_suppression", {}), + "worst_db", "dB") + per_rate_line("Fold-back worst", comp.get("fold_back", {}), "worst_dbc", "dBc") + per_rate_line("Carrier worst", comp.get("carrier", {}), "worst_dbc", "dBc") + + w("\n Checks:\n") + for c in doc["checks"]: + mark = "SKIP" if c["skipped"] else ("OK " if c["passed"] else "BAD ") + w(f" [{mark}] {c['id']:<34} {c['message']}\n") + + w(f"\n {s['passed']} passed, {s['failed']} failed, {s['skipped']} skipped\n") + if not doc.get("state_restored"): + w(" WARNING: radio state was NOT fully restored\n") + if doc.get("state_residual_diff"): + w(f" Radio settings that did not return to baseline: " + f"{', '.join(doc['state_residual_diff'])}\n") + for name, path in doc.get("artifacts", {}).items(): + if isinstance(path, str): + w(f" {name.capitalize():<9}: {path}\n") + elif isinstance(path, list) and path: + w(f" {name.capitalize():<9}: {len(path)} files in " + f"{os.path.dirname(path[0])}\n") + w("\n") + + +# --- Markdown -------------------------------------------------------------- + +def write_markdown(doc: dict, path: str, png_paths: Sequence[str] = ()) -> str: + """Render the report a human reads.""" + s = doc["summary"] + rates = sorted(doc.get("rates", {}), key=lambda r: -int(r)) + md: list[str] = [] + a = md.append + + a("# Transmit filter rate-independence, hardware in the loop\n") + a(f"**{s['overall']}** - {s['passed']} passed, {s['failed']} failed, " + f"{s['skipped']} skipped, in {doc['duration_s']:.0f} s.\n") + a(f"Generated {doc['generated_utc']}.\n") + + for warning in doc.get("warnings", []): + a(f"> **Warning:** {warning}\n") + + a("\n## What this shows\n") + a("A tone is injected into the radio's microphone input and the exciter's I " + "and Q outputs are captured together, at every sample rate under test. " + "Because both outputs are sampled synchronously, the complex signal " + "`I + jQ` can be reconstructed, and with it the thing a single-sideband " + "transmitter is actually judged on: how much energy landed on the wrong " + "side of DC.\n") + a("\nThree stages of the transmit chain are specified in hertz and so have to " + "be regenerated whenever the sample rate changes - the equaliser cells, " + "`TX_DECIMATE3_FC_HZ` and `TX_AUDIO_LPF_FC_HZ`. Everything else is " + "specified as a fraction of Fs and is *meant* to scale with the rate. " + f"These filters used to carry frozen tables designed for one audio rate; " + f"run at another, every corner scaled by the ratio of the rates - " + f"**{bt.LEGACY_DELTA_PCT:.3f}%** between 176.4 and 192 ksps. A result " + f"column close to that figure means the frozen tables are back.\n") + a("\nUnlike the receive suite, nothing here can be bypassed over CAT: there " + "is no command for the transmit equaliser, and the two generated FIR " + "stages are unconditional. So every response below is a **composite** of " + "the whole path, microphone input to exciter output, including the codec's " + "own front end. That costs absolute accuracy, which is why the absolute " + "checks are loose. It costs the rate comparison nothing, because no part " + "of the analog path changes when the sample rate does.\n") + + a("\n## Rig\n") + rig = doc.get("rig", {}) + rig_rows = [ + ["Wiring (detected)", rig.get("wiring", "?")], + ["Suppression at 1 kHz", + f"{rig.get('suppression_at_1k_db', float('nan')):.1f} dB"], + ["Mic drive amplitude", f"{rig.get('drive_amplitude_v', 0)*1000:.1f} mV"], + ["Scope rate", f"{rig.get('scope_rate_hz', 0)/1000:.1f} kHz"], + ["Scope range / offset", + f"{rig.get('scope_range_v', 0):.1f} V pp / " + f"{rig.get('scope_offset_v', 0):+.2f} V"], + ["Capture length", f"{rig.get('capture_s', 0)*1000:.0f} ms"], + ["WaveForms SDK", doc["provenance"].get("dwf_version", "?")], + ] + if rig.get("key_down_s") is not None: + rig_rows.append(["Total key-down time", f"{rig['key_down_s']:.0f} s"]) + a(_md_table(["Property", "Value"], rig_rows)) + a("\nThe scope sample rate is deliberately not a divisor of the radio's " + "192 kHz output rate. The exciter DAC leaves residual images near its own " + "sample rate, and at 96 ksps an image at `192000 - f` would alias to " + "exactly `-f` - straight onto the mirror frequency the sideband " + "suppression reading uses.\n") + + a("\n## Firmware under test\n") + p = doc["provenance"] + a(_md_table(["Property", "Value"], [ + ["Git commit", f"`{p.get('git_commit', '?')}`" + + (" (working tree dirty)" if p.get("git_dirty") else "")], + ["BuildInfo.h", f"`{p.get('build_info', '?')}`"], + ["Radio ID", doc.get("radio_baseline", {}).get("id", "?")], + ])) + + a("\n## Radio state\n") + base = doc.get("radio_baseline", {}) + a(_md_table(["Setting", "At start"], [ + ["Sample rate", f"{base.get('sample_rate_hz', '?')} sps"], + ["Band", base.get("current_band", ["?"])[base.get("active_vfo", 0)]], + ["Modulation", base.get("modulation", ["?"])[base.get("active_vfo", 0)]], + ["Mic gain", f"{base.get('mic_gain_db', '?')} dB"], + ["Transmit equaliser", str(base.get("equalizer_xmt", "?"))], + ["PA 100 W active", base.get("pa_100w", "?")], + ])) + a(f"\nState restored afterwards: **{'yes' if doc.get('state_restored') else 'NO'}**") + if doc.get("state_residual_diff"): + a(f" - these did not return to baseline: `{doc['state_residual_diff']}`") + a("\n") + + a("\n## Headline result\n") + rows = doc.get("comparison", {}).get("corners", []) + if rows: + headers = ["Feature", "Nominal Hz"] + [f"{int(r)//1000}k" for r in rates] + \ + ["Delta %", "If still broken", "Verdict"] + table_rows = [] + for row in rows: + nom = row.get("nominal_hz") + cells = [row["label"], f"{nom:.0f}" if nom else "-"] + for r in rates: + v = row.get("value_hz", {}).get(str(r)) + cells.append(f"{v:.1f}" if v is not None else "-") + d = row.get("delta_pct") + cells.append(f"{d:+.2f}" if d is not None else "-") + cells.append(f"{row['legacy_predicted_delta_pct']:.3f}") + cells.append(f"**{row['verdict']}**") + table_rows.append(cells) + a(_md_table(headers, table_rows)) + a("\nThe high corner is the one that carries the result. It is set by " + "`TXInterpolateBy2Again`'s filter, the stage that limits the " + "transmitted audio bandwidth, and it is regenerated per rate. The low " + "corner is set by the equaliser bank's lowest cell at 198 Hz, with the " + "microphone input's AC coupling in series, so it is a weaker but still " + "useful witness.\n") + + a("\n## Per-rate detail\n") + for r in rates: + bucket = doc["rates"][r] + a(f"\n### {int(r)} sps\n") + if bucket.get("skipped"): + a(f"\nSkipped: `{bucket['skipped']}`\n") + continue + pb = bucket.get("passband", {}) + sb = bucket.get("sideband_suppression", {}) + al = bucket.get("alias", {}) + ca = bucket.get("carrier", {}) + detail = [ + ["Audio rate", f"{bucket.get('audio_rate_hz', 0):.1f} Hz"], + ["Hilbert rate", f"{bucket.get('hilbert_rate_hz', 0):.1f} Hz"], + ["Passband reference", f"{pb.get('reference_dbv', float('nan')):.1f} dBV"], + ["Passband ripple", f"{pb.get('ripple_db', float('nan')):.2f} dB"], + ["-3 dB corners", + f"{pb.get('corner_lo_3db_hz', float('nan')):.0f} Hz to " + f"{pb.get('corner_hi_3db_hz', float('nan')):.0f} Hz"], + ] + if sb.get("worst_db") is not None: + detail.append(["Sideband suppression, worst", + f"{sb['worst_db']:.1f} dB at {sb['worst_at_hz']:.0f} Hz"]) + if al: + detail.append(["Fold point (audio rate / 4)", + f"{al.get('nyquist_after_fold_hz', float('nan')):.0f} Hz"]) + if al.get("noise_floor_dbc") is not None: + detail.append(["Rig noise floor", + f"{al['noise_floor_dbc']:.1f} dBc"]) + if al.get("worst_direct_dbc") is not None: + detail.append([ + "Out-of-band rejection, worst", + f"{al['worst_direct_dbc']:.1f} dBc" + + (" (at the noise floor)" + if al.get("worst_direct_floor_limited") else "")]) + if al.get("worst_fold_dbc") is not None: + detail.append([ + "Fold-back product, worst", + f"{al['worst_fold_dbc']:.1f} dBc from " + f"{al.get('worst_fold_at_hz', float('nan')):.0f} Hz" + + (" (at the noise floor, so nothing measurable folded)" + if al.get("worst_fold_floor_limited") else "")]) + if ca.get("worst_dbc") is not None: + detail.append(["Carrier residue, worst", f"{ca['worst_dbc']:.1f} dBc"]) + a(_md_table(["Measurement", "Value"], detail)) + + if png_paths: + a("\n## Figures\n") + for png in png_paths: + name = os.path.basename(png) + a(f"\n### {name}\n\n![{name}]({name})\n") + + a("\n## All checks\n") + a(_md_table(["Check", "Result", "Value", "Limit", "Notes"], [ + [f"`{c['id']}`", + "SKIP" if c["skipped"] else ("PASS" if c["passed"] else "**FAIL**"), + f"{c['value']:.3f} {c['units']}" if c["value"] is not None else "-", + f"{c['limit']:.3f}" if c["limit"] is not None else "-", + c["message"]] + for c in doc["checks"]])) + + a("\n## Caveats\n") + a("- **Sideband suppression is checked against a floor, not for rate " + "invariance.** The Hilbert table is not regenerated per rate, and that is " + "correct: a Hilbert transformer's usable band is a fraction of its sample " + "rate, so one fixed table is the same design at any rate and its edges are " + "*meant* to move with Fs.\n") + a("- **A clean fold-back result does not on its own vindicate the " + "decimator.** The equaliser bank runs before `TXDecimateBy2Again` and its " + "highest cell is at 4 kHz, so it already attenuates an 8 kHz input " + "substantially. The result proves nothing folds into the transmitted " + "audio, which is what matters operationally; " + "`TransmitChain176k.DecimatorStopsBeforeTheFoldPoint` is what proves the " + "decimator's own stopband, by evaluating its taps at the fold point.\n") + a("- Absolute corner frequencies carry the whole analog path, including the " + "codec front end and the equaliser bank, neither of which can be removed " + "over CAT. The rate comparison divides all of it out.\n") + a("- The transmit DSP gain scales with the requested output power " + "(`TXGain`), so the power setting must not change during a run. The suite " + "reads it at the start and reports it.\n") + a("- Do not touch the front panel during a run. It triggers a settings save " + "and would persist the test configuration.\n") + + a("\n## Reproduce\n") + a(f"```bash\n{p.get('command_line', '')}\n```\n") + a("\nRegenerate the figures from the saved results without the hardware:\n") + a(f"```bash\npython3 plot_tx_filter_hil.py " + f"{os.path.basename(doc.get('artifacts', {}).get('json', 'results.json'))}\n```\n") + + os.makedirs(os.path.dirname(os.path.abspath(path)), exist_ok=True) + with open(path, "w") as fh: + fh.write("\n".join(md)) + return path diff --git a/code/tools/tx_filter_hil/test_tx_filter_hil.py b/code/tools/tx_filter_hil/test_tx_filter_hil.py new file mode 100644 index 0000000..2dc669a --- /dev/null +++ b/code/tools/tx_filter_hil/test_tx_filter_hil.py @@ -0,0 +1,551 @@ +#!/usr/bin/env python3 +"""Self-tests for the transmit HIL measurement maths. No hardware needed. + + python3 test_tx_filter_hil.py + +These exist because the suite's job is to fail when the radio is wrong, and a +measurement bug that biases everything the same way would let it pass silently +instead. The load-bearing case is :class:`TestComparisonCatchesTheBug`, which +feeds the comparison a simulated -8.125 % shift and requires a FAIL: if that ever +passes, the suite has stopped being able to detect the thing it was written for. + +Synthetic captures are built from known signals, so every measured quantity has +an answer that can be asserted rather than eyeballed. +""" + +from __future__ import annotations + +import math +import time +import os +import sys +import unittest + +import numpy as np + +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from filter_hil.radio import Radio # noqa: E402 +from tx_filter_hil import bandtable as bt # noqa: E402 +from tx_filter_hil.ad2 import IqCapture # noqa: E402 +from tx_filter_hil.measure import (complex_spectrum, corner_from_sweep, # noqa: E402 + correlate_complex, dominant_line, + measure_iq_tone, passband_reference_db, + spur_level_dbc, sweep_ripple_db, to_db, + worst_in_band) +from tx_filter_hil.tests import PASSBAND_HI_HZ, PASSBAND_LO_HZ, compare_rates # noqa: E402 + +FS = 100_000.0 +N = 25_000 # 0.25 s, matching the default capture length + + +def make_capture(f_hz: float, amplitude_v: float = 0.5, *, + image_db: float = -60.0, dc_v: float = 1.6, + noise_v: float = 0.0, harmonic_db: float = -90.0, + swap_wires: bool = False, extra=None) -> IqCapture: + """Synthesise a capture of a single-sideband exciter output. + + ``f_hz`` is signed: the side of DC the wanted energy sits on. ``image_db`` + puts a conjugate line at the mirror frequency, which is what finite sideband + suppression looks like. ``extra`` is a list of ``(freq_hz, amplitude_v)`` + pairs for spurious products. + """ + t = np.arange(N) / FS + z = amplitude_v * np.exp(2j * np.pi * f_hz * t) + z += amplitude_v * 10.0 ** (image_db / 20.0) * np.exp(-2j * np.pi * f_hz * t) + z += amplitude_v * 10.0 ** (harmonic_db / 20.0) * np.exp(2j * np.pi * 2 * f_hz * t) + for f_extra, a_extra in (extra or []): + z += a_extra * np.exp(2j * np.pi * f_extra * t) + + i = np.real(z) + dc_v + q = np.imag(z) + dc_v + if noise_v: + rng = np.random.default_rng(12345) + i = i + rng.normal(0.0, noise_v, N) + q = q + rng.normal(0.0, noise_v, N) + + ch1, ch2 = (q, i) if swap_wires else (i, q) + return IqCapture(ch1=ch1, ch2=ch2, sample_rate_hz=FS, lost=0, corrupted=0, + t_utc="1970-01-01T00:00:00+00:00") + + +class TestBandtable(unittest.TestCase): + """The mirrored firmware constants have to be self-consistent.""" + + def test_legacy_shift_is_the_rate_ratio(self): + self.assertAlmostEqual(bt.LEGACY_DELTA_PCT, -8.125, places=3) + + def test_audio_and_hilbert_rates(self): + # DSP.cpp: dec4 then dec2 reaches the audio rate; dec2again halves again. + self.assertAlmostEqual(bt.audio_rate_hz(192000), 24000.0) + self.assertAlmostEqual(bt.hilbert_rate_hz(192000), 12000.0) + self.assertAlmostEqual(bt.audio_rate_hz(176400), 22050.0) + self.assertAlmostEqual(bt.hilbert_rate_hz(176400), 11025.0) + + def test_fold_point_scales_with_the_rate(self): + self.assertAlmostEqual(bt.nyquist_after_fold_hz(192000), 6000.0) + self.assertAlmostEqual(bt.nyquist_after_fold_hz(176400), 5512.5) + + def test_alias_maps_above_the_fold_point_and_leaves_below_alone(self): + # At 192 ksps the audio rate is 24 k and dec2again folds about 12 k, so + # 8 kHz reappears at 4 kHz and 3 kHz is untouched. + self.assertAlmostEqual(bt.alias_of_hz(8000.0, 192000), 4000.0) + self.assertAlmostEqual(bt.alias_of_hz(3000.0, 192000), 3000.0) + self.assertAlmostEqual(bt.alias_of_hz(8000.0, 176400), 3025.0) + + def test_equaliser_table_matches_the_firmware_shape(self): + self.assertEqual(len(bt.EQ_CENTRE_HZ), bt.EQ_CELL_COUNT) + self.assertEqual(bt.EQ_CENTRE_HZ[0], 198.425) + self.assertEqual(bt.EQ_CENTRE_HZ[-1], 4000.0) + + def test_nominal_corner_is_inside_the_offline_assertion(self): + # TransmitChain176k.AudioBandwidthHoldsAcrossRates asserts 2760 +/- 150. + self.assertLess(abs(bt.TX_AUDIO_CORNER_3DB_HZ - 2760.0), 150.0) + + def test_hilbert_band_scales_with_the_rate(self): + lo_192, hi_192 = bt.hilbert_band_hz(192000) + lo_176, hi_176 = bt.hilbert_band_hz(176400) + self.assertLess(lo_192, hi_192) + # The band is a fraction of Fs, so it shrinks with the rate by design. + self.assertAlmostEqual(hi_176 / hi_192, bt.LEGACY_RATE_RATIO, places=4) + + +class FakeSerial: + """Just enough pyserial to let Radio.send run without a radio.""" + + def __init__(self, reply: bytes = b""): + self.written = [] + self._reply = bytearray(reply) + self.is_open = True + + def reset_input_buffer(self): + pass + + def write(self, data): + self.written.append(data) + + def flush(self): + pass + + @property + def in_waiting(self): + return len(self._reply) + + def read(self, n=1): + out, self._reply = bytes(self._reply[:n]), self._reply[n:] + return out + + def close(self): + self.is_open = False + + +class TestCatCommandForms(unittest.TestCase): + """The transmit controls have to match CAT.cpp's declared command lengths. + + ``command_parser`` matches on exact length, so a command one character out is + silently rejected with ``?;`` rather than misbehaving visibly. + """ + + def _radio(self, reply: bytes = b"") -> Radio: + r = Radio(timeout_s=0.02, log=lambda *_: None) + r.cat = FakeSerial(reply) + return r + + def test_ptt_sends_the_bare_command_and_does_not_wait(self): + # TX; and RX; are three characters and are *writes*: CAT.cpp suppresses + # their empty responses, so waiting for a reply costs the whole read + # timeout on every key and unkey. That inference is length-based + # everywhere else, which gets these two backwards without a special case. + r = self._radio() + started = time.monotonic() + r.ptt_press(settle_s=0.0) + r.ptt_release(settle_s=0.0) + self.assertEqual(r.cat.written, [b"TX;", b"RX;"]) + self.assertLess(time.monotonic() - started, 0.01, + "PTT must not block on a reply that never comes") + + def test_read_forms_still_wait_for_their_reply(self): + r = self._radio(b"MG071;") + self.assertEqual(r.get_mic_gain_pct(), 71) + self.assertEqual(r.cat.written, [b"MG;"]) + + def test_mic_gain_command_length_matches_cat(self): + r = self._radio() + r.set_mic_gain_pct(71) + self.assertEqual(r.cat.written, [b"MG071;"]) # MG set_len is 3+3 + self.assertEqual(len(r.cat.written[0]), 6) + + def test_mic_gain_is_clamped_to_the_command_range(self): + r = self._radio() + r.set_mic_gain_pct(150) + r.set_mic_gain_pct(-20) + self.assertEqual(r.cat.written, [b"MG100;", b"MG000;"]) + + def test_mic_gain_db_mapping_round_trips_as_the_firmware_does(self): + # MG_write truncates to an integer number of dB, so the round trip is + # lossy and the restore has to expect the truncated value back. + self.assertEqual(Radio.mic_gain_pct_from_db(10), 71) + self.assertEqual(Radio.mic_gain_db_from_pct(71), 9) + for db in (-40, -20, 0, 10, 30): + back = Radio.mic_gain_db_from_pct(Radio.mic_gain_pct_from_db(db)) + self.assertLessEqual(abs(back - db), 1) + + def test_power_command_length_matches_cat(self): + r = self._radio(b"PC005;") + r.set_power_w(5) + self.assertEqual(r.cat.written, [b"PC005;"]) # PC set_len is 3+3 + + +class TestComplexSpectrum(unittest.TestCase): + """A complex exponential must read its own amplitude, on its own side.""" + + def test_amplitude_is_not_halved(self): + # The real-signal convention doubles the FFT to recombine two conjugate + # lines. A complex exponential has one line and must not be doubled. + t = np.arange(N) / FS + z = 0.4 * np.exp(2j * np.pi * 1000.0 * t) + freqs, mag = complex_spectrum(z, FS) + idx = int(np.argmax(mag)) + self.assertAlmostEqual(freqs[idx], 1000.0, delta=FS / N) + self.assertAlmostEqual(mag[idx], 0.4, delta=0.01) + + def test_negative_frequencies_are_addressable(self): + t = np.arange(N) / FS + z = 0.4 * np.exp(-2j * np.pi * 1500.0 * t) + freqs, mag = complex_spectrum(z, FS) + idx = int(np.argmax(mag)) + self.assertLess(freqs[idx], 0.0) + self.assertAlmostEqual(freqs[idx], -1500.0, delta=FS / N) + + def test_frequencies_are_sorted(self): + freqs, _ = complex_spectrum(np.ones(1024, dtype=complex), FS) + self.assertTrue(np.all(np.diff(freqs) > 0)) + + def test_correlation_beats_bin_picking_off_bin(self): + # Deliberately between bins, where a Hann-windowed bin reads low. + f = 1000.0 + 0.5 * FS / N + t = np.arange(N) / FS + z = 0.4 * np.exp(2j * np.pi * f * t) + _, mag = complex_spectrum(z, FS) + self.assertLess(np.max(mag), 0.4) # scalloping loss + self.assertAlmostEqual(correlate_complex(z, FS, f), 0.4, delta=0.002) + + +class TestMeasureIqTone(unittest.TestCase): + """One synthetic capture, every reported quantity checked.""" + + def test_reads_level_and_suppression(self): + cap = make_capture(-1000.0, amplitude_v=0.5, image_db=-42.0) + m = measure_iq_tone(cap, 1000.0, swap=False, sideband_sign=-1, + scope_range_v=5.0, scope_offset_v=1.6) + self.assertTrue(m.valid, m.reason) + self.assertAlmostEqual(m.wanted_v, 0.5, delta=0.01) + self.assertAlmostEqual(m.level_dbv, to_db(0.5), delta=0.2) + self.assertAlmostEqual(m.suppression_db, 42.0, delta=1.0) + self.assertAlmostEqual(m.f_measured_hz, -1000.0, delta=5.0) + + def test_swapping_the_probes_mirrors_the_spectrum(self): + # The same signal wired the other way round must give the same answer + # once the swap is declared. This is the whole basis for not caring which + # probe went on which output. + wired = make_capture(-1000.0, amplitude_v=0.5, image_db=-42.0) + swapped = make_capture(-1000.0, amplitude_v=0.5, image_db=-42.0, + swap_wires=True) + a = measure_iq_tone(wired, 1000.0, swap=False, sideband_sign=-1, + scope_range_v=5.0, scope_offset_v=1.6) + b = measure_iq_tone(swapped, 1000.0, swap=True, sideband_sign=-1, + scope_range_v=5.0, scope_offset_v=1.6) + self.assertAlmostEqual(a.level_dbv, b.level_dbv, delta=0.05) + self.assertAlmostEqual(a.suppression_db, b.suppression_db, delta=0.5) + + def test_undeclared_swap_reads_the_image_as_the_tone(self): + # And it must matter: reading with the wrong swap picks up the -42 dB + # image instead of the tone. This is what the wiring detection prevents. + swapped = make_capture(-1000.0, amplitude_v=0.5, image_db=-42.0, + swap_wires=True) + wrong = measure_iq_tone(swapped, 1000.0, swap=False, sideband_sign=-1, + scope_range_v=5.0, scope_offset_v=1.6) + self.assertLess(wrong.suppression_db, -30.0) + + def test_a_real_signal_reads_no_suppression(self): + # Both probes on the same output, or one probe missing: the captured pair + # is real, its spectrum is symmetric, and suppression collapses to 0 dB. + # This is the rig fault detect_wiring's suppression check exists to catch. + t = np.arange(N) / FS + real = 0.5 * np.cos(2 * np.pi * 1000.0 * t) + 1.6 + cap = IqCapture(ch1=real, ch2=real.copy(), sample_rate_hz=FS, lost=0, + corrupted=0, t_utc="1970-01-01T00:00:00+00:00") + m = measure_iq_tone(cap, 1000.0, swap=False, sideband_sign=1, + scope_range_v=5.0, scope_offset_v=1.6) + self.assertLess(abs(m.suppression_db), 1.0) + + def test_carrier_residue_is_measured_against_the_scope_offset(self): + # 100 mV of DC above the 1.6 V centring, on both channels, against a + # 0.5 V tone: hypot(0.1, 0.1) / 0.5. + cap = make_capture(-1000.0, amplitude_v=0.5, dc_v=1.7) + m = measure_iq_tone(cap, 1000.0, swap=False, sideband_sign=-1, + scope_range_v=5.0, scope_offset_v=1.6) + expected = to_db(math.hypot(0.1, 0.1)) - to_db(0.5) + self.assertAlmostEqual(m.carrier_dbc, expected, delta=0.3) + + def test_dc_does_not_leak_into_the_tone_measurement(self): + # A big DC bias must not change the measured level at all: analytic() + # removes each channel's mean before anything else happens. + quiet = make_capture(-1000.0, amplitude_v=0.5, dc_v=0.0) + biased = make_capture(-1000.0, amplitude_v=0.5, dc_v=2.0) + a = measure_iq_tone(quiet, 1000.0, swap=False, sideband_sign=-1, + scope_range_v=5.0, scope_offset_v=0.0) + b = measure_iq_tone(biased, 1000.0, swap=False, sideband_sign=-1, + scope_range_v=5.0, scope_offset_v=2.0) + self.assertAlmostEqual(a.level_dbv, b.level_dbv, delta=0.01) + + def test_clipping_is_judged_against_the_half_range(self): + # The AD2's range is peak to peak about the offset, so a 2.4 V amplitude + # on a 5 V range (+/-2.5 V) is 96% of the window and must be rejected - + # even though 2.4 is well under 5. + cap = make_capture(-1000.0, amplitude_v=2.4, dc_v=1.6) + m = measure_iq_tone(cap, 1000.0, swap=False, sideband_sign=-1, + scope_range_v=5.0, scope_offset_v=1.6) + self.assertTrue(m.clipped) + self.assertFalse(m.valid) + self.assertIn("half-range", m.reason) + + def test_comfortable_amplitude_is_not_called_clipped(self): + cap = make_capture(-1000.0, amplitude_v=0.5, dc_v=1.6) + m = measure_iq_tone(cap, 1000.0, swap=False, sideband_sign=-1, + scope_range_v=5.0, scope_offset_v=1.6) + self.assertFalse(m.clipped) + + def test_dropped_samples_invalidate_a_point(self): + cap = make_capture(-1000.0) + cap.lost = 40 + m = measure_iq_tone(cap, 1000.0, swap=False, sideband_sign=-1, + scope_range_v=5.0, scope_offset_v=1.6) + self.assertFalse(m.valid) + self.assertIn("lost", m.reason) + + def test_buried_tone_invalidates_a_point(self): + cap = make_capture(-1000.0, amplitude_v=0.002, noise_v=0.05) + m = measure_iq_tone(cap, 1000.0, swap=False, sideband_sign=-1, + scope_range_v=5.0, scope_offset_v=1.6, + min_snr_db=25.0) + self.assertFalse(m.valid) + self.assertIn("SNR", m.reason) + + def test_harmonics_are_reported_as_thd(self): + cap = make_capture(-1000.0, amplitude_v=0.5, harmonic_db=-35.0) + m = measure_iq_tone(cap, 1000.0, swap=False, sideband_sign=-1, + scope_range_v=5.0, scope_offset_v=1.6) + self.assertAlmostEqual(m.thd_db, -35.0, delta=2.0) + # Reported but not fatal by default; fatal when auto-levelling. + self.assertTrue(m.valid) + strict = measure_iq_tone(cap, 1000.0, swap=False, sideband_sign=-1, + scope_range_v=5.0, scope_offset_v=1.6, + max_thd_db=-40.0, thd_invalidates=True) + self.assertFalse(strict.valid) + self.assertIn("THD", strict.reason) + + +class TestDominantLine(unittest.TestCase): + """The wiring detection depends entirely on getting this sign right.""" + + def test_finds_the_side_the_energy_is_on(self): + f, amp = dominant_line(make_capture(+1000.0, amplitude_v=0.5), + swap=False, f_min_hz=500.0, f_max_hz=1500.0) + self.assertGreater(f, 0.0) + self.assertAlmostEqual(amp, 0.5, delta=0.02) + + f, _ = dominant_line(make_capture(-1000.0, amplitude_v=0.5), + swap=False, f_min_hz=500.0, f_max_hz=1500.0) + self.assertLess(f, 0.0) + + def test_swap_flips_the_reported_side(self): + cap = make_capture(+1000.0, amplitude_v=0.5) + a, _ = dominant_line(cap, swap=False, f_min_hz=500.0, f_max_hz=1500.0) + b, _ = dominant_line(cap, swap=True, f_min_hz=500.0, f_max_hz=1500.0) + self.assertGreater(a, 0.0) + self.assertLess(b, 0.0) + + def test_carrier_residue_does_not_win(self): + # A large DC term must not be mistaken for the tone; f_min_hz excludes it. + cap = make_capture(-1000.0, amplitude_v=0.05, dc_v=2.0) + f, _ = dominant_line(cap, swap=False, f_min_hz=500.0, f_max_hz=1500.0) + self.assertAlmostEqual(f, -1000.0, delta=10.0) + + +class TestSpurLevel(unittest.TestCase): + """Fold-back products can emerge on either side of DC.""" + + def test_finds_a_spur_on_the_unwanted_side(self): + # A 4 kHz product on the *positive* side while the tone is negative: the + # decimator folds before the Hilbert transform picks a side, so this is a + # realistic case and looking only at the wanted side would miss it. + cap = make_capture(-8000.0, amplitude_v=0.01, + extra=[(+4000.0, 0.5 * 10 ** (-45.0 / 20.0))]) + dbc = spur_level_dbc(cap, swap=False, f_spur_hz=4000.0, reference_v=0.5) + self.assertAlmostEqual(dbc, -45.0, delta=1.5) + + def test_finds_a_spur_on_the_wanted_side_too(self): + cap = make_capture(-8000.0, amplitude_v=0.01, + extra=[(-4000.0, 0.5 * 10 ** (-45.0 / 20.0))]) + dbc = spur_level_dbc(cap, swap=False, f_spur_hz=4000.0, reference_v=0.5) + self.assertAlmostEqual(dbc, -45.0, delta=1.5) + + def test_reports_far_down_when_there_is_no_spur(self): + cap = make_capture(-8000.0, amplitude_v=0.01) + dbc = spur_level_dbc(cap, swap=False, f_spur_hz=4000.0, reference_v=0.5) + self.assertLess(dbc, -60.0) + + +class TestCurveFeatures(unittest.TestCase): + """Corner extraction on a synthetic response with a known answer.""" + + @staticmethod + def _response(corner_hz: float, freqs): + """First-order-ish lowpass with a 200 Hz first-order highpass below.""" + f = np.asarray(freqs, dtype=float) + lp = -10.0 * np.log10(1.0 + (f / corner_hz) ** 8) # steep, like a FIR + hp = -10.0 * np.log10(1.0 + (200.0 / f) ** 4) + return lp + hp + + def test_finds_the_high_corner(self): + f = np.geomspace(100.0, 4400.0, 41) + y = self._response(2760.0, f) + ref = passband_reference_db(f, y, PASSBAND_LO_HZ, PASSBAND_HI_HZ) + corner = corner_from_sweep(f, y, ref - 3.0, side="high", from_hz=1000.0) + self.assertAlmostEqual(corner, 2760.0, delta=90.0) + + def test_finds_the_low_corner(self): + f = np.geomspace(100.0, 4400.0, 61) + y = self._response(2760.0, f) + ref = passband_reference_db(f, y, PASSBAND_LO_HZ, PASSBAND_HI_HZ) + corner = corner_from_sweep(f, y, ref - 3.0, side="low", from_hz=1000.0) + self.assertAlmostEqual(corner, 200.0, delta=25.0) + + def test_walks_outwards_past_a_stopband_ripple(self): + # The equaliser's reconstruction is not monotonic far out, so a response + # that comes back up above the target must not be reported as the corner. + f = np.array([500.0, 1000.0, 2000.0, 2800.0, 3200.0, 3600.0, 4000.0]) + y = np.array([0.0, 0.0, -1.0, -3.0, -20.0, -2.5, -30.0]) + corner = corner_from_sweep(f, y, -3.0, side="high", from_hz=1000.0) + self.assertAlmostEqual(corner, 2800.0, delta=1.0) + + def test_returns_nan_when_the_sweep_never_crosses(self): + f = np.geomspace(100.0, 1000.0, 20) + y = np.zeros_like(f) + self.assertTrue(math.isnan( + corner_from_sweep(f, y, -3.0, side="high", from_hz=500.0))) + + def test_reference_ignores_one_wild_point(self): + # A median, so a single bad reading cannot move every derived corner. + f = np.array([500.0, 800.0, 1000.0, 1400.0, 1800.0]) + y = np.array([-20.0, -20.0, -20.0, +5.0, -20.0]) + self.assertAlmostEqual( + passband_reference_db(f, y, PASSBAND_LO_HZ, PASSBAND_HI_HZ), + -20.0, delta=0.01) + + def test_ripple_and_worst_in_band(self): + f = np.array([500.0, 1000.0, 1500.0, 1800.0]) + y = np.array([-1.0, 0.0, -0.5, -1.5]) + self.assertAlmostEqual(sweep_ripple_db(f, y, 500.0, 1800.0), 1.5, delta=0.01) + + supp = np.array([40.0, 35.0, 38.0, 42.0]) + f_worst, worst = worst_in_band(f, supp, 500.0, 1800.0) + self.assertAlmostEqual(worst, 35.0) + self.assertAlmostEqual(f_worst, 1000.0) + f_best, best = worst_in_band(f, supp, 500.0, 1800.0, best=True) + self.assertAlmostEqual(best, 42.0) + self.assertAlmostEqual(f_best, 1800.0) + + +def _per_rate(corner_192: float, corner_176: float, + lo_192: float = 200.0, lo_176: float = 200.0) -> dict: + """Minimal per-rate structure carrying just the compared corners.""" + return { + "192000": {"rate_hz": 192000, + "passband": {"corner_hi_3db_hz": corner_192, + "corner_hi_6db_hz": corner_192 * 1.1, + "corner_lo_3db_hz": lo_192}}, + "176400": {"rate_hz": 176400, + "passband": {"corner_hi_3db_hz": corner_176, + "corner_hi_6db_hz": corner_176 * 1.1, + "corner_lo_3db_hz": lo_176}}, + } + + +class TestComparisonCatchesTheBug(unittest.TestCase): + """The load-bearing tests. If these pass wrongly, the suite is useless.""" + + def test_identical_corners_pass(self): + _, checks = compare_rates(_per_rate(2760.0, 2760.0), 1.5, 8.0) + invariance = [c for c in checks if c.id.endswith(".rate_invariance")] + self.assertTrue(invariance) + self.assertTrue(all(c.passed for c in invariance), + [c.message for c in invariance if not c.passed]) + + def test_a_frozen_table_shift_fails(self): + # This is the regression the whole suite exists to catch: every corner + # scaled by 176400/192000. + shifted = _per_rate(2760.0, 2760.0 * bt.LEGACY_RATE_RATIO, + lo_176=200.0 * bt.LEGACY_RATE_RATIO) + comparison, checks = compare_rates(shifted, 1.5, 8.0) + invariance = [c for c in checks if c.id.endswith(".rate_invariance")] + self.assertTrue(all(not c.passed for c in invariance), + "a -8.125% shift must fail every rate-invariance check") + # And it must be recognised as that specific regression, not just as + # some generic drift, because that is what makes the report actionable. + hi = next(r for r in comparison["corners"] if r["id"] == "hi_3db") + self.assertTrue(hi["legacy_consistent"]) + self.assertEqual(hi["verdict"], "FAIL") + self.assertAlmostEqual(hi["delta_pct"], bt.LEGACY_DELTA_PCT, delta=0.01) + + def test_a_shift_just_inside_tolerance_passes(self): + _, checks = compare_rates(_per_rate(2760.0, 2760.0 * 1.01), 1.5, 8.0) + hi = next(c for c in checks if c.id == "corner.hi_3db.rate_invariance") + self.assertTrue(hi.passed) + + def test_a_shift_just_outside_tolerance_fails(self): + _, checks = compare_rates(_per_rate(2760.0, 2760.0 * 1.03), 1.5, 8.0) + hi = next(c for c in checks if c.id == "corner.hi_3db.rate_invariance") + self.assertFalse(hi.passed) + # A 3% drift is not the frozen-table signature and must not be labelled it. + self.assertNotIn("frozen coefficient tables", hi.message) + + def test_an_unmeasurable_corner_skips_rather_than_passes(self): + data = _per_rate(2760.0, 2760.0) + data["176400"]["passband"]["corner_hi_3db_hz"] = None + comparison, checks = compare_rates(data, 1.5, 8.0) + hi = next(c for c in checks if c.id == "corner.hi_3db.rate_invariance") + self.assertTrue(hi.skipped) + self.assertFalse(hi.passed) + row = next(r for r in comparison["corners"] if r["id"] == "hi_3db") + self.assertEqual(row["verdict"], "SKIP") + + def test_a_single_rate_produces_no_comparison(self): + one = {"192000": _per_rate(2760.0, 2760.0)["192000"]} + comparison, checks = compare_rates(one, 1.5, 8.0) + self.assertEqual(comparison["corners"], []) + self.assertEqual(checks, []) + + def test_absolute_accuracy_is_checked_on_the_high_corner(self): + # Both rates agree, but at the wrong frequency: rate invariance passes and + # the nominal check has to be the one that objects. + _, checks = compare_rates(_per_rate(2200.0, 2200.0), 1.5, 8.0) + nominal = next(c for c in checks if c.id == "corner.hi_3db.nominal") + self.assertFalse(nominal.passed) + invariance = next(c for c in checks + if c.id == "corner.hi_3db.rate_invariance") + self.assertTrue(invariance.passed) + + def test_checks_serialise_without_nan(self): + # NaN is not valid JSON and numpy bools are not serialisable; the report + # writer relies on Check.as_dict having already dealt with both. + _, checks = compare_rates(_per_rate(2760.0, float("nan")), 1.5, 8.0) + for c in checks: + d = c.as_dict() + self.assertIsInstance(d["passed"], bool) + self.assertTrue(d["value"] is None or math.isfinite(d["value"])) + + +if __name__ == "__main__": + unittest.main(verbosity=2) diff --git a/code/tools/tx_filter_hil/tests.py b/code/tools/tx_filter_hil/tests.py new file mode 100644 index 0000000..9768ea9 --- /dev/null +++ b/code/tools/tx_filter_hil/tests.py @@ -0,0 +1,902 @@ +"""The individual transmit hardware tests. + +The transmit chain is measured differently from the receive chain, and the +difference is worth stating plainly because it changes what the results mean. + +In the receive suite every response is the *difference* between two captures with +a filter engaged and bypassed, so the whole analog path cancels. Nothing in the +transmit chain can be bypassed over CAT: there is no command for the transmit +equaliser, and the two generated FIR stages either side of the Hilbert transform +are unconditional. So what is measured here is the **composite** response of the +whole chain, microphone input to exciter output, including the codec's own +front end. + +That is not the handicap it sounds like, because the criterion that matters is +rate invariance. Nothing in the analog path changes when the sample rate changes, +so it divides out of a comparison between rates just as cleanly as it would out +of a bypass difference. What the composite measurement does cost is absolute +accuracy, and every absolute check below is given a loose tolerance for that +reason. + +The bug being hunted is the same one: filters whose corners are specified in +hertz but whose coefficients were frozen for one audio rate. Run at another rate +every corner scaled by the ratio of the rates, **-8.125 %** between 176.4 and +192 ksps. The tolerance is 1.5 %, so there is a factor of five between correct +and broken. +""" + +from __future__ import annotations + +import math +import time +from dataclasses import dataclass, field +from typing import Callable, Iterable, Optional, Sequence + +import numpy as np + +from filter_hil.radio import MOD_LSB, MOD_NAMES, MOD_USB, CatError, EdSnapshot, Radio + +from . import bandtable as bt +from .ad2 import IqCapture, TxAd2 +from .measure import (IqMeasurement, corner_from_sweep, dominant_line, geom_grid, + measure_iq_tone, passband_reference_db, pct_delta, + spur_level_dbc, sweep_ripple_db, to_db, worst_in_band) + +#: Window inside which the transmit passband is taken to be flat. Above the +#: lowest equaliser cell at 198 Hz and well below the 2.76 kHz corner. +PASSBAND_LO_HZ = 500.0 +PASSBAND_HI_HZ = 1800.0 + + +@dataclass +class Check: + """One pass/fail assertion, flat enough to drop straight into a report.""" + + id: str + group: str + description: str + value: Optional[float] + limit: Optional[float] + units: str + passed: bool + skipped: bool = False + message: str = "" + + def as_dict(self) -> dict: + return { + "id": self.id, "group": self.group, "description": self.description, + "value": clean(self.value), "limit": clean(self.limit), + "units": self.units, "passed": bool(self.passed), + "skipped": bool(self.skipped), "message": self.message, + } + + +@dataclass +class TestResult: + name: str + checks: list = field(default_factory=list) + data: dict = field(default_factory=dict) + skipped: bool = False + reason: str = "" + + +def clean(x): + """JSON has no NaN; represent unmeasurable values as null.""" + if x is None: + return None + if isinstance(x, (bool, np.bool_)): + return bool(x) + if isinstance(x, (int, np.integer)): + return int(x) + return float(x) if np.isfinite(x) else None + + +@dataclass +class TxPlan: + """How the rig is wired and driven, as discovered at run time. + + ``swap`` says whether scope Ch1 is on Q rather than I, and ``sideband_sign`` + which side of DC the wanted energy lands on once that swap is applied. Both + are found by experiment rather than assumed, because both depend on how the + bench happens to be wired today and neither is knowable from the firmware. + """ + + rate_hz: int + modulation: int = MOD_USB + swap: bool = False + sideband_sign: int = 1 + amplitude_v: float = 0.05 + + @property + def audio_rate_hz(self) -> float: + return bt.audio_rate_hz(self.rate_hz) + + @property + def fold_hz(self) -> float: + return bt.fold_frequency_hz(self.rate_hz) + + +class Injector: + """Drives one microphone frequency and reads the exciter output back.""" + + def __init__(self, ad2: TxAd2, plan: TxPlan, settle_s: float, + min_snr_db: float, max_thd_db: float) -> None: + self.ad2 = ad2 + self.plan = plan + self.settle_s = settle_s + self.min_snr_db = min_snr_db + self.max_thd_db = max_thd_db + + def capture_at(self, f_audio_hz: float) -> IqCapture: + """Drive the microphone at one frequency and return the raw capture.""" + self.ad2.set_tone(f_audio_hz, self.plan.amplitude_v) + return self.ad2.capture_after(self.settle_s) + + def point(self, f_audio_hz: float) -> tuple[IqMeasurement, IqCapture]: + cap = self.capture_at(f_audio_hz) + m = measure_iq_tone(cap, f_audio_hz, swap=self.plan.swap, + sideband_sign=self.plan.sideband_sign, + scope_range_v=self.ad2.cfg.scope_range_v, + scope_offset_v=self.ad2.cfg.scope_offset_v, + min_snr_db=self.min_snr_db, + max_thd_db=self.max_thd_db) + return m, cap + + def sweep(self, freqs_hz: Iterable[float]) -> list[tuple[IqMeasurement, IqCapture]]: + return [self.point(float(f)) for f in freqs_hz] + + +def point_dict(m: IqMeasurement) -> dict: + """One measured point, in the shape the report and the plots consume.""" + d = { + "f_audio_hz": round(m.f_target_hz, 3), + "f_measured_hz": clean(m.f_measured_hz), + "level_dbv": clean(m.level_dbv), + "suppression_db": clean(m.suppression_db), + "carrier_dbc": clean(m.carrier_dbc), + "snr_db": clean(m.snr_db), + "thd_db": clean(m.thd_db), + "clipped": m.clipped, + "valid": m.valid, + } + if m.reason: + d["reason"] = m.reason + return d + + +# =========================================================================== +# T0 preflight +# =========================================================================== + +def run_preflight(radio: Radio, log: Callable[[str], None]) -> tuple[TestResult, EdSnapshot]: + """Confirm the radio answers and is in a state that can be keyed.""" + checks: list[Check] = [] + + ident = radio.expect("ID;") + checks.append(Check("rig.cat", "rig", "Radio answers on the CAT port", + None, None, "", True, message=f"ID reply {ident}")) + + ed = radio.dump_ed() + log(f"Radio: rate {ed.sample_rate_hz} sps, band {ed.current_band[ed.active_vfo]}, " + f"mode {ed.modulation_name}, mic gain {ed.mic_gain_db} dB, " + f"SSB power {ed.active_power_ssb:.0f} W") + + # TX_write only dispatches PTT_PRESSED from SSB_RECEIVE and KEY_PRESSED from + # CW_RECEIVE. A CW key-down transmits a carrier from the sidetone oscillator, + # not processed microphone audio, so it exercises none of the filters here. + # AM and SAM reach the same SSB transmit state but SidebandSelection only + # special-cases USB, so the sideband would be whatever LSB gives - measurable + # but confusing. The run forces USB or LSB either way. + ssb = ed.active_modulation in (MOD_USB, MOD_LSB) + checks.append(Check( + "rig.ssb_mode", "rig", "Radio is on a sideband mode the transmit chain " + "processes microphone audio in", + float(ed.active_modulation), None, "modulation", True, + message=(f"{ed.modulation_name}" if ssb else + f"{ed.modulation_name}; the run will switch to USB and switch " + f"back afterwards"))) + + checks.append(Check( + "rig.sample_rate_known", "rig", + "Radio reports a CAT-selectable sample rate", + float(ed.sample_rate_hz), None, "hz", + ed.sample_rate_hz in bt.SAMPLE_RATES_HZ, + message=f"{ed.sample_rate_hz} sps")) + + return TestResult("preflight", checks, {"ed": ed.summary(), "id": ident}), ed + + +# =========================================================================== +# T1 wiring and sideband +# =========================================================================== + +def detect_wiring(ad2: TxAd2, radio: Radio, plan: TxPlan, settle_s: float, + min_suppression_db: float, amplitude_v: float, + modulation: int, + log: Callable[[str], None]) -> tuple[TestResult, bool, int]: + """Find which scope input is on I, and which side of DC the sideband is on. + + Two unknowns, and unlike the receive rig they cannot be separated by trying + combinations and seeing which one produces a signal - every combination + produces a perfectly good tone. All that changes is which side of DC it lands + on, and one capture cannot tell "Ch1 is on I, upper sideband" from "Ch1 is on + Q, lower sideband". + + What separates them is the radio's own sideband switch. ``SidebandSelection`` + inverts I for USB and leaves LSB alone, so commanding USB conjugates the + transmitted signal and moves the tone to the other side of DC. Exchanging the + scope inputs conjugates it too - but the operator is not going to rewire the + bench between two captures, so the *change* between USB and LSB isolates the + radio's contribution from the wiring's. + + So: capture in LSB, capture in USB. The tone must swap sides. Which sign LSB + produced then says which input is on I. The radio is left on ``modulation``, + which is the sideband the rest of the run measures on. + """ + probe_hz = 1000.0 + # Detection runs at the approved ceiling: picking a side is a comparison + # between two strong lines, and a tone buried in noise gives an ambiguous + # sign. Auto-levelling brings the drive back down immediately afterwards. + plan.amplitude_v = amplitude_v + trials: dict[str, dict] = {} + + for mod in (MOD_LSB, MOD_USB): + radio.set_modulation(mod) + time.sleep(0.5) + ad2.set_tone(probe_hz, amplitude_v) + cap = ad2.capture_after(settle_s) + # Read the raw capture without applying a swap: the swap is what is being + # determined, and dominant_line only needs to know where the energy is. + f_signed, amp = dominant_line(cap, swap=False, + f_min_hz=probe_hz * 0.5, + f_max_hz=probe_hz * 1.5) + name = MOD_NAMES[mod] + trials[name] = { + "modulation": mod, + "f_signed_hz": clean(f_signed), + "amplitude_v": clean(amp), + "level_dbv": clean(to_db(amp)), + "sign": int(np.sign(f_signed)) if amp > 0 else 0, + } + log(f" {name}: {to_db(amp):7.1f} dBV at {f_signed:+8.1f} Hz " + f"(Ch1 taken as I)") + + lsb, usb = trials["LSB"], trials["USB"] + flipped = (lsb["sign"] != 0 and usb["sign"] != 0 + and lsb["sign"] != usb["sign"]) + + # LSB leaves I alone, so with Ch1 genuinely on I the analytic signal is + # I + jQ as built by the chain and the tone sits on the positive side. + swap = lsb["sign"] < 0 + wiring = ("Ch1 -> I, Ch2 -> Q" if not swap else + "Ch1 -> Q, Ch2 -> I (compensated in software)") + + # Settle on the sideband the run will use, and take the wanted side from a + # capture with the resolved swap in place rather than predicting it. + # SidebandSelection's inversion says USB should come out on the negative side + # once Ch1 is on I, but an inverting stage anywhere in the exciter's analog + # output would undo that without being a fault, so the sign is measured. + plan.swap = swap + plan.modulation = modulation + radio.set_modulation(modulation) + time.sleep(0.5) + ad2.set_tone(probe_hz, amplitude_v) + cap = ad2.capture_after(settle_s) + f_resolved, _ = dominant_line(cap, swap=swap, f_min_hz=probe_hz * 0.5, + f_max_hz=probe_hz * 1.5) + plan.sideband_sign = -1 if f_resolved < 0 else 1 + + # The same capture gives the suppression figure, which is the number that says + # whether both channels are really connected and in quadrature. + m = measure_iq_tone(cap, probe_hz, swap=plan.swap, + sideband_sign=plan.sideband_sign, + scope_range_v=ad2.cfg.scope_range_v, + scope_offset_v=ad2.cfg.scope_offset_v, + min_snr_db=0.0, max_thd_db=99.0) + expected_sign = -1 if modulation == MOD_USB else 1 + mod_name = MOD_NAMES[modulation] + log(f" resolved: {wiring}, wanted side " + f"{'+' if plan.sideband_sign > 0 else '-'}f in {mod_name}" + + ("" if plan.sideband_sign == expected_sign + else " (opposite to the firmware's convention - an inverting stage " + "somewhere in the exciter output)") + + f", suppression {m.suppression_db:.1f} dB") + + checks = [Check( + "rig.sideband_flip", "rig", + "Commanding the other sideband moves the transmitted tone across DC", + None, None, "", flipped, + message=("the tone changed sides between LSB and USB, so the wiring " + "order is unambiguous" if flipped else + "the tone did not change sides between LSB and USB. Either only " + "one of Ch1/Ch2 is connected, or the radio did not change " + "modulation, or it is not actually transmitting"))] + + # A single connected channel gives a real signal, whose spectrum is symmetric + # about DC: suppression near 0 dB. That is the failure this catches, and it is + # the one thing about the rig the sign test alone cannot see. + checks.append(Check( + "rig.suppression", "rig", + "Both exciter outputs are connected and in quadrature", + clean(m.suppression_db), min_suppression_db, + "db", bool(m.suppression_db >= min_suppression_db), + message=(f"{m.suppression_db:.1f} dB of opposite-sideband suppression at " + f"{probe_hz:.0f} Hz" if m.suppression_db >= min_suppression_db else + f"only {m.suppression_db:.1f} dB between the two sides of DC. A " + f"real signal - one channel missing, or both probes on the same " + f"output - reads close to 0 dB"))) + + data = { + "swap": swap, + "wiring": wiring, + "sideband_sign": plan.sideband_sign, + "sideband_sign_expected": expected_sign, + "sideband_sign_as_expected": plan.sideband_sign == expected_sign, + "sideband_flipped": flipped, + "measured_on": mod_name, + "suppression_at_1k_db": clean(m.suppression_db), + "detect_amplitude_v": amplitude_v, + "dc_ch1_v": clean(m.dc_ch1_v), + "dc_ch2_v": clean(m.dc_ch2_v), + "trials": trials, + } + return TestResult("wiring", checks, data), swap, plan.sideband_sign + + +# =========================================================================== +# T2 drive level +# =========================================================================== + +def autolevel(ad2: TxAd2, plan: TxPlan, settle_s: float, start_v: float, + max_v: float, step_db: float, min_snr_db: float, max_thd_db: float, + log: Callable[[str], None]) -> tuple[TestResult, float]: + """Find the smallest microphone drive that gives a clean measurement. + + Steps up only, and never past ``max_v``. The microphone input is a + millivolt-level port with a preamplifier in front of it, so the useful window + is narrow: too little and the tone sits in the codec's noise, too much and the + preamplifier clips and the harmonics contaminate the fold-back test. + + Distortion is what stops the search, not just noise. Unlike the receive rig - + where the harmonic bins hold receiver noise as much as any real distortion - + the transmit measurement is taken straight off a DAC and its THD figure is + trustworthy, so it is used as the ceiling. + """ + probe_hz = 1000.0 + amplitude = start_v + trials = [] + chosen = None + + while amplitude <= max_v * 1.0001: + plan.amplitude_v = amplitude + ad2.set_tone(probe_hz, amplitude) + cap = ad2.capture_after(settle_s) + m = measure_iq_tone(cap, probe_hz, swap=plan.swap, + sideband_sign=plan.sideband_sign, + scope_range_v=ad2.cfg.scope_range_v, + scope_offset_v=ad2.cfg.scope_offset_v, + min_snr_db=min_snr_db, max_thd_db=max_thd_db, + thd_invalidates=True) + trials.append({"amplitude_v": round(amplitude, 6), **point_dict(m)}) + log(f" {amplitude*1000:6.1f} mV -> {m.level_dbv:6.1f} dBV, " + f"SNR {m.snr_db:5.1f} dB, THD {m.thd_db:6.1f} dB, " + f"suppression {m.suppression_db:5.1f} dB, peak {m.peak_v:.3f} V") + + if m.snr_db >= min_snr_db and m.thd_db <= max_thd_db and not m.clipped: + chosen = amplitude + break + amplitude *= 10.0 ** (step_db / 20.0) + + if chosen is None: + chosen = min(amplitude, max_v) + msg = (f"never reached {min_snr_db:.0f} dB SNR at under {max_thd_db:.0f} dB " + f"THD below {max_v*1000:.0f} mV; raise --max-amplitude, or the " + f"radio's mic gain with --mic-gain") + passed = False + else: + msg = f"{chosen*1000:.1f} mV" + passed = True + plan.amplitude_v = chosen + + check = Check("rig.drive_level", "rig", + "A microphone drive giving adequate SNR without distorting", + chosen * 1000.0, max_v * 1000.0, "mv", passed, message=msg) + return TestResult("autolevel", [check], {"amplitude_v": chosen, + "trials": trials}), chosen + + +# =========================================================================== +# T3 passband +# =========================================================================== + +def test_passband(inj: Injector, grid_hz: np.ndarray, nominal_tol_pct: float, + log: Callable[[str], None]) -> TestResult: + """Sweep the transmit audio response and extract its corners. + + This is the headline measurement. The high corner is set by + ``TXInterpolateBy2Again``'s filter, specified as 3039.6 Hz at -6 dB and + landing near 2.76 kHz at -3 dB, which is one of the two stages regenerated per + sample rate. The low corner is set by the equaliser bank, whose lowest cell + sits at 198 Hz and which is regenerated too. + + Both are measured as composites, with the codec's own response and the + microphone input's AC coupling in series and no way to divide them out. The + absolute checks are loose for that reason. The rate comparison in + :func:`compare_rates` is not, and is where the answer actually comes from. + """ + points = [] + freqs, levels, suppression, carrier = [], [], [], [] + + for f in grid_hz: + m, _ = inj.point(float(f)) + points.append(point_dict(m)) + if m.valid: + freqs.append(float(f)) + levels.append(m.level_dbv) + suppression.append(m.suppression_db) + carrier.append(m.carrier_dbc) + + ref_db = passband_reference_db(freqs, levels, PASSBAND_LO_HZ, PASSBAND_HI_HZ) + ripple = sweep_ripple_db(freqs, levels, PASSBAND_LO_HZ, PASSBAND_HI_HZ) + mid = 0.5 * (PASSBAND_LO_HZ + PASSBAND_HI_HZ) + + hi_3db = corner_from_sweep(freqs, levels, ref_db - 3.0, side="high", from_hz=mid) + hi_6db = corner_from_sweep(freqs, levels, ref_db - 6.0, side="high", from_hz=mid) + lo_3db = corner_from_sweep(freqs, levels, ref_db - 3.0, side="low", from_hz=mid) + + log(f" passband reference {ref_db:.1f} dBV, ripple {ripple:.2f} dB") + log(f" -3 dB corners: {lo_3db:.1f} Hz low, {hi_3db:.1f} Hz high " + f"(-6 dB at {hi_6db:.1f} Hz)") + + checks: list[Check] = [] + valid_in_band = [p for p in points + if PASSBAND_LO_HZ <= p["f_audio_hz"] <= PASSBAND_HI_HZ + and p["valid"]] + in_band = [p for p in points + if PASSBAND_LO_HZ <= p["f_audio_hz"] <= PASSBAND_HI_HZ] + frac = len(valid_in_band) / len(in_band) if in_band else 0.0 + checks.append(Check( + "passband.coverage", "passband", + "Most of the passband gives a usable measurement", + 100.0 * frac, 95.0, "percent", frac >= 0.95, + message=f"{len(valid_in_band)}/{len(in_band)} points valid between " + f"{PASSBAND_LO_HZ:.0f} and {PASSBAND_HI_HZ:.0f} Hz")) + + # A passband flat to a small fraction of a decibel across an octave and a + # half is not a passband, it is a limiter. The equaliser's reconstruction + # ripples by a few tenths of a decibel, so some variation is expected. + checks.append(Check( + "passband.ripple", "passband", + "Transmit passband is flat, but not suspiciously flat", + clean(ripple), 3.0, "db", + bool(np.isfinite(ripple) and ripple <= 3.0), + message=(f"{ripple:.2f} dB peak to peak" if np.isfinite(ripple) + else "not measured"))) + + nominal_hi = bt.TX_AUDIO_CORNER_3DB_HZ + hi_err = pct_delta(nominal_hi, hi_3db) + checks.append(Check( + "passband.hi_corner_nominal", "passband", + f"High corner is near the {nominal_hi:.0f} Hz the offline stage " + f"measurement gives", + clean(hi_err), nominal_tol_pct, "percent", + bool(np.isfinite(hi_err) and abs(hi_err) <= nominal_tol_pct), + skipped=not np.isfinite(hi_3db), + message=(f"{hi_3db:.1f} Hz measured against {nominal_hi:.0f} Hz " + f"({hi_err:+.1f}%); the equaliser bank is in series and cannot " + f"be taken out over CAT" if np.isfinite(hi_3db) + else "no -3 dB crossing inside the sweep"))) + + nominal_lo = bt.TX_AUDIO_LOW_CORNER_HZ + checks.append(Check( + "passband.lo_corner_sane", "passband", + f"Low corner is somewhere near the {nominal_lo:.0f} Hz lowest " + f"equaliser cell", + clean(lo_3db), None, "hz", + bool(np.isfinite(lo_3db) and 100.0 <= lo_3db <= 400.0), + skipped=not np.isfinite(lo_3db), + message=(f"{lo_3db:.1f} Hz; the microphone input's AC coupling is in " + f"series with the equaliser here, so this is a sanity bound " + f"rather than a specification" if np.isfinite(lo_3db) + else "no -3 dB crossing below the passband inside the sweep"))) + + return TestResult("passband", checks, { + "points": points, + "reference_dbv": clean(ref_db), + "ripple_db": clean(ripple), + "corner_lo_3db_hz": clean(lo_3db), + "corner_hi_3db_hz": clean(hi_3db), + "corner_hi_6db_hz": clean(hi_6db), + "passband_window_hz": [PASSBAND_LO_HZ, PASSBAND_HI_HZ], + "suppression_points": [{"f_audio_hz": round(f, 2), "suppression_db": clean(s)} + for f, s in zip(freqs, suppression)], + "carrier_points": [{"f_audio_hz": round(f, 2), "carrier_dbc": clean(c)} + for f, c in zip(freqs, carrier)], + }) + + +# =========================================================================== +# T4 sideband suppression +# =========================================================================== + +def test_sideband_suppression(passband: TestResult, rate_hz: int, + min_suppression_db: float, + log: Callable[[str], None]) -> TestResult: + """Judge the opposite-sideband suppression measured during the sweep. + + No extra captures: suppression comes free with every point of the passband + sweep, because both sides of DC are present in the same complex spectrum. + + What this measures is the Hilbert transform's quadrature accuracy, the per-band + I/Q amplitude and phase correction, and any gain difference between the two + exciter outputs - lumped together, because from the exciter's terminals they + are not separable. + + Unlike everything else here, this is checked against a **floor** rather than + for rate invariance. The Hilbert table is not regenerated per rate, and that + is correct: a Hilbert transformer's usable band is a fraction of its sample + rate, so one fixed table is the same design at any rate and its edges are + *meant* to move with Fs. Requiring the suppression curve to hold still in + hertz would fail correct firmware. + """ + pts = passband.data.get("suppression_points", []) + freqs = [p["f_audio_hz"] for p in pts] + supp = [p["suppression_db"] for p in pts] + + f_worst, worst = worst_in_band(freqs, supp, PASSBAND_LO_HZ, + bt.TX_AUDIO_CORNER_3DB_HZ) + f_best, best = worst_in_band(freqs, supp, PASSBAND_LO_HZ, + bt.TX_AUDIO_CORNER_3DB_HZ, best=True) + log(f" worst {worst:.1f} dB at {f_worst:.0f} Hz, " + f"best {best:.1f} dB at {f_best:.0f} Hz") + + checks = [Check( + "sideband.worst", "sideband", + "Opposite sideband is suppressed across the transmit passband", + clean(worst), min_suppression_db, "db", + bool(np.isfinite(worst) and worst >= min_suppression_db), + skipped=not np.isfinite(worst), + message=(f"worst case {worst:.1f} dB at {f_worst:.0f} Hz" + if np.isfinite(worst) else "not measured"))] + + return TestResult("sideband_suppression", checks, { + "worst_db": clean(worst), + "worst_at_hz": clean(f_worst), + "best_db": clean(best), + "best_at_hz": clean(f_best), + "hilbert_band_hz": list(bt.hilbert_band_hz(rate_hz)), + "points": pts, + }) + + +# =========================================================================== +# T5 out-of-band rejection and fold-back +# =========================================================================== + +#: How close to the measured noise floor a spur reading may sit before it is +#: reported as floor limited rather than as a real level. +FLOOR_MARGIN_DB = 3.0 + + +def measure_noise_floor_dbc(ad2: TxAd2, plan: TxPlan, settle_s: float, + reference_v: float, probe_hz: Sequence[float]) -> float: + """Spur level the rig reads with nothing driving the microphone. + + Measured exactly the way a spur is measured - the same windowed peak search + over the same width - so the two are directly comparable. Without this a + reading of "-33 dBc" is ambiguous: it could be a real product or it could be + the floor, and the difference decides whether a pass means anything. + """ + ad2.set_tone(1000.0, 0.0) + cap = ad2.capture_after(settle_s) + levels = [spur_level_dbc(cap, plan.swap, f, reference_v) for f in probe_hz] + finite = [v for v in levels if np.isfinite(v)] + return max(finite) if finite else float("nan") + + +def test_alias(inj: Injector, plan: TxPlan, reference_v: float, + grid_hz: np.ndarray, min_rejection_db: float, + max_fold_dbc: float, log: Callable[[str], None]) -> TestResult: + """Drive the microphone above the passband and look for what comes through. + + Two different things happen depending on where the probe sits, and they are + checked over different frequency ranges rather than lumped together: + + * **Direct rejection**, between the stopband boundary and the fold point. + Here the tone can still reach the output at its own frequency and must be + attenuated. Below :data:`bandtable.TX_STOPBAND_FROM_HZ` it is on the + transition skirt - the cascade is only about 20 dB down at 3.45 kHz, and + correctly so - which is why the sweep starts where the stopband starts. + * **Fold-back**, above the fold point. ``TXDecimateBy2Again`` halves the + audio rate, so a tone above a quarter of that rate cannot appear at its own + frequency at all: it can only reappear folded, at 192 ksps a microphone + tone at 8 kHz landing on 4 kHz. This is the failure ``TX_DECIMATE3_FC_HZ`` + was added to fix - the table it replaced was flat well past the fold point. + The fold frequencies scale with the sample rate, so where to look changes + per rate. + + Both are read against the rig's own noise floor, measured with the microphone + silent, and reported as floor limited when they sit on it. + + One honest caveat, which the report repeats: the equaliser bank runs *before* + the decimator and its highest cell is at 4 kHz, so it attenuates an 8 kHz + input substantially on its own. A clean result here therefore proves nothing + folds back into the transmitted audio - which is what matters operationally - + but it does not by itself prove the decimator's own stopband is intact. The + offline test ``TransmitChain176k.DecimatorStopsBeforeTheFoldPoint`` covers + that directly, by evaluating the tap set at the fold point. + """ + points = [] + checks: list[Check] = [] + fold = plan.fold_hz + nyquist = bt.nyquist_after_fold_hz(plan.rate_hz) + + floor_dbc = measure_noise_floor_dbc( + inj.ad2, plan, inj.settle_s, reference_v, + [0.35 * nyquist, 0.6 * nyquist, 0.85 * nyquist]) + log(f" noise floor {floor_dbc:.1f} dBc with the microphone silent") + + worst_direct = -999.0 + worst_direct_at = float("nan") + worst_fold = -999.0 + worst_fold_at = float("nan") + + for f in grid_hz: + f = float(f) + m, cap = inj.point(f) + + # Above the fold point there is nothing at f to measure: the stream after + # the decimation does not reach that far. Only the folded product exists. + folds = f > nyquist + direct_dbc = (m.level_dbv - to_db(reference_v)) if not folds else float("nan") + + f_alias = bt.alias_of_hz(f, plan.rate_hz) + fold_dbc = (spur_level_dbc(cap, plan.swap, f_alias, reference_v) + if folds and abs(f_alias - f) > 100.0 else float("nan")) + + points.append({ + "f_audio_hz": round(f, 2), + "region": "fold" if folds else "direct", + "direct_dbc": clean(direct_dbc), + "f_alias_hz": clean(f_alias) if folds else None, + "fold_dbc": clean(fold_dbc), + "snr_db": clean(m.snr_db), + "clipped": m.clipped, + }) + if folds: + log(f" {f:7.0f} Hz -> folds to {f_alias:6.0f} Hz at " + f"{fold_dbc:7.1f} dBc") + else: + log(f" {f:7.0f} Hz -> direct {direct_dbc:7.1f} dBc") + + if np.isfinite(direct_dbc) and direct_dbc > worst_direct: + worst_direct, worst_direct_at = direct_dbc, f + if np.isfinite(fold_dbc) and fold_dbc > worst_fold: + worst_fold, worst_fold_at = fold_dbc, f + + def floor_limited(value: float) -> bool: + return bool(np.isfinite(floor_dbc) and np.isfinite(value) + and value <= floor_dbc + FLOOR_MARGIN_DB) + + if worst_direct > -998.0: + limited = floor_limited(worst_direct) + checks.append(Check( + "alias.direct_rejection", "alias", + f"Microphone audio between {bt.TX_STOPBAND_FROM_HZ:.0f} Hz and the " + f"{nyquist:.0f} Hz fold point is not transmitted", + clean(worst_direct), -min_rejection_db, "dbc", + bool(worst_direct <= -min_rejection_db), + message=f"worst {worst_direct:.1f} dBc at {worst_direct_at:.0f} Hz " + f"(limit {-min_rejection_db:.0f} dBc" + + (f", at the {floor_dbc:.1f} dBc noise floor, so the true " + f"rejection is greater" if limited else "") + + f"). The design predicts about " + f"{bt.TX_STOPBAND_PREDICTED_DB:.0f} dB here")) + else: + checks.append(Check( + "alias.direct_rejection", "alias", + "Microphone audio above the transmit passband is not transmitted", + None, -min_rejection_db, "dbc", True, skipped=True, + message=f"no probe frequency fell between " + f"{bt.TX_STOPBAND_FROM_HZ:.0f} Hz and the {nyquist:.0f} Hz " + f"fold point")) + + if worst_fold > -998.0: + limited = floor_limited(worst_fold) + checks.append(Check( + "alias.fold_back", "alias", + f"Nothing folds back into the passband when the audio rate halves " + f"about {fold/2:.0f} Hz", + clean(worst_fold), max_fold_dbc, "dbc", + bool(worst_fold <= max_fold_dbc), + message=f"worst fold-back product {worst_fold:.1f} dBc, from a " + f"{worst_fold_at:.0f} Hz input landing at " + f"{bt.alias_of_hz(worst_fold_at, plan.rate_hz):.0f} Hz " + f"(limit {max_fold_dbc:.0f} dBc" + + (f", at the {floor_dbc:.1f} dBc noise floor, so nothing " + f"measurable folded" if limited else "") + ")")) + else: + checks.append(Check( + "alias.fold_back", "alias", + "Nothing folds back into the passband when the audio rate halves", + None, max_fold_dbc, "dbc", True, skipped=True, + message=f"no probe frequency above the {nyquist:.0f} Hz fold point " + f"produced a measurable product")) + + return TestResult("alias", checks, { + "points": points, + "reference_v": clean(reference_v), + "noise_floor_dbc": clean(floor_dbc), + "fold_hz": clean(fold), + "nyquist_after_fold_hz": clean(nyquist), + "stopband_from_hz": bt.TX_STOPBAND_FROM_HZ, + "worst_direct_dbc": clean(worst_direct) if worst_direct > -998.0 else None, + "worst_direct_at_hz": clean(worst_direct_at), + "worst_direct_floor_limited": floor_limited(worst_direct), + "worst_fold_dbc": clean(worst_fold) if worst_fold > -998.0 else None, + "worst_fold_at_hz": clean(worst_fold_at), + "worst_fold_floor_limited": floor_limited(worst_fold), + }) + + +# =========================================================================== +# T6 carrier leakage +# =========================================================================== + +def test_carrier(passband: TestResult, max_carrier_dbc: float, + log: Callable[[str], None]) -> TestResult: + """Judge the DC sitting on the exciter outputs. + + ``PlayIQData`` adds ``ED.DCOffsetI`` and ``DCOffsetQ`` to every block to null + the transmitter's carrier, so DC on these outputs is deliberate and its + residual is what the carrier calibration achieved. Nothing about it is + sample-rate dependent, so this is reported as a diagnostic and checked only + against a generous ceiling - a large residue here would raise the noise floor + of every other measurement in the run. + """ + pts = passband.data.get("carrier_points", []) + values = [p["carrier_dbc"] for p in pts if p["carrier_dbc"] is not None] + worst = max(values) if values else float("nan") + median = float(np.median(values)) if values else float("nan") + log(f" carrier residue {median:.1f} dBc median, {worst:.1f} dBc worst") + + checks = [Check( + "carrier.residue", "carrier", + "Carrier nulling leaves the exciter outputs close to their bias", + clean(worst), max_carrier_dbc, "dbc", + bool(np.isfinite(worst) and worst <= max_carrier_dbc), + skipped=not np.isfinite(worst), + message=(f"worst {worst:.1f} dBc, median {median:.1f} dBc relative to the " + f"transmitted tone" if np.isfinite(worst) else "not measured"))] + + return TestResult("carrier", checks, { + "worst_dbc": clean(worst), + "median_dbc": clean(median), + "points": pts, + }) + + +# =========================================================================== +# Cross-rate comparison - the headline result +# =========================================================================== + +def _compare_scalar(label: str, group: str, ident: str, per_rate: dict, + extract: Callable[[dict], Optional[float]], + nominal_hz: Optional[float], rate_tol_pct: float, + nominal_tol_pct: float) -> tuple[Optional[dict], list]: + """Compare one scalar frequency across sample rates.""" + rates = sorted(per_rate) + if len(rates) < 2: + return None, [] + + base_rate = max(rates) # 192000 is the historical reference + other_rates = [r for r in rates if r != base_rate] + + measured = {r: extract(per_rate[r]) for r in rates} + base_val = measured[base_rate] + worst_delta = 0.0 + measurable = base_val is not None + + for r in other_rates: + val = measured[r] + if val is None or base_val is None: + measurable = False + continue + d = pct_delta(base_val, val) + if abs(d) > abs(worst_delta): + worst_delta = d + + legacy_consistent = (measurable + and abs(worst_delta - bt.LEGACY_DELTA_PCT) < 2.0) + nominal_err = (pct_delta(nominal_hz, base_val) + if base_val is not None and nominal_hz else float("nan")) + + row = { + "id": ident, + "label": label, + "nominal_hz": nominal_hz, + "value_hz": {str(r): clean(measured[r]) for r in rates}, + "delta_pct": clean(worst_delta) if measurable else None, + "legacy_predicted_delta_pct": bt.LEGACY_DELTA_PCT, + "legacy_consistent": legacy_consistent, + "nominal_error_pct": clean(nominal_err), + "verdict": ("PASS" if measurable and abs(worst_delta) <= rate_tol_pct + else "SKIP" if not measurable else "FAIL"), + } + + msg = (f"{base_val:.1f} Hz at {base_rate} sps vs " + f"{measured[other_rates[0]]:.1f} Hz at {other_rates[0]} sps" + if measurable else "not measured at both rates") + if legacy_consistent: + msg += (f" - this matches the {bt.LEGACY_DELTA_PCT:.3f}% shift the frozen " + f"coefficient tables used to produce") + + checks = [Check( + f"{group}.{ident}.rate_invariance", group, + f"{label} holds across sample rates", + clean(worst_delta) if measurable else None, rate_tol_pct, "percent", + bool(measurable and abs(worst_delta) <= rate_tol_pct), + skipped=not measurable, message=msg)] + + if measurable and nominal_hz: + checks.append(Check( + f"{group}.{ident}.nominal", group, + f"{label} is near its expected {nominal_hz:.0f} Hz", + clean(nominal_err), nominal_tol_pct, "percent", + bool(np.isfinite(nominal_err) and abs(nominal_err) <= nominal_tol_pct), + message=f"measured {base_val:.1f} Hz against {nominal_hz:.0f} Hz")) + + return row, checks + + +def compare_rates(per_rate: dict, rate_tol_pct: float, + nominal_tol_pct: float) -> tuple[dict, list]: + """Roll every per-rate measurement up into the cross-rate verdict.""" + comparison: dict = {"corners": []} + checks: list[Check] = [] + + for ident, label, key, nominal in ( + ("hi_3db", "Transmit audio high corner (-3 dB)", + "corner_hi_3db_hz", bt.TX_AUDIO_CORNER_3DB_HZ), + ("hi_6db", "Transmit audio high corner (-6 dB)", + "corner_hi_6db_hz", None), + ("lo_3db", "Transmit audio low corner (-3 dB)", + "corner_lo_3db_hz", bt.TX_AUDIO_LOW_CORNER_HZ)): + row, row_checks = _compare_scalar( + label, "corner", ident, per_rate, + extract=lambda d, k=key: d.get("passband", {}).get(k), + nominal_hz=nominal, rate_tol_pct=rate_tol_pct, + # The low corner has the microphone input's AC coupling in series and + # the -6 dB corner has no independently measured reference, so only + # the -3 dB high corner is judged on absolute accuracy at full + # strength. + nominal_tol_pct=nominal_tol_pct if ident == "hi_3db" else 25.0) + if row is not None: + comparison["corners"].append(row) + checks += row_checks + + # Sideband suppression is not compared for rate invariance in hertz - the + # Hilbert table is meant to scale with Fs - but a large change in the worst + # case between rates still says something went wrong, so it is reported. + supp = {r: per_rate[r].get("sideband_suppression", {}).get("worst_db") + for r in per_rate} + if len([v for v in supp.values() if v is not None]) > 1: + rates = sorted(supp) + base = max(rates) + other = [r for r in rates if r != base][0] + comparison["sideband_suppression"] = { + "worst_db": {str(r): clean(supp[r]) for r in rates}, + "delta_db": clean(supp[other] - supp[base]), + } + + fold = {r: per_rate[r].get("alias", {}).get("worst_fold_dbc") for r in per_rate} + if any(v is not None for v in fold.values()): + comparison["fold_back"] = {"worst_dbc": {str(r): clean(fold[r]) + for r in sorted(fold)}} + + carrier = {r: per_rate[r].get("carrier", {}).get("worst_dbc") for r in per_rate} + if any(v is not None for v in carrier.values()): + comparison["carrier"] = {"worst_dbc": {str(r): clean(carrier[r]) + for r in sorted(carrier)}} + + return comparison, checks diff --git a/code/tools/tx_filter_hil/tx_filter_hil_test.py b/code/tools/tx_filter_hil/tx_filter_hil_test.py new file mode 100644 index 0000000..9130a5d --- /dev/null +++ b/code/tools/tx_filter_hil/tx_filter_hil_test.py @@ -0,0 +1,520 @@ +#!/usr/bin/env python3 +"""Verify the Phoenix transmit filters hold their frequencies across sample rates. + +Injects a tone into the radio's microphone input with an Analog Discovery 2, +captures the exciter's I and Q outputs synchronously, and measures where the +transmit audio filters actually sit - at every sample rate under test. + + W1 -> the radio's microphone input + Scope Ch1 -> exciter I output (order is auto-detected) + Scope Ch2 -> exciter Q output + /dev/ttyACM1 -> CAT control at 38400 + /dev/ttyACM0 -> diagnostic port at 115200 (needed for the ED settings dump) + +The radio is keyed over CAT for the duration of each sweep. Nothing here limits +RF output, so run it with the exciter feeding the scope only, or with a dummy +load fitted. + +Exit codes: 0 pass, 1 fail, 2 error (no hardware, or preflight refused to run), +3 aborted (radio may be left keyed - the suite unkeys on the way out, but check). + +See README.md for wiring detail and how to read the output. +""" + +from __future__ import annotations + +import argparse +import os +import sys +import time + +import numpy as np + +# Allow running as a script from anywhere, not only as a package module. The +# parent directory has to be on the path either way: this suite imports the CAT +# plumbing and the scalar curve fitting from the sibling filter_hil package. +_TOOLS_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +if _TOOLS_DIR not in sys.path: + sys.path.insert(0, _TOOLS_DIR) + +if __package__ in (None, ""): + from tx_filter_hil import bandtable as bt + from tx_filter_hil import report as report_mod + from tx_filter_hil import tests as T + from tx_filter_hil.ad2 import DwfError, TxAd2, TxAd2Config + from tx_filter_hil.measure import geom_grid +else: + from . import bandtable as bt + from . import report as report_mod + from . import tests as T + from .ad2 import DwfError, TxAd2, TxAd2Config + from .measure import geom_grid + +from filter_hil.radio import (MOD_LSB, MOD_USB, CatError, Radio, # noqa: E402 + RadioStateGuard) + +REPO_ROOT = os.path.dirname(os.path.dirname(_TOOLS_DIR)) +ALL_TESTS = ("wiring", "level", "passband", "sideband", "alias", "carrier") +DEFAULT_TESTS = ALL_TESTS + + +def build_parser() -> argparse.ArgumentParser: + p = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + + g = p.add_argument_group("selection") + g.add_argument("--rates", default="192000,176400", + help="sample rates to test, in order (default: %(default)s)") + g.add_argument("--tests", default=",".join(DEFAULT_TESTS), + help=f"tests to run, from {','.join(ALL_TESTS)} " + f"(default: %(default)s)") + g.add_argument("--modulation", choices=("usb", "lsb"), default="usb", + help="sideband to transmit on for the run (default: %(default)s)") + + g = p.add_argument_group("serial") + g.add_argument("--cat-port", default="/dev/ttyACM1") + g.add_argument("--diag-port", default="/dev/ttyACM0") + g.add_argument("--cat-baud", type=int, default=38400) + g.add_argument("--diag-baud", type=int, default=115200) + g.add_argument("--cat-timeout", type=float, default=0.5) + + g = p.add_argument_group("analog discovery") + g.add_argument("--scope-rate", type=float, default=100000.0, + help="scope sample rate, Hz. Deliberately not a divisor of the " + "radio's 192 kHz output rate, so DAC images do not alias " + "onto the measured tone (default: %(default)s)") + g.add_argument("--capture", type=float, default=0.25, + help="seconds per capture (default: %(default)s)") + g.add_argument("--scope-range", type=float, default=5.0, + help="scope input range, volts peak to peak (default: %(default)s)") + g.add_argument("--scope-offset", type=float, default=1.6, + help="scope input offset, volts. The exciter outputs sit on a " + "DC bias near this (default: %(default)s)") + g.add_argument("--awg-offset", type=float, default=0.0) + g.add_argument("--force-swap", choices=("yes", "no"), default=None, + help="skip wiring detection and force whether Ch1 is on Q") + g.add_argument("--force-sideband", type=int, choices=(1, -1), default=None, + help="force which side of DC the wanted energy is on") + + g = p.add_argument_group("drive level") + g.add_argument("--start-amplitude", type=float, default=0.005, + help="initial AWG amplitude into the mic input, volts peak " + "(default: %(default)s)") + g.add_argument("--max-amplitude", type=float, default=0.25, + help="never drive the microphone input harder than this, volts " + "peak. It is a millivolt-level port with a preamplifier " + "in front of it (default: %(default)s)") + g.add_argument("--amp-step-db", type=float, default=3.0) + g.add_argument("--min-snr", type=float, default=25.0, + help="a point below this is not used in fits (default: %(default)s)") + g.add_argument("--max-thd", type=float, default=-30.0, + help="stop raising the drive once distortion passes this " + "(default: %(default)s)") + g.add_argument("--mic-gain", type=float, default=None, + help="set the radio's mic gain to this many dB for the run, " + "-40 to +30. Default: leave it alone") + + g = p.add_argument_group("timing") + g.add_argument("--settle", type=float, default=0.25, + help="seconds after changing the tone (default: %(default)s)") + g.add_argument("--rate-settle", type=float, default=2.0, + help="seconds after a sample rate change (default: %(default)s)") + g.add_argument("--ptt-settle", type=float, default=1.0, + help="seconds after keying before the first capture " + "(default: %(default)s)") + g.add_argument("--passband-points", type=int, default=41, + help="points in the passband sweep, 100 Hz to 4 kHz " + "(default: %(default)s)") + g.add_argument("--alias-points", type=int, default=17, + help="points in the out-of-band sweep (default: %(default)s)") + + g = p.add_argument_group("tolerances") + g.add_argument("--rate-tol-pct", type=float, default=2.5, + help="primary criterion: how far a corner may move between " + "rates. Looser than the receive suite's 1.5 because both " + "generated transmit stages are 48-tap Kaiser designs, " + "which do not scale exactly: evaluating the tap sets " + "directly gives 1.2%% of movement on a correct radio, and " + "the firmware's own offline test allows 2%%. The bug being " + "hunted is -8.125%% (default: %(default)s)") + g.add_argument("--nominal-tol-pct", type=float, default=8.0, + help="secondary: distance from the offline stage measurement. " + "Loose because the equaliser bank and the codec front end " + "are in series and cannot be removed (default: %(default)s)") + g.add_argument("--min-suppression", type=float, default=25.0, + help="required opposite-sideband suppression across the " + "passband, dB (default: %(default)s)") + g.add_argument("--min-oob-rejection", type=float, default=30.0, + help="required rejection of microphone audio between the " + "stopband boundary and the fold point, dB. The design " + "predicts about 52 dB there, so this leaves margin " + "against a regression while staying clear of the rig's " + "own noise floor (default: %(default)s)") + g.add_argument("--max-fold-dbc", type=float, default=-50.0, + help="loudest fold-back product allowed, dBc (default: %(default)s)") + g.add_argument("--max-carrier-dbc", type=float, default=-20.0, + help="loudest carrier residue allowed, dBc (default: %(default)s)") + + g = p.add_argument_group("output") + g.add_argument("--out-dir", default=None, + help="default: results/ next to this script") + g.add_argument("--prefix", default="tx_filter_hil") + g.add_argument("--json", default=None) + g.add_argument("--markdown", default=None) + g.add_argument("--no-plots", action="store_true") + g.add_argument("-v", "--verbose", action="store_true") + g.add_argument("-q", "--quiet", action="store_true") + + g = p.add_argument_group("safety") + g.add_argument("--no-restore", action="store_true", + help="leave the radio in the test configuration") + g.add_argument("--dry-run", action="store_true", + help="validate arguments and the report path without hardware") + return p + + +def run(args, argv) -> int: + started = time.monotonic() + quiet = args.quiet + + def log(msg: str = "") -> None: + if not quiet: + print(msg, file=sys.stderr) + + out_dir = args.out_dir or os.path.join(os.path.dirname(os.path.abspath(__file__)), + "results") + stamp = time.strftime("%Y%m%d_%H%M%S") + json_path = args.json or os.path.join(out_dir, f"{args.prefix}_{stamp}.json") + md_path = args.markdown or os.path.join(out_dir, f"{args.prefix}_{stamp}.md") + + rates = [int(r) for r in args.rates.split(",") if r.strip()] + selected = [t.strip() for t in args.tests.split(",") if t.strip()] + modulation = MOD_USB if args.modulation == "usb" else MOD_LSB + + for r in rates: + if r not in bt.SAMPLE_RATES_HZ: + print(f"error: {r} is not a CAT-selectable sample rate " + f"(choose from {bt.SAMPLE_RATES_HZ})", file=sys.stderr) + return 2 + unknown = [t for t in selected if t not in ALL_TESTS] + if unknown: + print(f"error: unknown test(s) {', '.join(unknown)}; choose from " + f"{', '.join(ALL_TESTS)}", file=sys.stderr) + return 2 + if args.mic_gain is not None and not -40.0 <= args.mic_gain <= 30.0: + print(f"error: --mic-gain {args.mic_gain} is outside the -40 to +30 dB " + f"the MG command covers", file=sys.stderr) + return 2 + + if args.scope_rate > 250000: + log("WARNING: scope rates above 250 kHz drop samples in record mode.") + if abs(192000.0 % args.scope_rate) < 1.0 or abs(176400.0 % args.scope_rate) < 1.0: + log(f"WARNING: {args.scope_rate:.0f} Hz divides one of the radio's output " + f"rates. Exciter DAC images will alias onto the measured tone and " + f"limit the sideband suppression that can be read.") + + config = {k: v for k, v in vars(args).items()} + config["resolved"] = {"json": json_path, "markdown": md_path, + "rates": rates, "tests": selected} + + if args.dry_run: + doc = report_mod.build_tx_document( + provenance=report_mod.collect_provenance(argv, REPO_ROOT), + config=config, rig={}, baseline={}, final={}, state_restored=True, + residual_diff={}, per_rate={}, comparison={}, checks=[], + duration_s=time.monotonic() - started, + warnings=["dry run: no hardware touched"]) + report_mod.write_json(doc, json_path) + report_mod.write_markdown(doc, md_path) + print(f"Dry run OK. Wrote {json_path} and {md_path}") + return 0 + + warnings: list[str] = [] + per_rate: dict = {} + all_checks: list = [] + rig: dict = {} + baseline_summary: dict = {} + final_summary: dict = {} + residual: dict = {} + restored = False + key_down_s = 0.0 + + cfg = TxAd2Config(scope_rate_hz=args.scope_rate, capture_s=args.capture, + scope_range_v=args.scope_range, + scope_offset_v=args.scope_offset, + awg_offset_v=args.awg_offset) + + try: + with TxAd2(cfg, log=log) as ad2, Radio( + args.cat_port, args.diag_port, args.cat_baud, args.diag_baud, + args.cat_timeout, log=log) as radio: + + ad2.configure_scope() + + log("\n== Preflight ==") + pre, ed = T.run_preflight(radio, log) + all_checks += pre.checks + baseline_summary = dict(pre.data["ed"]) + baseline_summary["id"] = pre.data["id"] + + if ed.sample_rate_hz not in bt.SAMPLE_RATES_HZ: + print(f"error: radio reports sample rate {ed.sample_rate_hz}, which " + f"this suite cannot restore. Set it from the menu first.", + file=sys.stderr) + return 2 + + keyed = False + key_down_start = 0.0 + + def key() -> None: + nonlocal keyed, key_down_start + if not keyed: + radio.ptt_press(args.ptt_settle) + key_down_start = time.monotonic() + keyed = True + + def unkey() -> None: + """Drop PTT and account for the time spent transmitting.""" + nonlocal keyed, key_down_s + if keyed: + key_down_s += time.monotonic() - key_down_start + keyed = False + radio.ptt_release() + + with RadioStateGuard(radio, ed, log=log) as guard: + if args.no_restore: + guard.restored = True # registered restores will be skipped + + guard.on_restore("sample rate", + lambda r=ed.sample_rate_hz: radio.set_sample_rate( + r, args.rate_settle)) + mod0 = ed.active_modulation + guard.on_restore("modulation", lambda m=mod0: radio.set_modulation(m)) + if args.mic_gain is not None: + guard.on_restore( + "mic gain", + lambda v=ed.mic_gain_db: radio.set_mic_gain_pct( + Radio.mic_gain_pct_from_db(v))) + radio.set_mic_gain_pct(Radio.mic_gain_pct_from_db(args.mic_gain)) + log(f"Mic gain set to {args.mic_gain:.0f} dB " + f"(was {ed.mic_gain_db} dB)") + + # Registered last so it runs *first*: RadioStateGuard replays its + # restores newest to oldest, and every restore above assumes the + # radio is receiving. Changing the sample rate mid-transmission in + # particular reconfigures the I2S clock under a running chain. + guard.on_restore("transmit off", unkey) + + # TXGain scales the exciter output by a factor derived from the + # requested power, so a power change mid-run would move every + # level measured. It is read, reported and left alone. + power_w = ed.active_power_ssb + log(f"Requested SSB power {power_w:.0f} W - left untouched; " + f"TXGain derives the exciter drive from it") + + radio.set_modulation(modulation) + time.sleep(0.5) + + passband_grid = geom_grid(100.0, 4400.0, args.passband_points) + + # -- rig characterisation, once, at the starting rate ------ + key() + swap = (args.force_swap == "yes") if args.force_swap else False + sideband_sign = args.force_sideband or 1 + plan = T.TxPlan(rate_hz=ed.sample_rate_hz, modulation=modulation, + swap=swap, sideband_sign=sideband_sign, + amplitude_v=args.start_amplitude) + + if "wiring" in selected: + log("\n== Detecting the wiring order and sideband ==") + res, swap, sideband_sign = T.detect_wiring( + ad2, radio, plan, args.settle, args.min_suppression, + args.max_amplitude, modulation, log) + all_checks += res.checks + rig.update(res.data) + fatal = next((c for c in res.checks + if c.id == "rig.suppression"), None) + if fatal is not None and not fatal.passed: + log("Cannot proceed without both exciter outputs " + "connected in quadrature.") + ad2.awg_off() + return 1 + plan.swap, plan.sideband_sign = swap, sideband_sign + plan.modulation = modulation + + amplitude = args.start_amplitude + if "level" in selected: + log("\n== Choosing a microphone drive level ==") + res, amplitude = T.autolevel( + ad2, plan, args.settle, args.start_amplitude, + args.max_amplitude, args.amp_step_db, args.min_snr, + args.max_thd, log) + all_checks += res.checks + if not res.checks[0].passed: + warnings.append(res.checks[0].message) + plan.amplitude_v = amplitude + + rig.update({ + "drive_amplitude_v": amplitude, + "scope_rate_hz": args.scope_rate, + "capture_s": args.capture, + "scope_range_v": args.scope_range, + "scope_offset_v": args.scope_offset, + "power_out_ssb_w": power_w, + "mic_gain_db": (args.mic_gain if args.mic_gain is not None + else ed.mic_gain_db), + "modulation": args.modulation, + }) + + # -- per rate ---------------------------------------------- + for rate in rates: + log(f"\n===== {rate} sps =====") + if rate != radio.get_sample_rate(): + # ChangeSampleRate() reconfigures the I2S clock and + # rebuilds every filter. Doing that mid-transmission is + # not something the firmware is asked to survive, so drop + # PTT around it. + unkey() + radio.set_sample_rate(rate, args.rate_settle) + plan.rate_hz = rate + key() + + bucket: dict = { + "rate_hz": rate, + "audio_rate_hz": bt.audio_rate_hz(rate), + "hilbert_rate_hz": bt.hilbert_rate_hz(rate), + "fold_hz": bt.fold_frequency_hz(rate), + } + inj = T.Injector(ad2, plan, args.settle, args.min_snr, + args.max_thd) + + passband = None + if "passband" in selected: + log("-- Transmit audio passband --") + passband = T.test_passband(inj, passband_grid, + args.nominal_tol_pct, log) + all_checks += passband.checks + bucket["passband"] = passband.data + + if "sideband" in selected and passband is not None: + log("-- Opposite-sideband suppression --") + res = T.test_sideband_suppression( + passband, rate, args.min_suppression, log) + all_checks += res.checks + bucket["sideband_suppression"] = res.data + + if "carrier" in selected and passband is not None: + log("-- Carrier leakage --") + res = T.test_carrier(passband, args.max_carrier_dbc, log) + all_checks += res.checks + bucket["carrier"] = res.data + + if "alias" in selected: + if passband is None: + log("-- Out-of-band and fold-back: skipped, needs the " + "passband reference --") + warnings.append("the alias test needs the passband " + "sweep for its reference level") + else: + log("-- Out-of-band rejection and fold-back --") + ref_dbv = passband.data.get("reference_dbv") + if ref_dbv is None: + warnings.append(f"no passband reference at {rate} " + f"sps; alias test skipped") + else: + ref_v = 10.0 ** (ref_dbv / 20.0) + # From where the stopband actually starts - below + # that the response is on the transition skirt and + # is meant to be only partly attenuated - up to + # just under the audio Nyquist, above which the + # codec's own decimation rather than the transmit + # chain decides what happens. + top = 0.92 * bt.audio_rate_hz(rate) / 2.0 + alias_grid = np.linspace( + bt.TX_STOPBAND_FROM_HZ, top, + args.alias_points) + res = T.test_alias( + inj, plan, ref_v, alias_grid, + args.min_oob_rejection, args.max_fold_dbc, log) + all_checks += res.checks + bucket["alias"] = res.data + + per_rate[str(rate)] = bucket + + # -- cross-rate comparison --------------------------------- + log("\n== Comparing rates ==") + comparison, cmp_checks = T.compare_rates( + per_rate, args.rate_tol_pct, args.nominal_tol_pct) + all_checks += cmp_checks + + ad2.awg_off() + unkey() + + restored = guard.restored and not args.no_restore + rig["key_down_s"] = key_down_s + log(f"\nTotal key-down time: {key_down_s:.0f} s") + + if not args.no_restore: + residual = guard.verify() + try: + final_summary = radio.dump_ed().summary() + except CatError: + final_summary = {} + if guard.failures: + warnings += guard.failures + else: + warnings.append("--no-restore: the radio was left in the test " + "configuration") + + except DwfError as exc: + print(f"error: {exc}", file=sys.stderr) + return 2 + except CatError as exc: + print(f"error: {exc}", file=sys.stderr) + return 2 + except KeyboardInterrupt: + print("\naborted - the AWG has been silenced and PTT dropped, but check " + "that the radio is receiving", file=sys.stderr) + return 3 + + doc = report_mod.build_tx_document( + provenance=report_mod.collect_provenance(argv, REPO_ROOT, + dwf_version=ad2.version), + config=config, rig=rig, baseline=baseline_summary, final=final_summary, + state_restored=restored, residual_diff=residual, per_rate=per_rate, + comparison=comparison, checks=all_checks, + duration_s=time.monotonic() - started, warnings=warnings) + + report_mod.write_json(doc, json_path) + doc["artifacts"]["json"] = json_path + + png_paths: list = [] + if not args.no_plots: + try: + if __package__ in (None, ""): + from tx_filter_hil.plot_tx_filter_hil import render_all + else: + from .plot_tx_filter_hil import render_all + png_paths = render_all(doc, out_dir, f"{args.prefix}_{stamp}") + doc["artifacts"]["png"] = png_paths + except Exception as exc: + warnings.append(f"could not render plots: {exc}") + doc["warnings"] = warnings + + report_mod.write_markdown(doc, md_path, png_paths) + doc["artifacts"]["markdown"] = md_path + report_mod.write_json(doc, json_path) + + report_mod.print_summary(doc) + return 0 if doc["summary"]["overall"] == "PASS" else 1 + + +def main() -> int: + argv = sys.argv[1:] + args = build_parser().parse_args(argv) + return run(args, ["tx_filter_hil_test.py"] + argv) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/code/tools/usb_audio_test.py b/code/tools/usb_audio_test.py new file mode 100755 index 0000000..d43c824 --- /dev/null +++ b/code/tools/usb_audio_test.py @@ -0,0 +1,173 @@ +#!/usr/bin/env python3 +""" +USB Audio Test - 1 kHz Sine Wave Generator + +Outputs a 1 kHz sine wave to a USB audio device for testing the +PC to Teensy USB audio path. + +Requirements: + pip install sounddevice numpy + +Usage: + python usb_audio_test.py # List devices and use default + python usb_audio_test.py -d 5 # Use device index 5 + python usb_audio_test.py -l # List devices only + python usb_audio_test.py -f 800 # Use 800 Hz instead of 1000 Hz + python usb_audio_test.py -a 0.5 # Set amplitude to 0.5 (50%) +""" + +import argparse +import sys +import time +import numpy as np + +try: + import sounddevice as sd +except ImportError: + print("Error: sounddevice not installed. Run: pip install sounddevice") + sys.exit(1) + + +def list_devices(): + """List all available audio devices.""" + print("\nAvailable audio devices:") + print("-" * 60) + devices = sd.query_devices() + for i, dev in enumerate(devices): + # Show output devices (max_output_channels > 0) + if dev['max_output_channels'] > 0: + marker = " <-- default" if i == sd.default.device[1] else "" + print(f" [{i:2d}] {dev['name'][:45]:<45} (out: {dev['max_output_channels']}ch){marker}") + print("-" * 60) + + +def generate_sine_wave(frequency, sample_rate, duration): + """Generate a sine wave.""" + t = np.linspace(0, duration, int(sample_rate * duration), endpoint=False) + return np.sin(2 * np.pi * frequency * t).astype(np.float32) + + +def main(): + parser = argparse.ArgumentParser( + description="Output a sine wave to USB audio device for testing" + ) + parser.add_argument( + "-d", "--device", type=int, default=None, + help="Audio device index (use -l to list devices)" + ) + parser.add_argument( + "-l", "--list", action="store_true", + help="List available audio devices and exit" + ) + parser.add_argument( + "-f", "--frequency", type=float, default=1000.0, + help="Sine wave frequency in Hz (default: 1000)" + ) + parser.add_argument( + "-a", "--amplitude", type=float, default=0.3, + help="Amplitude 0.0-1.0 (default: 0.3)" + ) + parser.add_argument( + "-r", "--rate", type=int, default=48000, + help="Sample rate in Hz (default: 48000)" + ) + parser.add_argument( + "-t", "--duration", type=float, default=None, + help="Duration in seconds (default: continuous until Ctrl+C)" + ) + parser.add_argument( + "-s", "--stereo", action="store_true", + help="Output stereo (same signal on both channels)" + ) + + args = parser.parse_args() + + # List devices if requested + if args.list: + list_devices() + return 0 + + # Show available devices + list_devices() + + # Select device + device = args.device + if device is not None: + try: + dev_info = sd.query_devices(device) + print(f"\nUsing device [{device}]: {dev_info['name']}") + except Exception as e: + print(f"Error: Invalid device index {device}: {e}") + return 1 + else: + print(f"\nUsing default output device") + + # Parameters + sample_rate = args.rate + frequency = args.frequency + amplitude = max(0.0, min(1.0, args.amplitude)) + channels = 2 if args.stereo else 1 + + print(f"\nGenerating {frequency} Hz sine wave:") + print(f" Sample rate: {sample_rate} Hz") + print(f" Amplitude: {amplitude:.1%}") + print(f" Channels: {channels}") + print(f" Duration: {'continuous' if args.duration is None else f'{args.duration}s'}") + print("\nPress Ctrl+C to stop\n") + + # Generate one second of audio to loop + chunk_duration = 1.0 # seconds + samples = generate_sine_wave(frequency, sample_rate, chunk_duration) + samples = samples * amplitude + + # Make stereo if requested + if channels == 2: + samples = np.column_stack((samples, samples)) + + try: + if args.duration is not None: + # Play for specified duration + full_samples = generate_sine_wave(frequency, sample_rate, args.duration) + full_samples = full_samples * amplitude + if channels == 2: + full_samples = np.column_stack((full_samples, full_samples)) + + sd.play(full_samples, samplerate=sample_rate, device=device) + sd.wait() + else: + # Continuous playback using stream + stream = sd.OutputStream( + samplerate=sample_rate, + channels=channels, + device=device, + dtype=np.float32 + ) + + with stream: + print("Playing... (Ctrl+C to stop)") + sample_idx = 0 + chunk_size = 1024 + + while True: + # Generate chunk + t = np.arange(sample_idx, sample_idx + chunk_size) / sample_rate + chunk = np.sin(2 * np.pi * frequency * t).astype(np.float32) + chunk = chunk * amplitude + + if channels == 2: + chunk = np.column_stack((chunk, chunk)) + + stream.write(chunk) + sample_idx += chunk_size + + except KeyboardInterrupt: + print("\nStopped.") + except Exception as e: + print(f"\nError: {e}") + return 1 + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) From 57864bb7e3eccb3903434079d086221fc1228d38 Mon Sep 17 00:00:00 2001 From: Oliver King Date: Thu, 30 Jul 2026 17:38:29 -0400 Subject: [PATCH 15/25] Accept the optional TX parameter, per the TS-480 spec ts_480_pc.pdf p.21 defines the TX set form as "TX P1;" where P1 is 0 (normal transmission using the MIC input), 1 (DTS transmission using the ANI input) or 2 (TX Tune), and states that "if no P1 parameter is specified, P1=0 is used". So TX;, TX0;, TX1; and TX2; are all legal ways to key. Phoenix accepted only TX;, because the table entry was { "TX", 3, 0, ... } and command_parser dispatches purely on where the semicolon falls. That is an interoperability bug, not a pedantic one. Hamlib - the layer WSJT-X, fldigi and Pat all drive the radio through - picks the form from the PTT type: TX; for RIG_PTT_ON, TX0; for RIG_PTT_ON_MIC, TX1; for RIG_PTT_ON_DATA, RX; to unkey. Which one a given user sends depends on their backend and data-mode settings, so the radio keyed for some clients and silently refused for others. It was noticed because serial_diag.py sent TX1; and got "?;" back. The idiom for an optional parameter is the *write* function in both slots: set_len covers the parameterised form, read_len the bare one. There is deliberately no TX_read - adding one would make TX; read instead of key, which would break RIG_PTT_ON and both HIL suites - and a comment now says so, because the read column holding a write function otherwise looks like a mistake worth "fixing". TX_write ignores P1, so every form keys identically; the radio has neither a separate data input nor a tune mode to distinguish them. RX gets the same treatment and so now also accepts the TS-2000 style RX0;/RX1;. The same change closes a latent defect in command_parser, which evaluated command[set_len - 1] and command[read_len - 1] unconditionally. Nine entries carry a 0 in one of those fields, so the expression was command[-1], reading off the front of the static catCommand[128]. It never crashed, but ID;, IF;, PD;, ED; and PR; reached their read handlers only because the byte that happens to precede that buffer is not a semicolon. Both tests are now guarded with > 0. Worth recording how this survived: CAT_test.cpp already asserted that TX accepted TX;, TX0; and TX1;. It called TX_write() directly, and TX_write ignores its argument, so the assertion held while the dispatcher rejected two of the three forms. The suite passed for the entire life of the bug. The tests added here go through command_parser(), and were confirmed failing before the fix. 745/745 pass after it, and all four TX forms were verified keying real hardware, with IF P8 read back to confirm. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01T9L3rdDh97Ywei8kr3YC6j --- code/src/PhoenixSketch/BuildInfo.h | 4 +- code/src/PhoenixSketch/CAT.cpp | 26 ++++++- code/test/CAT_test.cpp | 119 +++++++++++++++++++++++++++++ 3 files changed, 143 insertions(+), 6 deletions(-) diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index 5ddb025..92f6697 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -14,7 +14,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "29ca4dd" -#define BUILD_TIMESTAMP "2026-07-30 17:38:10" +#define GIT_COMMIT_HASH "5f996e5" +#define BUILD_TIMESTAMP "2026-07-30 17:38:29" #endif // BUILDINFO_H diff --git a/code/src/PhoenixSketch/CAT.cpp b/code/src/PhoenixSketch/CAT.cpp index 282ae8f..3406f7b 100644 --- a/code/src/PhoenixSketch/CAT.cpp +++ b/code/src/PhoenixSketch/CAT.cpp @@ -101,6 +101,11 @@ typedef struct { // Note on set_len / read_len: command_parser() tests the write form FIRST, so a // command whose two lengths are equal can never reach its read function. Keep // them distinct for anything that needs to be readable. +// +// Note on optional parameters: a command whose parameter the spec allows to be +// omitted is expressed by putting the *write* function in BOTH slots, with +// set_len covering the parameterised form and read_len the bare one. TX and RX +// below are the only such commands. Do not "fix" them by writing a read handler. #define NUM_SUPPORTED_COMMANDS 29 valid_command valid_commands[ NUM_SUPPORTED_COMMANDS ] = { @@ -124,8 +129,16 @@ valid_command valid_commands[ NUM_SUPPORTED_COMMANDS ] = { "PC", 3+3,3, PC_write, PC_read }, // output power { "PD", 0, 3, unsupported_cmd, PD_read }, // read the PSD -- NOT a Kenwood keyword { "PS", 3+1,3, PS_write, PS_read }, // Rig power on/off - { "RX", 3, 0, RX_write, unsupported_cmd }, // Receiver function 0=main 1=sub - { "TX", 3, 0, TX_write, unsupported_cmd }, // set transceiver to transmit. + // RX; unkeys; RX0;/RX1; (main/sub receiver) are accepted too and behave + // identically - Phoenix has one receiver. Both forms are writes. + { "RX", 3+1,3, RX_write, RX_write }, // Receiver function 0=main 1=sub + // TX; keys, and so do TX0; (normal/MIC), TX1; (DTS via ANI input) and + // TX2; (TX Tune): ts_480_pc.pdf p.21 makes P1 optional and defaults it + // to 0. Both forms are writes - a bare TX; is a set, not a read - and + // TX_write ignores P1, so every form keys identically. Hamlib picks + // between them by PTT type (TX; / TX0; / TX1;), so a client that only + // sends one of them must not be turned away. + { "TX", 3+1,3, TX_write, TX_write }, // set transceiver to transmit. { "VX", 3+1, 3, VX_write, VX_read }, // VOX write/read { "ED", 0, 3, unsupported_cmd, ED_read }, // print out the state of the EEPROM data -- NOT a Kenwood keyword { "PR", 0, 3, unsupported_cmd, PR_read }, // print out the state of the hardware register -- NOT a Kenwood keyword @@ -1057,8 +1070,13 @@ char *command_parser( char* command ){ char* (*read_function)(char*); read_function = valid_commands[i].read_function; - if( command[ write_params_len - 1 ] == ';' ) return ( *write_function )( command ); - if( command[ read_params_len - 1 ] == ';' ) return ( *read_function )( command ); + // A zero length means the command has no form of that kind (a + // read-only command has set_len 0, a write-only one read_len 0). + // Skip the test rather than indexing command[-1], which reads off + // the front of catCommand and makes dispatch depend on whatever + // static happens to precede it. + if( write_params_len > 0 && command[ write_params_len - 1 ] == ';' ) return ( *write_function )( command ); + if( read_params_len > 0 && command[ read_params_len - 1 ] == ';' ) return ( *read_function )( command ); // Wrong length for read OR write. No semicolon in the right places sprintf( obuf, "?;"); return obuf; diff --git a/code/test/CAT_test.cpp b/code/test/CAT_test.cpp index c38902a..e9ec8b0 100644 --- a/code/test/CAT_test.cpp +++ b/code/test/CAT_test.cpp @@ -2356,6 +2356,125 @@ TEST(CAT, command_parser_RecognizesTXCommands){ EXPECT_STREQ(result, ""); } +/////////////////////////////////////////////////////////////////////////////////////////////////// +// PTT through command_parser(), with the optional TX parameter +// +// ts_480_pc.pdf p.21: the TX set form is "TX P1;" where P1 is 0 (normal/MIC), +// 1 (DTS via ANI input) or 2 (TX Tune), and "if no P1 parameter is specified, +// P1=0 is used". So TX;, TX0;, TX1; and TX2; are all valid ways to key. +// +// This matters in the field because Hamlib - which WSJT-X, fldigi and Pat all +// drive the radio through - picks its form from the PTT type: TX; for +// RIG_PTT_ON, TX0; for RIG_PTT_ON_MIC and TX1; for RIG_PTT_ON_DATA. +// +// These go through command_parser() deliberately. The TX_write tests above call +// the handler directly, so they passed even while the parser was rejecting +// TX0; and TX1; with "?;" - the handler ignores its argument, and the +// dispatcher was the part that was wrong. +/////////////////////////////////////////////////////////////////////////////////////////////////// + +TEST(CAT, command_parser_TXAcceptsOptionalParameterFromSSBReceive){ + UISm_start(&uiSM); + ModeSm_start(&modeSM); + + const char *forms[] = { "TX;", "TX0;", "TX1;", "TX2;" }; + + for (const char *form : forms) { + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + + char cmd[8]; + strcpy(cmd, form); + char *result = command_parser(cmd); + + // Accepted, and silent: TX_write returns empty_string_p + EXPECT_STREQ(result, "") << "form " << form << " was not accepted"; + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_SSB_TRANSMIT) + << "form " << form << " did not key the radio"; + } +} + +TEST(CAT, command_parser_TXAcceptsOptionalParameterFromCWReceive){ + UISm_start(&uiSM); + ModeSm_start(&modeSM); + + const char *forms[] = { "TX;", "TX0;", "TX1;", "TX2;" }; + + for (const char *form : forms) { + modeSM.state_id = ModeSm_StateId_CW_RECEIVE; + + char cmd[8]; + strcpy(cmd, form); + char *result = command_parser(cmd); + + EXPECT_STREQ(result, "") << "form " << form << " was not accepted"; + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_CW_TRANSMIT_MARK) + << "form " << form << " did not key the radio"; + } +} + +TEST(CAT, command_parser_RXAcceptsOptionalParameter){ + UISm_start(&uiSM); + ModeSm_start(&modeSM); + + // The TS-480 set form is a bare RX;, but TS-2000 style clients address the + // main/sub receiver as RX0;/RX1;. Accept all three; Phoenix has one receiver. + const char *forms[] = { "RX;", "RX0;", "RX1;" }; + + for (const char *form : forms) { + modeSM.state_id = ModeSm_StateId_SSB_TRANSMIT; + + char cmd[8]; + strcpy(cmd, form); + char *result = command_parser(cmd); + + EXPECT_STREQ(result, "") << "form " << form << " was not accepted"; + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_SSB_RECEIVE) + << "form " << form << " did not unkey the radio"; + } +} + +TEST(CAT, command_parser_RejectsMalformedPTTCommands){ + UISm_start(&uiSM); + ModeSm_start(&modeSM); + + // Two parameter characters is not a form the spec defines, and accepting the + // optional parameter must not turn the length check into "anything goes". + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + + char tx_too_long[] = "TX00;"; + EXPECT_STREQ(command_parser(tx_too_long), "?;"); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_SSB_RECEIVE); + + char rx_too_long[] = "RX00;"; + EXPECT_STREQ(command_parser(rx_too_long), "?;"); +} + +TEST(CAT, command_parser_ZeroLengthFieldCommandsStillDispatch){ + UISm_start(&uiSM); + ModeSm_start(&modeSM); + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + + // Read-only commands carry set_len 0, so the parser must not evaluate the + // write-length test for them - command[set_len - 1] would be command[-1]. + // Each must reach its read handler and answer something other than "?;". + const char *reads[] = { "ID;", "IF;", "PD;", "ED;", "PR;" }; + + for (const char *form : reads) { + char cmd[8]; + strcpy(cmd, form); + char *result = command_parser(cmd); + + EXPECT_STRNE(result, "?;") << "read command " << form << " was rejected"; + EXPECT_NE(result[0], '\0') << "read command " << form << " answered nothing"; + } + + // The mirror case: band up/down are writes with read_len 0. + char bd[] = "BD;"; + EXPECT_STRNE(command_parser(bd), "?;"); + char bu[] = "BU;"; + EXPECT_STRNE(command_parser(bu), "?;"); +} + // ============================================================================ // Commands added for the hardware-in-the-loop filter test suite // From e1b3c3cb75a4f04159a3cc7c952a435531be83fe Mon Sep 17 00:00:00 2001 From: Oliver King Date: Thu, 30 Jul 2026 17:38:48 -0400 Subject: [PATCH 16/25] Document the transmit HIL suite and the TS-480 TX finding New page firmware/tx-filter-hil-test for the transmit suite, and the finding that bounds it: the 48-tap FIR transmit stages are only rate-independent to about 1.2 %, against 0.3 % for the IIR receive stages. That is a property of re-quantising a 48-tap design onto the same 48 positions at a different normalised cutoff, not a defect, but it sets a floor under any rate-invariance tolerance and so belongs in runtime-filter-design, multirate-decimation and filter-hil-test as well. filter-hil-test claimed 0.3 % for receive rate invariance. That holds only once the edge-limited equaliser cells are set aside - and the three worst cells are exactly the three the suite already flags as edge limited, which corroborates that classification rather than undermining it. Replaced the prose with a table that says which figure applies to what. cat-control gains the TS-480 TX parameter finding. Its "TX; and RX; are parameterless writes" warning was half wrong once TX accepted TXn;, but the useful half - that they are writes whose empty reply command_parser suppresses, so a client inferring "3 characters means read" blocks for its full read timeout - is kept. Two things recorded alongside the fix: that Hamlib's TX1; is the standard "transmit from the data port" signal, which may remove the need for the non-Kenwood UM; command when usb-audio (#13) resumes; and that the test suite passed throughout the bug because it exercised the handler rather than the dispatcher. The open question about reconciling TS-480 and TS-2000 is narrowed rather than closed: TX and RX have now been checked against p.21 and were wrong, so the rest of the table should be assumed unaudited rather than assumed correct. Also in README.md: the V1.3 and V1.4.0 release notes, which were missing; code/Contributors.txt corrected to code/src/PhoenixSketch/Contributors.txt; the non-existent TuneSm removed from the architecture section, since the tune state is HandleTuneState in HardwareSm.cpp; "160m to 6m" corrected to 160m to 4m plus general coverage; the four auto-calibration routines and the selectable sample rate added to the feature list; and the ctest sample output refreshed from a real run. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01T9L3rdDh97Ywei8kr3YC6j --- README.md | 118 ++++++++++-- code/src/PhoenixSketch/BuildInfo.h | 4 +- wiki/firmware/cat-control.md | 69 ++++++- wiki/firmware/dsp-chain.md | 19 +- wiki/firmware/filter-hil-test.md | 34 +++- wiki/firmware/runtime-filter-design.md | 46 ++++- wiki/firmware/spectrum-refresh-floor.md | 19 +- wiki/firmware/tx-filter-hil-test.md | 229 ++++++++++++++++++++++++ wiki/index.md | 4 +- wiki/log.md | 164 +++++++++++++++++ wiki/roadmap/documentation-todos.md | 22 ++- wiki/theory/audio-equalizer.md | 9 +- wiki/theory/multirate-decimation.md | 21 ++- wiki/theory/ssb-phasing-method.md | 33 +++- 14 files changed, 748 insertions(+), 43 deletions(-) create mode 100644 wiki/firmware/tx-filter-hil-test.md diff --git a/README.md b/README.md index ff6d93d..2ccf697 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # This repository -This is a new software approach, called Phoenix, for the T41-EP radio running V12 hardware. It is a ground-up rewrite of the T41 software, which had been authored by dozens of people over the years. I have listed the known authors that left their call signs in the code in the file `code/Contributors.txt` -- please let me know if I've missed anyone! +This is a new software approach, called Phoenix, for the T41-EP radio running V12 hardware. It is a ground-up rewrite of the T41 software, which had been authored by dozens of people over the years. I have listed the known authors that left their call signs in the code in the file `code/src/PhoenixSketch/Contributors.txt` -- please let me know if I've missed anyone! ![](images/T41_radio.png) @@ -10,12 +10,13 @@ The T41-EP Software Defined Transceiver (SDT), originally designed by Al Peter-A Some of the features of the T41 V12 hardware running the Phoenix firmware: -* Operation across all amateur radio bands from 160m to 6m. +* Operation across all amateur radio bands from 160m to 4m, plus a general-coverage tuning range. * Controllable receive and transmit power levels in 0.5 dB steps. * Audio gain control via a variety of algorithms. * Noise reduction via a variety of algorithms. * Receive and transmit audio equalizers. -* Automated receive IQ calibration routine. +* Automated calibration routines for receive IQ balance, transmit IQ balance, transmit carrier nulling, and PA output power. +* Selectable sample rate: 192 or 176.4 ksps, chosen at run time and persisted, with the audio filters redesigned on each change so their frequencies do not move. * CAT control. The T41-EP is a fully open-source radio. This repository hosts the transceiver software, licensed under GPLV3 (see LICENSE file). The hardware designs are hosted on Bill-K9HZ's [GitHub repository](https://github.com/DRWJSCHMIDT/T41/tree/main/T41_V012_Files). The primary forum for discussions on the T41-EP radio is on [Groups.io](https://groups.io/g/SoftwareControlledHamRadio/topics). @@ -59,6 +60,78 @@ The mapping of the buttons to various functions is defined in `code/src/PhoenixS # Version History +## V1.4.0 Release Notes + +### Major New Features + +**Selectable Sample Rate (192 or 176.4 ksps)** +The radio's sample rate can now be changed while it is running, from the menu or over CAT with the new `SR` command, and the choice is persisted across power cycles. `ChangeSampleRate()` reconfigures the I²S clock and rebuilds the entire DSP chain. + +**Audio Filters Designed at Run Time** +This change makes a switchable sample rate possible. In prior versions several audio-rate filters shipped as coefficient tables designed offline for one audio rate (24 ksps, i.e. 192 ksps decimated by 8). Changing the sample rate without changing the filters would lead to unwanted changes in these filter edges. + +The CW audio filters, the 14 equaliser cells, the CW decoder input filter, and the two transmit stages either side of the Hilbert transform are now generated from an analog design specification on every rate change. The filter families are unchanged and the original tables are kept as test fixtures so that the generator code's output filters can be checked against them. Filters whose corners are specified as a fraction of the sample rate — the decimation, interpolation, Hilbert and zoom-FFT stages — are unchanged. + +**Rapid-Tune Audio Mute and Spectrum Freeze** +Spinning the Center Tune or Fine Tune encoder quickly reprograms the VFO on every pass of the main loop, producing audible glitches and a jerky spectrum. With `MUTE_ON_RAPID_TUNE` enabled (the default), rapid tuning is detected and the audio is muted and the spectrum/waterfall redraw paused until tuning stops. Comment out the `#define` in `Config.h` to restore the old behaviour. + +**CAT Control of the DSP Settings** +Four new commands, bringing the table to 29: `SR` (sample rate), `CF` (CW audio filter index), `EQ` (receive equaliser cell) and `FL` (DSP filter low cut — the mirror of the existing `FW` high cut). These were added so the filters could be measured on real hardware using a script. They are not standard CAT keywords. + +**Hardware-in-the-Loop Filter Test Suites** +`code/tools/filter_hil/` is an automated measurement suite for the receive DSP filters on the actual radio, at every sample rate, using an Analog Discovery 2 to inject a quadrature tone into the I/Q inputs and read the demodulated audio off the speaker. + +`code/tools/tx_filter_hil/` is the transmit counterpart, capturing both exciter I/Q outputs synchronously so that the audio passband and the opposite-sideband suppression come from one sweep. + +**LLM-Maintained Knowledge Wiki** +A new `wiki/` directory holds an interlinked reference covering the firmware modules, the DSP theory behind them, the hardware platform, and the development roadmap. Start at `wiki/index.md`. + +### Bug Fixes + +- **Three long-standing CAT bugs.** `MD` set the band's mode but never `ED.modulation[]`, and because `InitFilterMask()` compares the two and treats a difference as deliberate, `MD` did not change the demodulator but mirrored the receive passband. `MD1`/`MD2` could not escape CW mode, so a CAT client could enter CW and never leave. `FW;` was unreadable because the command declared equal set and read lengths, which makes the read handler unreachable. `MD4` now selects AM, which was previously unreachable. +- **NaN values leaking out of uninitialised DMAMEM.** `ResetDSP()` existed but was never actually called during signal-processing initialisation, so the DMAMEM arrays could be read before being zeroed. +- **The blue filter bar** on the spectrum display and the band edges on the audio display are drawn in the correct places (reported by Wolfgang Fiebig). +- **Sidetone volume** can be adjusted again (reported by Wolfgang Fiebig). +- **The AM DC blocker's filter state** was a file-scope static shared across all three `ReceiveFilterConfig` instances; it is now per-instance. +- **`ApplyEQBandFilter` scrubbed** the receive equaliser's filter state even when running on the transmit path. + +### Under-the-Hood Changes + +- Frequency units renamed throughout from dHz to **cHz** (centi-Hz, Hz × 100), which is what the code always actually used. +- Faster encoder handling, and spectrum artifacts while tuning fixed. +- `BuildInfo.h` is stamped automatically by a pre-commit hook, which is itself versioned in the repository so every clone gets it. +- Unit tests grown from 699 to 740, including a suite that checks each generated filter against the reference table it replaced and that every corner holds across a rate change. + +## V1.3 Release Notes + +### New Features + +**General Coverage Receive Band** +A receive-only "GEN" band covering 200 kHz to 80.8 MHz *(contributed by Michael, dj2mg)*. The band table gained a `BandType` (`HAM_BAND` / `MISC_BAND`), and `IsTxAllowed()` now guards all four transmit entry transitions in the mode state machine, so the radio cannot be keyed outside an amateur band. Low-pass filter selection is handled appropriately for non-ham bands. + +**Faster Spectrum and Waterfall** +More efficient waterfall operation *(contributed by tmr4)*, and the spectrum trace is drawn in `NCHUNKS` column groups, one group per pass of the main loop. Reducing `NCHUNKS` from 8 to 6 raised the spectrum refresh rate from roughly 11.7 to 15.6 fps. The audio spectrum and the waterfall are each updated every second spectrum frame, phase-offset from one another, to keep the per-loop cost inside the budget. + +**Serial Time Sync** +Send `T` followed by a 10-digit Unix UTC timestamp and a newline to the debug serial port (115200) to set both the Teensy's coin-cell-backed hardware RTC and the TimeLib clock. WSJT-X requires the clock to be within ±1 second of UTC. + +**Filter Band Edge Control** +The Filter button on the front panel now toggles which band edge the Filter encoder adjusts, in addition to the existing behaviour using the Filter encoder's own button. The blue band indicator is drawn in the right place, and adjusting a band edge now catches and prevents invalid conditions. + +### Bug Fixes + +- **Noise reduction dropped audio after a cold power cycle**, caused by uninitialised DMAMEM. +- **The BIT screen misreported dual VFO presence.** + +### Under-the-Hood Changes + +- A GitHub Actions workflow compiles the firmware on every pull request. +- GPL headers added to all source files. +- `BUFFER_SIZE` renamed to `USB_BUFFER_SIZE` to avoid a namespace conflict with other libraries. +- Rotary encoder tuning tweaks *(contributed by Tom Metty, AJ8X)*. +- ArduinoJson documented as a build dependency *(contributed by AnttiVL)*. +- `Contributors.txt` moved to `code/src/PhoenixSketch/`. + ## V1.2 Release Notes ### New Features @@ -127,6 +200,9 @@ The comprehensive unit tests, mocking functions, and their build files are locat * **Unit tests**: `code/test` +The same directory also builds the **desktop radio simulator** (`RadioSimulator_main.cpp` → the +`radio_simulator` target), which runs the firmware on a PC with an SDL-emulated display. + Useful sketches for testing the boards as you build them are here: * **Board tests**: `code/src/BoardTest` @@ -135,6 +211,17 @@ The sketch for the ATTiny85 in the main board power control block is here: * **ATTiny85 power control**: `code/src/ATTiny85_On_Off` +Host-side Python tooling for measuring the radio on the bench — mostly hardware-in-the-loop test +suites driven over CAT with an Analog Discovery 2 — is here, each subdirectory with its own README: + +* **Bench tools**: `code/tools` (including `filter_hil/` and `tx_filter_hil/`, which measure the + receive and transmit DSP filters on the real radio at both sample rates) + +An LLM-maintained knowledge base covering the firmware, the DSP theory behind it, the hardware +platform, and the development roadmap is here: + +* **Knowledge wiki**: `wiki/` — start at `wiki/index.md` + ## Useful Diagrams (.drawio files) These diagrams can be edited with draw.io. Some are used to generate state machine code with StateSmith: @@ -150,13 +237,13 @@ These diagrams can be edited with draw.io. Some are used to generate state machi Phoenix SDR is built around a state machine-driven architecture that ensures deterministic hardware control. Events like button presses, CAT commands, or encoder turns are placed in an interrupt buffer and handled at a predictable point in the code, preventing state corruption. The code implements hardware abstraction for testability and modularity. 1. **Separation of Concerns**: Hardware control, signal processing, and display are isolated into separate modules with clear interfaces. Hardware interfaces (RFBoard, LPFBoard, BPFBoard) provide clean APIs, allowing mocking for unit tests. -2. **State Machine Control**: All hardware state changes flow through state machines (ModeSm, UISm, TuneSm) ensuring deterministic, predictable behavior. +2. **State Machine Control**: All hardware state changes flow through state machines (ModeSm, UISm, HardwareSm) ensuring deterministic, predictable behavior. 3. **Separated Display**: Display code is separated from the rest of code and reads the global state but never modifies it. As a demonstration of the display code separation, it can be disabled by commenting out a single line in `loop()` and the radio can operate without the display. 4. **Testing and Debugging**: An extensive set of unit tests ensure that changes to the code don't cause unexpected subtle bugs. The test framework enables you to use software debuggers to exercise the radio code, greatly speeding up the process of finding and fixing most bugs. ## State machines -The behavior of the radio is controlled by a set of state machines. Hardware interrupts, like button presses, are handled by the main loop and used to dispatch events to the Mode and UI state machines, as well as update the shared global configuration settings. The Mode State Machine drives two further state machines: one controls the hardware state, and the other controls the frequencies of the VFOs. The architecture of the state machines is shown in the diagram below. +The behavior of the radio is controlled by a set of state machines. Hardware interrupts, like button presses, are handled by the main loop and used to dispatch events to the Mode and UI state machines, as well as update the shared global configuration settings. The Mode State Machine drives the hardware state machine (`HardwareSm.cpp`), which is hand-written rather than generated; it both configures the hardware and owns the VFO frequency state (`HandleTuneState`). It in turn drives the four generated calibration state machines. The architecture of the state machines is shown in the diagram below. ![](images/state_machine_architecture.png) @@ -217,7 +304,8 @@ Configure the Arduino IDE to compile with the following settings: * 600 MHz * Fast with LTO -You should see the following memory usage when compilation is complete: +You should see memory usage in the region of the figures below when compilation is complete. They +are indicative rather than exact — they move with every release, and with your `Config.h` options: ``` Memory Usage on Teensy 4.1: FLASH: code:287164, data:75372, headers:9172 free for files:7754756 @@ -257,16 +345,16 @@ This will compile and run the unit test programs. You should see an output that ```bash ... -654/657 Test #654: PowerCalibrationTest.FitPowerCurve_RealWorldData .............................. Passed 0.00 sec - Start 655: PowerCalibrationWalkthroughTest.CompleteCalibrationAllBands -655/657 Test #655: PowerCalibrationWalkthroughTest.CompleteCalibrationAllBands ................... Passed 1.64 sec - Start 656: PowerCalibrationWalkthroughTest.RemeasuringDataPoints_StateRemainsCorrect -656/657 Test #656: PowerCalibrationWalkthroughTest.RemeasuringDataPoints_StateRemainsCorrect ..... Passed 0.44 sec - Start 657: PowerCalibrationWalkthroughTest.StateTransitions_ResetBehavior -657/657 Test #657: PowerCalibrationWalkthroughTest.StateTransitions_ResetBehavior ................ Passed 0.49 sec +737/740 Test #737: PowerCalibrationTest.FitPowerCurve_RealWorldData .............................. Passed 0.01 sec + Start 738: PowerCalibrationWalkthroughTest.CompleteCalibrationAllBands +738/740 Test #738: PowerCalibrationWalkthroughTest.CompleteCalibrationAllBands ................... Passed 1.75 sec + Start 739: PowerCalibrationWalkthroughTest.RemeasuringDataPoints_StateRemainsCorrect +739/740 Test #739: PowerCalibrationWalkthroughTest.RemeasuringDataPoints_StateRemainsCorrect ..... Passed 0.55 sec + Start 740: PowerCalibrationWalkthroughTest.StateTransitions_ResetBehavior +740/740 Test #740: PowerCalibrationWalkthroughTest.StateTransitions_ResetBehavior ................ Passed 0.60 sec -100% tests passed, 0 tests failed out of 657 +100% tests passed, 0 tests failed out of 740 -Total Test time (real) = 50.16 sec +Total Test time (real) = 76.35 sec ``` diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index 92f6697..a4caae4 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -14,7 +14,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "5f996e5" -#define BUILD_TIMESTAMP "2026-07-30 17:38:29" +#define GIT_COMMIT_HASH "57864bb" +#define BUILD_TIMESTAMP "2026-07-30 17:38:48" #endif // BUILDINFO_H diff --git a/wiki/firmware/cat-control.md b/wiki/firmware/cat-control.md index f24dc57..8c2c7bb 100644 --- a/wiki/firmware/cat-control.md +++ b/wiki/firmware/cat-control.md @@ -3,10 +3,10 @@ title: CAT Control (Kenwood emulation) type: module status: draft created: 2026-06-08 -updated: 2026-07-29 +updated: 2026-07-30 tags: [cat, kenwood, ts-480, ts-2000, serial, rig-control, usb] source_refs: [] -related: ["[[overview]]", "[[main-loop]]", "[[mode-state-machine]]", "[[tune-frequency-control]]", "[[persistent-config]]", "[[sample-rate-switching]]", "[[filter-hil-test]]", "[[audio-equalizer]]", "[[cw-processing]]"] +related: ["[[overview]]", "[[main-loop]]", "[[mode-state-machine]]", "[[tune-frequency-control]]", "[[persistent-config]]", "[[sample-rate-switching]]", "[[filter-hil-test]]", "[[audio-equalizer]]", "[[cw-processing]]", "[[tx-filter-hil-test]]"] --- # CAT Control (Kenwood emulation) @@ -81,6 +81,62 @@ Added so [[filter-hil-test]] could drive settings that were previously **touchsc ⚠️ **Still no CAT command for AGC mode.** That is the one setting [[filter-hil-test]] needs and cannot have, so the suite refuses to run rather than setting it. +There is also **no command for the transmit equaliser** (`ED.equalizerXmt`) to mirror `EQ`'s +receive cells. [[tx-filter-hil-test]] works around it rather than adding one, because +`S_Xmt[i].pCoeffs` and `S_Rec[i].pCoeffs` point at the *same* coefficient array +(`DSP_FFT.cpp:402-403`) — so soloing the transmit cells would re-verify tables `EQ` already +exposes ([[audio-equalizer]]). + +### ⚠️ `TX` and `RX` are silent *writes* in both their forms + +A trap for any CAT client, not just the test suites. Almost every command distinguishes its read +form from its write form by **length** — a bare `XX;` is a read. `TX` and `RX` break that: a bare +`TX;` is a **write**, and their handlers return `empty_string_p`, whose empty response +`command_parser` suppresses. So a client that infers "3 characters ⇒ read ⇒ wait for a +reply" **blocks for its full read timeout on every key and unkey**, waiting for something that is +never coming. `filter_hil/radio.py` carries a `SILENT_SHORT_WRITES` set for exactly this pair. + +### The `TX` parameter is optional (fixed 2026-07-30) + +`ts_480_pc.pdf` p.21 defines the set form as `TX P1;` — P1 is `0` (normal/MIC), `1` (DTS via the +ANI input) or `2` (TX Tune) — and states that **"if no P1 parameter is specified, P1=0 is used"**. +All four of `TX;`, `TX0;`, `TX1;` and `TX2;` are therefore legal ways to key. Phoenix originally +accepted only `TX;`, because the table entry was `{ "TX", 3, 0, ... }` and `command_parser` +dispatches purely on where the semicolon falls. + +That was a real interoperability bug, not a pedantic one. **Hamlib** — the layer WSJT-X, fldigi and +Pat all drive the radio through — picks the form from the PTT type: `TX;` for `RIG_PTT_ON`, `TX0;` +for `RIG_PTT_ON_MIC`, `TX1;` for `RIG_PTT_ON_DATA`, and `RX;` to unkey. Which one a given user +sends depends on their backend and data-mode settings, so the radio keyed for some clients and +silently refused for others. + +Both entries now read `{ "TX", 3+1, 3, TX_write, TX_write }` (and likewise for `RX`, which also +accepts the TS-2000-style `RX0;`/`RX1;`). The idiom for an **optional parameter** is to put the +*write* function in both slots: `set_len` covers the parameterised form, `read_len` the bare one. +There is deliberately no `TX_read` — adding one would make `TX;` read instead of key, breaking +Hamlib's `RIG_PTT_ON` and both HIL suites, which send `TX;`/`RX;` (`filter_hil/radio.py:480`). +`TX_write` ignores P1, so every form keys identically; Phoenix has neither a separate data input +nor a tune mode to distinguish them. + +> When [[usb-audio]] (#13) resumes, note that `TX1;` is Hamlib's standard "transmit from the data +> port" signal — which may remove the need for the non-Kenwood `UM;` command on the `usb_audio` +> branch. + +The same change closed a latent defect in `command_parser`: it evaluated +`command[ set_len - 1 ]` and `command[ read_len - 1 ]` unconditionally, and nine entries carry a +`0` in one of those fields, so the expression became `command[-1]` — an out-of-bounds read off the +front of `catCommand[128]`. It never crashed, but `ID;`, `IF;`, `PD;`, `ED;` and `PR;` reached +their read handlers only because the preceding byte happened not to be `';'`. Both tests are now +guarded with `> 0`. + +⚠️ **Test the dispatcher, not just the handler.** `CAT_test.cpp` already asserted that TX accepted +`TX;`, `TX0;` and `TX1;` — but it called `TX_write()` directly, and `TX_write` ignores its +argument. The tests passed for the entire life of the bug. The regression tests added alongside +the fix go through `command_parser()`. + +`PC` (power) is the opposite case worth noting alongside it: `PC_write` *does* answer, echoing +`PC%03d;`, so it is one of the few writes that is not silent. + ## Three fixes to pre-existing commands All three affected CAT users on earlier releases: @@ -108,14 +164,19 @@ front panel**: - **Direct `ED` writes:** simple settings write straight to [[persistent-config]] (e.g. `KS_write` → `ED.currentWPM`, `CAT.cpp:475`). - **PTT:** `TX_write` dispatches into [[mode-state-machine]] (switches on `modeSM.state_id`), - so CAT PTT obeys the same TX interlocks/keying as physical PTT. + so CAT PTT obeys the same TX interlocks/keying as physical PTT. ⚠️ It only dispatches from + `SSB_RECEIVE` (→ `PTT_PRESSED`) or `CW_RECEIVE` (→ `KEY_PRESSED`); from any **other** state it + falls through its `switch` and does nothing at all, silently. A client cannot learn from the CAT + reply whether the radio actually keyed — it has to observe the hardware. Read handlers serialize state back: `IF_read` builds the long TS-480 status string (VFO freq, mode, RX/TX, etc.); `FA_read`/`MD_read`/`KS_read`/… each return one field. ## Open questions - Reconcile TS-480 (`CAT.cpp`) vs TS-2000 (`CAT.h`) and verify the `IF` status-string field - layout against `code/docs/ts_480_pc.pdf`. + layout against `code/docs/ts_480_pc.pdf`. **`TX`/`RX` were checked against p.21 on 2026-07-30** + (see above); the rest of the table has not been audited against the spec, and `TX`/`RX` were + wrong, so assume others may be too. - A CAT command for **AGC mode** — the remaining gap for [[filter-hil-test]], which currently has to demand the operator set it by hand. - `SR` is interlocked against transmit, but the **menu path is not** ([[sample-rate-switching]]). diff --git a/wiki/firmware/dsp-chain.md b/wiki/firmware/dsp-chain.md index e65d7ad..0a8cd6f 100644 --- a/wiki/firmware/dsp-chain.md +++ b/wiki/firmware/dsp-chain.md @@ -6,7 +6,7 @@ created: 2026-06-08 updated: 2026-07-29 tags: [dsp, fft, fir, agc, noise-reduction, cw, openaudio, sample-rate] source_refs: [] -related: ["[[overview]]", "[[real-time-constraints]]", "[[mode-state-machine]]", "[[display-subsystem]]", "[[code-heritage]]", "[[audio-io]]", "[[runtime-filter-design]]", "[[sample-rate-switching]]"] +related: ["[[overview]]", "[[real-time-constraints]]", "[[mode-state-machine]]", "[[display-subsystem]]", "[[code-heritage]]", "[[audio-io]]", "[[runtime-filter-design]]", "[[sample-rate-switching]]", "[[tx-filter-hil-test]]"] --- # DSP Chain (Audio, FFT, FIR, Noise, CW) @@ -54,7 +54,22 @@ when called on the transmit path. ⚠️ **Transmit audio changed in V1.4.0 even at 192 ksps.** The decimate-by-2 feeding the Hilbert stage had a stopband that did not exist (flat to 0.425·Fs where ÷2 needs 0.25·Fs), folding -6–9.5 kHz back into the transmitted audio. See [[runtime-filter-design]]. +6–9.5 kHz back into the transmitted audio. See [[runtime-filter-design]], and +[[tx-filter-hil-test]] for the bench measurement of the fold-back. + +Two ordering details of `TransmitProcessing()` (`DSP.cpp:1124-1155`) that matter to anyone +measuring the transmit chain: + +- **`BandEQ` runs before `TXDecimateBy2Again`** (`:1137` vs `:1140`), so the equaliser bank — whose + top cell is 4 kHz — attenuates high-frequency microphone input *before* the stage whose stopband + prevents fold-back. That makes an end-to-end fold-back test weaker evidence about the decimator + than it looks ([[tx-filter-hil-test]]). +- **`Q := I` right after `TXGain`** (`arm_copy_f32(data.I, data.Q, 256)`, `:1139`), so from there + the chain is mono and only the microphone's **left** channel ever reaches the exciter. The + Hilbert pair rebuilds the quadrature relationship downstream ([[ssb-phasing-method]]). +- **`TXGain` scales the exciter output by the requested power** (`:1101-1119`), via + `CalculateSSBTXGain` on `ED.powerOutSSB[band]`. Any measurement of exciter amplitude is + therefore only comparable at a fixed power setting. ## Related theory - [[iq-quadrature-sampling]] — complex baseband, the foundation diff --git a/wiki/firmware/filter-hil-test.md b/wiki/firmware/filter-hil-test.md index 482c05e..d52975b 100644 --- a/wiki/firmware/filter-hil-test.md +++ b/wiki/firmware/filter-hil-test.md @@ -6,7 +6,7 @@ created: 2026-07-29 updated: 2026-07-29 tags: [test, verification, hil, analog-discovery, filters, sample-rate, cat, agc] source_refs: [] -related: ["[[runtime-filter-design]]", "[[sample-rate-switching]]", "[[cat-control]]", "[[dsp-chain]]", "[[agc-design]]", "[[tune-frequency-control]]", "[[iq-quadrature-sampling]]"] +related: ["[[tx-filter-hil-test]]", "[[runtime-filter-design]]", "[[sample-rate-switching]]", "[[cat-control]]", "[[dsp-chain]]", "[[agc-design]]", "[[tune-frequency-control]]", "[[iq-quadrature-sampling]]"] --- # Filter Hardware-in-the-Loop Test @@ -18,6 +18,11 @@ because [[runtime-filter-design]] was otherwise only verified in simulation. Full operating instructions live in `code/tools/filter_hil/README.md`. This page records the parts worth knowing without reading it: the method, the two traps, and the result. +> **Companion suite:** [[tx-filter-hil-test]] does the same job for the transmit chain. Different +> wiring, and a different method — nothing in the transmit chain can be bypassed over CAT, so it +> measures composite responses rather than differences. The two share this suite's CAT plumbing +> (`filter_hil/radio.py`) and its scalar curve fitting (`filter_hil/measure.py`). + ## Rig An Analog Discovery 2 drives `W1`/`W2` into the radio's I/Q receive inputs as a quadrature pair @@ -89,7 +94,10 @@ the audio does not, the DSP is receiving it and the problem is downstream gain.) **Rate invariance, not absolute accuracy.** A corner measured at 192 ksps must land at the same frequency at 176.4 ksps. The bug moves it by **−8.125 %**; the tolerance is **1.5 %** — a factor -of five between correct and broken. Absolute accuracy against the labelled frequency is checked +of five between correct and broken. That figure is affordable *because these are IIR designs*, +whose corners are placed by a continuous prewarped parameter rather than quantised onto a tap +grid; the FIR transmit stages cannot hold better than ≈1.2 % and need a looser bound. See +[[runtime-filter-design]]. Absolute accuracy against the labelled frequency is checked more loosely, because a smooth tilt anywhere in the analog path biases it without saying anything about the firmware. @@ -100,9 +108,25 @@ with it. Their absolute tolerance is relaxed; their rate invariance is not. ## Result -Measured on the bench: **95 checks passed, 0 failed.** Every CW corner and equaliser centre holds -to within **0.3 %** across the rate change where the frozen tables moved them by 8.125 %. The SSB -control reads **0.04 %**. +Measured on the bench (`results/filter_hil_20260728_204015.json`): **95 checks passed, 0 failed**, +against 8.125 % from the frozen tables. + +| Group | Worst \|Δ\| across the rate change | +|---|---| +| CW audio filters (5) | **0.033 %** (median 0.017 %) | +| Equaliser cells, excluding edge limited (11) | **0.160 %** | +| Equaliser cells, edge limited (0, 1, 13) | 0.711 %, 0.367 %, 0.206 % | +| SSB filter — the control (3 widths) | **0.093 %** | + +The three worst cells are precisely the three the suite marks *edge limited*, which is the expected +result rather than a blemish: cells 0 and 1 (198, 250 Hz) sit at or below the SSB low cut and cell +13 (4000 Hz) sits in the decimation skirt, so what was measured there is partly the SSB filter, not +the cell. + +⚠️ An earlier revision of this page summarised the whole result as "within 0.3 %" and the SSB +control as "0.04 %". The first is true only once the edge-limited cells are set aside; the second +was simply wrong. Other pages quoting **0.3 %** for the receive filters' rate invariance are +consistent with the 0.160 % figure above and need no change. ## The suite tests itself diff --git a/wiki/firmware/runtime-filter-design.md b/wiki/firmware/runtime-filter-design.md index 8cffc62..f2c9b44 100644 --- a/wiki/firmware/runtime-filter-design.md +++ b/wiki/firmware/runtime-filter-design.md @@ -6,7 +6,7 @@ created: 2026-07-29 updated: 2026-07-29 tags: [dsp, filters, chebyshev, bilinear, prewarp, equalizer, cw, sample-rate, iir, fir] source_refs: [] -related: ["[[sample-rate-switching]]", "[[dsp-chain]]", "[[cw-processing]]", "[[audio-equalizer]]", "[[multirate-decimation]]", "[[filter-hil-test]]", "[[ssb-phasing-method]]", "[[theory-overview]]"] +related: ["[[sample-rate-switching]]", "[[dsp-chain]]", "[[cw-processing]]", "[[audio-equalizer]]", "[[multirate-decimation]]", "[[filter-hil-test]]", "[[tx-filter-hil-test]]", "[[ssb-phasing-method]]", "[[theory-overview]]"] --- # Run-Time Filter Design (rate-independent coefficients) @@ -94,6 +94,36 @@ not the raw rate. A decimating FIR filters at its input rate and an interpolatin output rate; for both transmit stages that rate is the audio rate, not the 12 ksps the Hilbert transform between them runs at (`DSP_FIR.cpp:1363-1365`). +## ⚠️ The FIR stages are only rate-independent to ≈1.2 %, the IIR ones to 0.3 % + +The two generated **transmit** stages are 48-tap Kaiser-Bessel windowed sincs, and a 48-tap FIR +**does not scale exactly** when its normalised cutoff changes. The taps are quantised to the same +48 positions at both rates, so the realised corner lands in a slightly different place even though +the design specification is identical. Evaluating the generated tap sets directly (cascade of +`TX_DECIMATE3_FC_HZ` and `TX_AUDIO_LPF_FC_HZ`): + +| Audio rate | Cascade −3 dB | −6 dB | +|---|---|---| +| 24 ksps (192 ksps) | **2726 Hz** | 2952 Hz | +| 22.05 ksps (176.4 ksps) | **2759 Hz** | 2969 Hz | + +**= +1.2 %, on correct firmware.** `TransmitChain176k.AudioBandwidthHoldsAcrossRates` allows 2 % +for exactly this reason, and it is why [[tx-filter-hil-test]] uses a 2.5 % tolerance where +[[filter-hil-test]] uses 1.5 %. + +The receive filters do not share this limitation: they are **IIR** cascades bilinear-transformed +from prewarped analog prototypes, so the corner is placed by a continuous parameter rather than +quantised onto a tap grid — which is why they measure to within 0.3 % on the bench. The prewarping +described above is what buys that. + +The practical consequence: **rate invariance is not a single number across the whole firmware.** +A tolerance tight enough for the IIR stages will fail the FIR ones. Both are still an order of +magnitude clear of the 8.125 % the frozen tables produced. + +The same tap-set evaluation gives the transmit cascade's stopband profile — −21.6 dB at 3.5 kHz, +**−52 dB at 4 kHz**, better than −90 dB above 4.5 kHz — which is what fixes where an out-of-band +rejection test can legitimately be gated. See [[tx-filter-hil-test]]. + ## Deliberately *not* generated The decimation, interpolation, Hilbert and [[zoom-fft]] filters are left alone. Their corners @@ -113,7 +143,9 @@ already correct"**. 3.5 kHz (`TX_DECIMATE3_FC_HZ`, `DSP_FIR.cpp:1296`), which sits above the 2.76 kHz the audio bandwidth filter passes and so costs no wanted signal. **Transmitted audio therefore differs from previous releases even at 192 ksps** — the one user-visible behaviour change in this work - that is not a rate-change effect. + that is not a rate-change effect. [[tx-filter-hil-test]] measures the fold-back directly on the + bench, with the caveat that `BandEQ` runs before this stage and attenuates high inputs on its + own. - **The AM DC blocker** had a fixed pole at 0.99 and, worse, its state was a **file-scope static shared across all three `ReceiveFilterConfig` instances**. - **`ApplyEQBandFilter` scrubbed the receive instance's state even on the transmit path.** @@ -127,9 +159,13 @@ already correct"**. 2. **Rate independence** — checks every corner holds across both rates, where the frozen tables moved it by 8.125 %. -Both are simulation. The on-the-bench measurement is [[filter-hil-test]], which found **95 -checks passed, 0 failed**, every CW corner and equaliser centre holding to **within 0.3 %** -across the rate change. +Both are simulation. The on-the-bench measurements are: + +- **Receive** — [[filter-hil-test]] found **95 checks passed, 0 failed**, every CW corner and + equaliser centre holding to **within 0.3 %** across the rate change. +- **Transmit** — [[tx-filter-hil-test]] measures the composite transmit passband corners, + opposite-sideband suppression, and the fold-back the `TX_DECIMATE3_FC_HZ` fix addressed. + Written and self-verified; **not yet run on the bench**. ## Open questions - The equaliser prototypes are stored to 9 decimal places as recovered floats. Nobody has diff --git a/wiki/firmware/spectrum-refresh-floor.md b/wiki/firmware/spectrum-refresh-floor.md index f53d441..45fcf12 100644 --- a/wiki/firmware/spectrum-refresh-floor.md +++ b/wiki/firmware/spectrum-refresh-floor.md @@ -35,7 +35,7 @@ Lowering `NCHUNKS` below 8 on the original code **broke the receiver** (IQ-queue negative). The dominant costs were the full-frame BTE completion blit (~13.8 ms busy-wait), the bandwidth-bar `fillRect`, the 512 `drawLine`s, and Pass-2 (audio-spectrum bars + S-meter). -## SHIPPED outcome (2026-05-30): 11.7 → 18.8 fps +## Outcome as developed (2026-05-30): 11.7 → 18.8 fps On branch `refresh_rate_update`, final config in `MainBoard_DisplayHome.cpp`: `NCHUNKS = 5`, `SPECTRUM_REFRESH_MS = 50`, `AUDIO_SPECTRUM_DECIMATE = 2`, `WATERFALL_DECIMATE = 2`. Three changes made `NCHUNKS = 5` safe: @@ -48,6 +48,23 @@ Trade-off: audio-spectrum, S-meter, and waterfall update at ~9.4 fps (half the t trace cadence is jittery (~43–63 ms). Reviewed live and approved. (Smoother 15.6 fps alternative: `NCHUNKS = 6`, `WATERFALL_DECIMATE = 1`. Full revert: `NCHUNKS = 8`, both decimates = 1.) +## ⚠️ What actually shipped is 15.6 fps, not 18.8 + +`NCHUNKS` is **6** in the tree today (`MainBoard_DisplayHome.cpp:430`), so the shipped spectrum rate +is ≈ `6 × 10.67 ≈ 64 ms` = **15.6 fps** — the "smoother alternative" noted above, but with +`WATERFALL_DECIMATE` left at 2 rather than the 1 that alternative specified. + +It was changed back from 5 to 6 in `f56c8c7`, which is the commit that also bumped +`VERSION` to `"Phx V1.3"` — i.e. the V1.3 release stamp. That commit's subject is +*"Add serial time sync over USB Serial port 0"*, and a near-identical commit (`b63f090`) carries +the same subject on the same day, so the change rode in on what looks like a rebase artefact. + +**Whether the 5 → 6 revert was a deliberate choice at release time or accidental is not +recoverable from the history** — the wiki previously recorded 18.8 fps as the shipped figure, which +was wrong either way. Worth asking the owner: if it was accidental, `NCHUNKS = 5` is a one-line +change to recover 18.8 fps; if deliberate, `WATERFALL_DECIMATE` should probably go back to 1 to +match the alternative as characterised. + ## Ruled out / remaining headroom - **Teensy framebuffer + `writeRect`** — ruled out: the RA8875 is on **SPI**, so a full-frame push is ~40 ms (*slower* than the current chip-accelerated `drawLine` path). A test froze the diff --git a/wiki/firmware/tx-filter-hil-test.md b/wiki/firmware/tx-filter-hil-test.md new file mode 100644 index 0000000..8f4395b --- /dev/null +++ b/wiki/firmware/tx-filter-hil-test.md @@ -0,0 +1,229 @@ +--- +title: Transmit Filter Hardware-in-the-Loop Test +type: decision +status: draft +created: 2026-07-29 +updated: 2026-07-29 +tags: [test, verification, hil, analog-discovery, filters, sample-rate, cat, transmit, ssb, hilbert] +source_refs: [] +related: ["[[filter-hil-test]]", "[[runtime-filter-design]]", "[[sample-rate-switching]]", "[[cat-control]]", "[[dsp-chain]]", "[[ssb-phasing-method]]", "[[audio-equalizer]]", "[[multirate-decimation]]", "[[iq-imbalance-correction]]", "[[tx-carrier-null]]", "[[audio-io]]"] +--- + +# Transmit Filter Hardware-in-the-Loop Test + +`code/tools/tx_filter_hil/` — the transmit counterpart to [[filter-hil-test]]. It measures the +**transmit** DSP filters on the actual radio and checks they hold their designed frequencies at +both sample rates, closing the other half of the gap [[runtime-filter-design]] left: the two +generated transmit stages were previously verified only in simulation. + +Full operating instructions live in `code/tools/tx_filter_hil/README.md`. This page records the +method, the quantitative findings, and — importantly — **what this measurement cannot prove**. + +## Rig + +An Analog Discovery 2 drives `W1` into the microphone input and reads the exciter's **I and Q +outputs on `Ch1` and `Ch2` simultaneously**. CAT on `/dev/ttyACM1`, diagnostics on +`/dev/ttyACM0`. No PTT wiring: the radio is keyed over CAT with `TX;`/`RX;` ([[cat-control]]). + +Ch1/Ch2 order does not matter — the suite detects it (see below). The exciter outputs sit on a +DC bias near **+1.6 V**, so the scope offset is centred there; the AD2's range is peak-to-peak +about that offset, giving a ±2.5 V window on the default 5 V range. + +## The method: complex baseband, not a differential measurement + +The exciter output *is* a complex baseband signal — a 1 kHz microphone tone emerges as a complex +exponential at ±1 kHz, one real sine on each of I and Q, 90° apart ([[iq-quadrature-sampling]]). +Capturing both channels synchronously reconstructs `I + jQ` and so gives the **two-sided** +spectrum, from which one sweep yields: + +- the level at `+f` — the transmit audio response, and +- the level at `-f` — the **opposite-sideband suppression**, the headline specification of an SSB + transmitter ([[ssb-phasing-method]]). + +Both come out of the same capture. Two separate single-channel captures would have no defined +phase relationship, so suppression could not be measured at all. + +⚠️ **The receive suite's differential trick is not available here.** [[filter-hil-test]] measures +every response as the difference between two captures with a filter engaged and bypassed, so the +whole analog path cancels exactly. Nothing in the transmit chain can be bypassed over CAT: there +is no command for `ED.equalizerXmt`, and the two generated FIR stages are unconditional. Every +transmit response is therefore a **composite** of the whole path, microphone input to exciter +output, including the codec front end and the equaliser bank. + +That costs absolute accuracy — hence the loose absolute tolerances — but it costs the rate +comparison **nothing**: no part of the analog path changes when the sample rate does, so it +divides out of a between-rates comparison just as cleanly as a bypass difference would. + +## Resolving the wiring takes two captures, not four + +The receive suite brute-forces its two unknowns by trying all four combinations and keeping +whichever the SSB filter passes. That does not work here, because **every combination produces a +perfectly good tone**; all that changes is which side of DC it lands on. One capture cannot +distinguish "Ch1 on I, upper sideband" from "Ch1 on Q, lower sideband" — swapping the probes and +switching sideband both conjugate the signal. + +What separates them is the radio's own sideband switch. `SidebandSelection()` negates I for USB +and leaves LSB alone (`DSP_FFT.cpp:864-869`), so commanding USB conjugates the transmitted signal +and moves the tone across DC. Nobody rewires the bench between two captures, so **the change +between LSB and USB isolates the radio's contribution from the wiring's**. Which sign LSB +produced then says which input is on I. + +The suite measures the resolved sideband rather than predicting it, because an inverting stage +anywhere in the exciter's analog output would flip it without being a fault. + +## Scope sample rate: 100 kHz, not 96 + +⚠️ A measurement trap specific to this rig. The exciter DAC leaves residual images near its own +192 kHz output rate. Sampling at 96 ksps, an image at `192000 − f` aliases to **exactly `−f`** — +straight onto the mirror frequency the suppression reading uses — and would cap the measurable +suppression at whatever the DAC's image rejection happens to be. At 100 ksps the same image lands +at `8000 + f`, clear of everything measured. Any scope rate that divides 192000 or 176400 has the +same problem; the suite warns if one is given. + +## The tolerance had to be 2.5 %, not 1.5 % + +⚠️ **This is the finding most likely to be misread as a fault.** The transmit corners move +**≈ +1.2 % between rates on correct firmware**, and no tightening of the test can remove it. + +Both generated transmit stages are 48-tap Kaiser-Bessel windowed sincs (`CalcFIRCoeffs`, +`DSP_FIR.cpp:756`). A 48-tap design **does not scale exactly** when its normalised cutoff +changes: the taps are quantised to the same 48 positions at both rates, so the realised corner +lands in a slightly different place even though the design specification is identical. Evaluating +the two generated tap sets directly gives a cascade −3 dB corner of: + +| Audio rate | Cascade −3 dB | −6 dB | +|---|---|---| +| 24 ksps (192 ksps) | **2726 Hz** | 2952 Hz | +| 22.05 ksps (176.4 ksps) | **2759 Hz** | 2969 Hz | + += **+1.2 %**. `TransmitChain176k.AudioBandwidthHoldsAcrossRates` allows 2 % for the same reason. +The bug being hunted is still **−8.125 %**, so 2.5 % leaves better than a factor of three between +correct and broken. **A tolerance tighter than the design's own reproducibility is a tolerance on +the design, not on the firmware, and would cry wolf.** Do not set this to 1.5 % to match the +receive suite. + +This does not apply to the receive filters, which are IIR designs generated from prewarped analog +prototypes — those genuinely hold to 0.3 % on the bench. + +## The transmit stopband profile + +Also from evaluating the generated tap sets (cascade of `TX_DECIMATE3_FC_HZ` 3500 Hz and +`TX_AUDIO_LPF_FC_HZ` 3039.6 Hz, both −6 dB corners, at 24 ksps): + +| Frequency | Cascade | +|---|---| +| 2760 Hz | −3.4 dB | +| 3000 Hz | −6.8 dB | +| 3500 Hz | −21.6 dB | +| 4000 Hz | **−52 dB** | +| 4500 Hz and above | better than −90 dB | + +This matters for how the out-of-band test is gated. An earlier draft demanded 30 dB of rejection +at 3450 Hz, where the cascade is only ~20 dB down **and correctly so** — that is the transition +skirt, not the stopband. The stopband boundary is therefore taken as **4 kHz** +(`bandtable.TX_STOPBAND_FROM_HZ`), above the highest equaliser cell and where the cascade is +comfortably past 50 dB. + +## The alias test has two regions, not one + +`TXDecimateBy2Again` halves the audio rate, so its output Nyquist is `audio_rate/4` — 6 kHz at +192 ksps, 5512 Hz at 176.4 ksps. Above that point a microphone tone **cannot appear at its own +frequency at all**; it can only reappear folded, at `|audio_rate/2 − f|`. So an 8 kHz input +resurfaces at 4 kHz (192 ksps) or 3025 Hz (176.4 ksps). The two regions are checked separately: + +| Probe region | What is measured | +|---|---| +| 4 kHz → fold point | direct rejection: the tone at its own frequency | +| fold point → audio Nyquist | fold-back: the product at `\|audio_rate/2 − f\|` | + +This is the failure [[runtime-filter-design]] fixed — the table `TX_DECIMATE3_FC_HZ` replaced was +flat to 0.425·Fs, so 6–9.5 kHz folded into the transmitted audio unattenuated. The fold +frequencies scale with the rate, so where to look changes per rate; see +[[multirate-decimation]]. + +Both readings are taken against the **rig's own noise floor**, measured with the microphone +silent using the identical windowed peak search. Without that, "−33 dBc" is ambiguous between a +real product and the floor — and the difference decides whether a pass means anything. Results +sitting on the floor are reported as floor-limited, i.e. the true rejection is greater than the +rig can see. + +## What this cannot prove + +Three limits, all repeated in the generated report so a passing run is not over-read: + +1. ⚠️ **A clean fold-back result does not on its own vindicate the decimator.** `BandEQ` runs + *before* `TXDecimateBy2Again` (`DSP.cpp:1137` vs `:1140`) and its highest cell is 4 kHz, so it + already attenuates an 8 kHz input substantially. A clean result proves nothing folds into the + transmitted audio — which is what matters operationally — but + `TransmitChain176k.DecimatorStopsBeforeTheFoldPoint` is what proves that stage's own stopband, + by evaluating the tap set at the fold point directly. +2. **Sideband suppression is checked against a floor, not for rate invariance.** The Hilbert table + is deliberately not regenerated per rate, and that is correct — a Hilbert transformer's usable + band is a fraction of its sample rate, so one fixed table is the same design at any rate and + its band edges are *meant* to move with Fs. Requiring the suppression curve to hold still in + hertz would fail correct firmware. What is measured lumps together the Hilbert accuracy, the + per-band [[iq-imbalance-correction]], and any gain difference between the two exciter outputs; + from the exciter's terminals those are not separable. +3. **The transmit equaliser cells are not measured individually, deliberately.** `DSP_FFT.cpp:402-403` + points `S_Xmt[i].pCoeffs` and `S_Rec[i].pCoeffs` at the *same* array, so the transmit cells + carry byte-for-byte the coefficients [[filter-hil-test]] already sweeps on the receive side. + Adding a CAT command to solo them would re-verify one table through a second biquad instance, + whose only independent state is `pState`. They are still exercised here as part of the + composite passband — **the low corner is theirs**, since nothing in the chain is a deliberate + high pass and what rolls the bottom off is the 198 Hz lowest cell ([[audio-equalizer]]). + +## Operating constraints + +- **The radio transmits continuously for the whole sweep**, several minutes per rate at 100 % + duty. Run with the exciter I/Q feeding the scope only, or into a dummy load. The suite reports + total key-down time. +- ⚠️ **The power setting must not change during a run.** `TXGain` (`DSP.cpp:1101`) derives the + exciter drive from `ED.powerOutSSB[band]` via `CalculateSSBTXGain`, so changing it moves every + level measured. The suite reads it, reports it, and does not touch it. +- **Must be in SSB.** `TX_write` only dispatches PTT from `SSB_RECEIVE` or `CW_RECEIVE` + ([[mode-state-machine]]), and a CW key-down transmits a sidetone-oscillator carrier rather than + processed microphone audio — exercising none of these filters. The suite forces USB (or LSB) and + restores the original modulation. +- **PTT is dropped around every sample-rate change.** `SR_write` returns `?;` unless the radio is + receiving, precisely because `ChangeSampleRate()` reconfigures the I²S clock and rebuilds the + DSP chain (`CAT.cpp:814-827`). The state guard registers "transmit off" **last** so it runs + *first* on the way out, since every other restore assumes the radio is receiving. +- Only the microphone's **left** channel matters: `TransmitProcessing` overwrites Q with a copy of + I immediately after the equaliser (`DSP.cpp:1139`), so a second AWG channel would contribute + nothing ([[audio-io]]). +- Unlike [[filter-hil-test]], **AGC is irrelevant** — it is a receive-path control. + +## The suite tests itself + +`test_tx_filter_hil.py` — 48 hardware-free tests covering the complex-spectrum metrology, the +clip test (which must judge against the AD2's **half**-range about the offset, not the full range +from zero), the wiring-swap symmetry, and the corner extraction. **Including a check that the +comparison fails when handed a simulated −8.125 % shift, and that it names it as that specific +regression** rather than as generic drift. + +The whole pipeline was additionally validated against a simulated radio whose response is the +replicated `CalcFIRCoeffs` cascade: correct firmware → PASS at +1.23 %, frozen tables → FAIL on +all three corners. That is what produced the +1.2 % figure above and drove the tolerance choice. + +## Coupling to the firmware + +- Needs no new CAT commands — `TX`/`RX`/`MG`/`PC`/`MD`/`SR`/`ED` already suffice, which is why + this suite (unlike [[filter-hil-test]]) required no firmware change. +- ⚠️ `bandtable.py` **mirrors design constants from `DSP_FIR.cpp` and `DSP.cpp` by hand**, and + `TX_AUDIO_CORNER_3DB_HZ` / `TX_STOPBAND_*` were derived by evaluating the generated tap sets. + Nothing detects a firmware value edited without updating it. +- It shares `filter_hil.radio` (CAT plumbing, `ED;` parsing, state guard) and the scalar curve + fitting in `filter_hil.measure` with the receive suite; the PTT, mic-gain and power helpers were + added there. + +## Open questions +- **Not yet run on the bench.** The suite is verified against simulation and self-tests; the + measured result is still to come. `--scope-offset` defaults to 1.6 V from the older + `transmit_test.py`, which assumed the exciter loaded by the RF board — the bias may differ with + it disconnected, showing up as `clipped` points. +- The composite low corner mixes the 198 Hz equaliser cell with the microphone input's AC + coupling and they cannot be separated over CAT. A CAT command for `equalizerXmt` would let the + cells be zeroed, isolating the analog contribution — the one case where that command would earn + its keep. +- Whether the +1.2 % tap-quantisation spread could be removed by asking `CalcFIRCoeffs` for more + taps on the transmit stages, or whether it is small enough not to care about. diff --git a/wiki/index.md b/wiki/index.md index 5c2e242..e3f1194 100644 --- a/wiki/index.md +++ b/wiki/index.md @@ -6,7 +6,8 @@ created: 2026-06-08 updated: 2026-07-29 --- - + + # Phoenix Wiki — Index @@ -31,6 +32,7 @@ _Modules, architecture, state machines, DSP chains, design decisions, code herit - [[sample-rate-switching]] — 192 / 176.4 ksps selectable at run time and persisted; `ChangeSampleRate()`, the Fs/4 dial compensation, menu + `SR` CAT paths. *(draft)* - [[runtime-filter-design]] — Hz-specified filters regenerated per rate from recovered analog prototypes; why prewarping is the load-bearing part; the TX decimate-by-2 aliasing fix. *(draft)* - [[filter-hil-test]] — bench measurement of the above on the real radio; the `|Fs/4 + fineTune|` injection trap and the AGC-off requirement. *(draft)* +- [[tx-filter-hil-test]] — the transmit counterpart: synchronous I/Q capture off the exciter gives passband *and* sideband suppression from one sweep; why the tolerance has to be 2.5 % not 1.5 %. *(draft)* **State machines** - [[mode-state-machine]] — ModeSm: SSB/CW × RX/TX, iambic keyer, calibration entry (generated). *(draft)* diff --git a/wiki/log.md b/wiki/log.md index 9ac329f..8c7f16b 100644 --- a/wiki/log.md +++ b/wiki/log.md @@ -770,3 +770,167 @@ asking the owner, because if the answer is USB-audio resampling (22.05 kHz being 44.1 where 24 kHz needs 147:160) it belongs on roadmap/usb-audio and changes how that feature is scoped. Also worth a bench follow-up: loop-budget and group delay at 176.4 vs 192 ksps, which [[real-time-constraints]] currently only characterises at 192. + +--- + +## [2026-07-29] decision | transmit filter HIL suite + the FIR rate-independence limit + +**Trigger:** the human asked for a transmit-side equivalent of the receive filter HIL test +(`code/tools/filter_hil/`), with the AD2's W1 on the microphone input and Ch1/Ch2 on the exciter +I/Q outputs in unknown order. Built `code/tools/tx_filter_hil/` (10 modules, README, and a +`/transmit-filter-test` skill). This entry records what the work *taught*, not the tool inventory. + +**New page:** [[tx-filter-hil-test]]. + +### The load-bearing finding: rate invariance is not one number + +Replicating `CalcFIRCoeffs` in Python and evaluating the generated tap sets directly shows the +two Hz-specified **transmit** stages (`TX_DECIMATE3_FC_HZ` 3500, `TX_AUDIO_LPF_FC_HZ` 3039.6) +give a cascade −3 dB corner of **2726 Hz at 24 ksps but 2759 Hz at 22.05 ksps — +1.2 %**, on +correct firmware. Cause: both are **48-tap** Kaiser windowed sincs, and a fixed tap count cannot +place a corner exactly when the normalised cutoff moves; the taps quantise onto the same 48 +positions at both rates. + +This bounds any rate-invariance tolerance. The receive suite's 1.5 % is affordable only because +those stages are **IIR**, bilinear-transformed from prewarped analog prototypes — a continuous +parameter, hence the measured 0.3 %. Applying 1.5 % to the transmit stages would fail correct +firmware, so the transmit suite uses **2.5 %**; `TransmitChain176k.AudioBandwidthHoldsAcrossRates` +already allowed 2 % for the same reason, which corroborates it. The bug signature is still +−8.125 %, leaving better than 3×. + +Filed into [[runtime-filter-design]] (new section, with the table), and referenced from +[[filter-hil-test]] (qualifying *why* 1.5 % is affordable there) and [[multirate-decimation]]. + +The same evaluation gave the transmit stopband profile — −21.6 dB at 3.5 kHz, **−52 dB at 4 kHz**, +>90 dB above 4.5 kHz. That corrected a mistake in the suite: an early draft demanded 30 dB of +out-of-band rejection at 3450 Hz, which is on the **transition skirt** and only ~20 dB down +*correctly*. The stopband boundary is now taken as 4 kHz. + +### Other findings recorded + +- **`TX;` / `RX;` are parameterless *writes*** — three characters, no reply (handlers return + `empty_string_p`, which `command_parser` suppresses). Any CAT client inferring "3 chars ⇒ read" + blocks for a full read timeout on every key/unkey. → [[cat-control]], with the corollary that + `TX_write` silently does nothing outside `SSB_RECEIVE`/`CW_RECEIVE`, so the CAT reply cannot tell + a client whether the radio keyed. +- **The Hilbert table is correctly *not* regenerated per rate.** Its usable band is a fraction of + Fs, so one fixed table is the same design at any rate and its edges are *meant* to scale. Hence + sideband suppression is checked against a floor, not for rate invariance — requiring it to hold + still in hertz would fail correct firmware. → [[ssb-phasing-method]]. +- **Sideband suppression is directly measurable** from a synchronous I/Q capture (`I + jQ`, ratio + of `+f` to `−f`); and `SidebandSelection()`'s USB inversion doubles as the *only* way to resolve + which scope probe is on I, since swapping probes and switching sideband both conjugate the + signal and one capture cannot distinguish them. → [[ssb-phasing-method]]. +- **`BandEQ` runs before `TXDecimateBy2Again`**, so it attenuates high mic input before the stage + whose stopband prevents fold-back — which makes an end-to-end fold-back test weaker evidence + about the decimator than it appears. Also `Q := I` after `TXGain` (chain is mono from there, + only mic-left matters) and `TXGain` scaling with requested power (exciter amplitude only + comparable at fixed power). → [[dsp-chain]]. +- **The transmit EQ cells are not independently verifiable**, because `S_Xmt[i].pCoeffs` and + `S_Rec[i].pCoeffs` are the *same array* — a transmit instance's only own state is `pState`. So + no `equalizerXmt` CAT command was added, and the cells are exercised via the composite passband + instead, where the ~200 Hz low corner is cell 0's. → [[audio-equalizer]], [[cat-control]]. +- **Measurement trap worth keeping:** the scope rate must not divide the radio's output rate. At + 96 ksps a DAC image at `192000 − f` aliases to exactly `−f`, onto the mirror frequency the + suppression reading uses. 100 kHz is the default for that reason. + +**Pages updated:** runtime-filter-design (new FIR-vs-IIR section + stopband profile + bench +verification split), filter-hil-test (companion box, tolerance qualified), cat-control (TX/RX +write trap, missing `equalizerXmt`, `TX_write` state guard), ssb-phasing-method (Hilbert rationale ++ bench suppression measurement), multirate-decimation (FIR caveat + per-rate fold-point table), +audio-equalizer (testability corollary), dsp-chain (TransmitProcessing ordering). index.md: +47→48 content pages (firmware 25→26). + +**Open / next:** the suite has **not been run on the bench** — everything above is from tap-set +evaluation, self-tests (48, incl. a simulated −8.125 % shift that must FAIL and must be *named*), +and an end-to-end simulation driven by the replicated FIR cascade (correct → PASS at +1.23 %, +frozen → FAIL). Two things to watch on the first real run: `--scope-offset` defaults to 1.6 V from +the older `transmit_test.py`, which assumed the exciter loaded by the RF board, so the bias may +differ with it disconnected; and the composite low corner mixes cell 0 with the mic input's AC +coupling, which is the one case where an `equalizerXmt` command would earn its keep. + +--- + +## [2026-07-29] lint | README version history — two wiki figures corrected + +**Trigger:** asked to audit the top-level README, then to write the missing V1.3 / V1.4.0 release +notes. Sourcing numbers for those notes from the code and from the HIL result JSON turned up two +errors in wiki pages. + +### 1. Shipped spectrum rate is 15.6 fps, not 18.8 + +[[spectrum-refresh-floor]] recorded "**SHIPPED outcome: 11.7 → 18.8 fps**" with `NCHUNKS = 5`. +`NCHUNKS` is **6** in the tree (`MainBoard_DisplayHome.cpp:430`) → ≈64 ms → **15.6 fps**. + +Traced with `git log -L`: 4 → 8 (`53ccfa9`) → 6 (`744d61d`, "15.6 fps") → 5 (`d15b17e`, "18.8 fps") +→ **6** (`f56c8c7`). That last commit is the **V1.3 release stamp** — it also bumped `VERSION` to +`"Phx V1.3"` — but its subject is "Add serial time sync over USB Serial port 0", and `b63f090` +carries an identical subject the same day, so the revert rode in on what looks like a rebase +artefact. Intent is not recoverable from the history; recorded as an open question for the owner, +since if accidental it is a one-line change to recover 18.8 fps. The page now states the shipped +figure and keeps the developed figure as such. + +### 2. HIL result summary was imprecise, and the SSB control figure was wrong + +[[filter-hil-test]] summarised the bench run as "every CW corner and equaliser centre within +**0.3 %**" and the SSB control as "**0.04 %**". Recomputed from +`results/filter_hil_20260728_204015.json` (the 95-pass run): + +| Group | Worst \|Δ\| | +|---|---| +| CW audio filters (5) | 0.033 % | +| EQ cells excluding edge limited (11) | 0.160 % | +| EQ cells edge limited (0, 1, 13) | 0.711 / 0.367 / 0.206 % | +| SSB control (3 widths) | **0.093 %** | + +So "0.3 %" holds *only* once the edge-limited cells are set aside — and pleasingly, the three worst +cells are exactly the three the suite already flags as edge limited, which corroborates that +classification rather than undermining it. The SSB figure was simply wrong. Replaced the prose +summary with the table. + +Deliberately **not** propagated: five other pages quote 0.3 % for receive rate invariance +([[runtime-filter-design]], [[audio-equalizer]], [[cw-processing]], [[multirate-decimation]], +[[tx-filter-hil-test]]). All are consistent with the 0.160 % measurable-cell figure, so they stand; +churning them would add noise. The FIR-vs-IIR contrast in [[runtime-filter-design]] is unaffected — +the TX ≈1.2 % is an exact tap-set evaluation, the RX 0.16 % a measurement, and the gap is real. + +**README changes (not wiki, recorded for traceability):** wrote the missing V1.3 and V1.4.0 release +notes; fixed `code/Contributors.txt` → `code/src/PhoenixSketch/Contributors.txt`; removed the +non-existent `TuneSm` from the architecture section (the tune state is `HandleTuneState` in +`HardwareSm.cpp`); "160m to 6m" → "160m to 4m plus general coverage" (13 bands incl. GEN); +feature list gained all four auto-calibration routines and the selectable sample rate; added +`code/tools` and `wiki/` to File Organization; refreshed the ctest sample output 657 → 740 from a +real run. + +**Open:** the `NCHUNKS` intent question above is the one item needing the owner. + +## [2026-07-30] decision | `TX` must accept its optional parameter (`TX0;`/`TX1;`/`TX2;`) + +Started as a bug in `code/tools/serial_diag.py`, which sent `TX1;` and got `?;`. The first fix +changed the tool to send `TX;`. Checking `code/docs/ts_480_pc.pdf` p.21 showed the firmware was +the wrong side: the set form is `TX P1;`, P1 is 0 (normal/MIC), 1 (DTS via ANI) or 2 (TX Tune), +and **"if no P1 parameter is specified, P1=0 is used"** — so all four forms are legal. + +Not pedantic: Hamlib (WSJT-X, fldigi, Pat) picks the form from the PTT type — `TX;` for +`RIG_PTT_ON`, `TX0;` for `RIG_PTT_ON_MIC`, `TX1;` for `RIG_PTT_ON_DATA` — so Phoenix keyed for +some clients and refused for others depending on the user's data-mode settings. That matches the +owner's recollection of it working on one OS but not another. + +**Decisions:** accept every P1 value and ignore it (Phoenix has neither a data input nor a tune +mode to distinguish); also accept TS-2000-style `RX0;`/`RX1;`, which `CAT_test.cpp` already +exercised. + +**Implementation:** `{ "TX", 3+1, 3, TX_write, TX_write }` and the same shape for `RX`. The idiom +for an optional parameter is the *write* function in both slots — `set_len` the parameterised +form, `read_len` the bare one. No `TX_read`: it would make `TX;` read instead of key, breaking +`RIG_PTT_ON` and both HIL suites. Also guarded `command_parser`'s two length tests with `> 0`, +closing a latent `command[-1]` out-of-bounds read affecting the nine entries with a zero length +field (`ID`, `IF`, `PD`, `ED`, `PR` set_len 0; `BD`, `BU` read_len 0). + +**Method note worth keeping:** `CAT_test.cpp` already asserted TX accepted all three forms — but +called `TX_write()` directly, and `TX_write` ignores its argument. The suite passed for the whole +life of the bug because it never exercised the dispatcher that was rejecting them. New tests go +through `command_parser()`; they were confirmed failing before the fix. 745/745 pass after. + +Updated [[cat-control]]. **Open:** the rest of the command table has never been audited against +the spec, and `TX`/`RX` were wrong, so others may be. Noted on the page. diff --git a/wiki/roadmap/documentation-todos.md b/wiki/roadmap/documentation-todos.md index 920b2a5..a12da50 100644 --- a/wiki/roadmap/documentation-todos.md +++ b/wiki/roadmap/documentation-todos.md @@ -6,7 +6,7 @@ created: 2026-06-08 updated: 2026-07-29 tags: [todo, open-questions, discrepancies, wiki-maintenance] source_refs: [] -related: ["[[index]]", "[[iq-imbalance-correction]]", "[[multirate-decimation]]", "[[noise-reduction]]", "[[fast-convolution-filtering]]", "[[dsp-chain]]", "[[runtime-filter-design]]", "[[sample-rate-switching]]", "[[filter-hil-test]]"] +related: ["[[index]]", "[[iq-imbalance-correction]]", "[[multirate-decimation]]", "[[noise-reduction]]", "[[fast-convolution-filtering]]", "[[dsp-chain]]", "[[runtime-filter-design]]", "[[sample-rate-switching]]", "[[filter-hil-test]]", "[[tx-filter-hil-test]]"] --- # Documentation TODOs & Open Questions @@ -108,10 +108,26 @@ is tagged **⚠ possible bug** so it stands out. `ReceiveFilterConfig`s), but its fixed 0.99 was not obviously revisited now that the rate can change. → [[runtime-filter-design]], [[dsp-chain]] - **`bandtable.py` mirrors firmware constants by hand.** Nothing detects a value edited in - `DSP_FIR.cpp`/`Globals.cpp` without updating `code/tools/filter_hil/bandtable.py`. - → [[filter-hil-test]] + `DSP_FIR.cpp`/`Globals.cpp` without updating `code/tools/filter_hil/bandtable.py` — now also + `code/tools/tx_filter_hil/bandtable.py`, whose `TX_AUDIO_CORNER_3DB_HZ` and `TX_STOPBAND_*` were + derived by evaluating the generated tap sets rather than copied. + → [[filter-hil-test]], [[tx-filter-hil-test]] - **No CAT command for AGC mode.** The one setting [[filter-hil-test]] needs and cannot set; the suite refuses to run instead. → [[cat-control]] +- **No CAT command for the transmit equaliser** (`ED.equalizerXmt`) to mirror `EQ`. Deliberately + not added, since `S_Xmt[i].pCoeffs` and `S_Rec[i].pCoeffs` are the same array — but it would let + [[tx-filter-hil-test]] zero the cells and so separate the ~200 Hz composite low corner into the + equaliser's contribution and the mic input's AC coupling, which it currently cannot. + → [[cat-control]], [[audio-equalizer]] +- ⚠ **Rate invariance is not one tolerance.** The 48-tap FIR transmit stages hold to ≈1.2 % across + a rate change where the IIR receive stages hold to 0.3 %, because a fixed tap count cannot place + a corner exactly when the normalised cutoff moves. Any future test or spec that quotes a single + rate-invariance figure for "the filters" will be wrong for one half. + → [[runtime-filter-design]], [[tx-filter-hil-test]] +- **Transmit HIL suite not yet run on hardware.** Written, self-tested (48 tests) and validated + against a simulation of the real FIR cascade, but the bench numbers are outstanding — including + whether the 1.6 V default scope offset still matches the exciter's DC bias with the RF board + disconnected. → [[tx-filter-hil-test]] - **CAT `set_len` / `read_len` must differ**, or the read handler is unreachable — the bug that made `FW;` write-only. Enforced by convention only; a static assertion over `valid_commands[]` would catch the next one. → [[cat-control]] diff --git a/wiki/theory/audio-equalizer.md b/wiki/theory/audio-equalizer.md index ef08c2c..2f730b2 100644 --- a/wiki/theory/audio-equalizer.md +++ b/wiki/theory/audio-equalizer.md @@ -6,7 +6,7 @@ created: 2026-06-09 updated: 2026-07-29 tags: [equalizer, eq, filterbank, biquad, audio, tx, rx, sample-rate] source_refs: [] -related: ["[[theory-overview]]", "[[dsp-chain]]", "[[ssb-phasing-method]]", "[[display-subsystem]]", "[[persistent-config]]", "[[front-panel]]", "[[runtime-filter-design]]", "[[filter-hil-test]]", "[[cat-control]]"] +related: ["[[theory-overview]]", "[[dsp-chain]]", "[[ssb-phasing-method]]", "[[display-subsystem]]", "[[persistent-config]]", "[[front-panel]]", "[[runtime-filter-design]]", "[[filter-hil-test]]", "[[cat-control]]", "[[tx-filter-hil-test]]"] --- # Audio Equalizer (14-band parallel filterbank) @@ -64,6 +64,13 @@ unity (`EQ_BAND_GAIN[]`, `:1254-1259`). chains run at the same audio rate. ⚠️ That separation was **broken in practice** until 2026-07: `ApplyEQBandFilter` scrubbed the *receive* instance's state even on the transmit path ([[runtime-filter-design]]). + - *Testability corollary:* because the coefficients are literally the same array, verifying the + transmit cells' centre frequencies independently would add nothing — the only state a transmit + instance owns is its `pState`. This is why [[tx-filter-hil-test]] does **not** sweep them and + why no `EQ`-equivalent CAT command for `equalizerXmt` was added ([[cat-control]]). The transmit + cells are still exercised there as part of the composite passband: nothing in the transmit + chain is a deliberate high pass, so **the ~200 Hz low corner of the transmitted audio is set by + cell 0** (198.4 Hz) and moves if the cells are mis-generated. - **Per-band gains:** `ED.equalizerRec[14]` (RX) and `ED.equalizerXmt[14]` (TX), [[persistent-config]]. Stored as integers, scaled `/100` (100 = unity), default all 100 (flat). - **The summation** (`ApplyEQBandFilter`): each band filters `data->I` → `eqFiltBuffer`, scales diff --git a/wiki/theory/multirate-decimation.md b/wiki/theory/multirate-decimation.md index 48b4c95..833052d 100644 --- a/wiki/theory/multirate-decimation.md +++ b/wiki/theory/multirate-decimation.md @@ -6,7 +6,7 @@ created: 2026-06-08 updated: 2026-07-29 tags: [decimation, interpolation, multirate, polyphase, fir, sample-rate] source_refs: [] -related: ["[[theory-overview]]", "[[fast-convolution-filtering]]", "[[iq-quadrature-sampling]]", "[[dsp-chain]]", "[[real-time-constraints]]", "[[sample-rate-switching]]", "[[runtime-filter-design]]"] +related: ["[[theory-overview]]", "[[fast-convolution-filtering]]", "[[iq-quadrature-sampling]]", "[[dsp-chain]]", "[[real-time-constraints]]", "[[sample-rate-switching]]", "[[runtime-filter-design]]", "[[tx-filter-hil-test]]"] --- # Multirate Decimation & Interpolation @@ -80,6 +80,25 @@ The framing that actually predicts behaviour is **how a stage's corner is specif | **Fraction of Fs** — decimation, interpolation, Hilbert, [[zoom-fft]] | corner scales with Fs, which is *correct* for anti-alias/anti-image | left alone | | **Absolute Hz** — CW audio, equaliser cells, CW decoder FIR, the two TX stages around the Hilbert | corner drifts by the rate ratio, which is a **bug** | regenerated per rate ([[runtime-filter-design]]) | +⚠️ "Regenerated per rate" does not mean "identical at every rate". The two Hz-specified **TX** +stages are 48-tap FIRs, and a fixed tap count cannot place a corner exactly when the normalised +cutoff moves — they hold to **≈1.2 %**, against 0.3 % for the IIR receive stages. See +[[runtime-filter-design]]. + +### Where the TX fold point lands, per rate + +`TXDecimateBy2Again` is the stage whose stopband matters most, because it halves the audio rate +and so folds everything above a quarter of it back into the transmitted audio: + +| Fs | Audio rate | Output Nyquist (fold point) | An 8 kHz mic tone reappears at | +|---|---|---|---| +| 192 ksps | 24 kHz | **6 kHz** | 4000 Hz | +| 176.4 ksps | 22.05 kHz | **5512 Hz** | 3025 Hz | + +The fold frequency scales with Fs, so a bench test has to recompute where to look at each rate — +which is what [[tx-filter-hil-test]] does. The pre-2026-07 table was flat to 0.425·Fs, i.e. it +did not attenuate that region at all. + ## The filter-length formula (and why two stages) `InitializeDecimationFilter` sizes each filter with the fred-harris estimate *(general DSP)*: diff --git a/wiki/theory/ssb-phasing-method.md b/wiki/theory/ssb-phasing-method.md index e58466d..feaa0c3 100644 --- a/wiki/theory/ssb-phasing-method.md +++ b/wiki/theory/ssb-phasing-method.md @@ -3,10 +3,10 @@ title: SSB by the Phasing (Hilbert) Method type: concept status: draft created: 2026-06-08 -updated: 2026-06-08 -tags: [ssb, phasing, hilbert, usb, lsb, demodulation, modulation] +updated: 2026-07-29 +tags: [ssb, phasing, hilbert, usb, lsb, demodulation, modulation, sample-rate, hil] source_refs: [] -related: ["[[theory-overview]]", "[[iq-quadrature-sampling]]", "[[fast-convolution-filtering]]", "[[dsp-chain]]", "[[mode-state-machine]]"] +related: ["[[theory-overview]]", "[[iq-quadrature-sampling]]", "[[fast-convolution-filtering]]", "[[dsp-chain]]", "[[mode-state-machine]]", "[[tx-filter-hil-test]]", "[[runtime-filter-design]]", "[[iq-imbalance-correction]]"] --- # SSB by the Phasing (Hilbert) Method @@ -55,6 +55,33 @@ Key implementation details: - The quadrature pair is then interpolated back to 192 kHz and sent to the codec → Si5351 quadrature mixer on the [[rf-board]]. +⚠️ **The Hilbert table is deliberately *not* regenerated per sample rate**, and that is correct +rather than an oversight. A Hilbert transformer's usable band is a **fraction of its sample +rate**, so one fixed 100-tap table is the same design at any rate — its band edges are *meant* to +scale with Fs, exactly like an anti-alias filter's ([[runtime-filter-design]]). At 176.4 ksps the +Hilbert runs at 11.025 kHz instead of 12 kHz and its ~5 kHz band shrinks in proportion, which +costs nothing because the transmit audio bandwidth is only 2.76 kHz. This is why +[[tx-filter-hil-test]] checks sideband suppression against a **floor** rather than for rate +invariance in hertz: requiring the suppression curve to hold still would fail correct firmware. + +## Measuring sideband suppression on the bench + +The transmit output is complex baseband, so suppression is directly observable: capture I and Q +**synchronously**, form `I + jQ`, and read the ratio of the line at `+f` to the one at `−f`. Both +come out of a single capture. Two separate single-channel captures would have no defined phase +relationship between them and the ratio would be meaningless — the sideband information lives +entirely in the phase *between* the channels. + +The `SidebandSelection()` sign flip also has a use the firmware never intended: because +commanding USB conjugates the transmitted signal, it moves the tone to the other side of DC. +Swapping the two scope probes does the same thing, so a single capture cannot tell the two apart — +but the **change** between LSB and USB can, since nobody rewires the bench mid-measurement. That +is how [[tx-filter-hil-test]] resolves which probe is on I without being told. + +Note this measurement cannot separate the Hilbert pair's phase accuracy from +[[iq-imbalance-correction]]'s per-band amplitude/phase correction, or from a plain gain difference +between the two exciter outputs. From the exciter's terminals all three look identical. + ## Receive path — phasing done in the frequency domain On RX, Phoenix doesn't run a separate time-domain Hilbert. Instead, sideband selection is From 40635af0364225fea44c9d728f32d91d54352b80 Mon Sep 17 00:00:00 2001 From: Oliver King Date: Thu, 30 Jul 2026 17:39:25 -0400 Subject: [PATCH 17/25] Make flash-radio read arduino.json, and fix its upload step The skill hardcoded the FQBN in both of its commands and then, in prose, told the reader to prefer code/.vscode/arduino.json if the two disagreed. They did disagree: the skill said speed=600,opt=o1lto and the file says speed=528,opt=o2lto, so following the skill literally built a binary at the wrong clock with different optimisation flags. It now reads board, configuration, sketch, output and port out of the file with jq and echoes them, so there is nothing left to drift and the values used are visible in the transcript. The upload step never worked. The Teensy loader cannot resolve relative paths, which produces two different and equally unhelpful errors: upload --input-dir ../ArduinoOutput [sketch] "Teensy Loader could not find the file PhoenixSketch.ino" upload --input-file ../ArduinoOutput/...hex "Teensy Loader is unable to read your compiled sketch" upload --input-file /abs/path/...hex works compile --upload -p PORT works The main path is now compile --upload, which arduino-cli serves from its build cache, with the absolute-path --input-file form documented for re-flashing without a recompile. All four rows above were run against the radio rather than reasoned about, and the table is in the skill so nobody re-derives it. Added the things that otherwise read as failures: the "Teensy should be selected from teensy ports" warning prints on every upload and means nothing, board list shows the ACM ports as Unknown, the tree builds with many pre-existing -Wunused warnings, and the auto-reboot into the bootloader is unreliable, so the PROGRAM button may be needed - tell the user rather than retrying silently. Deleted the flash skill, which did the same job with the same stale FQBN and the same broken upload, plus a --libraries lib pointing at a directory that does not exist in this tree. Two skills with near-identical descriptions also left the choice between them to chance. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01T9L3rdDh97Ywei8kr3YC6j --- .claude/skills/flash-radio/SKILL.md | 127 +++++++++++++++++++++------- .claude/skills/flash/SKILL.md | 77 ----------------- code/src/PhoenixSketch/BuildInfo.h | 4 +- 3 files changed, 100 insertions(+), 108 deletions(-) delete mode 100644 .claude/skills/flash/SKILL.md diff --git a/.claude/skills/flash-radio/SKILL.md b/.claude/skills/flash-radio/SKILL.md index afc5cac..5133689 100644 --- a/.claude/skills/flash-radio/SKILL.md +++ b/.claude/skills/flash-radio/SKILL.md @@ -7,50 +7,119 @@ description: Compile the PhoenixSketch production firmware and flash it to the T Compiles `code/src/PhoenixSketch/PhoenixSketch.ino` with `arduino-cli` and uploads the resulting `.hex` to the connected Teensy 4.1. -The build settings come from `code/.vscode/arduino.json` and must stay in sync with it: +## Build settings — read them, do not retype them -| Setting | Value | -| --- | --- | -| Board (FQBN base) | `teensy:avr:teensy41` | -| FQBN options | `usb=serial2,speed=600,opt=o1lto,keys=en-us` | -| Sketch | `src/PhoenixSketch/PhoenixSketch.ino` (relative to `code/`) | -| Output dir | `../ArduinoOutput` (relative to `code/`) | -| Default port | `/dev/ttyACM0` | +`code/.vscode/arduino.json` is the single source of truth. Do **not** hardcode the FQBN +in a command: this file has drifted from copies pasted into skills before (the CPU speed +and optimisation flags changed), and a stale FQBN silently builds a different binary. + +Read the values into shell variables first, and use those for every subsequent command: + +```bash +cd /home/oliver/Sync/Ham/T41/Software/Phoenix/code +CFG=.vscode/arduino.json +FQBN="$(jq -r '.board + ":" + .configuration' "$CFG")" +SKETCH="$(jq -r .sketch "$CFG")" +OUTDIR="$(jq -r .output "$CFG")" +PORT="$(jq -r .port "$CFG")" +echo "FQBN=$FQBN SKETCH=$SKETCH OUTDIR=$OUTDIR PORT=$PORT" +``` -If those values diverge from `code/.vscode/arduino.json`, prefer the file and tell the user. +Echo them so the values used are visible in the transcript. As of 2026-07-30 that yields +`teensy:avr:teensy41:usb=serial2,speed=528,opt=o2lto,keys=en-us`, sketch +`src/PhoenixSketch/PhoenixSketch.ino`, output `../ArduinoOutput`, port `/dev/ttyACM0` — +but read the file, do not trust this paragraph. + +`usb=serial2` is Dual Serial: the radio enumerates as two ports. The first +(`/dev/ttyACM0`) is diagnostics and the flashing port; the second (`/dev/ttyACM1`) is CAT +at 38400. ## Steps -1. **Check the board is connected.** Run `arduino-cli board list` and confirm a Teensy is present (it usually appears as `/dev/ttyACM0`, FQBN `teensy:avr:teensy41`). If no Teensy is listed, stop and tell the user to connect/power the radio — do not try to flash a missing device. +1. **Check the board is connected.** + ```bash + arduino-cli board list + ``` + A connected radio shows a `Teensy Ports` row with FQBN `teensy:avr:teensy41`. The + `/dev/ttyACM*` rows show `Unknown` — that is normal, not a problem. If no Teensy row + appears at all, stop and tell the user to connect/power the radio. -2. **Compile.** From the `code/` directory: +2. **Compile and upload in one step.** This is the reliable path — see "Why one step" + below. ```bash - arduino-cli compile \ - --fqbn "teensy:avr:teensy41:usb=serial2,speed=600,opt=o1lto,keys=en-us" \ - --output-dir ../ArduinoOutput \ - src/PhoenixSketch/PhoenixSketch.ino + arduino-cli compile --upload -p "$PORT" \ + --fqbn "$FQBN" \ + --output-dir "$OUTDIR" \ + "$SKETCH" ``` - Compiles take a while; run with a generous Bash timeout (e.g. 600000 ms / 10 min). If compilation fails, surface the first error and stop — do not flash a broken build. + Use a generous Bash timeout (600000 ms / 10 min); a cold build takes minutes, a cached + one is quick. If compilation fails, surface the first error and stop — `--upload` will + not flash a broken build, but say so explicitly rather than letting the failure look + like an upload problem. -3. **Flash.** If the port discovered in step 1 differs from `/dev/ttyACM0`, use that one. From the `code/` directory: +3. **Confirm the board came back.** A successful flash reboots the Teensy and the ports + re-enumerate: ```bash - arduino-cli upload \ - -p /dev/ttyACM0 \ - --fqbn "teensy:avr:teensy41:usb=serial2,speed=600,opt=o1lto,keys=en-us" \ - --input-dir ../ArduinoOutput \ - src/PhoenixSketch/PhoenixSketch.ino + sleep 4 && ls -l /dev/ttyACM* ``` - The Teensy loader may prompt the user to press the physical button on the board — mention this if upload appears to hang. + The timestamps should be seconds old. If the radio is meant to be usable afterwards, + a `printf 'IF;' > /dev/ttyACM1` should answer. + +4. **Report.** One or two lines: compile result, upload result, notable warnings. The + tree builds with many pre-existing `-Wunused-*` warnings — do not report those as new. + +## Expected output, and what is not an error + +- **`Teensy should be selected from "teensy ports" rather than "Serial ports"`** — a + harmless warning printed on every upload. Ignore it. +- **`New upload port: /dev/ttyACM0 (serial)`** — success. +- A successful run ends with the memory-usage table and no `Failed uploading:` line. + Check the exit status rather than eyeballing, since the warning above looks alarming. + +## Why one step, and how to re-flash without recompiling + +A separate `arduino-cli upload` **fails** on this setup in two different ways, both +verified on 2026-07-30: + +| Command | Result | +| --- | --- | +| `upload --input-dir ../ArduinoOutput [sketch]` | `Teensy Loader could not find the file PhoenixSketch.ino` — fails with or without the trailing sketch argument | +| `upload --input-file ../ArduinoOutput/PhoenixSketch.ino.hex` | `Teensy Loader is unable to read your compiled sketch` | +| `upload --input-file /abs/path/.../PhoenixSketch.ino.hex` | **works** | +| `compile --upload -p PORT` | **works** | + +The Teensy loader cannot resolve relative paths. So to re-flash an existing build without +recompiling, pass an **absolute** path to the `.hex`: + +```bash +arduino-cli upload -p "$PORT" --fqbn "$FQBN" \ + --input-file /home/oliver/Sync/Ham/T41/Software/Phoenix/ArduinoOutput/PhoenixSketch.ino.hex +``` + +Otherwise prefer step 2 — arduino-cli caches the build, so re-running `compile --upload` +against an unchanged tree costs little. + +## If the upload hangs or the board does not reboot -4. **Report.** Summarise in 1–2 lines: whether compile succeeded, whether upload succeeded, and any notable warnings. +The Teensy's auto-reboot into the bootloader is unreliable. If the upload sits waiting, +ask the user to **press the PROGRAM button on the Teensy**, then re-run the step-2 +command. Do not keep retrying without telling them — nothing will happen until the button +is pressed. ## Args -- `compile-only` — run step 2 only; skip the flash step. Useful when no board is connected or the user just wants to verify the build. -- `flash-only` — skip compile and re-flash whatever is already in `../ArduinoOutput`. Only valid if that directory contains a recent build for this sketch; otherwise fall back to the full compile+flash. +- `compile-only` — run the compile without `--upload`; skip the flash. Useful when no + board is connected or the user just wants to verify the build. +- `flash-only` — skip the compile and re-flash what is already in `$OUTDIR`, using the + absolute-path `--input-file` form above. Only valid if that directory holds a recent + build of this sketch; otherwise fall back to a full compile and say that you did. ## Notes -- Always run from `code/` so the relative paths in `arduino.json` resolve correctly. -- Do **not** invoke this skill to build the unit tests — those use CMake under `code/test/build/` and are a separate workflow. -- The `code/build/` directory is the CMake test build; the firmware artifacts go in `ArduinoOutput/` at the repo root. +- Always run from `code/` so the relative paths in `arduino.json` resolve. +- Do **not** use this skill for the unit tests — those are CMake under `code/test/build/` + and are a separate workflow (`run-tests`). +- `code/build/` is the CMake test build; firmware artifacts go to `ArduinoOutput/` at the + repo root. +- There is no `code/lib/` in this tree. If a future build needs in-tree forked libraries, + add `--libraries lib` — but do not pass it while that directory is absent. diff --git a/.claude/skills/flash/SKILL.md b/.claude/skills/flash/SKILL.md deleted file mode 100644 index 6a3566b..0000000 --- a/.claude/skills/flash/SKILL.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -name: flash -description: Compile and flash the PhoenixSketch firmware to the T41 radio (Teensy 4.1). Use when the user wants to build, compile, upload, or flash the production firmware to the radio. Requires the radio connected via USB at /dev/ttyACM0. -when_to_use: "flash radio", "compile firmware", "upload firmware", "build and flash", "program the radio", "flash the Teensy" -argument-hint: "[--compile-only]" -arguments: [compile_only] -allowed-tools: Bash(arduino-cli*) Bash(ls /dev/ttyACM*) Bash(ls /dev/ttyUSB*) -user-invocable: true ---- - -# Flash PhoenixSketch to T41 Radio - -Compile the PhoenixSketch Arduino firmware and upload it to the Teensy 4.1 via USB. - -## Build configuration - -From `code/.vscode/arduino.json`: -- **Sketch**: `code/src/PhoenixSketch/PhoenixSketch.ino` -- **Board**: `teensy:avr:teensy41` -- **Settings**: Dual Serial, 600 MHz, Fast with LTO (`usb=serial2,speed=600,opt=o1lto,keys=en-us`) -- **Output dir**: `ArduinoOutput/` (repo root) -- **Port**: `/dev/ttyACM0` - -## Steps - -### 1. Check the radio is connected - -```bash -ls /dev/ttyACM* -``` - -If `/dev/ttyACM0` is absent, the radio is not connected or not powered on. Stop and tell the user. - -### 2. Compile - -Run from the `code/` directory: - -```bash -cd /home/oliver/Sync/Ham/T41/Software/Phoenix/code && \ -arduino-cli compile \ - --fqbn "teensy:avr:teensy41:usb=serial2,speed=600,opt=o1lto,keys=en-us" \ - --libraries lib \ - --output-dir ../ArduinoOutput \ - src/PhoenixSketch/PhoenixSketch.ino -``` - -`--libraries lib` adds the in-tree `code/lib/` directory (which holds -the Phoenix-owned forked libraries, e.g. `RA8875_DMA`) to arduino-cli's -search path. - -Expected memory report on success (approximate): -``` -FLASH: code:~287KB free for files:~7.7MB - RAM1: variables:~127KB free for local variables:~102KB - RAM2: variables:~300KB free for malloc/new:~224KB -``` - -If compilation fails, report the full error output to the user and stop — do not attempt to upload. - -### 3. Upload (skip if `--compile-only` was passed) - -```bash -arduino-cli upload \ - --fqbn "teensy:avr:teensy41:usb=serial2,speed=600,opt=o1lto,keys=en-us" \ - --port /dev/ttyACM0 \ - --input-dir /home/oliver/Sync/Ham/T41/Software/Phoenix/ArduinoOutput \ - /home/oliver/Sync/Ham/T41/Software/Phoenix/code/src/PhoenixSketch/PhoenixSketch.ino -``` - -A successful upload ends with the Teensy rebooting and the radio display restarting. - -## Reporting results - -- **Success**: Report the memory usage numbers from the compile step, confirm upload succeeded. -- **Compile error**: Show the compiler error message. Common causes: missing library, syntax error. -- **Upload error**: The Teensy loader may need the reset button pressed — tell the user to press the white button on the Teensy board, then retry the upload command. -- **Port not found**: Tell the user to check USB connection and that the radio is powered. diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index a4caae4..d7ffeda 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -14,7 +14,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "57864bb" -#define BUILD_TIMESTAMP "2026-07-30 17:38:48" +#define GIT_COMMIT_HASH "e1b3c3c" +#define BUILD_TIMESTAMP "2026-07-30 17:39:26" #endif // BUILDINFO_H From b16ec3a44dce46573b4c33e12d10af44267790f9 Mon Sep 17 00:00:00 2001 From: Oliver King Date: Fri, 31 Jul 2026 14:53:11 -0400 Subject: [PATCH 18/25] Add DIGITAL mode: USB audio for FT8 and other digital modes A third operating mode alongside SSB and CW. In receive the demodulated audio is streamed to the host over USB audio (and still to the speaker); in transmit the audio source is the host instead of the microphone. The rate coincidence this rests on: Teensy USB audio is a fixed 44.1 kHz endpoint, and at 176.4 ksps the receive chain's Fs/4 tap IS 44,100 Hz, one DSP block there is exactly 512 samples, and the audio library's graph clock is exactly 4x the USB audio block rate. So DIGITAL mode forces 176.4 ksps and needs no resampler and no modified Teensy core file. The rate switch lives on the enter/exit actions of a DIGITAL_STATES composite in ModeSm, which is what makes it restore on every exit path including calibration. USB transport reuses the stock AudioInputUSB/AudioOutputUSB (what OpenAudio's USB_Audio_F32.h wraps), keeping all the core descriptor, DMA, ISR and isochronous feedback code. They cannot go in the AudioConnection graph - it is clocked by I2S, 4x too fast - so they are taken off update_all() via AudioStream::active and driven by a 4:1 pacer. Also fixes a pre-existing sideband-selection bug, unrelated to digital mode but found while setting up the bench test. SetModulation() wrote bands[].mode, which is the band *default* and the reference InitFilterMask() measures its passband mirroring against. Making it agree with the requested modulation switched the mirroring off, so on 40 m "MD2;" (select USB) tuned the radio to LSB while the display, which reads ED.modulation[], went on saying USB. MD_read/IF_read read the same field and so reported the band default rather than the mode in use. CAT_test's MD_write_SetsModulationNotJustBandMode had asserted that behaviour and passed for its whole life; it is rewritten to assert the effective passband. New CAT commands: DG (enter/leave digital mode), DR (receive level), DS (transmit path counters, read-only). New settings ED.digitalDriveLevel and ED.digitalRxLevel, both persisted with menu entries. Verified on hardware, both directions: RX 0 dropouts in 60 s, H2 -82 dB, noise floor -135 dB, no drift over 10 min (|drift| < ~5 ppm, so no clock compensation is needed) TX sideband sense flips correctly (USB -90.0 deg / +41.0 dB image rejection, LSB +90.1 deg / -41.2 dB), imbalance -0.16 dB, IMD3 -51 dB, envelope ripple 0.08 dB, spur floor -95 dBc, stable across a sustained key-down Two buffering bugs were found and fixed during that testing. The play queue was never prefilled, giving 147 dropouts per 12 s of receive. The transmit record queue was begun for all of digital mode but only drained while transmitting, so it sat at AudioRecordQueue's 209-block ceiling and held ~418 of the 500 audio blocks; bounding it in the pacer improved transmit spurs by 47 dB and receive distortion and noise floor by 17.5 and 16 dB. Build note: digital mode requires usb=serialmidiaudio. Teensyduino has no stock "Dual Serial + Audio" type, so that build has one CDC port - CAT moves to the primary Serial via the new CATSerial alias and Debug() compiles out. CAT clients must be repointed. code/.vscode/arduino.json is untracked in this repo, so that setting is NOT carried by this commit and has to be set locally. Tests: 776 pass (745 before, 31 new). Both usb=serialmidiaudio and usb=serial2 firmware configurations compile. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01T9L3rdDh97Ywei8kr3YC6j --- code/src/PhoenixSketch/BuildInfo.h | 4 +- code/src/PhoenixSketch/CAT.cpp | 201 ++++++- code/src/PhoenixSketch/CAT.h | 2 +- code/src/PhoenixSketch/DSP.cpp | 86 ++- code/src/PhoenixSketch/Globals.cpp | 4 + code/src/PhoenixSketch/HardwareSm.cpp | 14 + code/src/PhoenixSketch/Loop.cpp | 15 +- code/src/PhoenixSketch/MainBoard_AudioIO.cpp | 44 ++ .../PhoenixSketch/MainBoard_DisplayHome.cpp | 20 +- .../PhoenixSketch/MainBoard_DisplayMenus.cpp | 21 +- code/src/PhoenixSketch/Mode.cpp | 40 ++ code/src/PhoenixSketch/Mode.h | 28 +- code/src/PhoenixSketch/ModeSm.cpp | 296 +++++++++- code/src/PhoenixSketch/ModeSm.drawio | 461 ++++++++------- code/src/PhoenixSketch/ModeSm.h | 14 +- code/src/PhoenixSketch/ModeSm.sim.html | 531 +++++++++++++++--- code/src/PhoenixSketch/SDT.h | 41 +- code/src/PhoenixSketch/Storage.cpp | 8 + code/src/PhoenixSketch/USBAudio.cpp | 403 +++++++++++++ code/src/PhoenixSketch/USBAudio.h | 127 +++++ code/test/CAT_test.cpp | 496 ++++++++++++++-- code/test/CMakeLists.txt | 36 +- code/test/ModeSm_test.cpp | 160 ++++++ wiki/firmware/audio-io.md | 4 +- wiki/firmware/cat-control.md | 66 ++- wiki/firmware/digital-mode.md | 342 +++++++++++ wiki/firmware/dsp-chain.md | 4 +- wiki/firmware/mode-state-machine.md | 4 +- wiki/firmware/sample-rate-switching.md | 4 +- wiki/index.md | 5 +- wiki/log.md | 135 +++++ wiki/roadmap/usb-audio.md | 54 +- 32 files changed, 3249 insertions(+), 421 deletions(-) create mode 100644 code/src/PhoenixSketch/USBAudio.cpp create mode 100644 code/src/PhoenixSketch/USBAudio.h create mode 100644 wiki/firmware/digital-mode.md diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index d7ffeda..9cd8e9c 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -14,7 +14,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "e1b3c3c" -#define BUILD_TIMESTAMP "2026-07-30 17:39:26" +#define GIT_COMMIT_HASH "40635af" +#define BUILD_TIMESTAMP "2026-07-31 14:53:11" #endif // BUILDINFO_H diff --git a/code/src/PhoenixSketch/CAT.cpp b/code/src/PhoenixSketch/CAT.cpp index 3406f7b..fdafb7d 100644 --- a/code/src/PhoenixSketch/CAT.cpp +++ b/code/src/PhoenixSketch/CAT.cpp @@ -20,8 +20,11 @@ If not, see . // Kenwood TS-480 CAT Interface (partial) // -// Note that this uses SerialUSB1 for the CAT interface at 38400 baud -// Configure the IDE to set Tools->USB Type to Dual Serial. +// Note that this uses CATSerial for the CAT interface at 38400 baud. +// CATSerial is SerialUSB1 normally, or the primary Serial in builds with +// a USB audio interface, which have only one CDC port (see SDT.h). +// Configure the IDE's Tools->USB Type to Dual Serial, or to Serial + MIDI + +// Audio if you want digital (USB audio) mode. // Uncomment to see CAT messages on the Serial Output //#define DEBUG_CAT @@ -80,6 +83,11 @@ char *ED_read( char* cmd ); char *PR_read( char* cmd); char *SR_write( char* cmd ); char *SR_read( char* cmd ); +char *DG_write( char* cmd ); +char *DG_read( char* cmd ); +char *DR_write( char* cmd ); +char *DR_read( char* cmd ); +char *DS_read( char* cmd ); char *CF_write( char* cmd ); char *CF_read( char* cmd ); char *EQ_write( char* cmd ); @@ -106,7 +114,7 @@ typedef struct { // omitted is expressed by putting the *write* function in BOTH slots, with // set_len covering the parameterised form and read_len the bare one. TX and RX // below are the only such commands. Do not "fix" them by writing a read handler. -#define NUM_SUPPORTED_COMMANDS 29 +#define NUM_SUPPORTED_COMMANDS 32 valid_command valid_commands[ NUM_SUPPORTED_COMMANDS ] = { { "AG", 3+4,4, AG_write, AG_read }, //audio gain @@ -145,7 +153,10 @@ valid_command valid_commands[ NUM_SUPPORTED_COMMANDS ] = { "SR", 3+1,3, SR_write, SR_read }, // sample rate 0=176.4k 1=192k -- NOT a Kenwood keyword { "CF", 3+1,3, CF_write, CF_read }, // receive CW audio filter index -- NOT a Kenwood keyword { "EQ", 3+5,3+2, EQ_write, EQ_read }, // receive equalizer cell -- NOT a Kenwood keyword - { "FL", 3+4,3, FL_write, FL_read } // DSP filter low cut -- NOT a Kenwood keyword + { "FL", 3+4,3, FL_write, FL_read }, // DSP filter low cut -- NOT a Kenwood keyword + { "DG", 3+1,3, DG_write, DG_read }, // digital (USB audio) mode 0=off 1=on -- NOT a Kenwood keyword + { "DR", 3+3,3, DR_write, DR_read }, // digital receive level 000-100 -- NOT a Kenwood keyword + { "DS", 0, 3, unsupported_cmd, DS_read } // digital TX path stats, read-only -- NOT a Kenwood keyword }; /** @@ -440,7 +451,7 @@ char *IF_read( char* cmd ){ ){ mode = 3; }else{ - switch( bands[ ED.currentBand[ED.activeVFO] ].mode ){ + switch( ED.modulation[ED.activeVFO] ){ // current modulation, not the band default case LSB: mode = 1; // LSB break; @@ -457,7 +468,9 @@ char *IF_read( char* cmd ){ } } uint8_t rxtx; - if ((modeSM.state_id == ModeSm_StateId_CW_RECEIVE) | (modeSM.state_id == ModeSm_StateId_SSB_RECEIVE)){ + if ((modeSM.state_id == ModeSm_StateId_CW_RECEIVE) | + (modeSM.state_id == ModeSm_StateId_DIGITAL_RECEIVE) | + (modeSM.state_id == ModeSm_StateId_SSB_RECEIVE)){ rxtx = 0; } else { rxtx = 1; @@ -505,25 +518,35 @@ char *KS_write( char* cmd ){ } /** - * Select the demodulator, keeping every copy of the mode in step. + * Select the demodulator. * - * The mode lives in two places: bands[].mode is the band's default, and - * ED.modulation[] is what Demodulate() actually switches on. InitFilterMask() - * compares the two, and when they disagree it treats the difference as a - * deliberate departure from the band default and mirrors the passband. Setting - * only one of them therefore does not just leave the demodulator alone - it - * inverts the receive filter. + * Writes ED.modulation[] and nothing else. bands[].mode is the band's *default* + * modulation and must stay put: InitFilterMask() mirrors the band's stored + * passband whenever the current modulation differs from that default, and that + * mirroring is the only thing that produces the opposite sideband. + * + * Writing bands[].mode here used to look like "keeping the two copies in step", + * but it is what selected the wrong sideband. Setting the default equal to the + * newly requested modulation removes the disagreement, so the mirroring stops and + * the band-default passband comes back. On 40 m (default LSB) `MD2;` - select USB + * - therefore switched the radio to LSB, while the display, which reads + * ED.modulation[], went on saying USB. This now matches the front panel's + * DEMODULATION button, which has always written ED.modulation[] alone. * * Also leaves CW receive if that is where we are: the mode state machine has no * other CAT-reachable path back to SSB. * + * Digital mode is deliberately NOT left here. WSJT-X and similar clients send + * `MD2;` to force USB on startup and before every transmission, so treating a + * modulation change as a request to leave digital mode would make the mode + * impossible to hold. Use `DG0;` or the front panel MODE button to leave it. + * * @param mode The modulation to select */ static void SetModulation(ModulationType mode){ if (modeSM.state_id == ModeSm_StateId_CW_RECEIVE){ ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_SSB_MODE); } - bands[ ED.currentBand[ED.activeVFO] ].mode = mode; ED.modulation[ED.activeVFO] = mode; SetInterrupt(iMODE); } @@ -544,8 +567,9 @@ char *MD_write( char* cmd ){ break; case 3: // CW - // Change to CW mode if in SSB receive mode, otherwise ignore: - if (modeSM.state_id == ModeSm_StateId_SSB_RECEIVE){ + // Change to CW mode if in a non-CW receive mode, otherwise ignore: + if ((modeSM.state_id == ModeSm_StateId_SSB_RECEIVE) || + (modeSM.state_id == ModeSm_StateId_DIGITAL_RECEIVE)){ if( ED.currentBand[ED.activeVFO] < BAND_30M ){ SetModulation(LSB); }else{ @@ -579,10 +603,13 @@ char *MD_read( char* cmd ){ ( modeSM.state_id == ModeSm_StateId_CW_TRANSMIT_KEYER_WAIT ) | ( modeSM.state_id == ModeSm_StateId_CW_TRANSMIT_MARK ) | ( modeSM.state_id == ModeSm_StateId_CW_TRANSMIT_SPACE ) ){ sprintf( obuf, "MD3;" ); return obuf; } - if( bands[ ED.currentBand[ED.activeVFO] ].mode == LSB ){ sprintf( obuf, "MD1;" ); return obuf; } - if( bands[ ED.currentBand[ED.activeVFO] ].mode == USB ){ sprintf( obuf, "MD2;" ); return obuf; } - if( bands[ ED.currentBand[ED.activeVFO] ].mode == AM ){ sprintf( obuf, "MD4;" ); return obuf; } - if( bands[ ED.currentBand[ED.activeVFO] ].mode == SAM ){ sprintf( obuf, "MD5;" ); return obuf; } + // ED.modulation[] is the current modulation; bands[].mode is only the band + // default, and reporting that told CAT clients the wrong sideband whenever + // the operator had selected the non-default one. + if( ED.modulation[ED.activeVFO] == LSB ){ sprintf( obuf, "MD1;" ); return obuf; } + if( ED.modulation[ED.activeVFO] == USB ){ sprintf( obuf, "MD2;" ); return obuf; } + if( ED.modulation[ED.activeVFO] == AM ){ sprintf( obuf, "MD4;" ); return obuf; } + if( ED.modulation[ED.activeVFO] == SAM ){ sprintf( obuf, "MD5;" ); return obuf; } sprintf( obuf, "?;"); return obuf; //Huh? How'd we get here? } @@ -740,6 +767,7 @@ char *PS_read( char* cmd ){ */ char *RX_write( char* cmd ){ switch (modeSM.state_id){ + case (ModeSm_StateId_DIGITAL_TRANSMIT): case (ModeSm_StateId_SSB_TRANSMIT):{ ModeSm_dispatch_event(&modeSM, ModeSm_EventId_PTT_RELEASED); break; @@ -761,6 +789,7 @@ char *RX_write( char* cmd ){ */ char *TX_write( char* cmd ){ switch (modeSM.state_id){ + case (ModeSm_StateId_DIGITAL_RECEIVE): case (ModeSm_StateId_SSB_RECEIVE):{ ModeSm_dispatch_event(&modeSM, ModeSm_EventId_PTT_PRESSED); break; @@ -830,6 +859,8 @@ char *SR_write( char* cmd ){ sprintf( obuf, "?;"); return obuf; } + // Only while receiving, and never in digital mode: that mode pins the radio + // at 176.4 ksps so the USB audio endpoint's 44.1 kHz needs no resampling. if( modeSM.state_id != ModeSm_StateId_SSB_RECEIVE && modeSM.state_id != ModeSm_StateId_CW_RECEIVE ){ sprintf( obuf, "?;"); @@ -855,6 +886,120 @@ char *SR_read( char* cmd ){ return obuf; } +/** + * CAT command DG - enter or leave digital (USB audio) mode (non-standard Kenwood command) + * + * `DG1;` enters digital mode, `DG0;` returns to SSB. Entering forces the radio to + * 176.4 ksps and starts the USB audio link; leaving restores the previous rate. + * + * Only accepted from a receive state, because the mode change reconfigures the + * I2S clock and rebuilds the DSP chain. Rejected outright in builds without a + * USB audio interface, where digital mode has no transport. + * + * @param cmd CAT command string + * @return Empty string on success, "?;" if the parameter is out of range, the + * radio is not receiving, or USB audio is not compiled in + */ +char *DG_write( char* cmd ){ + int p1 = cmd[2] - '0'; + if( p1 < 0 || p1 > 1 ){ + sprintf( obuf, "?;"); + return obuf; + } +#ifndef AUDIO_INTERFACE + sprintf( obuf, "?;"); + return obuf; +#else + if( p1 == 1 ){ + if( modeSM.state_id != ModeSm_StateId_SSB_RECEIVE && + modeSM.state_id != ModeSm_StateId_CW_RECEIVE && + modeSM.state_id != ModeSm_StateId_DIGITAL_RECEIVE ){ + sprintf( obuf, "?;"); + return obuf; + } + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_DIGITAL_MODE); + } else { + if( modeSM.state_id != ModeSm_StateId_DIGITAL_RECEIVE ){ + // Already out of digital mode, or transmitting - nothing to do + if( modeSM.state_id == ModeSm_StateId_DIGITAL_TRANSMIT ){ + sprintf( obuf, "?;"); + return obuf; + } + return empty_string_p; + } + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_SSB_MODE); + } + UpdateRFHardwareState(); + return empty_string_p; +#endif +} + +/** + * CAT command DG - read whether digital (USB audio) mode is active + * @param cmd CAT command string + * @return Response "DG1;" in digital mode, "DG0;" otherwise + */ +char *DG_read( char* cmd ){ + if( modeSM.state_id == ModeSm_StateId_DIGITAL_RECEIVE || + modeSM.state_id == ModeSm_StateId_DIGITAL_TRANSMIT ){ + sprintf( obuf, "DG1;"); + } else { + sprintf( obuf, "DG0;"); + } + return obuf; +} + +/** + * CAT command DR - set the digital-mode receive level (non-standard Kenwood command) + * + * `DR000;` to `DR100;` scale the audio sent to the host over USB. The receive + * chain does not regulate this level for us - with AGC off the AGC stage applies + * a fixed gain of 20 - so a strong signal will otherwise reach full scale and + * clip. The default of 25 is -12 dB. + * + * @param cmd CAT command string + * @return Empty string on success, "?;" if the level is out of range + */ +char *DR_write( char* cmd ){ + int32_t level = atoi( &cmd[2] ); + if( level < 0 || level > 100 ){ + sprintf( obuf, "?;"); + return obuf; + } + ED.digitalRxLevel = level; + return empty_string_p; +} + +/** + * CAT command DR - read the digital-mode receive level (non-standard Kenwood command) + * @param cmd CAT command string + * @return Response "DRnnn;" with the level from 000 to 100 + */ +char *DR_read( char* cmd ){ + sprintf( obuf, "DR%03ld;", (long)ED.digitalRxLevel); + return obuf; +} + +/** + * CAT command DS - read the digital transmit path health counters (non-standard) + * + * Returns "DS,,,,;". The counters + * reset when digital mode is entered. Both an underrun and a trim splice + * discontinuous audio into the transmit stream, which lands on the air as + * sidebands at the 128-sample block rate. + * + * @param cmd CAT command string + * @return Response with the five counters + */ +char *DS_read( char* cmd ){ + uint32_t calls=0, under=0, trim=0; + uint8_t dmin=0, dmax=0; + USBAudioGetTxStats(&calls, &under, &trim, &dmin, &dmax); + sprintf( obuf, "DS%lu,%lu,%lu,%u,%u;", (unsigned long)calls, (unsigned long)under, + (unsigned long)trim, (unsigned)dmin, (unsigned)dmax); + return obuf; +} + /** * CAT command CF - select the receive CW audio filter (non-standard Kenwood command) * @@ -982,17 +1127,17 @@ char *FL_read( char* cmd ){ /** - * Poll SerialUSB1 for incoming CAT commands and process them + * Poll the CAT serial port for incoming CAT commands and process them * * Reads characters from the CAT serial port, buffers them until a semicolon * terminator is received, then parses and executes the command via command_parser(). - * Sends response back over SerialUSB1. Handles buffer overflow by clearing the buffer. + * Sends response back over the same port. Handles buffer overflow by clearing the buffer. */ void CheckForCATSerialEvents(void){ int i; char c; - while( ( i = SerialUSB1.available() ) > 0 ){ - c = ( char )SerialUSB1.read(); + while( ( i = CATSerial.available() ) > 0 ){ + c = ( char )CATSerial.read(); i--; catCommand[ catCommandIndex ] = c; #ifdef DEBUG_CAT @@ -1017,17 +1162,17 @@ void CheckForCATSerialEvents(void){ #endif // DEBUG_CAT int i = 0; while( parser_output[i] != '\0' ){ - if( SerialUSB1.availableForWrite() > 0 ){ - SerialUSB1.print( parser_output[i] ); + if( CATSerial.availableForWrite() > 0 ){ + CATSerial.print( parser_output[i] ); #ifdef DEBUG_CAT Serial.print( parser_output[i] ); #endif i++; }else{ - SerialUSB1.flush(); + CATSerial.flush(); } } - SerialUSB1.flush(); + CATSerial.flush(); #ifdef DEBUG_CAT Serial.println(); #endif // DEBUG_CAT diff --git a/code/src/PhoenixSketch/CAT.h b/code/src/PhoenixSketch/CAT.h index 6f77cf3..bf88997 100644 --- a/code/src/PhoenixSketch/CAT.h +++ b/code/src/PhoenixSketch/CAT.h @@ -23,7 +23,7 @@ If not, see . /** * @brief Poll and process CAT (Computer Aided Transceiver) serial commands * @note Called from main loop to handle Kenwood TS-480 protocol commands - * @note Reads from SerialUSB1, buffers until semicolon terminator, parses and executes + * @note Reads from CATSerial, buffers until semicolon terminator, parses and executes * @note Supports frequency control, mode changes, power settings, and debugging commands * @note Requires Tools->USB Type set to Dual Serial in Arduino IDE */ diff --git a/code/src/PhoenixSketch/DSP.cpp b/code/src/PhoenixSketch/DSP.cpp index aa7a7a5..7dd0914 100644 --- a/code/src/PhoenixSketch/DSP.cpp +++ b/code/src/PhoenixSketch/DSP.cpp @@ -44,11 +44,13 @@ void PerformSignalProcessing(void){ case (ModeSm_StateId_CALIBRATE_FREQUENCY): case (ModeSm_StateId_CALIBRATE_RX_IQ): case (ModeSm_StateId_SSB_RECEIVE): + case (ModeSm_StateId_DIGITAL_RECEIVE): case (ModeSm_StateId_CW_RECEIVE):{ ReceiveProcessing(nullptr); break; } case (ModeSm_StateId_CALIBRATE_OFFSET_MARK): + case (ModeSm_StateId_DIGITAL_TRANSMIT): case (ModeSm_StateId_SSB_TRANSMIT):{ TransmitProcessing(nullptr); if (HasDualVFOs()) @@ -71,6 +73,7 @@ void PerformSignalProcessing(void){ case (ModeSm_StateId_CALIBRATE_POWER_MARK): case (ModeSm_StateId_CALIBRATE_OFFSET_MARK): case (ModeSm_StateId_CALIBRATE_TX_IQ_MARK): + case (ModeSm_StateId_DIGITAL_TRANSMIT): case (ModeSm_StateId_SSB_TRANSMIT): case (ModeSm_StateId_CW_TRANSMIT_MARK): case (ModeSm_StateId_CW_TRANSMIT_DIT_MARK): @@ -700,6 +703,13 @@ void InterpolateReceiveData(DataBlock *data, ReceiveFilterConfig *RXfilters){ arm_fir_interpolate_f32(&RXfilters->FIR_int1, data->I, data->Q, READ_BUFFER_SIZE / RXfilters->DF); data->N = data->N * RXfilters->DF2; data->sampleRate_Hz = data->sampleRate_Hz * RXfilters->DF2; + // Sample rate is now Fs/4, which at the 176.4 ksps that DIGITAL mode forces + // is exactly 44,100 Hz - the native rate of the USB audio endpoint - and the + // block is exactly 512 samples. Tap the audio for the host here, before + // AdjustVolume(), so the level sent to the PC is independent of the + // front-panel volume knob. + if (modeSM.state_id == ModeSm_StateId_DIGITAL_RECEIVE) + USBAudioWriteRx(data->Q, data->N); arm_fir_interpolate_f32(&RXfilters->FIR_int2, data->Q, data->I, READ_BUFFER_SIZE / RXfilters->DF1); data->N = data->N * RXfilters->DF1; data->sampleRate_Hz = data->sampleRate_Hz * RXfilters->DF1; @@ -901,7 +911,9 @@ DataBlock * ReceiveProcessing(const char *fname){ // x + shift Hz after this step. float32_t sideToneShift_Hz = 0; if (modeSM.state_id == ModeSm_StateId_CW_RECEIVE ) { - if (bands[ED.currentBand[ED.activeVFO]].mode == 1) { + // Which way the sidetone offset goes follows the CURRENT modulation, not + // the band default (LSB is ModulationType 1; spelling it out here). + if (ED.modulation[ED.activeVFO] == LSB) { sideToneShift_Hz = CWToneOffsetsHz[ED.CWToneIndex]; } else { sideToneShift_Hz = -CWToneOffsetsHz[ED.CWToneIndex]; @@ -1118,6 +1130,59 @@ void TXGain(DataBlock *data){ arm_scale_f32(data->I, amp_factor, data->I, data->N); } +/** + * Read a block of transmit audio from the USB audio link for digital mode. + * + * The microphone queues are still what paces this: they fill from the I2S DMA at + * exactly the rate the transmit DAC drains, so gating on them keeps + * TransmitProcessing() locked to the I2S clock. The samples themselves are + * discarded - the audio comes from the host instead. Letting the host's USB + * clock pace the DSP loop is what starved the transmit output queue in earlier + * attempts at this feature. + * + * Produces 512 samples at Fs/4, which is 44,100 Hz at the 176.4 ksps that + * digital mode forces, so the chain is entered one stage down - after + * TXDecimateBy4() rather than before it. + * + * @param data Block to fill; I and Q both receive the (mono) transmit audio + * @return ESUCCESS if a block was produced, EFAIL if the I2S clock has not ticked + */ +errno_t ReadUSBTransmitBuffer(DataBlock *data){ + if ((uint32_t)Q_in_L_Ex.available() <= N_BLOCKS_EX || (uint32_t)Q_in_R_Ex.available() <= N_BLOCKS_EX) + return EFAIL; + + // Drain the microphone blocks we are using purely as a clock. No conversion, + // the samples are not wanted. + for (unsigned i = 0; i < N_BLOCKS_EX; i++) { + Q_in_L_Ex.readBuffer(); + Q_in_R_Ex.readBuffer(); + Q_in_L_Ex.freeBuffer(); + Q_in_R_Ex.freeBuffer(); + } + + data->N = USB_AUDIO_BLOCK_SAMPLES; + data->sampleRate_Hz = SR[SampleRate].rate / 4; + + if (!USBAudioReadTx(data->I, USB_AUDIO_BLOCK_SAMPLES)) { + // Host underrun. Emit silence rather than failing, so the transmit output + // queue keeps being fed and never starves. + memset(data->I, 0, USB_AUDIO_BLOCK_SAMPLES * sizeof(float32_t)); + } else { + // Software drive control, the digital-mode analogue of microphone gain + arm_scale_f32(data->I, ED.digitalDriveLevel / 100.0f, data->I, data->N); + } + + float32_t buffer_rms = 0; + for (size_t k = 0; k < USB_AUDIO_BLOCK_SAMPLES; k++) + buffer_rms += data->I[k] * data->I[k]; + buffer_rms = sqrt(buffer_rms / USB_AUDIO_BLOCK_SAMPLES); + L_in_RMS = 0.9 * L_in_RMS + 0.1 * buffer_rms; + R_in_RMS = L_in_RMS; + + arm_copy_f32(data->I, data->Q, USB_AUDIO_BLOCK_SAMPLES); + return ESUCCESS; +} + /** * Read a block of samples from the microphone and perform transmit signal processing */ @@ -1126,13 +1191,20 @@ DataBlock * TransmitProcessing(const char *fname){ data.I = float_buffer_L; data.Q = float_buffer_R; - // Read data from microphone input buffer - if (ReadMicrophoneBuffer(&data)){ - // There is no data available, skip the rest - return NULL; + if (modeSM.state_id == ModeSm_StateId_DIGITAL_TRANSMIT){ + // Audio comes from the host over USB, already at Fs/4, so the + // decimate-by-4 stage below is skipped. + if (ReadUSBTransmitBuffer(&data)) + return NULL; + } else { + // Read data from microphone input buffer + if (ReadMicrophoneBuffer(&data)){ + // There is no data available, skip the rest + return NULL; + } + //Flag(2); + TXDecimateBy4(&data,&TXfilters);// 2048 in, 512 out } - //Flag(2); - TXDecimateBy4(&data,&TXfilters);// 2048 in, 512 out TXDecimateBy2(&data,&TXfilters);// 512 in, 256 out BandEQ(&data, &RXfilters, TX); TXGain(&data); // apply the DSP gain factor diff --git a/code/src/PhoenixSketch/Globals.cpp b/code/src/PhoenixSketch/Globals.cpp index 14935f6..39cebf1 100644 --- a/code/src/PhoenixSketch/Globals.cpp +++ b/code/src/PhoenixSketch/Globals.cpp @@ -507,8 +507,12 @@ time_t getTeensy3Time() { void setup(void){ Serial.begin(115200); +#ifndef AUDIO_INTERFACE + // With a USB audio interface there is only one CDC port and CATSerial is + // Serial, already opened above. See the CATSerial definition in SDT.h. SerialUSB1.begin(38400); // For CAT control Serial.println("T41 SDT Setup"); +#endif // get TIME from real time clock with 3V backup battery setSyncProvider(getTeensy3Time); diff --git a/code/src/PhoenixSketch/HardwareSm.cpp b/code/src/PhoenixSketch/HardwareSm.cpp index bd4b209..9fa2d13 100644 --- a/code/src/PhoenixSketch/HardwareSm.cpp +++ b/code/src/PhoenixSketch/HardwareSm.cpp @@ -544,11 +544,15 @@ void UpdateRFHardwareState(void){ case (ModeSm_StateId_CALIBRATE_FREQUENCY): case (ModeSm_StateId_CALIBRATE_TX_IQ_SPACE): case (ModeSm_StateId_CW_RECEIVE): + // See UpdateTuneState() for why the composite state appears here too + case (ModeSm_StateId_DIGITAL_STATES): + case (ModeSm_StateId_DIGITAL_RECEIVE): case (ModeSm_StateId_SSB_RECEIVE):{ rfHardwareState = RFReceive; break; } case (ModeSm_StateId_CALIBRATE_OFFSET_MARK): + case (ModeSm_StateId_DIGITAL_TRANSMIT): case (ModeSm_StateId_SSB_TRANSMIT):{ rfHardwareState = RFTransmit; break; @@ -720,12 +724,22 @@ void UpdateTuneState(void){ case (ModeSm_StateId_CALIBRATE_TX_IQ_SPACE): case (ModeSm_StateId_CALIBRATE_FREQUENCY): case (ModeSm_StateId_CW_RECEIVE): + // The DIGITAL_STATES composite appears here, not just its children: + // EnterDigitalMode() / ExitDigitalMode() are the composite's entry and + // exit actions and call ChangeSampleRate(), which ends in UpdateTuneState(). + // At that moment the leaf state has not been entered yet, so state_id is + // the composite. It is always on its way to or from a receive state. + case (ModeSm_StateId_DIGITAL_STATES): + case (ModeSm_StateId_DIGITAL_RECEIVE): case (ModeSm_StateId_SSB_RECEIVE):{ tuneState = TuneReceive; break; } case (ModeSm_StateId_CALIBRATE_OFFSET_MARK): + case (ModeSm_StateId_DIGITAL_TRANSMIT): case (ModeSm_StateId_SSB_TRANSMIT):{ + // Digital transmit is an SSB transmission with the audio arriving + // over USB instead of from the microphone, so the VFO setup is the same tuneState = TuneSSBTX; break; } diff --git a/code/src/PhoenixSketch/Loop.cpp b/code/src/PhoenixSketch/Loop.cpp index 7b0aa2b..b01bbd2 100644 --- a/code/src/PhoenixSketch/Loop.cpp +++ b/code/src/PhoenixSketch/Loop.cpp @@ -448,7 +448,8 @@ void HandleButtonPress(int32_t button){ (modeSM.state_id == ModeSm_StateId_CW_TRANSMIT_KEYER_WAIT) || (modeSM.state_id == ModeSm_StateId_CW_TRANSMIT_MARK) || (modeSM.state_id == ModeSm_StateId_CW_TRANSMIT_SPACE) || - (modeSM.state_id == ModeSm_StateId_SSB_TRANSMIT) || + (modeSM.state_id == ModeSm_StateId_SSB_TRANSMIT) || + (modeSM.state_id == ModeSm_StateId_DIGITAL_TRANSMIT) || (modeSM.state_id == ModeSm_StateId_CALIBRATE_POWER_MARK) || (modeSM.state_id == ModeSm_StateId_CALIBRATE_OFFSET_MARK)) return; @@ -524,6 +525,9 @@ void HandleButtonPress(int32_t button){ } // You are in UISm_StateId_[HOME,UPDATE] states case TOGGLE_MODE:{ + // Cycle SSB -> CW -> DIGITAL -> SSB. The DIGITAL leg only + // exists in builds with a USB audio interface; without one + // the cycle is the original SSB <-> CW toggle. switch(modeSM.state_id){ case ModeSm_StateId_SSB_RECEIVE:{ ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_CW_MODE); @@ -531,6 +535,15 @@ void HandleButtonPress(int32_t button){ break; } case ModeSm_StateId_CW_RECEIVE:{ + #ifdef AUDIO_INTERFACE + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_DIGITAL_MODE); + #else + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_SSB_MODE); + #endif + UpdateRFHardwareState(); + break; + } + case ModeSm_StateId_DIGITAL_RECEIVE:{ ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_SSB_MODE); UpdateRFHardwareState(); break; diff --git a/code/src/PhoenixSketch/MainBoard_AudioIO.cpp b/code/src/PhoenixSketch/MainBoard_AudioIO.cpp index 051592d..1c6aec3 100644 --- a/code/src/PhoenixSketch/MainBoard_AudioIO.cpp +++ b/code/src/PhoenixSketch/MainBoard_AudioIO.cpp @@ -302,6 +302,7 @@ void UpdateAudioIOState(void){ case (ModeSm_StateId_CALIBRATE_FREQUENCY): case (ModeSm_StateId_CALIBRATE_RX_IQ): case (ModeSm_StateId_CW_RECEIVE): + case (ModeSm_StateId_DIGITAL_RECEIVE): case (ModeSm_StateId_SSB_RECEIVE):{ // Microphone input stops Q_in_L_Ex.end(); @@ -347,6 +348,33 @@ void UpdateAudioIOState(void){ MuteMixerChannels(&modeSelectOutR); break; } + case (ModeSm_StateId_DIGITAL_TRANSMIT):{ + // As SSB_TRANSMIT, except the transmit audio arrives over USB rather + // than from the microphone. + // IQ from receive continues + Q_in_L.begin(); + Q_in_R.begin(); + // The microphone queues are kept running even though the audio is + // discarded: they are what paces TransmitProcessing() to the I2S + // block rate. Without that the host's USB clock would drive the DSP + // loop, and the transmit output queue would starve. + Q_in_L_Ex.begin(); + Q_in_R_Ex.begin(); + + // Output is samples to RF transmit + SelectMixerChannel(&modeSelectOutExL,0); + SelectMixerChannel(&modeSelectOutExR,0); + // Input is IQ samples from the receive board + SelectMixerChannel(&modeSelectInL, 0); + SelectMixerChannel(&modeSelectInR, 0); + // The microphone is not the audio source here, so keep it muted + MuteMixerChannels(&modeSelectInExL); + MuteMixerChannels(&modeSelectInExR); + // Mute speaker audio + MuteMixerChannels(&modeSelectOutL); + MuteMixerChannels(&modeSelectOutR); + break; + } case (ModeSm_StateId_CALIBRATE_OFFSET_MARK): case (ModeSm_StateId_CALIBRATE_TX_IQ_MARK):{ // IQ from receive continues @@ -490,6 +518,11 @@ void InitializeAudio(void){ // The transmit IQ cal oscillator. Only used during the TXIQ calibration state transmitIQcal_oscillator.amplitude(40.0/500); + // Take the USB audio objects off the audio library's graph clock. They are + // paced separately (see USBAudio.cpp); leaving them in update_all() would run + // them at four times their correct rate from boot onwards. + USBAudioInit(); + // Set the oscillator frequencies for the current sample rate UpdateSampleRateDependentOscillators(); } @@ -531,6 +564,14 @@ void ChangeSampleRate(uint8_t newRate){ for (int v = 0; v < 2; v++) ED.centerFreq_Hz[v] += dQuarter_Hz; + // The USB audio transport is paced against the I2S block rate, so it has to + // be stopped across the reconfiguration and restarted afterwards. Normally + // this is a no-op: DIGITAL mode pins the rate at 176.4 ksps and both the menu + // and the CAT SR command refuse to change it while that mode is active. + bool usbAudioWasRunning = USBAudioIsRunning(); + if (usbAudioWasRunning) + USBAudioEnd(); + AudioNoInterrupts(); SampleRate = newRate; // Reconfigure the I2S peripheral clock to the new rate @@ -548,6 +589,9 @@ void ChangeSampleRate(uint8_t newRate){ Q_in_R_Ex.clear(); AudioInterrupts(); + if (usbAudioWasRunning) + USBAudioBegin(); + // Re-program the RX VFO (Si5351) for the compensated center frequency so the // radio stays tuned to the same dial frequency. Done outside the audio- // interrupt-disabled section because it performs I2C transactions. diff --git a/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp b/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp index 759ac69..9fce83b 100644 --- a/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp +++ b/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp @@ -343,6 +343,10 @@ void DrawFreqBandModPane(void) { case ModeSm_StateId_SSB_TRANSMIT: tft.print("SSB "); break; + case ModeSm_StateId_DIGITAL_RECEIVE: + case ModeSm_StateId_DIGITAL_TRANSMIT: + tft.print("DATA"); + break; default: tft.print("CW "); break; @@ -670,7 +674,7 @@ FASTRUN int16_t pixelnew(uint32_t i){ FASTRUN void ShowSpectrum(void){ // Sweep-start: prime L2 with a fresh spectrum surface + current filter bar. if (x1 == 0) { spectrumChunkIdx = 0; spectrumFrameCtr++; } // new sweep: reset chunk idx, advance frame counter - if (x1 == 0 && modeSM.state_id != ModeSm_StateId_SSB_TRANSMIT) { + if (x1 == 0 && !IsSSBTransmit()) { tft.writeTo(L2); DrawBandWidthIndicatorBar(); // its opening fillRect clears the spectrum body (y >= top+20) // Restamp the yellow frame: DrawBandWidthIndicatorBar's clear overlaps @@ -709,7 +713,7 @@ FASTRUN void ShowSpectrum(void){ // ~13 ms/frame, so it is throttled to every AUDIO_SPECTRUM_DECIMATE-th frame to free real-time // budget for the main spectrum/waterfall. The waterfall colour computation is NOT throttled. tft.writeTo(L1); - if (modeSM.state_id != ModeSm_StateId_SSB_TRANSMIT){ + if (!IsSSBTransmit()){ bool drawAudioSpectrum = (spectrumFrameCtr % AUDIO_SPECTRUM_DECIMATE) == 0; for (int16_t xb = x1_start + 1; xb <= x1; xb++){ if (drawAudioSpectrum && xb < 128) { @@ -745,7 +749,7 @@ FASTRUN void ShowSpectrum(void){ psdupdated = false; redrawSpectrum = false; - if (modeSM.state_id == ModeSm_StateId_SSB_TRANSMIT) + if (IsSSBTransmit()) return; // don't do the rest of these steps in transmit mode // if we're shifting the spectrum automatically, update the adjustment @@ -820,7 +824,7 @@ FASTRUN static void BuildFrozenBackdrop(void){ * and stamps the bar at the current frequency on top. The waterfall is left frozen. */ FASTRUN void RedrawFrozenSpectrumWithBar(void){ - if (modeSM.state_id == ModeSm_StateId_SSB_TRANSMIT) return; + if (IsSSBTransmit()) return; if (!fineFreezeBackdropReady){ BuildFrozenBackdrop(); @@ -980,7 +984,7 @@ void DrawVUBar(int16_t x0, int16_t y0, float32_t RMSval){ * VU meters of transmit amplitude in SSB transmit mode. */ void DrawStateOfHealthPane(void) { - if ((modeSM.state_id == ModeSm_StateId_SSB_TRANSMIT) && PaneStateOfHealth.stale){ + if (IsSSBTransmit() && PaneStateOfHealth.stale){ // Draw some color bars to warn when the audio power is getting too large for // the transmit IQ chain. The RF board starts to clip when RMS values exceed 0.6. @@ -1168,10 +1172,12 @@ void DrawTXRXStatusPane(void) { if (oldMState != modeSM.state_id){ switch (modeSM.state_id){ case ModeSm_StateId_CW_RECEIVE: + case ModeSm_StateId_DIGITAL_RECEIVE: case ModeSm_StateId_SSB_RECEIVE: PaneTXRXStatus.stale = true; state = RX; break; + case ModeSm_StateId_DIGITAL_TRANSMIT: case ModeSm_StateId_SSB_TRANSMIT: case ModeSm_StateId_CW_TRANSMIT_KEYER_WAIT: case ModeSm_StateId_CW_TRANSMIT_DAH_MARK: @@ -1542,7 +1548,9 @@ void UpdateRFGainSetting(void){ case ModeSm_StateId_CW_RECEIVE: comp = ED.XAttenCW[ED.currentBand[ED.activeVFO]]; break; + case ModeSm_StateId_DIGITAL_RECEIVE: case ModeSm_StateId_SSB_RECEIVE: + // Digital transmit uses the SSB transmit path, so no CW attenuation comp = 0.0; break; default: @@ -1828,7 +1836,7 @@ void DrawHome(){ timerDisplay_ms = millis(); if (redrawSpectrum == false) redrawSpectrum = true; - if (modeSM.state_id == ModeSm_StateId_SSB_TRANSMIT) + if (IsSSBTransmit()) PaneStateOfHealth.stale = true; } for (size_t i = 0; i < NUMBER_OF_PANES; i++){ diff --git a/code/src/PhoenixSketch/MainBoard_DisplayMenus.cpp b/code/src/PhoenixSketch/MainBoard_DisplayMenus.cpp index c83c26f..85c9e2e 100644 --- a/code/src/PhoenixSketch/MainBoard_DisplayMenus.cpp +++ b/code/src/PhoenixSketch/MainBoard_DisplayMenus.cpp @@ -466,8 +466,27 @@ VariableParameter micg = { .limits = {.i32 = {.min = -10, .max=30, .step=1}} }; -struct SecondaryMenuOption MicOptions[1] = { +// Drive level applied in software to the USB transmit audio in digital mode - +// the digital-mode equivalent of microphone gain. +VariableParameter digdrive = { + .variable = &ED.digitalDriveLevel, + .type = TYPE_I32, + .limits = {.i32 = {.min = 0, .max=100, .step=1}} +}; + +// Level applied to the USB receive audio sent to the host. With AGC off the +// receive chain applies a fixed gain, so this is the only thing standing between +// a strong signal and a clipped USB stream. +VariableParameter digrx = { + .variable = &ED.digitalRxLevel, + .type = TYPE_I32, + .limits = {.i32 = {.min = 0, .max=100, .step=1}} +}; + +struct SecondaryMenuOption MicOptions[3] = { "Mic gain", variableOption, &micg, NULL, NULL, + "USB drive", variableOption, &digdrive, NULL, NULL, + "USB RX level", variableOption, &digrx, NULL, NULL, }; // Calibration Menu diff --git a/code/src/PhoenixSketch/Mode.cpp b/code/src/PhoenixSketch/Mode.cpp index c265b4d..e34758d 100644 --- a/code/src/PhoenixSketch/Mode.cpp +++ b/code/src/PhoenixSketch/Mode.cpp @@ -39,3 +39,43 @@ void ModeCWTransmitSpaceEnter(void){ bool IsTxAllowed(void) { return bands[ED.currentBand[ED.activeVFO]].band_type == HAM_BAND; } + +bool IsSSBTransmit(void) { + return (modeSM.state_id == ModeSm_StateId_SSB_TRANSMIT) || + (modeSM.state_id == ModeSm_StateId_DIGITAL_TRANSMIT); +} + +// The sample rate the radio was using before DIGITAL mode was entered, so it can +// be put back on the way out. SAMPLE_RATE_MAX+1 means "nothing saved". +#define NO_SAVED_SAMPLE_RATE (SAMPLE_RATE_MAX + 1) +static uint8_t preDigitalSampleRate = NO_SAVED_SAMPLE_RATE; + +/** + * Entry action for the DIGITAL_STATES composite. + * + * DIGITAL mode only works at 176.4 ksps: that is the rate at which the receive + * chain's Fs/4 tap is exactly 44,100 Hz and one DSP block is exactly 512 samples, + * which is what lets the USB audio endpoint run at its native 44.1 kHz with no + * resampling. Force the rate here and remember what to restore. + */ +void EnterDigitalMode(void){ + preDigitalSampleRate = SampleRate; + // ChangeSampleRate() is a no-op if we are already at 176.4 ksps + ChangeSampleRate(SAMPLE_RATE_176K); + USBAudioBegin(); +} + +/** + * Exit action for the DIGITAL_STATES composite. + * + * Runs on every way out - the mode buttons, a CAT command, or a calibration + * event dispatched at the NORMAL_STATES level - so the sample rate is always + * restored no matter how DIGITAL mode is left. + */ +void ExitDigitalMode(void){ + USBAudioEnd(); + if (preDigitalSampleRate != NO_SAVED_SAMPLE_RATE){ + ChangeSampleRate(preDigitalSampleRate); + preDigitalSampleRate = NO_SAVED_SAMPLE_RATE; + } +} diff --git a/code/src/PhoenixSketch/Mode.h b/code/src/PhoenixSketch/Mode.h index ab2c7f0..f65aa50 100644 --- a/code/src/PhoenixSketch/Mode.h +++ b/code/src/PhoenixSketch/Mode.h @@ -34,9 +34,35 @@ void UpdateHardwareState(void); void ModeCWTransmitSpaceEnter(void); /** - * @brief Checks if transmit is allowed for the current band + * @brief Checks if transmit is allowed for the current band * @note Used as guard for transitions to transmit states */ bool IsTxAllowed(void); +/** + * @brief Checks if the radio is transmitting through the SSB transmit path + * @return true in SSB_TRANSMIT or DIGITAL_TRANSMIT + * @note Digital mode transmits an SSB signal with the audio sourced from USB, so + * the two states behave identically for the display and the DSP chain + */ +bool IsSSBTransmit(void); + +// Digital (USB audio) mode + +/** + * @brief Enter digital mode: force 176.4 ksps and start the USB audio transport + * @note Called by ModeSm state machine when entering the DIGITAL_STATES composite + * @note Saves the previous sample rate for ExitDigitalMode() to restore + * @note 176.4 ksps is required: it puts the receive chain's Fs/4 tap at exactly + * 44,100 Hz, so the USB audio endpoint needs no resampling + */ +void EnterDigitalMode(void); + +/** + * @brief Leave digital mode: stop USB audio and restore the previous sample rate + * @note Called by ModeSm state machine when exiting the DIGITAL_STATES composite, + * including via a calibration event dispatched at the NORMAL_STATES level + */ +void ExitDigitalMode(void); + #endif // MODE_H diff --git a/code/src/PhoenixSketch/ModeSm.cpp b/code/src/PhoenixSketch/ModeSm.cpp index 2e31768..21e0108 100644 --- a/code/src/PhoenixSketch/ModeSm.cpp +++ b/code/src/PhoenixSketch/ModeSm.cpp @@ -113,6 +113,8 @@ static void CW_RECEIVE_do(ModeSm* sm); static void CW_RECEIVE_key_pressed(ModeSm* sm); +static void CW_RECEIVE_to_digital_mode(ModeSm* sm); + static void CW_RECEIVE_to_ssb_mode(ModeSm* sm); static void CW_TRANSMIT_DAH_MARK_enter(ModeSm* sm); @@ -157,6 +159,28 @@ static void CW_TRANSMIT_SPACE_do(ModeSm* sm); static void CW_TRANSMIT_SPACE_key_pressed(ModeSm* sm); +static void DIGITAL_STATES_enter(ModeSm* sm); + +static void DIGITAL_STATES_exit(ModeSm* sm); + +static void DIGITAL_STATES_InitialState_transition(ModeSm* sm); + +static void DIGITAL_RECEIVE_enter(ModeSm* sm); + +static void DIGITAL_RECEIVE_exit(ModeSm* sm); + +static void DIGITAL_RECEIVE_ptt_pressed(ModeSm* sm); + +static void DIGITAL_RECEIVE_to_cw_mode(ModeSm* sm); + +static void DIGITAL_RECEIVE_to_ssb_mode(ModeSm* sm); + +static void DIGITAL_TRANSMIT_enter(ModeSm* sm); + +static void DIGITAL_TRANSMIT_exit(ModeSm* sm); + +static void DIGITAL_TRANSMIT_ptt_released(ModeSm* sm); + static void SSB_RECEIVE_enter(ModeSm* sm); static void SSB_RECEIVE_exit(ModeSm* sm); @@ -165,6 +189,8 @@ static void SSB_RECEIVE_ptt_pressed(ModeSm* sm); static void SSB_RECEIVE_to_cw_mode(ModeSm* sm); +static void SSB_RECEIVE_to_digital_mode(ModeSm* sm); + static void SSB_TRANSMIT_enter(ModeSm* sm); static void SSB_TRANSMIT_exit(ModeSm* sm); @@ -336,6 +362,7 @@ void ModeSm_dispatch_event(ModeSm* sm, ModeSm_EventId event_id) case ModeSm_EventId_KEY_PRESSED: CW_RECEIVE_key_pressed(sm); break; case ModeSm_EventId_DAH_PRESSED: CW_RECEIVE_dah_pressed(sm); break; case ModeSm_EventId_DIT_PRESSED: CW_RECEIVE_dit_pressed(sm); break; + case ModeSm_EventId_TO_DIGITAL_MODE: CW_RECEIVE_to_digital_mode(sm); break; case ModeSm_EventId_CALIBRATE_FREQUENCY: NORMAL_STATES_calibrate_frequency(sm); break; // First ancestor handler for this event case ModeSm_EventId_CALIBRATE_RX_IQ: NORMAL_STATES_calibrate_rx_iq(sm); break; // First ancestor handler for this event case ModeSm_EventId_CALIBRATE_TX_IQ: NORMAL_STATES_calibrate_tx_iq(sm); break; // First ancestor handler for this event @@ -432,12 +459,56 @@ void ModeSm_dispatch_event(ModeSm* sm, ModeSm_EventId event_id) } break; + // STATE: DIGITAL_STATES + case ModeSm_StateId_DIGITAL_STATES: + switch (event_id) + { + case ModeSm_EventId_CALIBRATE_FREQUENCY: NORMAL_STATES_calibrate_frequency(sm); break; // First ancestor handler for this event + case ModeSm_EventId_CALIBRATE_RX_IQ: NORMAL_STATES_calibrate_rx_iq(sm); break; // First ancestor handler for this event + case ModeSm_EventId_CALIBRATE_TX_IQ: NORMAL_STATES_calibrate_tx_iq(sm); break; // First ancestor handler for this event + case ModeSm_EventId_CALIBRATE_POWER: NORMAL_STATES_calibrate_power(sm); break; // First ancestor handler for this event + + default: break; // to avoid "unused enumeration value in switch" warning + } + break; + + // STATE: DIGITAL_RECEIVE + case ModeSm_StateId_DIGITAL_RECEIVE: + switch (event_id) + { + case ModeSm_EventId_PTT_PRESSED: DIGITAL_RECEIVE_ptt_pressed(sm); break; + case ModeSm_EventId_TO_SSB_MODE: DIGITAL_RECEIVE_to_ssb_mode(sm); break; + case ModeSm_EventId_TO_CW_MODE: DIGITAL_RECEIVE_to_cw_mode(sm); break; + case ModeSm_EventId_CALIBRATE_FREQUENCY: NORMAL_STATES_calibrate_frequency(sm); break; // First ancestor handler for this event + case ModeSm_EventId_CALIBRATE_RX_IQ: NORMAL_STATES_calibrate_rx_iq(sm); break; // First ancestor handler for this event + case ModeSm_EventId_CALIBRATE_TX_IQ: NORMAL_STATES_calibrate_tx_iq(sm); break; // First ancestor handler for this event + case ModeSm_EventId_CALIBRATE_POWER: NORMAL_STATES_calibrate_power(sm); break; // First ancestor handler for this event + + default: break; // to avoid "unused enumeration value in switch" warning + } + break; + + // STATE: DIGITAL_TRANSMIT + case ModeSm_StateId_DIGITAL_TRANSMIT: + switch (event_id) + { + case ModeSm_EventId_PTT_RELEASED: DIGITAL_TRANSMIT_ptt_released(sm); break; + case ModeSm_EventId_CALIBRATE_FREQUENCY: NORMAL_STATES_calibrate_frequency(sm); break; // First ancestor handler for this event + case ModeSm_EventId_CALIBRATE_RX_IQ: NORMAL_STATES_calibrate_rx_iq(sm); break; // First ancestor handler for this event + case ModeSm_EventId_CALIBRATE_TX_IQ: NORMAL_STATES_calibrate_tx_iq(sm); break; // First ancestor handler for this event + case ModeSm_EventId_CALIBRATE_POWER: NORMAL_STATES_calibrate_power(sm); break; // First ancestor handler for this event + + default: break; // to avoid "unused enumeration value in switch" warning + } + break; + // STATE: SSB_RECEIVE case ModeSm_StateId_SSB_RECEIVE: switch (event_id) { - case ModeSm_EventId_TO_CW_MODE: SSB_RECEIVE_to_cw_mode(sm); break; case ModeSm_EventId_PTT_PRESSED: SSB_RECEIVE_ptt_pressed(sm); break; + case ModeSm_EventId_TO_DIGITAL_MODE: SSB_RECEIVE_to_digital_mode(sm); break; + case ModeSm_EventId_TO_CW_MODE: SSB_RECEIVE_to_cw_mode(sm); break; case ModeSm_EventId_CALIBRATE_FREQUENCY: NORMAL_STATES_calibrate_frequency(sm); break; // First ancestor handler for this event case ModeSm_EventId_CALIBRATE_RX_IQ: NORMAL_STATES_calibrate_rx_iq(sm); break; // First ancestor handler for this event case ModeSm_EventId_CALIBRATE_TX_IQ: NORMAL_STATES_calibrate_tx_iq(sm); break; // First ancestor handler for this event @@ -506,6 +577,12 @@ static void exit_up_to_state_handler(ModeSm* sm, ModeSm_StateId desired_state) case ModeSm_StateId_CW_TRANSMIT_SPACE: CW_TRANSMIT_SPACE_exit(sm); break; + case ModeSm_StateId_DIGITAL_STATES: DIGITAL_STATES_exit(sm); break; + + case ModeSm_StateId_DIGITAL_RECEIVE: DIGITAL_RECEIVE_exit(sm); break; + + case ModeSm_StateId_DIGITAL_TRANSMIT: DIGITAL_TRANSMIT_exit(sm); break; + case ModeSm_StateId_SSB_RECEIVE: SSB_RECEIVE_exit(sm); break; case ModeSm_StateId_SSB_TRANSMIT: SSB_TRANSMIT_exit(sm); break; @@ -1277,6 +1354,27 @@ static void CW_RECEIVE_key_pressed(ModeSm* sm) // No ancestor handles this event. } +static void CW_RECEIVE_to_digital_mode(ModeSm* sm) +{ + // CW_RECEIVE behavior + // uml: TO_DIGITAL_MODE TransitionTo(DIGITAL_STATES) + { + // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). + CW_RECEIVE_exit(sm); + + // Step 2: Transition action: ``. + + // Step 3: Enter/move towards transition target `DIGITAL_STATES`. + DIGITAL_STATES_enter(sm); + + // Finish transition by calling pseudo state transition function. + DIGITAL_STATES_InitialState_transition(sm); + return; // event processing immediately stops when a transition finishes. No other behaviors for this state are checked. + } // end of behavior for CW_RECEIVE + + // No ancestor handles this event. +} + static void CW_RECEIVE_to_ssb_mode(ModeSm* sm) { // CW_RECEIVE behavior @@ -1682,6 +1780,177 @@ static void CW_TRANSMIT_SPACE_key_pressed(ModeSm* sm) } +//////////////////////////////////////////////////////////////////////////////// +// event handlers for state DIGITAL_STATES +//////////////////////////////////////////////////////////////////////////////// + +static void DIGITAL_STATES_enter(ModeSm* sm) +{ + sm->state_id = ModeSm_StateId_DIGITAL_STATES; + + // DIGITAL_STATES behavior + // uml: enter / { EnterDigitalMode(); } + { + // Step 1: execute action `EnterDigitalMode();` + EnterDigitalMode(); + } // end of behavior for DIGITAL_STATES +} + +static void DIGITAL_STATES_exit(ModeSm* sm) +{ + // DIGITAL_STATES behavior + // uml: exit / { ExitDigitalMode(); } + { + // Step 1: execute action `ExitDigitalMode();` + ExitDigitalMode(); + } // end of behavior for DIGITAL_STATES + + sm->state_id = ModeSm_StateId_NORMAL_STATES; +} + +static void DIGITAL_STATES_InitialState_transition(ModeSm* sm) +{ + // DIGITAL_STATES. behavior + // uml: TransitionTo(DIGITAL_RECEIVE) + { + // Step 1: Exit states until we reach `DIGITAL_STATES` state (Least Common Ancestor for transition). Already at LCA, no exiting required. + + // Step 2: Transition action: ``. + + // Step 3: Enter/move towards transition target `DIGITAL_RECEIVE`. + DIGITAL_RECEIVE_enter(sm); + + // Step 4: complete transition. Ends event dispatch. No other behaviors are checked. + return; + } // end of behavior for DIGITAL_STATES. +} + + +//////////////////////////////////////////////////////////////////////////////// +// event handlers for state DIGITAL_RECEIVE +//////////////////////////////////////////////////////////////////////////////// + +static void DIGITAL_RECEIVE_enter(ModeSm* sm) +{ + sm->state_id = ModeSm_StateId_DIGITAL_RECEIVE; + + // DIGITAL_RECEIVE behavior + // uml: enter / { UpdateHardwareState(); } + { + // Step 1: execute action `UpdateHardwareState();` + UpdateHardwareState(); + } // end of behavior for DIGITAL_RECEIVE +} + +static void DIGITAL_RECEIVE_exit(ModeSm* sm) +{ + sm->state_id = ModeSm_StateId_DIGITAL_STATES; +} + +static void DIGITAL_RECEIVE_ptt_pressed(ModeSm* sm) +{ + // DIGITAL_RECEIVE behavior + // uml: PTT_PRESSED [IsTxAllowed()] TransitionTo(DIGITAL_TRANSMIT) + if (IsTxAllowed()) + { + // Step 1: Exit states until we reach `DIGITAL_STATES` state (Least Common Ancestor for transition). + DIGITAL_RECEIVE_exit(sm); + + // Step 2: Transition action: ``. + + // Step 3: Enter/move towards transition target `DIGITAL_TRANSMIT`. + DIGITAL_TRANSMIT_enter(sm); + + // Step 4: complete transition. Ends event dispatch. No other behaviors are checked. + return; + } // end of behavior for DIGITAL_RECEIVE + + // No ancestor handles this event. +} + +static void DIGITAL_RECEIVE_to_cw_mode(ModeSm* sm) +{ + // DIGITAL_RECEIVE behavior + // uml: TO_CW_MODE TransitionTo(CW_RECEIVE) + { + // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). + exit_up_to_state_handler(sm, ModeSm_StateId_NORMAL_STATES); + + // Step 2: Transition action: ``. + + // Step 3: Enter/move towards transition target `CW_RECEIVE`. + CW_RECEIVE_enter(sm); + + // Step 4: complete transition. Ends event dispatch. No other behaviors are checked. + return; + } // end of behavior for DIGITAL_RECEIVE + + // No ancestor handles this event. +} + +static void DIGITAL_RECEIVE_to_ssb_mode(ModeSm* sm) +{ + // DIGITAL_RECEIVE behavior + // uml: TO_SSB_MODE TransitionTo(SSB_RECEIVE) + { + // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). + exit_up_to_state_handler(sm, ModeSm_StateId_NORMAL_STATES); + + // Step 2: Transition action: ``. + + // Step 3: Enter/move towards transition target `SSB_RECEIVE`. + SSB_RECEIVE_enter(sm); + + // Step 4: complete transition. Ends event dispatch. No other behaviors are checked. + return; + } // end of behavior for DIGITAL_RECEIVE + + // No ancestor handles this event. +} + + +//////////////////////////////////////////////////////////////////////////////// +// event handlers for state DIGITAL_TRANSMIT +//////////////////////////////////////////////////////////////////////////////// + +static void DIGITAL_TRANSMIT_enter(ModeSm* sm) +{ + sm->state_id = ModeSm_StateId_DIGITAL_TRANSMIT; + + // DIGITAL_TRANSMIT behavior + // uml: enter / { UpdateHardwareState(); } + { + // Step 1: execute action `UpdateHardwareState();` + UpdateHardwareState(); + } // end of behavior for DIGITAL_TRANSMIT +} + +static void DIGITAL_TRANSMIT_exit(ModeSm* sm) +{ + sm->state_id = ModeSm_StateId_DIGITAL_STATES; +} + +static void DIGITAL_TRANSMIT_ptt_released(ModeSm* sm) +{ + // DIGITAL_TRANSMIT behavior + // uml: PTT_RELEASED TransitionTo(DIGITAL_RECEIVE) + { + // Step 1: Exit states until we reach `DIGITAL_STATES` state (Least Common Ancestor for transition). + DIGITAL_TRANSMIT_exit(sm); + + // Step 2: Transition action: ``. + + // Step 3: Enter/move towards transition target `DIGITAL_RECEIVE`. + DIGITAL_RECEIVE_enter(sm); + + // Step 4: complete transition. Ends event dispatch. No other behaviors are checked. + return; + } // end of behavior for DIGITAL_TRANSMIT + + // No ancestor handles this event. +} + + //////////////////////////////////////////////////////////////////////////////// // event handlers for state SSB_RECEIVE //////////////////////////////////////////////////////////////////////////////// @@ -1744,6 +2013,27 @@ static void SSB_RECEIVE_to_cw_mode(ModeSm* sm) // No ancestor handles this event. } +static void SSB_RECEIVE_to_digital_mode(ModeSm* sm) +{ + // SSB_RECEIVE behavior + // uml: TO_DIGITAL_MODE TransitionTo(DIGITAL_STATES) + { + // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). + SSB_RECEIVE_exit(sm); + + // Step 2: Transition action: ``. + + // Step 3: Enter/move towards transition target `DIGITAL_STATES`. + DIGITAL_STATES_enter(sm); + + // Finish transition by calling pseudo state transition function. + DIGITAL_STATES_InitialState_transition(sm); + return; // event processing immediately stops when a transition finishes. No other behaviors for this state are checked. + } // end of behavior for SSB_RECEIVE + + // No ancestor handles this event. +} + //////////////////////////////////////////////////////////////////////////////// // event handlers for state SSB_TRANSMIT @@ -1809,6 +2099,9 @@ char const * ModeSm_state_id_to_string(ModeSm_StateId id) case ModeSm_StateId_CW_TRANSMIT_KEYER_WAIT: return "CW_TRANSMIT_KEYER_WAIT"; case ModeSm_StateId_CW_TRANSMIT_MARK: return "CW_TRANSMIT_MARK"; case ModeSm_StateId_CW_TRANSMIT_SPACE: return "CW_TRANSMIT_SPACE"; + case ModeSm_StateId_DIGITAL_STATES: return "DIGITAL_STATES"; + case ModeSm_StateId_DIGITAL_RECEIVE: return "DIGITAL_RECEIVE"; + case ModeSm_StateId_DIGITAL_TRANSMIT: return "DIGITAL_TRANSMIT"; case ModeSm_StateId_SSB_RECEIVE: return "SSB_RECEIVE"; case ModeSm_StateId_SSB_TRANSMIT: return "SSB_TRANSMIT"; default: return "?"; @@ -1835,6 +2128,7 @@ char const * ModeSm_event_id_to_string(ModeSm_EventId id) case ModeSm_EventId_PTT_PRESSED: return "PTT_PRESSED"; case ModeSm_EventId_PTT_RELEASED: return "PTT_RELEASED"; case ModeSm_EventId_TO_CW_MODE: return "TO_CW_MODE"; + case ModeSm_EventId_TO_DIGITAL_MODE: return "TO_DIGITAL_MODE"; case ModeSm_EventId_TO_SSB_MODE: return "TO_SSB_MODE"; default: return "?"; } diff --git a/code/src/PhoenixSketch/ModeSm.drawio b/code/src/PhoenixSketch/ModeSm.drawio index 17fbcf7..df04fe5 100644 --- a/code/src/PhoenixSketch/ModeSm.drawio +++ b/code/src/PhoenixSketch/ModeSm.drawio @@ -1,29 +1,29 @@ - + - + - - + + - - + + - - + + - - + + - - + + - - + + @@ -31,94 +31,94 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - + - + - + @@ -127,7 +127,7 @@ - + @@ -135,12 +135,12 @@ - - + + - + @@ -148,252 +148,317 @@ - - + + - + - - - - - - - - - - - + + + - - - - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + diff --git a/code/src/PhoenixSketch/ModeSm.h b/code/src/PhoenixSketch/ModeSm.h index 8575186..e3845b7 100644 --- a/code/src/PhoenixSketch/ModeSm.h +++ b/code/src/PhoenixSketch/ModeSm.h @@ -32,12 +32,13 @@ typedef enum ModeSm_EventId ModeSm_EventId_PTT_PRESSED = 12, ModeSm_EventId_PTT_RELEASED = 13, ModeSm_EventId_TO_CW_MODE = 14, - ModeSm_EventId_TO_SSB_MODE = 15 + ModeSm_EventId_TO_DIGITAL_MODE = 15, + ModeSm_EventId_TO_SSB_MODE = 16 } ModeSm_EventId; enum { - ModeSm_EventIdCount = 16 + ModeSm_EventIdCount = 17 }; typedef enum ModeSm_StateId @@ -60,13 +61,16 @@ typedef enum ModeSm_StateId ModeSm_StateId_CW_TRANSMIT_KEYER_WAIT = 15, ModeSm_StateId_CW_TRANSMIT_MARK = 16, ModeSm_StateId_CW_TRANSMIT_SPACE = 17, - ModeSm_StateId_SSB_RECEIVE = 18, - ModeSm_StateId_SSB_TRANSMIT = 19 + ModeSm_StateId_DIGITAL_STATES = 18, + ModeSm_StateId_DIGITAL_RECEIVE = 19, + ModeSm_StateId_DIGITAL_TRANSMIT = 20, + ModeSm_StateId_SSB_RECEIVE = 21, + ModeSm_StateId_SSB_TRANSMIT = 22 } ModeSm_StateId; enum { - ModeSm_StateIdCount = 20 + ModeSm_StateIdCount = 23 }; diff --git a/code/src/PhoenixSketch/ModeSm.sim.html b/code/src/PhoenixSketch/ModeSm.sim.html index 5ae04dc..5c412cf 100644 --- a/code/src/PhoenixSketch/ModeSm.sim.html +++ b/code/src/PhoenixSketch/ModeSm.sim.html @@ -309,12 +309,6 @@ state NORMAL_STATES { - SSB_RECEIVE - - SSB_RECEIVE : SSB_RECEIVE - - SSB_RECEIVE : enter / #123; UpdateHardwareState()#59; #125; - CW_RECEIVE CW_RECEIVE : CW_RECEIVE @@ -387,6 +381,32 @@ %% See https://github.com/StateSmith/StateSmith/issues/404 state "." as NORMAL_STATES.(InitialState) + state DIGITAL_STATES { + + %% Initial state name as "." so that it fits in black circle shape. + %% See https://github.com/StateSmith/StateSmith/issues/404 + state "." as DIGITAL_STATES.(InitialState) + + DIGITAL_RECEIVE + + DIGITAL_RECEIVE : DIGITAL_RECEIVE + + DIGITAL_RECEIVE : enter / #123; UpdateHardwareState()#59; #125; + + DIGITAL_TRANSMIT + + DIGITAL_TRANSMIT : DIGITAL_TRANSMIT + + DIGITAL_TRANSMIT : enter / #123; UpdateHardwareState()#59; #125; + + } + + SSB_RECEIVE + + SSB_RECEIVE : SSB_RECEIVE + + SSB_RECEIVE : enter / #123; UpdateHardwareState()#59; #125; + } %% Initial state name as "." so that it fits in black circle shape. @@ -433,10 +453,6 @@ NORMAL_STATES --> CALIBRATE_POWER_SPACE : CALIBRATE_POWER -SSB_RECEIVE --> CW_RECEIVE : TO_CW_MODE - -SSB_RECEIVE --> SSB_TRANSMIT : PTT_PRESSED [IsTxAllowed()] - CW_RECEIVE --> SSB_RECEIVE : TO_SSB_MODE CW_RECEIVE --> CW_TRANSMIT_MARK : KEY_PRESSED [IsTxAllowed()] @@ -445,6 +461,8 @@ CW_RECEIVE --> CW_TRANSMIT_DIT_MARK : DIT_PRESSED [IsTxAllowed()] +CW_RECEIVE --> DIGITAL_STATES : TO_DIGITAL_MODE + SSB_TRANSMIT --> SSB_RECEIVE : PTT_RELEASED CW_TRANSMIT_MARK --> CW_TRANSMIT_SPACE : KEY_RELEASED @@ -467,6 +485,22 @@ NORMAL_STATES.(InitialState) --> SSB_RECEIVE +DIGITAL_STATES.(InitialState) --> DIGITAL_RECEIVE + +DIGITAL_RECEIVE --> DIGITAL_TRANSMIT : PTT_PRESSED [IsTxAllowed()] + +DIGITAL_RECEIVE --> SSB_RECEIVE : TO_SSB_MODE + +DIGITAL_RECEIVE --> CW_RECEIVE : TO_CW_MODE + +DIGITAL_TRANSMIT --> DIGITAL_RECEIVE : PTT_RELEASED + +SSB_RECEIVE --> SSB_TRANSMIT : PTT_PRESSED [IsTxAllowed()] + +SSB_RECEIVE --> DIGITAL_STATES : TO_DIGITAL_MODE + +SSB_RECEIVE --> CW_RECEIVE : TO_CW_MODE + ROOT.(InitialState) --> NORMAL_STATES @@ -533,11 +567,12 @@ PTT_PRESSED : 12, PTT_RELEASED : 13, TO_CW_MODE : 14, - TO_SSB_MODE : 15, + TO_DIGITAL_MODE : 15, + TO_SSB_MODE : 16, } static { Object.freeze(this.EventId); } - static EventIdCount = 16; + static EventIdCount = 17; static { Object.freeze(this.EventIdCount); } static StateId = @@ -560,12 +595,15 @@ CW_TRANSMIT_KEYER_WAIT : 15, CW_TRANSMIT_MARK : 16, CW_TRANSMIT_SPACE : 17, - SSB_RECEIVE : 18, - SSB_TRANSMIT : 19, + DIGITAL_STATES : 18, + DIGITAL_RECEIVE : 19, + DIGITAL_TRANSMIT : 20, + SSB_RECEIVE : 21, + SSB_TRANSMIT : 22, } static { Object.freeze(this.StateId); } - static StateIdCount = 20; + static StateIdCount = 23; static { Object.freeze(this.StateIdCount); } // Used internally by state machine. Feel free to inspect, but don't modify. @@ -586,12 +624,12 @@ // ROOT. is a pseudo state and cannot have an `enter` trigger. // ROOT. behavior - // uml: / { this.tracer?.edgeTransition("edge37"); } TransitionTo(NORMAL_STATES) + // uml: / { this.tracer?.edgeTransition("edge44"); } TransitionTo(NORMAL_STATES) { // Step 1: Exit states until we reach `ROOT` state (Least Common Ancestor for transition). Already at LCA, no exiting required. - // Step 2: Transition action: `this.tracer?.edgeTransition("edge37");`. - this.tracer?.edgeTransition("edge37"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge44");`. + this.tracer?.edgeTransition("edge44"); // Step 3: Enter/move towards transition target `NORMAL_STATES`. this.#NORMAL_STATES_enter(); @@ -712,6 +750,7 @@ case ModeSm.EventId.KEY_PRESSED: this.#CW_RECEIVE_key_pressed(); break; case ModeSm.EventId.DAH_PRESSED: this.#CW_RECEIVE_dah_pressed(); break; case ModeSm.EventId.DIT_PRESSED: this.#CW_RECEIVE_dit_pressed(); break; + case ModeSm.EventId.TO_DIGITAL_MODE: this.#CW_RECEIVE_to_digital_mode(); break; case ModeSm.EventId.CALIBRATE_FREQUENCY: this.#NORMAL_STATES_calibrate_frequency(); break; // First ancestor handler for this event case ModeSm.EventId.CALIBRATE_RX_IQ: this.#NORMAL_STATES_calibrate_rx_iq(); break; // First ancestor handler for this event case ModeSm.EventId.CALIBRATE_TX_IQ: this.#NORMAL_STATES_calibrate_tx_iq(); break; // First ancestor handler for this event @@ -794,12 +833,50 @@ } break; + // STATE: DIGITAL_STATES + case ModeSm.StateId.DIGITAL_STATES: + switch (eventId) + { + case ModeSm.EventId.CALIBRATE_FREQUENCY: this.#NORMAL_STATES_calibrate_frequency(); break; // First ancestor handler for this event + case ModeSm.EventId.CALIBRATE_RX_IQ: this.#NORMAL_STATES_calibrate_rx_iq(); break; // First ancestor handler for this event + case ModeSm.EventId.CALIBRATE_TX_IQ: this.#NORMAL_STATES_calibrate_tx_iq(); break; // First ancestor handler for this event + case ModeSm.EventId.CALIBRATE_POWER: this.#NORMAL_STATES_calibrate_power(); break; // First ancestor handler for this event + } + break; + + // STATE: DIGITAL_RECEIVE + case ModeSm.StateId.DIGITAL_RECEIVE: + switch (eventId) + { + case ModeSm.EventId.PTT_PRESSED: this.#DIGITAL_RECEIVE_ptt_pressed(); break; + case ModeSm.EventId.TO_SSB_MODE: this.#DIGITAL_RECEIVE_to_ssb_mode(); break; + case ModeSm.EventId.TO_CW_MODE: this.#DIGITAL_RECEIVE_to_cw_mode(); break; + case ModeSm.EventId.CALIBRATE_FREQUENCY: this.#NORMAL_STATES_calibrate_frequency(); break; // First ancestor handler for this event + case ModeSm.EventId.CALIBRATE_RX_IQ: this.#NORMAL_STATES_calibrate_rx_iq(); break; // First ancestor handler for this event + case ModeSm.EventId.CALIBRATE_TX_IQ: this.#NORMAL_STATES_calibrate_tx_iq(); break; // First ancestor handler for this event + case ModeSm.EventId.CALIBRATE_POWER: this.#NORMAL_STATES_calibrate_power(); break; // First ancestor handler for this event + } + break; + + // STATE: DIGITAL_TRANSMIT + case ModeSm.StateId.DIGITAL_TRANSMIT: + switch (eventId) + { + case ModeSm.EventId.PTT_RELEASED: this.#DIGITAL_TRANSMIT_ptt_released(); break; + case ModeSm.EventId.CALIBRATE_FREQUENCY: this.#NORMAL_STATES_calibrate_frequency(); break; // First ancestor handler for this event + case ModeSm.EventId.CALIBRATE_RX_IQ: this.#NORMAL_STATES_calibrate_rx_iq(); break; // First ancestor handler for this event + case ModeSm.EventId.CALIBRATE_TX_IQ: this.#NORMAL_STATES_calibrate_tx_iq(); break; // First ancestor handler for this event + case ModeSm.EventId.CALIBRATE_POWER: this.#NORMAL_STATES_calibrate_power(); break; // First ancestor handler for this event + } + break; + // STATE: SSB_RECEIVE case ModeSm.StateId.SSB_RECEIVE: switch (eventId) { - case ModeSm.EventId.TO_CW_MODE: this.#SSB_RECEIVE_to_cw_mode(); break; case ModeSm.EventId.PTT_PRESSED: this.#SSB_RECEIVE_ptt_pressed(); break; + case ModeSm.EventId.TO_DIGITAL_MODE: this.#SSB_RECEIVE_to_digital_mode(); break; + case ModeSm.EventId.TO_CW_MODE: this.#SSB_RECEIVE_to_cw_mode(); break; case ModeSm.EventId.CALIBRATE_FREQUENCY: this.#NORMAL_STATES_calibrate_frequency(); break; // First ancestor handler for this event case ModeSm.EventId.CALIBRATE_RX_IQ: this.#NORMAL_STATES_calibrate_rx_iq(); break; // First ancestor handler for this event case ModeSm.EventId.CALIBRATE_TX_IQ: this.#NORMAL_STATES_calibrate_tx_iq(); break; // First ancestor handler for this event @@ -864,6 +941,12 @@ case ModeSm.StateId.CW_TRANSMIT_SPACE: this.#CW_TRANSMIT_SPACE_exit(); break; + case ModeSm.StateId.DIGITAL_STATES: this.#DIGITAL_STATES_exit(); break; + + case ModeSm.StateId.DIGITAL_RECEIVE: this.#DIGITAL_RECEIVE_exit(); break; + + case ModeSm.StateId.DIGITAL_TRANSMIT: this.#DIGITAL_TRANSMIT_exit(); break; + case ModeSm.StateId.SSB_RECEIVE: this.#SSB_RECEIVE_exit(); break; case ModeSm.StateId.SSB_TRANSMIT: this.#SSB_TRANSMIT_exit(); break; @@ -1684,12 +1767,12 @@ #NORMAL_STATES_InitialState_transition() { // NORMAL_STATES. behavior - // uml: / { this.tracer?.edgeTransition("edge36"); } TransitionTo(SSB_RECEIVE) + // uml: / { this.tracer?.edgeTransition("edge35"); } TransitionTo(SSB_RECEIVE) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). Already at LCA, no exiting required. - // Step 2: Transition action: `this.tracer?.edgeTransition("edge36");`. - this.tracer?.edgeTransition("edge36"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge35");`. + this.tracer?.edgeTransition("edge35"); // Step 3: Enter/move towards transition target `SSB_RECEIVE`. this.#SSB_RECEIVE_enter(); @@ -1738,14 +1821,14 @@ #CW_RECEIVE_dah_pressed() { // CW_RECEIVE behavior - // uml: DAH_PRESSED [this.tracer?.log("🛡️ User evaluating guard: " + "IsTxAllowed()") || this.evaluateGuard("CW_RECEIVE","DAH_PRESSED [IsTxAllowed()] TransitionTo(CW_TRANSMIT_DAH_MARK)")] / { this.tracer?.edgeTransition("edge24"); } TransitionTo(CW_TRANSMIT_DAH_MARK) + // uml: DAH_PRESSED [this.tracer?.log("🛡️ User evaluating guard: " + "IsTxAllowed()") || this.evaluateGuard("CW_RECEIVE","DAH_PRESSED [IsTxAllowed()] TransitionTo(CW_TRANSMIT_DAH_MARK)")] / { this.tracer?.edgeTransition("edge22"); } TransitionTo(CW_TRANSMIT_DAH_MARK) if (this.tracer?.log("🛡️ User evaluating guard: " + "IsTxAllowed()") || this.evaluateGuard("CW_RECEIVE","DAH_PRESSED [IsTxAllowed()] TransitionTo(CW_TRANSMIT_DAH_MARK)")) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). this.#CW_RECEIVE_exit(); - // Step 2: Transition action: `this.tracer?.edgeTransition("edge24");`. - this.tracer?.edgeTransition("edge24"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge22");`. + this.tracer?.edgeTransition("edge22"); // Step 3: Enter/move towards transition target `CW_TRANSMIT_DAH_MARK`. this.#CW_TRANSMIT_DAH_MARK_enter(); @@ -1760,14 +1843,14 @@ #CW_RECEIVE_dit_pressed() { // CW_RECEIVE behavior - // uml: DIT_PRESSED [this.tracer?.log("🛡️ User evaluating guard: " + "IsTxAllowed()") || this.evaluateGuard("CW_RECEIVE","DIT_PRESSED [IsTxAllowed()] TransitionTo(CW_TRANSMIT_DIT_MARK)")] / { this.tracer?.edgeTransition("edge25"); } TransitionTo(CW_TRANSMIT_DIT_MARK) + // uml: DIT_PRESSED [this.tracer?.log("🛡️ User evaluating guard: " + "IsTxAllowed()") || this.evaluateGuard("CW_RECEIVE","DIT_PRESSED [IsTxAllowed()] TransitionTo(CW_TRANSMIT_DIT_MARK)")] / { this.tracer?.edgeTransition("edge23"); } TransitionTo(CW_TRANSMIT_DIT_MARK) if (this.tracer?.log("🛡️ User evaluating guard: " + "IsTxAllowed()") || this.evaluateGuard("CW_RECEIVE","DIT_PRESSED [IsTxAllowed()] TransitionTo(CW_TRANSMIT_DIT_MARK)")) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). this.#CW_RECEIVE_exit(); - // Step 2: Transition action: `this.tracer?.edgeTransition("edge25");`. - this.tracer?.edgeTransition("edge25"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge23");`. + this.tracer?.edgeTransition("edge23"); // Step 3: Enter/move towards transition target `CW_TRANSMIT_DIT_MARK`. this.#CW_TRANSMIT_DIT_MARK_enter(); @@ -1794,14 +1877,14 @@ #CW_RECEIVE_key_pressed() { // CW_RECEIVE behavior - // uml: KEY_PRESSED [this.tracer?.log("🛡️ User evaluating guard: " + "IsTxAllowed()") || this.evaluateGuard("CW_RECEIVE","KEY_PRESSED [IsTxAllowed()] TransitionTo(CW_TRANSMIT_MARK)")] / { this.tracer?.edgeTransition("edge23"); } TransitionTo(CW_TRANSMIT_MARK) + // uml: KEY_PRESSED [this.tracer?.log("🛡️ User evaluating guard: " + "IsTxAllowed()") || this.evaluateGuard("CW_RECEIVE","KEY_PRESSED [IsTxAllowed()] TransitionTo(CW_TRANSMIT_MARK)")] / { this.tracer?.edgeTransition("edge21"); } TransitionTo(CW_TRANSMIT_MARK) if (this.tracer?.log("🛡️ User evaluating guard: " + "IsTxAllowed()") || this.evaluateGuard("CW_RECEIVE","KEY_PRESSED [IsTxAllowed()] TransitionTo(CW_TRANSMIT_MARK)")) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). this.#CW_RECEIVE_exit(); - // Step 2: Transition action: `this.tracer?.edgeTransition("edge23");`. - this.tracer?.edgeTransition("edge23"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge21");`. + this.tracer?.edgeTransition("edge21"); // Step 3: Enter/move towards transition target `CW_TRANSMIT_MARK`. this.#CW_TRANSMIT_MARK_enter(); @@ -1813,16 +1896,38 @@ // No ancestor handles this event. } + #CW_RECEIVE_to_digital_mode() + { + // CW_RECEIVE behavior + // uml: TO_DIGITAL_MODE / { this.tracer?.edgeTransition("edge24"); } TransitionTo(DIGITAL_STATES) + { + // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). + this.#CW_RECEIVE_exit(); + + // Step 2: Transition action: `this.tracer?.edgeTransition("edge24");`. + this.tracer?.edgeTransition("edge24"); + + // Step 3: Enter/move towards transition target `DIGITAL_STATES`. + this.#DIGITAL_STATES_enter(); + + // Finish transition by calling pseudo state transition function. + this.#DIGITAL_STATES_InitialState_transition(); + return; // event processing immediately stops when a transition finishes. No other behaviors for this state are checked. + } // end of behavior for CW_RECEIVE + + // No ancestor handles this event. + } + #CW_RECEIVE_to_ssb_mode() { // CW_RECEIVE behavior - // uml: TO_SSB_MODE / { this.tracer?.edgeTransition("edge22"); } TransitionTo(SSB_RECEIVE) + // uml: TO_SSB_MODE / { this.tracer?.edgeTransition("edge20"); } TransitionTo(SSB_RECEIVE) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). this.#CW_RECEIVE_exit(); - // Step 2: Transition action: `this.tracer?.edgeTransition("edge22");`. - this.tracer?.edgeTransition("edge22"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge20");`. + this.tracer?.edgeTransition("edge20"); // Step 3: Enter/move towards transition target `SSB_RECEIVE`. this.#SSB_RECEIVE_enter(); @@ -1887,14 +1992,14 @@ } // end of behavior for CW_TRANSMIT_DAH_MARK // CW_TRANSMIT_DAH_MARK behavior - // uml: do [this.tracer?.log("🛡️ User evaluating guard: " + "markCount_ms >= 3*ditDuration_ms") || this.evaluateGuard("CW_TRANSMIT_DAH_MARK","do [markCount_ms >= 3*ditDuration_ms] TransitionTo(CW_TRANSMIT_KEYER_SPACE)")] / { this.tracer?.edgeTransition("edge35"); } TransitionTo(CW_TRANSMIT_KEYER_SPACE) + // uml: do [this.tracer?.log("🛡️ User evaluating guard: " + "markCount_ms >= 3*ditDuration_ms") || this.evaluateGuard("CW_TRANSMIT_DAH_MARK","do [markCount_ms >= 3*ditDuration_ms] TransitionTo(CW_TRANSMIT_KEYER_SPACE)")] / { this.tracer?.edgeTransition("edge34"); } TransitionTo(CW_TRANSMIT_KEYER_SPACE) if (this.tracer?.log("🛡️ User evaluating guard: " + "markCount_ms >= 3*ditDuration_ms") || this.evaluateGuard("CW_TRANSMIT_DAH_MARK","do [markCount_ms >= 3*ditDuration_ms] TransitionTo(CW_TRANSMIT_KEYER_SPACE)")) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). this.#CW_TRANSMIT_DAH_MARK_exit(); - // Step 2: Transition action: `this.tracer?.edgeTransition("edge35");`. - this.tracer?.edgeTransition("edge35"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge34");`. + this.tracer?.edgeTransition("edge34"); // Step 3: Enter/move towards transition target `CW_TRANSMIT_KEYER_SPACE`. this.#CW_TRANSMIT_KEYER_SPACE_enter(); @@ -1959,14 +2064,14 @@ } // end of behavior for CW_TRANSMIT_DIT_MARK // CW_TRANSMIT_DIT_MARK behavior - // uml: do [this.tracer?.log("🛡️ User evaluating guard: " + "markCount_ms >= ditDuration_ms") || this.evaluateGuard("CW_TRANSMIT_DIT_MARK","do [markCount_ms >= ditDuration_ms] TransitionTo(CW_TRANSMIT_KEYER_SPACE)")] / { this.tracer?.edgeTransition("edge30"); } TransitionTo(CW_TRANSMIT_KEYER_SPACE) + // uml: do [this.tracer?.log("🛡️ User evaluating guard: " + "markCount_ms >= ditDuration_ms") || this.evaluateGuard("CW_TRANSMIT_DIT_MARK","do [markCount_ms >= ditDuration_ms] TransitionTo(CW_TRANSMIT_KEYER_SPACE)")] / { this.tracer?.edgeTransition("edge29"); } TransitionTo(CW_TRANSMIT_KEYER_SPACE) if (this.tracer?.log("🛡️ User evaluating guard: " + "markCount_ms >= ditDuration_ms") || this.evaluateGuard("CW_TRANSMIT_DIT_MARK","do [markCount_ms >= ditDuration_ms] TransitionTo(CW_TRANSMIT_KEYER_SPACE)")) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). this.#CW_TRANSMIT_DIT_MARK_exit(); - // Step 2: Transition action: `this.tracer?.edgeTransition("edge30");`. - this.tracer?.edgeTransition("edge30"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge29");`. + this.tracer?.edgeTransition("edge29"); // Step 3: Enter/move towards transition target `CW_TRANSMIT_KEYER_SPACE`. this.#CW_TRANSMIT_KEYER_SPACE_enter(); @@ -2031,14 +2136,14 @@ } // end of behavior for CW_TRANSMIT_KEYER_SPACE // CW_TRANSMIT_KEYER_SPACE behavior - // uml: do [this.tracer?.log("🛡️ User evaluating guard: " + "spaceCount_ms >= ditDuration_ms") || this.evaluateGuard("CW_TRANSMIT_KEYER_SPACE","do [spaceCount_ms >= ditDuration_ms] TransitionTo(CW_TRANSMIT_KEYER_WAIT)")] / { this.tracer?.edgeTransition("edge31"); } TransitionTo(CW_TRANSMIT_KEYER_WAIT) + // uml: do [this.tracer?.log("🛡️ User evaluating guard: " + "spaceCount_ms >= ditDuration_ms") || this.evaluateGuard("CW_TRANSMIT_KEYER_SPACE","do [spaceCount_ms >= ditDuration_ms] TransitionTo(CW_TRANSMIT_KEYER_WAIT)")] / { this.tracer?.edgeTransition("edge30"); } TransitionTo(CW_TRANSMIT_KEYER_WAIT) if (this.tracer?.log("🛡️ User evaluating guard: " + "spaceCount_ms >= ditDuration_ms") || this.evaluateGuard("CW_TRANSMIT_KEYER_SPACE","do [spaceCount_ms >= ditDuration_ms] TransitionTo(CW_TRANSMIT_KEYER_WAIT)")) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). this.#CW_TRANSMIT_KEYER_SPACE_exit(); - // Step 2: Transition action: `this.tracer?.edgeTransition("edge31");`. - this.tracer?.edgeTransition("edge31"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge30");`. + this.tracer?.edgeTransition("edge30"); // Step 3: Enter/move towards transition target `CW_TRANSMIT_KEYER_WAIT`. this.#CW_TRANSMIT_KEYER_WAIT_enter(); @@ -2089,13 +2194,13 @@ #CW_TRANSMIT_KEYER_WAIT_dah_pressed() { // CW_TRANSMIT_KEYER_WAIT behavior - // uml: DAH_PRESSED / { this.tracer?.edgeTransition("edge34"); } TransitionTo(CW_TRANSMIT_DAH_MARK) + // uml: DAH_PRESSED / { this.tracer?.edgeTransition("edge33"); } TransitionTo(CW_TRANSMIT_DAH_MARK) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). this.#CW_TRANSMIT_KEYER_WAIT_exit(); - // Step 2: Transition action: `this.tracer?.edgeTransition("edge34");`. - this.tracer?.edgeTransition("edge34"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge33");`. + this.tracer?.edgeTransition("edge33"); // Step 3: Enter/move towards transition target `CW_TRANSMIT_DAH_MARK`. this.#CW_TRANSMIT_DAH_MARK_enter(); @@ -2110,13 +2215,13 @@ #CW_TRANSMIT_KEYER_WAIT_dit_pressed() { // CW_TRANSMIT_KEYER_WAIT behavior - // uml: DIT_PRESSED / { this.tracer?.edgeTransition("edge33"); } TransitionTo(CW_TRANSMIT_DIT_MARK) + // uml: DIT_PRESSED / { this.tracer?.edgeTransition("edge32"); } TransitionTo(CW_TRANSMIT_DIT_MARK) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). this.#CW_TRANSMIT_KEYER_WAIT_exit(); - // Step 2: Transition action: `this.tracer?.edgeTransition("edge33");`. - this.tracer?.edgeTransition("edge33"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge32");`. + this.tracer?.edgeTransition("edge32"); // Step 3: Enter/move towards transition target `CW_TRANSMIT_DIT_MARK`. this.#CW_TRANSMIT_DIT_MARK_enter(); @@ -2138,14 +2243,14 @@ } // end of behavior for CW_TRANSMIT_KEYER_WAIT // CW_TRANSMIT_KEYER_WAIT behavior - // uml: do [this.tracer?.log("🛡️ User evaluating guard: " + "spaceCount_ms >= waitDuration_ms") || this.evaluateGuard("CW_TRANSMIT_KEYER_WAIT","do [spaceCount_ms >= waitDuration_ms] TransitionTo(CW_RECEIVE)")] / { this.tracer?.edgeTransition("edge32"); } TransitionTo(CW_RECEIVE) + // uml: do [this.tracer?.log("🛡️ User evaluating guard: " + "spaceCount_ms >= waitDuration_ms") || this.evaluateGuard("CW_TRANSMIT_KEYER_WAIT","do [spaceCount_ms >= waitDuration_ms] TransitionTo(CW_RECEIVE)")] / { this.tracer?.edgeTransition("edge31"); } TransitionTo(CW_RECEIVE) if (this.tracer?.log("🛡️ User evaluating guard: " + "spaceCount_ms >= waitDuration_ms") || this.evaluateGuard("CW_TRANSMIT_KEYER_WAIT","do [spaceCount_ms >= waitDuration_ms] TransitionTo(CW_RECEIVE)")) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). this.#CW_TRANSMIT_KEYER_WAIT_exit(); - // Step 2: Transition action: `this.tracer?.edgeTransition("edge32");`. - this.tracer?.edgeTransition("edge32"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge31");`. + this.tracer?.edgeTransition("edge31"); // Step 3: Enter/move towards transition target `CW_RECEIVE`. this.#CW_RECEIVE_enter(); @@ -2196,13 +2301,13 @@ #CW_TRANSMIT_MARK_key_released() { // CW_TRANSMIT_MARK behavior - // uml: KEY_RELEASED / { this.tracer?.edgeTransition("edge27"); } TransitionTo(CW_TRANSMIT_SPACE) + // uml: KEY_RELEASED / { this.tracer?.edgeTransition("edge26"); } TransitionTo(CW_TRANSMIT_SPACE) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). this.#CW_TRANSMIT_MARK_exit(); - // Step 2: Transition action: `this.tracer?.edgeTransition("edge27");`. - this.tracer?.edgeTransition("edge27"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge26");`. + this.tracer?.edgeTransition("edge26"); // Step 3: Enter/move towards transition target `CW_TRANSMIT_SPACE`. this.#CW_TRANSMIT_SPACE_enter(); @@ -2267,14 +2372,14 @@ } // end of behavior for CW_TRANSMIT_SPACE // CW_TRANSMIT_SPACE behavior - // uml: do [this.tracer?.log("🛡️ User evaluating guard: " + "spaceCount_ms >= waitDuration_ms") || this.evaluateGuard("CW_TRANSMIT_SPACE","do [spaceCount_ms >= waitDuration_ms] TransitionTo(CW_RECEIVE)")] / { this.tracer?.edgeTransition("edge29"); } TransitionTo(CW_RECEIVE) + // uml: do [this.tracer?.log("🛡️ User evaluating guard: " + "spaceCount_ms >= waitDuration_ms") || this.evaluateGuard("CW_TRANSMIT_SPACE","do [spaceCount_ms >= waitDuration_ms] TransitionTo(CW_RECEIVE)")] / { this.tracer?.edgeTransition("edge28"); } TransitionTo(CW_RECEIVE) if (this.tracer?.log("🛡️ User evaluating guard: " + "spaceCount_ms >= waitDuration_ms") || this.evaluateGuard("CW_TRANSMIT_SPACE","do [spaceCount_ms >= waitDuration_ms] TransitionTo(CW_RECEIVE)")) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). this.#CW_TRANSMIT_SPACE_exit(); - // Step 2: Transition action: `this.tracer?.edgeTransition("edge29");`. - this.tracer?.edgeTransition("edge29"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge28");`. + this.tracer?.edgeTransition("edge28"); // Step 3: Enter/move towards transition target `CW_RECEIVE`. this.#CW_RECEIVE_enter(); @@ -2289,13 +2394,13 @@ #CW_TRANSMIT_SPACE_key_pressed() { // CW_TRANSMIT_SPACE behavior - // uml: KEY_PRESSED / { this.tracer?.edgeTransition("edge28"); } TransitionTo(CW_TRANSMIT_MARK) + // uml: KEY_PRESSED / { this.tracer?.edgeTransition("edge27"); } TransitionTo(CW_TRANSMIT_MARK) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). this.#CW_TRANSMIT_SPACE_exit(); - // Step 2: Transition action: `this.tracer?.edgeTransition("edge28");`. - this.tracer?.edgeTransition("edge28"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge27");`. + this.tracer?.edgeTransition("edge27"); // Step 3: Enter/move towards transition target `CW_TRANSMIT_MARK`. this.#CW_TRANSMIT_MARK_enter(); @@ -2308,6 +2413,224 @@ } + //////////////////////////////////////////////////////////////////////////////// + // event handlers for state DIGITAL_STATES + //////////////////////////////////////////////////////////////////////////////// + + #DIGITAL_STATES_enter() + { + this.stateId = ModeSm.StateId.DIGITAL_STATES; + + // DIGITAL_STATES behavior + // uml: enter / { this.tracer?.enterState('DIGITAL_STATES'); } + { + // Step 1: execute action `this.tracer?.enterState('DIGITAL_STATES');` + this.tracer?.enterState('DIGITAL_STATES'); + } // end of behavior for DIGITAL_STATES + + // DIGITAL_STATES behavior + // uml: enter / { this.tracer?.log("⚡ FSM would execute action: " + "EnterDigitalMode();"); } + { + // Step 1: execute action `this.tracer?.log("⚡ FSM would execute action: " + "EnterDigitalMode();");` + this.tracer?.log("⚡ FSM would execute action: " + "EnterDigitalMode();"); + } // end of behavior for DIGITAL_STATES + } + + #DIGITAL_STATES_exit() + { + // DIGITAL_STATES behavior + // uml: exit / { this.tracer?.log("⚡ FSM would execute action: " + "ExitDigitalMode();"); } + { + // Step 1: execute action `this.tracer?.log("⚡ FSM would execute action: " + "ExitDigitalMode();");` + this.tracer?.log("⚡ FSM would execute action: " + "ExitDigitalMode();"); + } // end of behavior for DIGITAL_STATES + + // DIGITAL_STATES behavior + // uml: exit / { this.tracer?.exitState('DIGITAL_STATES'); } + { + // Step 1: execute action `this.tracer?.exitState('DIGITAL_STATES');` + this.tracer?.exitState('DIGITAL_STATES'); + } // end of behavior for DIGITAL_STATES + + this.stateId = ModeSm.StateId.NORMAL_STATES; + } + + #DIGITAL_STATES_InitialState_transition() + { + // DIGITAL_STATES. behavior + // uml: / { this.tracer?.edgeTransition("edge36"); } TransitionTo(DIGITAL_RECEIVE) + { + // Step 1: Exit states until we reach `DIGITAL_STATES` state (Least Common Ancestor for transition). Already at LCA, no exiting required. + + // Step 2: Transition action: `this.tracer?.edgeTransition("edge36");`. + this.tracer?.edgeTransition("edge36"); + + // Step 3: Enter/move towards transition target `DIGITAL_RECEIVE`. + this.#DIGITAL_RECEIVE_enter(); + + // Step 4: complete transition. Ends event dispatch. No other behaviors are checked. + return; + } // end of behavior for DIGITAL_STATES. + } + + + //////////////////////////////////////////////////////////////////////////////// + // event handlers for state DIGITAL_RECEIVE + //////////////////////////////////////////////////////////////////////////////// + + #DIGITAL_RECEIVE_enter() + { + this.stateId = ModeSm.StateId.DIGITAL_RECEIVE; + + // DIGITAL_RECEIVE behavior + // uml: enter / { this.tracer?.enterState('DIGITAL_RECEIVE'); } + { + // Step 1: execute action `this.tracer?.enterState('DIGITAL_RECEIVE');` + this.tracer?.enterState('DIGITAL_RECEIVE'); + } // end of behavior for DIGITAL_RECEIVE + + // DIGITAL_RECEIVE behavior + // uml: enter / { this.tracer?.log("⚡ FSM would execute action: " + "UpdateHardwareState();"); } + { + // Step 1: execute action `this.tracer?.log("⚡ FSM would execute action: " + "UpdateHardwareState();");` + this.tracer?.log("⚡ FSM would execute action: " + "UpdateHardwareState();"); + } // end of behavior for DIGITAL_RECEIVE + } + + #DIGITAL_RECEIVE_exit() + { + // DIGITAL_RECEIVE behavior + // uml: exit / { this.tracer?.exitState('DIGITAL_RECEIVE'); } + { + // Step 1: execute action `this.tracer?.exitState('DIGITAL_RECEIVE');` + this.tracer?.exitState('DIGITAL_RECEIVE'); + } // end of behavior for DIGITAL_RECEIVE + + this.stateId = ModeSm.StateId.DIGITAL_STATES; + } + + #DIGITAL_RECEIVE_ptt_pressed() + { + // DIGITAL_RECEIVE behavior + // uml: PTT_PRESSED [this.tracer?.log("🛡️ User evaluating guard: " + "IsTxAllowed()") || this.evaluateGuard("DIGITAL_RECEIVE","PTT_PRESSED [IsTxAllowed()] TransitionTo(DIGITAL_TRANSMIT)")] / { this.tracer?.edgeTransition("edge37"); } TransitionTo(DIGITAL_TRANSMIT) + if (this.tracer?.log("🛡️ User evaluating guard: " + "IsTxAllowed()") || this.evaluateGuard("DIGITAL_RECEIVE","PTT_PRESSED [IsTxAllowed()] TransitionTo(DIGITAL_TRANSMIT)")) + { + // Step 1: Exit states until we reach `DIGITAL_STATES` state (Least Common Ancestor for transition). + this.#DIGITAL_RECEIVE_exit(); + + // Step 2: Transition action: `this.tracer?.edgeTransition("edge37");`. + this.tracer?.edgeTransition("edge37"); + + // Step 3: Enter/move towards transition target `DIGITAL_TRANSMIT`. + this.#DIGITAL_TRANSMIT_enter(); + + // Step 4: complete transition. Ends event dispatch. No other behaviors are checked. + return; + } // end of behavior for DIGITAL_RECEIVE + + // No ancestor handles this event. + } + + #DIGITAL_RECEIVE_to_cw_mode() + { + // DIGITAL_RECEIVE behavior + // uml: TO_CW_MODE / { this.tracer?.edgeTransition("edge39"); } TransitionTo(CW_RECEIVE) + { + // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). + this.#exitUpToStateHandler(ModeSm.StateId.NORMAL_STATES); + + // Step 2: Transition action: `this.tracer?.edgeTransition("edge39");`. + this.tracer?.edgeTransition("edge39"); + + // Step 3: Enter/move towards transition target `CW_RECEIVE`. + this.#CW_RECEIVE_enter(); + + // Step 4: complete transition. Ends event dispatch. No other behaviors are checked. + return; + } // end of behavior for DIGITAL_RECEIVE + + // No ancestor handles this event. + } + + #DIGITAL_RECEIVE_to_ssb_mode() + { + // DIGITAL_RECEIVE behavior + // uml: TO_SSB_MODE / { this.tracer?.edgeTransition("edge38"); } TransitionTo(SSB_RECEIVE) + { + // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). + this.#exitUpToStateHandler(ModeSm.StateId.NORMAL_STATES); + + // Step 2: Transition action: `this.tracer?.edgeTransition("edge38");`. + this.tracer?.edgeTransition("edge38"); + + // Step 3: Enter/move towards transition target `SSB_RECEIVE`. + this.#SSB_RECEIVE_enter(); + + // Step 4: complete transition. Ends event dispatch. No other behaviors are checked. + return; + } // end of behavior for DIGITAL_RECEIVE + + // No ancestor handles this event. + } + + + //////////////////////////////////////////////////////////////////////////////// + // event handlers for state DIGITAL_TRANSMIT + //////////////////////////////////////////////////////////////////////////////// + + #DIGITAL_TRANSMIT_enter() + { + this.stateId = ModeSm.StateId.DIGITAL_TRANSMIT; + + // DIGITAL_TRANSMIT behavior + // uml: enter / { this.tracer?.enterState('DIGITAL_TRANSMIT'); } + { + // Step 1: execute action `this.tracer?.enterState('DIGITAL_TRANSMIT');` + this.tracer?.enterState('DIGITAL_TRANSMIT'); + } // end of behavior for DIGITAL_TRANSMIT + + // DIGITAL_TRANSMIT behavior + // uml: enter / { this.tracer?.log("⚡ FSM would execute action: " + "UpdateHardwareState();"); } + { + // Step 1: execute action `this.tracer?.log("⚡ FSM would execute action: " + "UpdateHardwareState();");` + this.tracer?.log("⚡ FSM would execute action: " + "UpdateHardwareState();"); + } // end of behavior for DIGITAL_TRANSMIT + } + + #DIGITAL_TRANSMIT_exit() + { + // DIGITAL_TRANSMIT behavior + // uml: exit / { this.tracer?.exitState('DIGITAL_TRANSMIT'); } + { + // Step 1: execute action `this.tracer?.exitState('DIGITAL_TRANSMIT');` + this.tracer?.exitState('DIGITAL_TRANSMIT'); + } // end of behavior for DIGITAL_TRANSMIT + + this.stateId = ModeSm.StateId.DIGITAL_STATES; + } + + #DIGITAL_TRANSMIT_ptt_released() + { + // DIGITAL_TRANSMIT behavior + // uml: PTT_RELEASED / { this.tracer?.edgeTransition("edge40"); } TransitionTo(DIGITAL_RECEIVE) + { + // Step 1: Exit states until we reach `DIGITAL_STATES` state (Least Common Ancestor for transition). + this.#DIGITAL_TRANSMIT_exit(); + + // Step 2: Transition action: `this.tracer?.edgeTransition("edge40");`. + this.tracer?.edgeTransition("edge40"); + + // Step 3: Enter/move towards transition target `DIGITAL_RECEIVE`. + this.#DIGITAL_RECEIVE_enter(); + + // Step 4: complete transition. Ends event dispatch. No other behaviors are checked. + return; + } // end of behavior for DIGITAL_TRANSMIT + + // No ancestor handles this event. + } + + //////////////////////////////////////////////////////////////////////////////// // event handlers for state SSB_RECEIVE //////////////////////////////////////////////////////////////////////////////// @@ -2346,14 +2669,14 @@ #SSB_RECEIVE_ptt_pressed() { // SSB_RECEIVE behavior - // uml: PTT_PRESSED [this.tracer?.log("🛡️ User evaluating guard: " + "IsTxAllowed()") || this.evaluateGuard("SSB_RECEIVE","PTT_PRESSED [IsTxAllowed()] TransitionTo(SSB_TRANSMIT)")] / { this.tracer?.edgeTransition("edge21"); } TransitionTo(SSB_TRANSMIT) + // uml: PTT_PRESSED [this.tracer?.log("🛡️ User evaluating guard: " + "IsTxAllowed()") || this.evaluateGuard("SSB_RECEIVE","PTT_PRESSED [IsTxAllowed()] TransitionTo(SSB_TRANSMIT)")] / { this.tracer?.edgeTransition("edge41"); } TransitionTo(SSB_TRANSMIT) if (this.tracer?.log("🛡️ User evaluating guard: " + "IsTxAllowed()") || this.evaluateGuard("SSB_RECEIVE","PTT_PRESSED [IsTxAllowed()] TransitionTo(SSB_TRANSMIT)")) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). this.#SSB_RECEIVE_exit(); - // Step 2: Transition action: `this.tracer?.edgeTransition("edge21");`. - this.tracer?.edgeTransition("edge21"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge41");`. + this.tracer?.edgeTransition("edge41"); // Step 3: Enter/move towards transition target `SSB_TRANSMIT`. this.#SSB_TRANSMIT_enter(); @@ -2368,13 +2691,13 @@ #SSB_RECEIVE_to_cw_mode() { // SSB_RECEIVE behavior - // uml: TO_CW_MODE / { this.tracer?.edgeTransition("edge20"); } TransitionTo(CW_RECEIVE) + // uml: TO_CW_MODE / { this.tracer?.edgeTransition("edge43"); } TransitionTo(CW_RECEIVE) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). this.#SSB_RECEIVE_exit(); - // Step 2: Transition action: `this.tracer?.edgeTransition("edge20");`. - this.tracer?.edgeTransition("edge20"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge43");`. + this.tracer?.edgeTransition("edge43"); // Step 3: Enter/move towards transition target `CW_RECEIVE`. this.#CW_RECEIVE_enter(); @@ -2386,6 +2709,28 @@ // No ancestor handles this event. } + #SSB_RECEIVE_to_digital_mode() + { + // SSB_RECEIVE behavior + // uml: TO_DIGITAL_MODE / { this.tracer?.edgeTransition("edge42"); } TransitionTo(DIGITAL_STATES) + { + // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). + this.#SSB_RECEIVE_exit(); + + // Step 2: Transition action: `this.tracer?.edgeTransition("edge42");`. + this.tracer?.edgeTransition("edge42"); + + // Step 3: Enter/move towards transition target `DIGITAL_STATES`. + this.#DIGITAL_STATES_enter(); + + // Finish transition by calling pseudo state transition function. + this.#DIGITAL_STATES_InitialState_transition(); + return; // event processing immediately stops when a transition finishes. No other behaviors for this state are checked. + } // end of behavior for SSB_RECEIVE + + // No ancestor handles this event. + } + //////////////////////////////////////////////////////////////////////////////// // event handlers for state SSB_TRANSMIT @@ -2425,13 +2770,13 @@ #SSB_TRANSMIT_ptt_released() { // SSB_TRANSMIT behavior - // uml: PTT_RELEASED / { this.tracer?.edgeTransition("edge26"); } TransitionTo(SSB_RECEIVE) + // uml: PTT_RELEASED / { this.tracer?.edgeTransition("edge25"); } TransitionTo(SSB_RECEIVE) { // Step 1: Exit states until we reach `NORMAL_STATES` state (Least Common Ancestor for transition). this.#SSB_TRANSMIT_exit(); - // Step 2: Transition action: `this.tracer?.edgeTransition("edge26");`. - this.tracer?.edgeTransition("edge26"); + // Step 2: Transition action: `this.tracer?.edgeTransition("edge25");`. + this.tracer?.edgeTransition("edge25"); // Step 3: Enter/move towards transition target `SSB_RECEIVE`. this.#SSB_RECEIVE_enter(); @@ -2466,6 +2811,9 @@ case ModeSm.StateId.CW_TRANSMIT_KEYER_WAIT: return "CW_TRANSMIT_KEYER_WAIT"; case ModeSm.StateId.CW_TRANSMIT_MARK: return "CW_TRANSMIT_MARK"; case ModeSm.StateId.CW_TRANSMIT_SPACE: return "CW_TRANSMIT_SPACE"; + case ModeSm.StateId.DIGITAL_STATES: return "DIGITAL_STATES"; + case ModeSm.StateId.DIGITAL_RECEIVE: return "DIGITAL_RECEIVE"; + case ModeSm.StateId.DIGITAL_TRANSMIT: return "DIGITAL_TRANSMIT"; case ModeSm.StateId.SSB_RECEIVE: return "SSB_RECEIVE"; case ModeSm.StateId.SSB_TRANSMIT: return "SSB_TRANSMIT"; default: return "?"; @@ -2492,6 +2840,7 @@ case ModeSm.EventId.PTT_PRESSED: return "PTT_PRESSED"; case ModeSm.EventId.PTT_RELEASED: return "PTT_RELEASED"; case ModeSm.EventId.TO_CW_MODE: return "TO_CW_MODE"; + case ModeSm.EventId.TO_DIGITAL_MODE: return "TO_DIGITAL_MODE"; case ModeSm.EventId.TO_SSB_MODE: return "TO_SSB_MODE"; default: return "?"; } @@ -2531,7 +2880,7 @@ center: true }); - const diagramEventNamesArray = ['do', 'CALIBRATE_EXIT', 'CALIBRATE_FREQUENCY', 'CALIBRATE_POWER', 'CALIBRATE_RX_IQ', 'CALIBRATE_TX_IQ', 'DAH_PRESSED', 'DIT_PRESSED', 'KEY_PRESSED', 'KEY_RELEASED', 'OFFSET_END', 'OFFSET_START', 'PTT_PRESSED', 'PTT_RELEASED', 'TO_CW_MODE', 'TO_SSB_MODE', ]; + const diagramEventNamesArray = ['do', 'CALIBRATE_EXIT', 'CALIBRATE_FREQUENCY', 'CALIBRATE_POWER', 'CALIBRATE_RX_IQ', 'CALIBRATE_TX_IQ', 'DAH_PRESSED', 'DIT_PRESSED', 'KEY_PRESSED', 'KEY_RELEASED', 'OFFSET_END', 'OFFSET_START', 'PTT_PRESSED', 'PTT_RELEASED', 'TO_CW_MODE', 'TO_DIGITAL_MODE', 'TO_SSB_MODE', ]; // Mapping from state to available events const stateEventsMapping = { @@ -2575,14 +2924,6 @@ "CALIBRATE_RX_IQ", "CALIBRATE_TX_IQ" ], - "SSB_RECEIVE": [ - "CALIBRATE_FREQUENCY", - "CALIBRATE_POWER", - "CALIBRATE_RX_IQ", - "CALIBRATE_TX_IQ", - "PTT_PRESSED", - "TO_CW_MODE" - ], "CW_RECEIVE": [ "CALIBRATE_FREQUENCY", "CALIBRATE_POWER", @@ -2592,6 +2933,7 @@ "DIT_PRESSED", "do", "KEY_PRESSED", + "TO_DIGITAL_MODE", "TO_SSB_MODE" ], "SSB_TRANSMIT": [ @@ -2645,6 +2987,37 @@ "CALIBRATE_RX_IQ", "CALIBRATE_TX_IQ", "do" + ], + "DIGITAL_STATES": [ + "CALIBRATE_FREQUENCY", + "CALIBRATE_POWER", + "CALIBRATE_RX_IQ", + "CALIBRATE_TX_IQ" + ], + "DIGITAL_RECEIVE": [ + "CALIBRATE_FREQUENCY", + "CALIBRATE_POWER", + "CALIBRATE_RX_IQ", + "CALIBRATE_TX_IQ", + "PTT_PRESSED", + "TO_CW_MODE", + "TO_SSB_MODE" + ], + "DIGITAL_TRANSMIT": [ + "CALIBRATE_FREQUENCY", + "CALIBRATE_POWER", + "CALIBRATE_RX_IQ", + "CALIBRATE_TX_IQ", + "PTT_RELEASED" + ], + "SSB_RECEIVE": [ + "CALIBRATE_FREQUENCY", + "CALIBRATE_POWER", + "CALIBRATE_RX_IQ", + "CALIBRATE_TX_IQ", + "PTT_PRESSED", + "TO_CW_MODE", + "TO_DIGITAL_MODE" ] }; diff --git a/code/src/PhoenixSketch/SDT.h b/code/src/PhoenixSketch/SDT.h index 2a3ae2e..adf1008 100644 --- a/code/src/PhoenixSketch/SDT.h +++ b/code/src/PhoenixSketch/SDT.h @@ -27,7 +27,18 @@ If not, see . #include "BuildInfo.h" +// Teensyduino has no "Dual Serial + Audio" USB type, so a build with a USB audio +// interface (usb=serialmidiaudio, which digital mode requires) has only one serial +// port. CAT then shares the primary Serial, and Debug() must go quiet or its +// output would corrupt the CAT stream. Without USB audio, nothing changes: CAT +// keeps its own SerialUSB1 and Debug() keeps Serial to itself. +#ifdef AUDIO_INTERFACE +#define CATSerial Serial +#define Debug(x) +#else +#define CATSerial SerialUSB1 #define Debug(x) Serial.println(x) +#endif #include // Installed via Arduino library manager #include // https://github.com/chipaudette/OpenAudio_ArduinoLibrary @@ -301,6 +312,16 @@ extern struct config_t { int32_t equalizerRec[EQUALIZER_CELL_COUNT] = { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }; /** Receive audio equalizer amplitudes */ int32_t equalizerXmt[EQUALIZER_CELL_COUNT] = { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }; /** Transmit audio equalizer amplitudes */ int32_t currentMicGain = 20; /** Gain of the mic used for SSB */ + int32_t digitalDriveLevel = 50; /** Drive level (0-100) applied to USB transmit audio in digital mode */ + /** Level (0-100) applied to USB receive audio in digital mode. + * + * The receive audio arriving at the USB tap is unregulated: with AGC off the + * AGC stage applies a fixed gain of 20, so the level is whatever the antenna + * and the DSP chain produce, and a strong signal reaches full scale and clips. + * The default of 25 is -12 dB, leaving headroom while staying far above the + * chain's noise floor (measured ~66 dB below a strong carrier). + */ + int32_t digitalRxLevel = 25; float32_t dbm_calibration[NUMBER_OF_BANDS] = {0,0,0,0,0,0,0,0,0,0,0,0,0}; /** Calibrates the S-meter scale on the display */ float32_t powerOutCW[NUMBER_OF_BANDS] = {DEFAULT_POWER_LEVEL,DEFAULT_POWER_LEVEL,DEFAULT_POWER_LEVEL, DEFAULT_POWER_LEVEL,DEFAULT_POWER_LEVEL,DEFAULT_POWER_LEVEL, @@ -366,9 +387,22 @@ struct band { int64_t fBandLow_Hz; /** Lower band edge */ int64_t fBandHigh_Hz; /** Upper band edge */ const char *name; /** Name of band */ - ModulationType mode; /** Modulation type (USB, LSB) */ - int32_t FHiCut_Hz; /** Audio bandpass filter edge */ - int32_t FLoCut_Hz; /** Audio bandpass filter edge */ + /** The band's DEFAULT modulation - not the current one. + * + * The current modulation is ED.modulation[activeVFO]; that is what Demodulate() + * switches on and what the user selects. This field is the fixed reference the + * default is measured against, and the sign of FHiCut_Hz/FLoCut_Hz below is + * expressed in its convention (negative below the carrier for an LSB default). + * InitFilterMask() mirrors the stored cutoffs whenever the current modulation + * differs from this, which is how the other sideband is produced. + * + * Nothing may write this at run time. Doing so silently flips the sideband: + * making it agree with a newly selected modulation removes the mirroring and + * hands back the band-default passband instead of the requested one. + */ + ModulationType mode; + int32_t FHiCut_Hz; /** Audio bandpass filter edge, in the mode-default convention */ + int32_t FLoCut_Hz; /** Audio bandpass filter edge, in the mode-default convention */ float32_t RFgain_dB; /** Gain applied in the DSP receive chain */ BandType band_type; /** type of band */ int32_t AGC_thresh; /** AGC threshold value used by DSP receive code */ @@ -694,6 +728,7 @@ struct AGCConfig { #include "DSP_CWProcessing.h" #include "DSP.h" #include "MainBoard_AudioIO.h" +#include "USBAudio.h" #include "FrontPanel.h" #include "FrontPanel_Rotary.h" #include "RFBoard.h" diff --git a/code/src/PhoenixSketch/Storage.cpp b/code/src/PhoenixSketch/Storage.cpp index 15e5f13..2a916ef 100644 --- a/code/src/PhoenixSketch/Storage.cpp +++ b/code/src/PhoenixSketch/Storage.cpp @@ -94,6 +94,8 @@ void SaveDataToStorage(bool savetosd){ } doc["currentMicGain"] = ED.currentMicGain; + doc["digitalDriveLevel"] = ED.digitalDriveLevel; + doc["digitalRxLevel"] = ED.digitalRxLevel; // Band-specific arrays for(int i = 0; i < NUMBER_OF_BANDS; i++) { @@ -317,6 +319,8 @@ void RestoreDataFromStorage(void){ } ED.currentMicGain = doc["currentMicGain"] | ED.currentMicGain; + ED.digitalDriveLevel = doc["digitalDriveLevel"] | ED.digitalDriveLevel; + ED.digitalRxLevel = doc["digitalRxLevel"] | ED.digitalRxLevel; if (doc["dbm_calibration"].is()) { for(int i = 0; i < NUMBER_OF_BANDS; i++) { @@ -543,6 +547,8 @@ void RestoreDataFromSDCard(void){ } ED.currentMicGain = doc["currentMicGain"] | ED.currentMicGain; + ED.digitalDriveLevel = doc["digitalDriveLevel"] | ED.digitalDriveLevel; + ED.digitalRxLevel = doc["digitalRxLevel"] | ED.digitalRxLevel; if (doc["dbm_calibration"].is()) { for(int i = 0; i < NUMBER_OF_BANDS; i++) { @@ -717,6 +723,8 @@ void PrintEDToSerial(void){ Serial.print("fineTuneFreq_Hz[0]: "); Serial.println(ED.fineTuneFreq_Hz[0]); Serial.print("fineTuneFreq_Hz[1]: "); Serial.println(ED.fineTuneFreq_Hz[1]); Serial.print("currentMicGain: "); Serial.println(ED.currentMicGain); + Serial.print("digitalDriveLevel: "); Serial.println(ED.digitalDriveLevel); + Serial.print("digitalRxLevel: "); Serial.println(ED.digitalRxLevel); Serial.print("dbm_calibration: "); for(int i = 0; i < NUMBER_OF_BANDS; i++) { Serial.print(ED.dbm_calibration[i]); diff --git a/code/src/PhoenixSketch/USBAudio.cpp b/code/src/PhoenixSketch/USBAudio.cpp new file mode 100644 index 0000000..e3ad368 --- /dev/null +++ b/code/src/PhoenixSketch/USBAudio.cpp @@ -0,0 +1,403 @@ +/* +Copyright (C) 2026 T41 EP Software Contributors +See Contributors.txt for list of known authors. + +This file is part of Phoenix. + +Phoenix is free software: you can redistribute it and/or modify it under the +terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later version. + +Phoenix is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with Phoenix. +If not, see . +*/ + +/** + * USB audio transport for DIGITAL mode. + * + * ## Why this file exists + * + * The stock Teensy AudioInputUSB / AudioOutputUSB objects (the same ones + * OpenAudio's USB_Audio_F32.h wraps) do everything we need: descriptors, DMA, + * the isochronous ISRs, and the asynchronous feedback endpoint that keeps the + * host's clock and ours in step. None of that is reimplemented here. + * + * What does not work is putting them in the AudioConnection graph directly. The + * graph is clocked by the I2S DMA, not by USB: software_isr() runs once per + * AUDIO_BLOCK_SAMPLES of I2S, which at 176.4 ksps is 1378.125 Hz. The USB audio + * objects must be updated at 44100/128 = 344.53 Hz. Overfed 4:1, AudioOutputUSB + * only holds two blocks and discards the rest, and AudioInputUSB's feedback + * control loop is calibrated for the nominal rate. + * + * At 176.4 ksps that ratio is exactly 4:1, which is the whole reason DIGITAL + * mode forces this sample rate. So we take the USB objects out of the graph + * clock (AudioStream::update_all skips any object whose protected `active` flag + * is false) and drive their update() from a pacer that does real work on every + * fourth call. + * + * ## Data flow + * + * radio -> PC: DSP block (512 samples @ 44.1 kHz) + * -> USBAudioWriteRx -> usbPlayL/R -> usbOut -> host + * PC -> radio: host -> usbIn -> usbRecL/R -> USBAudioReadTx -> DSP block + * + * The AudioPlayQueue / AudioRecordQueue objects are the buffering, so there is + * no ring buffer here: the DSP delivers four blocks at once every 11.6 ms while + * the pacer moves one block every 2.9 ms. + * + * ## A note on style + * + * Phoenix is written as C-style C++ - free functions over file-scope data - and + * this file follows that. The two places it cannot are forced by the Teensy + * Audio library, and both are as small as they can be made: + * + * 1. Clearing AudioStream::active needs a derived type, because the flag is + * protected. Hence the four one-line Deactivatable* structs below. + * 2. Getting into update_all() at all needs an AudioStream subclass with an + * update() method. Hence USBAudioPacer, whose state is a file-scope + * variable and whose body is an ordinary out-of-line function. + * + * @see USBAudio.h for the public API + */ +#include "SDT.h" +#include "USBAudio.h" + +#ifdef AUDIO_INTERFACE + +#include + +// The core's usb_audio.cpp exports these but does not declare them in a header. +extern volatile uint32_t usb_audio_underrun_count; +extern volatile uint32_t usb_audio_overrun_count; + +/** Depth of the radio-to-host play queue, in AUDIO_BLOCK_SAMPLES blocks. + * + * The producer and consumer are rate-matched on average (both 44,100 samples/s) + * but not in phase: the DSP delivers four blocks at once every 11.6 ms, while + * the pacer takes one block every 2.9 ms. So the queue swings by four blocks + * every DSP period no matter what, and anything that delays the main loop - + * a display refresh is the obvious one - drains it further. + * + * This started at 8 with no prefill, which left the queue living at a depth of + * 0-4 blocks, i.e. no underrun margin at all. A 12 s capture then contained 147 + * dropouts totalling 903 ms, every one an exact multiple of AUDIO_BLOCK_SAMPLES + * and spaced about 133 ms apart: AudioOutputUSB::update() substitutes a silence + * block whenever its input queue is empty, so an empty play queue is heard as + * digital silence, not as a glitch. + * + * 24 blocks prefilled to half depth gives ~35 ms of margin in both directions - + * three times the worst observed stall - for ~35 ms of added latency, which is + * nothing to an FT8 decoder. */ +#define USB_PLAY_QUEUE_BLOCKS 24 + +/** Blocks of silence queued at start-up so the first stall has something to eat. */ +#define USB_PLAY_QUEUE_PREFILL (USB_PLAY_QUEUE_BLOCKS / 2) + +/** Blocks the record queue may accumulate before USBAudioReadTx() discards the + * oldest. AudioRecordQueue has no built-in cap and will happily swallow the + * whole audio memory pool if the main loop stalls. */ +#define USB_REC_QUEUE_CAP 12 + +/** AudioStream blocks per DSP block. 512 / 128 = 4, and also the pacer divisor. */ +#define USB_BLOCKS_PER_DSP_BLOCK (USB_AUDIO_BLOCK_SAMPLES / AUDIO_BLOCK_SAMPLES) + +// --------------------------------------------------------------------------- +// Audio graph objects +// +// AudioStream::active is protected, so only a derived type may clear it. These +// four structs add nothing else. Clearing the flag removes the object from +// update_all(), which is what lets DriveUSBAudioObjects() below run them at the +// USB rate instead of the I2S rate. +// --------------------------------------------------------------------------- +struct DeactivatableInputUSB : public AudioInputUSB { void Deactivate(void){ active = false; } }; +struct DeactivatableOutputUSB : public AudioOutputUSB { void Deactivate(void){ active = false; } }; +struct DeactivatablePlayQueue : public AudioPlayQueue { void Deactivate(void){ active = false; } }; +struct DeactivatableRecordQueue : public AudioRecordQueue { void Deactivate(void){ active = false; } }; + +static DeactivatableInputUSB usbIn; // host -> radio (transmit audio) +static DeactivatableOutputUSB usbOut; // radio -> host (receive audio) +static DeactivatablePlayQueue usbPlayL, usbPlayR; // staging for usbOut +static DeactivatableRecordQueue usbRecL, usbRecR; // staging from usbIn + +static AudioConnection usbPatch1(usbPlayL, 0, usbOut, 0); +static AudioConnection usbPatch2(usbPlayR, 0, usbOut, 1); +static AudioConnection usbPatch3(usbIn, 0, usbRecL, 0); +static AudioConnection usbPatch4(usbIn, 1, usbRecR, 0); + +static volatile bool usbAudioRunning = false; +static volatile uint8_t usbPacerCount = 0; + +// Transmit-path health counters. The USB->exciter path joins 128-sample blocks +// pulled from the record queue; if that queue ever runs dry or has to be trimmed, +// the join is discontinuous and the discontinuity lands on the air as sidebands +// at the block rate. These say which is happening. +static volatile uint32_t usbTxUnderruns = 0; // ReadTx found fewer than 4 blocks +static volatile uint32_t usbTxTrimmed = 0; // blocks discarded for exceeding the cap +static volatile uint32_t usbTxCalls = 0; // ReadTx calls, to normalise the above +static volatile uint8_t usbRecDepthMin = 255; +static volatile uint8_t usbRecDepthMax = 0; + +/** Scratch for scaling receive audio on its way to the host, so the caller's + * buffer - which still has to feed the speaker - is left untouched. */ +static float32_t usbRxScratch[AUDIO_BLOCK_SAMPLES]; + +/** + * Run one USB audio block in and one out. + * + * Called from the pacer at 44100/AUDIO_BLOCK_SAMPLES Hz. The six objects are all + * out of update_all(), so this is the only thing driving them, and the order + * here is their data dependency order. + */ +static void DriveUSBAudioObjects(void){ + // radio -> host: staged blocks into the USB output object + usbPlayL.update(); + usbPlayR.update(); + usbOut.update(); + // host -> radio: USB input object into the staging queues + usbIn.update(); + usbRecL.update(); + usbRecR.update(); + + // Bound the record queue here rather than only in USBAudioReadTx(), which is + // called only while transmitting. Left to itself the queue fills for the whole + // time we are receiving: it was measured pinned at 208 of AudioRecordQueue's + // 209-block ceiling, holding ~418 of the 500 audio blocks between the two + // channels and handing the first transmit ~0.6 s of stale audio to discard. + while (usbRecL.available() > USB_REC_QUEUE_CAP) { + usbRecL.readBuffer(); + usbRecL.freeBuffer(); + } + while (usbRecR.available() > USB_REC_QUEUE_CAP) { + usbRecR.readBuffer(); + usbRecR.freeBuffer(); + } +} + +/** + * Divides the audio library's graph clock down to the USB audio block rate. + * + * This is the only object in this file left in update_all(). It runs in the + * audio ISR at Fs/AUDIO_BLOCK_SAMPLES and does real work on every fourth call, + * i.e. at exactly 44100/128 Hz when the radio is at 176.4 ksps. + */ +struct USBAudioPacer : public AudioStream { + USBAudioPacer(void) : AudioStream(0, NULL) { active = true; } + void update(void); +}; + +static USBAudioPacer usbPacer; + +void USBAudioPacer::update(void){ + if (++usbPacerCount < USB_BLOCKS_PER_DSP_BLOCK) + return; + usbPacerCount = 0; + if (!usbAudioRunning) + return; + DriveUSBAudioObjects(); +} + +// --------------------------------------------------------------------------- +// Public API +// --------------------------------------------------------------------------- + +void USBAudioInit(void){ + // AudioConnection::connect() sets active = true on both ends, so this has to + // happen after the static AudioConnections above are constructed - which is + // why it lives here and not in the constructors. It also has to happen at + // startup rather than on entry to digital mode: until it does, update_all() + // is driving these objects at the I2S block rate. + usbIn.Deactivate(); + usbOut.Deactivate(); + usbPlayL.Deactivate(); + usbPlayR.Deactivate(); + usbRecL.Deactivate(); + usbRecR.Deactivate(); +} + +void USBAudioBegin(void){ + // Defensive: harmless if USBAudioInit() already ran, and guarantees the + // objects are off the graph clock before we start feeding them. + USBAudioInit(); + + usbPlayL.setMaxBuffers(USB_PLAY_QUEUE_BLOCKS); + usbPlayR.setMaxBuffers(USB_PLAY_QUEUE_BLOCKS); + // Never stall the main loop waiting on the host to drain a queue + usbPlayL.setBehaviour(AudioPlayQueue::NON_STALLING); + usbPlayR.setBehaviour(AudioPlayQueue::NON_STALLING); + + AudioNoInterrupts(); + usbRecL.clear(); + usbRecR.clear(); + usbRecL.begin(); + usbRecR.begin(); + usbPacerCount = 0; + usbTxUnderruns = 0; usbTxTrimmed = 0; usbTxCalls = 0; + usbRecDepthMin = 255; usbRecDepthMax = 0; + usbAudioRunning = true; + AudioInterrupts(); + + // Prefill with silence so the queue starts at half depth rather than empty. + // Without this the very first main-loop stall is heard as a dropout, and the + // queue never gets a chance to build up a cushion of its own. + for (unsigned i = 0; i < USB_PLAY_QUEUE_PREFILL; i++) { + int16_t *bufferL = usbPlayL.getBuffer(); + int16_t *bufferR = usbPlayR.getBuffer(); + if (bufferL == NULL || bufferR == NULL) + break; + memset(bufferL, 0, AUDIO_BLOCK_SAMPLES * sizeof(int16_t)); + memset(bufferR, 0, AUDIO_BLOCK_SAMPLES * sizeof(int16_t)); + usbPlayL.playBuffer(); + usbPlayR.playBuffer(); + } +} + +void USBAudioEnd(void){ + AudioNoInterrupts(); + usbAudioRunning = false; + usbRecL.end(); + usbRecR.end(); + usbRecL.clear(); + usbRecR.clear(); + AudioInterrupts(); + + // AudioPlayQueue has no clear(), and its stop() is declared in the header but + // never defined in this version of the Audio library. Drain it by hand + // instead, so re-entering digital mode does not start by sending the host a + // burst of stale audio. The queue is bounded at USB_PLAY_QUEUE_BLOCKS, so + // that many updates empty it. Safe to call from the main loop: the pacer sees + // usbAudioRunning false and leaves these objects alone. + for (unsigned i = 0; i < USB_PLAY_QUEUE_BLOCKS; i++) + DriveUSBAudioObjects(); +} + +void USBAudioWriteRx(const float32_t *src, size_t n){ + if (!usbAudioRunning || n != USB_AUDIO_BLOCK_SAMPLES) + return; + + // Scale into scratch rather than in place: the caller is still going to run + // the second interpolation stage over this same buffer to feed the speaker. + float32_t level = ED.digitalRxLevel / 100.0f; + + for (unsigned i = 0; i < USB_BLOCKS_PER_DSP_BLOCK; i++) { + int16_t *bufferL = usbPlayL.getBuffer(); + int16_t *bufferR = usbPlayR.getBuffer(); + if (bufferL == NULL || bufferR == NULL) + return; // audio memory exhausted; drop the rest of this block + + // Teensy's CMSIS declares pSrc non-const even though it only reads it + arm_scale_f32((float32_t *)&src[AUDIO_BLOCK_SAMPLES * i], level, + usbRxScratch, AUDIO_BLOCK_SAMPLES); + arm_float_to_q15(usbRxScratch, bufferL, AUDIO_BLOCK_SAMPLES); + // Digital receive audio is mono; the host sees it on both channels + memcpy(bufferR, bufferL, AUDIO_BLOCK_SAMPLES * sizeof(int16_t)); + + // NON_STALLING: a non-zero return means the queue is full and the block + // is retained for a retry. We simply refill it next time round, which + // drops the stale audio in favour of the newer audio - the right trade + // for a live stream. + usbPlayL.playBuffer(); + usbPlayR.playBuffer(); + } +} + +bool USBAudioReadTx(float32_t *dst, size_t n){ + if (!usbAudioRunning || n != USB_AUDIO_BLOCK_SAMPLES) + return false; + + // AudioRecordQueue has no maximum depth of its own, so bound it here or a + // stalled main loop would drain the audio memory pool. Discard oldest first. + int depth = usbRecL.available(); + usbTxCalls++; + if (depth < usbRecDepthMin) usbRecDepthMin = (depth > 255) ? 255 : (uint8_t)depth; + if (depth > usbRecDepthMax) usbRecDepthMax = (depth > 255) ? 255 : (uint8_t)depth; + + while (usbRecL.available() > USB_REC_QUEUE_CAP) { + usbRecL.readBuffer(); + usbRecL.freeBuffer(); + usbTxTrimmed++; + } + while (usbRecR.available() > USB_REC_QUEUE_CAP) { + usbRecR.readBuffer(); + usbRecR.freeBuffer(); + } + + if (usbRecL.available() < (int)USB_BLOCKS_PER_DSP_BLOCK || + usbRecR.available() < (int)USB_BLOCKS_PER_DSP_BLOCK) { + usbTxUnderruns++; + return false; // underrun; caller substitutes silence + } + + for (unsigned i = 0; i < USB_BLOCKS_PER_DSP_BLOCK; i++) { + int16_t *bufferL = usbRecL.readBuffer(); + arm_q15_to_float(bufferL, &dst[AUDIO_BLOCK_SAMPLES * i], AUDIO_BLOCK_SAMPLES); + usbRecL.freeBuffer(); + // Transmit audio is mono - take the left channel and discard the right, + // but drain both in lockstep or the right queue grows without bound. + usbRecR.readBuffer(); + usbRecR.freeBuffer(); + } + return true; +} + +bool USBAudioIsRunning(void){ + return usbAudioRunning; +} + +bool USBAudioHostActive(void){ + return usb_audio_receive_setting != 0; +} + +float USBAudioHostVolume(void){ + return usbIn.volume(); +} + +void USBAudioGetStats(uint32_t *underruns, uint32_t *overruns){ + if (underruns) + *underruns = usb_audio_underrun_count; + if (overruns) + *overruns = usb_audio_overrun_count; +} + +void USBAudioGetTxStats(uint32_t *calls, uint32_t *underruns, uint32_t *trimmed, + uint8_t *depthMin, uint8_t *depthMax){ + if (calls) *calls = usbTxCalls; + if (underruns) *underruns = usbTxUnderruns; + if (trimmed) *trimmed = usbTxTrimmed; + if (depthMin) *depthMin = usbRecDepthMin; + if (depthMax) *depthMax = usbRecDepthMax; +} + +#else // !AUDIO_INTERFACE + +// Built without a USB audio interface. DIGITAL mode is not reachable from the +// UI or CAT in this configuration, but these stubs keep every call site free of +// conditional compilation. + +void USBAudioInit(void){} +void USBAudioBegin(void){} +void USBAudioEnd(void){} +bool USBAudioIsRunning(void){ return false; } +void USBAudioWriteRx(const float32_t *src, size_t n){ (void)src; (void)n; } +bool USBAudioReadTx(float32_t *dst, size_t n){ (void)dst; (void)n; return false; } +bool USBAudioHostActive(void){ return false; } +float USBAudioHostVolume(void){ return 1.0f; } + +void USBAudioGetStats(uint32_t *underruns, uint32_t *overruns){ + if (underruns) *underruns = 0; + if (overruns) *overruns = 0; +} + +void USBAudioGetTxStats(uint32_t *calls, uint32_t *underruns, uint32_t *trimmed, + uint8_t *depthMin, uint8_t *depthMax){ + if (calls) *calls = 0; + if (underruns) *underruns = 0; + if (trimmed) *trimmed = 0; + if (depthMin) *depthMin = 0; + if (depthMax) *depthMax = 0; +} + +#endif // AUDIO_INTERFACE diff --git a/code/src/PhoenixSketch/USBAudio.h b/code/src/PhoenixSketch/USBAudio.h new file mode 100644 index 0000000..1a16e6a --- /dev/null +++ b/code/src/PhoenixSketch/USBAudio.h @@ -0,0 +1,127 @@ +/* +Copyright (C) 2026 T41 EP Software Contributors +See Contributors.txt for list of known authors. + +This file is part of Phoenix. + +Phoenix is free software: you can redistribute it and/or modify it under the +terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later version. + +Phoenix is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with Phoenix. +If not, see . +*/ +#ifndef USBAUDIO_H +#define USBAUDIO_H + +#include +#include +#include +#include + +/** + * USB audio transport for DIGITAL mode. + * + * Carries demodulated receive audio to the host and transmit audio back from it, + * at 44.1 kHz. DIGITAL mode forces the radio to 176.4 ksps, where the receive + * chain's Fs/4 tap IS 44,100 Hz and one DSP block is exactly 512 samples, so no + * resampling happens anywhere. + * + * When AUDIO_INTERFACE is not defined (any USB type without an audio interface, + * and the host unit-test build) every function below is a no-op stub, so callers + * need no conditional compilation. + * + * @see USBAudio.cpp for how the stock Teensy USB audio blocks are paced 4:1 + * against the audio library's graph clock. + */ + +/** Number of audio samples exchanged per DSP block (4 x AUDIO_BLOCK_SAMPLES). */ +#define USB_AUDIO_BLOCK_SAMPLES 512 + +/** + * @brief Take the USB audio objects off the audio library's graph clock + * @note Must be called once from InitializeAudio(), before any mode change + * @note Until this runs, update_all() drives the USB audio objects at the I2S + * block rate - four times too fast - which churns audio blocks and makes + * AudioInputUSB ask the host for samples far faster than we can consume them + */ +void USBAudioInit(void); + +/** + * @brief Start the USB audio transport + * @note Called on entry to DIGITAL mode, and again after ChangeSampleRate() + * @note Idempotent; safe to call when already running + */ +void USBAudioBegin(void); + +/** + * @brief Stop the USB audio transport and discard any buffered audio + * @note Called on exit from DIGITAL mode, and before ChangeSampleRate() + */ +void USBAudioEnd(void); + +/** + * @brief Send demodulated receive audio to the host + * @param src Audio samples, nominally -1.0 to 1.0 + * @param n Sample count; must be USB_AUDIO_BLOCK_SAMPLES + * @note Mono; the same samples are sent on both USB channels + * @note Drops the block rather than blocking if the host is not consuming + */ +void USBAudioWriteRx(const float32_t *src, size_t n); + +/** + * @brief Fetch transmit audio from the host + * @param dst Destination for the samples, standardized to -1.0 to 1.0 + * @param n Sample count; must be USB_AUDIO_BLOCK_SAMPLES + * @return true if a full block was available, false on underrun (dst untouched) + * @note Takes the USB left channel only; digital transmit audio is mono + */ +bool USBAudioReadTx(float32_t *dst, size_t n); + +/** + * @brief Report whether the transport is currently started + * @return true between USBAudioBegin() and USBAudioEnd() + * @note Lets ChangeSampleRate() restart the transport only if it was running + */ +bool USBAudioIsRunning(void); + +/** + * @brief Report whether the host has opened the transmit (host to radio) stream + * @return true if the host has selected a non-zero alternate setting + */ +bool USBAudioHostActive(void); + +/** + * @brief Report the host's playback volume setting for the radio's audio device + * @return Volume from 0.0 to 1.0, or 1.0 when USB audio is not compiled in + * @note Provided by the Teensy core's USB audio feature-unit handling + */ +float USBAudioHostVolume(void); + +/** + * @brief Read the core's USB audio under/overrun counters + * @param underruns Set to the number of times a buffer ran dry, may be NULL + * @param overruns Set to the number of times a buffer overflowed, may be NULL + * @note Both should stay flat once streaming is established; a climbing counter + * means the 4:1 pacing is wrong or the DSP loop is not keeping up + */ +void USBAudioGetStats(uint32_t *underruns, uint32_t *overruns); + +/** + * @brief Read the transmit-path health counters, reset by USBAudioBegin() + * @param calls Number of USBAudioReadTx() calls, may be NULL + * @param underruns Times the record queue held fewer than a DSP block's worth + * @param trimmed Blocks discarded because the record queue exceeded its cap + * @param depthMin Lowest record-queue depth seen + * @param depthMax Highest record-queue depth seen + * @note Underruns and trims both splice discontinuous audio into the transmit + * stream, which shows up on the air as sidebands at the block rate + */ +void USBAudioGetTxStats(uint32_t *calls, uint32_t *underruns, uint32_t *trimmed, + uint8_t *depthMin, uint8_t *depthMax); + +#endif // USBAUDIO_H diff --git a/code/test/CAT_test.cpp b/code/test/CAT_test.cpp index e9ec8b0..7659d6f 100644 --- a/code/test/CAT_test.cpp +++ b/code/test/CAT_test.cpp @@ -41,6 +41,10 @@ char *FW_write(char* cmd); char *FW_read(char* cmd); char *SR_write(char* cmd); char *SR_read(char* cmd); +char *DG_write(char* cmd); +char *DG_read(char* cmd); +char *DR_write(char* cmd); +char *DR_read(char* cmd); char *CF_write(char* cmd); char *CF_read(char* cmd); char *EQ_write(char* cmd); @@ -893,9 +897,10 @@ TEST(CAT, MD_write_SetsLSBMode) { char command[] = "MD1;"; // LSB mode char *result = MD_write(command); - - // Verify LSB mode was set - EXPECT_EQ(bands[ED.currentBand[VFO_A]].mode, LSB); + + // The current modulation is what changes; bands[].mode is the band default + // and must be left alone (see SetModulation). + EXPECT_EQ(ED.modulation[VFO_A], LSB); // Verify interrupt was set EXPECT_EQ(GetInterrupt(), iMODE); @@ -913,7 +918,7 @@ TEST(CAT, MD_write_SetsUSBMode) { char *result = MD_write(command); // Verify USB mode was set - EXPECT_EQ(bands[ED.currentBand[VFO_B]].mode, USB); + EXPECT_EQ(ED.modulation[VFO_B], USB); // Verify interrupt was set EXPECT_EQ(GetInterrupt(), iMODE); @@ -932,7 +937,7 @@ TEST(CAT, MD_write_SetsCWModeFromSSBReceive) { char *result = MD_write(command); // Verify LSB mode was set for low band - EXPECT_EQ(bands[ED.currentBand[VFO_A]].mode, LSB); + EXPECT_EQ(ED.modulation[VFO_A], LSB); // Verify mode state machine event was dispatched // Note: We can't easily verify ModeSm_dispatch_event was called in unit test @@ -953,7 +958,7 @@ TEST(CAT, MD_write_SetsCWModeHighBandUSB) { char *result = MD_write(command); // Verify USB mode was set for high band - EXPECT_EQ(bands[ED.currentBand[VFO_A]].mode, USB); + EXPECT_EQ(ED.modulation[VFO_A], USB); // Verify interrupt was set EXPECT_EQ(GetInterrupt(), iMODE); @@ -967,13 +972,13 @@ TEST(CAT, MD_write_CWModeIgnoredWhenNotInSSBReceive) { modeSM.state_id = ModeSm_StateId_CW_RECEIVE; // Different mode ED.activeVFO = VFO_A; ED.currentBand[VFO_A] = BAND_20M; - bands[BAND_20M].mode = USB; // Set initial mode - + ED.modulation[VFO_A] = USB; // Set initial modulation + char command[] = "MD3;"; // CW mode char *result = MD_write(command); // Verify mode was NOT changed (should remain USB) - EXPECT_EQ(bands[ED.currentBand[VFO_A]].mode, USB); + EXPECT_EQ(ED.modulation[VFO_A], USB); // Should return empty string EXPECT_STREQ(result, ""); @@ -988,7 +993,7 @@ TEST(CAT, MD_write_SetsAMMode) { char *result = MD_write(command); // Verify SAM mode was set (defaults to SAM rather than AM) - EXPECT_EQ(bands[ED.currentBand[VFO_A]].mode, SAM); + EXPECT_EQ(ED.modulation[VFO_A], SAM); // Verify interrupt was set EXPECT_EQ(GetInterrupt(), iMODE); @@ -1001,13 +1006,13 @@ TEST(CAT, MD_write_InvalidModeIgnored) { // Set up test conditions ED.activeVFO = VFO_A; ED.currentBand[VFO_A] = BAND_20M; - bands[BAND_20M].mode = USB; // Set initial mode - + ED.modulation[VFO_A] = USB; // Set initial modulation + char command[] = "MD9;"; // Invalid mode char *result = MD_write(command); // Verify mode was not changed - EXPECT_EQ(bands[ED.currentBand[VFO_A]].mode, USB); + EXPECT_EQ(ED.modulation[VFO_A], USB); // Should return empty string EXPECT_STREQ(result, ""); @@ -1029,11 +1034,11 @@ TEST(CAT, MD_read_ReturnsLSBMode) { modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; // Not CW mode ED.activeVFO = VFO_A; ED.currentBand[VFO_A] = BAND_40M; - bands[BAND_40M].mode = LSB; - + ED.modulation[VFO_A] = LSB; // the modulation in use, not the band default + char command[] = "MD;"; char *result = MD_read(command); - + // Should return LSB mode (1) EXPECT_STREQ(result, "MD1;"); } @@ -1043,7 +1048,7 @@ TEST(CAT, MD_read_ReturnsUSBMode) { modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; // Not CW mode ED.activeVFO = VFO_B; ED.currentBand[VFO_B] = BAND_20M; - bands[BAND_20M].mode = USB; + ED.modulation[VFO_B] = USB; char command[] = "MD;"; char *result = MD_read(command); @@ -1057,7 +1062,7 @@ TEST(CAT, MD_read_ReturnsAMMode) { modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; // Not CW mode ED.activeVFO = VFO_A; ED.currentBand[VFO_A] = BAND_10M; - bands[BAND_10M].mode = AM; + ED.modulation[VFO_A] = AM; char command[] = "MD;"; char *result = MD_read(command); @@ -1072,7 +1077,7 @@ TEST(CAT, MD_read_ReturnsSAMMode) { modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; // Not CW mode ED.activeVFO = VFO_A; ED.currentBand[VFO_A] = BAND_15M; - bands[BAND_15M].mode = SAM; + ED.modulation[VFO_A] = SAM; char command[] = "MD;"; char *result = MD_read(command); @@ -1086,7 +1091,7 @@ TEST(CAT, MD_read_ReturnsErrorForUnknownMode) { modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; // Not CW mode ED.activeVFO = VFO_A; ED.currentBand[VFO_A] = BAND_20M; - bands[BAND_20M].mode = (ModulationType)99; // Invalid mode + ED.modulation[VFO_A] = (ModulationType)99; // Invalid modulation char command[] = "MD;"; char *result = MD_read(command); @@ -1107,7 +1112,7 @@ TEST(CAT, command_parser_RecognizesMDCommands) { char *result = command_parser(md_write); // Verify mode was set - EXPECT_EQ(bands[ED.currentBand[VFO_A]].mode, USB); + EXPECT_EQ(ED.modulation[VFO_A], USB); EXPECT_STREQ(result, ""); // Test MD read command @@ -1151,7 +1156,7 @@ TEST(CAT, IF_read_ReturnsCorrectFormatInSSBReceive) { SampleRate = SAMPLE_RATE_48K; ED.centerFreq_Hz[VFO_A] = 14200000L + SR[SampleRate].rate/4; ED.fineTuneFreq_Hz[VFO_A] = 0; - bands[BAND_20M].mode = USB; + ED.modulation[VFO_A] = USB; char command[] = "IF;"; char *result = IF_read(command); @@ -1201,7 +1206,7 @@ TEST(CAT, IF_read_ReturnsCorrectFormatInSSBTransmit) { SampleRate = SAMPLE_RATE_48K; ED.centerFreq_Hz[VFO_A] = 21200000L + SR[SampleRate].rate/4; ED.fineTuneFreq_Hz[VFO_A] = 0; - bands[BAND_15M].mode = USB; + ED.modulation[VFO_A] = USB; char command[] = "IF;"; char *result = IF_read(command); @@ -1270,23 +1275,23 @@ TEST(CAT, IF_read_HandlesAllModeTypes) { ED.freqIncrement = 1000; // Test LSB mode - bands[BAND_20M].mode = LSB; + ED.modulation[VFO_A] = LSB; char command[] = "IF;"; char *result = IF_read(command); EXPECT_EQ(result[29], '1'); // LSB = mode 1 - // Test USB mode - bands[BAND_20M].mode = USB; + // Test USB mode + ED.modulation[VFO_A] = USB; result = IF_read(command); EXPECT_EQ(result[29], '2'); // USB = mode 2 // Test AM mode - bands[BAND_20M].mode = AM; + ED.modulation[VFO_A] = AM; result = IF_read(command); EXPECT_EQ(result[29], '5'); // AM = mode 5 // Test SAM mode (should return as AM) - bands[BAND_20M].mode = SAM; + ED.modulation[VFO_A] = SAM; result = IF_read(command); EXPECT_EQ(result[29], '5'); // SAM = mode 5 (reported as AM) } @@ -1298,7 +1303,7 @@ TEST(CAT, IF_read_HandlesFrequencyIncrement) { SampleRate = SAMPLE_RATE_48K; ED.centerFreq_Hz[VFO_A] = 7100000L + SR[SampleRate].rate/4; ED.fineTuneFreq_Hz[VFO_A] = 0; - bands[BAND_40M].mode = LSB; + ED.modulation[VFO_A] = LSB; // Test IF command char command[] = "IF;"; @@ -1339,7 +1344,7 @@ TEST(CAT, command_parser_RecognizesIFCommand) { SampleRate = SAMPLE_RATE_48K; ED.centerFreq_Hz[VFO_A] = 14200000L + SR[SampleRate].rate/4; ED.fineTuneFreq_Hz[VFO_A] = 0; - bands[BAND_20M].mode = USB; + ED.modulation[VFO_A] = USB; // Test IF read command through command parser char if_read[] = "IF;"; @@ -2713,33 +2718,29 @@ TEST(CAT, FW_read_IsReachableThroughTheParser) { bands[BAND_20M].FHiCut_Hz = 3000; } -TEST(CAT, MD_write_SetsModulationNotJustBandMode) { +TEST(CAT, MD_write_SetsModulationAndLeavesTheBandDefault) { // Demodulate() switches on ED.modulation, while InitFilterMask() compares it - // against bands[].mode and mirrors the passband when they disagree. Setting - // only bands[].mode therefore inverts the receive filter. + // against bands[].mode and mirrors the passband when they disagree. So + // bands[].mode is the fixed reference, not a second copy of the current mode: + // writing it is what made MD select the band default instead of the requested + // sideband. This test previously asserted the opposite and passed, which is + // how the bug survived - it encoded the defect as the contract. ED.activeVFO = VFO_A; ED.currentBand[VFO_A] = BAND_20M; modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + ModulationType bandDefault = bands[BAND_20M].mode; - char usb[] = "MD2;"; - MD_write(usb); - EXPECT_EQ(bands[BAND_20M].mode, USB); - EXPECT_EQ(ED.modulation[VFO_A], USB); - - char lsb[] = "MD1;"; - MD_write(lsb); - EXPECT_EQ(bands[BAND_20M].mode, LSB); - EXPECT_EQ(ED.modulation[VFO_A], LSB); - - char am[] = "MD4;"; - MD_write(am); - EXPECT_EQ(bands[BAND_20M].mode, AM); - EXPECT_EQ(ED.modulation[VFO_A], AM); + const ModulationType wanted[4] = { USB, LSB, AM, SAM }; + const char *cmds[4] = { "MD2;", "MD1;", "MD4;", "MD5;" }; - char sam[] = "MD5;"; - MD_write(sam); - EXPECT_EQ(bands[BAND_20M].mode, SAM); - EXPECT_EQ(ED.modulation[VFO_A], SAM); + for (int i = 0; i < 4; i++) { + char cmd[8]; + strcpy(cmd, cmds[i]); + MD_write(cmd); + EXPECT_EQ(ED.modulation[VFO_A], wanted[i]); + EXPECT_EQ(bands[BAND_20M].mode, bandDefault) + << "the band default must survive a modulation change"; + } } TEST(CAT, MD_write_LeavesCWReceive) { @@ -2760,3 +2761,396 @@ TEST(CAT, MD_write_LeavesCWReceive) { << "MD1/MD2 must be able to bring the radio back out of CW receive"; EXPECT_EQ(ED.modulation[VFO_A], USB); } + +// ============================================================================ +// DG - digital (USB audio) mode +// +// These tests run in a build without AUDIO_INTERFACE, so DG_write always +// reports "?;": digital mode has no transport to offer. What they pin down is +// that the refusal is total - no state change, no sample-rate change - and that +// DG_read still answers honestly. The mode transitions themselves are covered +// by the ModeSm suite, which does not depend on the USB build configuration. +// ============================================================================ + +TEST(CAT, DG_read_ReportsDigitalModeOff) { + ModeSm_start(&modeSM); + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + + char cmd[] = "DG;"; + EXPECT_STREQ(DG_read(cmd), "DG0;"); + + modeSM.state_id = ModeSm_StateId_CW_RECEIVE; + EXPECT_STREQ(DG_read(cmd), "DG0;"); + + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; +} + +TEST(CAT, DG_read_ReportsDigitalModeOn) { + ModeSm_start(&modeSM); + char cmd[] = "DG;"; + + modeSM.state_id = ModeSm_StateId_DIGITAL_RECEIVE; + EXPECT_STREQ(DG_read(cmd), "DG1;"); + + modeSM.state_id = ModeSm_StateId_DIGITAL_TRANSMIT; + EXPECT_STREQ(DG_read(cmd), "DG1;") + << "digital mode is still on while transmitting"; + + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; +} + +TEST(CAT, DG_write_RejectsOutOfRange) { + ModeSm_start(&modeSM); + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + + char cmd[] = "DG2;"; + EXPECT_STREQ(DG_write(cmd), "?;"); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_SSB_RECEIVE) + << "a rejected parameter must not change the mode"; +} + +TEST(CAT, DG_ParserReachesBothForms) { + ModeSm_start(&modeSM); + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + + // The parser tests the write length first, so confirm a bare DG; still + // reaches the read handler rather than being taken as a malformed write. + char read_cmd[] = "DG;"; + EXPECT_STREQ(command_parser(read_cmd), "DG0;"); + + char write_cmd[] = "DG1;"; + char *out = command_parser(write_cmd); +#ifdef AUDIO_INTERFACE + EXPECT_STREQ(out, ""); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_RECEIVE); + char off[] = "DG0;"; + command_parser(off); +#else + EXPECT_STREQ(out, "?;") << "no USB audio interface compiled in"; + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_SSB_RECEIVE); +#endif +} + +// WSJT-X sends MD2; to force USB on startup and before every transmission. If +// that were treated as a request to leave digital mode, the mode would be +// impossible to hold. Only DG0; or the front panel MODE button may leave it. +TEST(CAT, MD_write_DoesNotLeaveDigitalMode) { + ModeSm_start(&modeSM); + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_20M; + modeSM.state_id = ModeSm_StateId_DIGITAL_RECEIVE; + + char usb[] = "MD2;"; + MD_write(usb); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_RECEIVE) + << "a modulation change must not drop the radio out of digital mode"; + EXPECT_EQ(ED.modulation[VFO_A], USB) << "but it must still take effect"; + + char lsb[] = "MD1;"; + MD_write(lsb); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_RECEIVE); + EXPECT_EQ(ED.modulation[VFO_A], LSB); + + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; +} + +// MD3; is a genuine mode change and must be honoured from digital mode +TEST(CAT, MD_write_LeavesDigitalModeForCW) { + ModeSm_start(&modeSM); + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_20M; + modeSM.state_id = ModeSm_StateId_DIGITAL_RECEIVE; + + char cw[] = "MD3;"; + MD_write(cw); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_CW_RECEIVE); + + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; +} + +TEST(CAT, MD_read_ReportsSidebandInDigitalMode) { + ModeSm_start(&modeSM); + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_20M; + ED.modulation[VFO_A] = USB; + modeSM.state_id = ModeSm_StateId_DIGITAL_RECEIVE; + + char cmd[] = "MD;"; + EXPECT_STREQ(MD_read(cmd), "MD2;") + << "hamlib must see a sane sideband, not an unknown mode, in digital mode"; + + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; +} + +// This is how WSJT-X keys the rig +TEST(CAT, TX_and_RX_write_KeyDigitalTransmit) { + ModeSm_start(&modeSM); + bands[ED.currentBand[ED.activeVFO]].band_type = HAM_BAND; + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_DIGITAL_MODE); + ASSERT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_RECEIVE); + + char tx[] = "TX;"; + TX_write(tx); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_TRANSMIT); + + char rx[] = "RX;"; + RX_write(rx); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_RECEIVE); + + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_SSB_MODE); +} + +TEST(CAT, SR_write_RefusedInDigitalMode) { + uint8_t saved = SampleRate; + ModeSm_start(&modeSM); + modeSM.state_id = ModeSm_StateId_DIGITAL_RECEIVE; + SampleRate = SAMPLE_RATE_176K; + + char cmd[] = "SR1;"; + EXPECT_STREQ(SR_write(cmd), "?;"); + EXPECT_EQ(SampleRate, SAMPLE_RATE_176K) + << "digital mode pins the rate so the USB endpoint needs no resampling"; + + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + SampleRate = saved; +} + +TEST(CAT, IF_read_ReportsReceiveInDigitalMode) { + ModeSm_start(&modeSM); + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_20M; + bands[BAND_20M].mode = USB; + char cmd[] = "IF;"; + + // Nothing but the mode state differs between these two, and both are receive + // states reporting the same sideband, so the responses must match exactly. + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + std::string ssb = IF_read(cmd); + + modeSM.state_id = ModeSm_StateId_DIGITAL_RECEIVE; + std::string digital = IF_read(cmd); + + EXPECT_EQ(digital, ssb) + << "digital receive must report RX and the same sideband as SSB receive"; + + // ...and a transmit state must differ, or the comparison above proves nothing + modeSM.state_id = ModeSm_StateId_DIGITAL_TRANSMIT; + EXPECT_NE(std::string(IF_read(cmd)), ssb) << "digital transmit must report TX"; + + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; +} + +// ============================================================================ +// Sideband selection: MD must change the sideband that is actually received +// +// The receive passband is bands[].FLoCut_Hz/FHiCut_Hz, stored in the convention +// of the band's DEFAULT modulation (negative below the carrier for an LSB-default +// band). InitFilterMask() mirrors those cutoffs whenever the CURRENT modulation +// differs from that default - which is the only thing that produces the opposite +// sideband. +// +// SetModulation() used to write bands[].mode too. That made the default agree +// with the newly requested modulation, which switched the mirroring OFF and +// handed back the band-default passband. On 40 m, "MD2;" (select USB) therefore +// tuned the radio to LSB, with the display still reading USB because it reads +// ED.modulation[]. These tests pin the boundary. +// ============================================================================ + +/** Effective receive passband, computed the same way InitFilterMask() does. */ +static void EffectivePassband(int32_t *low_Hz, int32_t *high_Hz) { + int band = ED.currentBand[ED.activeVFO]; + if (ED.modulation[ED.activeVFO] == bands[band].mode) { + *low_Hz = bands[band].FLoCut_Hz; + *high_Hz = bands[band].FHiCut_Hz; + } else { + *low_Hz = -bands[band].FHiCut_Hz; + *high_Hz = -bands[band].FLoCut_Hz; + } +} + +TEST(CAT, MD_write_DoesNotDisturbTheBandDefault) { + ModeSm_start(&modeSM); + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_40M; + ModulationType bandDefault = bands[BAND_40M].mode; + + char usb[] = "MD2;"; + MD_write(usb); + + EXPECT_EQ(bands[BAND_40M].mode, bandDefault) + << "bands[].mode is the band default and is the reference the passband " + "mirroring is measured against; writing it flips the sideband"; + EXPECT_EQ(ED.modulation[VFO_A], USB); +} + +// The bug, stated as behaviour: asking for USB on an LSB-default band must put +// the passband above the carrier. +TEST(CAT, MD_write_USBOnLSBBandGivesAnUpperSideband) { + ModeSm_start(&modeSM); + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_40M; + ASSERT_EQ(bands[BAND_40M].mode, LSB) << "40 m is an LSB-default band"; + + char usb[] = "MD2;"; + MD_write(usb); + + int32_t low_Hz, high_Hz; + EffectivePassband(&low_Hz, &high_Hz); + EXPECT_GT(high_Hz, 0) << "USB passband must lie above the carrier"; + EXPECT_GE(low_Hz, 0); +} + +TEST(CAT, MD_write_LSBOnLSBBandGivesALowerSideband) { + ModeSm_start(&modeSM); + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_40M; + + char lsb[] = "MD1;"; + MD_write(lsb); + + int32_t low_Hz, high_Hz; + EffectivePassband(&low_Hz, &high_Hz); + EXPECT_LT(low_Hz, 0) << "LSB passband must lie below the carrier"; + EXPECT_LE(high_Hz, 0); +} + +// ...and the same on a band whose default is the other way round, or the fix +// would just be moving the bug to the opposite set of bands. +TEST(CAT, MD_write_LSBOnUSBBandGivesALowerSideband) { + ModeSm_start(&modeSM); + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_4M; + ASSERT_EQ(bands[BAND_4M].mode, USB) << "4 m is a USB-default band"; + + char lsb[] = "MD1;"; + MD_write(lsb); + + int32_t low_Hz, high_Hz; + EffectivePassband(&low_Hz, &high_Hz); + EXPECT_LT(low_Hz, 0) << "LSB passband must lie below the carrier"; + EXPECT_LE(high_Hz, 0); +} + +TEST(CAT, MD_write_SelectingBothSidebandsGivesDifferentPassbands) { + ModeSm_start(&modeSM); + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_40M; + + char lsb[] = "MD1;"; + MD_write(lsb); + int32_t lsbLow, lsbHigh; + EffectivePassband(&lsbLow, &lsbHigh); + + char usb[] = "MD2;"; + MD_write(usb); + int32_t usbLow, usbHigh; + EffectivePassband(&usbLow, &usbHigh); + + // Before the fix both produced the band default, so this was the assertion + // that would have caught it. + EXPECT_NE(lsbLow, usbLow); + EXPECT_EQ(lsbLow, -usbHigh) << "the two sidebands are mirror images"; + EXPECT_EQ(lsbHigh, -usbLow); +} + +// MD_read reported bands[].mode, so it announced the band default rather than +// what the operator had actually selected - including via the front panel, which +// has always written ED.modulation[] alone. +TEST(CAT, MD_read_ReportsCurrentModulationNotBandDefault) { + ModeSm_start(&modeSM); + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_40M; + ASSERT_EQ(bands[BAND_40M].mode, LSB); + + // Exactly what the front-panel DEMODULATION button does + ED.modulation[VFO_A] = USB; + + char cmd[] = "MD;"; + EXPECT_STREQ(MD_read(cmd), "MD2;") + << "MD; must report the modulation in use, not the band default"; +} + +TEST(CAT, IF_read_ReportsCurrentModulationNotBandDefault) { + ModeSm_start(&modeSM); + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + ED.activeVFO = VFO_A; + ED.currentBand[VFO_A] = BAND_40M; + ASSERT_EQ(bands[BAND_40M].mode, LSB); + + char cmd[] = "IF;"; + + ED.modulation[VFO_A] = USB; + std::string usbReply = IF_read(cmd); + ED.modulation[VFO_A] = LSB; + std::string lsbReply = IF_read(cmd); + + EXPECT_NE(usbReply, lsbReply) + << "the IF mode digit must track the modulation in use"; +} + +// ============================================================================ +// DR - digital-mode receive level +// +// The audio the radio sends to the host is unregulated: with AGC off the AGC +// stage applies a fixed gain of 20, so a strong signal reaches full scale and +// clips. A 20 s bench capture sat at 98 % of full scale with only 0.15 dB of +// headroom. DR is the attenuation that buys that headroom back. +// ============================================================================ + +TEST(CAT, DR_write_SetsReceiveLevel) { + int32_t saved = ED.digitalRxLevel; + + char cmd[] = "DR040;"; + EXPECT_STREQ(DR_write(cmd), ""); + EXPECT_EQ(ED.digitalRxLevel, 40); + + char zero[] = "DR000;"; + EXPECT_STREQ(DR_write(zero), ""); + EXPECT_EQ(ED.digitalRxLevel, 0) << "0 is a legal level - it mutes the USB stream"; + + char full[] = "DR100;"; + EXPECT_STREQ(DR_write(full), ""); + EXPECT_EQ(ED.digitalRxLevel, 100); + + ED.digitalRxLevel = saved; +} + +TEST(CAT, DR_write_RejectsOutOfRange) { + int32_t saved = ED.digitalRxLevel; + ED.digitalRxLevel = 25; + + char cmd[] = "DR101;"; + EXPECT_STREQ(DR_write(cmd), "?;"); + EXPECT_EQ(ED.digitalRxLevel, 25) << "a rejected level must not change anything"; + + ED.digitalRxLevel = saved; +} + +TEST(CAT, DR_read_ReturnsLevelZeroPadded) { + int32_t saved = ED.digitalRxLevel; + char cmd[] = "DR;"; + + ED.digitalRxLevel = 25; + EXPECT_STREQ(DR_read(cmd), "DR025;"); + + ED.digitalRxLevel = 100; + EXPECT_STREQ(DR_read(cmd), "DR100;"); + + ED.digitalRxLevel = 0; + EXPECT_STREQ(DR_read(cmd), "DR000;"); + + ED.digitalRxLevel = saved; +} + +TEST(CAT, DR_ParserReachesBothForms) { + int32_t saved = ED.digitalRxLevel; + + char write_cmd[] = "DR030;"; + EXPECT_STREQ(command_parser(write_cmd), ""); + EXPECT_EQ(ED.digitalRxLevel, 30); + + char read_cmd[] = "DR;"; + EXPECT_STREQ(command_parser(read_cmd), "DR030;"); + + ED.digitalRxLevel = saved; +} diff --git a/code/test/CMakeLists.txt b/code/test/CMakeLists.txt index 191c077..1785c59 100644 --- a/code/test/CMakeLists.txt +++ b/code/test/CMakeLists.txt @@ -40,80 +40,80 @@ include_directories(../test) add_executable(all_RFboard_tests RFBoard_test.cpp ../src/PhoenixSketch/RFBoard.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/Storage.cpp ../src/PhoenixSketch/DSP_FFT.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/RFBoard.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp Adafruit_I2CDevice_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp ) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp Adafruit_I2CDevice_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp ) target_link_libraries(all_RFboard_tests GTest::gtest_main) add_executable(all_ModeSm_tests ModeSm_test.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/Globals.cpp ../src/PhoenixSketch/DSP_FIR.cpp arm_functions.c ../src/PhoenixSketch/Storage.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/DSP_FFT.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/RFBoard.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_ModeSm_tests GTest::gtest_main) add_executable(all_UISm_tests UISm_test.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/RFBoard.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/DSP_FFT.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/RFBoard.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp ../src/PhoenixSketch/Storage.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_UISm_tests GTest::gtest_main) add_executable(all_Loop_tests Loop_test.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/RFBoard.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/Storage.cpp ../src/PhoenixSketch/DSP_FFT.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_Loop_tests GTest::gtest_main) add_executable(all_SigProc_tests SignalProcessing_test.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/Storage.cpp ../src/PhoenixSketch/DSP_FFT.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/RFBoard.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_SigProc_tests GTest::gtest_main) add_executable(all_FilterDesign_tests FilterDesign_test.cpp reference_filters.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/Storage.cpp ../src/PhoenixSketch/DSP_FFT.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/RFBoard.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_FilterDesign_tests GTest::gtest_main) add_executable(all_NoiseReduction_tests NoiseReduction_test.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/Storage.cpp ../src/PhoenixSketch/DSP_FFT.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/RFBoard.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_NoiseReduction_tests GTest::gtest_main) add_executable(all_TransmitChain_tests TransmitChain_test.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/Storage.cpp ../src/PhoenixSketch/DSP_FFT.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/RFBoard.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_TransmitChain_tests GTest::gtest_main) add_executable(all_FrontPanel_tests FrontPanel_test.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/Storage.cpp ../src/PhoenixSketch/DSP_FFT.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/RFBoard.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_FrontPanel_tests GTest::gtest_main) add_executable(all_CAT_tests CAT_test.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/Storage.cpp ../src/PhoenixSketch/DSP_FFT.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/RFBoard.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_CAT_tests GTest::gtest_main) add_executable(all_LPFBoard_tests LPFBoard_test.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/BPFBoard.cpp RA8875_mock.cpp ../src/PhoenixSketch/DSP_FFT.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/RFBoard.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp ../src/PhoenixSketch/Storage.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_LPFBoard_tests GTest::gtest_main) add_executable(all_BPFBoard_tests BPFBoard_test.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/Storage.cpp ../src/PhoenixSketch/DSP_FFT.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/RFBoard.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_BPFBoard_tests GTest::gtest_main) add_executable(all_RFhardwareSM_tests RFHardwareSM_test.cpp ../src/PhoenixSketch/RFBoard.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/Storage.cpp ../src/PhoenixSketch/DSP_FFT.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/RFBoard.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_RFhardwareSM_tests GTest::gtest_main) add_executable(all_Micros_tests micros_test.cpp Arduino_mock.cpp) @@ -122,25 +122,25 @@ target_link_libraries(all_Micros_tests GTest::gtest_main) add_executable(all_Radio_tests Radio_test.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/RFBoard.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/Storage.cpp ../src/PhoenixSketch/DSP_FFT.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_Radio_tests GTest::gtest_main) add_executable(all_Display_tests Display_test.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/RFBoard.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/Storage.cpp ../src/PhoenixSketch/DSP_FFT.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_Display_tests GTest::gtest_main) add_executable(all_Calibration_tests Calibration_test.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/RFBoard.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/Storage.cpp ../src/PhoenixSketch/DSP_FFT.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_Calibration_tests GTest::gtest_main) add_executable(all_PowerCalibration_tests PowerCalibration_test.cpp ../src/PhoenixSketch/MainBoard_Display.cpp ../src/PhoenixSketch/MainBoard_DisplayHome.cpp ../src/PhoenixSketch/MainBoard_DisplayMenus.cpp ../src/PhoenixSketch/MainBoard_DisplayDFE.cpp ../src/PhoenixSketch/MainBoard_DisplayEqualizer.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Frequency.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_RXIQ.cpp ../src/PhoenixSketch/ReceiveIQCalSm.cpp ../src/PhoenixSketch/TransmitIQCalSm.cpp ../src/PhoenixSketch/TransmitCarrierCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_Power.cpp ../src/PhoenixSketch/PowerCalSm.cpp ../src/PhoenixSketch/MainBoard_DisplayCalibration_TXIQ.cpp ../src/PhoenixSketch/Loop.cpp ../src/PhoenixSketch/Tune.cpp ../src/PhoenixSketch/Mode.cpp ../src/PhoenixSketch/ModeSm.cpp ../src/PhoenixSketch/HardwareSm.cpp ../src/PhoenixSketch/HardwareSm_PowerCalibration.cpp ../src/PhoenixSketch/HardwareSm_ReceiveIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitIQCalibration.cpp ../src/PhoenixSketch/HardwareSm_TransmitCarrierCalibration.cpp ../src/PhoenixSketch/UISm.cpp ../src/PhoenixSketch/RFBoard.cpp ../src/PhoenixSketch/DSP.cpp ../src/PhoenixSketch/CAT.cpp ../src/PhoenixSketch/BPFBoard.cpp ../src/PhoenixSketch/Storage.cpp ../src/PhoenixSketch/DSP_FFT.cpp DSP_FFT_stub_test.cpp ../src/PhoenixSketch/Globals.cpp arm_functions.c ../src/PhoenixSketch/DSP_FIR.cpp ../src/PhoenixSketch/DSP_Noise.cpp ../src/PhoenixSketch/DSP_CWProcessing.cpp - ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) + ../src/PhoenixSketch/MainBoard_AudioIO.cpp ../src/PhoenixSketch/LPFBoard.cpp ../src/PhoenixSketch/LPFBoard_AD7991.cpp ../src/PhoenixSketch/FrontPanel.cpp ../src/PhoenixSketch/FrontPanel_Rotary.cpp ../src/PhoenixSketch/ParamSave.cpp si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp RA8875_mock.cpp LittleFS_mock.cpp ArduinoJson.cpp) target_link_libraries(all_PowerCalibration_tests GTest::gtest_main) add_executable(all_ParamSave_tests ParamSave_test.cpp ../src/PhoenixSketch/ParamSave.cpp) @@ -212,7 +212,7 @@ if(USE_SDL_DISPLAY) si5351_mock.cpp Arduino_mock.cpp Adafruit_I2CDevice_mock.cpp - OpenAudio_ArduinoLibrary_mock.cpp + OpenAudio_ArduinoLibrary_mock.cpp ../src/PhoenixSketch/USBAudio.cpp LittleFS_mock.cpp ArduinoJson.cpp RA8875_SDL.cpp diff --git a/code/test/ModeSm_test.cpp b/code/test/ModeSm_test.cpp index 00a07eb..7236b7d 100644 --- a/code/test/ModeSm_test.cpp +++ b/code/test/ModeSm_test.cpp @@ -376,3 +376,163 @@ TEST(ModeSm, ExitOffsetModeToSSBReceive){ EXPECT_EQ(modeSM.state_id, ModeSm_StateId_SSB_RECEIVE); } + +// ============================================================================ +// Digital (USB audio) mode +// +// DIGITAL_RECEIVE and DIGITAL_TRANSMIT live inside a DIGITAL_STATES composite +// whose enter/exit actions force the radio to 176.4 ksps and put the previous +// rate back. The composite matters: every way out of digital mode has to restore +// the sample rate, including the calibration events dispatched at the +// NORMAL_STATES level. +// ============================================================================ + +// Reach digital mode from SSB and get back again +TEST(ModeSm, NavigateBetweenSSBReceiveAndDigitalReceive){ + ModeSm_start(&modeSM); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_SSB_RECEIVE); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_DIGITAL_MODE); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_RECEIVE); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_SSB_MODE); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_SSB_RECEIVE); +} + +// Reach digital mode from CW and go back to CW, which is the front panel's +// SSB -> CW -> DIGITAL -> SSB cycle in both directions +TEST(ModeSm, NavigateBetweenCWReceiveAndDigitalReceive){ + ModeSm_start(&modeSM); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_CW_MODE); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_CW_RECEIVE); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_DIGITAL_MODE); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_RECEIVE); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_CW_MODE); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_CW_RECEIVE); +} + +// PTT keys digital transmit, which is how WSJT-X keys the rig over CAT +TEST(ModeSm, NavigateBetweenDigitalReceiveAndDigitalTransmitStates){ + FakeHamBandActive(); + ModeSm_start(&modeSM); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_DIGITAL_MODE); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_RECEIVE); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_PTT_PRESSED); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_TRANSMIT); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_PTT_RELEASED); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_RECEIVE); +} + +// The out-of-band interlock guards digital transmit exactly as it guards SSB +TEST(ModeSm, IgnorePTTPressedInDigitalModeWhileNonHamBandIsActive){ + FakeNonHamBandActive(); + ModeSm_start(&modeSM); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_DIGITAL_MODE); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_RECEIVE); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_PTT_PRESSED); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_RECEIVE); + FakeHamBandActive(); +} + +// Digital receive must not respond to the CW keying events +TEST(ModeSm, DigitalReceiveIgnoresKeyEvents){ + FakeHamBandActive(); + ModeSm_start(&modeSM); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_DIGITAL_MODE); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_KEY_PRESSED); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_RECEIVE); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_DIT_PRESSED); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_RECEIVE); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_DAH_PRESSED); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_RECEIVE); +} + +// A calibration event dispatched at the NORMAL_STATES level exits the composite, +// so ExitDigitalMode() runs and the sample rate is restored +TEST(ModeSm, EnterCalibrationFromDigitalReceive){ + ModeSm_start(&modeSM); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_DIGITAL_MODE); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_RECEIVE); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_CALIBRATE_FREQUENCY); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_CALIBRATE_FREQUENCY); + // Calibration always returns to SSB receive, never back into digital mode + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_CALIBRATE_EXIT); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_SSB_RECEIVE); +} + +// Entering digital mode forces 176.4 ksps; leaving puts the old rate back. This +// is the whole reason the mode exists at that rate: Fs/4 is then exactly the +// 44.1 kHz the USB audio endpoint runs at, so nothing has to be resampled. +TEST(ModeSm, DigitalModeForcesAndRestoresSampleRate){ + uint8_t saved = SampleRate; + + SampleRate = SAMPLE_RATE_192K; + ModeSm_start(&modeSM); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_DIGITAL_MODE); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_RECEIVE); + EXPECT_EQ(SampleRate, SAMPLE_RATE_176K) + << "digital mode only works where Fs/4 == 44100 Hz"; + + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_SSB_MODE); + EXPECT_EQ(SampleRate, SAMPLE_RATE_192K) << "the previous rate must come back"; + + SampleRate = saved; +} + +// Transmitting and returning must not disturb the saved rate: the composite is +// not exited on a PTT press, so EnterDigitalMode() must not run again and +// overwrite the saved rate with 176.4 ksps. +TEST(ModeSm, DigitalTransmitDoesNotClobberSavedSampleRate){ + uint8_t saved = SampleRate; + FakeHamBandActive(); + + SampleRate = SAMPLE_RATE_192K; + ModeSm_start(&modeSM); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_DIGITAL_MODE); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_PTT_PRESSED); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_DIGITAL_TRANSMIT); + EXPECT_EQ(SampleRate, SAMPLE_RATE_176K); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_PTT_RELEASED); + + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_SSB_MODE); + EXPECT_EQ(SampleRate, SAMPLE_RATE_192K) + << "a transmit round trip must not lose the pre-digital sample rate"; + + SampleRate = saved; +} + +// Entering digital mode when already at 176.4 ksps must still restore correctly +TEST(ModeSm, DigitalModeFromNativeRateRestoresSameRate){ + uint8_t saved = SampleRate; + + SampleRate = SAMPLE_RATE_176K; + ModeSm_start(&modeSM); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_DIGITAL_MODE); + EXPECT_EQ(SampleRate, SAMPLE_RATE_176K); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_SSB_MODE); + EXPECT_EQ(SampleRate, SAMPLE_RATE_176K); + + SampleRate = saved; +} + +// Regression: EnterDigitalMode() and ExitDigitalMode() are the DIGITAL_STATES +// composite's entry and exit actions, so they run while state_id is still the +// composite rather than a leaf. Both call ChangeSampleRate(), which ends in +// UpdateTuneState(). If the composite is not handled there, UpdateTuneState() +// falls through to its default branch and calls HandleTuneState() with whatever +// tune state was left over from before - reprogramming the VFO from stale state +// on every entry to and exit from digital mode. +TEST(ModeSm, DigitalModeTransitionsHandleTheCompositeState){ + uint8_t saved = SampleRate; + SampleRate = SAMPLE_RATE_192K; + ModeSm_start(&modeSM); + + Serial.lines.clear(); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_DIGITAL_MODE); + ModeSm_dispatch_event(&modeSM, ModeSm_EventId_TO_SSB_MODE); + + for (const std::string &line : Serial.lines) { + EXPECT_EQ(line.find("Unhandled modeSM.state_id"), std::string::npos) + << "unhandled state during a digital mode transition: " << line; + } + + SampleRate = saved; +} diff --git a/wiki/firmware/audio-io.md b/wiki/firmware/audio-io.md index d20522e..4bb4d56 100644 --- a/wiki/firmware/audio-io.md +++ b/wiki/firmware/audio-io.md @@ -3,10 +3,10 @@ title: Audio I/O (MainBoard_AudioIO — OpenAudio quad-I2S graph) type: module status: draft created: 2026-06-15 -updated: 2026-07-29 +updated: 2026-07-30 tags: [audio, i2s, openaudio, codec, queues, mixers, sidetone, mode-routing, sample-rate] source_refs: [sources/t41-ep-schematics] -related: ["[[overview]]", "[[hardware-platform]]", "[[dsp-chain]]", "[[mode-state-machine]]", "[[main-loop]]", "[[cw-processing]]", "[[real-time-constraints]]", "[[iq-imbalance-correction]]", "[[sample-rate-switching]]"] +related: ["[[digital-mode]]", "[[overview]]", "[[hardware-platform]]", "[[dsp-chain]]", "[[mode-state-machine]]", "[[main-loop]]", "[[cw-processing]]", "[[real-time-constraints]]", "[[iq-imbalance-correction]]", "[[sample-rate-switching]]"] --- # Audio I/O (MainBoard_AudioIO) diff --git a/wiki/firmware/cat-control.md b/wiki/firmware/cat-control.md index 8c2c7bb..1bb5f76 100644 --- a/wiki/firmware/cat-control.md +++ b/wiki/firmware/cat-control.md @@ -3,10 +3,10 @@ title: CAT Control (Kenwood emulation) type: module status: draft created: 2026-06-08 -updated: 2026-07-30 +updated: 2026-07-31 tags: [cat, kenwood, ts-480, ts-2000, serial, rig-control, usb] source_refs: [] -related: ["[[overview]]", "[[main-loop]]", "[[mode-state-machine]]", "[[tune-frequency-control]]", "[[persistent-config]]", "[[sample-rate-switching]]", "[[filter-hil-test]]", "[[audio-equalizer]]", "[[cw-processing]]", "[[tx-filter-hil-test]]"] +related: ["[[digital-mode]]", "[[overview]]", "[[main-loop]]", "[[mode-state-machine]]", "[[tune-frequency-control]]", "[[persistent-config]]", "[[sample-rate-switching]]", "[[filter-hil-test]]", "[[audio-equalizer]]", "[[cw-processing]]", "[[tx-filter-hil-test]]"] --- # CAT Control (Kenwood emulation) @@ -30,7 +30,7 @@ two share most commands so it works either way, but the docs should be reconcile ## Architecture: a command-dispatch table -The core is a static table of `valid_command` entries (`NUM_SUPPORTED_COMMANDS = 29`, +The core is a static table of `valid_command` entries (`NUM_SUPPORTED_COMMANDS = 32`, `CAT.cpp:104-136`): ```c typedef struct { @@ -50,7 +50,7 @@ bare command (e.g. `FA;`), a set carries a payload (`FA00014200000;`). Read hand > handler** — it becomes silently write-only. This is not hypothetical: it is exactly the bug > that made `FW;` unreadable for as long as `FW` has existed (see below). -## Implemented commands (29) +## Implemented commands (32) | Group | Commands | |---|---| @@ -58,6 +58,7 @@ bare command (e.g. `FA;`), a set carries a payload (`FA00014200000;`). Read hand | Mode / status | `MD` (mode), `IF` (transceiver status string), `ID` (radio id) | | Band | `BU`/`BD` (band up/down) | | Gain / audio | `AG` (AF gain), `MG` (mic gain), `PC` (power control) | +| Digital mode | `DG` (enter/leave), `DR` (receive level 000-100), `DS` (TX path counters, read-only) | | DSP | `NR` (noise reduction), `NT` (notch), `VX` (VOX) | | Keyer | `KS` (keyer speed / WPM) | | PTT | `TX` (transmit), `RX` (receive) | @@ -87,6 +88,27 @@ receive cells. [[tx-filter-hil-test]] works around it rather than adding one, be (`DSP_FFT.cpp:402-403`) — so soloing the transmit cells would re-verify tables `EQ` already exposes ([[audio-equalizer]]). +### Digital-mode commands (added 2026-07-31) + +Three non-Kenwood additions for [[digital-mode]]: + +- **`DG`** — `DG1;` enters digital mode, `DG0;` leaves, `DG;` reads. Entering forces + 176.4 ksps and starts the USB audio link; leaving restores the previous rate. Accepted only + from a receive state, and rejected outright in builds without a USB audio interface. +- **`DR`** — `DR000;`–`DR100;` set the level applied to the receive audio sent to the host, + `DR;` reads it back zero-padded. Default 25 (−12 dB). Needed because nothing else regulates + that level: with AGC off the AGC stage applies a fixed gain of 20, so a strong signal + otherwise clips. +- **`DS`** — read-only, returns `DS,,,,;` for the + transmit path. Added to diagnose transmit spurs and immediately found the record queue pinned + at 208 of its 209-block ceiling. Counters reset on entering digital mode. + +**`MD` is deliberately inert on digital mode.** WSJT-X sends `MD2;` to force USB on startup and +before every transmission, so treating a modulation change as a request to leave digital mode +would make the mode impossible to hold. Only `DG0;` or the front panel leaves it. + +**`SR` is refused while in digital mode**, because that mode pins the sample rate. + ### ⚠️ `TX` and `RX` are silent *writes* in both their forms A trap for any CAT client, not just the test suites. Almost every command distinguishes its read @@ -187,3 +209,39 @@ mode, RX/TX, etc.); `FA_read`/`MD_read`/`KS_read`/… each return one field. - Which `unsupported_cmd` stubs exist and how the radio replies to unknown commands (the `?` error response?). - Whether `AI` (auto-information) actually pushes unsolicited updates or is a no-op. + + +## Sideband selection: `bands[].mode` is a band default, not the current mode + +Fixed 2026-07-31, after `MD2;` was observed tuning a 40 m receiver to LSB. + +The receive sideband is not stored anywhere directly. It is the **sign** of +`bands[].FLoCut_Hz`/`FHiCut_Hz` - stored in the convention of the band's default +modulation, negative below the carrier for an LSB-default band - **mirrored by +`InitFilterMask()` (`DSP_FIR.cpp:1167`) iff `ED.modulation[activeVFO]` differs from +`bands[].mode`**. That mirroring is the only mechanism that produces the opposite +sideband. + +So the two fields are not two copies of the same thing: + +| field | meaning | written by | +|---|---|---| +| `ED.modulation[activeVFO]` | the **current** modulation - what `Demodulate()` switches on and the display shows | front-panel DEMODULATION button, `SetModulation()`. Persisted. | +| `bands[].mode` | the band **default** - the fixed reference the mirroring is measured against | nothing at run time. Rebuilt from the table in `Globals.cpp` each boot; not persisted. | + +`SetModulation()` used to write both. Making the default agree with the newly +requested modulation switches the mirroring *off*, so the band-default passband +comes back: on 40 m, `MD2;` (select USB) tuned the radio to LSB, while the display +- which reads `ED.modulation[]` - went on saying USB. `MD_read` and `IF_read` read +the same field and so announced the band default rather than the mode in use, +which is how the fault was initially misdiagnosed at the bench. + +`FL_read`/`FW_read`/`FW_write`/`FilterSetSSB` (`DSP_FFT.cpp:515`) and `VolumeScale` +(`DSP.cpp:225`) legitimately keep using `bands[].mode`: they manipulate the +*stored* cutoffs, which are in the band-default convention. Leave them. + +**Method note.** `CAT_test.cpp` had a test named `MD_write_SetsModulationNotJustBandMode` +asserting that `bands[].mode` was written - it encoded the defect as the contract and +passed for its whole life. It is now `MD_write_SetsModulationAndLeavesTheBandDefault`, +and the new tests assert the **effective passband** rather than field values, which is +the only formulation that could have caught this. diff --git a/wiki/firmware/digital-mode.md b/wiki/firmware/digital-mode.md new file mode 100644 index 0000000..b6aa1ee --- /dev/null +++ b/wiki/firmware/digital-mode.md @@ -0,0 +1,342 @@ +--- +title: Digital Mode (USB Audio) +type: module +status: draft +created: 2026-07-30 +updated: 2026-07-31 +tags: [digital-mode, usb-audio, ft8, wsjtx, 176k, sample-rate, mode-state-machine, cat, verified-on-hardware] +source_refs: [] +related: ["[[mode-state-machine]]", "[[sample-rate-switching]]", "[[audio-io]]", "[[dsp-chain]]", "[[cat-control]]", "[[usb-audio]]", "[[runtime-filter-design]]", "[[hardware-state-machine]]"] +--- + +# Digital Mode (USB Audio) + +A third operating mode alongside SSB and CW, for FT8/JS8/PSK31 and anything else driven +from a PC. In receive the demodulated audio is streamed to the host over USB audio (and +still to the speaker); in transmit the audio source is the host instead of the microphone. + +## The rate coincidence that makes it simple + +Teensy USB audio is a fixed **44.1 kHz** endpoint. Phoenix's DSP runs at 176.4 or 192 ksps. +At **176.4 ksps** everything lines up exactly: + +| quantity | at 176.4 ksps | at 192 ksps | +|---|---|---| +| receive audio tap after `FIR_int1` (Fs/4) | **44,100 Hz** | 48,000 Hz | +| DSP block rate (Fs / 2048) | 86.1328 Hz | 93.75 Hz | +| samples/s at that tap (512 per block) | **44,100** — exact | 48,000 | +| AudioStream graph clock (Fs / 128) | **1378.125 Hz = 4 × 344.53** | 1500 Hz | + +So the demodulated audio *is already* at 44.1 kHz, one DSP block *is already* 512 samples, +and the audio library's graph clock is *exactly* 4× the USB audio block rate. Nothing is +resampled and no Teensy core file is modified. + +**Two clocks, do not conflate them.** 176.4 ksps is the radio's ADC/DSP rate (what the SR +menu and `SR0;` select). 44.1 kHz is the demodulated *audio* rate and what the USB endpoint +declares to the PC. The second is not an independent choice — it is what Fs/4 equals at the +first. + +Because of this, **entering digital mode forces 176.4 ksps** and leaving restores the +previous rate. See [[sample-rate-switching]]. + +## State machine + +`ModeSm.drawio` gained a `DIGITAL_STATES` composite inside `NORMAL_STATES`, containing +`DIGITAL_RECEIVE` (initial) and `DIGITAL_TRANSMIT`, plus a `TO_DIGITAL_MODE` event. + +| From | Event | Guard | To | +|---|---|---|---| +| `SSB_RECEIVE` | `TO_DIGITAL_MODE` | — | `DIGITAL_STATES` | +| `CW_RECEIVE` | `TO_DIGITAL_MODE` | — | `DIGITAL_STATES` | +| `DIGITAL_RECEIVE` | `TO_SSB_MODE` | — | `SSB_RECEIVE` | +| `DIGITAL_RECEIVE` | `TO_CW_MODE` | — | `CW_RECEIVE` | +| `DIGITAL_RECEIVE` | `PTT_PRESSED` | `IsTxAllowed()` | `DIGITAL_TRANSMIT` | +| `DIGITAL_TRANSMIT` | `PTT_RELEASED` | — | `DIGITAL_RECEIVE` | + +The sample-rate switch lives on the **composite's** enter/exit actions +(`EnterDigitalMode()` / `ExitDigitalMode()` in `Mode.cpp`), not on the leaf states. That is +what makes the rate restore on *every* way out, including the calibration events dispatched +at the `NORMAL_STATES` level — no extra wiring needed. It also means a PTT round trip does +not re-run the entry action and clobber the saved rate. + +**Gotcha worth remembering.** Because those actions run as the composite's entry/exit, they +execute while `modeSM.state_id` is still `DIGITAL_STATES` — the leaf has not been entered +yet. `ChangeSampleRate()` ends in `UpdateTuneState()`, so `DIGITAL_STATES` has to appear in +the receive group of both `UpdateTuneState()` and `UpdateRFHardwareState()` +(`HardwareSm.cpp`). Without it they fall through to `default:` and call `HandleTuneState()` +with a stale tune state, reprogramming the VFO wrongly on every entry and exit. +`ModeSm.DigitalModeTransitionsHandleTheCompositeState` pins this. + +## USB transport: pacing, not reimplementation + +`USBAudio.cpp` keeps the **stock Teensy `AudioInputUSB` / `AudioOutputUSB`** — the same +classes OpenAudio's `USB_Audio_F32.h` wraps — and with them all the core descriptor, DMA, +ISR and isochronous-feedback code. No USB protocol code is written here. + +What does *not* work is putting them in the `AudioConnection` graph directly: the graph is +clocked by the I2S DMA at Fs/128, but these objects must be updated at 44100/128 = 344.53 Hz. +Overfed 4:1, `AudioOutputUSB` only holds two blocks and discards the rest, and +`AudioInputUSB`'s feedback loop is calibrated for the nominal rate. + +The fix is a 4:1 pacer, exact at 176.4 ksps: + +- `update_all()` skips any `AudioStream` whose protected `active` flag is false + (`AudioStream.cpp:445`). Trivial subclasses expose `deactivate()` to clear it. +- `USBAudioInit()`, called from `InitializeAudio()`, takes the six objects off the graph + clock. This must happen at **startup**, not at mode entry — until it does, `update_all()` + is running them 4× too fast and `AudioInputUSB` asks the host for samples faster than we + can consume them. +- `USBAudioPacer` is the only object left in `update_all()`. It runs in the audio ISR and + drives the six manually on every fourth call. +- `AudioConnection::connect()` sets `active = true` on both ends + (`AudioStream.cpp:318,321`), so `deactivate()` has to run *after* the static + `AudioConnection`s are constructed — hence a function, not constructors. + +No ring buffer is needed: `AudioPlayQueue::MAX_BUFFERS` is 80 and +`AudioRecordQueue::max_buffers` is 209 on Teensy 4, so the stock queues absorb the DSP +delivering four blocks at once every 11.6 ms. The play queues are capped at 24 blocks and +prefilled to half depth (see "Fault 1" below - 8 with no prefill left no underrun margin and +dropped audio constantly), and set `NON_STALLING` so `getBuffer()` never blocks the main +loop. The record queues have no cap of their own, so `USBAudioReadTx()` trims them. + +Two library quirks found the hard way: `AudioPlayQueue::stop()` is declared in the header +but **never defined** in Audio 1.3, and Teensy's CMSIS declares `arm_float_to_q15`'s source +pointer non-const. + +## DSP taps + +**Receive** — `InterpolateReceiveData()` in `DSP.cpp`, between the two interpolation stages, +where the block is 512 samples at exactly Fs/4. Deliberately *before* `AdjustVolume()`, so +the level sent to the PC is independent of the front-panel volume knob - which also means +nothing regulates it, hence `ED.digitalRxLevel` (see "Fault 2" below). The scaling is done +into scratch, not in place: the caller still runs the second interpolation stage over that +same buffer to feed the speaker. + +**Transmit** — `ReadUSBTransmitBuffer()` replaces `ReadMicrophoneBuffer()` + +`TXDecimateBy4()`, entering the chain one stage down at `TXDecimateBy2()` (which hardcodes +512 samples in). Everything downstream — `BandEQ`, `TXGain`, Hilbert, IQ correction, +`SidebandSelection`, `PlayIQData` — is untouched, so sideband selection, IQ calibration and +carrier nulling work exactly as they do for SSB. + +**The pacing decision that matters.** `ReadUSBTransmitBuffer()` still gates on +`Q_in_L_Ex`/`Q_in_R_Ex` availability and drains those microphone blocks, discarding the +samples. They are used purely as a clock: they fill from the I2S DMA at exactly the rate the +transmit DAC drains, so `TransmitProcessing()` stays locked to the I2S clock. Letting the +*host's* USB clock pace the DSP loop is what starved the transmit output queue in the earlier +abandoned attempt (see [[usb-audio]]). On a host underrun the function emits silence rather +than failing, so the output queue is never left unfed. + +Two persisted levels, both 0–100 and both in the Microphone menu: +`ED.digitalDriveLevel` ("USB drive", CAT: none) is the software analogue of microphone gain +on transmit; `ED.digitalRxLevel` ("USB RX level", CAT `DR`) attenuates the receive audio sent +to the host, default 25 = −12 dB. + +## Control surfaces + +- **Front panel**: the MODE button now cycles **SSB → CW → DIGITAL → SSB**. The DIGITAL leg + is compiled in only when `AUDIO_INTERFACE` is defined; without it the original SSB ↔ CW + toggle is unchanged. +- **CAT `DG`**: `DG1;` enters, `DG0;` leaves, `DG;` reads. Non-Kenwood. Rejected outright in + builds without a USB audio interface. +- **CAT `DR`**: `DR000;`–`DR100;` set the receive level, `DR;` reads it back zero-padded. +- **`MD` is deliberately inert on the mode.** WSJT-X sends `MD2;` to force USB on startup and + before every transmission; if `SetModulation()` treated that as a request to leave digital + mode the mode would be impossible to hold. Only `DG0;` or the front panel leaves it. `MD3;` + (a genuine mode change to CW) *is* honoured. +- **`MD_read` / `IF_read`** report the plain sideband (1/2) in digital mode, so hamlib sees a + sane mode rather than an unknown one. +- **`TX;` / `RX;`** key and unkey digital transmit — this is how WSJT-X keys the rig. +- **`SR`** is refused in digital mode, because the mode pins the rate. + +## Build configuration + +Digital mode requires **`usb=serialmidiaudio`** (Serial + MIDI + Audio). Teensyduino has no +stock "Dual Serial + Audio" type, so this build has only one CDC port: + +- CAT moves from `SerialUSB1` to the primary `Serial`. `CATSerial` in `SDT.h` is the alias + that hides this; `CAT.cpp` refers only to `CATSerial`. +- `Debug()` compiles to nothing when `AUDIO_INTERFACE` is defined, or its output would + corrupt the CAT stream. +- **CAT clients must be pointed at the first CDC port** in this configuration. + +`code/.vscode/arduino.json` carries the setting, and the `flash-radio` skill reads it. + +## Receive, verified on the bench (2026-07-31) + +Injected carrier at 7075 kHz, dial 7074 kHz, USB — a 1 kHz audio tone. Captured +from the ALSA device with `arecord -D hw:2,0 -f S16_LE -r 44100 -c 2`. + +**Enumeration.** `Teensy MIDI/Audio` (16c0:048a); `/proc/asound/cardN/stream0` +reports 44100 Hz S16_LE stereo on both directions, playback endpoint `ASYNC` with +sync endpoint 0x86 — the isochronous feedback path the design relies on is live. +Capture length is byte-exact (12 s = 2,116,844 B), so nothing is lost at the ALSA +layer. + +**CAT.** `DG1;`/`DG0;`/`DG;` work; `SR;` returns `SR0;` (176.4 ksps) in digital +mode; `MD;`, `FA;`, `IF;` all consistent. CAT is on `/dev/ttyACM0` — the only CDC +port in this build. + +**Results, in the order the faults were found and fixed:** + +| | first capture | + queue fix | + level fix | +|---|---|---|---| +| dropouts (20 s) | 147 runs, 903 ms, **7.55 %** | 1 run, 2.9 ms, 0.015 % | **0 runs, 0.000 %** | +| tone | 993.35 Hz (smeared) | 999.5894 Hz | 999.5676 Hz | +| peak level | −0.2 dBFS | −0.2 dBFS | **−12.3 dBFS** | +| 2nd harmonic | — | −58.8 dB | **−64.5 dB** | + +**No pitch error.** The −0.43 Hz offset on a 1 kHz tone is 0.06 ppm of the +7.075 MHz carrier, i.e. signal-generator versus radio calibration. Tone frequency +measured over the first and last 5 s of a 20 s capture differed by 0.009 Hz, below +the measurement floor. **The 4:1 pacer holds exact rate** — this is the headline +result, since a pacer divisor error would show as a 4× or 25 % frequency ratio. + +### Fault 1: play-queue underrun + +Every zero run in the first capture was an exact multiple of `AUDIO_BLOCK_SAMPLES` +(128/256/384/512), spaced about 133 ms apart. That is +`AudioOutputUSB::update()` substituting a silence block when its input queue is +empty — so an empty play queue is heard as clean digital silence, not as a glitch, +which makes it easy to misread as a dead signal. + +Cause: the queue was capped at 8 blocks and **never prefilled**, so it lived at a +depth of 0–4 blocks. The DSP inherently swings it by 4 blocks every 11.6 ms (four +blocks delivered at once, one consumed every 2.9 ms), leaving no underrun margin +at all; anything that delayed the main loop drained it. The ~133 ms spacing points +at display refreshes as the trigger. + +Fix: depth 8 → 24 blocks, prefilled to half. ~35 ms of margin each way for ~35 ms +of added latency, which is nothing to an FT8 decoder. See `USB_PLAY_QUEUE_BLOCKS`. + +### Fault 2: no headroom + +The stream sat at 98 % of full scale with ~0.15 dB of headroom. This is **not** AGC +action — `ED.agc` was already `AGCOff`, and in that mode the AGC stage +(`DSP.cpp:322`) just applies `fixed_gain = 20.0`, a compile-time constant +(`SDT.h:639`). So the USB level is `RF input × DSP chain gain × 20`, with nothing +regulating it: a stronger signal clips, a weaker one is quiet. Turning AGC *on* +would lower the level but also compress, which digital-mode decoders do not want. + +Fix: `ED.digitalRxLevel` (0–100, default 25 = −12 dB), applied in +`USBAudioWriteRx()` into scratch — not in place, because the caller still has to +run the second interpolation stage over that buffer to feed the speaker. +Adjustable from the Microphone menu ("USB RX level") and over CAT as `DR`. +Measured effect: peak −0.2 → −12.3 dBFS and 2nd harmonic −58.8 → −64.5 dB, so the +chain *was* mildly clipping. + +### Also fixed: CAT sideband selection + +Found while setting up this test and fixed as its own change — `MD2;` selected the +wrong sideband. Pre-existing, in shared SSB/CW code. See [[cat-control]]. + +## Transmit, verified on the bench (2026-07-31) + +AD2 scope probes on the exciter I/Q outputs, 5 W, tone fed into the USB sink. + +**Sideband generation is correct.** USB gives phase(Q)-phase(I) = -89.99 deg with ++41.0 dB image rejection; LSB gives +90.12 deg and -41.2 dB. The sign flips, which +is the direct refutation of the abandoned branch's failure mode - that produced +*double* sideband. Amplitude imbalance -0.16 dB, and both channels are continuous +across every DSP block (the branch's signature was one channel valid for only +~9.5 ms of each 11.6 ms block). Two-tone IMD3 -51 dB, IMD5 -69 dB. + +**Amplitude response** (constant-amplitude sweep, one key-down): peak at 800 Hz, +-3 dB at ~2243 Hz, 1.9 dB spread over 200-1200 Hz and 2.8 dB over 200-2200 Hz, +then -5.9 dB at 2600, -10.8 at 3000, -17.0 at 3200. + +This is the intended SSB passband, not a fault. It is the cascade of +`coeffs12K_8K_LPF_FIR` (decimate-by-2 into the Hilbert, -6 dB at 3500 Hz) and +`FIR_int3_12ksps_48tap_2k7` (the TX audio bandwidth filter, -6 dB at 3039.6 / +-3 dB at 2759 Hz); cascading them explains why the measured -3 dB sits below +`FIR_int3`'s own figure. It is **not** the Hilbert transform - computed from its +actual coefficient tables it is within 0.01 dB and 0.1 deg from 200 Hz up, and +running it at 11.025 kHz rather than its design 12 kHz changes nothing - and not +the equaliser, which is flat. + +*Practical consequence:* place FT8 audio in the **500-1500 Hz** region. At 2400 Hz +you are down 4 dB, at 3000 Hz more than 10 dB. + +### The record queue was exhausting the audio pool + +Transmit showed a 0.53 dB envelope modulation at **344.53 Hz**, which is exactly +44100/128 - the AUDIO_BLOCK_SAMPLES rate. Varying `aplay`'s ALSA period size over +128/256/512/1024 left it at 344.53 Hz throughout (a host-side cause would have +tracked 344/172/86/43 Hz), so the radio was making it. + +The `DS` CAT counters found the cause, and it was not the block joins I first +suspected - underruns and trims were both zero in steady state. It was +`depthMax = 208`: the transmit record queue is `begin()`-ed for the whole of +digital mode but only drained in `DIGITAL_TRANSMIT`, so while receiving it filled +to `AudioRecordQueue`'s 209-block ceiling and held **~418 of the 500 audio +blocks** between its two channels. Everything else in the graph was starved of +blocks, and the resulting glitches appeared at the rate the pacer was applying the +allocation pressure. + +Fixed by bounding the queue in the pacer rather than only in `USBAudioReadTx()`. +Measured effect: + +| | before | after | +|---|---|---| +| envelope ripple (folded) | 0.53 dB | **0.06 dB** | +| sidebands at +/-344 Hz | -27 / -29 dBc | **-74.5 / -75.1 dBc** | +| "sidebands" at +/-86 Hz | -16 / -15 dBc | -26.5 / -33.8 dBc | + +The +/-86 Hz row is carrier skirt, not a sideband - both figures were measured too close in. +See the correction below; at proper resolution the after figure is -93 dBc. + +| broadband floor | -65 dBc | **-84.6 dBc** | +| queue depth min/max | 11 / 208 | **12 / 12** | +| underruns, trims | 0, 197 | **0, 0** | + +47 dB better at the block rate and 20 dB better broadband. Worth remembering as a +general lesson: an unbounded `AudioRecordQueue` does not fail loudly, it quietly +starves every other node in the audio graph. + +### The queue fix helped receive as much as transmit + +Re-measured with the same 1 kHz carrier at the same level, before and after: + +| | before | after (60 s) | +|---|---|---| +| dropouts | 0 | 0 | +| 2nd harmonic | -64.5 dB | **-82.0 dB** | +| noise floor | -119.3 dB | **-135.4 dB** | +| L vs R | differed during settling | identical throughout | + +17.5 dB less distortion and 16 dB lower noise floor on receive, from a fix made for +transmit. Holding ~418 of the 500 audio blocks was causing allocation failures in +the receive path too - never enough to show as a dropout, but enough to raise the +floor and generate harmonics. No drift over 60 s, consistent with the 10-minute +receive measurement. + +### Correction: there are no +/-86 Hz sidebands + +An earlier version of this page reported residual sidebands at the DSP block rate +at -27 dBc. That was a resolution artifact. Those captures were 40.96 ms, giving +24.4 Hz bins, which puts +/-86 Hz only **3.5 bins** from the carrier - inside its +skirt. Repeating with 170 ms captures (5.88 Hz bins, 14.6 bins out) gives +**-93 dBc**. + +What the transmit envelope actually contained before the fix was not a modulation +at all but **discrete ringing transients** at irregular intervals, flat between +them. Impulsive events give broadband spectra, which is why the carrier was smeared +into a pedestal spanning +/-600 Hz at -40 to -60 dBc; probing that pedestal at ++/-86 Hz sampled it at an arbitrary point. Nothing was ever special about 86 Hz. +The 344.53 Hz figure *was* real - that was measured on a 683 ms capture with 1.5 Hz +bins and confirmed by the ALSA-period test. + +After the fix the transmit carrier skirt is -93 dBc at +/-86 Hz and the floor is +-95 dBc; the only spurs above -85 dBc are carrier/DC leakage and the 2nd harmonic. + +**Lesson worth keeping:** before believing a close-in spur, check how many FFT bins +away it is. Anything within ~5 bins is carrier skirt until proven otherwise. + +## Still unverified / open + +- **End-to-end FT8** through WSJT-X over hamlib. +- **Long-run clock drift on transmit.** Receive was measured over 10 minutes with + zero drift events (|drift| < ~5 ppm); transmit has not been run that long. +- **Single- vs dual-VFO.** All bench work so far is on one radio; the abandoned + branch's transmit failure was hardware-dependent (`DIRECT_COUPLED_TX`). +- `digitalDriveLevel` has a menu entry but no CAT command, so it could not be + swept during the IMD test. diff --git a/wiki/firmware/dsp-chain.md b/wiki/firmware/dsp-chain.md index 0a8cd6f..2b76194 100644 --- a/wiki/firmware/dsp-chain.md +++ b/wiki/firmware/dsp-chain.md @@ -3,10 +3,10 @@ title: DSP Chain (Audio, FFT, FIR, Noise, CW) type: module status: draft created: 2026-06-08 -updated: 2026-07-29 +updated: 2026-07-30 tags: [dsp, fft, fir, agc, noise-reduction, cw, openaudio, sample-rate] source_refs: [] -related: ["[[overview]]", "[[real-time-constraints]]", "[[mode-state-machine]]", "[[display-subsystem]]", "[[code-heritage]]", "[[audio-io]]", "[[runtime-filter-design]]", "[[sample-rate-switching]]", "[[tx-filter-hil-test]]"] +related: ["[[digital-mode]]", "[[overview]]", "[[real-time-constraints]]", "[[mode-state-machine]]", "[[display-subsystem]]", "[[code-heritage]]", "[[audio-io]]", "[[runtime-filter-design]]", "[[sample-rate-switching]]", "[[tx-filter-hil-test]]"] --- # DSP Chain (Audio, FFT, FIR, Noise, CW) diff --git a/wiki/firmware/mode-state-machine.md b/wiki/firmware/mode-state-machine.md index 8bb2cb8..31135a8 100644 --- a/wiki/firmware/mode-state-machine.md +++ b/wiki/firmware/mode-state-machine.md @@ -3,10 +3,10 @@ title: Mode State Machine (ModeSm) type: module status: draft created: 2026-06-08 -updated: 2026-07-29 +updated: 2026-07-30 tags: [state-machine, ssb, cw, transmit, keyer, iambic, calibration, statesmith] source_refs: [] -related: ["[[overview]]", "[[state-machine-architecture]]", "[[tune-frequency-control]]", "[[main-loop]]", "[[hardware-state-machine]]", "[[ssb-phasing-method]]", "[[rf-board]]", "[[audio-io]]", "[[cat-control]]"] +related: ["[[digital-mode]]", "[[overview]]", "[[state-machine-architecture]]", "[[tune-frequency-control]]", "[[main-loop]]", "[[hardware-state-machine]]", "[[ssb-phasing-method]]", "[[rf-board]]", "[[audio-io]]", "[[cat-control]]"] --- # Mode State Machine (ModeSm) diff --git a/wiki/firmware/sample-rate-switching.md b/wiki/firmware/sample-rate-switching.md index 728d1df..4f6f22d 100644 --- a/wiki/firmware/sample-rate-switching.md +++ b/wiki/firmware/sample-rate-switching.md @@ -3,10 +3,10 @@ title: Runtime Sample-Rate Switching (192 / 176.4 ksps) type: decision status: draft created: 2026-07-29 -updated: 2026-07-29 +updated: 2026-07-30 tags: [sample-rate, dsp, i2s, menu, cat, persistent-config, 176k, 192k] source_refs: [] -related: ["[[runtime-filter-design]]", "[[multirate-decimation]]", "[[audio-io]]", "[[persistent-config]]", "[[tune-frequency-control]]", "[[cat-control]]", "[[ui-state-machine]]", "[[display-subsystem]]", "[[zoom-fft]]", "[[theory-overview]]"] +related: ["[[digital-mode]]", "[[runtime-filter-design]]", "[[multirate-decimation]]", "[[audio-io]]", "[[persistent-config]]", "[[tune-frequency-control]]", "[[cat-control]]", "[[ui-state-machine]]", "[[display-subsystem]]", "[[zoom-fft]]", "[[theory-overview]]"] --- # Runtime Sample-Rate Switching (192 / 176.4 ksps) diff --git a/wiki/index.md b/wiki/index.md index e3f1194..c9e6aee 100644 --- a/wiki/index.md +++ b/wiki/index.md @@ -7,7 +7,7 @@ updated: 2026-07-29 --- - + # Phoenix Wiki — Index @@ -36,6 +36,7 @@ _Modules, architecture, state machines, DSP chains, design decisions, code herit **State machines** - [[mode-state-machine]] — ModeSm: SSB/CW × RX/TX, iambic keyer, calibration entry (generated). *(draft)* +- [[digital-mode]] — DIGITAL (USB audio) mode for FT8/WSJT-X: DIGITAL_STATES composite, forced 176.4 ksps, 4:1 USB pacer. RX and TX verified on the bench. *(draft)* - [[ui-state-machine]] — UISm: splash→home→menu stack + tool screens (DFE/EQ/BIT/cal) (generated). *(draft)* - [[tune-frequency-control]] — Tune.cpp: frequency math (Fs/4 shift, fine tune, CW offset) + PA power-cal math. Not a state machine. *(draft)* - [[hardware-state-machine]] — HardwareSm (hand-written) maps mode→RF/tune hardware; drives 4 cal sub-machines. *(draft)* @@ -96,7 +97,7 @@ _Plans for future development, proposals, open questions._ - [[development-backlog]] — software-dev tasks mirroring the open GitHub issues (index). - [[transmit-spectrum]] (#10) — see the TX spectrum; largely built, needs verify. - [[manual-notch]] (#11) — 3-way notch (off/auto/manual); manual mode is new work. - - [[usb-audio]] (#13) — bi-directional USB audio; in active debugging. + - [[usb-audio]] (#13) — bi-directional USB audio; **implemented and bench-verified** as [[digital-mode]]. *(superseded)* - [[openaudio-library]] (#14) — change OpenAudio for audio quality; foundational. ## Sources diff --git a/wiki/log.md b/wiki/log.md index 8c7f16b..59b192a 100644 --- a/wiki/log.md +++ b/wiki/log.md @@ -934,3 +934,138 @@ through `command_parser()`; they were confirmed failing before the fix. 745/745 Updated [[cat-control]]. **Open:** the rest of the command table has never been audited against the spec, and `TX`/`RX` were wrong, so others may be. Noted on the page. + +## [2026-07-30] feature | DIGITAL (USB audio) mode + +Added a third operating mode alongside SSB and CW, for digital modes over USB audio. Closes the +scoping on [[usb-audio]] (#13); design and code map written up in [[digital-mode]]. + +**The load-bearing insight.** Teensy USB audio is a fixed 44.1 kHz endpoint, and at 176.4 ksps +three things line up exactly: the receive chain's Fs/4 tap *is* 44,100 Hz; one DSP block there +*is* 512 samples (86.1328 blocks/s × 512 = 44,100/s); and the AudioStream graph clock (Fs/128 = +1378.125 Hz) is exactly 4× the USB audio block rate. So the mode forces 176.4 ksps and needs no +resampler and no modified Teensy core file. The rate switch lives on the enter/exit actions of a +`DIGITAL_STATES` composite, which is what makes it restore on every exit path including +calibration. + +**Reused rather than rebuilt.** The stock `AudioInputUSB`/`AudioOutputUSB` (what OpenAudio's +`USB_Audio_F32.h` wraps) are kept, with all the core descriptor/DMA/ISR/feedback code. They +cannot go in the AudioConnection graph — it is clocked by I2S, 4× too fast — so they are taken +off `update_all()` via the protected `AudioStream::active` flag and driven by a 4:1 pacer. +~120 lines of adapter instead of a reimplemented transport. + +**Two corrections recorded.** +1. `code/docs/USB_Audio_TX_Diagnostic_Plan.md:152-158` claims a 0.27 %/s structural sample + deficit at 192 ksps. It is an arithmetic error — 94 blocks/s used where the true rate is + 93.75, and 93.75 × 512 = 48,000 exactly. Noted on [[usb-audio]] so it is not chased again. +2. [[usb-audio]]'s "possible shortcut" reasoned from the Fs/8 audio rate (22.05 kHz, 1:2 to + 44.1). Right instinct, wrong tap point: Fs/4 needs no ratio at all. + +**Bug the new tests caught.** Because `EnterDigitalMode()`/`ExitDigitalMode()` are the +*composite's* actions, they run while `state_id` is still `DIGITAL_STATES` — before the leaf is +entered. `ChangeSampleRate()` ends in `UpdateTuneState()`, which fell through to `default:` and +reprogrammed the VFO from a stale tune state on every entry and exit. Fixed by handling the +composite in `UpdateTuneState()` and `UpdateRFHardwareState()`; pinned by +`ModeSm.DigitalModeTransitionsHandleTheCompositeState`, which asserts against the mock Serial's +captured lines. + +**Build change with a user-visible consequence:** `usb=serialmidiaudio` has only one CDC port, +so CAT moves to the primary `Serial` (new `CATSerial` alias in `SDT.h`) and `Debug()` compiles +out. CAT clients must be repointed. `MD` is deliberately inert on the mode — WSJT-X sends `MD2;` +constantly and would otherwise knock the radio out of digital mode. + +765/765 unit tests pass (745 before, 20 new); both `usb=serialmidiaudio` and `usb=serial2` +firmware builds compile. **Nothing is verified on hardware yet** — see the open items on +[[digital-mode]]. + +## [2026-07-31] bench | Digital mode verified on hardware; two USB-audio faults and a CAT sideband bug fixed + +First hardware run of [[digital-mode]]. Enumerates as `Teensy MIDI/Audio` at 44100 Hz both +directions with the async feedback endpoint live. Injected 7075 kHz carrier, dial 7074 kHz. + +**Headline result: no pitch error.** Tone measured 999.57 Hz; the −0.43 Hz offset is 0.06 ppm +of the carrier, i.e. generator-vs-radio calibration. First and last 5 s of a 20 s capture +differ by 0.009 Hz, below the measurement floor. The 4:1 pacer holds exact rate — a divisor +error would have shown as a 4× or 25 % ratio. + +**Fault 1 — play-queue underrun.** 147 dropouts / 903 ms in 12 s (7.55 %). Every zero run was +an exact multiple of AUDIO_BLOCK_SAMPLES, spaced ~133 ms: `AudioOutputUSB::update()` +substitutes a *silence block* when its input queue is empty, so an empty queue reads as clean +digital silence rather than a glitch. The queue was capped at 8 blocks and never prefilled, so +it lived at depth 0–4 while the DSP inherently swings it by 4 blocks every 11.6 ms — no +underrun margin at all. Display refreshes are the likely trigger. Now 24 blocks prefilled to +half: **0 dropouts in 20 s**. + +**Fault 2 — no headroom.** Stream sat at 98 % FS. This is *not* AGC: `ED.agc` was already +`AGCOff`, and that path applies `fixed_gain = 20.0`, a compile-time constant, so the USB level +is RF input × chain gain × 20 with nothing regulating it. Added `ED.digitalRxLevel` (default +25 = −12 dB, Microphone menu + CAT `DR`), scaled into scratch because the caller still needs +that buffer for the speaker. Peak −0.2 → −12.3 dBFS and 2nd harmonic −58.8 → −64.5 dB, so it +*was* mildly clipping. + +**Pre-existing bug found and fixed: CAT sideband selection.** `MD2;` on 40 m tuned the radio to +LSB. `SetModulation()` wrote `bands[].mode`, which is the band *default* and the reference the +passband mirroring is measured against; making it agree with the request switches the mirroring +off. `MD_read`/`IF_read` read the same field and misreported the mode in use. Details and the +corrected model on [[cat-control]]. Shared SSB/CW code, unrelated to digital mode. + +**Method notes.** (1) A test asserting `bands[].mode` after a mode change was asserting the +bug, and passed for its whole life; the replacement asserts the effective passband. (2) I +diagnosed the sideband from a single `MD;` read and then *wrote* `MD2;` to "fix" it, which +broke a working bench setup mid-test — the read was itself the buggy one. Capturing 2 s of +audio would have answered the question directly and without side effects. + +776/776 unit tests pass. Transmit, end-to-end FT8, and long-run clock drift remain unverified — +see the open list on [[digital-mode]]. + +## [2026-07-31] bench | Transmit verified; record queue was starving the audio pool + +Transmit works: sideband sense flips correctly (USB -89.99 deg / +41.0 dB image, LSB ++90.12 deg / -41.2 dB), imbalance -0.16 dB, IMD3 -51 dB, stable over a 12 s key-down. + +**Amplitude response** answered the "why do two tones differ" question: a real SSB passband, +peak 800 Hz, -3 dB at 2243 Hz, 2.8 dB spread over 200-2200 Hz. It is the cascade of the TX +decimate-by-2 and TX audio bandwidth filters, both by design. Not the Hilbert transform - +computed from its coefficient tables it is flat to 0.01 dB above 200 Hz. + +**The real find:** a 344.53 Hz (= 44100/128) envelope modulation, proven radio-side by varying +the host ALSA period size and watching it not move. New `DS` CAT counters showed underruns and +trims were zero but `depthMax = 208` - the transmit record queue is begun for all of digital +mode yet only drained while transmitting, so it sat at AudioRecordQueue's 209-block ceiling and +held ~418 of the 500 audio blocks. Bounding it in the pacer took +/-344 Hz sidebands from +-27 dBc to -74.5 dBc, the broadband floor from -65 to -84.6 dBc, and envelope ripple from +0.53 dB to 0.06 dB. + +**Method notes.** Two of my own measurements were wrong before they were right. (1) The first +frequency sweep evaluated the DTFT at the *assumed* tone frequency; as the frequency estimate +drifted it walked out of the Hann mainlobe and read as deep notches, inventing a 17 dB ragged +response. Re-analysing identical raw data both ways reproduced the artifact exactly. Save raw +traces. (2) From the same artifact I claimed a 0.6 % transmit pitch shift; zero-crossing +analysis gives 2000.27 Hz for 2000 Hz in, and the I2S clock computes to exactly 176400.0000 Hz, +so there is none. (3) An early "29 ms" dip period was 2.9 ms aliased by a 1 ms-per-character +ASCII plot. + +776/776 unit tests pass. Open: residual +/-86 Hz sidebands at -27 dBc, end-to-end FT8, transmit +long-run drift, and the single-VFO radio. + +## [2026-07-31] bench | The +/-86 Hz sidebands were a resolution artifact; queue fix also improved receive + +Chased the residual +/-86 Hz transmit sidebands reported in the previous entry. They do not +exist. Those captures were 40.96 ms -> 24.4 Hz bins, putting +/-86 Hz only 3.5 bins from the +carrier, i.e. inside its skirt. At 170 ms (5.88 Hz bins, 14.6 bins out) the same measurement +reads -93 dBc rather than -27. + +Plotting the raw envelope showed what was really there before the record-queue fix: discrete +ringing transients at irregular intervals, flat between them - not a modulation. Impulsive +events smear the carrier into a broadband pedestal (+/-600 Hz at -40 to -60 dBc), and probing +that pedestal at +/-86 Hz just sampled it somewhere. The 344.53 Hz result from the previous +entry stands - that was 683 ms / 1.5 Hz bins and independently confirmed by varying the ALSA +period size. + +Also re-ran the receive comparison once the signal generator was back on. The record-queue fix, +made for transmit, improved receive by **17.5 dB in 2nd harmonic (-64.5 -> -82.0 dB) and 16 dB +in noise floor (-119.3 -> -135.4 dB)**, with 0 dropouts in 60 s and L/R bit-identical. Starving +the audio pool was degrading both directions. + +**Method note:** before believing a close-in spur, count the FFT bins. Anything within ~5 bins +of the carrier is skirt until proven otherwise. I asserted a spur at 3.5 bins twice. diff --git a/wiki/roadmap/usb-audio.md b/wiki/roadmap/usb-audio.md index e88ac3e..feabde8 100644 --- a/wiki/roadmap/usb-audio.md +++ b/wiki/roadmap/usb-audio.md @@ -1,12 +1,12 @@ --- title: "Dev: Bi-directional USB Audio (#13)" type: roadmap -status: draft +status: superseded created: 2026-06-09 -updated: 2026-07-29 -tags: [development, feature, usb, audio, digital-modes, openaudio, sample-rate] +updated: 2026-07-30 +tags: [development, feature, usb, audio, digital-modes, openaudio, sample-rate, implemented] source_refs: [] -related: ["[[development-backlog]]", "[[dsp-chain]]", "[[openaudio-library]]", "[[cat-control]]", "[[sample-rate-switching]]"] +related: ["[[digital-mode]]", "[[development-backlog]]", "[[dsp-chain]]", "[[openaudio-library]]", "[[cat-control]]", "[[sample-rate-switching]]"] --- # Dev: Bi-directional USB Audio (#13) @@ -21,7 +21,51 @@ request: bi-directional USB audio"* Scoping note — not a solution design. -## Current state — in active debugging, not yet a feature +## Status: implemented as [[digital-mode]] (2026-07-30) + +**This scoping page is superseded.** The feature landed as a third operating mode alongside +SSB and CW, and both directions have since been verified on the bench. See **[[digital-mode]]** +for the design, the code map, the measurements and what remains open. + +Answers to the questions this page raised: + +- **USB device composition** — `usb=serialmidiaudio`. Teensyduino has no stock "Dual Serial + + Audio" type, so CAT moves from `SerialUSB1` to the primary `Serial` (via the new `CATSerial` + alias) and `Debug()` compiles out. The composite-descriptor difficulty this page anticipated + was real, and was sidestepped rather than solved. +- **Sample rate / format** — the stock **44.1 kHz** endpoint, unmodified. No Teensy core file + is shadowed. +- **Resampling** — *none*, and none has to be rebuilt on a rate change. Digital mode forces + 176.4 ksps, where the rates line up exactly. + +### Correction to the "possible shortcut" below + +The instinct was right but the tap point was wrong. This page reasoned from the **Fs/8** RX +*audio* rate (22.05 kHz at 176.4 ksps, an exact 1:2 to 44.1 kHz). The implementation instead +taps one stage earlier, at **Fs/4** in `InterpolateReceiveData()` — and Fs/4 at 176.4 ksps +**is 44,100 Hz exactly**. So there is no ratio at all, not even 1:2. One DSP block is exactly +512 samples there, and 86.1328 blocks/s × 512 = 44,100 samples/s exactly. + +A second coincidence at the same rate does the rest: the AudioStream graph clock (Fs/128 = +1378.125 Hz) is exactly 4× the USB audio block rate (344.53 Hz), which is what lets the stock +`AudioInputUSB`/`AudioOutputUSB` objects be reused behind a simple 4:1 pacer. + +Whether 176.4 ksps was *originally* added for this reason remains unrecorded — but it is now +load-bearing for digital mode either way. + +### Correction to an in-tree debug doc + +`code/docs/USB_Audio_TX_Diagnostic_Plan.md:152-158` claims a 0.27 %/s "structural deficit" +between the DSP and USB sample budgets at 192 ksps. **That is an arithmetic error**: it uses +94 blocks/s where the true rate is 192000/2048 = 93.75, and 93.75 × 512 = 48,000 exactly. The +budget balanced all along, so that deficit explains none of the symptoms recorded on the +abandoned `usb_audio` branch. Do not chase it. + +## Historical scoping notes (pre-implementation) + +Kept for context on how the problem was framed before it was solved. + +### Current state (as of 2026-06-09) — in active debugging, not yet a feature - The audio codec interface is `MainBoard_AudioIO` ([[dsp-chain]]); a grep finds **no USB-audio endpoints** (`AudioInputUSB`/`AudioOutputUSB`) wired in there yet. From 9baf83dc957b0adf51f8657b3e71eea2ee9e3579 Mon Sep 17 00:00:00 2001 From: Oliver King Date: Fri, 31 Jul 2026 16:46:06 -0400 Subject: [PATCH 19/25] Add the transmit and receive bench tests, and ignore their captures transmit_test.py existed only on the unmerged transmit_audio_purity branch, so the transmit-test skill that has been tracked all along invoked a file no clone contained. It comes back at the path the skill already documents. receive_chain_test.py and the receive-test and transmit-filter-test skills were untracked working-tree files alongside the tools they drive. code/test/transmit/ holds ~313 MB of bench captures, and the tool writes more of them into whatever directory it runs from, so that directory is ignored except for the script itself. Same for code/tools/venv/, ArduinoOutput_DMA/ and the stray txiq_log*.txt files: large, machine-local, regenerable. Both new tools are documented in code/tools/README.md, transmit_test.py with a note that it is the one bench tool living outside that directory. Co-Authored-By: Claude Opus 5 --- .claude/skills/receive-test/SKILL.md | 91 +++ .claude/skills/transmit-filter-test/SKILL.md | 137 +++++ .gitignore | 7 + code/docs/DrawDisplay_Timing_Baseline.md | 314 ---------- code/docs/DrawDisplay_baseline_capture.json | 1 - code/docs/DrawDisplay_baseline_flag1.png | Bin 74532 -> 0 bytes code/docs/DrawDisplay_baseline_flag2.png | Bin 70352 -> 0 bytes code/docs/DrawDisplay_baseline_flag3.png | Bin 77997 -> 0 bytes code/docs/DrawDisplay_baseline_timeline.png | Bin 30415 -> 0 bytes code/docs/DrawDisplay_phase1_capture.json | 1 - code/docs/DrawDisplay_phase1_flag1.png | Bin 75205 -> 0 bytes code/docs/DrawDisplay_phase1_flag2.png | Bin 71350 -> 0 bytes code/docs/DrawDisplay_phase1_flag3.png | Bin 73211 -> 0 bytes code/docs/DrawDisplay_phase1_timeline.png | Bin 30461 -> 0 bytes .../docs/Filter_Rate_Independence_HIL_Test.md | 238 -------- code/docs/RX_DSP_Chain_Parameters.md | 116 ---- code/docs/Sample_Rate_Independence_Plan.md | 146 ----- code/src/PhoenixSketch/BuildInfo.h | 4 +- code/test/transmit/transmit_test.py | 540 +++++++++++++++++ code/tools/README.md | 51 +- code/tools/receive_chain_test.py | 553 ++++++++++++++++++ 21 files changed, 1380 insertions(+), 819 deletions(-) create mode 100644 .claude/skills/receive-test/SKILL.md create mode 100644 .claude/skills/transmit-filter-test/SKILL.md delete mode 100644 code/docs/DrawDisplay_Timing_Baseline.md delete mode 100644 code/docs/DrawDisplay_baseline_capture.json delete mode 100644 code/docs/DrawDisplay_baseline_flag1.png delete mode 100644 code/docs/DrawDisplay_baseline_flag2.png delete mode 100644 code/docs/DrawDisplay_baseline_flag3.png delete mode 100644 code/docs/DrawDisplay_baseline_timeline.png delete mode 100644 code/docs/DrawDisplay_phase1_capture.json delete mode 100644 code/docs/DrawDisplay_phase1_flag1.png delete mode 100644 code/docs/DrawDisplay_phase1_flag2.png delete mode 100644 code/docs/DrawDisplay_phase1_flag3.png delete mode 100644 code/docs/DrawDisplay_phase1_timeline.png delete mode 100644 code/docs/Filter_Rate_Independence_HIL_Test.md delete mode 100644 code/docs/RX_DSP_Chain_Parameters.md delete mode 100644 code/docs/Sample_Rate_Independence_Plan.md create mode 100644 code/test/transmit/transmit_test.py create mode 100755 code/tools/receive_chain_test.py diff --git a/.claude/skills/receive-test/SKILL.md b/.claude/skills/receive-test/SKILL.md new file mode 100644 index 0000000..dda239f --- /dev/null +++ b/.claude/skills/receive-test/SKILL.md @@ -0,0 +1,91 @@ +--- +name: receive-test +description: Run the receive-chain integrity test on the SDR. Samples the SDR's demodulated audio output on an Analog Discovery 2 and verifies it is a clean 1 kHz tone at ~234 mV RMS with no interruptions or discontinuities. An external signal generator must already be driving the SDR's RF input. Use when the user asks to test the receiver, verify the receive chain, check audio output, or run a receive-chain test. +when_to_use: "test receiver", "test receive chain", "check audio output", "verify demodulation", "receive chain test", "RX test" +argument-hint: "[--duration SECONDS] [--expected-tone HZ] [--expected-rms VOLTS] [...other thresholds]" +allowed-tools: Bash(python3 *receive_chain_test.py*) Bash(*venv/bin/python *receive_chain_test.py*) Bash(ls /dev/ttyACM*) Read +user-invocable: true +--- + +# Receive Chain Integrity Test + +Run `receive_chain_test.py` to verify the SDR receive chain is demodulating an externally-supplied RF input into a clean audio tone at the expected frequency and amplitude. + +## Hardware setup + +- **External signal generator** drives the SDR's RF / ADC input. The script does NOT generate this signal — the user is responsible for the generator settings. +- **Analog Discovery 2** must be connected via USB. +- **AD2 Scope Ch 1** <- SDR **audio output**. + +With the generator and SDR tuned correctly, the audio output should be a 1 kHz sine wave at roughly 234 mV RMS. + +If the AD2 is not plugged in the script will exit with code 2. + +## Running the test + +```bash +/home/oliver/Sync/Ham/T41/Software/Phoenix/code/tools/venv/bin/python \ + /home/oliver/Sync/Ham/T41/Software/Phoenix/code/tools/receive_chain_test.py \ + --duration 0.200 \ + --min-snr 25 --max-env-cv 0.05 +``` + +The capture must be at least 100 ms (`--duration 0.1`); default is 200 ms. Increase to `--duration 1.0` if you want a more confident dropout / discontinuity check. + +`--min-snr 25 --max-env-cv 0.05` are tuned to the known-good baseline of this receive chain when driven by the external signal generator (typical ~36 dB SNR, ~0.01 envelope CV). They give some headroom over the baseline so genuine regressions trip the check. + +### Exit codes + +| Code | Meaning | +|------|---------| +| 0 | PASS — all checks passed | +| 1 | FAIL — one or more checks failed (signal present but not clean) | +| 2 | ERROR — AD2 unreachable, libdwf failure, or invalid arguments | + +### What gets checked + +| Check | Default threshold | What it catches | +|-------|------------------|-----------------| +| `frequency` | within ±20 Hz of 1 kHz | wrong IF / wrong tuning, miscoded NCO | +| `amplitude_rms` | within ±25% of 234 mV | gain stage broken / saturated, generator level wrong | +| `snr` | tone vs everything else ≥ 25 dB (skill default; script default 30 dB) | noisy / distorted demodulation | +| `envelope_stability` | analytic-signal envelope CV ≤ 0.05 (skill default; script default 0.10) | amplitude wobble, AM artifacts | +| `window_dropout` | min 10 ms-window RMS / median ≥ 0.70 | intermittent dropouts / muted spans | +| `sample_jump` | max Δsample ≤ 3× theoretical for measured peak | step glitches, missing chunks | + +The frequency and amplitude tolerances cover the headline "correct frequency / correct amplitude" requirement. The other three are the "no interruptions or discontinuities" checks. + +### Output + +- Prints a per-check `[OK ]` / `[BAD]` summary plus the headline numbers. +- Writes a PNG plot (time-domain trace + FFT magnitude) to `code/tools/receive_chain_.png` by default; override with `--plot path.png`. +- Add `--json` to also emit a single-line JSON document with the full analysis on stdout, after the human summary. + +## Tuning thresholds + +The skill's recommended `--min-snr 25 --max-env-cv 0.05` sit a comfortable margin above the known-good baseline (~36 dB SNR, ~0.01 CV with the external generator) so they trip on real regressions, not noise. Loosen only if the user reports that the generator level or wiring has changed: + +- `--min-snr 15` — if the generator output has been reduced or there's added cabling loss +- `--max-env-cv 0.10` — if a small amount of amplitude wobble is acceptable +- `--rms-tol 0.30` — to widen the ±25% amplitude tolerance to ±30% + +Don't change `--freq-tol` unless the test setup is using a non-standard tuning offset — a wrong dominant frequency is almost always a real bug. + +## Interpreting failures + +| Failed check(s) | Most likely cause | +|-----------------|-------------------| +| `frequency` only | NCO / tuning offset wrong, or the external generator frequency changed | +| `amplitude_rms` near zero | audio path muted, gain stage dead, wrong scope range, or generator off | +| `amplitude_rms` clipped at the scope range | bump `--scope-range 5.0` and retry | +| `snr` low, `frequency` OK | broadband noise in the audio path — open the PNG and look at the FFT | +| `envelope_stability` or `window_dropout` | intermittent demodulation — check buffer underruns / DMA timing | +| `sample_jump` only | individual glitches, e.g. one chunk lost in the audio buffer | + +When the test fails, view the PNG with `Read` — the time-domain trace tells you whether you have a clean tone with noise versus an interrupted / glitched waveform, and the FFT shows whether the energy is concentrated at 1 kHz or spread out. + +Do not edit `receive_chain_test.py` in response to failures — the failures indicate a problem with the radio's receive chain, not a bug in the test program. + +## Reporting + +End with one line per check (PASS/FAIL + headline number) and an overall verdict. Mention the PNG path so the user can inspect the trace. If any check failed, briefly point at the most likely cause from the table above. diff --git a/.claude/skills/transmit-filter-test/SKILL.md b/.claude/skills/transmit-filter-test/SKILL.md new file mode 100644 index 0000000..e82d339 --- /dev/null +++ b/.claude/skills/transmit-filter-test/SKILL.md @@ -0,0 +1,137 @@ +--- +name: transmit-filter-test +description: Verify on real hardware that the transmit DSP filters hold their frequencies when the sample rate changes. Drives the radio's microphone input with an Analog Discovery 2's W1, captures the exciter I/Q outputs together on Ch1/Ch2, and measures the transmit audio passband corners, opposite-sideband suppression, out-of-band rejection and fold-back at both 192 and 176.4 ksps. Use when the user asks to test the transmit filters on hardware, check the transmit audio bandwidth, verify transmit sample-rate independence, or measure sideband suppression. +when_to_use: "test the transmit filters on hardware", "check the transmit bandwidth", "verify transmit sample rate independence", "TX filter HIL test", "measure sideband suppression", "does the transmit audio bandwidth move when the sample rate changes", "run the transmit filter sweep" +argument-hint: "[--rates 192000,176400] [--tests wiring,level,passband,sideband,alias,carrier] [--modulation usb|lsb] [--mic-gain 20] [...]" +allowed-tools: Bash(*venv/bin/python *tx_filter_hil_test.py*) Bash(*venv/bin/python *plot_tx_filter_hil.py*) Bash(*venv/bin/python *test_tx_filter_hil.py*) Bash(ls /dev/ttyACM*) Read +user-invocable: true +--- + +# Transmit filter rate-independence test, hardware in the loop + +Runs `code/tools/tx_filter_hil/tx_filter_hil_test.py` to measure where the +transmit DSP filters actually sit on the real radio, at every sample rate, and +confirm they do not move. + +The receive-side equivalent is `/filter-hil-test`. Do not confuse the two: they +need different wiring and measure different filters. + +## Hardware setup + +The rig must already be wired: + +- **W1** drives the radio's microphone input (Teensy audio hat MIC). +- **Scope Ch1 and Ch2** read the exciter's I and Q outputs. Either order is fine — + the suite detects which is which and compensates in software. +- **AD2 ground** is shared with the radio. +- CAT on `/dev/ttyACM1` (38400), diagnostics on `/dev/ttyACM0` (115200). + +No PTT wiring is needed; the radio is keyed over CAT with `TX;`. + +If the AD2 or the serial ports are missing the suite exits 2. Report that and +stop — do not retry. + +## Preconditions + +- **The radio transmits continuously for the whole run**, several minutes per + sample rate at 100 % duty. Before starting, confirm with the user that the + exciter I/Q feeds the scope only, or that a dummy load is fitted. Say the + key-down time back to them from the report. +- **The radio must be in SSB.** `TX;` only keys from SSB or CW receive, and a CW + key-down transmits a sidetone carrier rather than processed microphone audio. + The suite forces USB and restores the original modulation. +- **The power setting must not change during the run.** `TXGain` derives the + exciter drive from it. The suite reads and reports it and does not touch it. +- The user must not touch the front panel during the run — that triggers a + settings save and would persist the test configuration. + +AGC is a receive control and does not matter here, unlike `/filter-hil-test`. + +## Running it + +```bash +/home/oliver/Sync/Ham/T41/Software/Phoenix/code/tools/venv/bin/python \ + /home/oliver/Sync/Ham/T41/Software/Phoenix/code/tools/tx_filter_hil/tx_filter_hil_test.py +``` + +Add `-v` for progress. To measure only part of it, pass `--tests` (from +`wiring,level,passband,sideband,alias,carrier`) or `--rates`. The `alias` test +needs `passband` for its reference level and skips without it. + +## Exit codes + +| Code | Meaning | +|---|---| +| 0 | All checks passed | +| 1 | At least one filter is not where it should be | +| 2 | Rig or radio problem: no AD2, no serial, or an unrecognised sample rate | +| 3 | Interrupted; the AWG is silenced and PTT dropped, but confirm the radio is receiving | + +## What gets checked + +| Group | What it measures | What a failure means | +|---|---|---| +| `rig` | Wiring order, sideband, quadrature, mic drive level | The rig is not connected as documented, or the radio is not keying | +| `passband` | Composite transmit response, −3 dB high and low corners, ripple | The high corner is `TXInterpolateBy2Again`, the stage that sets the transmit audio bandwidth; the low corner is the equaliser bank's lowest cell | +| `corner` | Cross-rate comparison of those corners — **the headline** | A generated stage is not being regenerated for the rate | +| `sideband` | Opposite-sideband suppression across the passband | The Hilbert transform or the I/Q correction is off. Checked against a floor, *not* for rate invariance | +| `alias` | Out-of-band rejection, and fold-back when `TXDecimateBy2Again` halves the audio rate | The old flat-to-0.425·Fs decimator table is back | +| `carrier` | DC residue from `ED.DCOffsetI/Q` carrier nulling | Diagnostic only; a large residue raises every other noise floor | + +## Reading the result + +The primary criterion is **rate invariance**: each corner must land in the same +place at both sample rates, within **2.5 %**. + +That tolerance is looser than the receive suite's 1.5 % on purpose. Both generated +transmit stages are 48-tap Kaiser designs, which do not scale exactly when the +normalised cutoff changes: evaluating the tap sets directly gives **+1.2 % of +movement on a correct radio**, and the firmware's own offline test +(`TransmitChain176k.AudioBandwidthHoldsAcrossRates`) allows 2 % for the same +reason. The bug being hunted is **−8.125 %**, so there is better than a factor of +three in hand. **Do not widen `--rate-tol-pct` to make a run pass, and do not +tighten it to 1.5 % — that would fail correct firmware.** + +View `_summary.png` with `Read` first: three bars that should sit inside +the green tolerance band and nowhere near the dotted −8.125 % line. Then +`_passband.png` — both rates' curves should lie on top of each other. + +Expect and do not report as faults: + +- The high corner moving 1–2 % between rates. +- Sideband suppression differing between rates near the band edges: the Hilbert + band is a fraction of Fs and is meant to scale. +- Out-of-band rejection reading exactly the noise floor. That is a pass; the + report says the true rejection is greater than the rig can see. + +## Reporting + +Give one line per group with a PASS/FAIL and the headline number, then the overall +verdict. Quote the worst `delta_pct` and say whether it matches the −8.125 % +signature — the report flags this explicitly when it does. State the total +key-down time. Mention the Markdown report and PNG paths. If the radio's state was +not fully restored, say so prominently and name the settings that drifted; check +in particular that the radio is receiving and back on its original modulation. + +Repeat the three caveats when they bear on the result: + +- Every response is a **composite** — nothing in the transmit chain can be + bypassed over CAT, so the codec front end and the equaliser bank are in series. + Absolute corners are therefore loose; the rate comparison is not affected. +- A clean fold-back result does not on its own vindicate the decimator: `BandEQ` + runs before it and attenuates high inputs already. + `TransmitChain176k.DecimatorStopsBeforeTheFoldPoint` is what proves that stage. +- The transmit equaliser cells are not measured individually because + `S_Xmt[i].pCoeffs` and `S_Rec[i].pCoeffs` point at the same array — the receive + suite already sweeps those exact coefficients. + +## Guardrails + +- **Do not edit the suite in response to a failure.** A failure means the radio's + filters are not where they should be, or the rig is not connected as + documented. `test_tx_filter_hil.py` covers the measurement maths and includes a + check that the comparison fails on a simulated −8.125 % shift — run that if you + suspect the tool rather than the radio. +- Do not key the radio by any other means while the suite is running. +- If the run is interrupted, the AWG is silenced and PTT dropped automatically, + but confirm the radio came back to receive before leaving it. diff --git a/.gitignore b/.gitignore index 3021b1d..012f67d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,12 @@ ArduinoOutput/* +ArduinoOutput_DMA/ code/test/*.txt +# Bench captures and host-side Python environment: large, machine-local, regenerable. +# The transmit test program itself is tracked; everything it writes is not. +code/test/transmit/* +!code/test/transmit/transmit_test.py +code/tools/venv/ +code/txiq_log*.txt *.bkp code/test/.ipynb_checkpoints/ code/test/CMSIS/ diff --git a/code/docs/DrawDisplay_Timing_Baseline.md b/code/docs/DrawDisplay_Timing_Baseline.md deleted file mode 100644 index 64d3bf3..0000000 --- a/code/docs/DrawDisplay_Timing_Baseline.md +++ /dev/null @@ -1,314 +0,0 @@ -# DrawDisplay Timing Baseline - -Baseline timing profile of `loop()` over 1 second, with `DrawSpectrumPane()` -bracketed by `Flag(3)`. Use this as the reference for evaluating future -changes to `DrawDisplay()` and its subfunctions. - -## Capture conditions - -| Field | Value | -|---|---| -| Branch | `display_timing` | -| Commit | `f479960` (+ TEMP `Flag()` instrumentation in `DrawSpectrumPane`) | -| Date | 2026-05-23 | -| Radio UI state | HOME | -| Sample rate | 250 kHz (4 µs resolution) | -| Capture duration | 1.000 s | -| Acquisition mode | record (USB streaming) | -| Trigger | `Flag(1)` (DrawDisplay entry) | -| Debounce | 8 µs (2 samples) | -| Lost samples | 0 | -| Corrupt samples | 574 (DWF advisory; no observed effect on segment counts) | - -The capture was made with the firmware compiled at `opt=o1lto` and the radio -running in its default boot state. - -### Instrumentation in effect - -| Flag | Meaning | Source | -|---|---|---| -| `0` | Loop idle (between iterations) | `Loop.cpp` `loop()` tail | -| `1` | Inside `DrawDisplay()` — everything except `DrawSpectrumPane` | `Loop.cpp` (entry), `MainBoard_DisplayHome.cpp` `DrawSpectrumPane()` exit (TEMP) | -| `2` | `PerformSignalProcessing()` | `Loop.cpp` | -| `3` | Inside `DrawSpectrumPane()` (includes `DrawFrequencyBarValue`, `DrawBandWidthIndicatorBar`, `ShowSpectrum`, `ShowBandwidth`) | `MainBoard_DisplayHome.cpp` (TEMP) | -| `4` | Event processing | `Loop.cpp` (set, but segment swallowed by debounce — see Caveats) | - -## Headline numbers - -**Iteration rate**: ~95 Hz → ~10.5 ms per `loop()` iteration. - -**Time budget per second (% of CPU):** - -| Stage | Total time | % of CPU | -|---|---|---| -| `PerformSignalProcessing` (Flag 2) | 464 ms | 46.4 % | -| `DrawSpectrumPane` (Flag 3) | 510 ms | 51.0 % | -| Rest of `DrawDisplay` (Flag 1) | 26 ms | 2.6 % | - -`DrawSpectrumPane` is the largest single consumer in `loop()` — it accounts -for over half of CPU time and is the dominant bottleneck for iteration rate. - -### Overall timeline - -![Flag timeline (one row per flag)](DrawDisplay_baseline_timeline.png) - -Each row is one flag. Flag 2 (orange) and Flag 3 (green) alternate -throughout the second, with the wider green bars marking the ~13 ms -"heavy redraw" path and the wider orange bars marking the ~10 ms -double-block processing path. Flag 1 (blue, sparse) appears only at -the boundaries — the 3 visible tall ticks around 200 / 460 / 720 ms -are the ~780 µs `DrawHome`-cold-path outliers. - -## Per-stage statistics (n = 1-second capture) - -All times in **microseconds**. Resolution = 4 µs (one sample period). - -### Flag 3 — DrawSpectrumPane - -| Stat | Value (µs) | -|---|---| -| Count | 95 invocations | -| Min | 8 | -| Median | 5 064 | -| Mean | 5 371 | -| p95 | 13 093 | -| p99 | 13 180 | -| Max | 13 248 | -| Stddev | 3 887 | - -![DrawSpectrumPane distribution and scatter](DrawDisplay_baseline_flag3.png) - -**Distribution shape**: **multi-modal** — at least four distinct duration -lanes are visible in the histogram: - -| Lane | Approx duration | Count | Likely path | -|---|---|---|---| -| 1 | ~8 µs (1 bin) | 22 | Early return at `MainBoard_DisplayHome.cpp:735` (`!PaneSpectrum.stale`) | -| 2 | ~5 ms | 32 | Typical waterfall + spectrum redraw (median path) | -| 3 | ~7–8 ms | 9 | Spectrum + bandwidth indicator | -| 4 | ~9–10 ms | 8 | Heavier redraw including additional sub-panes | -| 5 | ~13 ms | 8 | Slowest path — full redraw with all overlays | - -The scatter plot shows the slow-lane events are **uniformly distributed** -through the 1-second window, not clustered at startup or thermal-drifting, -indicating discrete code-path branches inside `DrawSpectrumPane` rather -than a transient. Optimization should target the ~13 ms lane first: it -accounts for ~104 ms (≈ 20% of total `DrawSpectrumPane` time) from only -8 invocations. - -### Flag 2 — PerformSignalProcessing - -| Stat | Value (µs) | -|---|---| -| Count | 94 invocations | -| Min | 292 | -| Median | 4 812 | -| Mean | 4 934 | -| p95 | 10 416 | -| p99 | 10 421 | -| Max | 10 440 | -| Stddev | 2 700 | - -![SignalProcessing distribution and scatter](DrawDisplay_baseline_flag2.png) - -Three-lane structure: - -| Lane | Approx duration | Count | Likely path | -|---|---|---|---| -| 1 | ~2.7 ms | 39 | One audio block ready — typical | -| 2 | ~5–5.5 ms | 39 | Slightly heavier processing path | -| 3 | ~10.4 ms | 15 | Two audio blocks back-to-back (catch-up iteration) | - -The lone outlier near 0.3 ms is the fast no-block-ready early return. The -scatter shows the ~10.4 ms double-block iterations are scattered through -the second rather than periodic, consistent with audio FIFO catch-up -triggered by occasional draw-side stalls. - -### Flag 1 — Rest of DrawDisplay (excludes DrawSpectrumPane) - -| Stat | Value (µs) | -|---|---| -| Count | 187 segments (~2 per iteration: pre- and post-spectrum) | -| Min | 8 | -| Median | 28 | -| Mean | 139 | -| p95 | 248 | -| p99 | 779 | -| Max | 888 | -| Stddev | 159 | - -![Flag 1 distribution and scatter](DrawDisplay_baseline_flag1.png) - -Bimodal: ~94 short segments at ~28 µs (the pre-spectrum portion when -`DrawHome` does nothing but call into the pane loop) and ~88 segments -around 220–260 µs (post-spectrum: the remaining 11 panes plus -`MorseCharacterDisplay`). Three outliers around ~780 µs (visible in the -scatter at t ≈ 200, 460, 720 ms) are evenly spaced ~250 ms apart, suggesting -a periodic refresh event (e.g. the `timer_ms > 1000` 1-Hz tick that marks -`PaneStateOfHealth` and `PaneTime` stale at `MainBoard_DisplayHome.cpp:1622`). - -## Transition graph (sanity check) - -Observed flag-to-flag transitions in the 1-second capture: - -``` -1 -> 2 : 93 (end of DrawDisplay -> start of next iter's signal processing) -1 -> 3 : 94 (entering DrawSpectrumPane from DrawDisplay) -2 -> 1 : 93 (entering DrawDisplay from signal processing) -2 -> 3 : 1 (single transient at start of capture) -3 -> 1 : 93 (returning from DrawSpectrumPane) -3 -> 2 : 1 (single transient at start of capture) -``` - -The 2 → 3 and 3 → 2 transitions are start-of-capture artifacts (the trigger -fired mid-iteration). All steady-state transitions match the expected -pattern: each iteration goes Flag 2 → Flag 1 (pre-spectrum) → Flag 3 → -Flag 1 (post-spectrum) → Flag 2 (next iter). - -## Caveats - -- **Resolution**: 4 µs (sample period at 250 kHz). Sub-4-µs intervals are - not resolvable. Each `Flag()` call itself adds ~1 µs of wall time - (four sequential `digitalWrite()`s). -- **Flag 4 / Flag 0 invisible**: event processing (Flag 4) and the - loop-idle gap (Flag 0) are shorter than the 8 µs debounce and get merged - into the trailing Flag 1 segment. The Flag 1 "post-spectrum" segments - therefore include a few µs of loop-boundary overhead. -- **Sample-rate ceiling**: at 500 kHz and above, the AD2's 4 KiB on-device - ring buffer overflows in `flag_timing.py`'s record-mode polling loop and - reports `lost_samples > 0`. 250 kHz is the practical ceiling for 1-second - multi-iteration captures with the current script. -- **Mode dependency**: this baseline reflects the HOME UI state with the - radio in default boot conditions. Other UI states (MENU, BIT, - CALIBRATE_*) take entirely different paths through `DrawDisplay()` and - must be characterized separately. - -## Phase 1 results — spectrum back-buffer on L2 - -First optimization pass against this baseline. `ShowSpectrum()` in -`code/src/PhoenixSketch/MainBoard_DisplayHome.cpp` now draws the yellow -spectrum trace onto LAYER2 (no per-bin black-erase line, `pixelold` reused -only as the per-bin y record for the waterfall colour stamp), and a single -`BTE_move(..., 2, 1)` publishes the spectrum rect to LAYER1 at the end of -each 8-chunk sweep. The yellow spectrum-pane border is restamped on L2 -each sweep (DrawBandWidthIndicatorBar's opening fillRect overlaps the -border's left + bottom edges). Trace `y` is clipped to -`SPECTRUM_TOP_Y + 20` so it cannot accumulate into the top 20-row band -where the bandwidth/scale text lives. Audio spectrum and waterfall colour -stay on LAYER1, indexed identically to the baseline. See GitHub issue -[KI3P/Phoenix#20](https://github.com/KI3P/Phoenix/issues/20). - -### Capture conditions (deltas from baseline) - -| Field | Value | -|---|---| -| Date | 2026-05-23 | -| Commit | baseline + Phase 1 diff in `MainBoard_DisplayHome.cpp` | -| Runs | 3 consecutive 1-second captures (numbers below are the middle run) | -| Corrupt samples | 0 | -| All other fields | as baseline (250 kHz, 1 s, debounce 8 µs, trigger Flag 1) | - -### Headline numbers - -| Stage | Baseline | Phase 1 | Δ | -|---|---:|---:|---:| -| `PerformSignalProcessing` (Flag 2) | 464 ms (46.4%) | 524 ms (52.4%) | +60 ms | -| `DrawSpectrumPane` (Flag 3) | 510 ms (51.0%) | **450 ms (45.0%)** | **−60 ms** | -| Rest of `DrawDisplay` (Flag 1) | 26 ms (2.6%) | 26 ms (2.6%) | — | - -`DrawSpectrumPane` is no longer the dominant CPU consumer. Signal processing -picked up the freed budget — its share rose because more loop iterations -now fit per second. - -### Flag 3 stats (Phase 1) - -| Stat | Baseline (µs) | Phase 1 (µs) | Δ | -|---|---:|---:|---:| -| Count | 95 | 93 | — | -| Min | 8 | 8 | — | -| Median | 5 064 | **2 096** | **−59%** | -| Mean | 5 371 | **4 835** | **−10%** | -| p95 | 13 093 | 15 826 | +21% | -| p99 | 13 180 | 15 920 | +21% | -| Max | 13 248 | 15 964 | +21% | -| Stddev | 3 887 | ~5 300 | +36% | - -![DrawSpectrumPane Phase 1 distribution and scatter](DrawDisplay_phase1_flag3.png) - -**Distribution shape**: the four mid-weight lanes from baseline (5 / 7–8 / -9–10 / 13 ms) collapse into a dominant ~2 ms lane (typical chunk, no -sweep-end work) plus a heavier ~16 ms lane (sweep-end chunk that runs -`DrawBandWidthIndicatorBar`, the border restamp `drawRect`, spectrum -`BTE_move`, and waterfall `BTE_move` on the same iteration). The -early-return lane (~8 µs) survives unchanged. - -The slow lane gained ~2.7 ms because the spectrum `BTE_move`, -once-per-sweep filter-bar restamp, and border restamp are concentrated on -the 8th chunk instead of spread across all 8. The median-path saving (~3 -ms per typical chunk × ~80 typical chunks = ~−240 ms) outweighs the -slow-lane cost (~+2.7 ms × ~12 sweep-end chunks = ~+30 ms) but the gap is -smaller than a single-run measurement might suggest because per-bin -`drawLine` time depends on trace shape, which varies sweep-to-sweep with -spectrum content. Re-runs of the same configuration cluster tightly -(±10 ms across 3 runs at the same radio state) but a single 1-second -measurement should not be treated as authoritative — always take the -median of 3+ runs when comparing. - -### Per-loop-iteration timeline (Phase 1) - -![Phase 1 flag timeline (one row per flag)](DrawDisplay_phase1_timeline.png) - -Compared with the baseline timeline, green (`DrawSpectrumPane`) bars are -visibly narrower in the typical case, with the wider bars concentrated at -the sweep boundary. - -### Known visual tradeoff - -During the ~13–16 ms sweep window the user sees `OR(L1_previous_trace, -L2_in_progress_trace)`. For static or slowly-changing spectra the OR is -invisible (yellow on yellow). On fast-changing displays a brief -column-by-column "smearing" may be visible. If that matters, bracket the -draw with `tft.layerEffect(LAYER1)` / `tft.layerEffect(OR)` around the BTE -— additive, single-screen scope, no change to other UI paths. - -### Raw capture - -`code/docs/DrawDisplay_phase1_capture.json` (regenerate plots with the same -`plot_flag_timing.py` invocation as for the baseline, swapping the input -file and prefix). - -## How to reproduce - -The raw capture is preserved at -`code/docs/DrawDisplay_baseline_capture.json`. To reproduce from scratch: - -1. Verify the two `// TEMP timing instrumentation` lines bracket - `DrawSpectrumPane()` in `code/src/PhoenixSketch/MainBoard_DisplayHome.cpp`. -2. Compile + flash with `arduino-cli` (see `timing-measurement` skill). -3. With the radio on the HOME screen, run: - - ```bash - /home/oliver/Sync/Ham/T41/Software/Phoenix/code/tools/venv/bin/python \ - /home/oliver/Sync/Ham/T41/Software/Phoenix/code/tools/flag_timing.py \ - --sample-rate 250e3 --duration 1 \ - --debounce-us 8 \ - --trigger flag --trigger-flag 1 \ - --quiet > profile.json - ``` - -4. `jq '.summary.flag_segment_stats' profile.json` and compare to the - tables above. Flag 3 mean/p95 are the headline numbers for tracking - regressions to `DrawSpectrumPane`. - -5. Regenerate the plots from the saved JSON: - - ```bash - /home/oliver/Sync/Ham/T41/Software/Phoenix/code/tools/venv/bin/python \ - /home/oliver/Sync/Ham/T41/Software/Phoenix/code/tools/plot_flag_timing.py \ - profile.json \ - --prefix DrawDisplay_baseline \ - --flag-labels "1=DrawDisplay-other,2=SignalProcessing,3=DrawSpectrumPane" - ``` - - Outputs one `_flag.png` per flag (with histogram + iteration - scatter) and one `_timeline.png` (stacked-row timeline). diff --git a/code/docs/DrawDisplay_baseline_capture.json b/code/docs/DrawDisplay_baseline_capture.json deleted file mode 100644 index 9e08a74..0000000 --- a/code/docs/DrawDisplay_baseline_capture.json +++ /dev/null @@ -1 +0,0 @@ -{"metadata":{"sample_rate_hz":250000.0,"sample_period_s":4e-06,"buffer_size":250000,"duration_s":1.0,"trigger":"flag=1","trigger_position_frac":0.1,"debounce_us":8.0,"debounce_samples":2,"acquisition_mode":"record","lost_samples":0,"corrupt_samples":574,"lost_fraction":0.0,"device_buffer_size":4096,"pin_mapping":{"28":{"bit":3,"dio":1},"29":{"bit":2,"dio":2},"30":{"bit":1,"dio":3},"31":{"bit":0,"dio":4}}},"transitions":[{"index":2,"time_s":8e-06,"from_flag":1,"to_flag":3},{"index":4,"time_s":1.6e-05,"from_flag":3,"to_flag":1},{"index":56,"time_s":0.000224,"from_flag":1,"to_flag":2},{"index":2666,"time_s":0.010664,"from_flag":2,"to_flag":1},{"index":2668,"time_s":0.010672,"from_flag":1,"to_flag":3},{"index":4979,"time_s":0.019916,"from_flag":3,"to_flag":1},{"index":5039,"time_s":0.020156,"from_flag":1,"to_flag":2},{"index":5700,"time_s":0.022799999999999997,"from_flag":2,"to_flag":1},{"index":5702,"time_s":0.022808,"from_flag":1,"to_flag":3},{"index":8130,"time_s":0.03252,"from_flag":3,"to_flag":1},{"index":8193,"time_s":0.032771999999999996,"from_flag":1,"to_flag":2},{"index":8853,"time_s":0.035412,"from_flag":2,"to_flag":1},{"index":8855,"time_s":0.03542,"from_flag":1,"to_flag":3},{"index":10133,"time_s":0.040532,"from_flag":3,"to_flag":1},{"index":10194,"time_s":0.040776,"from_flag":1,"to_flag":2},{"index":10856,"time_s":0.043424,"from_flag":2,"to_flag":1},{"index":10858,"time_s":0.043432,"from_flag":1,"to_flag":3},{"index":12089,"time_s":0.048355999999999996,"from_flag":3,"to_flag":1},{"index":12149,"time_s":0.048596,"from_flag":1,"to_flag":2},{"index":13333,"time_s":0.053332,"from_flag":2,"to_flag":1},{"index":13335,"time_s":0.05334,"from_flag":1,"to_flag":3},{"index":14614,"time_s":0.058455999999999994,"from_flag":3,"to_flag":1},{"index":14675,"time_s":0.058699999999999995,"from_flag":1,"to_flag":2},{"index":15999,"time_s":0.063996,"from_flag":2,"to_flag":1},{"index":16002,"time_s":0.064008,"from_flag":1,"to_flag":3},{"index":17252,"time_s":0.069008,"from_flag":3,"to_flag":1},{"index":17307,"time_s":0.069228,"from_flag":1,"to_flag":2},{"index":18666,"time_s":0.074664,"from_flag":2,"to_flag":1},{"index":18668,"time_s":0.074672,"from_flag":1,"to_flag":3},{"index":19955,"time_s":0.07982,"from_flag":3,"to_flag":1},{"index":20017,"time_s":0.080068,"from_flag":1,"to_flag":2},{"index":21333,"time_s":0.08533199999999999,"from_flag":2,"to_flag":1},{"index":21335,"time_s":0.08534,"from_flag":1,"to_flag":3},{"index":24614,"time_s":0.098456,"from_flag":3,"to_flag":1},{"index":24676,"time_s":0.098704,"from_flag":1,"to_flag":2},{"index":25336,"time_s":0.10134399999999999,"from_flag":2,"to_flag":1},{"index":25338,"time_s":0.101352,"from_flag":1,"to_flag":3},{"index":27112,"time_s":0.10844799999999999,"from_flag":3,"to_flag":1},{"index":27173,"time_s":0.108692,"from_flag":1,"to_flag":2},{"index":27834,"time_s":0.11133599999999999,"from_flag":2,"to_flag":1},{"index":27836,"time_s":0.111344,"from_flag":1,"to_flag":3},{"index":27838,"time_s":0.11135199999999999,"from_flag":3,"to_flag":1},{"index":27896,"time_s":0.11158399999999999,"from_flag":1,"to_flag":2},{"index":29333,"time_s":0.11733199999999999,"from_flag":2,"to_flag":1},{"index":29335,"time_s":0.11734,"from_flag":1,"to_flag":3},{"index":29337,"time_s":0.117348,"from_flag":3,"to_flag":1},{"index":29396,"time_s":0.117584,"from_flag":1,"to_flag":2},{"index":31999,"time_s":0.127996,"from_flag":2,"to_flag":1},{"index":32002,"time_s":0.12800799999999998,"from_flag":1,"to_flag":3},{"index":32004,"time_s":0.128016,"from_flag":3,"to_flag":1},{"index":32062,"time_s":0.128248,"from_flag":1,"to_flag":2},{"index":34666,"time_s":0.13866399999999998,"from_flag":2,"to_flag":1},{"index":34668,"time_s":0.138672,"from_flag":1,"to_flag":3},{"index":36978,"time_s":0.147912,"from_flag":3,"to_flag":1},{"index":37037,"time_s":0.148148,"from_flag":1,"to_flag":2},{"index":37698,"time_s":0.15079199999999998,"from_flag":2,"to_flag":1},{"index":37700,"time_s":0.1508,"from_flag":1,"to_flag":3},{"index":40080,"time_s":0.16032,"from_flag":3,"to_flag":1},{"index":40142,"time_s":0.160568,"from_flag":1,"to_flag":2},{"index":40803,"time_s":0.163212,"from_flag":2,"to_flag":1},{"index":40805,"time_s":0.16322,"from_flag":1,"to_flag":3},{"index":42060,"time_s":0.16824,"from_flag":3,"to_flag":1},{"index":42121,"time_s":0.168484,"from_flag":1,"to_flag":2},{"index":42782,"time_s":0.171128,"from_flag":2,"to_flag":1},{"index":42784,"time_s":0.17113599999999998,"from_flag":1,"to_flag":3},{"index":43987,"time_s":0.175948,"from_flag":3,"to_flag":1},{"index":44053,"time_s":0.17621199999999998,"from_flag":1,"to_flag":2},{"index":45333,"time_s":0.181332,"from_flag":2,"to_flag":1},{"index":45335,"time_s":0.18134,"from_flag":1,"to_flag":3},{"index":46617,"time_s":0.186468,"from_flag":3,"to_flag":1},{"index":46678,"time_s":0.186712,"from_flag":1,"to_flag":2},{"index":47999,"time_s":0.191996,"from_flag":2,"to_flag":1},{"index":48001,"time_s":0.19200399999999998,"from_flag":1,"to_flag":3},{"index":49241,"time_s":0.196964,"from_flag":3,"to_flag":1},{"index":49303,"time_s":0.197212,"from_flag":1,"to_flag":2},{"index":50666,"time_s":0.20266399999999998,"from_flag":2,"to_flag":1},{"index":50668,"time_s":0.202672,"from_flag":1,"to_flag":3},{"index":51961,"time_s":0.207844,"from_flag":3,"to_flag":1},{"index":52155,"time_s":0.20862,"from_flag":1,"to_flag":2},{"index":53333,"time_s":0.213332,"from_flag":2,"to_flag":1},{"index":53335,"time_s":0.21334,"from_flag":1,"to_flag":3},{"index":56588,"time_s":0.226352,"from_flag":3,"to_flag":1},{"index":56649,"time_s":0.226596,"from_flag":1,"to_flag":2},{"index":57310,"time_s":0.22924,"from_flag":2,"to_flag":1},{"index":57312,"time_s":0.22924799999999998,"from_flag":1,"to_flag":3},{"index":59146,"time_s":0.236584,"from_flag":3,"to_flag":1},{"index":59208,"time_s":0.236832,"from_flag":1,"to_flag":2},{"index":59868,"time_s":0.239472,"from_flag":2,"to_flag":1},{"index":59870,"time_s":0.23948,"from_flag":1,"to_flag":3},{"index":59872,"time_s":0.23948799999999998,"from_flag":3,"to_flag":1},{"index":59931,"time_s":0.239724,"from_flag":1,"to_flag":2},{"index":61333,"time_s":0.245332,"from_flag":2,"to_flag":1},{"index":61335,"time_s":0.24534,"from_flag":1,"to_flag":3},{"index":61337,"time_s":0.24534799999999998,"from_flag":3,"to_flag":1},{"index":61395,"time_s":0.24558,"from_flag":1,"to_flag":2},{"index":63999,"time_s":0.255996,"from_flag":2,"to_flag":1},{"index":64001,"time_s":0.256004,"from_flag":1,"to_flag":3},{"index":64003,"time_s":0.25601199999999996,"from_flag":3,"to_flag":1},{"index":64062,"time_s":0.256248,"from_flag":1,"to_flag":2},{"index":66666,"time_s":0.266664,"from_flag":2,"to_flag":1},{"index":66668,"time_s":0.26667199999999996,"from_flag":1,"to_flag":3},{"index":68984,"time_s":0.275936,"from_flag":3,"to_flag":1},{"index":69037,"time_s":0.276148,"from_flag":1,"to_flag":2},{"index":69699,"time_s":0.278796,"from_flag":2,"to_flag":1},{"index":69701,"time_s":0.278804,"from_flag":1,"to_flag":3},{"index":72082,"time_s":0.288328,"from_flag":3,"to_flag":1},{"index":72144,"time_s":0.288576,"from_flag":1,"to_flag":2},{"index":72804,"time_s":0.291216,"from_flag":2,"to_flag":1},{"index":72806,"time_s":0.291224,"from_flag":1,"to_flag":3},{"index":74041,"time_s":0.296164,"from_flag":3,"to_flag":1},{"index":74102,"time_s":0.296408,"from_flag":1,"to_flag":2},{"index":74763,"time_s":0.299052,"from_flag":2,"to_flag":1},{"index":74765,"time_s":0.29906,"from_flag":1,"to_flag":3},{"index":75986,"time_s":0.303944,"from_flag":3,"to_flag":1},{"index":76052,"time_s":0.304208,"from_flag":1,"to_flag":2},{"index":77332,"time_s":0.309328,"from_flag":2,"to_flag":1},{"index":77335,"time_s":0.30934,"from_flag":1,"to_flag":3},{"index":78605,"time_s":0.31442,"from_flag":3,"to_flag":1},{"index":78667,"time_s":0.314668,"from_flag":1,"to_flag":2},{"index":79999,"time_s":0.319996,"from_flag":2,"to_flag":1},{"index":80001,"time_s":0.320004,"from_flag":1,"to_flag":3},{"index":81255,"time_s":0.32502,"from_flag":3,"to_flag":1},{"index":81316,"time_s":0.325264,"from_flag":1,"to_flag":2},{"index":82666,"time_s":0.33066399999999996,"from_flag":2,"to_flag":1},{"index":82668,"time_s":0.33067199999999997,"from_flag":1,"to_flag":3},{"index":83957,"time_s":0.33582799999999996,"from_flag":3,"to_flag":1},{"index":84019,"time_s":0.336076,"from_flag":1,"to_flag":2},{"index":85332,"time_s":0.34132799999999996,"from_flag":2,"to_flag":1},{"index":85335,"time_s":0.34134,"from_flag":1,"to_flag":3},{"index":88621,"time_s":0.35448399999999997,"from_flag":3,"to_flag":1},{"index":88682,"time_s":0.354728,"from_flag":1,"to_flag":2},{"index":89342,"time_s":0.35736799999999996,"from_flag":2,"to_flag":1},{"index":89344,"time_s":0.35737599999999997,"from_flag":1,"to_flag":3},{"index":91129,"time_s":0.364516,"from_flag":3,"to_flag":1},{"index":91190,"time_s":0.36476,"from_flag":1,"to_flag":2},{"index":91851,"time_s":0.367404,"from_flag":2,"to_flag":1},{"index":91853,"time_s":0.36741199999999996,"from_flag":1,"to_flag":3},{"index":91855,"time_s":0.36741999999999997,"from_flag":3,"to_flag":1},{"index":91914,"time_s":0.367656,"from_flag":1,"to_flag":2},{"index":93332,"time_s":0.373328,"from_flag":2,"to_flag":1},{"index":93335,"time_s":0.37334,"from_flag":1,"to_flag":3},{"index":93337,"time_s":0.37334799999999996,"from_flag":3,"to_flag":1},{"index":93395,"time_s":0.37357999999999997,"from_flag":1,"to_flag":2},{"index":95999,"time_s":0.383996,"from_flag":2,"to_flag":1},{"index":96001,"time_s":0.38400399999999996,"from_flag":1,"to_flag":3},{"index":96003,"time_s":0.38401199999999996,"from_flag":3,"to_flag":1},{"index":96062,"time_s":0.384248,"from_flag":1,"to_flag":2},{"index":98666,"time_s":0.39466399999999996,"from_flag":2,"to_flag":1},{"index":98668,"time_s":0.39467199999999997,"from_flag":1,"to_flag":3},{"index":101006,"time_s":0.404024,"from_flag":3,"to_flag":1},{"index":101064,"time_s":0.404256,"from_flag":1,"to_flag":2},{"index":101725,"time_s":0.4069,"from_flag":2,"to_flag":1},{"index":101727,"time_s":0.406908,"from_flag":1,"to_flag":3},{"index":104147,"time_s":0.41658799999999996,"from_flag":3,"to_flag":1},{"index":104209,"time_s":0.416836,"from_flag":1,"to_flag":2},{"index":104870,"time_s":0.41947999999999996,"from_flag":2,"to_flag":1},{"index":104872,"time_s":0.41948799999999997,"from_flag":1,"to_flag":3},{"index":106120,"time_s":0.42447999999999997,"from_flag":3,"to_flag":1},{"index":106182,"time_s":0.424728,"from_flag":1,"to_flag":2},{"index":106843,"time_s":0.427372,"from_flag":2,"to_flag":1},{"index":106845,"time_s":0.42738,"from_flag":1,"to_flag":3},{"index":108116,"time_s":0.43246399999999996,"from_flag":3,"to_flag":1},{"index":108177,"time_s":0.432708,"from_flag":1,"to_flag":2},{"index":109332,"time_s":0.437328,"from_flag":2,"to_flag":1},{"index":109335,"time_s":0.43734,"from_flag":1,"to_flag":3},{"index":110581,"time_s":0.442324,"from_flag":3,"to_flag":1},{"index":110639,"time_s":0.442556,"from_flag":1,"to_flag":2},{"index":111999,"time_s":0.447996,"from_flag":2,"to_flag":1},{"index":112001,"time_s":0.44800399999999996,"from_flag":1,"to_flag":3},{"index":113266,"time_s":0.45306399999999997,"from_flag":3,"to_flag":1},{"index":113325,"time_s":0.4533,"from_flag":1,"to_flag":2},{"index":114666,"time_s":0.45866399999999996,"from_flag":2,"to_flag":1},{"index":114668,"time_s":0.45867199999999997,"from_flag":1,"to_flag":3},{"index":115972,"time_s":0.46388799999999997,"from_flag":3,"to_flag":1},{"index":116166,"time_s":0.46466399999999997,"from_flag":1,"to_flag":2},{"index":117332,"time_s":0.46932799999999997,"from_flag":2,"to_flag":1},{"index":117334,"time_s":0.469336,"from_flag":1,"to_flag":3},{"index":120628,"time_s":0.482512,"from_flag":3,"to_flag":1},{"index":120684,"time_s":0.482736,"from_flag":1,"to_flag":2},{"index":121344,"time_s":0.485376,"from_flag":2,"to_flag":1},{"index":121346,"time_s":0.485384,"from_flag":1,"to_flag":3},{"index":123181,"time_s":0.492724,"from_flag":3,"to_flag":1},{"index":123242,"time_s":0.49296799999999996,"from_flag":1,"to_flag":2},{"index":123903,"time_s":0.495612,"from_flag":2,"to_flag":1},{"index":123906,"time_s":0.49562399999999995,"from_flag":1,"to_flag":3},{"index":123908,"time_s":0.49563199999999996,"from_flag":3,"to_flag":1},{"index":123967,"time_s":0.495868,"from_flag":1,"to_flag":2},{"index":125332,"time_s":0.501328,"from_flag":2,"to_flag":1},{"index":125334,"time_s":0.501336,"from_flag":1,"to_flag":3},{"index":125336,"time_s":0.501344,"from_flag":3,"to_flag":1},{"index":125395,"time_s":0.50158,"from_flag":1,"to_flag":2},{"index":127999,"time_s":0.511996,"from_flag":2,"to_flag":1},{"index":128001,"time_s":0.512004,"from_flag":1,"to_flag":3},{"index":128003,"time_s":0.512012,"from_flag":3,"to_flag":1},{"index":128062,"time_s":0.5122479999999999,"from_flag":1,"to_flag":2},{"index":130665,"time_s":0.52266,"from_flag":2,"to_flag":1},{"index":130668,"time_s":0.522672,"from_flag":1,"to_flag":3},{"index":132967,"time_s":0.531868,"from_flag":3,"to_flag":1},{"index":133026,"time_s":0.532104,"from_flag":1,"to_flag":2},{"index":133687,"time_s":0.534748,"from_flag":2,"to_flag":1},{"index":133690,"time_s":0.53476,"from_flag":1,"to_flag":3},{"index":136104,"time_s":0.544416,"from_flag":3,"to_flag":1},{"index":136166,"time_s":0.5446639999999999,"from_flag":1,"to_flag":2},{"index":136821,"time_s":0.547284,"from_flag":2,"to_flag":1},{"index":136823,"time_s":0.547292,"from_flag":1,"to_flag":3},{"index":138086,"time_s":0.552344,"from_flag":3,"to_flag":1},{"index":138141,"time_s":0.5525639999999999,"from_flag":1,"to_flag":2},{"index":138802,"time_s":0.5552079999999999,"from_flag":2,"to_flag":1},{"index":138804,"time_s":0.5552159999999999,"from_flag":1,"to_flag":3},{"index":140070,"time_s":0.56028,"from_flag":3,"to_flag":1},{"index":140131,"time_s":0.560524,"from_flag":1,"to_flag":2},{"index":141332,"time_s":0.5653279999999999,"from_flag":2,"to_flag":1},{"index":141334,"time_s":0.565336,"from_flag":1,"to_flag":3},{"index":142067,"time_s":0.568268,"from_flag":3,"to_flag":2},{"index":142140,"time_s":0.56856,"from_flag":2,"to_flag":3},{"index":142564,"time_s":0.570256,"from_flag":3,"to_flag":1},{"index":142625,"time_s":0.5705,"from_flag":1,"to_flag":2},{"index":143999,"time_s":0.575996,"from_flag":2,"to_flag":1},{"index":144001,"time_s":0.576004,"from_flag":1,"to_flag":3},{"index":145283,"time_s":0.581132,"from_flag":3,"to_flag":1},{"index":145344,"time_s":0.581376,"from_flag":1,"to_flag":2},{"index":146666,"time_s":0.586664,"from_flag":2,"to_flag":1},{"index":146668,"time_s":0.586672,"from_flag":1,"to_flag":3},{"index":147968,"time_s":0.591872,"from_flag":3,"to_flag":1},{"index":148029,"time_s":0.592116,"from_flag":1,"to_flag":2},{"index":149332,"time_s":0.597328,"from_flag":2,"to_flag":1},{"index":149334,"time_s":0.597336,"from_flag":1,"to_flag":3},{"index":152573,"time_s":0.610292,"from_flag":3,"to_flag":1},{"index":152635,"time_s":0.61054,"from_flag":1,"to_flag":2},{"index":153295,"time_s":0.61318,"from_flag":2,"to_flag":1},{"index":153297,"time_s":0.613188,"from_flag":1,"to_flag":3},{"index":155117,"time_s":0.620468,"from_flag":3,"to_flag":1},{"index":155172,"time_s":0.620688,"from_flag":1,"to_flag":2},{"index":155832,"time_s":0.623328,"from_flag":2,"to_flag":1},{"index":155835,"time_s":0.62334,"from_flag":1,"to_flag":3},{"index":155837,"time_s":0.623348,"from_flag":3,"to_flag":1},{"index":155895,"time_s":0.62358,"from_flag":1,"to_flag":2},{"index":157332,"time_s":0.629328,"from_flag":2,"to_flag":1},{"index":157334,"time_s":0.629336,"from_flag":1,"to_flag":3},{"index":157336,"time_s":0.629344,"from_flag":3,"to_flag":1},{"index":157395,"time_s":0.6295799999999999,"from_flag":1,"to_flag":2},{"index":159999,"time_s":0.639996,"from_flag":2,"to_flag":1},{"index":160001,"time_s":0.640004,"from_flag":1,"to_flag":3},{"index":160003,"time_s":0.640012,"from_flag":3,"to_flag":1},{"index":160062,"time_s":0.6402479999999999,"from_flag":1,"to_flag":2},{"index":162665,"time_s":0.65066,"from_flag":2,"to_flag":1},{"index":162667,"time_s":0.650668,"from_flag":1,"to_flag":3},{"index":164956,"time_s":0.659824,"from_flag":3,"to_flag":1},{"index":165015,"time_s":0.66006,"from_flag":1,"to_flag":2},{"index":165676,"time_s":0.662704,"from_flag":2,"to_flag":1},{"index":165678,"time_s":0.662712,"from_flag":1,"to_flag":3},{"index":168108,"time_s":0.6724319999999999,"from_flag":3,"to_flag":1},{"index":168167,"time_s":0.6726679999999999,"from_flag":1,"to_flag":2},{"index":168821,"time_s":0.675284,"from_flag":2,"to_flag":1},{"index":168823,"time_s":0.675292,"from_flag":1,"to_flag":3},{"index":170087,"time_s":0.680348,"from_flag":3,"to_flag":1},{"index":170148,"time_s":0.680592,"from_flag":1,"to_flag":2},{"index":170809,"time_s":0.683236,"from_flag":2,"to_flag":1},{"index":170811,"time_s":0.683244,"from_flag":1,"to_flag":3},{"index":172067,"time_s":0.688268,"from_flag":3,"to_flag":1},{"index":172127,"time_s":0.688508,"from_flag":1,"to_flag":2},{"index":173332,"time_s":0.6933279999999999,"from_flag":2,"to_flag":1},{"index":173334,"time_s":0.693336,"from_flag":1,"to_flag":3},{"index":174585,"time_s":0.69834,"from_flag":3,"to_flag":1},{"index":174646,"time_s":0.698584,"from_flag":1,"to_flag":2},{"index":175999,"time_s":0.703996,"from_flag":2,"to_flag":1},{"index":176001,"time_s":0.704004,"from_flag":1,"to_flag":3},{"index":177283,"time_s":0.709132,"from_flag":3,"to_flag":1},{"index":177344,"time_s":0.709376,"from_flag":1,"to_flag":2},{"index":178665,"time_s":0.71466,"from_flag":2,"to_flag":1},{"index":178667,"time_s":0.714668,"from_flag":1,"to_flag":3},{"index":179956,"time_s":0.719824,"from_flag":3,"to_flag":1},{"index":180148,"time_s":0.720592,"from_flag":1,"to_flag":2},{"index":181332,"time_s":0.725328,"from_flag":2,"to_flag":1},{"index":181334,"time_s":0.725336,"from_flag":1,"to_flag":3},{"index":184607,"time_s":0.738428,"from_flag":3,"to_flag":1},{"index":184668,"time_s":0.738672,"from_flag":1,"to_flag":2},{"index":185323,"time_s":0.741292,"from_flag":2,"to_flag":1},{"index":185325,"time_s":0.7413,"from_flag":1,"to_flag":3},{"index":187141,"time_s":0.748564,"from_flag":3,"to_flag":1},{"index":187202,"time_s":0.7488079999999999,"from_flag":1,"to_flag":2},{"index":187863,"time_s":0.751452,"from_flag":2,"to_flag":1},{"index":187865,"time_s":0.75146,"from_flag":1,"to_flag":3},{"index":187867,"time_s":0.7514679999999999,"from_flag":3,"to_flag":1},{"index":187926,"time_s":0.7517039999999999,"from_flag":1,"to_flag":2},{"index":189332,"time_s":0.757328,"from_flag":2,"to_flag":1},{"index":189334,"time_s":0.757336,"from_flag":1,"to_flag":3},{"index":189336,"time_s":0.757344,"from_flag":3,"to_flag":1},{"index":189395,"time_s":0.7575799999999999,"from_flag":1,"to_flag":2},{"index":191998,"time_s":0.767992,"from_flag":2,"to_flag":1},{"index":192001,"time_s":0.768004,"from_flag":1,"to_flag":3},{"index":192003,"time_s":0.7680119999999999,"from_flag":3,"to_flag":1},{"index":192061,"time_s":0.7682439999999999,"from_flag":1,"to_flag":2},{"index":194665,"time_s":0.77866,"from_flag":2,"to_flag":1},{"index":194667,"time_s":0.7786679999999999,"from_flag":1,"to_flag":3},{"index":196945,"time_s":0.7877799999999999,"from_flag":3,"to_flag":1},{"index":197005,"time_s":0.7880199999999999,"from_flag":1,"to_flag":2},{"index":197666,"time_s":0.7906639999999999,"from_flag":2,"to_flag":1},{"index":197668,"time_s":0.7906719999999999,"from_flag":1,"to_flag":3},{"index":200082,"time_s":0.8003279999999999,"from_flag":3,"to_flag":1},{"index":200143,"time_s":0.800572,"from_flag":1,"to_flag":2},{"index":200803,"time_s":0.8032119999999999,"from_flag":2,"to_flag":1},{"index":200805,"time_s":0.8032199999999999,"from_flag":1,"to_flag":3},{"index":202060,"time_s":0.80824,"from_flag":3,"to_flag":1},{"index":202122,"time_s":0.808488,"from_flag":1,"to_flag":2},{"index":202783,"time_s":0.811132,"from_flag":2,"to_flag":1},{"index":202785,"time_s":0.81114,"from_flag":1,"to_flag":3},{"index":204045,"time_s":0.81618,"from_flag":3,"to_flag":1},{"index":204107,"time_s":0.8164279999999999,"from_flag":1,"to_flag":2},{"index":205332,"time_s":0.821328,"from_flag":2,"to_flag":1},{"index":205334,"time_s":0.821336,"from_flag":1,"to_flag":3},{"index":206583,"time_s":0.826332,"from_flag":3,"to_flag":1},{"index":206644,"time_s":0.826576,"from_flag":1,"to_flag":2},{"index":207998,"time_s":0.831992,"from_flag":2,"to_flag":1},{"index":208001,"time_s":0.832004,"from_flag":1,"to_flag":3},{"index":209256,"time_s":0.837024,"from_flag":3,"to_flag":1},{"index":209317,"time_s":0.837268,"from_flag":1,"to_flag":2},{"index":210665,"time_s":0.84266,"from_flag":2,"to_flag":1},{"index":210667,"time_s":0.842668,"from_flag":1,"to_flag":3},{"index":211971,"time_s":0.847884,"from_flag":3,"to_flag":1},{"index":212033,"time_s":0.848132,"from_flag":1,"to_flag":2},{"index":213332,"time_s":0.853328,"from_flag":2,"to_flag":1},{"index":213334,"time_s":0.853336,"from_flag":1,"to_flag":3},{"index":216608,"time_s":0.866432,"from_flag":3,"to_flag":1},{"index":216670,"time_s":0.86668,"from_flag":1,"to_flag":2},{"index":217325,"time_s":0.8693,"from_flag":2,"to_flag":1},{"index":217332,"time_s":0.869328,"from_flag":1,"to_flag":3},{"index":219168,"time_s":0.876672,"from_flag":3,"to_flag":1},{"index":219229,"time_s":0.8769159999999999,"from_flag":1,"to_flag":2},{"index":219890,"time_s":0.87956,"from_flag":2,"to_flag":1},{"index":219892,"time_s":0.8795679999999999,"from_flag":1,"to_flag":3},{"index":219894,"time_s":0.8795759999999999,"from_flag":3,"to_flag":1},{"index":219947,"time_s":0.879788,"from_flag":1,"to_flag":2},{"index":221332,"time_s":0.885328,"from_flag":2,"to_flag":1},{"index":221334,"time_s":0.885336,"from_flag":1,"to_flag":3},{"index":221336,"time_s":0.8853439999999999,"from_flag":3,"to_flag":1},{"index":221395,"time_s":0.8855799999999999,"from_flag":1,"to_flag":2},{"index":223998,"time_s":0.895992,"from_flag":2,"to_flag":1},{"index":224000,"time_s":0.8959999999999999,"from_flag":1,"to_flag":3},{"index":224002,"time_s":0.8960079999999999,"from_flag":3,"to_flag":1},{"index":224060,"time_s":0.8962399999999999,"from_flag":1,"to_flag":2},{"index":226665,"time_s":0.9066599999999999,"from_flag":2,"to_flag":1},{"index":226667,"time_s":0.9066679999999999,"from_flag":1,"to_flag":3},{"index":228917,"time_s":0.9156679999999999,"from_flag":3,"to_flag":1},{"index":228976,"time_s":0.9159039999999999,"from_flag":1,"to_flag":2},{"index":229637,"time_s":0.9185479999999999,"from_flag":2,"to_flag":1},{"index":229639,"time_s":0.9185559999999999,"from_flag":1,"to_flag":3},{"index":232050,"time_s":0.9281999999999999,"from_flag":3,"to_flag":1},{"index":232112,"time_s":0.9284479999999999,"from_flag":1,"to_flag":2},{"index":232773,"time_s":0.9310919999999999,"from_flag":2,"to_flag":1},{"index":232775,"time_s":0.9310999999999999,"from_flag":1,"to_flag":3},{"index":234050,"time_s":0.9361999999999999,"from_flag":3,"to_flag":1},{"index":234112,"time_s":0.936448,"from_flag":1,"to_flag":2},{"index":234772,"time_s":0.9390879999999999,"from_flag":2,"to_flag":1},{"index":234774,"time_s":0.9390959999999999,"from_flag":1,"to_flag":3},{"index":236032,"time_s":0.944128,"from_flag":3,"to_flag":1},{"index":236093,"time_s":0.944372,"from_flag":1,"to_flag":2},{"index":237332,"time_s":0.949328,"from_flag":2,"to_flag":1},{"index":237334,"time_s":0.949336,"from_flag":1,"to_flag":3},{"index":238565,"time_s":0.95426,"from_flag":3,"to_flag":1},{"index":238627,"time_s":0.9545079999999999,"from_flag":1,"to_flag":2},{"index":239998,"time_s":0.959992,"from_flag":2,"to_flag":1},{"index":240000,"time_s":0.96,"from_flag":1,"to_flag":3},{"index":241243,"time_s":0.9649719999999999,"from_flag":3,"to_flag":1},{"index":241304,"time_s":0.965216,"from_flag":1,"to_flag":2},{"index":242665,"time_s":0.97066,"from_flag":2,"to_flag":1},{"index":242667,"time_s":0.970668,"from_flag":1,"to_flag":3},{"index":243988,"time_s":0.9759519999999999,"from_flag":3,"to_flag":1},{"index":244187,"time_s":0.976748,"from_flag":1,"to_flag":2},{"index":245331,"time_s":0.981324,"from_flag":2,"to_flag":1},{"index":245334,"time_s":0.981336,"from_flag":1,"to_flag":3},{"index":248646,"time_s":0.9945839999999999,"from_flag":3,"to_flag":1},{"index":248868,"time_s":0.9954719999999999,"from_flag":1,"to_flag":2},{"index":249529,"time_s":0.998116,"from_flag":2,"to_flag":1},{"index":249531,"time_s":0.9981239999999999,"from_flag":1,"to_flag":3}],"segments":[{"flag":1,"start_index":0,"end_index":2,"start_time_s":0.0,"end_time_s":8e-06,"duration_s":8e-06},{"flag":3,"start_index":2,"end_index":4,"start_time_s":8e-06,"end_time_s":1.6e-05,"duration_s":8e-06},{"flag":1,"start_index":4,"end_index":56,"start_time_s":1.6e-05,"end_time_s":0.000224,"duration_s":0.000208},{"flag":2,"start_index":56,"end_index":2666,"start_time_s":0.000224,"end_time_s":0.010664,"duration_s":0.01044},{"flag":1,"start_index":2666,"end_index":2668,"start_time_s":0.010664,"end_time_s":0.010672,"duration_s":8e-06},{"flag":3,"start_index":2668,"end_index":4979,"start_time_s":0.010672,"end_time_s":0.019916,"duration_s":0.009243999999999999},{"flag":1,"start_index":4979,"end_index":5039,"start_time_s":0.019916,"end_time_s":0.020156,"duration_s":0.00023999999999999998},{"flag":2,"start_index":5039,"end_index":5700,"start_time_s":0.020156,"end_time_s":0.022799999999999997,"duration_s":0.002644},{"flag":1,"start_index":5700,"end_index":5702,"start_time_s":0.022799999999999997,"end_time_s":0.022808,"duration_s":8e-06},{"flag":3,"start_index":5702,"end_index":8130,"start_time_s":0.022808,"end_time_s":0.03252,"duration_s":0.009712},{"flag":1,"start_index":8130,"end_index":8193,"start_time_s":0.03252,"end_time_s":0.032771999999999996,"duration_s":0.000252},{"flag":2,"start_index":8193,"end_index":8853,"start_time_s":0.032771999999999996,"end_time_s":0.035412,"duration_s":0.00264},{"flag":1,"start_index":8853,"end_index":8855,"start_time_s":0.035412,"end_time_s":0.03542,"duration_s":8e-06},{"flag":3,"start_index":8855,"end_index":10133,"start_time_s":0.03542,"end_time_s":0.040532,"duration_s":0.005111999999999999},{"flag":1,"start_index":10133,"end_index":10194,"start_time_s":0.040532,"end_time_s":0.040776,"duration_s":0.000244},{"flag":2,"start_index":10194,"end_index":10856,"start_time_s":0.040776,"end_time_s":0.043424,"duration_s":0.0026479999999999997},{"flag":1,"start_index":10856,"end_index":10858,"start_time_s":0.043424,"end_time_s":0.043432,"duration_s":8e-06},{"flag":3,"start_index":10858,"end_index":12089,"start_time_s":0.043432,"end_time_s":0.048355999999999996,"duration_s":0.0049239999999999996},{"flag":1,"start_index":12089,"end_index":12149,"start_time_s":0.048355999999999996,"end_time_s":0.048596,"duration_s":0.00023999999999999998},{"flag":2,"start_index":12149,"end_index":13333,"start_time_s":0.048596,"end_time_s":0.053332,"duration_s":0.004736},{"flag":1,"start_index":13333,"end_index":13335,"start_time_s":0.053332,"end_time_s":0.05334,"duration_s":8e-06},{"flag":3,"start_index":13335,"end_index":14614,"start_time_s":0.05334,"end_time_s":0.058455999999999994,"duration_s":0.005116},{"flag":1,"start_index":14614,"end_index":14675,"start_time_s":0.058455999999999994,"end_time_s":0.058699999999999995,"duration_s":0.000244},{"flag":2,"start_index":14675,"end_index":15999,"start_time_s":0.058699999999999995,"end_time_s":0.063996,"duration_s":0.0052959999999999995},{"flag":1,"start_index":15999,"end_index":16002,"start_time_s":0.063996,"end_time_s":0.064008,"duration_s":1.2e-05},{"flag":3,"start_index":16002,"end_index":17252,"start_time_s":0.064008,"end_time_s":0.069008,"duration_s":0.005},{"flag":1,"start_index":17252,"end_index":17307,"start_time_s":0.069008,"end_time_s":0.069228,"duration_s":0.00021999999999999998},{"flag":2,"start_index":17307,"end_index":18666,"start_time_s":0.069228,"end_time_s":0.074664,"duration_s":0.005436},{"flag":1,"start_index":18666,"end_index":18668,"start_time_s":0.074664,"end_time_s":0.074672,"duration_s":8e-06},{"flag":3,"start_index":18668,"end_index":19955,"start_time_s":0.074672,"end_time_s":0.07982,"duration_s":0.005148},{"flag":1,"start_index":19955,"end_index":20017,"start_time_s":0.07982,"end_time_s":0.080068,"duration_s":0.000248},{"flag":2,"start_index":20017,"end_index":21333,"start_time_s":0.080068,"end_time_s":0.08533199999999999,"duration_s":0.005264},{"flag":1,"start_index":21333,"end_index":21335,"start_time_s":0.08533199999999999,"end_time_s":0.08534,"duration_s":8e-06},{"flag":3,"start_index":21335,"end_index":24614,"start_time_s":0.08534,"end_time_s":0.098456,"duration_s":0.013116},{"flag":1,"start_index":24614,"end_index":24676,"start_time_s":0.098456,"end_time_s":0.098704,"duration_s":0.000248},{"flag":2,"start_index":24676,"end_index":25336,"start_time_s":0.098704,"end_time_s":0.10134399999999999,"duration_s":0.00264},{"flag":1,"start_index":25336,"end_index":25338,"start_time_s":0.10134399999999999,"end_time_s":0.101352,"duration_s":8e-06},{"flag":3,"start_index":25338,"end_index":27112,"start_time_s":0.101352,"end_time_s":0.10844799999999999,"duration_s":0.007096},{"flag":1,"start_index":27112,"end_index":27173,"start_time_s":0.10844799999999999,"end_time_s":0.108692,"duration_s":0.000244},{"flag":2,"start_index":27173,"end_index":27834,"start_time_s":0.108692,"end_time_s":0.11133599999999999,"duration_s":0.002644},{"flag":1,"start_index":27834,"end_index":27836,"start_time_s":0.11133599999999999,"end_time_s":0.111344,"duration_s":8e-06},{"flag":3,"start_index":27836,"end_index":27838,"start_time_s":0.111344,"end_time_s":0.11135199999999999,"duration_s":8e-06},{"flag":1,"start_index":27838,"end_index":27896,"start_time_s":0.11135199999999999,"end_time_s":0.11158399999999999,"duration_s":0.000232},{"flag":2,"start_index":27896,"end_index":29333,"start_time_s":0.11158399999999999,"end_time_s":0.11733199999999999,"duration_s":0.005748},{"flag":1,"start_index":29333,"end_index":29335,"start_time_s":0.11733199999999999,"end_time_s":0.11734,"duration_s":8e-06},{"flag":3,"start_index":29335,"end_index":29337,"start_time_s":0.11734,"end_time_s":0.117348,"duration_s":8e-06},{"flag":1,"start_index":29337,"end_index":29396,"start_time_s":0.117348,"end_time_s":0.117584,"duration_s":0.000236},{"flag":2,"start_index":29396,"end_index":31999,"start_time_s":0.117584,"end_time_s":0.127996,"duration_s":0.010412},{"flag":1,"start_index":31999,"end_index":32002,"start_time_s":0.127996,"end_time_s":0.12800799999999998,"duration_s":1.2e-05},{"flag":3,"start_index":32002,"end_index":32004,"start_time_s":0.12800799999999998,"end_time_s":0.128016,"duration_s":8e-06},{"flag":1,"start_index":32004,"end_index":32062,"start_time_s":0.128016,"end_time_s":0.128248,"duration_s":0.000232},{"flag":2,"start_index":32062,"end_index":34666,"start_time_s":0.128248,"end_time_s":0.13866399999999998,"duration_s":0.010416},{"flag":1,"start_index":34666,"end_index":34668,"start_time_s":0.13866399999999998,"end_time_s":0.138672,"duration_s":8e-06},{"flag":3,"start_index":34668,"end_index":36978,"start_time_s":0.138672,"end_time_s":0.147912,"duration_s":0.00924},{"flag":1,"start_index":36978,"end_index":37037,"start_time_s":0.147912,"end_time_s":0.148148,"duration_s":0.000236},{"flag":2,"start_index":37037,"end_index":37698,"start_time_s":0.148148,"end_time_s":0.15079199999999998,"duration_s":0.002644},{"flag":1,"start_index":37698,"end_index":37700,"start_time_s":0.15079199999999998,"end_time_s":0.1508,"duration_s":8e-06},{"flag":3,"start_index":37700,"end_index":40080,"start_time_s":0.1508,"end_time_s":0.16032,"duration_s":0.009519999999999999},{"flag":1,"start_index":40080,"end_index":40142,"start_time_s":0.16032,"end_time_s":0.160568,"duration_s":0.000248},{"flag":2,"start_index":40142,"end_index":40803,"start_time_s":0.160568,"end_time_s":0.163212,"duration_s":0.002644},{"flag":1,"start_index":40803,"end_index":40805,"start_time_s":0.163212,"end_time_s":0.16322,"duration_s":8e-06},{"flag":3,"start_index":40805,"end_index":42060,"start_time_s":0.16322,"end_time_s":0.16824,"duration_s":0.00502},{"flag":1,"start_index":42060,"end_index":42121,"start_time_s":0.16824,"end_time_s":0.168484,"duration_s":0.000244},{"flag":2,"start_index":42121,"end_index":42782,"start_time_s":0.168484,"end_time_s":0.171128,"duration_s":0.002644},{"flag":1,"start_index":42782,"end_index":42784,"start_time_s":0.171128,"end_time_s":0.17113599999999998,"duration_s":8e-06},{"flag":3,"start_index":42784,"end_index":43987,"start_time_s":0.17113599999999998,"end_time_s":0.175948,"duration_s":0.0048119999999999994},{"flag":1,"start_index":43987,"end_index":44053,"start_time_s":0.175948,"end_time_s":0.17621199999999998,"duration_s":0.00026399999999999997},{"flag":2,"start_index":44053,"end_index":45333,"start_time_s":0.17621199999999998,"end_time_s":0.181332,"duration_s":0.0051199999999999996},{"flag":1,"start_index":45333,"end_index":45335,"start_time_s":0.181332,"end_time_s":0.18134,"duration_s":8e-06},{"flag":3,"start_index":45335,"end_index":46617,"start_time_s":0.18134,"end_time_s":0.186468,"duration_s":0.005128},{"flag":1,"start_index":46617,"end_index":46678,"start_time_s":0.186468,"end_time_s":0.186712,"duration_s":0.000244},{"flag":2,"start_index":46678,"end_index":47999,"start_time_s":0.186712,"end_time_s":0.191996,"duration_s":0.005284},{"flag":1,"start_index":47999,"end_index":48001,"start_time_s":0.191996,"end_time_s":0.19200399999999998,"duration_s":8e-06},{"flag":3,"start_index":48001,"end_index":49241,"start_time_s":0.19200399999999998,"end_time_s":0.196964,"duration_s":0.00496},{"flag":1,"start_index":49241,"end_index":49303,"start_time_s":0.196964,"end_time_s":0.197212,"duration_s":0.000248},{"flag":2,"start_index":49303,"end_index":50666,"start_time_s":0.197212,"end_time_s":0.20266399999999998,"duration_s":0.005451999999999999},{"flag":1,"start_index":50666,"end_index":50668,"start_time_s":0.20266399999999998,"end_time_s":0.202672,"duration_s":8e-06},{"flag":3,"start_index":50668,"end_index":51961,"start_time_s":0.202672,"end_time_s":0.207844,"duration_s":0.0051719999999999995},{"flag":1,"start_index":51961,"end_index":52155,"start_time_s":0.207844,"end_time_s":0.20862,"duration_s":0.000776},{"flag":2,"start_index":52155,"end_index":53333,"start_time_s":0.20862,"end_time_s":0.213332,"duration_s":0.004712},{"flag":1,"start_index":53333,"end_index":53335,"start_time_s":0.213332,"end_time_s":0.21334,"duration_s":8e-06},{"flag":3,"start_index":53335,"end_index":56588,"start_time_s":0.21334,"end_time_s":0.226352,"duration_s":0.013012},{"flag":1,"start_index":56588,"end_index":56649,"start_time_s":0.226352,"end_time_s":0.226596,"duration_s":0.000244},{"flag":2,"start_index":56649,"end_index":57310,"start_time_s":0.226596,"end_time_s":0.22924,"duration_s":0.002644},{"flag":1,"start_index":57310,"end_index":57312,"start_time_s":0.22924,"end_time_s":0.22924799999999998,"duration_s":8e-06},{"flag":3,"start_index":57312,"end_index":59146,"start_time_s":0.22924799999999998,"end_time_s":0.236584,"duration_s":0.007336},{"flag":1,"start_index":59146,"end_index":59208,"start_time_s":0.236584,"end_time_s":0.236832,"duration_s":0.000248},{"flag":2,"start_index":59208,"end_index":59868,"start_time_s":0.236832,"end_time_s":0.239472,"duration_s":0.00264},{"flag":1,"start_index":59868,"end_index":59870,"start_time_s":0.239472,"end_time_s":0.23948,"duration_s":8e-06},{"flag":3,"start_index":59870,"end_index":59872,"start_time_s":0.23948,"end_time_s":0.23948799999999998,"duration_s":8e-06},{"flag":1,"start_index":59872,"end_index":59931,"start_time_s":0.23948799999999998,"end_time_s":0.239724,"duration_s":0.000236},{"flag":2,"start_index":59931,"end_index":61333,"start_time_s":0.239724,"end_time_s":0.245332,"duration_s":0.005608},{"flag":1,"start_index":61333,"end_index":61335,"start_time_s":0.245332,"end_time_s":0.24534,"duration_s":8e-06},{"flag":3,"start_index":61335,"end_index":61337,"start_time_s":0.24534,"end_time_s":0.24534799999999998,"duration_s":8e-06},{"flag":1,"start_index":61337,"end_index":61395,"start_time_s":0.24534799999999998,"end_time_s":0.24558,"duration_s":0.000232},{"flag":2,"start_index":61395,"end_index":63999,"start_time_s":0.24558,"end_time_s":0.255996,"duration_s":0.010416},{"flag":1,"start_index":63999,"end_index":64001,"start_time_s":0.255996,"end_time_s":0.256004,"duration_s":8e-06},{"flag":3,"start_index":64001,"end_index":64003,"start_time_s":0.256004,"end_time_s":0.25601199999999996,"duration_s":8e-06},{"flag":1,"start_index":64003,"end_index":64062,"start_time_s":0.25601199999999996,"end_time_s":0.256248,"duration_s":0.000236},{"flag":2,"start_index":64062,"end_index":66666,"start_time_s":0.256248,"end_time_s":0.266664,"duration_s":0.010416},{"flag":1,"start_index":66666,"end_index":66668,"start_time_s":0.266664,"end_time_s":0.26667199999999996,"duration_s":8e-06},{"flag":3,"start_index":66668,"end_index":68984,"start_time_s":0.26667199999999996,"end_time_s":0.275936,"duration_s":0.009264},{"flag":1,"start_index":68984,"end_index":69037,"start_time_s":0.275936,"end_time_s":0.276148,"duration_s":0.000212},{"flag":2,"start_index":69037,"end_index":69699,"start_time_s":0.276148,"end_time_s":0.278796,"duration_s":0.0026479999999999997},{"flag":1,"start_index":69699,"end_index":69701,"start_time_s":0.278796,"end_time_s":0.278804,"duration_s":8e-06},{"flag":3,"start_index":69701,"end_index":72082,"start_time_s":0.278804,"end_time_s":0.288328,"duration_s":0.009524},{"flag":1,"start_index":72082,"end_index":72144,"start_time_s":0.288328,"end_time_s":0.288576,"duration_s":0.000248},{"flag":2,"start_index":72144,"end_index":72804,"start_time_s":0.288576,"end_time_s":0.291216,"duration_s":0.00264},{"flag":1,"start_index":72804,"end_index":72806,"start_time_s":0.291216,"end_time_s":0.291224,"duration_s":8e-06},{"flag":3,"start_index":72806,"end_index":74041,"start_time_s":0.291224,"end_time_s":0.296164,"duration_s":0.00494},{"flag":1,"start_index":74041,"end_index":74102,"start_time_s":0.296164,"end_time_s":0.296408,"duration_s":0.000244},{"flag":2,"start_index":74102,"end_index":74763,"start_time_s":0.296408,"end_time_s":0.299052,"duration_s":0.002644},{"flag":1,"start_index":74763,"end_index":74765,"start_time_s":0.299052,"end_time_s":0.29906,"duration_s":8e-06},{"flag":3,"start_index":74765,"end_index":75986,"start_time_s":0.29906,"end_time_s":0.303944,"duration_s":0.0048839999999999995},{"flag":1,"start_index":75986,"end_index":76052,"start_time_s":0.303944,"end_time_s":0.304208,"duration_s":0.00026399999999999997},{"flag":2,"start_index":76052,"end_index":77332,"start_time_s":0.304208,"end_time_s":0.309328,"duration_s":0.0051199999999999996},{"flag":1,"start_index":77332,"end_index":77335,"start_time_s":0.309328,"end_time_s":0.30934,"duration_s":1.2e-05},{"flag":3,"start_index":77335,"end_index":78605,"start_time_s":0.30934,"end_time_s":0.31442,"duration_s":0.0050799999999999994},{"flag":1,"start_index":78605,"end_index":78667,"start_time_s":0.31442,"end_time_s":0.314668,"duration_s":0.000248},{"flag":2,"start_index":78667,"end_index":79999,"start_time_s":0.314668,"end_time_s":0.319996,"duration_s":0.005327999999999999},{"flag":1,"start_index":79999,"end_index":80001,"start_time_s":0.319996,"end_time_s":0.320004,"duration_s":8e-06},{"flag":3,"start_index":80001,"end_index":81255,"start_time_s":0.320004,"end_time_s":0.32502,"duration_s":0.005016},{"flag":1,"start_index":81255,"end_index":81316,"start_time_s":0.32502,"end_time_s":0.325264,"duration_s":0.000244},{"flag":2,"start_index":81316,"end_index":82666,"start_time_s":0.325264,"end_time_s":0.33066399999999996,"duration_s":0.005399999999999999},{"flag":1,"start_index":82666,"end_index":82668,"start_time_s":0.33066399999999996,"end_time_s":0.33067199999999997,"duration_s":8e-06},{"flag":3,"start_index":82668,"end_index":83957,"start_time_s":0.33067199999999997,"end_time_s":0.33582799999999996,"duration_s":0.005156},{"flag":1,"start_index":83957,"end_index":84019,"start_time_s":0.33582799999999996,"end_time_s":0.336076,"duration_s":0.000248},{"flag":2,"start_index":84019,"end_index":85332,"start_time_s":0.336076,"end_time_s":0.34132799999999996,"duration_s":0.005252},{"flag":1,"start_index":85332,"end_index":85335,"start_time_s":0.34132799999999996,"end_time_s":0.34134,"duration_s":1.2e-05},{"flag":3,"start_index":85335,"end_index":88621,"start_time_s":0.34134,"end_time_s":0.35448399999999997,"duration_s":0.013144},{"flag":1,"start_index":88621,"end_index":88682,"start_time_s":0.35448399999999997,"end_time_s":0.354728,"duration_s":0.000244},{"flag":2,"start_index":88682,"end_index":89342,"start_time_s":0.354728,"end_time_s":0.35736799999999996,"duration_s":0.00264},{"flag":1,"start_index":89342,"end_index":89344,"start_time_s":0.35736799999999996,"end_time_s":0.35737599999999997,"duration_s":8e-06},{"flag":3,"start_index":89344,"end_index":91129,"start_time_s":0.35737599999999997,"end_time_s":0.364516,"duration_s":0.00714},{"flag":1,"start_index":91129,"end_index":91190,"start_time_s":0.364516,"end_time_s":0.36476,"duration_s":0.000244},{"flag":2,"start_index":91190,"end_index":91851,"start_time_s":0.36476,"end_time_s":0.367404,"duration_s":0.002644},{"flag":1,"start_index":91851,"end_index":91853,"start_time_s":0.367404,"end_time_s":0.36741199999999996,"duration_s":8e-06},{"flag":3,"start_index":91853,"end_index":91855,"start_time_s":0.36741199999999996,"end_time_s":0.36741999999999997,"duration_s":8e-06},{"flag":1,"start_index":91855,"end_index":91914,"start_time_s":0.36741999999999997,"end_time_s":0.367656,"duration_s":0.000236},{"flag":2,"start_index":91914,"end_index":93332,"start_time_s":0.367656,"end_time_s":0.373328,"duration_s":0.005672},{"flag":1,"start_index":93332,"end_index":93335,"start_time_s":0.373328,"end_time_s":0.37334,"duration_s":1.2e-05},{"flag":3,"start_index":93335,"end_index":93337,"start_time_s":0.37334,"end_time_s":0.37334799999999996,"duration_s":8e-06},{"flag":1,"start_index":93337,"end_index":93395,"start_time_s":0.37334799999999996,"end_time_s":0.37357999999999997,"duration_s":0.000232},{"flag":2,"start_index":93395,"end_index":95999,"start_time_s":0.37357999999999997,"end_time_s":0.383996,"duration_s":0.010416},{"flag":1,"start_index":95999,"end_index":96001,"start_time_s":0.383996,"end_time_s":0.38400399999999996,"duration_s":8e-06},{"flag":3,"start_index":96001,"end_index":96003,"start_time_s":0.38400399999999996,"end_time_s":0.38401199999999996,"duration_s":8e-06},{"flag":1,"start_index":96003,"end_index":96062,"start_time_s":0.38401199999999996,"end_time_s":0.384248,"duration_s":0.000236},{"flag":2,"start_index":96062,"end_index":98666,"start_time_s":0.384248,"end_time_s":0.39466399999999996,"duration_s":0.010416},{"flag":1,"start_index":98666,"end_index":98668,"start_time_s":0.39466399999999996,"end_time_s":0.39467199999999997,"duration_s":8e-06},{"flag":3,"start_index":98668,"end_index":101006,"start_time_s":0.39467199999999997,"end_time_s":0.404024,"duration_s":0.009352},{"flag":1,"start_index":101006,"end_index":101064,"start_time_s":0.404024,"end_time_s":0.404256,"duration_s":0.000232},{"flag":2,"start_index":101064,"end_index":101725,"start_time_s":0.404256,"end_time_s":0.4069,"duration_s":0.002644},{"flag":1,"start_index":101725,"end_index":101727,"start_time_s":0.4069,"end_time_s":0.406908,"duration_s":8e-06},{"flag":3,"start_index":101727,"end_index":104147,"start_time_s":0.406908,"end_time_s":0.41658799999999996,"duration_s":0.00968},{"flag":1,"start_index":104147,"end_index":104209,"start_time_s":0.41658799999999996,"end_time_s":0.416836,"duration_s":0.000248},{"flag":2,"start_index":104209,"end_index":104870,"start_time_s":0.416836,"end_time_s":0.41947999999999996,"duration_s":0.002644},{"flag":1,"start_index":104870,"end_index":104872,"start_time_s":0.41947999999999996,"end_time_s":0.41948799999999997,"duration_s":8e-06},{"flag":3,"start_index":104872,"end_index":106120,"start_time_s":0.41948799999999997,"end_time_s":0.42447999999999997,"duration_s":0.004992},{"flag":1,"start_index":106120,"end_index":106182,"start_time_s":0.42447999999999997,"end_time_s":0.424728,"duration_s":0.000248},{"flag":2,"start_index":106182,"end_index":106843,"start_time_s":0.424728,"end_time_s":0.427372,"duration_s":0.002644},{"flag":1,"start_index":106843,"end_index":106845,"start_time_s":0.427372,"end_time_s":0.42738,"duration_s":8e-06},{"flag":3,"start_index":106845,"end_index":108116,"start_time_s":0.42738,"end_time_s":0.43246399999999996,"duration_s":0.005084},{"flag":1,"start_index":108116,"end_index":108177,"start_time_s":0.43246399999999996,"end_time_s":0.432708,"duration_s":0.000244},{"flag":2,"start_index":108177,"end_index":109332,"start_time_s":0.432708,"end_time_s":0.437328,"duration_s":0.00462},{"flag":1,"start_index":109332,"end_index":109335,"start_time_s":0.437328,"end_time_s":0.43734,"duration_s":1.2e-05},{"flag":3,"start_index":109335,"end_index":110581,"start_time_s":0.43734,"end_time_s":0.442324,"duration_s":0.004984},{"flag":1,"start_index":110581,"end_index":110639,"start_time_s":0.442324,"end_time_s":0.442556,"duration_s":0.000232},{"flag":2,"start_index":110639,"end_index":111999,"start_time_s":0.442556,"end_time_s":0.447996,"duration_s":0.0054399999999999995},{"flag":1,"start_index":111999,"end_index":112001,"start_time_s":0.447996,"end_time_s":0.44800399999999996,"duration_s":8e-06},{"flag":3,"start_index":112001,"end_index":113266,"start_time_s":0.44800399999999996,"end_time_s":0.45306399999999997,"duration_s":0.005059999999999999},{"flag":1,"start_index":113266,"end_index":113325,"start_time_s":0.45306399999999997,"end_time_s":0.4533,"duration_s":0.000236},{"flag":2,"start_index":113325,"end_index":114666,"start_time_s":0.4533,"end_time_s":0.45866399999999996,"duration_s":0.005364},{"flag":1,"start_index":114666,"end_index":114668,"start_time_s":0.45866399999999996,"end_time_s":0.45867199999999997,"duration_s":8e-06},{"flag":3,"start_index":114668,"end_index":115972,"start_time_s":0.45867199999999997,"end_time_s":0.46388799999999997,"duration_s":0.005216},{"flag":1,"start_index":115972,"end_index":116166,"start_time_s":0.46388799999999997,"end_time_s":0.46466399999999997,"duration_s":0.000776},{"flag":2,"start_index":116166,"end_index":117332,"start_time_s":0.46466399999999997,"end_time_s":0.46932799999999997,"duration_s":0.004664},{"flag":1,"start_index":117332,"end_index":117334,"start_time_s":0.46932799999999997,"end_time_s":0.469336,"duration_s":8e-06},{"flag":3,"start_index":117334,"end_index":120628,"start_time_s":0.469336,"end_time_s":0.482512,"duration_s":0.013176},{"flag":1,"start_index":120628,"end_index":120684,"start_time_s":0.482512,"end_time_s":0.482736,"duration_s":0.000224},{"flag":2,"start_index":120684,"end_index":121344,"start_time_s":0.482736,"end_time_s":0.485376,"duration_s":0.00264},{"flag":1,"start_index":121344,"end_index":121346,"start_time_s":0.485376,"end_time_s":0.485384,"duration_s":8e-06},{"flag":3,"start_index":121346,"end_index":123181,"start_time_s":0.485384,"end_time_s":0.492724,"duration_s":0.007339999999999999},{"flag":1,"start_index":123181,"end_index":123242,"start_time_s":0.492724,"end_time_s":0.49296799999999996,"duration_s":0.000244},{"flag":2,"start_index":123242,"end_index":123903,"start_time_s":0.49296799999999996,"end_time_s":0.495612,"duration_s":0.002644},{"flag":1,"start_index":123903,"end_index":123906,"start_time_s":0.495612,"end_time_s":0.49562399999999995,"duration_s":1.2e-05},{"flag":3,"start_index":123906,"end_index":123908,"start_time_s":0.49562399999999995,"end_time_s":0.49563199999999996,"duration_s":8e-06},{"flag":1,"start_index":123908,"end_index":123967,"start_time_s":0.49563199999999996,"end_time_s":0.495868,"duration_s":0.000236},{"flag":2,"start_index":123967,"end_index":125332,"start_time_s":0.495868,"end_time_s":0.501328,"duration_s":0.00546},{"flag":1,"start_index":125332,"end_index":125334,"start_time_s":0.501328,"end_time_s":0.501336,"duration_s":8e-06},{"flag":3,"start_index":125334,"end_index":125336,"start_time_s":0.501336,"end_time_s":0.501344,"duration_s":8e-06},{"flag":1,"start_index":125336,"end_index":125395,"start_time_s":0.501344,"end_time_s":0.50158,"duration_s":0.000236},{"flag":2,"start_index":125395,"end_index":127999,"start_time_s":0.50158,"end_time_s":0.511996,"duration_s":0.010416},{"flag":1,"start_index":127999,"end_index":128001,"start_time_s":0.511996,"end_time_s":0.512004,"duration_s":8e-06},{"flag":3,"start_index":128001,"end_index":128003,"start_time_s":0.512004,"end_time_s":0.512012,"duration_s":8e-06},{"flag":1,"start_index":128003,"end_index":128062,"start_time_s":0.512012,"end_time_s":0.5122479999999999,"duration_s":0.000236},{"flag":2,"start_index":128062,"end_index":130665,"start_time_s":0.5122479999999999,"end_time_s":0.52266,"duration_s":0.010412},{"flag":1,"start_index":130665,"end_index":130668,"start_time_s":0.52266,"end_time_s":0.522672,"duration_s":1.2e-05},{"flag":3,"start_index":130668,"end_index":132967,"start_time_s":0.522672,"end_time_s":0.531868,"duration_s":0.009196},{"flag":1,"start_index":132967,"end_index":133026,"start_time_s":0.531868,"end_time_s":0.532104,"duration_s":0.000236},{"flag":2,"start_index":133026,"end_index":133687,"start_time_s":0.532104,"end_time_s":0.534748,"duration_s":0.002644},{"flag":1,"start_index":133687,"end_index":133690,"start_time_s":0.534748,"end_time_s":0.53476,"duration_s":1.2e-05},{"flag":3,"start_index":133690,"end_index":136104,"start_time_s":0.53476,"end_time_s":0.544416,"duration_s":0.009656},{"flag":1,"start_index":136104,"end_index":136166,"start_time_s":0.544416,"end_time_s":0.5446639999999999,"duration_s":0.000248},{"flag":2,"start_index":136166,"end_index":136821,"start_time_s":0.5446639999999999,"end_time_s":0.547284,"duration_s":0.00262},{"flag":1,"start_index":136821,"end_index":136823,"start_time_s":0.547284,"end_time_s":0.547292,"duration_s":8e-06},{"flag":3,"start_index":136823,"end_index":138086,"start_time_s":0.547292,"end_time_s":0.552344,"duration_s":0.005052},{"flag":1,"start_index":138086,"end_index":138141,"start_time_s":0.552344,"end_time_s":0.5525639999999999,"duration_s":0.00021999999999999998},{"flag":2,"start_index":138141,"end_index":138802,"start_time_s":0.5525639999999999,"end_time_s":0.5552079999999999,"duration_s":0.002644},{"flag":1,"start_index":138802,"end_index":138804,"start_time_s":0.5552079999999999,"end_time_s":0.5552159999999999,"duration_s":8e-06},{"flag":3,"start_index":138804,"end_index":140070,"start_time_s":0.5552159999999999,"end_time_s":0.56028,"duration_s":0.005064},{"flag":1,"start_index":140070,"end_index":140131,"start_time_s":0.56028,"end_time_s":0.560524,"duration_s":0.000244},{"flag":2,"start_index":140131,"end_index":141332,"start_time_s":0.560524,"end_time_s":0.5653279999999999,"duration_s":0.004804},{"flag":1,"start_index":141332,"end_index":141334,"start_time_s":0.5653279999999999,"end_time_s":0.565336,"duration_s":8e-06},{"flag":3,"start_index":141334,"end_index":142067,"start_time_s":0.565336,"end_time_s":0.568268,"duration_s":0.0029319999999999997},{"flag":2,"start_index":142067,"end_index":142140,"start_time_s":0.568268,"end_time_s":0.56856,"duration_s":0.000292},{"flag":3,"start_index":142140,"end_index":142564,"start_time_s":0.56856,"end_time_s":0.570256,"duration_s":0.001696},{"flag":1,"start_index":142564,"end_index":142625,"start_time_s":0.570256,"end_time_s":0.5705,"duration_s":0.000244},{"flag":2,"start_index":142625,"end_index":143999,"start_time_s":0.5705,"end_time_s":0.575996,"duration_s":0.005496},{"flag":1,"start_index":143999,"end_index":144001,"start_time_s":0.575996,"end_time_s":0.576004,"duration_s":8e-06},{"flag":3,"start_index":144001,"end_index":145283,"start_time_s":0.576004,"end_time_s":0.581132,"duration_s":0.005128},{"flag":1,"start_index":145283,"end_index":145344,"start_time_s":0.581132,"end_time_s":0.581376,"duration_s":0.000244},{"flag":2,"start_index":145344,"end_index":146666,"start_time_s":0.581376,"end_time_s":0.586664,"duration_s":0.005288},{"flag":1,"start_index":146666,"end_index":146668,"start_time_s":0.586664,"end_time_s":0.586672,"duration_s":8e-06},{"flag":3,"start_index":146668,"end_index":147968,"start_time_s":0.586672,"end_time_s":0.591872,"duration_s":0.0052},{"flag":1,"start_index":147968,"end_index":148029,"start_time_s":0.591872,"end_time_s":0.592116,"duration_s":0.000244},{"flag":2,"start_index":148029,"end_index":149332,"start_time_s":0.592116,"end_time_s":0.597328,"duration_s":0.005212},{"flag":1,"start_index":149332,"end_index":149334,"start_time_s":0.597328,"end_time_s":0.597336,"duration_s":8e-06},{"flag":3,"start_index":149334,"end_index":152573,"start_time_s":0.597336,"end_time_s":0.610292,"duration_s":0.012955999999999999},{"flag":1,"start_index":152573,"end_index":152635,"start_time_s":0.610292,"end_time_s":0.61054,"duration_s":0.000248},{"flag":2,"start_index":152635,"end_index":153295,"start_time_s":0.61054,"end_time_s":0.61318,"duration_s":0.00264},{"flag":1,"start_index":153295,"end_index":153297,"start_time_s":0.61318,"end_time_s":0.613188,"duration_s":8e-06},{"flag":3,"start_index":153297,"end_index":155117,"start_time_s":0.613188,"end_time_s":0.620468,"duration_s":0.00728},{"flag":1,"start_index":155117,"end_index":155172,"start_time_s":0.620468,"end_time_s":0.620688,"duration_s":0.00021999999999999998},{"flag":2,"start_index":155172,"end_index":155832,"start_time_s":0.620688,"end_time_s":0.623328,"duration_s":0.00264},{"flag":1,"start_index":155832,"end_index":155835,"start_time_s":0.623328,"end_time_s":0.62334,"duration_s":1.2e-05},{"flag":3,"start_index":155835,"end_index":155837,"start_time_s":0.62334,"end_time_s":0.623348,"duration_s":8e-06},{"flag":1,"start_index":155837,"end_index":155895,"start_time_s":0.623348,"end_time_s":0.62358,"duration_s":0.000232},{"flag":2,"start_index":155895,"end_index":157332,"start_time_s":0.62358,"end_time_s":0.629328,"duration_s":0.005748},{"flag":1,"start_index":157332,"end_index":157334,"start_time_s":0.629328,"end_time_s":0.629336,"duration_s":8e-06},{"flag":3,"start_index":157334,"end_index":157336,"start_time_s":0.629336,"end_time_s":0.629344,"duration_s":8e-06},{"flag":1,"start_index":157336,"end_index":157395,"start_time_s":0.629344,"end_time_s":0.6295799999999999,"duration_s":0.000236},{"flag":2,"start_index":157395,"end_index":159999,"start_time_s":0.6295799999999999,"end_time_s":0.639996,"duration_s":0.010416},{"flag":1,"start_index":159999,"end_index":160001,"start_time_s":0.639996,"end_time_s":0.640004,"duration_s":8e-06},{"flag":3,"start_index":160001,"end_index":160003,"start_time_s":0.640004,"end_time_s":0.640012,"duration_s":8e-06},{"flag":1,"start_index":160003,"end_index":160062,"start_time_s":0.640012,"end_time_s":0.6402479999999999,"duration_s":0.000236},{"flag":2,"start_index":160062,"end_index":162665,"start_time_s":0.6402479999999999,"end_time_s":0.65066,"duration_s":0.010412},{"flag":1,"start_index":162665,"end_index":162667,"start_time_s":0.65066,"end_time_s":0.650668,"duration_s":8e-06},{"flag":3,"start_index":162667,"end_index":164956,"start_time_s":0.650668,"end_time_s":0.659824,"duration_s":0.009156},{"flag":1,"start_index":164956,"end_index":165015,"start_time_s":0.659824,"end_time_s":0.66006,"duration_s":0.000236},{"flag":2,"start_index":165015,"end_index":165676,"start_time_s":0.66006,"end_time_s":0.662704,"duration_s":0.002644},{"flag":1,"start_index":165676,"end_index":165678,"start_time_s":0.662704,"end_time_s":0.662712,"duration_s":8e-06},{"flag":3,"start_index":165678,"end_index":168108,"start_time_s":0.662712,"end_time_s":0.6724319999999999,"duration_s":0.00972},{"flag":1,"start_index":168108,"end_index":168167,"start_time_s":0.6724319999999999,"end_time_s":0.6726679999999999,"duration_s":0.000236},{"flag":2,"start_index":168167,"end_index":168821,"start_time_s":0.6726679999999999,"end_time_s":0.675284,"duration_s":0.002616},{"flag":1,"start_index":168821,"end_index":168823,"start_time_s":0.675284,"end_time_s":0.675292,"duration_s":8e-06},{"flag":3,"start_index":168823,"end_index":170087,"start_time_s":0.675292,"end_time_s":0.680348,"duration_s":0.005056},{"flag":1,"start_index":170087,"end_index":170148,"start_time_s":0.680348,"end_time_s":0.680592,"duration_s":0.000244},{"flag":2,"start_index":170148,"end_index":170809,"start_time_s":0.680592,"end_time_s":0.683236,"duration_s":0.002644},{"flag":1,"start_index":170809,"end_index":170811,"start_time_s":0.683236,"end_time_s":0.683244,"duration_s":8e-06},{"flag":3,"start_index":170811,"end_index":172067,"start_time_s":0.683244,"end_time_s":0.688268,"duration_s":0.005024},{"flag":1,"start_index":172067,"end_index":172127,"start_time_s":0.688268,"end_time_s":0.688508,"duration_s":0.00023999999999999998},{"flag":2,"start_index":172127,"end_index":173332,"start_time_s":0.688508,"end_time_s":0.6933279999999999,"duration_s":0.00482},{"flag":1,"start_index":173332,"end_index":173334,"start_time_s":0.6933279999999999,"end_time_s":0.693336,"duration_s":8e-06},{"flag":3,"start_index":173334,"end_index":174585,"start_time_s":0.693336,"end_time_s":0.69834,"duration_s":0.005004},{"flag":1,"start_index":174585,"end_index":174646,"start_time_s":0.69834,"end_time_s":0.698584,"duration_s":0.000244},{"flag":2,"start_index":174646,"end_index":175999,"start_time_s":0.698584,"end_time_s":0.703996,"duration_s":0.005412},{"flag":1,"start_index":175999,"end_index":176001,"start_time_s":0.703996,"end_time_s":0.704004,"duration_s":8e-06},{"flag":3,"start_index":176001,"end_index":177283,"start_time_s":0.704004,"end_time_s":0.709132,"duration_s":0.005128},{"flag":1,"start_index":177283,"end_index":177344,"start_time_s":0.709132,"end_time_s":0.709376,"duration_s":0.000244},{"flag":2,"start_index":177344,"end_index":178665,"start_time_s":0.709376,"end_time_s":0.71466,"duration_s":0.005284},{"flag":1,"start_index":178665,"end_index":178667,"start_time_s":0.71466,"end_time_s":0.714668,"duration_s":8e-06},{"flag":3,"start_index":178667,"end_index":179956,"start_time_s":0.714668,"end_time_s":0.719824,"duration_s":0.005156},{"flag":1,"start_index":179956,"end_index":180148,"start_time_s":0.719824,"end_time_s":0.720592,"duration_s":0.000768},{"flag":2,"start_index":180148,"end_index":181332,"start_time_s":0.720592,"end_time_s":0.725328,"duration_s":0.004736},{"flag":1,"start_index":181332,"end_index":181334,"start_time_s":0.725328,"end_time_s":0.725336,"duration_s":8e-06},{"flag":3,"start_index":181334,"end_index":184607,"start_time_s":0.725336,"end_time_s":0.738428,"duration_s":0.013092},{"flag":1,"start_index":184607,"end_index":184668,"start_time_s":0.738428,"end_time_s":0.738672,"duration_s":0.000244},{"flag":2,"start_index":184668,"end_index":185323,"start_time_s":0.738672,"end_time_s":0.741292,"duration_s":0.00262},{"flag":1,"start_index":185323,"end_index":185325,"start_time_s":0.741292,"end_time_s":0.7413,"duration_s":8e-06},{"flag":3,"start_index":185325,"end_index":187141,"start_time_s":0.7413,"end_time_s":0.748564,"duration_s":0.007264},{"flag":1,"start_index":187141,"end_index":187202,"start_time_s":0.748564,"end_time_s":0.7488079999999999,"duration_s":0.000244},{"flag":2,"start_index":187202,"end_index":187863,"start_time_s":0.7488079999999999,"end_time_s":0.751452,"duration_s":0.002644},{"flag":1,"start_index":187863,"end_index":187865,"start_time_s":0.751452,"end_time_s":0.75146,"duration_s":8e-06},{"flag":3,"start_index":187865,"end_index":187867,"start_time_s":0.75146,"end_time_s":0.7514679999999999,"duration_s":8e-06},{"flag":1,"start_index":187867,"end_index":187926,"start_time_s":0.7514679999999999,"end_time_s":0.7517039999999999,"duration_s":0.000236},{"flag":2,"start_index":187926,"end_index":189332,"start_time_s":0.7517039999999999,"end_time_s":0.757328,"duration_s":0.005624},{"flag":1,"start_index":189332,"end_index":189334,"start_time_s":0.757328,"end_time_s":0.757336,"duration_s":8e-06},{"flag":3,"start_index":189334,"end_index":189336,"start_time_s":0.757336,"end_time_s":0.757344,"duration_s":8e-06},{"flag":1,"start_index":189336,"end_index":189395,"start_time_s":0.757344,"end_time_s":0.7575799999999999,"duration_s":0.000236},{"flag":2,"start_index":189395,"end_index":191998,"start_time_s":0.7575799999999999,"end_time_s":0.767992,"duration_s":0.010412},{"flag":1,"start_index":191998,"end_index":192001,"start_time_s":0.767992,"end_time_s":0.768004,"duration_s":1.2e-05},{"flag":3,"start_index":192001,"end_index":192003,"start_time_s":0.768004,"end_time_s":0.7680119999999999,"duration_s":8e-06},{"flag":1,"start_index":192003,"end_index":192061,"start_time_s":0.7680119999999999,"end_time_s":0.7682439999999999,"duration_s":0.000232},{"flag":2,"start_index":192061,"end_index":194665,"start_time_s":0.7682439999999999,"end_time_s":0.77866,"duration_s":0.010416},{"flag":1,"start_index":194665,"end_index":194667,"start_time_s":0.77866,"end_time_s":0.7786679999999999,"duration_s":8e-06},{"flag":3,"start_index":194667,"end_index":196945,"start_time_s":0.7786679999999999,"end_time_s":0.7877799999999999,"duration_s":0.009112},{"flag":1,"start_index":196945,"end_index":197005,"start_time_s":0.7877799999999999,"end_time_s":0.7880199999999999,"duration_s":0.00023999999999999998},{"flag":2,"start_index":197005,"end_index":197666,"start_time_s":0.7880199999999999,"end_time_s":0.7906639999999999,"duration_s":0.002644},{"flag":1,"start_index":197666,"end_index":197668,"start_time_s":0.7906639999999999,"end_time_s":0.7906719999999999,"duration_s":8e-06},{"flag":3,"start_index":197668,"end_index":200082,"start_time_s":0.7906719999999999,"end_time_s":0.8003279999999999,"duration_s":0.009656},{"flag":1,"start_index":200082,"end_index":200143,"start_time_s":0.8003279999999999,"end_time_s":0.800572,"duration_s":0.000244},{"flag":2,"start_index":200143,"end_index":200803,"start_time_s":0.800572,"end_time_s":0.8032119999999999,"duration_s":0.00264},{"flag":1,"start_index":200803,"end_index":200805,"start_time_s":0.8032119999999999,"end_time_s":0.8032199999999999,"duration_s":8e-06},{"flag":3,"start_index":200805,"end_index":202060,"start_time_s":0.8032199999999999,"end_time_s":0.80824,"duration_s":0.00502},{"flag":1,"start_index":202060,"end_index":202122,"start_time_s":0.80824,"end_time_s":0.808488,"duration_s":0.000248},{"flag":2,"start_index":202122,"end_index":202783,"start_time_s":0.808488,"end_time_s":0.811132,"duration_s":0.002644},{"flag":1,"start_index":202783,"end_index":202785,"start_time_s":0.811132,"end_time_s":0.81114,"duration_s":8e-06},{"flag":3,"start_index":202785,"end_index":204045,"start_time_s":0.81114,"end_time_s":0.81618,"duration_s":0.005039999999999999},{"flag":1,"start_index":204045,"end_index":204107,"start_time_s":0.81618,"end_time_s":0.8164279999999999,"duration_s":0.000248},{"flag":2,"start_index":204107,"end_index":205332,"start_time_s":0.8164279999999999,"end_time_s":0.821328,"duration_s":0.0049},{"flag":1,"start_index":205332,"end_index":205334,"start_time_s":0.821328,"end_time_s":0.821336,"duration_s":8e-06},{"flag":3,"start_index":205334,"end_index":206583,"start_time_s":0.821336,"end_time_s":0.826332,"duration_s":0.004996},{"flag":1,"start_index":206583,"end_index":206644,"start_time_s":0.826332,"end_time_s":0.826576,"duration_s":0.000244},{"flag":2,"start_index":206644,"end_index":207998,"start_time_s":0.826576,"end_time_s":0.831992,"duration_s":0.005416},{"flag":1,"start_index":207998,"end_index":208001,"start_time_s":0.831992,"end_time_s":0.832004,"duration_s":1.2e-05},{"flag":3,"start_index":208001,"end_index":209256,"start_time_s":0.832004,"end_time_s":0.837024,"duration_s":0.00502},{"flag":1,"start_index":209256,"end_index":209317,"start_time_s":0.837024,"end_time_s":0.837268,"duration_s":0.000244},{"flag":2,"start_index":209317,"end_index":210665,"start_time_s":0.837268,"end_time_s":0.84266,"duration_s":0.005392},{"flag":1,"start_index":210665,"end_index":210667,"start_time_s":0.84266,"end_time_s":0.842668,"duration_s":8e-06},{"flag":3,"start_index":210667,"end_index":211971,"start_time_s":0.842668,"end_time_s":0.847884,"duration_s":0.005216},{"flag":1,"start_index":211971,"end_index":212033,"start_time_s":0.847884,"end_time_s":0.848132,"duration_s":0.000248},{"flag":2,"start_index":212033,"end_index":213332,"start_time_s":0.848132,"end_time_s":0.853328,"duration_s":0.005196},{"flag":1,"start_index":213332,"end_index":213334,"start_time_s":0.853328,"end_time_s":0.853336,"duration_s":8e-06},{"flag":3,"start_index":213334,"end_index":216608,"start_time_s":0.853336,"end_time_s":0.866432,"duration_s":0.013096},{"flag":1,"start_index":216608,"end_index":216670,"start_time_s":0.866432,"end_time_s":0.86668,"duration_s":0.000248},{"flag":2,"start_index":216670,"end_index":217325,"start_time_s":0.86668,"end_time_s":0.8693,"duration_s":0.00262},{"flag":1,"start_index":217325,"end_index":217332,"start_time_s":0.8693,"end_time_s":0.869328,"duration_s":2.8e-05},{"flag":3,"start_index":217332,"end_index":219168,"start_time_s":0.869328,"end_time_s":0.876672,"duration_s":0.007344},{"flag":1,"start_index":219168,"end_index":219229,"start_time_s":0.876672,"end_time_s":0.8769159999999999,"duration_s":0.000244},{"flag":2,"start_index":219229,"end_index":219890,"start_time_s":0.8769159999999999,"end_time_s":0.87956,"duration_s":0.002644},{"flag":1,"start_index":219890,"end_index":219892,"start_time_s":0.87956,"end_time_s":0.8795679999999999,"duration_s":8e-06},{"flag":3,"start_index":219892,"end_index":219894,"start_time_s":0.8795679999999999,"end_time_s":0.8795759999999999,"duration_s":8e-06},{"flag":1,"start_index":219894,"end_index":219947,"start_time_s":0.8795759999999999,"end_time_s":0.879788,"duration_s":0.000212},{"flag":2,"start_index":219947,"end_index":221332,"start_time_s":0.879788,"end_time_s":0.885328,"duration_s":0.00554},{"flag":1,"start_index":221332,"end_index":221334,"start_time_s":0.885328,"end_time_s":0.885336,"duration_s":8e-06},{"flag":3,"start_index":221334,"end_index":221336,"start_time_s":0.885336,"end_time_s":0.8853439999999999,"duration_s":8e-06},{"flag":1,"start_index":221336,"end_index":221395,"start_time_s":0.8853439999999999,"end_time_s":0.8855799999999999,"duration_s":0.000236},{"flag":2,"start_index":221395,"end_index":223998,"start_time_s":0.8855799999999999,"end_time_s":0.895992,"duration_s":0.010412},{"flag":1,"start_index":223998,"end_index":224000,"start_time_s":0.895992,"end_time_s":0.8959999999999999,"duration_s":8e-06},{"flag":3,"start_index":224000,"end_index":224002,"start_time_s":0.8959999999999999,"end_time_s":0.8960079999999999,"duration_s":8e-06},{"flag":1,"start_index":224002,"end_index":224060,"start_time_s":0.8960079999999999,"end_time_s":0.8962399999999999,"duration_s":0.000232},{"flag":2,"start_index":224060,"end_index":226665,"start_time_s":0.8962399999999999,"end_time_s":0.9066599999999999,"duration_s":0.010419999999999999},{"flag":1,"start_index":226665,"end_index":226667,"start_time_s":0.9066599999999999,"end_time_s":0.9066679999999999,"duration_s":8e-06},{"flag":3,"start_index":226667,"end_index":228917,"start_time_s":0.9066679999999999,"end_time_s":0.9156679999999999,"duration_s":0.009},{"flag":1,"start_index":228917,"end_index":228976,"start_time_s":0.9156679999999999,"end_time_s":0.9159039999999999,"duration_s":0.000236},{"flag":2,"start_index":228976,"end_index":229637,"start_time_s":0.9159039999999999,"end_time_s":0.9185479999999999,"duration_s":0.002644},{"flag":1,"start_index":229637,"end_index":229639,"start_time_s":0.9185479999999999,"end_time_s":0.9185559999999999,"duration_s":8e-06},{"flag":3,"start_index":229639,"end_index":232050,"start_time_s":0.9185559999999999,"end_time_s":0.9281999999999999,"duration_s":0.009644},{"flag":1,"start_index":232050,"end_index":232112,"start_time_s":0.9281999999999999,"end_time_s":0.9284479999999999,"duration_s":0.000248},{"flag":2,"start_index":232112,"end_index":232773,"start_time_s":0.9284479999999999,"end_time_s":0.9310919999999999,"duration_s":0.002644},{"flag":1,"start_index":232773,"end_index":232775,"start_time_s":0.9310919999999999,"end_time_s":0.9310999999999999,"duration_s":8e-06},{"flag":3,"start_index":232775,"end_index":234050,"start_time_s":0.9310999999999999,"end_time_s":0.9361999999999999,"duration_s":0.0050999999999999995},{"flag":1,"start_index":234050,"end_index":234112,"start_time_s":0.9361999999999999,"end_time_s":0.936448,"duration_s":0.000248},{"flag":2,"start_index":234112,"end_index":234772,"start_time_s":0.936448,"end_time_s":0.9390879999999999,"duration_s":0.00264},{"flag":1,"start_index":234772,"end_index":234774,"start_time_s":0.9390879999999999,"end_time_s":0.9390959999999999,"duration_s":8e-06},{"flag":3,"start_index":234774,"end_index":236032,"start_time_s":0.9390959999999999,"end_time_s":0.944128,"duration_s":0.005032},{"flag":1,"start_index":236032,"end_index":236093,"start_time_s":0.944128,"end_time_s":0.944372,"duration_s":0.000244},{"flag":2,"start_index":236093,"end_index":237332,"start_time_s":0.944372,"end_time_s":0.949328,"duration_s":0.0049559999999999995},{"flag":1,"start_index":237332,"end_index":237334,"start_time_s":0.949328,"end_time_s":0.949336,"duration_s":8e-06},{"flag":3,"start_index":237334,"end_index":238565,"start_time_s":0.949336,"end_time_s":0.95426,"duration_s":0.0049239999999999996},{"flag":1,"start_index":238565,"end_index":238627,"start_time_s":0.95426,"end_time_s":0.9545079999999999,"duration_s":0.000248},{"flag":2,"start_index":238627,"end_index":239998,"start_time_s":0.9545079999999999,"end_time_s":0.959992,"duration_s":0.005484},{"flag":1,"start_index":239998,"end_index":240000,"start_time_s":0.959992,"end_time_s":0.96,"duration_s":8e-06},{"flag":3,"start_index":240000,"end_index":241243,"start_time_s":0.96,"end_time_s":0.9649719999999999,"duration_s":0.004972},{"flag":1,"start_index":241243,"end_index":241304,"start_time_s":0.9649719999999999,"end_time_s":0.965216,"duration_s":0.000244},{"flag":2,"start_index":241304,"end_index":242665,"start_time_s":0.965216,"end_time_s":0.97066,"duration_s":0.005444},{"flag":1,"start_index":242665,"end_index":242667,"start_time_s":0.97066,"end_time_s":0.970668,"duration_s":8e-06},{"flag":3,"start_index":242667,"end_index":243988,"start_time_s":0.970668,"end_time_s":0.9759519999999999,"duration_s":0.005284},{"flag":1,"start_index":243988,"end_index":244187,"start_time_s":0.9759519999999999,"end_time_s":0.976748,"duration_s":0.0007959999999999999},{"flag":2,"start_index":244187,"end_index":245331,"start_time_s":0.976748,"end_time_s":0.981324,"duration_s":0.004576},{"flag":1,"start_index":245331,"end_index":245334,"start_time_s":0.981324,"end_time_s":0.981336,"duration_s":1.2e-05},{"flag":3,"start_index":245334,"end_index":248646,"start_time_s":0.981336,"end_time_s":0.9945839999999999,"duration_s":0.013248},{"flag":1,"start_index":248646,"end_index":248868,"start_time_s":0.9945839999999999,"end_time_s":0.9954719999999999,"duration_s":0.000888},{"flag":2,"start_index":248868,"end_index":249529,"start_time_s":0.9954719999999999,"end_time_s":0.998116,"duration_s":0.002644},{"flag":1,"start_index":249529,"end_index":249531,"start_time_s":0.998116,"end_time_s":0.9981239999999999,"duration_s":8e-06},{"flag":3,"start_index":249531,"end_index":250000,"start_time_s":0.9981239999999999,"end_time_s":1.0,"duration_s":0.0018759999999999998}],"summary":{"flag_segment_stats":{"1":{"count":187,"min_s":8e-06,"max_s":0.000888,"mean_s":0.00013880213903743317,"median_s":2.8e-05,"p95_s":0.000248,"p99_s":0.0007787999999999997,"stddev_s":0.00015856771490227215,"total_s":0.025956},"2":{"count":94,"min_s":0.000292,"max_s":0.01044,"mean_s":0.004934340425531914,"median_s":0.004812,"p95_s":0.010416,"p99_s":0.010421399999999999,"stddev_s":0.002700001475780493,"total_s":0.46382799999999996},"3":{"count":95,"min_s":8e-06,"max_s":0.013248,"mean_s":0.005370694736842104,"median_s":0.005064,"p95_s":0.0130932,"p99_s":0.01318032,"stddev_s":0.0038866158871417723,"total_s":0.5102159999999999}},"transition_counts":{"1->2":93,"1->3":94,"2->1":93,"2->3":1,"3->1":93,"3->2":1}}} diff --git a/code/docs/DrawDisplay_baseline_flag1.png b/code/docs/DrawDisplay_baseline_flag1.png deleted file mode 100644 index 2d886886f700576a44537cbc303521970834082f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74532 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 Gp1%R#w7Qi5 diff --git a/code/docs/DrawDisplay_baseline_timeline.png b/code/docs/DrawDisplay_baseline_timeline.png deleted file mode 100644 index 6d7fdb25a9839af2a5eb6f459374d9a21594e87e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30415 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 R#lHISmXNUE!>=y>=oiTNEj$1K diff --git a/code/docs/DrawDisplay_phase1_capture.json b/code/docs/DrawDisplay_phase1_capture.json deleted file mode 100644 index baf6987..0000000 --- a/code/docs/DrawDisplay_phase1_capture.json +++ /dev/null @@ -1 +0,0 @@ -{"metadata":{"sample_rate_hz":250000.0,"sample_period_s":4e-06,"buffer_size":250000,"duration_s":1.0,"trigger":"flag=1","trigger_position_frac":0.1,"debounce_us":8.0,"debounce_samples":2,"acquisition_mode":"record","lost_samples":0,"corrupt_samples":0,"lost_fraction":0.0,"device_buffer_size":4096,"pin_mapping":{"28":{"bit":3,"dio":1},"29":{"bit":2,"dio":2},"30":{"bit":1,"dio":3},"31":{"bit":0,"dio":4}}},"transitions":[{"index":2,"time_s":8e-06,"from_flag":1,"to_flag":3},{"index":519,"time_s":0.0020759999999999997,"from_flag":3,"to_flag":1},{"index":580,"time_s":0.00232,"from_flag":1,"to_flag":2},{"index":2666,"time_s":0.010664,"from_flag":2,"to_flag":1},{"index":2669,"time_s":0.010676,"from_flag":1,"to_flag":3},{"index":3211,"time_s":0.012844,"from_flag":3,"to_flag":1},{"index":3272,"time_s":0.013087999999999999,"from_flag":1,"to_flag":2},{"index":5333,"time_s":0.021332,"from_flag":2,"to_flag":1},{"index":5335,"time_s":0.021339999999999998,"from_flag":1,"to_flag":3},{"index":9291,"time_s":0.037163999999999996,"from_flag":3,"to_flag":1},{"index":9353,"time_s":0.037412,"from_flag":1,"to_flag":2},{"index":10286,"time_s":0.041144,"from_flag":2,"to_flag":1},{"index":10289,"time_s":0.041156,"from_flag":1,"to_flag":3},{"index":10291,"time_s":0.041164,"from_flag":3,"to_flag":1},{"index":10349,"time_s":0.041395999999999995,"from_flag":1,"to_flag":2},{"index":11283,"time_s":0.045132,"from_flag":2,"to_flag":1},{"index":11285,"time_s":0.04514,"from_flag":1,"to_flag":3},{"index":11287,"time_s":0.045148,"from_flag":3,"to_flag":1},{"index":11340,"time_s":0.04536,"from_flag":1,"to_flag":2},{"index":13333,"time_s":0.053332,"from_flag":2,"to_flag":1},{"index":13335,"time_s":0.05334,"from_flag":1,"to_flag":3},{"index":17065,"time_s":0.06826,"from_flag":3,"to_flag":1},{"index":17126,"time_s":0.068504,"from_flag":1,"to_flag":2},{"index":18066,"time_s":0.072264,"from_flag":2,"to_flag":1},{"index":18068,"time_s":0.072272,"from_flag":1,"to_flag":3},{"index":19732,"time_s":0.078928,"from_flag":3,"to_flag":1},{"index":19794,"time_s":0.079176,"from_flag":1,"to_flag":2},{"index":20733,"time_s":0.08293199999999999,"from_flag":2,"to_flag":1},{"index":20735,"time_s":0.08294,"from_flag":1,"to_flag":3},{"index":21254,"time_s":0.085016,"from_flag":3,"to_flag":1},{"index":21315,"time_s":0.08526,"from_flag":1,"to_flag":2},{"index":22255,"time_s":0.08902,"from_flag":2,"to_flag":1},{"index":22257,"time_s":0.089028,"from_flag":1,"to_flag":3},{"index":22782,"time_s":0.091128,"from_flag":3,"to_flag":1},{"index":22844,"time_s":0.091376,"from_flag":1,"to_flag":2},{"index":24000,"time_s":0.096,"from_flag":2,"to_flag":1},{"index":24002,"time_s":0.096008,"from_flag":1,"to_flag":3},{"index":24532,"time_s":0.09812799999999999,"from_flag":3,"to_flag":1},{"index":24587,"time_s":0.09834799999999999,"from_flag":1,"to_flag":2},{"index":26666,"time_s":0.106664,"from_flag":2,"to_flag":1},{"index":26668,"time_s":0.10667199999999999,"from_flag":1,"to_flag":3},{"index":27182,"time_s":0.10872799999999999,"from_flag":3,"to_flag":1},{"index":27243,"time_s":0.108972,"from_flag":1,"to_flag":2},{"index":29333,"time_s":0.11733199999999999,"from_flag":2,"to_flag":1},{"index":29335,"time_s":0.11734,"from_flag":1,"to_flag":3},{"index":29858,"time_s":0.119432,"from_flag":3,"to_flag":1},{"index":29919,"time_s":0.11967599999999999,"from_flag":1,"to_flag":2},{"index":32000,"time_s":0.128,"from_flag":2,"to_flag":1},{"index":32002,"time_s":0.12800799999999998,"from_flag":1,"to_flag":3},{"index":35959,"time_s":0.143836,"from_flag":3,"to_flag":1},{"index":36020,"time_s":0.14407999999999999,"from_flag":1,"to_flag":2},{"index":36955,"time_s":0.14782,"from_flag":2,"to_flag":1},{"index":36957,"time_s":0.147828,"from_flag":1,"to_flag":3},{"index":36959,"time_s":0.147836,"from_flag":3,"to_flag":1},{"index":37149,"time_s":0.148596,"from_flag":1,"to_flag":2},{"index":38088,"time_s":0.152352,"from_flag":2,"to_flag":1},{"index":38091,"time_s":0.152364,"from_flag":1,"to_flag":3},{"index":38093,"time_s":0.15237199999999998,"from_flag":3,"to_flag":1},{"index":38151,"time_s":0.152604,"from_flag":1,"to_flag":2},{"index":39999,"time_s":0.159996,"from_flag":2,"to_flag":1},{"index":40002,"time_s":0.16000799999999998,"from_flag":1,"to_flag":3},{"index":43846,"time_s":0.17538399999999998,"from_flag":3,"to_flag":1},{"index":43907,"time_s":0.17562799999999998,"from_flag":1,"to_flag":2},{"index":44847,"time_s":0.179388,"from_flag":2,"to_flag":1},{"index":44849,"time_s":0.179396,"from_flag":1,"to_flag":3},{"index":46512,"time_s":0.186048,"from_flag":3,"to_flag":1},{"index":46573,"time_s":0.18629199999999999,"from_flag":1,"to_flag":2},{"index":47513,"time_s":0.190052,"from_flag":2,"to_flag":1},{"index":47516,"time_s":0.19006399999999998,"from_flag":1,"to_flag":3},{"index":48044,"time_s":0.19217599999999999,"from_flag":3,"to_flag":1},{"index":48105,"time_s":0.19241999999999998,"from_flag":1,"to_flag":2},{"index":49026,"time_s":0.196104,"from_flag":2,"to_flag":1},{"index":49028,"time_s":0.19611199999999998,"from_flag":1,"to_flag":3},{"index":49544,"time_s":0.198176,"from_flag":3,"to_flag":1},{"index":49605,"time_s":0.19841999999999999,"from_flag":1,"to_flag":2},{"index":50666,"time_s":0.20266399999999998,"from_flag":2,"to_flag":1},{"index":50668,"time_s":0.202672,"from_flag":1,"to_flag":3},{"index":51194,"time_s":0.20477599999999999,"from_flag":3,"to_flag":1},{"index":51255,"time_s":0.20501999999999998,"from_flag":1,"to_flag":2},{"index":53333,"time_s":0.213332,"from_flag":2,"to_flag":1},{"index":53335,"time_s":0.21334,"from_flag":1,"to_flag":3},{"index":53850,"time_s":0.21539999999999998,"from_flag":3,"to_flag":1},{"index":53911,"time_s":0.215644,"from_flag":1,"to_flag":2},{"index":55999,"time_s":0.223996,"from_flag":2,"to_flag":1},{"index":56002,"time_s":0.22400799999999998,"from_flag":1,"to_flag":3},{"index":56517,"time_s":0.226068,"from_flag":3,"to_flag":1},{"index":56579,"time_s":0.226316,"from_flag":1,"to_flag":2},{"index":58666,"time_s":0.23466399999999998,"from_flag":2,"to_flag":1},{"index":58668,"time_s":0.234672,"from_flag":1,"to_flag":3},{"index":62647,"time_s":0.250588,"from_flag":3,"to_flag":1},{"index":62870,"time_s":0.25148,"from_flag":1,"to_flag":2},{"index":63805,"time_s":0.25522,"from_flag":2,"to_flag":1},{"index":63807,"time_s":0.255228,"from_flag":1,"to_flag":3},{"index":63809,"time_s":0.25523599999999996,"from_flag":3,"to_flag":1},{"index":63868,"time_s":0.255472,"from_flag":1,"to_flag":2},{"index":64802,"time_s":0.259208,"from_flag":2,"to_flag":1},{"index":64804,"time_s":0.259216,"from_flag":1,"to_flag":3},{"index":64806,"time_s":0.259224,"from_flag":3,"to_flag":1},{"index":64865,"time_s":0.25945999999999997,"from_flag":1,"to_flag":2},{"index":66666,"time_s":0.266664,"from_flag":2,"to_flag":1},{"index":66668,"time_s":0.26667199999999996,"from_flag":1,"to_flag":3},{"index":70046,"time_s":0.280184,"from_flag":3,"to_flag":1},{"index":70105,"time_s":0.28042,"from_flag":1,"to_flag":2},{"index":71045,"time_s":0.28418,"from_flag":2,"to_flag":1},{"index":71047,"time_s":0.284188,"from_flag":1,"to_flag":3},{"index":72724,"time_s":0.290896,"from_flag":3,"to_flag":1},{"index":72786,"time_s":0.291144,"from_flag":1,"to_flag":2},{"index":73726,"time_s":0.294904,"from_flag":2,"to_flag":1},{"index":73728,"time_s":0.294912,"from_flag":1,"to_flag":3},{"index":74252,"time_s":0.297008,"from_flag":3,"to_flag":1},{"index":74313,"time_s":0.29725199999999996,"from_flag":1,"to_flag":2},{"index":75253,"time_s":0.301012,"from_flag":2,"to_flag":1},{"index":75255,"time_s":0.30102,"from_flag":1,"to_flag":3},{"index":75771,"time_s":0.30308399999999996,"from_flag":3,"to_flag":1},{"index":75834,"time_s":0.303336,"from_flag":1,"to_flag":2},{"index":77333,"time_s":0.309332,"from_flag":2,"to_flag":1},{"index":77335,"time_s":0.30934,"from_flag":1,"to_flag":3},{"index":77857,"time_s":0.311428,"from_flag":3,"to_flag":1},{"index":77918,"time_s":0.311672,"from_flag":1,"to_flag":2},{"index":79999,"time_s":0.319996,"from_flag":2,"to_flag":1},{"index":80001,"time_s":0.320004,"from_flag":1,"to_flag":3},{"index":80528,"time_s":0.322112,"from_flag":3,"to_flag":1},{"index":80583,"time_s":0.322332,"from_flag":1,"to_flag":2},{"index":82666,"time_s":0.33066399999999996,"from_flag":2,"to_flag":1},{"index":82668,"time_s":0.33067199999999997,"from_flag":1,"to_flag":3},{"index":83176,"time_s":0.332704,"from_flag":3,"to_flag":1},{"index":83237,"time_s":0.33294799999999997,"from_flag":1,"to_flag":2},{"index":85333,"time_s":0.34133199999999997,"from_flag":2,"to_flag":1},{"index":85335,"time_s":0.34134,"from_flag":1,"to_flag":3},{"index":89306,"time_s":0.357224,"from_flag":3,"to_flag":1},{"index":89362,"time_s":0.357448,"from_flag":1,"to_flag":2},{"index":90296,"time_s":0.361184,"from_flag":2,"to_flag":1},{"index":90298,"time_s":0.36119199999999996,"from_flag":1,"to_flag":3},{"index":90300,"time_s":0.36119999999999997,"from_flag":3,"to_flag":1},{"index":90359,"time_s":0.361436,"from_flag":1,"to_flag":2},{"index":91293,"time_s":0.365172,"from_flag":2,"to_flag":1},{"index":91295,"time_s":0.36518,"from_flag":1,"to_flag":3},{"index":91297,"time_s":0.36518799999999996,"from_flag":3,"to_flag":1},{"index":91357,"time_s":0.365428,"from_flag":1,"to_flag":2},{"index":93332,"time_s":0.373328,"from_flag":2,"to_flag":1},{"index":93335,"time_s":0.37334,"from_flag":1,"to_flag":3},{"index":96974,"time_s":0.38789599999999996,"from_flag":3,"to_flag":1},{"index":97034,"time_s":0.388136,"from_flag":1,"to_flag":2},{"index":97968,"time_s":0.391872,"from_flag":2,"to_flag":1},{"index":97970,"time_s":0.39188,"from_flag":1,"to_flag":3},{"index":99639,"time_s":0.39855599999999997,"from_flag":3,"to_flag":1},{"index":99833,"time_s":0.39933199999999996,"from_flag":1,"to_flag":2},{"index":100768,"time_s":0.403072,"from_flag":2,"to_flag":1},{"index":100770,"time_s":0.40308,"from_flag":1,"to_flag":3},{"index":101298,"time_s":0.405192,"from_flag":3,"to_flag":1},{"index":101360,"time_s":0.40543999999999997,"from_flag":1,"to_flag":2},{"index":102294,"time_s":0.409176,"from_flag":2,"to_flag":1},{"index":102296,"time_s":0.409184,"from_flag":1,"to_flag":3},{"index":102806,"time_s":0.411224,"from_flag":3,"to_flag":1},{"index":102867,"time_s":0.411468,"from_flag":1,"to_flag":2},{"index":103999,"time_s":0.415996,"from_flag":2,"to_flag":1},{"index":104001,"time_s":0.416004,"from_flag":1,"to_flag":3},{"index":104522,"time_s":0.41808799999999996,"from_flag":3,"to_flag":1},{"index":104584,"time_s":0.418336,"from_flag":1,"to_flag":2},{"index":106666,"time_s":0.426664,"from_flag":2,"to_flag":1},{"index":106668,"time_s":0.426672,"from_flag":1,"to_flag":3},{"index":107198,"time_s":0.428792,"from_flag":3,"to_flag":1},{"index":107259,"time_s":0.429036,"from_flag":1,"to_flag":2},{"index":109332,"time_s":0.437328,"from_flag":2,"to_flag":1},{"index":109335,"time_s":0.43734,"from_flag":1,"to_flag":3},{"index":109854,"time_s":0.439416,"from_flag":3,"to_flag":1},{"index":109915,"time_s":0.43966,"from_flag":1,"to_flag":2},{"index":111999,"time_s":0.447996,"from_flag":2,"to_flag":1},{"index":112001,"time_s":0.44800399999999996,"from_flag":1,"to_flag":3},{"index":115941,"time_s":0.46376399999999995,"from_flag":3,"to_flag":1},{"index":116003,"time_s":0.464012,"from_flag":1,"to_flag":2},{"index":116937,"time_s":0.467748,"from_flag":2,"to_flag":1},{"index":116940,"time_s":0.46775999999999995,"from_flag":1,"to_flag":3},{"index":116942,"time_s":0.46776799999999996,"from_flag":3,"to_flag":1},{"index":117001,"time_s":0.468004,"from_flag":1,"to_flag":2},{"index":117935,"time_s":0.47174,"from_flag":2,"to_flag":1},{"index":117937,"time_s":0.471748,"from_flag":1,"to_flag":3},{"index":117939,"time_s":0.47175599999999995,"from_flag":3,"to_flag":1},{"index":118001,"time_s":0.472004,"from_flag":1,"to_flag":2},{"index":119999,"time_s":0.479996,"from_flag":2,"to_flag":1},{"index":120001,"time_s":0.480004,"from_flag":1,"to_flag":3},{"index":123840,"time_s":0.49535999999999997,"from_flag":3,"to_flag":1},{"index":123897,"time_s":0.495588,"from_flag":1,"to_flag":2},{"index":124837,"time_s":0.49934799999999996,"from_flag":2,"to_flag":1},{"index":124840,"time_s":0.49935999999999997,"from_flag":1,"to_flag":3},{"index":126526,"time_s":0.506104,"from_flag":3,"to_flag":1},{"index":126588,"time_s":0.506352,"from_flag":1,"to_flag":2},{"index":127527,"time_s":0.510108,"from_flag":2,"to_flag":1},{"index":127529,"time_s":0.510116,"from_flag":1,"to_flag":3},{"index":128057,"time_s":0.512228,"from_flag":3,"to_flag":1},{"index":128112,"time_s":0.512448,"from_flag":1,"to_flag":2},{"index":129051,"time_s":0.516204,"from_flag":2,"to_flag":1},{"index":129053,"time_s":0.516212,"from_flag":1,"to_flag":3},{"index":129589,"time_s":0.5183559999999999,"from_flag":3,"to_flag":1},{"index":129650,"time_s":0.5186,"from_flag":1,"to_flag":2},{"index":130666,"time_s":0.522664,"from_flag":2,"to_flag":1},{"index":130668,"time_s":0.522672,"from_flag":1,"to_flag":3},{"index":131198,"time_s":0.5247919999999999,"from_flag":3,"to_flag":1},{"index":131259,"time_s":0.525036,"from_flag":1,"to_flag":2},{"index":133332,"time_s":0.533328,"from_flag":2,"to_flag":1},{"index":133334,"time_s":0.5333359999999999,"from_flag":1,"to_flag":3},{"index":133846,"time_s":0.535384,"from_flag":3,"to_flag":1},{"index":133906,"time_s":0.535624,"from_flag":1,"to_flag":2},{"index":135999,"time_s":0.5439959999999999,"from_flag":2,"to_flag":1},{"index":136001,"time_s":0.5440039999999999,"from_flag":1,"to_flag":3},{"index":136523,"time_s":0.546092,"from_flag":3,"to_flag":1},{"index":136578,"time_s":0.546312,"from_flag":1,"to_flag":2},{"index":138666,"time_s":0.5546639999999999,"from_flag":2,"to_flag":1},{"index":138668,"time_s":0.5546719999999999,"from_flag":1,"to_flag":3},{"index":142609,"time_s":0.5704359999999999,"from_flag":3,"to_flag":1},{"index":142670,"time_s":0.57068,"from_flag":1,"to_flag":2},{"index":143605,"time_s":0.5744199999999999,"from_flag":2,"to_flag":1},{"index":143607,"time_s":0.5744279999999999,"from_flag":1,"to_flag":3},{"index":143609,"time_s":0.574436,"from_flag":3,"to_flag":1},{"index":143669,"time_s":0.574676,"from_flag":1,"to_flag":2},{"index":144604,"time_s":0.5784159999999999,"from_flag":2,"to_flag":1},{"index":144606,"time_s":0.5784239999999999,"from_flag":1,"to_flag":3},{"index":144608,"time_s":0.578432,"from_flag":3,"to_flag":1},{"index":144667,"time_s":0.578668,"from_flag":1,"to_flag":2},{"index":146666,"time_s":0.586664,"from_flag":2,"to_flag":1},{"index":146668,"time_s":0.586672,"from_flag":1,"to_flag":3},{"index":150514,"time_s":0.6020559999999999,"from_flag":3,"to_flag":1},{"index":150574,"time_s":0.6022959999999999,"from_flag":1,"to_flag":2},{"index":151516,"time_s":0.6060639999999999,"from_flag":2,"to_flag":1},{"index":151518,"time_s":0.6060719999999999,"from_flag":1,"to_flag":3},{"index":153178,"time_s":0.6127119999999999,"from_flag":3,"to_flag":1},{"index":153239,"time_s":0.612956,"from_flag":1,"to_flag":2},{"index":154180,"time_s":0.6167199999999999,"from_flag":2,"to_flag":1},{"index":154182,"time_s":0.6167279999999999,"from_flag":1,"to_flag":3},{"index":154717,"time_s":0.618868,"from_flag":3,"to_flag":1},{"index":154779,"time_s":0.619116,"from_flag":1,"to_flag":2},{"index":155718,"time_s":0.622872,"from_flag":2,"to_flag":1},{"index":155720,"time_s":0.62288,"from_flag":1,"to_flag":3},{"index":156233,"time_s":0.6249319999999999,"from_flag":3,"to_flag":1},{"index":156295,"time_s":0.62518,"from_flag":1,"to_flag":2},{"index":157332,"time_s":0.629328,"from_flag":2,"to_flag":1},{"index":157334,"time_s":0.629336,"from_flag":1,"to_flag":3},{"index":157860,"time_s":0.63144,"from_flag":3,"to_flag":1},{"index":157921,"time_s":0.631684,"from_flag":1,"to_flag":2},{"index":159999,"time_s":0.639996,"from_flag":2,"to_flag":1},{"index":160001,"time_s":0.640004,"from_flag":1,"to_flag":3},{"index":160532,"time_s":0.6421279999999999,"from_flag":3,"to_flag":1},{"index":160593,"time_s":0.6423719999999999,"from_flag":1,"to_flag":2},{"index":162665,"time_s":0.65066,"from_flag":2,"to_flag":1},{"index":162668,"time_s":0.6506719999999999,"from_flag":1,"to_flag":3},{"index":163180,"time_s":0.65272,"from_flag":3,"to_flag":1},{"index":163373,"time_s":0.653492,"from_flag":1,"to_flag":2},{"index":165332,"time_s":0.6613279999999999,"from_flag":2,"to_flag":1},{"index":165334,"time_s":0.6613359999999999,"from_flag":1,"to_flag":3},{"index":169280,"time_s":0.6771199999999999,"from_flag":3,"to_flag":1},{"index":169342,"time_s":0.677368,"from_flag":1,"to_flag":2},{"index":170276,"time_s":0.6811039999999999,"from_flag":2,"to_flag":1},{"index":170279,"time_s":0.6811159999999999,"from_flag":1,"to_flag":3},{"index":170281,"time_s":0.681124,"from_flag":3,"to_flag":1},{"index":170340,"time_s":0.68136,"from_flag":1,"to_flag":2},{"index":171274,"time_s":0.6850959999999999,"from_flag":2,"to_flag":1},{"index":171276,"time_s":0.6851039999999999,"from_flag":1,"to_flag":3},{"index":171278,"time_s":0.6851119999999999,"from_flag":3,"to_flag":1},{"index":171333,"time_s":0.6853319999999999,"from_flag":1,"to_flag":2},{"index":173332,"time_s":0.6933279999999999,"from_flag":2,"to_flag":1},{"index":173334,"time_s":0.693336,"from_flag":1,"to_flag":3},{"index":177189,"time_s":0.7087559999999999,"from_flag":3,"to_flag":1},{"index":177250,"time_s":0.709,"from_flag":1,"to_flag":2},{"index":178190,"time_s":0.71276,"from_flag":2,"to_flag":1},{"index":178193,"time_s":0.712772,"from_flag":1,"to_flag":3},{"index":179853,"time_s":0.7194119999999999,"from_flag":3,"to_flag":1},{"index":179908,"time_s":0.7196319999999999,"from_flag":1,"to_flag":2},{"index":180848,"time_s":0.7233919999999999,"from_flag":2,"to_flag":1},{"index":180850,"time_s":0.7233999999999999,"from_flag":1,"to_flag":3},{"index":181365,"time_s":0.72546,"from_flag":3,"to_flag":1},{"index":181426,"time_s":0.725704,"from_flag":1,"to_flag":2},{"index":182365,"time_s":0.72946,"from_flag":2,"to_flag":1},{"index":182367,"time_s":0.729468,"from_flag":1,"to_flag":3},{"index":182881,"time_s":0.731524,"from_flag":3,"to_flag":1},{"index":182943,"time_s":0.731772,"from_flag":1,"to_flag":2},{"index":183999,"time_s":0.735996,"from_flag":2,"to_flag":1},{"index":184001,"time_s":0.736004,"from_flag":1,"to_flag":3},{"index":184529,"time_s":0.738116,"from_flag":3,"to_flag":1},{"index":184590,"time_s":0.73836,"from_flag":1,"to_flag":2},{"index":186665,"time_s":0.74666,"from_flag":2,"to_flag":1},{"index":186667,"time_s":0.746668,"from_flag":1,"to_flag":3},{"index":187191,"time_s":0.748764,"from_flag":3,"to_flag":1},{"index":187252,"time_s":0.749008,"from_flag":1,"to_flag":2},{"index":189332,"time_s":0.757328,"from_flag":2,"to_flag":1},{"index":189334,"time_s":0.757336,"from_flag":1,"to_flag":3},{"index":189851,"time_s":0.759404,"from_flag":3,"to_flag":1},{"index":189913,"time_s":0.759652,"from_flag":1,"to_flag":2},{"index":191999,"time_s":0.767996,"from_flag":2,"to_flag":1},{"index":192001,"time_s":0.768004,"from_flag":1,"to_flag":3},{"index":195964,"time_s":0.783856,"from_flag":3,"to_flag":1},{"index":196026,"time_s":0.7841039999999999,"from_flag":1,"to_flag":2},{"index":196959,"time_s":0.787836,"from_flag":2,"to_flag":1},{"index":196961,"time_s":0.787844,"from_flag":1,"to_flag":3},{"index":196963,"time_s":0.787852,"from_flag":3,"to_flag":1},{"index":197017,"time_s":0.788068,"from_flag":1,"to_flag":2},{"index":197952,"time_s":0.791808,"from_flag":2,"to_flag":1},{"index":197954,"time_s":0.791816,"from_flag":1,"to_flag":3},{"index":197956,"time_s":0.791824,"from_flag":3,"to_flag":1},{"index":198016,"time_s":0.792064,"from_flag":1,"to_flag":2},{"index":199999,"time_s":0.7999959999999999,"from_flag":2,"to_flag":1},{"index":200001,"time_s":0.8000039999999999,"from_flag":1,"to_flag":3},{"index":203524,"time_s":0.8140959999999999,"from_flag":3,"to_flag":1},{"index":203586,"time_s":0.814344,"from_flag":1,"to_flag":2},{"index":204524,"time_s":0.8180959999999999,"from_flag":2,"to_flag":1},{"index":204526,"time_s":0.8181039999999999,"from_flag":1,"to_flag":3},{"index":206189,"time_s":0.8247559999999999,"from_flag":3,"to_flag":1},{"index":206251,"time_s":0.825004,"from_flag":1,"to_flag":2},{"index":207189,"time_s":0.8287559999999999,"from_flag":2,"to_flag":1},{"index":207192,"time_s":0.828768,"from_flag":1,"to_flag":3},{"index":207714,"time_s":0.8308559999999999,"from_flag":3,"to_flag":1},{"index":207776,"time_s":0.831104,"from_flag":1,"to_flag":2},{"index":208715,"time_s":0.8348599999999999,"from_flag":2,"to_flag":1},{"index":208717,"time_s":0.8348679999999999,"from_flag":1,"to_flag":3},{"index":209224,"time_s":0.836896,"from_flag":3,"to_flag":1},{"index":209285,"time_s":0.83714,"from_flag":1,"to_flag":2},{"index":210665,"time_s":0.84266,"from_flag":2,"to_flag":1},{"index":210667,"time_s":0.842668,"from_flag":1,"to_flag":3},{"index":211197,"time_s":0.844788,"from_flag":3,"to_flag":1},{"index":211258,"time_s":0.845032,"from_flag":1,"to_flag":2},{"index":213332,"time_s":0.853328,"from_flag":2,"to_flag":1},{"index":213334,"time_s":0.853336,"from_flag":1,"to_flag":3},{"index":213853,"time_s":0.855412,"from_flag":3,"to_flag":1},{"index":213915,"time_s":0.85566,"from_flag":1,"to_flag":2},{"index":215998,"time_s":0.863992,"from_flag":2,"to_flag":1},{"index":216001,"time_s":0.864004,"from_flag":1,"to_flag":3},{"index":216510,"time_s":0.8660399999999999,"from_flag":3,"to_flag":1},{"index":216571,"time_s":0.8662839999999999,"from_flag":1,"to_flag":2},{"index":218665,"time_s":0.87466,"from_flag":2,"to_flag":1},{"index":218667,"time_s":0.874668,"from_flag":1,"to_flag":3},{"index":222658,"time_s":0.890632,"from_flag":3,"to_flag":1},{"index":222718,"time_s":0.890872,"from_flag":1,"to_flag":2},{"index":223652,"time_s":0.894608,"from_flag":2,"to_flag":1},{"index":223654,"time_s":0.894616,"from_flag":1,"to_flag":3},{"index":223656,"time_s":0.894624,"from_flag":3,"to_flag":1},{"index":223720,"time_s":0.89488,"from_flag":1,"to_flag":2},{"index":224654,"time_s":0.898616,"from_flag":2,"to_flag":1},{"index":224656,"time_s":0.898624,"from_flag":1,"to_flag":3},{"index":224658,"time_s":0.898632,"from_flag":3,"to_flag":1},{"index":224723,"time_s":0.8988919999999999,"from_flag":1,"to_flag":2},{"index":226665,"time_s":0.9066599999999999,"from_flag":2,"to_flag":1},{"index":226667,"time_s":0.9066679999999999,"from_flag":1,"to_flag":3},{"index":230253,"time_s":0.9210119999999999,"from_flag":3,"to_flag":1},{"index":230450,"time_s":0.9218,"from_flag":1,"to_flag":2},{"index":231390,"time_s":0.9255599999999999,"from_flag":2,"to_flag":1},{"index":231392,"time_s":0.925568,"from_flag":1,"to_flag":3},{"index":233053,"time_s":0.9322119999999999,"from_flag":3,"to_flag":1},{"index":233115,"time_s":0.93246,"from_flag":1,"to_flag":2},{"index":234054,"time_s":0.9362159999999999,"from_flag":2,"to_flag":1},{"index":234056,"time_s":0.936224,"from_flag":1,"to_flag":3},{"index":234579,"time_s":0.9383159999999999,"from_flag":3,"to_flag":1},{"index":234640,"time_s":0.93856,"from_flag":1,"to_flag":2},{"index":235580,"time_s":0.9423199999999999,"from_flag":2,"to_flag":1},{"index":235582,"time_s":0.9423279999999999,"from_flag":1,"to_flag":3},{"index":236105,"time_s":0.9444199999999999,"from_flag":3,"to_flag":1},{"index":236167,"time_s":0.944668,"from_flag":1,"to_flag":2},{"index":237332,"time_s":0.949328,"from_flag":2,"to_flag":1},{"index":237334,"time_s":0.949336,"from_flag":1,"to_flag":3},{"index":237872,"time_s":0.951488,"from_flag":3,"to_flag":1},{"index":237934,"time_s":0.9517359999999999,"from_flag":1,"to_flag":2},{"index":239998,"time_s":0.959992,"from_flag":2,"to_flag":1},{"index":240001,"time_s":0.960004,"from_flag":1,"to_flag":3},{"index":240530,"time_s":0.96212,"from_flag":3,"to_flag":1},{"index":240592,"time_s":0.962368,"from_flag":1,"to_flag":2},{"index":242665,"time_s":0.97066,"from_flag":2,"to_flag":1},{"index":242667,"time_s":0.970668,"from_flag":1,"to_flag":3},{"index":243186,"time_s":0.9727439999999999,"from_flag":3,"to_flag":1},{"index":243247,"time_s":0.972988,"from_flag":1,"to_flag":2},{"index":245332,"time_s":0.981328,"from_flag":2,"to_flag":1},{"index":245334,"time_s":0.981336,"from_flag":1,"to_flag":3},{"index":249277,"time_s":0.997108,"from_flag":3,"to_flag":1},{"index":249339,"time_s":0.9973559999999999,"from_flag":1,"to_flag":2}],"segments":[{"flag":1,"start_index":0,"end_index":2,"start_time_s":0.0,"end_time_s":8e-06,"duration_s":8e-06},{"flag":3,"start_index":2,"end_index":519,"start_time_s":8e-06,"end_time_s":0.0020759999999999997,"duration_s":0.002068},{"flag":1,"start_index":519,"end_index":580,"start_time_s":0.0020759999999999997,"end_time_s":0.00232,"duration_s":0.000244},{"flag":2,"start_index":580,"end_index":2666,"start_time_s":0.00232,"end_time_s":0.010664,"duration_s":0.008343999999999999},{"flag":1,"start_index":2666,"end_index":2669,"start_time_s":0.010664,"end_time_s":0.010676,"duration_s":1.2e-05},{"flag":3,"start_index":2669,"end_index":3211,"start_time_s":0.010676,"end_time_s":0.012844,"duration_s":0.002168},{"flag":1,"start_index":3211,"end_index":3272,"start_time_s":0.012844,"end_time_s":0.013087999999999999,"duration_s":0.000244},{"flag":2,"start_index":3272,"end_index":5333,"start_time_s":0.013087999999999999,"end_time_s":0.021332,"duration_s":0.008244},{"flag":1,"start_index":5333,"end_index":5335,"start_time_s":0.021332,"end_time_s":0.021339999999999998,"duration_s":8e-06},{"flag":3,"start_index":5335,"end_index":9291,"start_time_s":0.021339999999999998,"end_time_s":0.037163999999999996,"duration_s":0.015823999999999998},{"flag":1,"start_index":9291,"end_index":9353,"start_time_s":0.037163999999999996,"end_time_s":0.037412,"duration_s":0.000248},{"flag":2,"start_index":9353,"end_index":10286,"start_time_s":0.037412,"end_time_s":0.041144,"duration_s":0.0037319999999999996},{"flag":1,"start_index":10286,"end_index":10289,"start_time_s":0.041144,"end_time_s":0.041156,"duration_s":1.2e-05},{"flag":3,"start_index":10289,"end_index":10291,"start_time_s":0.041156,"end_time_s":0.041164,"duration_s":8e-06},{"flag":1,"start_index":10291,"end_index":10349,"start_time_s":0.041164,"end_time_s":0.041395999999999995,"duration_s":0.000232},{"flag":2,"start_index":10349,"end_index":11283,"start_time_s":0.041395999999999995,"end_time_s":0.045132,"duration_s":0.0037359999999999997},{"flag":1,"start_index":11283,"end_index":11285,"start_time_s":0.045132,"end_time_s":0.04514,"duration_s":8e-06},{"flag":3,"start_index":11285,"end_index":11287,"start_time_s":0.04514,"end_time_s":0.045148,"duration_s":8e-06},{"flag":1,"start_index":11287,"end_index":11340,"start_time_s":0.045148,"end_time_s":0.04536,"duration_s":0.000212},{"flag":2,"start_index":11340,"end_index":13333,"start_time_s":0.04536,"end_time_s":0.053332,"duration_s":0.007972},{"flag":1,"start_index":13333,"end_index":13335,"start_time_s":0.053332,"end_time_s":0.05334,"duration_s":8e-06},{"flag":3,"start_index":13335,"end_index":17065,"start_time_s":0.05334,"end_time_s":0.06826,"duration_s":0.01492},{"flag":1,"start_index":17065,"end_index":17126,"start_time_s":0.06826,"end_time_s":0.068504,"duration_s":0.000244},{"flag":2,"start_index":17126,"end_index":18066,"start_time_s":0.068504,"end_time_s":0.072264,"duration_s":0.00376},{"flag":1,"start_index":18066,"end_index":18068,"start_time_s":0.072264,"end_time_s":0.072272,"duration_s":8e-06},{"flag":3,"start_index":18068,"end_index":19732,"start_time_s":0.072272,"end_time_s":0.078928,"duration_s":0.006656},{"flag":1,"start_index":19732,"end_index":19794,"start_time_s":0.078928,"end_time_s":0.079176,"duration_s":0.000248},{"flag":2,"start_index":19794,"end_index":20733,"start_time_s":0.079176,"end_time_s":0.08293199999999999,"duration_s":0.003756},{"flag":1,"start_index":20733,"end_index":20735,"start_time_s":0.08293199999999999,"end_time_s":0.08294,"duration_s":8e-06},{"flag":3,"start_index":20735,"end_index":21254,"start_time_s":0.08294,"end_time_s":0.085016,"duration_s":0.0020759999999999997},{"flag":1,"start_index":21254,"end_index":21315,"start_time_s":0.085016,"end_time_s":0.08526,"duration_s":0.000244},{"flag":2,"start_index":21315,"end_index":22255,"start_time_s":0.08526,"end_time_s":0.08902,"duration_s":0.00376},{"flag":1,"start_index":22255,"end_index":22257,"start_time_s":0.08902,"end_time_s":0.089028,"duration_s":8e-06},{"flag":3,"start_index":22257,"end_index":22782,"start_time_s":0.089028,"end_time_s":0.091128,"duration_s":0.0021},{"flag":1,"start_index":22782,"end_index":22844,"start_time_s":0.091128,"end_time_s":0.091376,"duration_s":0.000248},{"flag":2,"start_index":22844,"end_index":24000,"start_time_s":0.091376,"end_time_s":0.096,"duration_s":0.004624},{"flag":1,"start_index":24000,"end_index":24002,"start_time_s":0.096,"end_time_s":0.096008,"duration_s":8e-06},{"flag":3,"start_index":24002,"end_index":24532,"start_time_s":0.096008,"end_time_s":0.09812799999999999,"duration_s":0.00212},{"flag":1,"start_index":24532,"end_index":24587,"start_time_s":0.09812799999999999,"end_time_s":0.09834799999999999,"duration_s":0.00021999999999999998},{"flag":2,"start_index":24587,"end_index":26666,"start_time_s":0.09834799999999999,"end_time_s":0.106664,"duration_s":0.008316},{"flag":1,"start_index":26666,"end_index":26668,"start_time_s":0.106664,"end_time_s":0.10667199999999999,"duration_s":8e-06},{"flag":3,"start_index":26668,"end_index":27182,"start_time_s":0.10667199999999999,"end_time_s":0.10872799999999999,"duration_s":0.002056},{"flag":1,"start_index":27182,"end_index":27243,"start_time_s":0.10872799999999999,"end_time_s":0.108972,"duration_s":0.000244},{"flag":2,"start_index":27243,"end_index":29333,"start_time_s":0.108972,"end_time_s":0.11733199999999999,"duration_s":0.00836},{"flag":1,"start_index":29333,"end_index":29335,"start_time_s":0.11733199999999999,"end_time_s":0.11734,"duration_s":8e-06},{"flag":3,"start_index":29335,"end_index":29858,"start_time_s":0.11734,"end_time_s":0.119432,"duration_s":0.002092},{"flag":1,"start_index":29858,"end_index":29919,"start_time_s":0.119432,"end_time_s":0.11967599999999999,"duration_s":0.000244},{"flag":2,"start_index":29919,"end_index":32000,"start_time_s":0.11967599999999999,"end_time_s":0.128,"duration_s":0.008324},{"flag":1,"start_index":32000,"end_index":32002,"start_time_s":0.128,"end_time_s":0.12800799999999998,"duration_s":8e-06},{"flag":3,"start_index":32002,"end_index":35959,"start_time_s":0.12800799999999998,"end_time_s":0.143836,"duration_s":0.015828},{"flag":1,"start_index":35959,"end_index":36020,"start_time_s":0.143836,"end_time_s":0.14407999999999999,"duration_s":0.000244},{"flag":2,"start_index":36020,"end_index":36955,"start_time_s":0.14407999999999999,"end_time_s":0.14782,"duration_s":0.00374},{"flag":1,"start_index":36955,"end_index":36957,"start_time_s":0.14782,"end_time_s":0.147828,"duration_s":8e-06},{"flag":3,"start_index":36957,"end_index":36959,"start_time_s":0.147828,"end_time_s":0.147836,"duration_s":8e-06},{"flag":1,"start_index":36959,"end_index":37149,"start_time_s":0.147836,"end_time_s":0.148596,"duration_s":0.0007599999999999999},{"flag":2,"start_index":37149,"end_index":38088,"start_time_s":0.148596,"end_time_s":0.152352,"duration_s":0.003756},{"flag":1,"start_index":38088,"end_index":38091,"start_time_s":0.152352,"end_time_s":0.152364,"duration_s":1.2e-05},{"flag":3,"start_index":38091,"end_index":38093,"start_time_s":0.152364,"end_time_s":0.15237199999999998,"duration_s":8e-06},{"flag":1,"start_index":38093,"end_index":38151,"start_time_s":0.15237199999999998,"end_time_s":0.152604,"duration_s":0.000232},{"flag":2,"start_index":38151,"end_index":39999,"start_time_s":0.152604,"end_time_s":0.159996,"duration_s":0.007391999999999999},{"flag":1,"start_index":39999,"end_index":40002,"start_time_s":0.159996,"end_time_s":0.16000799999999998,"duration_s":1.2e-05},{"flag":3,"start_index":40002,"end_index":43846,"start_time_s":0.16000799999999998,"end_time_s":0.17538399999999998,"duration_s":0.015375999999999999},{"flag":1,"start_index":43846,"end_index":43907,"start_time_s":0.17538399999999998,"end_time_s":0.17562799999999998,"duration_s":0.000244},{"flag":2,"start_index":43907,"end_index":44847,"start_time_s":0.17562799999999998,"end_time_s":0.179388,"duration_s":0.00376},{"flag":1,"start_index":44847,"end_index":44849,"start_time_s":0.179388,"end_time_s":0.179396,"duration_s":8e-06},{"flag":3,"start_index":44849,"end_index":46512,"start_time_s":0.179396,"end_time_s":0.186048,"duration_s":0.006652},{"flag":1,"start_index":46512,"end_index":46573,"start_time_s":0.186048,"end_time_s":0.18629199999999999,"duration_s":0.000244},{"flag":2,"start_index":46573,"end_index":47513,"start_time_s":0.18629199999999999,"end_time_s":0.190052,"duration_s":0.00376},{"flag":1,"start_index":47513,"end_index":47516,"start_time_s":0.190052,"end_time_s":0.19006399999999998,"duration_s":1.2e-05},{"flag":3,"start_index":47516,"end_index":48044,"start_time_s":0.19006399999999998,"end_time_s":0.19217599999999999,"duration_s":0.0021119999999999997},{"flag":1,"start_index":48044,"end_index":48105,"start_time_s":0.19217599999999999,"end_time_s":0.19241999999999998,"duration_s":0.000244},{"flag":2,"start_index":48105,"end_index":49026,"start_time_s":0.19241999999999998,"end_time_s":0.196104,"duration_s":0.0036839999999999998},{"flag":1,"start_index":49026,"end_index":49028,"start_time_s":0.196104,"end_time_s":0.19611199999999998,"duration_s":8e-06},{"flag":3,"start_index":49028,"end_index":49544,"start_time_s":0.19611199999999998,"end_time_s":0.198176,"duration_s":0.002064},{"flag":1,"start_index":49544,"end_index":49605,"start_time_s":0.198176,"end_time_s":0.19841999999999999,"duration_s":0.000244},{"flag":2,"start_index":49605,"end_index":50666,"start_time_s":0.19841999999999999,"end_time_s":0.20266399999999998,"duration_s":0.0042439999999999995},{"flag":1,"start_index":50666,"end_index":50668,"start_time_s":0.20266399999999998,"end_time_s":0.202672,"duration_s":8e-06},{"flag":3,"start_index":50668,"end_index":51194,"start_time_s":0.202672,"end_time_s":0.20477599999999999,"duration_s":0.002104},{"flag":1,"start_index":51194,"end_index":51255,"start_time_s":0.20477599999999999,"end_time_s":0.20501999999999998,"duration_s":0.000244},{"flag":2,"start_index":51255,"end_index":53333,"start_time_s":0.20501999999999998,"end_time_s":0.213332,"duration_s":0.008312},{"flag":1,"start_index":53333,"end_index":53335,"start_time_s":0.213332,"end_time_s":0.21334,"duration_s":8e-06},{"flag":3,"start_index":53335,"end_index":53850,"start_time_s":0.21334,"end_time_s":0.21539999999999998,"duration_s":0.0020599999999999998},{"flag":1,"start_index":53850,"end_index":53911,"start_time_s":0.21539999999999998,"end_time_s":0.215644,"duration_s":0.000244},{"flag":2,"start_index":53911,"end_index":55999,"start_time_s":0.215644,"end_time_s":0.223996,"duration_s":0.008352},{"flag":1,"start_index":55999,"end_index":56002,"start_time_s":0.223996,"end_time_s":0.22400799999999998,"duration_s":1.2e-05},{"flag":3,"start_index":56002,"end_index":56517,"start_time_s":0.22400799999999998,"end_time_s":0.226068,"duration_s":0.0020599999999999998},{"flag":1,"start_index":56517,"end_index":56579,"start_time_s":0.226068,"end_time_s":0.226316,"duration_s":0.000248},{"flag":2,"start_index":56579,"end_index":58666,"start_time_s":0.226316,"end_time_s":0.23466399999999998,"duration_s":0.008348},{"flag":1,"start_index":58666,"end_index":58668,"start_time_s":0.23466399999999998,"end_time_s":0.234672,"duration_s":8e-06},{"flag":3,"start_index":58668,"end_index":62647,"start_time_s":0.234672,"end_time_s":0.250588,"duration_s":0.015916},{"flag":1,"start_index":62647,"end_index":62870,"start_time_s":0.250588,"end_time_s":0.25148,"duration_s":0.000892},{"flag":2,"start_index":62870,"end_index":63805,"start_time_s":0.25148,"end_time_s":0.25522,"duration_s":0.00374},{"flag":1,"start_index":63805,"end_index":63807,"start_time_s":0.25522,"end_time_s":0.255228,"duration_s":8e-06},{"flag":3,"start_index":63807,"end_index":63809,"start_time_s":0.255228,"end_time_s":0.25523599999999996,"duration_s":8e-06},{"flag":1,"start_index":63809,"end_index":63868,"start_time_s":0.25523599999999996,"end_time_s":0.255472,"duration_s":0.000236},{"flag":2,"start_index":63868,"end_index":64802,"start_time_s":0.255472,"end_time_s":0.259208,"duration_s":0.0037359999999999997},{"flag":1,"start_index":64802,"end_index":64804,"start_time_s":0.259208,"end_time_s":0.259216,"duration_s":8e-06},{"flag":3,"start_index":64804,"end_index":64806,"start_time_s":0.259216,"end_time_s":0.259224,"duration_s":8e-06},{"flag":1,"start_index":64806,"end_index":64865,"start_time_s":0.259224,"end_time_s":0.25945999999999997,"duration_s":0.000236},{"flag":2,"start_index":64865,"end_index":66666,"start_time_s":0.25945999999999997,"end_time_s":0.266664,"duration_s":0.0072039999999999995},{"flag":1,"start_index":66666,"end_index":66668,"start_time_s":0.266664,"end_time_s":0.26667199999999996,"duration_s":8e-06},{"flag":3,"start_index":66668,"end_index":70046,"start_time_s":0.26667199999999996,"end_time_s":0.280184,"duration_s":0.013512},{"flag":1,"start_index":70046,"end_index":70105,"start_time_s":0.280184,"end_time_s":0.28042,"duration_s":0.000236},{"flag":2,"start_index":70105,"end_index":71045,"start_time_s":0.28042,"end_time_s":0.28418,"duration_s":0.00376},{"flag":1,"start_index":71045,"end_index":71047,"start_time_s":0.28418,"end_time_s":0.284188,"duration_s":8e-06},{"flag":3,"start_index":71047,"end_index":72724,"start_time_s":0.284188,"end_time_s":0.290896,"duration_s":0.0067079999999999996},{"flag":1,"start_index":72724,"end_index":72786,"start_time_s":0.290896,"end_time_s":0.291144,"duration_s":0.000248},{"flag":2,"start_index":72786,"end_index":73726,"start_time_s":0.291144,"end_time_s":0.294904,"duration_s":0.00376},{"flag":1,"start_index":73726,"end_index":73728,"start_time_s":0.294904,"end_time_s":0.294912,"duration_s":8e-06},{"flag":3,"start_index":73728,"end_index":74252,"start_time_s":0.294912,"end_time_s":0.297008,"duration_s":0.0020959999999999998},{"flag":1,"start_index":74252,"end_index":74313,"start_time_s":0.297008,"end_time_s":0.29725199999999996,"duration_s":0.000244},{"flag":2,"start_index":74313,"end_index":75253,"start_time_s":0.29725199999999996,"end_time_s":0.301012,"duration_s":0.00376},{"flag":1,"start_index":75253,"end_index":75255,"start_time_s":0.301012,"end_time_s":0.30102,"duration_s":8e-06},{"flag":3,"start_index":75255,"end_index":75771,"start_time_s":0.30102,"end_time_s":0.30308399999999996,"duration_s":0.002064},{"flag":1,"start_index":75771,"end_index":75834,"start_time_s":0.30308399999999996,"end_time_s":0.303336,"duration_s":0.000252},{"flag":2,"start_index":75834,"end_index":77333,"start_time_s":0.303336,"end_time_s":0.309332,"duration_s":0.005996},{"flag":1,"start_index":77333,"end_index":77335,"start_time_s":0.309332,"end_time_s":0.30934,"duration_s":8e-06},{"flag":3,"start_index":77335,"end_index":77857,"start_time_s":0.30934,"end_time_s":0.311428,"duration_s":0.002088},{"flag":1,"start_index":77857,"end_index":77918,"start_time_s":0.311428,"end_time_s":0.311672,"duration_s":0.000244},{"flag":2,"start_index":77918,"end_index":79999,"start_time_s":0.311672,"end_time_s":0.319996,"duration_s":0.008324},{"flag":1,"start_index":79999,"end_index":80001,"start_time_s":0.319996,"end_time_s":0.320004,"duration_s":8e-06},{"flag":3,"start_index":80001,"end_index":80528,"start_time_s":0.320004,"end_time_s":0.322112,"duration_s":0.002108},{"flag":1,"start_index":80528,"end_index":80583,"start_time_s":0.322112,"end_time_s":0.322332,"duration_s":0.00021999999999999998},{"flag":2,"start_index":80583,"end_index":82666,"start_time_s":0.322332,"end_time_s":0.33066399999999996,"duration_s":0.008331999999999999},{"flag":1,"start_index":82666,"end_index":82668,"start_time_s":0.33066399999999996,"end_time_s":0.33067199999999997,"duration_s":8e-06},{"flag":3,"start_index":82668,"end_index":83176,"start_time_s":0.33067199999999997,"end_time_s":0.332704,"duration_s":0.002032},{"flag":1,"start_index":83176,"end_index":83237,"start_time_s":0.332704,"end_time_s":0.33294799999999997,"duration_s":0.000244},{"flag":2,"start_index":83237,"end_index":85333,"start_time_s":0.33294799999999997,"end_time_s":0.34133199999999997,"duration_s":0.008383999999999999},{"flag":1,"start_index":85333,"end_index":85335,"start_time_s":0.34133199999999997,"end_time_s":0.34134,"duration_s":8e-06},{"flag":3,"start_index":85335,"end_index":89306,"start_time_s":0.34134,"end_time_s":0.357224,"duration_s":0.015884},{"flag":1,"start_index":89306,"end_index":89362,"start_time_s":0.357224,"end_time_s":0.357448,"duration_s":0.000224},{"flag":2,"start_index":89362,"end_index":90296,"start_time_s":0.357448,"end_time_s":0.361184,"duration_s":0.0037359999999999997},{"flag":1,"start_index":90296,"end_index":90298,"start_time_s":0.361184,"end_time_s":0.36119199999999996,"duration_s":8e-06},{"flag":3,"start_index":90298,"end_index":90300,"start_time_s":0.36119199999999996,"end_time_s":0.36119999999999997,"duration_s":8e-06},{"flag":1,"start_index":90300,"end_index":90359,"start_time_s":0.36119999999999997,"end_time_s":0.361436,"duration_s":0.000236},{"flag":2,"start_index":90359,"end_index":91293,"start_time_s":0.361436,"end_time_s":0.365172,"duration_s":0.0037359999999999997},{"flag":1,"start_index":91293,"end_index":91295,"start_time_s":0.365172,"end_time_s":0.36518,"duration_s":8e-06},{"flag":3,"start_index":91295,"end_index":91297,"start_time_s":0.36518,"end_time_s":0.36518799999999996,"duration_s":8e-06},{"flag":1,"start_index":91297,"end_index":91357,"start_time_s":0.36518799999999996,"end_time_s":0.365428,"duration_s":0.00023999999999999998},{"flag":2,"start_index":91357,"end_index":93332,"start_time_s":0.365428,"end_time_s":0.373328,"duration_s":0.007899999999999999},{"flag":1,"start_index":93332,"end_index":93335,"start_time_s":0.373328,"end_time_s":0.37334,"duration_s":1.2e-05},{"flag":3,"start_index":93335,"end_index":96974,"start_time_s":0.37334,"end_time_s":0.38789599999999996,"duration_s":0.014556},{"flag":1,"start_index":96974,"end_index":97034,"start_time_s":0.38789599999999996,"end_time_s":0.388136,"duration_s":0.00023999999999999998},{"flag":2,"start_index":97034,"end_index":97968,"start_time_s":0.388136,"end_time_s":0.391872,"duration_s":0.0037359999999999997},{"flag":1,"start_index":97968,"end_index":97970,"start_time_s":0.391872,"end_time_s":0.39188,"duration_s":8e-06},{"flag":3,"start_index":97970,"end_index":99639,"start_time_s":0.39188,"end_time_s":0.39855599999999997,"duration_s":0.006676},{"flag":1,"start_index":99639,"end_index":99833,"start_time_s":0.39855599999999997,"end_time_s":0.39933199999999996,"duration_s":0.000776},{"flag":2,"start_index":99833,"end_index":100768,"start_time_s":0.39933199999999996,"end_time_s":0.403072,"duration_s":0.00374},{"flag":1,"start_index":100768,"end_index":100770,"start_time_s":0.403072,"end_time_s":0.40308,"duration_s":8e-06},{"flag":3,"start_index":100770,"end_index":101298,"start_time_s":0.40308,"end_time_s":0.405192,"duration_s":0.0021119999999999997},{"flag":1,"start_index":101298,"end_index":101360,"start_time_s":0.405192,"end_time_s":0.40543999999999997,"duration_s":0.000248},{"flag":2,"start_index":101360,"end_index":102294,"start_time_s":0.40543999999999997,"end_time_s":0.409176,"duration_s":0.0037359999999999997},{"flag":1,"start_index":102294,"end_index":102296,"start_time_s":0.409176,"end_time_s":0.409184,"duration_s":8e-06},{"flag":3,"start_index":102296,"end_index":102806,"start_time_s":0.409184,"end_time_s":0.411224,"duration_s":0.0020399999999999997},{"flag":1,"start_index":102806,"end_index":102867,"start_time_s":0.411224,"end_time_s":0.411468,"duration_s":0.000244},{"flag":2,"start_index":102867,"end_index":103999,"start_time_s":0.411468,"end_time_s":0.415996,"duration_s":0.004528},{"flag":1,"start_index":103999,"end_index":104001,"start_time_s":0.415996,"end_time_s":0.416004,"duration_s":8e-06},{"flag":3,"start_index":104001,"end_index":104522,"start_time_s":0.416004,"end_time_s":0.41808799999999996,"duration_s":0.002084},{"flag":1,"start_index":104522,"end_index":104584,"start_time_s":0.41808799999999996,"end_time_s":0.418336,"duration_s":0.000248},{"flag":2,"start_index":104584,"end_index":106666,"start_time_s":0.418336,"end_time_s":0.426664,"duration_s":0.008328},{"flag":1,"start_index":106666,"end_index":106668,"start_time_s":0.426664,"end_time_s":0.426672,"duration_s":8e-06},{"flag":3,"start_index":106668,"end_index":107198,"start_time_s":0.426672,"end_time_s":0.428792,"duration_s":0.00212},{"flag":1,"start_index":107198,"end_index":107259,"start_time_s":0.428792,"end_time_s":0.429036,"duration_s":0.000244},{"flag":2,"start_index":107259,"end_index":109332,"start_time_s":0.429036,"end_time_s":0.437328,"duration_s":0.008291999999999999},{"flag":1,"start_index":109332,"end_index":109335,"start_time_s":0.437328,"end_time_s":0.43734,"duration_s":1.2e-05},{"flag":3,"start_index":109335,"end_index":109854,"start_time_s":0.43734,"end_time_s":0.439416,"duration_s":0.0020759999999999997},{"flag":1,"start_index":109854,"end_index":109915,"start_time_s":0.439416,"end_time_s":0.43966,"duration_s":0.000244},{"flag":2,"start_index":109915,"end_index":111999,"start_time_s":0.43966,"end_time_s":0.447996,"duration_s":0.008336},{"flag":1,"start_index":111999,"end_index":112001,"start_time_s":0.447996,"end_time_s":0.44800399999999996,"duration_s":8e-06},{"flag":3,"start_index":112001,"end_index":115941,"start_time_s":0.44800399999999996,"end_time_s":0.46376399999999995,"duration_s":0.01576},{"flag":1,"start_index":115941,"end_index":116003,"start_time_s":0.46376399999999995,"end_time_s":0.464012,"duration_s":0.000248},{"flag":2,"start_index":116003,"end_index":116937,"start_time_s":0.464012,"end_time_s":0.467748,"duration_s":0.0037359999999999997},{"flag":1,"start_index":116937,"end_index":116940,"start_time_s":0.467748,"end_time_s":0.46775999999999995,"duration_s":1.2e-05},{"flag":3,"start_index":116940,"end_index":116942,"start_time_s":0.46775999999999995,"end_time_s":0.46776799999999996,"duration_s":8e-06},{"flag":1,"start_index":116942,"end_index":117001,"start_time_s":0.46776799999999996,"end_time_s":0.468004,"duration_s":0.000236},{"flag":2,"start_index":117001,"end_index":117935,"start_time_s":0.468004,"end_time_s":0.47174,"duration_s":0.0037359999999999997},{"flag":1,"start_index":117935,"end_index":117937,"start_time_s":0.47174,"end_time_s":0.471748,"duration_s":8e-06},{"flag":3,"start_index":117937,"end_index":117939,"start_time_s":0.471748,"end_time_s":0.47175599999999995,"duration_s":8e-06},{"flag":1,"start_index":117939,"end_index":118001,"start_time_s":0.47175599999999995,"end_time_s":0.472004,"duration_s":0.000248},{"flag":2,"start_index":118001,"end_index":119999,"start_time_s":0.472004,"end_time_s":0.479996,"duration_s":0.007991999999999999},{"flag":1,"start_index":119999,"end_index":120001,"start_time_s":0.479996,"end_time_s":0.480004,"duration_s":8e-06},{"flag":3,"start_index":120001,"end_index":123840,"start_time_s":0.480004,"end_time_s":0.49535999999999997,"duration_s":0.015356},{"flag":1,"start_index":123840,"end_index":123897,"start_time_s":0.49535999999999997,"end_time_s":0.495588,"duration_s":0.00022799999999999999},{"flag":2,"start_index":123897,"end_index":124837,"start_time_s":0.495588,"end_time_s":0.49934799999999996,"duration_s":0.00376},{"flag":1,"start_index":124837,"end_index":124840,"start_time_s":0.49934799999999996,"end_time_s":0.49935999999999997,"duration_s":1.2e-05},{"flag":3,"start_index":124840,"end_index":126526,"start_time_s":0.49935999999999997,"end_time_s":0.506104,"duration_s":0.006744},{"flag":1,"start_index":126526,"end_index":126588,"start_time_s":0.506104,"end_time_s":0.506352,"duration_s":0.000248},{"flag":2,"start_index":126588,"end_index":127527,"start_time_s":0.506352,"end_time_s":0.510108,"duration_s":0.003756},{"flag":1,"start_index":127527,"end_index":127529,"start_time_s":0.510108,"end_time_s":0.510116,"duration_s":8e-06},{"flag":3,"start_index":127529,"end_index":128057,"start_time_s":0.510116,"end_time_s":0.512228,"duration_s":0.0021119999999999997},{"flag":1,"start_index":128057,"end_index":128112,"start_time_s":0.512228,"end_time_s":0.512448,"duration_s":0.00021999999999999998},{"flag":2,"start_index":128112,"end_index":129051,"start_time_s":0.512448,"end_time_s":0.516204,"duration_s":0.003756},{"flag":1,"start_index":129051,"end_index":129053,"start_time_s":0.516204,"end_time_s":0.516212,"duration_s":8e-06},{"flag":3,"start_index":129053,"end_index":129589,"start_time_s":0.516212,"end_time_s":0.5183559999999999,"duration_s":0.002144},{"flag":1,"start_index":129589,"end_index":129650,"start_time_s":0.5183559999999999,"end_time_s":0.5186,"duration_s":0.000244},{"flag":2,"start_index":129650,"end_index":130666,"start_time_s":0.5186,"end_time_s":0.522664,"duration_s":0.004064},{"flag":1,"start_index":130666,"end_index":130668,"start_time_s":0.522664,"end_time_s":0.522672,"duration_s":8e-06},{"flag":3,"start_index":130668,"end_index":131198,"start_time_s":0.522672,"end_time_s":0.5247919999999999,"duration_s":0.00212},{"flag":1,"start_index":131198,"end_index":131259,"start_time_s":0.5247919999999999,"end_time_s":0.525036,"duration_s":0.000244},{"flag":2,"start_index":131259,"end_index":133332,"start_time_s":0.525036,"end_time_s":0.533328,"duration_s":0.008291999999999999},{"flag":1,"start_index":133332,"end_index":133334,"start_time_s":0.533328,"end_time_s":0.5333359999999999,"duration_s":8e-06},{"flag":3,"start_index":133334,"end_index":133846,"start_time_s":0.5333359999999999,"end_time_s":0.535384,"duration_s":0.002048},{"flag":1,"start_index":133846,"end_index":133906,"start_time_s":0.535384,"end_time_s":0.535624,"duration_s":0.00023999999999999998},{"flag":2,"start_index":133906,"end_index":135999,"start_time_s":0.535624,"end_time_s":0.5439959999999999,"duration_s":0.008372},{"flag":1,"start_index":135999,"end_index":136001,"start_time_s":0.5439959999999999,"end_time_s":0.5440039999999999,"duration_s":8e-06},{"flag":3,"start_index":136001,"end_index":136523,"start_time_s":0.5440039999999999,"end_time_s":0.546092,"duration_s":0.002088},{"flag":1,"start_index":136523,"end_index":136578,"start_time_s":0.546092,"end_time_s":0.546312,"duration_s":0.00021999999999999998},{"flag":2,"start_index":136578,"end_index":138666,"start_time_s":0.546312,"end_time_s":0.5546639999999999,"duration_s":0.008352},{"flag":1,"start_index":138666,"end_index":138668,"start_time_s":0.5546639999999999,"end_time_s":0.5546719999999999,"duration_s":8e-06},{"flag":3,"start_index":138668,"end_index":142609,"start_time_s":0.5546719999999999,"end_time_s":0.5704359999999999,"duration_s":0.015764},{"flag":1,"start_index":142609,"end_index":142670,"start_time_s":0.5704359999999999,"end_time_s":0.57068,"duration_s":0.000244},{"flag":2,"start_index":142670,"end_index":143605,"start_time_s":0.57068,"end_time_s":0.5744199999999999,"duration_s":0.00374},{"flag":1,"start_index":143605,"end_index":143607,"start_time_s":0.5744199999999999,"end_time_s":0.5744279999999999,"duration_s":8e-06},{"flag":3,"start_index":143607,"end_index":143609,"start_time_s":0.5744279999999999,"end_time_s":0.574436,"duration_s":8e-06},{"flag":1,"start_index":143609,"end_index":143669,"start_time_s":0.574436,"end_time_s":0.574676,"duration_s":0.00023999999999999998},{"flag":2,"start_index":143669,"end_index":144604,"start_time_s":0.574676,"end_time_s":0.5784159999999999,"duration_s":0.00374},{"flag":1,"start_index":144604,"end_index":144606,"start_time_s":0.5784159999999999,"end_time_s":0.5784239999999999,"duration_s":8e-06},{"flag":3,"start_index":144606,"end_index":144608,"start_time_s":0.5784239999999999,"end_time_s":0.578432,"duration_s":8e-06},{"flag":1,"start_index":144608,"end_index":144667,"start_time_s":0.578432,"end_time_s":0.578668,"duration_s":0.000236},{"flag":2,"start_index":144667,"end_index":146666,"start_time_s":0.578668,"end_time_s":0.586664,"duration_s":0.007996},{"flag":1,"start_index":146666,"end_index":146668,"start_time_s":0.586664,"end_time_s":0.586672,"duration_s":8e-06},{"flag":3,"start_index":146668,"end_index":150514,"start_time_s":0.586672,"end_time_s":0.6020559999999999,"duration_s":0.015384},{"flag":1,"start_index":150514,"end_index":150574,"start_time_s":0.6020559999999999,"end_time_s":0.6022959999999999,"duration_s":0.00023999999999999998},{"flag":2,"start_index":150574,"end_index":151516,"start_time_s":0.6022959999999999,"end_time_s":0.6060639999999999,"duration_s":0.0037679999999999996},{"flag":1,"start_index":151516,"end_index":151518,"start_time_s":0.6060639999999999,"end_time_s":0.6060719999999999,"duration_s":8e-06},{"flag":3,"start_index":151518,"end_index":153178,"start_time_s":0.6060719999999999,"end_time_s":0.6127119999999999,"duration_s":0.00664},{"flag":1,"start_index":153178,"end_index":153239,"start_time_s":0.6127119999999999,"end_time_s":0.612956,"duration_s":0.000244},{"flag":2,"start_index":153239,"end_index":154180,"start_time_s":0.612956,"end_time_s":0.6167199999999999,"duration_s":0.003764},{"flag":1,"start_index":154180,"end_index":154182,"start_time_s":0.6167199999999999,"end_time_s":0.6167279999999999,"duration_s":8e-06},{"flag":3,"start_index":154182,"end_index":154717,"start_time_s":0.6167279999999999,"end_time_s":0.618868,"duration_s":0.00214},{"flag":1,"start_index":154717,"end_index":154779,"start_time_s":0.618868,"end_time_s":0.619116,"duration_s":0.000248},{"flag":2,"start_index":154779,"end_index":155718,"start_time_s":0.619116,"end_time_s":0.622872,"duration_s":0.003756},{"flag":1,"start_index":155718,"end_index":155720,"start_time_s":0.622872,"end_time_s":0.62288,"duration_s":8e-06},{"flag":3,"start_index":155720,"end_index":156233,"start_time_s":0.62288,"end_time_s":0.6249319999999999,"duration_s":0.002052},{"flag":1,"start_index":156233,"end_index":156295,"start_time_s":0.6249319999999999,"end_time_s":0.62518,"duration_s":0.000248},{"flag":2,"start_index":156295,"end_index":157332,"start_time_s":0.62518,"end_time_s":0.629328,"duration_s":0.004148},{"flag":1,"start_index":157332,"end_index":157334,"start_time_s":0.629328,"end_time_s":0.629336,"duration_s":8e-06},{"flag":3,"start_index":157334,"end_index":157860,"start_time_s":0.629336,"end_time_s":0.63144,"duration_s":0.002104},{"flag":1,"start_index":157860,"end_index":157921,"start_time_s":0.63144,"end_time_s":0.631684,"duration_s":0.000244},{"flag":2,"start_index":157921,"end_index":159999,"start_time_s":0.631684,"end_time_s":0.639996,"duration_s":0.008312},{"flag":1,"start_index":159999,"end_index":160001,"start_time_s":0.639996,"end_time_s":0.640004,"duration_s":8e-06},{"flag":3,"start_index":160001,"end_index":160532,"start_time_s":0.640004,"end_time_s":0.6421279999999999,"duration_s":0.002124},{"flag":1,"start_index":160532,"end_index":160593,"start_time_s":0.6421279999999999,"end_time_s":0.6423719999999999,"duration_s":0.000244},{"flag":2,"start_index":160593,"end_index":162665,"start_time_s":0.6423719999999999,"end_time_s":0.65066,"duration_s":0.008288},{"flag":1,"start_index":162665,"end_index":162668,"start_time_s":0.65066,"end_time_s":0.6506719999999999,"duration_s":1.2e-05},{"flag":3,"start_index":162668,"end_index":163180,"start_time_s":0.6506719999999999,"end_time_s":0.65272,"duration_s":0.002048},{"flag":1,"start_index":163180,"end_index":163373,"start_time_s":0.65272,"end_time_s":0.653492,"duration_s":0.000772},{"flag":2,"start_index":163373,"end_index":165332,"start_time_s":0.653492,"end_time_s":0.6613279999999999,"duration_s":0.007836},{"flag":1,"start_index":165332,"end_index":165334,"start_time_s":0.6613279999999999,"end_time_s":0.6613359999999999,"duration_s":8e-06},{"flag":3,"start_index":165334,"end_index":169280,"start_time_s":0.6613359999999999,"end_time_s":0.6771199999999999,"duration_s":0.015784},{"flag":1,"start_index":169280,"end_index":169342,"start_time_s":0.6771199999999999,"end_time_s":0.677368,"duration_s":0.000248},{"flag":2,"start_index":169342,"end_index":170276,"start_time_s":0.677368,"end_time_s":0.6811039999999999,"duration_s":0.0037359999999999997},{"flag":1,"start_index":170276,"end_index":170279,"start_time_s":0.6811039999999999,"end_time_s":0.6811159999999999,"duration_s":1.2e-05},{"flag":3,"start_index":170279,"end_index":170281,"start_time_s":0.6811159999999999,"end_time_s":0.681124,"duration_s":8e-06},{"flag":1,"start_index":170281,"end_index":170340,"start_time_s":0.681124,"end_time_s":0.68136,"duration_s":0.000236},{"flag":2,"start_index":170340,"end_index":171274,"start_time_s":0.68136,"end_time_s":0.6850959999999999,"duration_s":0.0037359999999999997},{"flag":1,"start_index":171274,"end_index":171276,"start_time_s":0.6850959999999999,"end_time_s":0.6851039999999999,"duration_s":8e-06},{"flag":3,"start_index":171276,"end_index":171278,"start_time_s":0.6851039999999999,"end_time_s":0.6851119999999999,"duration_s":8e-06},{"flag":1,"start_index":171278,"end_index":171333,"start_time_s":0.6851119999999999,"end_time_s":0.6853319999999999,"duration_s":0.00021999999999999998},{"flag":2,"start_index":171333,"end_index":173332,"start_time_s":0.6853319999999999,"end_time_s":0.6933279999999999,"duration_s":0.007996},{"flag":1,"start_index":173332,"end_index":173334,"start_time_s":0.6933279999999999,"end_time_s":0.693336,"duration_s":8e-06},{"flag":3,"start_index":173334,"end_index":177189,"start_time_s":0.693336,"end_time_s":0.7087559999999999,"duration_s":0.01542},{"flag":1,"start_index":177189,"end_index":177250,"start_time_s":0.7087559999999999,"end_time_s":0.709,"duration_s":0.000244},{"flag":2,"start_index":177250,"end_index":178190,"start_time_s":0.709,"end_time_s":0.71276,"duration_s":0.00376},{"flag":1,"start_index":178190,"end_index":178193,"start_time_s":0.71276,"end_time_s":0.712772,"duration_s":1.2e-05},{"flag":3,"start_index":178193,"end_index":179853,"start_time_s":0.712772,"end_time_s":0.7194119999999999,"duration_s":0.00664},{"flag":1,"start_index":179853,"end_index":179908,"start_time_s":0.7194119999999999,"end_time_s":0.7196319999999999,"duration_s":0.00021999999999999998},{"flag":2,"start_index":179908,"end_index":180848,"start_time_s":0.7196319999999999,"end_time_s":0.7233919999999999,"duration_s":0.00376},{"flag":1,"start_index":180848,"end_index":180850,"start_time_s":0.7233919999999999,"end_time_s":0.7233999999999999,"duration_s":8e-06},{"flag":3,"start_index":180850,"end_index":181365,"start_time_s":0.7233999999999999,"end_time_s":0.72546,"duration_s":0.0020599999999999998},{"flag":1,"start_index":181365,"end_index":181426,"start_time_s":0.72546,"end_time_s":0.725704,"duration_s":0.000244},{"flag":2,"start_index":181426,"end_index":182365,"start_time_s":0.725704,"end_time_s":0.72946,"duration_s":0.003756},{"flag":1,"start_index":182365,"end_index":182367,"start_time_s":0.72946,"end_time_s":0.729468,"duration_s":8e-06},{"flag":3,"start_index":182367,"end_index":182881,"start_time_s":0.729468,"end_time_s":0.731524,"duration_s":0.002056},{"flag":1,"start_index":182881,"end_index":182943,"start_time_s":0.731524,"end_time_s":0.731772,"duration_s":0.000248},{"flag":2,"start_index":182943,"end_index":183999,"start_time_s":0.731772,"end_time_s":0.735996,"duration_s":0.0042239999999999995},{"flag":1,"start_index":183999,"end_index":184001,"start_time_s":0.735996,"end_time_s":0.736004,"duration_s":8e-06},{"flag":3,"start_index":184001,"end_index":184529,"start_time_s":0.736004,"end_time_s":0.738116,"duration_s":0.0021119999999999997},{"flag":1,"start_index":184529,"end_index":184590,"start_time_s":0.738116,"end_time_s":0.73836,"duration_s":0.000244},{"flag":2,"start_index":184590,"end_index":186665,"start_time_s":0.73836,"end_time_s":0.74666,"duration_s":0.0083},{"flag":1,"start_index":186665,"end_index":186667,"start_time_s":0.74666,"end_time_s":0.746668,"duration_s":8e-06},{"flag":3,"start_index":186667,"end_index":187191,"start_time_s":0.746668,"end_time_s":0.748764,"duration_s":0.0020959999999999998},{"flag":1,"start_index":187191,"end_index":187252,"start_time_s":0.748764,"end_time_s":0.749008,"duration_s":0.000244},{"flag":2,"start_index":187252,"end_index":189332,"start_time_s":0.749008,"end_time_s":0.757328,"duration_s":0.00832},{"flag":1,"start_index":189332,"end_index":189334,"start_time_s":0.757328,"end_time_s":0.757336,"duration_s":8e-06},{"flag":3,"start_index":189334,"end_index":189851,"start_time_s":0.757336,"end_time_s":0.759404,"duration_s":0.002068},{"flag":1,"start_index":189851,"end_index":189913,"start_time_s":0.759404,"end_time_s":0.759652,"duration_s":0.000248},{"flag":2,"start_index":189913,"end_index":191999,"start_time_s":0.759652,"end_time_s":0.767996,"duration_s":0.008343999999999999},{"flag":1,"start_index":191999,"end_index":192001,"start_time_s":0.767996,"end_time_s":0.768004,"duration_s":8e-06},{"flag":3,"start_index":192001,"end_index":195964,"start_time_s":0.768004,"end_time_s":0.783856,"duration_s":0.015851999999999998},{"flag":1,"start_index":195964,"end_index":196026,"start_time_s":0.783856,"end_time_s":0.7841039999999999,"duration_s":0.000248},{"flag":2,"start_index":196026,"end_index":196959,"start_time_s":0.7841039999999999,"end_time_s":0.787836,"duration_s":0.0037319999999999996},{"flag":1,"start_index":196959,"end_index":196961,"start_time_s":0.787836,"end_time_s":0.787844,"duration_s":8e-06},{"flag":3,"start_index":196961,"end_index":196963,"start_time_s":0.787844,"end_time_s":0.787852,"duration_s":8e-06},{"flag":1,"start_index":196963,"end_index":197017,"start_time_s":0.787852,"end_time_s":0.788068,"duration_s":0.000216},{"flag":2,"start_index":197017,"end_index":197952,"start_time_s":0.788068,"end_time_s":0.791808,"duration_s":0.00374},{"flag":1,"start_index":197952,"end_index":197954,"start_time_s":0.791808,"end_time_s":0.791816,"duration_s":8e-06},{"flag":3,"start_index":197954,"end_index":197956,"start_time_s":0.791816,"end_time_s":0.791824,"duration_s":8e-06},{"flag":1,"start_index":197956,"end_index":198016,"start_time_s":0.791824,"end_time_s":0.792064,"duration_s":0.00023999999999999998},{"flag":2,"start_index":198016,"end_index":199999,"start_time_s":0.792064,"end_time_s":0.7999959999999999,"duration_s":0.007932},{"flag":1,"start_index":199999,"end_index":200001,"start_time_s":0.7999959999999999,"end_time_s":0.8000039999999999,"duration_s":8e-06},{"flag":3,"start_index":200001,"end_index":203524,"start_time_s":0.8000039999999999,"end_time_s":0.8140959999999999,"duration_s":0.014091999999999999},{"flag":1,"start_index":203524,"end_index":203586,"start_time_s":0.8140959999999999,"end_time_s":0.814344,"duration_s":0.000248},{"flag":2,"start_index":203586,"end_index":204524,"start_time_s":0.814344,"end_time_s":0.8180959999999999,"duration_s":0.0037519999999999997},{"flag":1,"start_index":204524,"end_index":204526,"start_time_s":0.8180959999999999,"end_time_s":0.8181039999999999,"duration_s":8e-06},{"flag":3,"start_index":204526,"end_index":206189,"start_time_s":0.8181039999999999,"end_time_s":0.8247559999999999,"duration_s":0.006652},{"flag":1,"start_index":206189,"end_index":206251,"start_time_s":0.8247559999999999,"end_time_s":0.825004,"duration_s":0.000248},{"flag":2,"start_index":206251,"end_index":207189,"start_time_s":0.825004,"end_time_s":0.8287559999999999,"duration_s":0.0037519999999999997},{"flag":1,"start_index":207189,"end_index":207192,"start_time_s":0.8287559999999999,"end_time_s":0.828768,"duration_s":1.2e-05},{"flag":3,"start_index":207192,"end_index":207714,"start_time_s":0.828768,"end_time_s":0.8308559999999999,"duration_s":0.002088},{"flag":1,"start_index":207714,"end_index":207776,"start_time_s":0.8308559999999999,"end_time_s":0.831104,"duration_s":0.000248},{"flag":2,"start_index":207776,"end_index":208715,"start_time_s":0.831104,"end_time_s":0.8348599999999999,"duration_s":0.003756},{"flag":1,"start_index":208715,"end_index":208717,"start_time_s":0.8348599999999999,"end_time_s":0.8348679999999999,"duration_s":8e-06},{"flag":3,"start_index":208717,"end_index":209224,"start_time_s":0.8348679999999999,"end_time_s":0.836896,"duration_s":0.002028},{"flag":1,"start_index":209224,"end_index":209285,"start_time_s":0.836896,"end_time_s":0.83714,"duration_s":0.000244},{"flag":2,"start_index":209285,"end_index":210665,"start_time_s":0.83714,"end_time_s":0.84266,"duration_s":0.00552},{"flag":1,"start_index":210665,"end_index":210667,"start_time_s":0.84266,"end_time_s":0.842668,"duration_s":8e-06},{"flag":3,"start_index":210667,"end_index":211197,"start_time_s":0.842668,"end_time_s":0.844788,"duration_s":0.00212},{"flag":1,"start_index":211197,"end_index":211258,"start_time_s":0.844788,"end_time_s":0.845032,"duration_s":0.000244},{"flag":2,"start_index":211258,"end_index":213332,"start_time_s":0.845032,"end_time_s":0.853328,"duration_s":0.008296},{"flag":1,"start_index":213332,"end_index":213334,"start_time_s":0.853328,"end_time_s":0.853336,"duration_s":8e-06},{"flag":3,"start_index":213334,"end_index":213853,"start_time_s":0.853336,"end_time_s":0.855412,"duration_s":0.0020759999999999997},{"flag":1,"start_index":213853,"end_index":213915,"start_time_s":0.855412,"end_time_s":0.85566,"duration_s":0.000248},{"flag":2,"start_index":213915,"end_index":215998,"start_time_s":0.85566,"end_time_s":0.863992,"duration_s":0.008331999999999999},{"flag":1,"start_index":215998,"end_index":216001,"start_time_s":0.863992,"end_time_s":0.864004,"duration_s":1.2e-05},{"flag":3,"start_index":216001,"end_index":216510,"start_time_s":0.864004,"end_time_s":0.8660399999999999,"duration_s":0.002036},{"flag":1,"start_index":216510,"end_index":216571,"start_time_s":0.8660399999999999,"end_time_s":0.8662839999999999,"duration_s":0.000244},{"flag":2,"start_index":216571,"end_index":218665,"start_time_s":0.8662839999999999,"end_time_s":0.87466,"duration_s":0.008376},{"flag":1,"start_index":218665,"end_index":218667,"start_time_s":0.87466,"end_time_s":0.874668,"duration_s":8e-06},{"flag":3,"start_index":218667,"end_index":222658,"start_time_s":0.874668,"end_time_s":0.890632,"duration_s":0.015964},{"flag":1,"start_index":222658,"end_index":222718,"start_time_s":0.890632,"end_time_s":0.890872,"duration_s":0.00023999999999999998},{"flag":2,"start_index":222718,"end_index":223652,"start_time_s":0.890872,"end_time_s":0.894608,"duration_s":0.0037359999999999997},{"flag":1,"start_index":223652,"end_index":223654,"start_time_s":0.894608,"end_time_s":0.894616,"duration_s":8e-06},{"flag":3,"start_index":223654,"end_index":223656,"start_time_s":0.894616,"end_time_s":0.894624,"duration_s":8e-06},{"flag":1,"start_index":223656,"end_index":223720,"start_time_s":0.894624,"end_time_s":0.89488,"duration_s":0.000256},{"flag":2,"start_index":223720,"end_index":224654,"start_time_s":0.89488,"end_time_s":0.898616,"duration_s":0.0037359999999999997},{"flag":1,"start_index":224654,"end_index":224656,"start_time_s":0.898616,"end_time_s":0.898624,"duration_s":8e-06},{"flag":3,"start_index":224656,"end_index":224658,"start_time_s":0.898624,"end_time_s":0.898632,"duration_s":8e-06},{"flag":1,"start_index":224658,"end_index":224723,"start_time_s":0.898632,"end_time_s":0.8988919999999999,"duration_s":0.00026},{"flag":2,"start_index":224723,"end_index":226665,"start_time_s":0.8988919999999999,"end_time_s":0.9066599999999999,"duration_s":0.007768},{"flag":1,"start_index":226665,"end_index":226667,"start_time_s":0.9066599999999999,"end_time_s":0.9066679999999999,"duration_s":8e-06},{"flag":3,"start_index":226667,"end_index":230253,"start_time_s":0.9066679999999999,"end_time_s":0.9210119999999999,"duration_s":0.014343999999999999},{"flag":1,"start_index":230253,"end_index":230450,"start_time_s":0.9210119999999999,"end_time_s":0.9218,"duration_s":0.000788},{"flag":2,"start_index":230450,"end_index":231390,"start_time_s":0.9218,"end_time_s":0.9255599999999999,"duration_s":0.00376},{"flag":1,"start_index":231390,"end_index":231392,"start_time_s":0.9255599999999999,"end_time_s":0.925568,"duration_s":8e-06},{"flag":3,"start_index":231392,"end_index":233053,"start_time_s":0.925568,"end_time_s":0.9322119999999999,"duration_s":0.006644},{"flag":1,"start_index":233053,"end_index":233115,"start_time_s":0.9322119999999999,"end_time_s":0.93246,"duration_s":0.000248},{"flag":2,"start_index":233115,"end_index":234054,"start_time_s":0.93246,"end_time_s":0.9362159999999999,"duration_s":0.003756},{"flag":1,"start_index":234054,"end_index":234056,"start_time_s":0.9362159999999999,"end_time_s":0.936224,"duration_s":8e-06},{"flag":3,"start_index":234056,"end_index":234579,"start_time_s":0.936224,"end_time_s":0.9383159999999999,"duration_s":0.002092},{"flag":1,"start_index":234579,"end_index":234640,"start_time_s":0.9383159999999999,"end_time_s":0.93856,"duration_s":0.000244},{"flag":2,"start_index":234640,"end_index":235580,"start_time_s":0.93856,"end_time_s":0.9423199999999999,"duration_s":0.00376},{"flag":1,"start_index":235580,"end_index":235582,"start_time_s":0.9423199999999999,"end_time_s":0.9423279999999999,"duration_s":8e-06},{"flag":3,"start_index":235582,"end_index":236105,"start_time_s":0.9423279999999999,"end_time_s":0.9444199999999999,"duration_s":0.002092},{"flag":1,"start_index":236105,"end_index":236167,"start_time_s":0.9444199999999999,"end_time_s":0.944668,"duration_s":0.000248},{"flag":2,"start_index":236167,"end_index":237332,"start_time_s":0.944668,"end_time_s":0.949328,"duration_s":0.00466},{"flag":1,"start_index":237332,"end_index":237334,"start_time_s":0.949328,"end_time_s":0.949336,"duration_s":8e-06},{"flag":3,"start_index":237334,"end_index":237872,"start_time_s":0.949336,"end_time_s":0.951488,"duration_s":0.002152},{"flag":1,"start_index":237872,"end_index":237934,"start_time_s":0.951488,"end_time_s":0.9517359999999999,"duration_s":0.000248},{"flag":2,"start_index":237934,"end_index":239998,"start_time_s":0.9517359999999999,"end_time_s":0.959992,"duration_s":0.008256},{"flag":1,"start_index":239998,"end_index":240001,"start_time_s":0.959992,"end_time_s":0.960004,"duration_s":1.2e-05},{"flag":3,"start_index":240001,"end_index":240530,"start_time_s":0.960004,"end_time_s":0.96212,"duration_s":0.002116},{"flag":1,"start_index":240530,"end_index":240592,"start_time_s":0.96212,"end_time_s":0.962368,"duration_s":0.000248},{"flag":2,"start_index":240592,"end_index":242665,"start_time_s":0.962368,"end_time_s":0.97066,"duration_s":0.008291999999999999},{"flag":1,"start_index":242665,"end_index":242667,"start_time_s":0.97066,"end_time_s":0.970668,"duration_s":8e-06},{"flag":3,"start_index":242667,"end_index":243186,"start_time_s":0.970668,"end_time_s":0.9727439999999999,"duration_s":0.0020759999999999997},{"flag":1,"start_index":243186,"end_index":243247,"start_time_s":0.9727439999999999,"end_time_s":0.972988,"duration_s":0.000244},{"flag":2,"start_index":243247,"end_index":245332,"start_time_s":0.972988,"end_time_s":0.981328,"duration_s":0.00834},{"flag":1,"start_index":245332,"end_index":245334,"start_time_s":0.981328,"end_time_s":0.981336,"duration_s":8e-06},{"flag":3,"start_index":245334,"end_index":249277,"start_time_s":0.981336,"end_time_s":0.997108,"duration_s":0.015771999999999998},{"flag":1,"start_index":249277,"end_index":249339,"start_time_s":0.997108,"end_time_s":0.9973559999999999,"duration_s":0.000248},{"flag":2,"start_index":249339,"end_index":250000,"start_time_s":0.9973559999999999,"end_time_s":1.0,"duration_s":0.002644}],"summary":{"flag_segment_stats":{"1":{"count":186,"min_s":8e-06,"max_s":0.000892,"mean_s":0.00014008602150537632,"median_s":0.000112,"p95_s":0.000248,"p99_s":0.0007778,"stddev_s":0.00015884093997834385,"total_s":0.026055999999999996},"2":{"count":93,"min_s":0.002644,"max_s":0.008383999999999999,"mean_s":0.005637978494623655,"median_s":0.004064,"p95_s":0.008352,"p99_s":0.00837664,"stddev_s":0.0021534076719673997,"total_s":0.5243319999999999},"3":{"count":93,"min_s":8e-06,"max_s":0.015964,"mean_s":0.004834537634408602,"median_s":0.0020959999999999998,"p95_s":0.0158256,"p99_s":0.01591984,"stddev_s":0.0055909193284070634,"total_s":0.449612}},"transition_counts":{"1->2":93,"1->3":93,"2->1":92,"3->1":93}}} diff --git a/code/docs/DrawDisplay_phase1_flag1.png b/code/docs/DrawDisplay_phase1_flag1.png deleted file mode 100644 index 5fe66b8854fbb4ecb166e4288196a3cc86a68e10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75205 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 V%H}>lOuPU9 diff --git a/code/docs/DrawDisplay_phase1_flag2.png b/code/docs/DrawDisplay_phase1_flag2.png deleted file mode 100644 index 5840c15dbcc60fddbeeefdb1ea3d5ef344b0776b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71350 zcmeFZcR1H?_%{9`%E|~0Gb*#J6j78_q+v_hDU^&TvWsk`C^Tdh5vjE7U7Dm6*_23T zcKps;pU-#vj^}$E&-35&$KyCYM}11(uh)Iw*L9uOd7jrDwtw%=rA$0b6h$r7-ld^W zQFMwFwTOjbG5+N7p%u^Zi;}yhsk?#m5%<&9Zg$ijYj>C9&hEz@Y*wGLb35tad}5=N ztc;Z6`qlRC?k*>lq@|ty<2$6B-Hu9^9rSpMpTg*}>%d8hTINpvqiH=N=tn`2SMt~%m(A1A)|GXX*RyS` zVhh(njOkSO4=ZH)`mX{PRzLY!y-b=bLwZ zmo3}z&vz?bU}XL0o9n%FUD*HmoVT|B??(&&zXc(OS%8dxS%@sw4r}wXeb~gWap1_5{n)ld2?1*M19w;(1zsRY<%;J!*VRE~7`^YG}qG}hocj*fL^-(M$ejJa~<{Hl#dGF}(> z&TO8WD48#N^@{n(kt6pXJ<^Ec+4R21`!v35$-X3&4Fghf$^rrcIv(YvrPQfYr-p`y z%j(m2$K1HF!6TIJ)`5pd7+6>;S6KQ4#>R4GR){O$*_BTH6!TcQE=B5DO25e7>kK=0 z?u=ZuQLAr1MI|I8OpZ4@*FAN$H8nLYt*&0|)cm;W)4hWquguR3mdM(_UoCI{o{El+ zmf5&b9naD}IC#OfCOXb_Y+6!9ML^OdM`N(HsH3Nc{^ZG%pPQOe@b69Y9l703p4|PY z72lbBdayM^Kb;Bh-O<+<{-pH`^Ac7*F}E+)73alOmh3*`uV-O*_^{QF`gHrc6#DDe zuUpyK1uL|AF6yd|Qa3b=t?u_4YNt_|o3wp&{EPmNl~0Z}vL5@Cy~Eh}N>h)Gt*xxr z$YJt~pFVwZad+3ieh;;rZWG$F<-oy$sV3bd75-JLR$US;3LDvY3CUCZ&Gjt?1Mbew zgAbOb#ZQk9L_B?}I5|0K)m|DXBPUn>Q*T}BlH_X=Wo6~=?(X)vKQohE7gSxQ#~k>SPq8SU`gu{Q&@I{Vn#dbez>#m>e|Ilm#6v6O8mCz8yKvMN?xrmc&$^(qmOHRu5H2j(NrPEhl5IO!eoM3^iK%C)>Tc z();z<#`POEaPad-ZSx+t!Y0Pc+Ac1h?vo4~-{pV2`SH?Jt*EmR5zP23y3?mmZ}pw# z!t<8ix2|v*YTtoxxM#{(ii6!%Fj%af@AwfXgH2Raw6dzIqq8c4fsrvVH`h7v)vuO< z6|v;n3Cr|vb`*>%7Oqtw}dT?Rg*!e@+>_w9aZ<-<5&ZXts<~i!>??O!o^4Gf7RoTk zR#sNF{LPy^6npa%=SELoN#ksGsuIhrsik$kcJ}q_*R)roqN2FtBu$p@*s&x056OVpln(gjC>NR^j{ik}a(gv(la?jA}uYK`i|IC-m2?^pP?@*!G8L>Cy*wa(8 z$3Cr3|MBI^mz0y=-(umOoG_Q2xcl?QmXlf(dy@a$vxa1L@%v#+dW`qX3zqxNjBCD0 z++=;?1S>BuFT!FmufmD-E(tg-sooR6?mvEfJ}PSI^HT%ih?5lsf}!FDw==dn2qm33 zaUvSoTu4R5BGrRY=swo<>9c2LH8ndOEO183D=Msy9g8SCw31k1csiT3-N^ac@XMXq5A3b_BJ~0uS zw3LR1#_{SFpGg@XU*C@IZaM=41J5&OIv>7MQCCwttMdhcV^bPHgA@>unJF$|bT{bs zo@+McL5w;V>P19FyRveN)y^$mYGrG?=-9Di_@}~14=bcC3}YoT*rG2L`j7ZJe7L<7 zd4bf@($ei;pL=AzpL1#ToiNwfxw8wIj$UA&cyLHas{i~PYFr=zDY`|@Sg z;>C-@kL}lcqp>$hB`U|fp#0OPi~9I)%n?n^>Qf7j*Uk7jz*{%s}&ShO#Et*G&+>n@G4@3w9V|~u>IGk zvV44eR!5GUH_LbI_^?m43V&nxDPf|?2L}Z^uQxo^|NVQ&H3jFpQ9W;ODEBr$$*r9- z+n={AdnkdL3g1N9aM{+JJo(&=B37DZ>uO1Dpq7b1i=!pFMQopm|p%BBYn zB)sVL zczPt4jhdaEHH<#JeLF?1mXg|=>X8s1pOL-D)5B-cqD3?mYQ0f`ufM;4`j7MH&kv1` zN`4w2ZB;+f^oS9Wd@eYc{*bx3tZS#n;lqb1&);i}YohtBaTvY5y;*qVcMary7!#nO z%pM-Q3*X-`OWfPWSrtEH{)q)V{yHk-zM+u86@_S_gakj5@i-T+5xhx-8^a z$9W+TQTWw#beL>xY}z|J^*cY;fA~=M?Bvl|Kp^}2G{(iOe4$7VudgYviSE5F=Kh70 zJ*;l;$E+34PY*^Tsdk~PYI=Gq&Q14Ar$4}s)!aMyq`j*v)!ytRO2zBMO{6wYj=odf zq_UYl#y|A?Jnd88nNxg9?hL5El`mq}a65T&E?f5g_8wl~$whCjDbxfpat{6cvhjG! zbMBUc(>2m1vu8QhXo=lBh5{46@hEF{b~Zaoqk@8h=EGZ2yb3AEdf^WML#wk7JZwh< zqki(fef#$5ncot{^K;&OiZ0ZheMuy32AC*FAu|W*ikvGcQFUy{2uw>`8x#`K^*zbI z`s=fk*2j;t2+^Gx>kTxxvo{&FdgbQhDdp(D_nx%Yi{(6UoA_n^=tK+8@bGZ&mxrQ- zMMWF}0@27cV?Vzbbo~Z0r@OY8c#p3yo|``AKG4LCC(y#~ocj4W zuw;IY7uaA&!KnfH);onifBuv?`As()1xHU$PiGH9M4zEy>rY{Mc`kxbknv&?6T=6Z zpR7Tuyee&}<>GR`)(ziE(5mC7>@acwr$)bjeqa|N?9h;DaA(;-#Md_e`KZ^gbsqr@ zzjqrfnh@A~T`>^#wj2l>@V68j6Y=@8DYoghp=|d=_e)M{J0isB+siu+O)O%YH!nZ> z?q)DjKwm>EQENVt958iBRUT|u|sez_o{90C5muKiY_~qe}nel;&X6KTqm^C{)u}T0<8-&-a z8UEd9nTix;-jU}}R{+?RD_3&OvFb%mq!Qhn-JW}#!oHxg^Bzo~u9E<`-C2To) zyVi1UXBD$!$}$0goCmFukt`&oSRX#TRzSrkBmU;)%c=H#uI;5X>2`ioJu5V~PF>UH zYW()*8a-8a*GMwzYK${!!Az7(oZE_N12S+_CVv$SRwisbTKVd#G_(0p01i$37kB$j z!p5Bx`(W`5ITl8`7oww=lkKjtAH5{#jqJd|&7B^9GcIl&np;sS6gw-ifs=zH`H|l< zw4Dr;&FHr`Iv;j_(C8T~nP09p>%VbPg02X8*9QX~6(P)&&E!yrPF~BilRH0u{>;G1 z$(cUDr{ZHuv2Sv0*nfAYo0p)+JbDYR3)f0Kht)E#Z_Q!k6cM|<=enXE#g0JJKQM@t z$bI1p3YZba9vB!X(StNyN&aviV7u73wFLRc`sh(n)UV2(S6AacZL+K7s`5(7d1eY| zL#<9!aL$q2=h*VxgOjQ(4`z>qCLF*vAYzLCR=lbh9*+3g*V&ymU!; z>$Yvdc&X5^Fg-Ic1)CgI3z()~Sw1m)a$*A&`e$Y$tMcK=?|Z9UwfF2XO7KTW$|C0s z17i>v%8cH|+TLEwZ*J=QGCqDgfC=yv`M>>pYU5}FCcj;Cj=lXVHxL!I6NTO|QNg3n z5UoLys-?s8La*&}zDh3b0ZpTuBqevF=rI8l#vO^cAh2y&PEJk=kOI1)q8GONFJ@=2 zC&-j$JBrS(RJ-ms>u>M9ao2S7pe2G+^Z4=XTDO>(7^Enz!uh$GaEEmcDVHWbf8Qpx zWy=;)T4)1+_*MXf8=C#9U{f`miZm$iZ~;couhY+s-r@}bb;@Tk>NAZROTK`DFX#x$hT~SeyYf|OVb9Zf7^AFxZ zh0CQ5q3=lFebtd~V_knG-4df+Q>wkAb3OC=`@gCv&P{f)#XY`^O3qGc+}V4>u=aa* zcPK*Rs#2NjVCy!$O#O8vO!wYUN*{K^*};JW*K_;S9FD7Il8P^irUBm?0G>KzmxWCf z-FGu%ed;gf(AgvAEw0yD@ zA}Tu~eR)FUdG<0sM2(urW3S><59W5)+(M7y*tP;3K}T<|sTE5ikBn7-j@vrv zsbYa`XAJFb&NBC*iTWs&`onVW%<7WX>B&hkUs+vkZ4Q7Oll6CU_C*ykdQs&~O=j7a zCB<|*wc}U0t=sEls%WJ-Rm6&Pv7@w8tnb62NRZk57P*2}Lz! zFflPnUwg`78J`#DIydk=_z0vd!*9VsK^bcWdKjaTj*b=j?&<#aEgZ?0NnKq%{Y(p3 z4A<$gA2zvzNZC65F)t6>;34S8Jw`gKnCl8oJIC3fY*=I$zv-TkMFX)vK>?73W;?;T zcC9#V^tZm&B$7(<(*MvkIlJ)cSL{W5kEf_{CyHr$m-Y7ABftfLkJUjw)z{a@ep5X& zwrhAAfStNEE^CM5hYqA2{lmKGbqFtjNR2~>_^wEqn`Lttb`MAo3=DjH`vkP4p#N+j z@(B|5$`w+FN`X~efA<+3DmuemGCRVI6$ru`tauuQ1Ps2n6kNbS>Nm}8#ea}^?&@Bi zn29NA`HhN`XJ04$6TQ*tUtf2)xjm?#xjx}rSDB(2K@~bi+kmtKK<@wsH+dBDHVa5V z;=_ry;;4oOL(;mlva(8y0!Kum3zq0(pa>-+m%y^^%$S&5F+#uM^XHY#kDV$WJ2e}A zJ9^{@(gZ6oB4PCQ?`L1W!7PYi#QsJ$fC^0@#P%OQG9Td`ezy+{L;++9Nk}lEJGO6r zyrI=+bWgt1Gv?GEGbW$C@L=>H`_!6~lob{2w;mow?f5vpPyZ07h;G1*8|HzdqrWac zzpclwe9CZaiyk^BUXV7-AQ*z5JW(Kk15kz#X6pnJQh{k@Hf`E4?zYfywjL^$zA9y| z7Q)J}!)2hoR#bG&)~$R-S;m^EQbyli368$?j(+Lo?VaUo`St5puzo-EYm6Iy8|5fA zD(;!F5_ctBN@A02{KI5B@ ze`d$7X&^DP^Y9R&Me^4wzuDoPLFdog%+LMN{B&SXrtCq1CR%~LpmX_At0YS~T6&31r$E88k3Hl7t0BewhExdX) zwS4(<@`6b6A?WLD@!;Weit?loFbG||eEA&cRckbKlOwOBhfxl#@Dw@|6bjeS#KcZB zGak|uZgy%~y=fCSz-={>K{x<$7g)Otz0~v7&5hN0pT-1)q^JB4GP+%+VHTp0#&ihJ zLm<6Hp=Ti3al$a==LaVz3jwC)ooG?gyt9|$x*`6JUuRS9+1tm25pxg%s?iyc!0?$J zuBkG!P@y}Z$M15+)6=Rllq0-Y7*H=1lEg~8FZAzzjzOQ(DZL<(c zkJxQHJG*2sVv47K@$typ2i&@~nq>7l3-|G#Uvvf|M1HlESRS77e+EJ)L-%sY1pRMI z;iQ`ruTH6{(f%A5*u*0s1uh=ETKqQeQ^`I0`ugp?y`c!2_R28Mcm-#H$IfjzPpxx6 zG97t)J&b12V#@Pl$Sbhe!COv#vqJTcm$PG{N}HN^KrB|Hm0c<+nI+t{NZx;5$NOel zdb-2bv{nQTw{Kc(^+h3dradlP`TP3%bay;H{^cw(O4mf2zscA>Yp@=Ef2KQtTcyW6 z(iEHDW@Y$_XN-PsOkevw{?LxW8`!7%72hw_k4@kGu_a}xv9a+aI!<;zzDO)2X`<1_ zYy!Kr&={O(d5+Fp|Jubk)U66$=fXgw6`?h27U5v;L%!S1zZ;xHv8kR0qcHKn#`~mX^hZ(Cc2wp(R>iC>z8(b_p^>X5w z_GJ-?Bx@Wz!aCgt`;Q9FivGPC8%&5GTTrs;zogendsKwHy5MU)I&$jBfub`WCWXH7qd(zRW}8@9FJr z3%aOE$K}N;9-i`+7Jje@JAwF6zbOKaOdlK$OL>jOW?#PiJaiVZ>F@XR^2$Ov)?B=K zGaC5X3a2AjgBzbIMDxj zp8X^D?Nk+7E3{ruJ^GiEs`0aXF{P-iyl8u#w@|L}Jsu@V711FnE<272nD_OeB@s6?d6 z+B#A$+ugKjdjlWZip;Ar?sc& z&quSjVExL<$|U%6TS112i;LTT%07_1=6LtVhe!7j?EqwsnYIg;p|td&rvW%71RpDU z4&Bl}dJVXRXllEQ1}+^s*ZtcOs6}FpO>8yJTlG`+ zt??t#XmaF>c3!+}*%p3qXPCtbk_A_zfKl(CI9tYf^$93kow)c1AC~d@71#za8{zyF z-~|aj2UBGG<$+zeP)qpkxsEeHO*YcU937d^8Xi7!Wce8buzKg9L|o*x z@0&iTaXO>Oj7+{dy*PyIYNY_r{jPCZt-iIO3LIGV>c1_9av~w+965k zJ?Bu6k$FEYJ?}O@JIaQ$Y$VWeb#Qkp2TiwSiojM+N?KYveWdSv9Q~X>otQ_>ZvLsE zDr|WLKAYRJyu0Cst=+o8-}#T$$i0B7@z}KSVPT2c3OleCltoluin!N9_B}f%#Kfn5 zx3slc+8sn~GjI?wTQ<^P11<97Cs&UoqkCrgwA6J)SG8k|(a5&8V1)<|21Ykd%d5^1 zAY}FBmo8n^OY>&{O*T>c*9LFfx^<{-r(mXeBlwwN5KLo(ZGz~YcvL@5Dy>|#Dj8BS z4)rRq_wS2+y?-|4XO(_t7WQx2*|I+yis`Psdlv`TD7<{VuVqR|aBhpZI3vVjiROzn zhD}aauK>7?%+!pGPwnQu>bOW#lv1c-yRUzxEb{Lt$jcK(!|+>?&(tzY-`_@oB}Xu0UJp>Mb_G}yxa|G!PP&Nz_tD`nfQfKtr+ZzXarRPR`*ALvk*#s3~lY9TCr4xf~ zCTF&;^86it+{PCZaGKW%`(!#;5pSo9%AAgk~Vhb{ev$P*Ca7B;VVypS{L^CfL0AHLLyb z!D_)ola}B4X=-X}t1Ud1<<=!VUz=F?#mWLescLp=v;#<4?)Yyc?S|@QAbmWUD&M`^ z=RjHzP$u$wbGXuP^?O4X)4CvVFV5*{K|w0|Oa?Z#8t7ed-}u25q|YyH|LF1R!v{{( z3nLcB#5SBv(4u$sSg>W>U=hN>dXR#uDWdS;!2_56PaDumi0#R>C{jYH4aN(^og4tU zrU>l{j4PM#Ho#(XP#ovG_nm_ZLw;{Jr#X&YbG%mEGyheBb;?6RQPDKr;R7-{Nqy*2 zB$p~*kB<*M_~eB6O{U8;039DiVh!~5WzbVowckUqu&th5OAjACDw(s-4HQAV@@Xj) z@QnBgfFpq?RG&V7-if7Abnj(v_4>|# z{L2H)%)-Dx8snTpVQ6Pd+u8(ih=cFk5k)5%4qiD0+-tb&yG?a@wmUVnv{DdPP@xQ) z^S+>V%TLEuLC`XP?!E&)5*()FhCEYakl^^YCDLDV(YF_8n zGBWJQf}Yc3;$Wi$A31*1sgrtwZ6`F8j8l_*!(Aih;^Jap>BY#V?A+YJ@89nyBr(c4 zE#(8EViHW?dk9S+cNPKPJ@xye1bEK?ETQ?}CnBf!!yPuTdC|n<0fs6xBBBEC784iu z+iaN@GL-3acX2SPbl@TiN8c(#>nTI+ap|e$cJF;plboFF*#8nNvX#BPY07wg?zO_M zHlU$)oGzlh0XO7MzEM_1z=IM~?(02}XSmtesNBR@Iwf2f%NhBcTDcVmq85E+EFx;s`P@FqGm=zvDU%#G!uj{J*0(e7pkhw9Im5uifhCsVo1_G1t{L7^+vh_v$FC%sYIsk39 zgTppTl-gkaoC}4l94$+p|GXc05#-VuNW$3ZP}mQ2>fN)Rq9F}HE=|RX4ULTj6%}oR zeewS3K?^A4MCh)v_>O)e8q!85(ox32CsNR`Xu$cC*g|PN2Xv-mV~^iK02N!zCXn5r zPz^G|1tJ|m6fG_0!>xi)R2Ufb~FFCXkny0eY!Mc}ScRyY!JC`?XbP6Zj(HW8z9j6#)=yfl#Dg0au{A3o%q zo15!Ie3zr-QS8zdh5IFvE?!&>tA)n)?b`!u^c}&yawDO0Lj^8}m5L<1pAh6rpI@Hm zJ2TuFjF$Q_p|D*%Jh%Zf2%nw;DYBC^ysMPPQ3#3SqWsI315lL2`1{Yc<`y#XikyN( zOLVRjWCB8LLUj*A6o;YB&ono2cYj2LQXJnR`06;Fi>GcAUl>#NA~f;jMN`0~m4meF zDcsOIed)>-5xj$FUt_K`o}8<(2lAqM`fig*VIHHXNCc(F#~Lq&RQ1Pe|V&4cmD5`4BL!f8+U}7RQQhnYB|{B^9RBd3{1$o zadtOVd?oOS!V6FP=1p*VdOE7qGP1_d?ASq9X$mZw`mSf~Kh^a{xjRoOFE7vLb-XNE zU~{l<%y1_{jT3u&bKAkgTiw!Ei5R!!N&lSA%@IJDYDMyG(U*5@*yYMUJT}Hf&I}4B zPfe^P>_97C>O88nzvdhXn&LI`)gEaMGmPu3t@G}3kA z7D5eBhuLS4c(_{q=Y2cAeG`d<=V@X+QI4jrOX}{JkoB_tH0Jw$Okl@}sgWM~o17Z@ zF^qcQu5w|!B(Y)Vz|#wZd+WLS@Bv||P;(FlbO>V!*YD@n{YFhBBAV&r;|aB?bsD8v zN@iG6^h$TP3e3VJVvTa7h%i}OQqRdP07Zic>Y;L zFPio%DPI=rX^x{T3$I&8kH$z^VP6JE9vf?l+$BJ>$83R+!^shZuv@V9<D5U?SJ4IgNMOvSo%%cbSD`PX9Ut%TJd3^F-vj+>$vS z?4X_7x!QGLNC|WSK^Sw~FzCS*#3FjQjICF4nb977jDB(Q=Vw{qCVJ#`TeouzrAXl} z@Y?#!|C!J|vHw}QiehN(E_^hp&4>wNcEz!O>i%OHfgGQ|d;uNlcTrvim2BL={@ zTqj<9I%K)!=qVQ?e*$RPKnK{hXHOM4qkH+A8`28iUf*&K)ENOZaL58}m!Yw6nHsT! z`73iwfpgWWFlZ#l?yXTzX|x7Cx4HJlwpgTJII7Y6C#Dm)zy_$aP+oA zU=j$IngN$`gV3@VfmbhImJweFUb_RYgB1wAe3=uF_5#X<#L{!R8X7%p|79BB^OFCQ z5dc1sD-Alkc5R0m3C0@UObHJ~AbEV*Nq~1l_q823&kBm1hhiFyh~ln$K!3>dI{b?l zMh9Zji0~f}KxI~}UMf?z!x3qi#?wR2+sjLvFUk)UMeT3dKx?+%L(!0x%Se-$GUKu*_(2o_^&_ObR?jhrP)5D_|8idF&goAla#ENv*z%j0!dP4s(RU!I!lp^C0 zxTq>rbwbFY9>Z>ZHHaN9G7Z2?STGwpV&l8YgQ);uvnx}Nqaq{W$)OG&Y?f==TqHoI zE#eFi=2QUeD`9K!<0X`_TxcFNu0-++cXzkIn%-}@a8 z6fKH{%6)Bj(6Y9tvm1&;2t9g@y0Bz<#IgM%a`bVlHc;D#x_5p zp^Wn##fzjy6#?N97r=jRX<8?67C z4yj#g?kf=}f7Hs*ulPLA%9ZfLne@r*+N~JQ^mmYi<3GnvGG3>tdYv5;-IvCCZjAlk z1FF;xnyvtwqp&TY|fIIIRtLrNe_IN_h- zoz0%feVU(BUOwI*0%pFfzMOWDb!7njG$p@UR&OIyGe065o{GIb9w+o={AiMRb9XJQ z%C+v^Bog`d1 z{)YF=xUnjvsQ}k|*RZvsV$sQOuVK-a&c1gK6hRm`%;nGgcVAf_2p^G_YVrDmk6DPO zh%8HJ6u2l;fY&E`u3BR3Nn1O9%SjOc`ACF&8Pp=QAoi$&f&DD-ePfCOY~}ufQ%;yE zxP`)kOk0YP1ez5qRw!=SVhv~%ZihNE1k?a5$cUaV!@OWKL<)<;vuVv_eo5jE>8_yb zX_LgF_Y891fp*K*cdzhA+-94l{r%^KU)ejtn@B_^^0U4iP3lO!pi+*4m*?<71YYq9 zP3FLV7f z?SV9HQ+Adg#cKe10@14==;>2Z1CZ0WPZg0zlS9TAecyBgkQkR zf6Un^D!Sw!O(_cUmAyOPrAwDkKkmrCX>GNL(EyRPin971&5wbBvfrxn8h;Wuf!1VO zyS#3=7w>N6FE&$o2FO1PfBfKR-Om26W4Wp(Ci;@GpzUo%HZ93NsKe@oV#);K%IB z5c0r^!mcUUqzI|)(1eYJ+d4I#jk*kZ2iEeK6ZWCc9v-ot0*y$(8Ing}|6Bj9qjQ!j zdy1u#e8*S886|W4vkcHzDpZBZ>Hb{qnyX`+V5=4?kc2wse$X~lASN$fym)KU8~kNT zZa8esLTHv8p3Tm`JBCyHx!|-k;5nYa0?$H&U=CtWsdN>984l`&i<{e700(r25%KXW z5tbdmc=`pAXyV@{spiTLfMq4#S4wPdQPfqX`78Vk1p8UklU}g}g_fw|AHxmmakPsqK9fxXo?1ur=cb#MX zcSf{DbVgq<`*9E0H5EM4(^CUHq!sf}JR>A2$^6$-5rm$rp`$nL%bFRRBUvmz9{X2w zZM^y?IsZ4ek!W|((_>BF;@x?3IhyYDe`oKf>oJPyBYFl6g-5@ncxhx0Lm=?ZN**4V zfwcMe=B3Rl9Lh1ep`??WzTech>$Gr7#XlGc$>@6?$1-H7^sEvkm<~C(weH^8v}=C& ze;z!|xIQv55mHi8(qO%S!Hk-KbG;|`16r`5zY$Jx>w^zmKV&;9XPU1H5twE^e zAUMdZ2t+A@>m_<%J0ky&P~(1HoE=1Wc-`9ABPO8@|Bm8j(868C1Y(rSAA|z^m8j6r z?QpAL9%~6n=%o69T(*wOO$cMB1&yGI(WvmRe$_ajp3{#SW_H91k|Wq-2-C~ivuA;o zkj}&ZchG^$%(zpP9GrT@%rOKew-mfHtcVqGjd6`)0O>qvsar7q!_}aP8Z(RrLj2oK zEv<4mZ$Ox+qf}ZuIYr?#cEEdK*75{Ib~4Q0q^l+#eSDF|dtF)H;g`!y4<57y?V*`7 zdJVq!i5=&L01Q%$;mr3P-J^SR>ngnIcDw`D4^xhTI6IP8$jT_W_flxzpiZXZ$LrKw zW>`SnUzu20iLrWN!($c`k`F~-4YC%=hr}4Hdqatv7{h&hwj#u2U=7rq$}OH|A~s<3 zmqRdJq5LfZ-Gc?&ADf`$A%VT(;N^{g6*L7TPiRz>QPVHH8KFAhUQWhz#>!2OhB0}k zz$(KoOV~c-59SSEe)ZtLU<5TBc<$UH;>fV{o6^jDjkg#cc+zGA;WLp>V&#DY9kc1X zi9>0uB1Cb#(ULfa>+T&?AQK#9r=PlZ5uliM`!+2_<`*$5MUO(H4x1KMnI7v9^>`=u zl7Bjj6t_1YK0JK=BtfC>Rv3X>sNoc;-d3PBJ<&U3A!#V0Y?9)jIYoqWhylbiNm1ZC z&!boq&;-0oBxd{fw*pgUA)VZJ=}^1A&3ifAH~PBsoe|Qo=hISz{hXc{w6u!Et1Duh z5Hcrigj1JkAWE!CpnF{~7=rC3l?oGcK7W2U zV#YJPy5`kiAHxz#-no@;DUbYiDDp%Lph`h64?}?K#LpqbH<)2|j2>oWh{3X24k@4=(hr{-phbe0J?%nwxpzhI7u$OA0yTYTBnaZj*G`&N;b!(_x zrJp_%EvGwv{UXC+$k;;S;@Uloti;^s1OtnZvhqQvNXQZPFd^W>tuP~oRkFq*{tUT1 zaK;XTHTSW+?#0`N54>OE);cufUhL0GX&WD_>27z-<`keXko?pFUH=JHKe@@O^t z{a$|p4GLg@6O@XR6)$5=i!31DDq_Uqb5^~EjE+EM*$&m0c;(Z*2p~ia83rsPGXaBz zqpWAooil2x;fOhbszJAZ*771w@>o={@A4+ppVzNh@JI$*f5$+!oKVH2En!Z<3djYq zlQ}GQwX8g1X@C9}xe8gCTX7yqXA&$WnG>T3BY~C>2<1M;_T0fb+a+Xwe@9+`+7%IA zFZLEhAFXmQc*?s7X%XV@nyd_^34O33OUMP*-Yttvpz`h#~^ZiLXxsfvX81 zAOkViZ`^Rj(}A?t`lGXyg-e@rk%7U=_{8O_W{`G=F}uPbM26o0T2`(ao;agl&6BK7 zBpJk`5RfXO(;!j7ciNrUC)Tc|LuW!!7)6>L^q;Q)pdpjk;%XubFl-Z0L5E3w;7>E(13+2=RM{&4n27#@zZ@2vDUB4P0bk1?z`yBvT^NAFGC_CWf` znMQK|g{UaaLx--{KN=cx zp>q8;05(c!e~#UE>eOa@9@Ec{iQz}A?1R>K>lFBIxXG6IiSgz+?nSvAxfgP7s%LY? znrPl-Q)9rr0ryVd&U6l94_7r`GicgSc*dh}HuoLJtET*Q5jz=@#~-ShsH#fHi73`S zo1F9{hOSBEUc;s*FVTO{cz!&f=ZA5r@G1H!7|h5tQ~oHn4HE^HuQRl7;5A_oOx^woNenE++A*T z78aP5bu78r_0*~JaCJ3#L1Q}87GrckPF_AJCWhmJ17pv(!xby*x0S_Qv%U3uBIo`B zGkEVrM6IgD8Vfdam75DYo5?mJ-T!<%-JA(GKMdd59oaBTN%p8g!(Xx;D)@zFn*a`36IQ8FIcIpdN3b4i|a>+Ux*r zD}z3MtIs66>g>=WGPVfyEOt++Mw-#V$H!?(7r4J4SF`7p#txr7_b6(Q;g|*z@i16x zh(&x!J|m1|D=w%^@2b-lT1fSJURFPQ8Ep9nsKi@Srs8b%qBUmtGurTt?74 z0RN(-ueTb5_kr&uUqwey$jIyMj=g3*RbenV>KhXY*$nIBX7??GFWtf%^C%pmhIF9$~;np~)eJZO+7ds8nE z!~+PMxxpEL9j=a2JPQQ}m=)+A1m9H&Rv-~rWf#ap+#!Njgrs^Nnt3wxXF@QR`2D$f z=@KoqD=M<`I~>wzXv)$Z3>tpC-ywU3PtO6=y@ui5kGYnDc)Y7hEW&8Ite@zfZ;?x= zf3&ga4EepN_k_f4%^cIf7P(bYn2?LVGCnDL>eXSz?!LQ^e0DuN@_EB$p^i??sz(PO z9*GkxhB4k6;Z)nskZh=eL2AHTutvtZ5m8aWSy__MqOtv!_9rry1|GKNq-9%T~6xe3wFbBqMKW2DPO!>*^C2>!8 z&!Gcaj?qtLV(7w>5uXbg#6)HxdJGvJih0kt#b1CIcU%xqIX3NaeVaQ2P_u*^uZAX} zycdK4Hqg6kJXWIGq|pE%lUV^c+J}Ds*2LUm9?k|8fWDF773}9~Wo2H>T)a}dV$S9Ki%U+Jc6xQf|&2ZDKrHM7?XEX(UlfnIO2#W zo)}PJRfWW1jqHPthL|$3??h;-`mlmN0X!vmIvP|07CuFCJk?!XWN^+1p*T4`-3bIn zQM{*5A3ki?ffo9rQBI^|YbzkJM~o{c_rLs&!~|{7_U*-YR+|m9L{LKe*S*V~7pMqX zvz@^+*EBi)$gjR|O6Yypux)w|mNS$RvTDpuurX^{rcy?(wuzg^EgDp5RvjxWt)cLp zK^$KNvqv>NLpY%nj6e&+u6lR&@&mGxNG2Hxts?P#{Bk!XN`m3Qi;2xSqWCjFigj^LtCT>6!&=1`$ ziGq0meGD%F-nb72lVwpbgGyd$%Rjb4K-CZP+91MZFg97}IZO+>&#<8Axko=?*omPU zGwqp!=lU zUNm(wwB#)cQE*ZNrk5LR3mJZO6-7P#?Y=Ob@PFw)ePUJ2gN>eS(pYaDMDJCA-%BWH zP(tSvN_C17i{z;&UY z2|_u zr2I^ELLS#EeW;CFkTVxprUnq4X{>?xh+X}W13&TGF)rm*>;As6@WSnJdRs8)EONZ* zk@kYJ5c)_$c^&;1adG{S9cM!K7?O4!gac(|z)gO<^p6X;zahJ?Ax3doy~4j?rI#T4 z=uxZ^UA+Ou+ZKTOSR%rYjqEqBBEUU3WZFaW4Z@%XlsMrz&><3)Kj5SC z4TY}IY}37*zswU^-QIj9m?M!67ffpKeSI$SRv;5+&;uoF(LvFZtAq%94JQ4T|NI=8 zlo$BZcwPMlerhMINrYp?d?zu|6#f}+_MDr2)--}zZCdCl3!`rUDid+UVW?JGWq$Ug zW&&};k!T|}TI3b9Dtu7>z!#k#XJx26Mz)Q7>4~HN<*==e+<~)1ln{s$n2@xP^#_FN z{hYUkmX?;(d?X+%$bOUHSGerRAQ-sH3NSIi!3*pi7)x}T%b&KO=NTJlUI9Y-EPSwp zJO{2sGiKuCWov6oq*I9G;SSJ(a5u%{dL_{0!~s-+yT%AZffNlKVQht@#sWc74YZ-P zgF_f<(Hh*efk~|ePd_?OR4AdIl4#9fb~2`=2W#|Gd8cqCekCjDubKi!Q&R4O$0c79 z6F>}A63)$!#FZ=xGamQ^u!lPcy-5@rZu2*~^5&qH0s7{0B;GtEBy!^uNN<2X4J3`# zK>;tGyaniId&Lj6w1XRuw`=Im{ab)B&M$^Yr5=<>6ujK#6j+ z(PTRP^)=8nga&{l=!w}afJ7<)-bt`2ST`GRKp7ZqBhDaL9SAS?)TM(K*Kv`{WRm=* z83B_kS~nfL?^wljUF9?@tAm5*&5Hp$pFIoCN!rEf^N(7d5erqZ4n|YhZOR%OSAest z#^TaYAT4oO)WYQy==(_HAS(@7iXxSQ%vQmOPUH*lJsg~zsqwkdVEW(#Ywzo0g0XQH z$riIc{J3|BIqEn1cXh;tlx1-wt_mS`M%i2xWmx(IAS95>w(!U8AbK=$2!OItsz}X- z6^vYfM($kz4Mlih5> z^PC!4N2V>oQUeia4~#w>3mVrBNIPtEoj(9N_!z&Pup%*9V2XM_0tYx&Q zA$+)G4|$mW#3(FV+o2th7(gM%O=0aA3{^wdNkicxfB?V_^msJnK14#G;hl2vaUaHHIHjYYraFRHvx4w6xWdk`Waj z`ZyM_aVE?e3)n^CBu?j!GiQ`gXfYVgfGPY;b%`fI?9XpdI(xPDn( zZ1;h8V+-7Y#2t8oaknt<=2$|vq&%=g{{l%NvqG%#|3`pA1l{JxLdl%=sET6bq$sDF z3s+@?>sS1>c_CsKY+eqFh>NT~WsOl5Ek)}-`-4-$|G&tTeVxMpUAX+vRRWJtQ}tf0 zu!Wa^n)<)GyjNl)DVb>pHWJHJCH$2OUm360&duaD2wl8MhpTU!Y8iiTnl zi4B|e#J`g)h1{Bo86I+D+dplEbl zzu}r@bm~oF*)Ke-mnCQ1@}zdL?mhu3voCT-wkMgTUcSK05Uv* zVoC%_w5gCwhCuogB!S=|j<-thzi3foY+9yF@9os|bU9LtLlatv_t^(Ft~b5EJ*FL0 zST%9hz+j5eC5*d2vJZr*)EWU4?xvBZO!%_)k5hX{!!CW|O(H#&p?qw))cnM@D(@;L z#x=seaA7IE0D}Sm38T_}-5ES5v0X}D;-yGu-H>C>3;HQ;wT`gFJ=~c^;K9Fd{RDSy z4Sab>L+O>wg=bj$$0=gVA^7Yp#5fx+U)+V;Y``;-8#Cb-p`l1+`uy3HP}mZ$^6l$r z$z7=ZE`K+-;qJzhw>v$ci>!+b8e7WAr_@QVj~kia>xZL@0rn-ZXVFl&5{aUap$xB_ z#ApmMIflw;ptTM5h+h*I4{P<1>?S#djmT)ub}HA!phO3yZOW4%E`#9Eq6KUD0q`J(dAsMwo{da@d`6lxW!JU_D_5@fT*3iem_ zLyQ;mU@+9(%IU6wW{=zgK$VhlPsoU=aF!|JjxPWo8VaU5iC5`&?koyOiBy6#Dhq`$ zSAN4^zbF~xPfbmId@5D#)!Vn{!8AkHRSnV+TQ|qZ_fT%#*Wxha|9LfHCI?F>s`>UF zjv}{pRH^T08F6*}SD!u^_pxWhyZ7s^4kpARI{&99zelGygcoM&SjfuCLLwC#`mvO9 z`7f+ATG*IBMZMEYO=HpCV6L1~Nf+|=lEQ9nU0rfP1L3>~cuYsB{SIx!yt|f&rzqG|dQ>W_^dvc9d`@#PR zzE}oMHC#|ASqqb_5Uyv#WLqT=9_CPJaThQ7oZ#`2e=aspV*?fbo!swNIP%n}GGacHQHjWGbPNh$bNwDRXJipd^}0N>P#`BBi24X`&LPQzWG{lF~>;8f8vG zkwmD3W~BP9{f%?Z`@F;Tzpj7R^_=rK_zw5yzW2TN+H0+?3M_n zZwP(W`*u#|Q`h&b^6*n7f4HrIHM;&WPeg)pj{Z|!zZOwCO=aw#oC}5RNM;acc-{={ z*?&CR4IKV3TM{_GjIvhKbn{FW_F6Ny%cg928*4up=aqX=H&5^9i9dh|=b~kcIG0%1 zMcmDElMNfo9A28F>?S)h(uq(yTBzfZqHM=!*6x@&bx%t7&uopXQ{JPXB-!o!4(qX6 zS_hv!x0m4b@8$e2g?zv?>iVIOk#-(NBLx!fkMbwcUM>Y1at#GO?hU$^(&k6SwcKq@ zW_+qo?bPtsSU-!WZPL7zIil!=q6%N=>Gf6`DwZTkb8MiTA-x+MT-J*1n>nefBHn+8Kk| zDf3q95DZBs1uY{;FDt-COEX*q1_(|$Ao#uJ{#q>Pz<5z^%wx;0hC|wOnA>~Y1glh0>2~uyWve4f2>_!0&Hi98aH&U|2870 zLmnt4;hS(m-vC0q=C^Of08}U1{~8)v#iCxd#V(oj=-vH0JuLKwW6DBeG>~eC9>0L(oha27c8VA;e^bbGk0OyktQGLAK0s@uYc-K zj?*_~k5s1Ydj3gm@HWV4#*Ts$yiv?q$a6q>M4iNMrw5E8Pbt`2}9kW}YDGm&VE z%n`EOd3XZ&*&Nv~KHEXImW|;E57G|QjTp@nE^$EzCkPJHDYRH><^Efi$QQ=OjH&-F zcA#G+b6)7DIopuKAh5B6iG3VDqx?7?o^=oF9vXKw( z?>(HR`d9PgV*p$JJRkA2$Nwa*eDWP*eas#hxlMgN;wX;DvvBJ%^%Dpbgy^Fg&&H&g zWllkq1`5BXrTX`72`EpI7`=}IrV;IfxHy2aL1?*to&8(dnI|IN-`NNyL6Cy_K*s5! zMxqf2=b-Yj*7W(d9jF;ZmFz@anV;l_LN%{4dS=LwngN^uhg(H81|)IY5cqh_~!4=1^N^rV8p8-lK94rQ-F^U^g(e9C#?(`io_{rSSzc& z-*t>*{6^J8L` z@UcsNl&un_4i(Pvvps+hp;jf802VK8QzNvl$~2{cY9M?$_wM%`M86?254gP`(y=kk zkXk_)u0#kZyo!LDlA3Meq)BDCNx`W%Y#EXeZ~HH~){T&c=Nd`KwK#B6w*g$68QBMl zAtL&T;*cP|`78ygjy}qQc$85jufGPXdPWtc5Gi{A7?CLu^B6(`@|6H7paPb|CyJfK zPdA~Y_=DRkJakO%R_Hxx{N$AKHoi#S8kksrze^sS=<4tv5>i%HmTDxqI!M4_;7&YucfkqYp^qhCfFr?|yW|0e&u(It0EN$j6R$H`ON6 z5C9P27#{>660D<{aardj8BGCU-TZP9Yaj6#cvQ}lnp=m`31GD_z)|1p*Ika%tOkOg z;6q|9-8h8wklNT-;0X*jA0Imdaj?OHj+T~VA0NemKfw;%=6K~_x72HisH2KR6$N(= z?;*{o|E-(}NNA@TfsH})u(n}&>aUh%Eqza(J(ByANV~;K-W$xYjhi)wIq)NE!W6F8 zeU5`7w~W4AecrlISPD1L+@TylK_UU44fi=WP5oD?`vd#NF#a-`@%~r{_W0MUQH=ATy=X!`)RT9&nruP^dTwzt$!i`1|A=-T{aNhN!|jbSyDq2TB*Q7 zCxB!_Oi!G0hC%Yr=r>krd3xS3j6Oz2W>R{85vGn7IY`WCr^%Rn?$tp72U|K=o4eZ@ zsx9c!YyK;8!Q1`~IsZ%b7MItdVcul#YV~azb6ZAwe95jcY|NYUM+~vrcvW1r73Jx+ z3n1)x3lN-+AQ>|N+FJ0T5LEXgBZDII^e$Mw*U#3Z`UZ6ebxM%)OZI&f+Z!XkH|?|; zEWGh~IK4dC89;B7cJHu-YqhQIJ3|dUj~Ou4s;&;K%JJLplD&uQ_-H6K723$U)Bd7NpY69j_urgS*h8 z%;MmCyE4ZxYCB?8t26jmdA6Q&ge_VT3rKv1?lQ}fx?ta>+FxLRiZF|D8_`G)REc-M z5yY&BW5j6%u2l}GIB8<+=u2Nod2FU~-*c*iA8zKLOJZJkP${~BP|4gz*vf*-LgbI` zv6TAZYA5FbVr2tMgQgt)?O*!aM}#zty&uFXn*FXguXZ&9AX4=V<_O&{gAV4qY`P;5 zORcRJYZ!lk&ywixyZqymCtK+5A%6ep&*=E2NF#K5?jRKZsWL8DdIzIQL9@I~Y&kTU zQpr2+|HbCBfig1fTj#eNU}LzEM7L;bzabI}>&NagijC1siKm{L3D z-}{LuZ;?hg+Y=ZNd)Ck5z|#)zf7ReRfze-aZ8;9|Pe+^AA9&ZIP#*oWAT^XiJNai_ z_Ixcl(RlOg7$!kYL{zHxXgN=KN%J3#lJSoAv2}(;dscrpiL;HG8+^QX(!YLde7$K= z|EEvG?G-bEj)4jAM{25(*z@=1jEwfH)?hOI14Foiyq7)6Fcn+R?eMQs3n>&EGd81( zs(I8OsJe7$UR=WdG~{G|ilw|~PAuZUC{XcVGn4r&(aoP`!oSqOzj18ijUHhCKYeQS zr{;V-|40k|$2#4AucY0)Ib!OgiRs@5dhpmHR$$p+TvLc_435%#@RIcbu7^tsT>SLB z&;MhN_;Nf1^7t{H=yGVuUybLWGH4S6Z|NcUGF+sHMVdKt#h#O=PI2e93d6kCe?x>}QZ0^GI@gH*!#U)Mtop^bQE?hX7shhW${7vjQb)3l*jjUH1JkSUT zgqNgYqJYK!i6LKOUFD!@dxsLsoNo2J4!@Gu_73VcHVJiN`f^?EDHHw%i+jL_imXZL zK{8CUY;>N&IEv;>Au|FO-chb0SQ?Zl5FOC;E0S9f|DPmh;>=~T5@V}8b#f2Tf|gio#55Wd3Xt~6>$yvI1@ zVm1b|Isg}&Dn5cH3*?OkjtF=FOhh&;{FJxm!Cim3#6df;6;-MoU$<;?wLy{3_+Up` zr#B{cp8$%l9u+qK&quh<`Un-8_G}E>u3yehuUpL;MGUULde+%JZK^;B#}p-fWFVw- zB7$NxOr2Mus~+X0Kf0+LjraT-QMqdRwRyZx?8(z^fI;R{dmiMQx2TVuT@Ja1gRvk8 zOC(=C*>{x85X zM0safO>6NhJ;Jrxt$kmX7;38j^!wL4zGFpw<4rHp`&0jPNkK|qcPM-cvp9c+y4v=Z zBSx`FlLC8zyOOSP>sC<)OR3hNN?#-AQ+2s5Y-ET&TMISdQ&`Od`{Yy_P(8W9+u_l=BW$(ZN}27>S)Oi zh0NoW-P88->^(oODnnOrPI_IVu=Ct2bseIoXOa?7Dw)m$h+*shAVEkM^4(suu#C}W z^8cJ9{GAbxeqp2e7tj93j(L4MyX}62l<=Qbp)B@Kp2|uEBsAu+Uge+l2h9C9kU~jP z%K0?wTP1(G4Nk5?xtT#a)W=BJPa69_Il*lETqBR!o-6?M-*iSgI*IHhgEr!Z?-C>$ zOEi<(zkg02ciJf~Ffc_%d&uL^zz)I3!Rjfzk^HRv5&@q@+Am{L_Zj^4Qc690(~h|C zFFWAfkdlEvuGp*-v%PWA`T*r0e9Yr_Raajq9T@rh)c*4|wo7P7X^0Q~u}I;GjQ%p| zhNRVmj4pP@a>x8jiR1p&(#c=JI?b~*kB^2loMs{dCG6L$vFcoPjEl!a!Z1wy&aOQb z&K{j6h`^`TPKdoqmL5hA+l9^Vpn#pE{Om0z*5ftM^lGYy!3A!}XoN9#v)i^WJH%UYN6r z#Gqi|8S>jFPLtW>1J;ub%r+n^@`F%=45U)k=g@M9gK!`7coxbk=obhERM(@ljpT!H zO9=od%*H5xZ)T_2p(IrVm0lv0G?)1K)CY}@rwv$^c-?ZqZURq{n2?|DTVT8H-Ro$FZQG>+!YUD|{w9`^H-BA#-Wh;xnEjCwe^0>b%N3 zUb#7FjtqQl)p7`a{)pH5?9E*p;VkK6=DX_Do>LrResyc~+mOX4Kv}X9b7*RN$x#PZ zvBWu_r~B7Mx0lf6Yy&P~$31uSp4#&gC_kvHsB)GS<^W@TEYvrm8^U*9n46hFBv-17EHExWki?{~twX}+Xv z{e+q@*OorVhMZK&AknH+dJEMd@Mv_>ZG;9FO`P8z}JuL2d1=;x=5@6Fz zUtF=xU?r0mD4}Ke-}>1z*~l}4eElH}T{oLEk`G$8=^gB?RgeZ|DeHS@@M)y2)Rp8HKk+xo< zQfzB9#x>kJa*KumltVyYj%P^|r!+wohRNaKANw^6;R-tu$~2IQ7ofnBAa_Q1_-cZV zN@G)N6+m*3VggCPYf}*{FzP;uNNp%(cHZ^$0dT@a(V+E%5;O(ZX>Ae02L}!;*_Cx6 zmIi`BV+lD)Fm`Q9#z$ns0?-)Id>IlyC1A^vHzfSP6Uwn1G=G#$6~jL^()^A#S**W7 zXkUB_S%n}G=0R79f6_D=Zkp_BbXk`NmI~1cTpj8aB>jloRffhcH51A8GhtSTMg?^F z3n6LK=xcvQ=6VY;`FIglQJk5G!H$}%>L(jZ3DG12s2@tJQBvyL%e_ntdjs|Kq zn+CLMv3w{Jq%X%R9WrIOVXqTwvw8F87&IsO5g!*lQAqt<%{L2}sdUaPd>6>dC7}qD z@f`TFkaWBF31sg`1eW#9P$a7h2YzMo+I^3tm zV=&|?4~qKimJvjU1Qdl*t>}#`ym6o{;rj?09GLox7J1VCTO-3anTrt)&kw{(#G)lm zv%4VZN;};Qx)(p5l+LXeoMNyj^at^U?D@lO8erQ!5B>7UJuCgV#UV*yxSu?EQeibe zGPZ~#6ck(7A14|5sC@mC0g$(_j@akeUC^Jc9(>@E3h8;z__zEZ%UV z@~r|qm-p}AZ-wlh20jAeN|9FqBM<(JQeWePf;cd+(WG4yyCnGOY~U~FfcrueXCc>C$x3Q zlYq>3VY0(?XlT~L42`+1CF12r(tcE%n5{@so9Wo&Q{YRGF;yc8a@Fwh)a#`R7O@kP z#(44ULm<&%7#kZKhM^1gUSUB2b%H^k*N?aYvjn*E>8xTvVB44Vd|fRGlR#7a_RP#W zHP*WBkmQlfR=Y`36Lwn3c3(YH6N>LkH7_{b+n}W*<1d6iva_g|JcrH?go9w!kz2yv z;=XBw)6kd!dR1ax`}D;pD8la?3^=kKtyqc&N1n&uVMpc+(H}V+!=lt3wiR$v-t-In zNM@5rpiY@~I}><-OdcOYP_o+lmmt}E0B(VLn~edfkYT{~i)>{-szMy8owEkGcc zE+P^}$`b3tUE{#3P0Z6Z_!@t>q$p!~yJiy}5vWv0!@|N^Mi44LJMnyzD2%t!U!H*Ty-7rh`^P>JFrR9B z$<7QLg~T*aSF&N*#dQGHfg#vcZ?P8>C=KLdp9copA`TF{o^lFw-PznD$3B34W5fcZ z#hAE)sAdTFfCOGz80tLZikB4bJEQV5>UW!o|K)xN3Rin{j|IVJKcx|AlF4lfsk>jp z%z(Psknhk4c$|B(a)X0nbtrsq0+#6bnR4%2VSW`2Q0R1S#I4U{T_4n0hO<(+u7{GPP90kZX1V5I2SK6IJze% zNGHrVxOeZ~*!^U0Mt&UcN`sxy0EAzVLVhySI`~VF@2nFkYmwH@*C48udwN>t$Ebi@Tj07%1g{DX3yNNKYJ?X!{4-khac*pS%n3VK4y zGe_dd!*HzO2q~W6`-SWK7_d<>a5D{4jlV9Dk(9iRE_!cE3mSnqsgF|!oh>7hH^>)b zo|WpNsIt3vgSxhA!ZLnJ^YB5ok0dF{7Us7Yoj?3I?fzPcDZII;W?7URq z$4%|{=?sa&~V=b9@5(CJ+?n8%ssz6=gUX_T4x%a256==bCN- z3?{c?Xf@_x*I;~C0@7cysYY3}^UVle0pm5X?HjUjek{Ju==bpOpt*%~i7Rx-?mB1e z1zK!h4KBj@bm?MZLXO?Z2_4Sx17}k$Leo*973Lz-uu`u|yeuY`x?fuh?>aT9$Y3)o zkBa8~m42@7sCtg;&f~+4qR@(i%LChzU!kID5-5O$LSRgtYD&Ve7NtKSxfOi6W{(qOHda!d>vvR&-GY2&KrapN&@J^ z<8C)A*pMcyr_>kW{-y9E4YDt%Y@^A0&79MIf8!KwA6>cn_?%m5_+WHh^d z7*Pa@_$y`Z*Oc+y1Q;S&b1kyh-4uWqo&*dR%KEu<-=mpA1a>hd5J}0d4msgKDKt0| zv>>1@2KgZ!V^nBuVG$gJvLYCo?N85&-MbP#)n7S>bdnniLh_J?P2jprD+7aYS|9kL z@WLPh9z{WTiZd*am^Vs1T@ulZ9W_TQG!S(lN1^2+h8yE6SaWvXx@Ye|6_}3kF1)x2ur8dCHp{^?icErvZ(twj>+6f6CLmfHSW$e) z$@tLbO|??0^mRq-4uQ3HZQ8mN_{_dKNq4~23dsva$Gi-}cic=X z8Weyjq@Ad%n++%{n;*>~DoH^(;((SU)(+?SavOi!T~O06U9yeLvD>@XdTyt2Il>{u zVSL$3S4iP1Tk>5TkoJW8v5L=k?q7!KTei5D7gxAzCoVF7@@RFz`fzmjf&BhhU6~Wh%V> z?$COJ-Sz(C$9Ev?_(w%eCp#mX@`?B_W+{63n>1FN)P~6yJb@QaAu0eKWy;eyoV+m% zB&KXZ8e@Vqj=@rN^?t4qj7O((cz@w6m=VL`AjvAWprC-a@wB!CjF0O|>hHfH2PX=A z2t(>XVAvQCf~tVQ5cwZ#0m}CT95W3ao#2Oq$-2>F7+8ls*`ozlHKxqPncN}~ZhX+k z12=@GsY5}JDAo077m`xU2n?`XR0UZ@2qceMp*&1^WhFUjQ7kBR!;D|!_P^%NolA6n z`m^wF0O0kh+FOxiraaY9uih9OS|>6r7l3K3shRPnW93 z#Yp*JM==xDa~0U5G#v(MkLfvyA4va*08fSl7)TA`+APrX*kQyEa(hSaP0X6WokVPT z^yFw33a$n0T3>LCXoI5xQi(d88i%&#uk!IrN?kL zBlj`*(^n#SqN|KiMJ1~<>kKt1ky?_R7KS>;QUavQ#H`HyhdJS^yO^Qg2*`V)ehfp| z9Ss!6^f`S5F%nCX9VRLZKiq3Vyg_3jy)47!P7JTZKiiVY(3iRW^y$-P&j=lwI~@Sh zGi3tE8fp9lZEW(02iN6UDumHrX@ir`0~B7$P&(2ec;pL5-uL4uvoZL_rf=oi-rQ25 zw}cKwbmdAxoEtJqK!$m|xp}KoF*ZCq16P}1&_zt$y>OuC&Br53(FIO2AIv>8o33C$ z=oN5b(_oI8iAVQ16*(RKUIhvk*BT6S6HPQs&0DRaVhyQSAog%DhC(kq3X0>6i13@4xS7=!MV$a5>39!ENCqE6vnx&lVBp-mNvZ%hv<5w4YLA<5wfi-z z*I2+};?GQCXbg1S*@foW8Voo7v}d31v18?6sO4nB;lc^?o#Du9aW*=70cfTguvL_l zlHyfc{k;f{ZJF+#o?KTIsLG;H%dAr-(iV+@Xfua`TL2TXiU_5v)k3r^c8 zM`AsZq^yN{(^$%+@Mj_!K*XyDI9lJ^E>9)_*q14fUkC^Y(BybB)`3}7ZYvBfDz86M zwuoPT;!tPq^WGYM&g1A{kpyZE-jWpx4#Qvf2P9>ZLH3Y+){8DD1$`OSx4J1P5 z;o2T1C^rW8{NQGnr1cK({(@glsxjyM`N^DpM)CTpK$K88!Pr(hw*-tRY~fp+SKvlo zZOP&t8Bam5Ek_)N;?nsBTaA}-cq<HxsyQlM4|aOPo_rf`6c$FdZGU+R{_^6W z^I~s2x2VTH;LJ6*gp$+B93smm&yIy??9xpDo`r?pl0~hqJs&ps4mrIl$a3@8H}!~B zOu30>RaOQKp(>pqvK5ymvZA#JYF)4rJ^Ov-Cb6;e1>p*DqG}a|JSlv28i-2(CP8fw zly60CMc!9+j>~X|xP5J!j1;VRz_d5Bo8ihENZH>t(qj;jua}f-uRAw(=X3#q$nO_g z%y#W0n;NupY5XXzvu0QoV#gqusb4WQGe07dl<@8o+#n)#jze39$y4cdeS(f(aT8Te zk}dLq$ifzn9K`i$WGDol@}~#6G{L*`*Bl)Fvn)fB1RY0Ab!9{WgfZw4bBc|{p@5Fj zm-o$de*Uox4E9Qm^puhonxz`!$*UtIr)7lMbsBj@e3TtVrK2y&4}XW4rfgjFvCm`D zXW`=|q6@I)> zhSs_>275S}gN0Et{Bsu>D`!;+OS_1OBq8=OUmiWRsV;N5OgzKezMT)ytFW@Vu#o^V zJh}B>yGr5aG5*`9`OWB8n~(XOxL^viDxeL5S&;q3qh7^!Aj<%-$mEb`FavrL)6wRE z$;eKT!OgG?#D#4G*bfzn3<#oJaJm8(O7wFYIO!`*we0$wnkMSQ3-Dcb>4lN%%%Gqaw*>IjOUWD8gJw>y($ck+o;Y`{eh_@1uf z#b8WAqxue!LJNd=@8KWzFJ2fwcoRyFH()u_U>8rm>M^&m(N9H1LAE^cx8bF~hIlDL z2?5{87*`MVKBb#p_|RuL?Ic55a8$l{-_si{$WRA8b`hTS8o#sp1o@w^45M)Zc5 zmGe=6r*Bi;+AY<21iQ=> z6`bS?h|&`L56!nrlRaRuog!jV~t(KE1mc#)0b zNXxsL$(SO!#)afRRm7^ZL)q)+Qv3pDALksc51MSczGE_e2^E@c`_%}cf!R-6zVq?4 zQOTQeT0`99y^4#MDsIpx$$BF9 zW0n!g?(&z7AvSmKM#cEN(*vd2(CDB~V08rYbK7gHL1*z)G~7tGv*=_!0US-qGWI8x zA+(v%C8Vk7NOhf}8*f6ZK(i~!4F>9Y`Z#ujt9avN!Gxf-$&)Mrsg*KYZ%c7 zlt1_D59r|2c3W)d#8|guh@ip2!3cCGkn53$$4(%vKwFo!9qZqHSu3iNp zfX18<3QYpsGrgrVLqt@BDJ~*2+wfW-y}WC_cr76Z=DCR7MhD~7$b1KQmZt0s8m3-^ zI7;z-k!6AYhkkr|jz}H5Z_|9q&P!HyDjiy6IlX7&V5)@1s)8MER6DEu!b4ECxbDf1 zma`pC9YcJ*x7ai^y{%2bejbAI;}nBAXRh3W2O4!GX;}aomsR>tPcaQZjdBUl&E+rt z&sZDboh&1sz=!)ypuAyd0uQBkoKMLUhc^6_C}vrm6$ z)`krh&go=y+feRO20`ANa5~=RJSCu|CoaRXkQeaW%J=(M;W<(307+rTm3PPyXwm3a zSgELpgpYR5!B{b zRQLXu_FcHCq6)5}MtggFx|I*Af8>Z5jNt=pL+J1${Ilzo%Oe)?AwORWT`JL#SBh&}4vsBk+gVw;cCdIq;$Kl;y@h*A(EMgth8J3fq6_+tL?+YTgRm3`x$yZTihzRLB!+Se{55g}^X&v~H33H$^x($}kcn<8IlKxl z!H!IW+)q)@laW@uX}W9s*;W_1MEQ4_L9>$#gWyR`=IKH%&;qkDXhzurt_40x#?yG- zxb;8q4qiu1zPhi@h??n^i?k5`v$mFw0fH0tU07V)s969(T%Z?YM#y^u2q=wxK@w&QLYGx2GmQhUKPI+Zhei>96bS^K`!! zVxAiujk{{s%eE~9HTtNr6xj{nKfyN3=xs?W0uZpV`ip zx{H#T^d?0}qv$Q^o+Rf&5IEqNferx*71|Hflh4VopQYr<50Nen?e&H(Pd;qJIzMja z;+flw50ZtgV5SjA!Rk=wvRCj3V#tYUH7pGZ4*!s+K!Knsguf<2;1_n*+w{zmJLu*d zXox{gL*W~(e(cN%IJ^yw$8h)qfE7D-;NqT+cZEq|6;Rx%XswXT8;xT}961hlYbnCT z?VU zLfNP8kso^+uWe(u^8R6ms6cfSlzk1#l#R{3`VMpD$Fe{gr0lz+f0}H;2lPi%f<^;^ z7mrC9W6>0a9ia%4tV=r2UD3#lK&A3+d?{a|W;NZ`COp{@DSwSUKezFt&wj7Lkj^j{OU?YZrg7O#G|(^D_!9GzKyttV zs6r@$_TlY{itons|-My%6VK39TnuiMia#drXI&&f0rXR_SGxlJ^~wMwxVhBUZl_h zC@w+1Y0I$36B*+}P;Jnhkni8!J4ZxTI;-L<0X9QVTcL01kSDJ1Tss&IhBBha!mmEx zi!mcLn8~)|NriwGD#p=S~@jNSm+s&2Jk7Vb}QHMMgLz(8`JSIP_NBW;Lc(*Jr zh+FN|&4ZZwiU?3=vBME~)k#K_i~(c2fgJ40Z+rW7HVe}m-?*eVHt`1+6NoBP@US)P z;ZeVMw!S&s6T*m+?O*Kv4Zl{uS}|FDa3g*bOpFBF`7N->Q|LoM<%;h+W69d&A{?AC zK0E6(qH*ItISa#pAYzAL)F^`9tYP~h`1)ag17+s;pK%H|8qox4(}8(SP` zB5wKTXJ-R5WVopvXElUl8bW2R$1&Vo{OV02Sm07U>hZD*aK5PGYc~p-mQ`|PQ}H^0?kLW_sqk)=lth& z$piXudWnxO%LF0`J$qvd^*xz#pzxCyfgQ{Z;HKeu%vdte5P5lZUa1^7frf+nn~z<} zh)^iHeh$lGDP{D6EM762h+?)&|P8%37clKEco0BTwbhWi!(lGMid86CH8 zs~YI*U(7!Y=WEY54}cb3Vnl&kWEc&=F2Hlp13g7tAk)E(;Q^rF*_jOBHAq7o(#VSo z)9-&Yj2;^Rw<2nbQ(izVLZ$_)?%9df*$LznvDttL#3FV2PAA9oW5C;e`BZI<`V-I3 z@PwQ2jT}i|qxtHF>m-rG-`J>^YO9UM|Ig$lwKB#mjN9+kcDF(&MY;0cVfCbD( zLku4SjV73y^qG5r(Dv5Aq7Qa+zVJMucB$vRn+Mu(n5ONt9SaZ5!M)lNycqskTsMpy zh6{kiiz1KfrH4LE;^ZWYZx{~U2EhoS{0>eCE1|5IZmoe!s0+5S?HjlTU)Y8bZHma2 zq#Z-khs-CDlKH^FCfB+mvajb*op%f1XVk%34=s>6T7A%(b_AL7_>c1!WFn0i4A1A{ ze=|=#f2}JrYZ#neJ)pAmf_n=GvS1-g(@mRbkU51^NGK<<)1xsKS^L!@rLqIpsk{ zS<=7cCvX@x)sOuVc$VV0+Nh0#W#Z~zgK`8h%d-_%;7OV>-_RJc6hVj>tuP*~Ls9cp z3GhA4NDKO1fyxn^n%vKbF<9D1U*VM%5=NHo&=`b)Ky)W4c@BHv-!B#SFv#>mCt^J}Jgh`11qdeW0Kb zK!R`c7MD92ccO`w5G#8T8YF_XQOR&M58r)^(s?nstJJqb2brA#t~m+MvJ5pIni9s2 zBR<(jydz)h!J6aV(jB*l#s=&Nji`BiKT`j6ZQfn|`^J@*8ibba*ms-3V^rFI zlc)k`n z2@gJ3nfze;{<%Z0g&9X&y*Ghfe!=^v1MNKkZ{~$(-~ra!I*zgPZV&c{uRTUlFlf^t z4O77#yv+Uhn5{*fM_!;0M2`ZBM$5g1H2(e4i1rcpT7%}&An4^!mkwa$NP8Xom$*+! ziHQ+yey^c21b_xpK)WyYfGN6A8H%Z>hyWq31e1f{JL&+_Gu^ng9fSPzREGFT-i{>J z8IGw`0>d0^E;0^#XZebn6y5V68sWO13e3fBb5#8NEJ5E7E(=q?&aF89AywReb$bn; zy4*z898Ro0+4_BMDz>mU)JDGnsNA*k<@YYR7X=(Y-nMWB|5uYF@xhr4*`6cr+#%5? zn7HKWNg7bxR7oy#13!3?P9Md^X>GyrOY`1j+TN8~b@Z#cG94mMCwUyGKgCKXU-S} z^+~-m7+hy+T0bX~H#juZpIhyt1K)>>-sD?)%zracDx}| z+9p2PjptX!A3QPpTk|?yyFyPj_3Op{c^$ZjS04OwzF+Q=$(8S$gmk9NXn5{3sMnl| z9+=zb7e~P|a60z$t(NTykdp?-hPQ+nEk7H4@`wr8eriyQBkmbr9V^8XzJTZ;#%wVb z(}ah4Zs8I-j3K+8eal>C&06iwjY_57ydR4kb!a#QxorXxdZMqF41Q5WQkrM^RrV?h z6F34=)_x^l1|m;bD9UzaKB7@`hy>qo4Pe~kyYLPVTxTe`3Db_bQ(7?ecvvqOz z&|A#O-(BsRvJR6sCQ1 zFpCk@P~d1~?s0R=duT5tAYk`xyJ^o1#g!|Wf+M>g;ys zI&lj3P%wV0mY%+}@q3+-o{7gTsWN!xQX>}LD&%w4F4G8}K~PXWg)(eScn8OA{DI&v zbzs+qb%Sd$XQt_J&j#PGPd-0Iz?SOqB%&%xP#LW5IpZhPO2f5HQ|m6>*FySIP_VN2 zYXlO}cd*MnhBhY}HR%IQh>HZo5$h6#CXFj`x}%{k6=?&&p70L1N>BcR&k=-cZhz!% zJehEnzbjHicp_*20`Cs6QNK?Vakfi{w*_T|Vf-0# z1VJM=XaX3*CrXFQ8_o`4cTrQ3z!12(lkqq8Wf0c&H*MM(;TMkh0|?w75bZc{zsqnn zk@qInO?kb&7g^SOwbV`B+w0}x4MfEh-;YVN|+Aa?|n^6 z&`$dN`X9rXtCsZhKm8hi?440EdYc`w@lpUsmk9kT6)QbVR~IN zy$Ptm*Y>_q&Vel}sM5$Dm!PU)U6yxOur)`TS(T#QL{bs{Y17)b6vxZ$s+XbfzbVUR zocBp^-571^2hX9BM zQh+XHaM_mOG00u~md`RUP-jd{sH;z7e@#^lJ%tLP;NlODCA7LCpf= zcTl^&MYu1p>2&1}JgOG#?P(~M6TI{A;YK1d;r2ZN63XgsFWM9gk(^4a ztal-4qRE1!5SfV82JdD*W)xIl5a0r0jsgo!x?*wmQLBNJ{IGw?$E7+y&mVX1{YWNq z!3bxZNJi=JU>#|sYy}nnG}AoZX^y!3_#o~`_qF0YJSIU@uz}14hbaZX`RQImU}?L< zX9`c(nQXG+xc8z_O3e!-LGfNXlMMFZPmpW?t?HaJnvS@hSaz?7n>t?a7o%7B%6HkOp6pu)91hyxUQ0w@AOd%Amwsj%uH`(3U;71o2^^~NpeaIrkQR7%1_Z9 zNDH8mFib(Yi2X;iVbMr&Y+p3;c_@JpqBM?*Pyo2jr1@QyZP^9e+mp;LY7>y+?okzi@$-=bh!kj5%T43n$Uo zLhX3&h9X`PKhLC)=_A0>wSk4%@Oris`@EIa7s1@V1WMfHFXO2h%oDzj1PZW!T<*Fe zg$v-7FC?SPt2fad&(iH%niwoCI%NSM(xS1a`+9cTQ9;}7yHCo=FRv7wA!K{< zGUyio7zm6N8PMW0O7+#qEHhe#)*pyYPUwZgy z4Sjn%^+%1g6W4>bfHSL7c8c$OSF6p{dt=J{!ZAK$LfE#qZmFtF3Kv}EwXV;}XGY5B z;p(9uPjpT!`|{NIwN8Wmj1#T4992=!?&2e$Jr5m6>gMNL1hCtT)6}$++)nAFf5iu|s`^}aqirQCxZcmo5`|-9+q}$Hy ziOAXyy=8YJq|Qu)=b@k8p5BqLx9l7DD}H~!Rz1~tb48G+9pC9!ajr9FCIkC1v~~K} z9#)_?qGDBOx=iZEqweqBs+uEz+3u;D9;q`9<4CS=*b@(H)q_G#?9X`!j{Q*L^aiT3==xge*9grr$dLt zuUhto^^P0PQQ-hJOVmYEK^$I)xoCNv&s8B4$aHaRZGuJz@-2UFv2MA?Ra z_u#+Kf4x*Sv*X3;j|*o_gnebjiII_udjgh7Z)~o9#m;;YsVkP9Ra)XdIm`9VVm$3o z;mHEuzn(MtrtHqfUi@XmUA|(u$-u`%o%Ln$^EO;7u{d0@p7yOd(jh3Mxqaj$m1QuLZI;qsR?4SoEbg3pJyj|&YG zGV5&Ip7zKAJ8ZS=@X?|CfNe+C1>vm)Ke^7n<+?j$PG{q;cex(k3cM;|YCXRWIAz3k zG|ldgO%~bxv}D)H#jaDcPs{VX-{b?$pp1O~@Qh_?mT^xrAGxVD*G7JNqJOl~`{B+x z57yvUFP1xU`wXhItWYtXTBWGW_M`OW%Ik-@>Wh0Sge6~DTcYIM@nZ8KuDn}`eptV*qVE%gqSlJPtr4ih62nQXf9tvW z3l%{xkLOf#%AR3GW)YAyy0?GNYc(sI z7GJlgwWnqao#=fp@&5JtV-g)I?<*?A=M0~93q6(L=dS%VschX2_Cu+Y`FYveiVtj` ztMpy@%BSV6FKx!Xr5!DBM8MBCoa%hzIX@1e74 zZeB5GP`=1vj}Oo@d`>;nkQk6#efMGgJlSBE(~YIlD$@Y3&v0-+bY1%0TegrBVlC%K zdW&E9>+M-8zeN6I{SlYb;hxjqhNd>0soA<>fo0-23dlhmUEd5+xJn+Cnue_Z_$YE^ zr5o?j&l$S5Zm)MsNJoCV8{+R<{6+H^g40U=q&bT7lgr)v@E^-7$D2!)1tgz)DPPys zwQTd72Q=G!mPzV0k5Ao}LP2A%jyrhKSSo9ugT!IGm*3p7pA84@eV3u(*-mJ7#LCKC z&JkZ7yOp84#5W{VJu>H<5N&+!)2brdg^6x%`X6SN{MEN357S}I?#L#IR*i{$r?;Vh z@Un?>_%zWwT9-qXS(`8aQofeGK&8^@e5CW~m!jqO3=}KdQV(u;<U|X<GoHh8^08{b8k&DK9_zB$G5p&EiwY*JW??v-VqVD_)wgpVEK7aF) z%ahL`Cdh4S3unnatXWi{e5hUG{RI0@uz1mXU9&u zIsc8{8xS+xfL^rm4PfXCq_Kvu3pFoPE)1cGxV=t)n7NbG$!BUv$Zp65d3+o zfSbdj>H1%C@{zTbSvg+Iv)U9Tzjv%Z6LwwBCL^OJTjfpAEtB@IVlE0LNb5#8PXhon z>+lpQsYtx`V&OdCsU8ETn%z>{Ckw)8x|6taHKhNo?gAB4C!wOC8+*>SJ=-N&g=m?9$)m)0BLWPh+yd00au z)v4}4>c~)ls8*TT*0HOmshXS`sg~oKI`zo={kwjITW?)maR0PT;m%;@qJ-Q_!3A^-W2-4CVhomJBry47o5MU5n$-qa&qZ&O^7f`A6O^*{PP;uMRI!>rIqT}ZnPc)LV;|ZOpLKMg z>HgVx^E30W_2jsIeRO+B<4JUe*2yz*DyX1DX6&jj(TiH{|5k6Q=BsB9!e-e@smq+* z7H21OwnQbWZ{XB25o@GbyEWN%OWZK$LL@;x!y7c2^O;ZlIamDiRg>^b5BU_$_=i_i z9dlK~HFiXdonYXxc+6dx6Rd2Gp01^OMcDs+qDHLmlV{RVBPy3NkK9d|cWLkB30Jd! zQDUftk;$5;6O^;NubO@jFmSNly)aFR=Y40VQ{=k|#>!$2or6pC``>3?z8b&jdcW6= zG~ToIS7ov`H7MWPl<`Z%MR?Dnm`c4%Inqo03gS{E7aV;8Odh?QcN^7Kdyl+h&hJ{a zt@Ks&&c~8mBj*&@fdO;>Du)kCb(JMcHC$U7BWNVa|NTe$xVaaM z4Sz&TTVKz=OQ85*aiW~muw=PbMcT5EEHS&;$uYM#^~}Mhu3uUiX~5TSZuGE}En@GH zbwG4or5_mm_p4*s4;YOd_=t__au;kY$1znShX^E{z|mFvbL3t zry+b`d%VE(Ohl#t8s73~c*MvVKpar?EI>{u{+a=LspIXyZ)*OWp`tSBV{?i*_{!!* z-M@}MoM~KPEs@ceIrH{V`tgh(vfE9r#war|s^}BYjsnlS0I*3U(Jf zGPUxs33<2kuaJ zXQ;VEL@TBlEb|KDbYI)1&T6F+%1DeKkfn*(LT(5|)MaSEH@Z&Q<-^kaoJ3j}yaAUD zV$TBeOy1zk+(s=;>T-tV18{3(Xet=7Yry=HUb<)ds=u03XxLmCgn{3na)x4G0O*W6 z#>Wz+9!G9x2e$M!K+MF4JCB(IfGcS-37|fO&eo3~$xfUM`9V)4xSeoeBD6H!xYw{_ zL&f^6)U>Vu9&^r0$Cu9MrNTJwrIqeWD~eI}k4ayw!#iu1rDH4>!to6E)TgU8lK^s7 zo29y5eJr{0r@oCk_~u%JBQetU!i(;qk}^z%&Tu>k2#nCV2?G@XJ4vw4_@Gw>u*)KO z=+voGy!p~7;%T}z`Ep1`>Y(=yD24`vDfAuo5?O6%^|T5G6}*i}G0@0L@q)(%c)b*T zKQt2pAkM_c@rScSGdMl8-@QnDJ|r9`mKMF(&@BPD4LKkf~?~UtjzcNqEiqQm~02wP1PufZL*z1=44p8`AQ}Fh2;1S z&G=h_OVAa8g-v4d1Q}=&F|4%|iV%#DT)`sRf~P!Q#yop0ut{vYpY7=rr%t6Iw>$y@ zNm~w@H|C6ArgTY9V|yr6l3&W-9NViZddpY(|CRUV;Z*K_+wh`+6p?DDK@kmxM2SR$ zAt{v1k;;@zp){ZrWgb#dloUI|qJ%_5Nrn;{NSQK(5RpWi@}8fS_TInydG7mt-apQ9q4xwUw5h~1hGteux*+V@H6EO7fqN_8GH6BLy_l{I`h_?L4&#U! z?JsVAc~)A=VB~oxf%A!bhSC5l;%O|K7MLpv{PlFnl%R?^a@PvC|1`Wd36he$P}W9K zp7a=r&E-~ByF{NGyIDqpwsMkQRE{{*m*KGL|J)ekwW_RS<4LDA6%q@*>5t$V=pHSP zb($|8YO%%g+WNmfE=CT;98&FqW{%||4I0>)vm0Y3SYnNVT2l;z@f3i8R-j|l3fXFZ z@XLp%oSd8+5flZ$65=UO#q{;Y3(X32)D+PC0kY44&f+n~6gbAG(NrL6%4Ni(WA}6h zFpt(hV1DI}JQ%!U#DGnaa_=*i%Rq z51Vbfxiha$1%Mb2um%QoAJIiVo7L!6w$~kW7c>P*FcH{B$1H3E0}wr#d`ow9b_6~$ zF&{%ewH9VQu&EX8M%2-)POLfYl`)}krD;a9=w-x1P$7-(>}6wV+)nk1D9!~yFYoff z@0%++F8+fI+9BHwAPxLm~mv zfnzOEhtt@pk)b#x%@vpIE=|~o?w$YO>axJGED47QOLSTwXS!Wr1rU^I_?g@mx=DKI zvz_66oH)c4Ap-VF<15V%YyVoDI?S&AXvAy@9M^da4Qp&a|DnG?w`7j~Lx^wYe|J!- zpE{#SRO<1&hxTD&1M0pV9Ci=wl6Ptare)8Q!`<+oX~L0bm1(zs@rrLg6)E2>jr2n- z@ZEHC34`b#CI+p`W9Bcj+{9o^XWXB(cG#-NMRA~oGdWn=VmW|8MA?D}mXvG0<_s?o zC`Rv|2A$pA63dpYJXUex+BGxD6W5uA2jj)kv7DfdJsX^^Z|Hd-(}GC_k)~Yx?MzAX!$C8+hx=t6&#> z1Fb-5P$>>^^a?-L-ym?f{h^}jnJU@9R^R){&z$d`nX{^RmTpiH6J+0Mp%-=gj$WEj zRGH<#7J9L6N3t*a?S-E#o}Y(N!$#q-kM$w@dR7}c5-4cmr6L>#!KuLLHRxcIBG&Jy zZkE%XWeoN-SmR7BN1Lx*)l*3k0%2EXR+x>W`0^D9$mlp;j#)q{)&*{ly!WrWlu&-2 z=>KJ9Wlb_@903v)Fg0iZ_6kr>>(#=s>wB+0o%r~=r-rph#KdxT_Hyg1i7lD}7J7LA z*_$q$5V-x5>-yW1Jz|$0Egg}8QBttW`{P;x(kLE3rKJXrKInEjzv1n*=k>}W?|dUV zhgI}9gtX7Km|kfyxP4ZIMUhd;+^7CWd0Wm+ST`YoqaeUuWT_}5MX&8Gp3gX--IUy| z+PD*&XwSng(}WwBt*@F0nxz`5UEF#Tm%Mt&AxTdR#W7m!Eg1J;-GS4F>J9~!O&MAP zPJ>%8POKAtnwY}GznSm)(AekVTT%TLZ6o48IO zKXnaGQ~p`}%=_vQ2XM}^-^x?e`_a@?drJwv*yqm+*u*ca)gT*a&fS_AIq@z)p>b?z zvRgyU#Jgffg>&X!!EV)(J}u^X!}ExOlFIi@GQz@#9*fH}x1h;ItyI%Iw^^W=zlcah zNd;FL;`G7Th3GdFGl;gV@~vG%2ai%^1M0@TO3>cLvAaOr;&^y zOZY#1wzg?eyh%U0bi6}C1S(GJF`)M? z528<5pZuvgY_L&lVF}#U01=Ok@oNh@0rgobH+SpJ^jCEzuS@PIC=OeM{0v_iwV~bV zanYCN*EW94g;WQi-$HdQOeIgD^u=hM@bJesQX~eGt&CJCb_wbz`a;&e4;mmUUa%(x zp=opj^>yvHU0II75UG#|oH9hvKw@Q`qPj;<=vD=)xFz~Lo{D_c^R2!MZMW*^=_!{^ zW|wuHztB|r<_4+D?Ey*5+TJJypX#%o&y(g(e}CRJp6lRK;aGJGuebn8i3dFwM29En z`%tCBrW94IVpxBF!1DCj)yKEZ=Id}WwY2s=_O<8w~SzI|QR5RoZ_Tj-^ z4LxN$-_CPxIgu+scObVF6xD87&r^}rjL}BO&`;El(f)4RWcgB?Af*(JwJi{jPmIrK zH%TY?7ECqy;4<}uYzqx+(nk3IV+sCU)4_^72(}3hR&TH_+xn*%w$R}LB^ zdV<>LmRfmrtv60wq?MI30xIwk3pKILcNbCY}n`(ak9E#ytg~JvY6qCV61ou^*`oh0hB{!aY1G~NPmZa*e zBFGh4ukfcB-*>=KfZ${wltu6Xn@2V`*!|F9hlpHg=~50@f57ItcO5YwYKI)r$b`ZE zX6hry+UG6AJGkhX(HcZ+`ISslq^5n z8JJ>;yR0A*Lz@Ll;NoBP?72i6KMd0XCLV!1t+l)Lfk79f&- z%wX1T^J&_O+(=39&=^nIA=Yp5v*n`CRg13cuMO|4LR;khvs?65f2f{^8)+$vO&)E# zi9%;kUsZ#8X>WgQm#J>w1(8@=SsP`MHKM-eM-Q)9vGh+1d|C6JyXg9qu=w66wVh(& z@<5b3q`(SGUx{T5-2n{^4NaHJTOee^a{zxqvtbrfm|Ek^aI72uLiE}@D#hi*PKDON zI3wL2^nSP@2m&8QiWmZEL=KsL0`Cs!ZagpjgedTn) ztmN&u2>iUTupNc&gq>|}J;HK3{z^~Ra^LXycTdnAC}royzI-BJ>-fIB9n3zw(l?W# znDL_Zj+f|pZTW-NnAt(B8-u-|lG)J&frZM+lle)x--4IerMbu*mymb@j(b1oQH!v;R%+#D_Jdt(2T5Gc9Hkb)TAAiM$G$xwf@0V47> z2OERv^c5Gno?-_F5C0A~5=$vwDo>hc5Rm4BylcgL|KRu`q9KC+Q;4&BaQ(Vp*DB29 zl3ibbXxD76yzNUa=nv;%q|!?-FXgZ0VnwrN&Rn!^U0qcJ?OAxma^1<9SOUh?$^)-N zqSMKt3miV^@F4P$Lgl1c_4gZdCU0}1l~2LYmK5FS@{^QT8h?+>5}>bKy>I%sV|C&K z+tK;+r{{tnOOmh?KY)haKnX)j8Z?NQD&$dtLgDS1JdyDW`En;mTplJuLYK-iQ-@$e zjdg6JSYAx`@lRMyWi(-ffY-_FsEq&yrlfezpr^B2LsZj$$)2Gii2rU0^4cL7vmn=!pv#OSG?m^ z6W1FI%Kcr$`=OW4TBC+p^C3lC?i|U>4*$7RTW>Op1%G{$Psa+E0izlmP(EIqB7{aA zx%Po`){4?^wa({XtCL@%aLS4TXRO>aF5#V~VB;!8JT_TUbal@he=B`Vxn)bBzQuvI z1n?|Ym0veTSd3$dydcyzUQivYZp1Bfs z9K#OIYFDue{~DjF`ay>p*sVUOVF9si;yewkja=F=fUp@& zL|=o1FJy5O-@E?z$KDjY-3dygz2K37UL}nLs6eQI_Tv0sT3%kAl(1tN1!)p&O29up zsaBQ6?^~QY*E29+GoU`2B(&-PEFfDTRQjZc1dE@P$)Lp-ulxK!H|aw$s8b~7&Cbm& z1oIRK6LIJdcaee@y#m-qZiFW``J;f*)tMO%h8Bir0Z6r6XW3CM6@w?peLE|~VSGGS ztIGc5;!(kjBaT1FU)D2R95ha987!R{giKz$QR!Og%l)6nZv1T#(kSl=Shf%n{4Gd}%og_AX%=BS`p zpd0%2(>s0w_=1C*11)F~BYYEtVTj%)Q+yc(9D`535Z5=EK@Wn6(6C$H3n-3p3cjhc za3ct;V<{V!@P$bO7XA-L6g_aunQ>BI zBPW;j#4W0=Xv`#H&9-!~`^k*5DIMw!VkFf1qyeZvma{S^ThhgS+w?=F4c0r$Il_93 zfB8Kgw=&zBip{2p0XJNG`?t(yI8Fe3W9)O5tJm$&2=Ui~)(@KB&MsJyyIPd|J5RmXxI z&71;k;N;5={^cgl8yTj;VN_f%GrR((Gw2HE8~G=~dy_#9-C%c5>T9}pzJ=Tlz*0Za z1GYSgcTy6JW8%$>>m>XyUAlBHW_m_O1`3beNe+6%n+NYYqjP$-Vo+N8z~Eq!;7Cqs zWiHRs@812-(1JgI!X`4`J%ta{#$f5q#l>?LTdYc$v&whd{O(_Ky9SGRV6=4TF+%#XbTf1X3=-X4Dz$6QnpV znjU_c3zsSenGRJiA493q>0tg6*Q&8{%tfB=yUD@Dh;4{pdm1wL%yqLSS zj#TqRy{E`il<*XSiWP<&v50Bye*YUzs?_%*B^GuwHN>W`M+ylkJYcX>bFT(Ygy5Vr zR#`va2n7x9kuMq%f@mVSXPgstPa*@q%Vg84Bqal?sZ%AO&|?`=?(b> zkkl0<@8PenxA%XmJ80Lv+V0IXDvhwj`+&YqHZrv(&(?o}k>VrNniLU;p~mvC!b<)E z!XB3A@~_Q1amjf<-~De>n#u2ykR|Z1$yg>S*Ww=7+-G1XX8Pb59}LmqKZUgdpb$F@ z;f*|}+gGOfW|NV1j2A7&hIRrll>LPOr!F!#HL5n9nCTcrF zvMU#8?9STPQo=zMiXJxUmD>ps_;e}FBVabS)fsS zS?=Jqq+C{nxMeuPE&3Zqbcy9xI=!Mevdy9oe>@i*?a*}_C({g6<6zRCLFcU*1p2C{ z6Wxy=Zzi`3c!vaFCyu(~%ewqGcE3ooM5DC%)DbjJX+*CmD#uRMvK_ZE?DAzlh$b#& zBUbtisFQzJm<*7H2%gk-X{alT{&0kNWIK~q>s0!c&Om8R+Arvs#GFBh^+mSao)Zgx z-FU`E^k~4_<6be3yJK!c>Fb@?r&rx$x*vpkoc* z=}OKO)|DHS$SvY^HuhOM@{rEk3&(ghR7Ep#5)vPb^yac8bz(dBNb=)IX090H{>bHNN0VR^RIAICi;a&$T0dfvZLs9ANx)AmfkW$=L$o+je;g++e zgkUEyA06)JRepqw1sEl69Q*mhwF`Fvy*c>rUrD_5>nc?BbPU3p;D?ES7^iTIMqe4y ztAZza;}brXX^yvR!KqraVbbqKz#Jc#af)PmsCbCo0A4y78AX7N4x^C<)x7azSnQYd zoRTMksJ{tB2Bewhj#-u@P|zmL2|4HoA6%cH1gylvfB zF?a=N6SK_Nkfu(`kCh(7POp!g|Fu2%Ju70)m=B3Wwo4oN^tP9Z4^i#j1E5tb4n2yy(q*1%+;AW;XmTA6u^X$4-@al6- zH&B)RqoY~~$BzHfb^89@&^^X4s2t@G7P9zWcAcB}T;LL#VP$68;zj|LR5fUHm4DiE zcO0a&6ppqPNp{ne(9!B^+N+zzG5lVZd+Qv~M$bAbDHm4K23`YQged59C+B*_t;Rb-HJr`@0}alMe+zn$A{;QN zlsx-zgA~US;n=RiTfviXyorJ9y!Qxaapr4g|-w?l(^+Ej-W$*;C>I`0s z6^4f-%+paBnj=;MK7e8VZtAM>IE{umt>Ou(pku>I*Q4mk_@H%|&F?uipY60JCZhfX z+!(+ErB%BZ39o|H(yi#BMR#U9H7sH1Fn7)Q+Ai@+hlAU4BVgekY{1S-%Cy&|@`OsM zsumX}B=Uw;*Zvyb#Ic_{{6_iE2KTSYCnk(n1FDt<_P z0tE;Kh>Y|f?=cYpjb#Z&W}X-Pn47>K_i%}87BT#Iaow|Vy!~mJzkjK1|C@jS@y_9v zC#_TY!d@C{d9|YK{n(HzN9(H4L;#tvUp@m{Lh6LzsTbqh6h?L(XP)@p6?_85zp4th zWnUvEt)0E7{|LM1sTpC_&9`QSm(Y858Wl;3;V4OsA+VVsAoK$>2qkRi=+OeNN!f=w zc+8G9PlB@XN=_LZ=W$#8%FrW_*j*cFV82SEvADXD7AI5|Xgwe0wQ#T-UoQN1e&6{V1J}9LU0VpP;dg68B zlH3M?SW3f{5&bUcIj>{!hI9PGg28a~BXh>&D^%4~EZb&vUEJR`i#p|=yBDYLMN4M? z_Gr-IR>Mj3nYW4f;q4WH?{{swiMx0{vWz}*nz5P}F?7hH4!on$Qa235f>o7@-mrzr zeATUq{udndr11yc!I)RTKW$_w2cho0Hwy_2su_ z>8&XWmHLNR{bg7g_uoL8qvY(=KY&v`k*V%^b#p2Vc?Pzo9s-_2j8W`~q)YFVa7VKb zGI1YlA7p69-~}BAo(OwkJVT$G(FC>sTUgV4dwL|vssGqI-PJoj8GNcI4_iF^letqoun3z574@yt8xlyHcYX|KsE~uF19}Rn4JZ~O5!-C}mg_LlCS=x``+zhWCu&ctQffW&(8o0c7g*!lSithPk5-%vogAN=zC<_$^DcJ-O zPbqlx=n;t(TaRe;g*8RCNIlIq~DZqki ztWC*F;l4h9pXQ1Cjp;vXzVJ$0FDD54MMjryxbzX=dLj+?gB9{m%ATxG{4}hzx!BrK z`bg(1QL>K!^L=&TAz`uT&bas}vIhoTLoD+e+*r~pzK|acnG%5GF~f5jt3?Kj*1?FU zZ7w}7S`FvBW*tmcbeQ{JfjY%6KdJ#q3c`;BpdI_YqM$@pa+QWUTOLhsOOz zGM-BoV++H%Lu~15buC$>7hZl@Lk$@Zz`LXsAQ05yIGV6PLm)y-H5h@%JgDWV7Nj)9~VLe^a9jG-;4g8UpH|5(9p4*Wzy862;umaZjRH=<90 zPNCo$`kU8<<3ROcR7id{Z|b|w)A8_42+^wr1w&v}(D?&Kjw-N!C!9kkZZpxXk+)R@ z$o^bpWYUQ-V)-Cw@=$Uq1^YmE+p{?2)JWD1VhrQ>vw7pAAMO@qua{6UkM@_A_7k!d~TgN!Ve1%Tf7wONpQoCgI)7KG(O)8z>tW$1M>|NS-m&0baX^ z*uo|9n%7~tISlNu`FiQeNw{bRXKvq6e?+5)Vgb`?QqdrU zol1?c=c%Z&q1c-xacRZUAc%})rTC~nTYg6VL)Ay;)%p^1nY#QTul3i4yt%hw!hCh% zL&AK@oVrK7o>v0T0;XrMJ%`C((E4}V`zQEZlK7)8q(rE+XtKj&_ONrw ziC<5*VCUa^y#^|vd|;E%3$A(fUhkK95#tL4QaX1=}`gU)n#v%q8V+#1Da$j*7cp%g^5L_^{-8&sD#zlrtij zj&t8+x83TYK3t=RWZ7Pu%-W}VnQO%)jepuKmS=0VS!cYv6$PA(t1N`97#q*wh@}l> zXG2e{FB`SGfi|wIMwMW?_hx_l%8(BNg ze!Ff*CD-w!F2@xONA{p2w=HtQby@#FUu2Kf&zy_h?__*>s5;|%Vik{xlebvqiJC!PxS zm9p6T!{e)+h}xapDq(H0;8~%w1U8g+3_H!YZL|nUozraGNEGpH8`L$dlMsn5(_m0KPxN0JD+Vu8|q|dD#dwSQ;sVn4YYpLt&+myw+ zMv0$=al`Ua0~(@x9~_hTJj^zIeTi@Djsd|#L9Dy0rtPyc;|rhVzNISd-|{$(tQ8GP zDqOr^~ss(3opvnoeNKWBT)E^RwSK) zLKS_H!^M0n-(T4J=vco|WB-I+&k*OeTz@9cRA}8_@%tX0^Sv-%PV&>g?;v)n53>^w zKeKx!AEhuG{x5@FMt?cyFiT$U`nLa6>lVw~!!u{anhVa~ar=*T(v`lZVw-R&4?gvX zpSV6}wb0IWLi*!enhQGwcJ;Q;^SVD)9}}%4F0?x}|Ne5Qd&<6WxVlZ-Fh83!Y2vY0 z($nQKs>2(7z5oQx;q3UF*!=Mm+5*7iTDNP z@9R@)FTHGGv+NDqkA)Ya6u!AEH(g-0Ma=0@-qmS6e{tuPT)o^n6f0V6;TmKy=Dez} zthTLh%l+WJYDa?SsUPxFQ*o8}F7FWJeAnlPK$HB8Nb&V*XQ#D0xoX1l^2Rg6pe zOTT?yDJ-w^S@rNh!^o<@D|IOibBjZ8_4|w)EgXZ^`iK^}X>8X?LUN7cdyQA?)kLfA zmo~XS559j=DxyuP{mI+b#P5Q-$<qC<6&kAUCYj{oC?Mf#in zFNHV$f8wpT+jjB%;;4iTg2YD{PGkPbJ88}Do03|7hgZhhUIJ-gys@x1LHTN#^Tq)6 zsbAgNxX}T-oa1hJ`m*3JXgbz5>z~bN^|wRCs|MR_KA-oCFy^TEC_39_Ws%0xbi=* zwBkRYKh>&!YJ{+AYT5K1zpp0jDOi<-paPTGj)sP`>(Np#XI4%OA*}yxR4Dj^-T++K z7&s#>>3w?Q-&Q@-Hb`Abl=+v@&bU>N=AjjTu9XuWD4ED1FmvI;=?wDxI|1H3kl&fal z3l#-1(-8;J^zow~4Cg330Hp8gWOw+Pk)0w$rl3cZ0G059wO&^>7ELndCoCDs7?j`y z8c}uHT1z&7djEGw+wckX>Fdy6!AWoun0DwPQ4R@Z3u`YZ{zJbCHF+N_=?eg0ATN}1 zScv;YK3r}=(qcpepffxg@1znP59qmbTl%Csu)1`1uhO8rudlWN)(8OB6bO<^01i7` zzz%?Kn0MU{6X=F3KDp`wj_^XBQ~2c#p81sWi*OL4q}RG(D8<72RCx7jJr6h>n>Rl` z`?$PZi;@(C!7fQCM<&cvhB>$a1nJCHa{mT{J&??k-3LmagKB zXlf3pICIELY88T{n6Nx^q)b@8nKMPe6Ouqe&2q50Rxtc9o)2_O7bm8`>2nf;BBy~j zN-+EooX}mps`y~)m%AFWkg8bT!|@V74`P;08HCwtHa3Zrc{#;>b9*mvd^e7}ID2wI z6e?|5%IokBpKt||5h>R6o;~`0?58M{^`3-~&?ZQv{N>(z=$atUiqZkdh!4K_o9pMw z93>MwK%IPOYrWbAr^A;jI7?GftiwAPy-#FNc87z&!_SG?_-AH1a*e7xmV$whk4Ixml$&(bkf@H zUs#9u?sb4w2}R;!cD>;yi!dk>`FUD(#=fLBu{ZGdd;9N=qr(fufl~@U$yK zG=n~Yf=}kqXM{8H6rjZflwlDCb%6StT`Thw;iW3WU|?}lXoDJ!y3LwPEP{0IV^qY^ ziT@2fIWS1xoSwoXV*)|B8gA@i9wy@jQ(v4xspy(7#MAYZInlTxBW{Kh486!n8}ws0 zSCdTJv!IdM?uk)yr{N7kV49gyxl8)`{|1fwYOcBD0!Z1)QpK31b030yauwN6cu(?F zpjF_=kz%?JV3jj49It|xF@ZslDAX-N>(>jCR0d4Hvq%uaAvsKXvwj6Vpx1anC~xdV zmn@s0@ zP>*O9w29@iA3!rIC^woP*McU^WQ0GW%iT&nB|MTK_%e_m>l|tGi3}_!+TasQL%l)) zwJ=y#1NcFD3CaT`zi3AB9DOB=(QjhguUIblGrpIhqk&0*4DM9J6(BH|`9Es`Izc(z z{#ZuL0b?@+pKL!M4S(cHBM~K-Gm<$hpoB@VI`nqk8kpANTsSAL1(fS^aH1z~`jM)O z6c-1gIPuib?4Pqo?*MS(k8jf!!+-#!o9X175I9>>nOLEaZs3~M{=OzuBN;b$ESqL+ zDtoCzY-Rx6wChl)5gQW}wp#Zyr#bp{Bj#90yefoy#T2ZlEPqpln?*+b+53WYoTDn; z`Y>d`GF>6rQ31z-*md6Fd2t>EofTw{rULmM7-xvJr>CyBm z!=rP5XY3p$vuDqHx{k}3yOhaCq7}G39yZ^6Xt{-kbUTo}@^2%HnzSO$rM68~^l4ccizbUT ztp&QZLW@wP_>6kQk%8wX@7i?{D=^Hc`S)PU#GAf6&OY^#(Om-!NFV6<(YL@B7yIKV z$ZiC+L0|+9kRWV_C{MvW1&rcedP2)%ciqwo%aXmuOdercFjGrIE- zn24^F9~S=uWu(+&+emWt+H|a`Gh&K*J30~uB#tn@!xc~*qcna0|Yh&E7-!%hMXc6Eb12Ut7d@ha1Gr5SllqT&mBVx zX32r@&PH|34hfTcn&c15;00Un#hZN|I%*5ndl-S`!G(M#X%KVL?BB_t`!*ffBZ5l1 zOhTnMx23@oofeUPWMEBYP(GLW&(ZJnZwrx_XCVzg z)>SK#&hVKrUzwBW_ryemxZ-R=Lc%dTNY|fpnFXjFZePE?5xyJ&*RL-k%TC{Y(5&}Fv+O7s~1@!VOIrDa*$ne5Wj7FDc zL-^d!n4gH+L1|*0c{>Y>JILj>nYS;XKAy??MNAPis^UF0h38a)@5w75;E(APnIkUh zMsyg^hrw6T?{-T7zY-}XLd%!KeiE^$dJQ7Vocp@8ao{pe2U^|v;3t%tl-@#vHenPF zucuLZLj3|zC^;igbZ2rknRjX~@eU4d``OTnM{k4dV`@*c_;TyquuuA;s1Ozt+5tWkN^i<{_X`d6e@;S0xrnOu_)+l4-+feY8ri?S!v-UsGchp>aWW;VCI;y<$wmX*Z2EX;Ng|@tCbHN9+=!2_ZU&mU z2*HH~g@PhJ*%=5RHzM=|t-P9(g18k#kmk8RI#!!IcA43=A*5C6yK~r+u5`eg=Q%l6$$KY=?`OL=OY)Yf zc+H|$fw|>e#ro&JMh$t4?Hy_ljtSfICA-7oP^(8p$D#Exm1{k-2O38nd_KH(KFl?f#$ia`)HDTdHcs_vNaKS>JsO@_`Z_u{zI<^J zUAi8>m<6rez?!F7qwCfy0{k^5q&}mcGJz zDXM`bj_agb8hDBKO;_L_$vycVJKf)B+Fim!`4h+UGg(_!>xIcx5V4vQP{hx7}Foy?bj^&cA%~X0|;}4l6|j4(1IS z+yTd8+h&NVkYTi{eK02{hg!?6FguWiY4!}4iqAtFV}cmyYwp1-J-ajhikEw?n`CBY zrjVV+wr#6GCa@UxSYNnuS}WKJJ|a*&G|oBFfQUx{?Sw-{?wdFJfP~Md$WtE(a;a}h z<>#S!sEKkBBE#J0PVfz?*3A!veD;w%&_^Wh{{7=mGBsp~_OZ7PD;c-O=EH~YHXq6L z?&0R<7OG@EeE9yHB`6g^YduflLqmzP`bIv3ahXqGK7(P(LH_V?VG=)f_1d)+2NLs% zRJtX%vg1NYYnTY-iNV1F_p7U?hx_N$>C+9}+;VDbYnNnRyL|cbxw*m^0AN~VorLL= zbcw92?9h%%a#@|~K!ATbz(+Q`RJe{}brJuxCrtuum; zt;g^Cv(KjKT`H;=tTzkZ2p*gK^5x5PBMIAs2Ms+v$FfJ#-`V5R7i8gdZ><)l!(iN= zU{wj?aJdRC7xL!L+?6!Cv+>mq?hAIivsYoXeUNtwjn?i+ zw7^fv*)kSCn$zany=3H5Tx_h~?%lW0v~6(fzLnE)&HXF(13Mgc0|Eo*IiKVTVrMv7 zPL#)(=0VLh7WeH@naiR>kJ?;9sR;}Qe@0!; z`9ER%^${6WW1)tt?g~D9p9*iRkh#-raNqHK5NGk@obq*0P3ESJVI5DQQ?;e@;Uh=3 z?(F;HK=Ct8++i#eg|!WiS@1#HP!aMorv&HiokPcf0EW9U@JA65!g z{Ne|YM^8sbT7rM^x#PU0n%N5c1swxP`S~ZG*a16=v9+<`?5un7;yUW)rd02VUJDmb zlKFHbm+bbwd*tsm*|sgP;_BK}HVan^Ws?-t2`MS!V>GuU4zfWQ=yV{-IZ?X5AjSg z>bk+NUqNM2$pPksm0!-P`+m>8y1N!7JdibR18(w~PDb#-f+$iG`2b8N^A&!9RmQsy zhZSgfM0uqJ1Es3UJ#gluaRy5&I}mFWj`dxqJRdsgVs$z1WA+I!#VvpU`q-JPpsBrh z?b>aGX(=IK)(uRtOh{eY+S{2}i;+b?-P$^6DNZZU7vu;YYhr6~E?FS9Y}pQT^H@c} zP^<=)nY*g%>lNE&Aq9vlE-tp)#Sxd0p$qNmv+{C%1N-BBW! zquhJDU!1|H-%{GdU_AN&JYf)u?`1Il!Nhh0ckV0Zpg5j9jMjDYuLT5fQ7(k%XumJA zhHj*%%iM2pw6eC|I+v;O^3|(Y;KA5YZLu>yL!K7!I`s$F%B^2>EcCdJ(z^TXA7(G` zNc0R16OgSvaRhaE7v_Q9v18ekmW92u6VTdupLA1OJG<(4?~-urVaCO&NJ>g>-MTfZ z?;6D#U_onet=Y{?PJRu*GZXGO$bLQmf_Q6)C;aZ(`j34D#-Vkrq8|W{xRliPo}M1G z6Ld5*{Aq)POhO%-TEWSa5BJdd2fD%SSd<=dJ4884GS9Lx7^4e8Q&I-1@)tJzpWQb{ z?Qj>jZrOs9Qq-&CSE8b5S?uj~EGjA4-dT@fFDiq@f)T&b%IYSJJeFnEDcu|}Ff{DO zWr$|8F|wO=yfJ6@av@&YccwzL*n$NMbk}1pk4<9zMF!(kC+jEhCYJ?iOTg>VS57C^ ve=uGzeuRs{OEZ)T8N601vH$<?_x_&Wnf^Hcoj;D(=d<^I<>`6e&sz7o@9Vy<>s~=R2Q`@(`4}mRV%oP? zO^>4J+vqj?e-cvQWU!r`9Dp&m7ps{Ls9$G z_UOAl82WnAfa6%(vN4Yh`=zhMi@!Y)+&X?FC$2TeJXmJ3JyeD-R3@j&z+&s!kZo+j zL3|$JCfU_e`N^$1x;6|9T5Ua-y!%FKidMW2Fd6A^wik`rvE|pBPx!HJ*dek?g@Kjr zpPzmik(4ECh5z|^y-7?y@SmT(qcY`t)c*N#4`0sw?1(L}pPlbxqC6 z@^TsxjgadK9PuinjR~6B+1W2{Z#azKYO1KHti4sc`TXatp+ChA+}ka7Yu_pkCo@|S zVPX9FyDT&1+HTrJ+xrhXoudP87pJNhpt9`Ba_09NWuqiNls$a7HbwPK z6W+VA_@b?Tir&(&u&~W?a+;r>oNA0y4d6FxeS9$bT2+-=hP2IxM+ZKfUM(Ub()#&x z#n-QE78Vxn?z|`^pyYm=JK)HP+ghSWGmMs+nVHGU%fD!9;y8HlVDixnzGX~&ertBR z>|JB=NOsmC^-#NV7QUsVq@+%q%F+=29qc!5+|UcSn<9Ja^@-MObA#*?Gy=OWi95^t zUkwPLS5#C?WERm}DH9dl=xidP!jNv1$LKux(LXP5TY7rBPO-~*NwZS^GiS~iO=KAt zUfJWjEY9lfJ#pQ5x;Jm$bPfz$`|y_s2XS4ffbU`0a%%h97p zUB^0UT!vaNNAJ97@%r|L>4mw`r_W31Sp-g0U*qiSC{xyol*)J-mX#%aZ|fOa%5{Er zTYP-HU3b;;KffB3?b_fIJ=I-380C=@b?9n2L=}CC>L&L0vB#uMpTAg`pUZLT*RyHOra|mndHncsE{&B%h2Qe& zo=CH?`Kb=ep4WHu0&cDUm~QARXWPCvfAP~(Ys>eE`@|1F3OOlrQf(l=HZ$G0Wrb0e zX-T%ru#xKW;W{`Aic7&8qXW6Xw>| z0qYONoan8O?t7oK!hLEaBagY~&687gn=Pss3=9q94nIC$r3)={$~Hg4g^k0}D$)Y^>m}`QL}XJhNYN`SRt~5)ZkB`6;tYzZ*6A2EPzkr!`q6@gsj)K5!KPtU*8W#z5)hhE~~jWsAQ;tc6q zM*I2EISsY41+WNeV9VbX*qY&ezTw2myA1JER95Q7srXCQ=)A+35KEgpeaz@#@uHMXx{db#3<* z-JVcu4?d8O%d4`eUda5phvmsXbSmgTk z>w^)B%PEUrKi={Ut`imQ|8msW_`&q_xA3Ku{p|1lOQFT$d-v^Qb8&I0`0~XVo2P2| z$$N2rJ&vuPzrXs`teUy2D|v;fK>Kem&)k+a%H2z`W*FtYH+qauq4hC%?wX@9!)L@qA@(3T+CMEVt-dEpR9+vsL6Txv zv0_DNmDa4Z?&CwTT*%w;200dd!*0`K<}$8hC&tHX1j$F5U$`Lk{Q2{$+%q3?*>@lv za#K~W?`+)m`dF4}M*HHN+zID_CN?W8tAYC=U6lbVsP5ia?|QvChVjX~Wov1dEUC^k zDfSBw564O6n4Fx9-ybO@tf*+*>z-v+#`VF**wVKk79ZEMT-d^cB z+*WWX_gu@t+v2(^uX-GiV1yN%`qnb@%dhpDUi_uo5(GrKKmsCW0?Jw|J5YaB5a`{B>qGA2F< zc9eKbsUb1@CnO|n-m+y?dwaVDatv?&;^(|`>bJxW_(exYlV9ACIKtlHz36#WZgS6_ zJyGqfTEn%s)|2v4QCqtYTN^ykoEH4>;lq`y_=`;EaJJYuIM!XdbV+TzyV^f0DhkPo z4b_?hb%k5y&*Dtnp!B@kvfb0Ov)7W7#bxX|ck328oiRuL!g~9&7G)Lmn>FCY!C`B5 zUbCpawtWBo{f!UzEXlF$*p>0Ee&}B6;GYKZ$=|j2LP{@*-_gpk`6R20qG^8Wl&IvU zP3ps+^Qzw`?f2J9X-dsH>)YE98(i*7AFP+8wY<<+O5#|i@HXxE~@IL=>FUYljp9w6zhTe+u#12d>OW8BNd2!+tQNb+4uap z+pkA=coAw)RMIB_!SlwX6NN`dU<&%ba3;!{rnz8txY|W z_Q=t#IrYd=3d!CY93N=j7*~09(h{+kDrBR*JlWn$3DH*Rn zt{JDK%}P0_DosJpMBPlSYfhu>N-c8@gLD2UMuF00fAsW|b@mt-88PnMxf2O{X(Q5j z=&!v=NQ|^T&%EZ{GsFF_ZD-bv6Skfn>l*v{Qw5-)YiKB>ukZBGr>FE-;FoXj%jI1S z^Sv0uOHZrzPh^0@lp@u5lp7|xAH-@I37$uv>b z*XKYn`@lb1fY+UF%@zt1R1U+NocR9g24CGG3fr3)rPWNUw^sr1jCEJ9z$v6&pv)mn zGT~GRo^Q)n*VAK1X}FAc5L&m64sgORCr5^QX!z8M@=*<7HXrLO9~e&iv1XsPc2(Kp zLYlx&R&MTqU%d?px(OOUt`z0W-SQwr^oVowa8t@EV2>-=*_&v|;|^O%z{SEFg;2o4YjU&Yh#9qkGZZ z%!vSbiFX)BI*NDu^@D+dfujB(sqt0rq)xx}%trYd`dZ9={&Q}5wt1!9;=;U*;IFy* z7^UDs$KHyT7H(g9mX~)n9?L#e$7NjN&WWJVL>|{o(G&gM|ABsLw4)|s)A4ul>MOpK zcyNFG_|folfU8`l>9#mhh-Iwn`L~|`%wbaGbQ#6`!q*~y#J_n>*cy5JZo1TCS($m! zb5o-UKy%Z53E}U6w4Yy^VMk$-Q*apy#AnB2Rrx09SMvD0c(ME0vu6*HI03h6QVu^J z8!qVR2EvlJ>-0Iw-G#bAQOJxwq&^iZ{rV8hEvXWlU=$>l*XU9b314y(P{8&*l?UNJt2vPY1u?it7`Dv&YOl{XOR<Gz4t(a^n1))mRU@RbjB z@Fi;GyCUav=>|C}-=4~f0D_Tb1u4jW@Z+Z2(q^V5+DDEiXoN~KvF&gk;9y_1s`1IG z{jII7rzN*wAJUFyWIOa|@$Ya@n=caF;Xp^d!>@UG&m0`IwzR}U@|{3@%R3L;p53)p zI>We-9j8-0MK9@Hsiy~rv?)Ixxw5A&l8uMQp!3#mz}k*y7e@uYJM7rCFl{+KGgJQN zjbz=R^`z;>qv<@?I5%D`zBo#NqxkWBNs4SU<%5=Qt&|k=&Wj^efPGzkeGJOV%C|Qj zlWMEE!9BIYw*5KUFeba+`Zc+y8);GB16XOvA;Jccea-l0^X?(dl`B{5#ya-^K5uBV zUzM^i+Fa;0^Yc093&5U6-l=9b`m(PlfuN6{E3U1rC0Y3H-MfK6tImabDI6%>fLTa) zTR$4++eCeo9y4^F95R$~9?&0uE7uW7@Gc;=xs8ovgp|p>p7Y6*iysat_Z!FD5#U#0 zkU905gJw4lx28$N!m+O*UR|Y*y8nLfOBOzc(=+7iuk zZWr9`cGpNhTC!{^X!6ETsRS5*X zJ3G%V?#GJoBq$3(XVg1R!%BL0gM73nG`oTBG!l%Pt)dm2^`<7>ls`^|@2PHYHzn|^ zS9SxFfT97#ic`}puIw?HzF9`5)`5i?OR4)vn|FM6;#`JjqTt!JRRPE&rjdw?!9Su~ zo(k~48xKw#Fc=yhRtF|8QY==Im;HRvz38(QB8Ju{+3@M3!0>RO_;u?TY;A36cK?}Z zF;i$e(fQ)CN}Nt|U6x6)82Y5@8bR-L$Hhr-!5bwo-2dU;l6!G*8vNIsm0A8E7UsB)o)2QFzb^N#lY z*f<&YOIB7^&ssVYX=6EP3>ll&&7nVkx71CIZqQdE9ag4pW>J{eMDsDe9;}~=RHXH^ z*PYsv7GH~;`FdnzWa8Z?1_+c?1k6wkkoIG>K)%Jx2zYLMd`M8{%=>kONHITue$(@k zl4>+OPjaJ0_eU^L7EQ^z3Xu)>&CG=nEUJ>zhp!3Pj$zemUUHfsnzM$V|hhN&sZRK&- zMCZ9Rn*)r|l0M4O|BYlktOCKsN znQmOL>0^wi!J!R{Id`tIGDfa5X^PdwF zN4$mjww=8#ZdUr7T6>LKI`ipZ|J>&STWR!!TVF0q3v2lL)ufjx>i+%vc1})B;%T}G zR}u4U*lnW;PDX$HA;;oe$D-3q9iRc4wUveTiPvx56b5!C%~*ZcveZGNqpSD@1OyEE zykqasX=<3QdtZ~Zu^e2)<6l-s^A76hTrWz0$j%P{$4xmg)62V#J**$xMVX&DlXBy_ zuC8b8-dM@nAQqFBBQ-^5nKnO1jLPfsm? zc}>$`w4$5d#z!PqShfL6zd>wSJ17FEn_4{reu_uQ=R1`;n3U;8fp78)3JL=9J{l>y zem$Ud@XCg9Bi}TfeP*#{gD?s^NWmcCr0sVF8Z6OU11Y| zMy|hpFySE5p#jS1IdE@lxuEx-8%drML!VY5)K{R<3^}xGh7P>S*!Xy3;n(!Bu`!=p zw+`pGq#a3%I2w7eb1}RJt5hiP`GyI%l(7$@=cSGeCl-ij_3E^&#r`|eW&-*7`9?jd zj=Mn4)~Oab)ebnDw9M`BT-m>L>C&D7wt-l$*$r2GeMxhypJ~hsS{nW14#ZU;Krx!p zE;OS?svOiqFwCqfYqxFVB(Y@XJ@1e9LS*Y!j{9=93!T>^(q9cd=TPa)DqB#|(P5P` zDe}8}mj~VT#Ltk)tTfL92M*}s^n^~9xcw3XfFliebgwHSZM@C4?9AH5+? zKlhX8CtnAY2e5bInQ-NHapp`vZW;r|K(r{<9y7 zlsRG<;o=a{Ve4jJ);TyBOlW&BRL|_XX#dR5<57H9DtFMlZ8#bK<-`@=Yqx1?FGKM357E^1 zea;)CZ#nYzz>TlHX=S71-)gW+suV?vN#Q}jus?tP*!_6JOGJ#X#TPY!-kQRt?(gy} z(%4CR@0Z=B@oH{zG>wgoiSR%myz;`dh>EHz*&RY>gBMc}%&RB3MOhL~#fR?eAAo_nsluLUY}HtLs~Xo5=v zlZn~cBg6MU$sW<`^-R@VX>HXQugDi^%59cU9oCgzV_@9ysI?CgB_>uLvt9Hodw zź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 F@?Y&0g1Z0! diff --git a/code/docs/Filter_Rate_Independence_HIL_Test.md b/code/docs/Filter_Rate_Independence_HIL_Test.md deleted file mode 100644 index acc0e70..0000000 --- a/code/docs/Filter_Rate_Independence_HIL_Test.md +++ /dev/null @@ -1,238 +0,0 @@ -# Measuring filter rate-independence on the bench - -Companion to `Sample_Rate_Independence_Plan.md`. That document describes how the -receive filters are generated; this one describes how we confirm it on the -actual radio, and why each measurement proves what it claims to. - -The tool is `code/tools/filter_hil/`. Its README covers wiring and operation; -this is the reasoning behind it. - -## The problem with measuring a filter through a whole radio - -The only accessible output is the speaker, which sits at the end of everything: -the codec's analog front end, the decimation chain, the SSB convolution mask, -the demodulator, the equaliser, the volume control, the DAC and an audio power -amplifier. A raw amplitude sweep of that path characterises all of it at once, -and none of it individually. Worse, several of those stages have deliberately -rate-dependent behaviour — the decimation filters *should* scale with Fs — so a -naive sweep at two sample rates would differ for entirely legitimate reasons. - -The fix is to never look at an absolute level. Every response is measured as the -difference between two captures **at the same injected frequency**, one with the -filter under test engaged and one with it out of circuit: - -| Filter | Engaged | Reference | -|---|---|---| -| CW audio filters | `CF0`..`CF4` | `CF5` (bypassed) | -| Equaliser cells | one cell at 100, rest at 0 | all cells at 100 | -| SSB convolution filter | `FW` at the width under test | `FW` at its widest | -| AM DC blocker | envelope at `f_mod` | envelope at 300 Hz | - -Everything common to the two captures divides out exactly. What is left is the -filter's own magnitude response, measured through the real signal path, with no -model of the rest of the radio required. - -This works because of where these filters sit. `CWAudioFilter` is a plain series -stage that becomes a no-op at index 5 (`DSP.cpp:944`, `DSP_CWProcessing.cpp:538`), -so bypassing it removes exactly one thing. The equaliser cells are summed in -parallel with alternating signs (`DSP_FFT.cpp:780-830`), so zeroing thirteen of -them leaves precisely one. - -## Getting a signal in - -W1 and W2 drive the I and Q receive inputs directly, at baseband, bypassing the -RF front end. `ReceiveProcessing` then shifts **twice** before decimating: by -Fs/4 (`FreqShiftFs4`, `DSP.cpp:883`) and again by the fine tune plus any CW -sidetone (`FreqShiftF`, `DSP.cpp:895-903`). So the injection that demodulates to -zero audio sits at - -``` -centre = |Fs/4 + fineTuneFreq_Hz| -f_inject = centre +/- (f_audio + sidetone_shift) + mapping_correction -``` - -Worked example, measured on the bench with the radio's fine tune at -12250 Hz: - -| Sample rate | Fs/4 | centre | inject for 1 kHz of audio | -|---|---|---|---| -| 192 ksps | 48000 | 35750 | 36750 | -| 176.4 ksps | 44100 | 31850 | 32850 | - -**Recomputing Fs/4 per rate is the point of the whole exercise**, and a test that -injected the same frequency at both rates would report nonsense. - -**Forgetting the fine tune is worse: it produces silence.** It is whatever the -operator last tuned to and is routinely several kilohertz - far more than the -3 kHz passband - so every injection lands outside the filter and the radio never -responds, at any drive level. The visible symptom is that the injected tone -appears on the radio's spectrum display nowhere near the blue fine-tune bar. - -In CW receive the sidetone offset (`DSP.cpp:894-901`, default 750 Hz) adds to the -same shift, which is why the CW tests re-run the mapping calibration after -entering CW mode - and bypass the CW filter first, so the calibration probes are -not measured through the filter under test. - -The `map` test also reports how far the real centre sits from nominal. On this -radio it is about **-180 ppm at both rates**, which is the Teensy synthesising -its I2S clock with a fractional divider rather than any error; the residual is -folded into `mapping_correction` and the check is deliberately loose enough -(150 Hz) not to trip on it while still catching a rate that was never -reconfigured, which would be kilohertz out. - -Test `map` injects three tones and fits `f_audio = slope * f_inject + offset`. -If that fit disagrees with the expected centre, the firmware failed to -reconfigure its frequency shift for the rate and nothing measured afterwards -would be interpretable — so that rate is skipped rather than reported. - -## Quadrature, and which wire is which - -W1 and W2 must be phase-locked and started atomically: `FDwfAnalogOutMasterSet` -to share a timebase, then a single `FDwfAnalogOutConfigure(hdwf, -1, 1)`. - -Note the `1`. In the WaveForms API **`fStart = 3` means "apply settings to a -channel that is already running"**, and passing it to a stopped channel silently -leaves it stopped — the device reports the frequency and amplitude it was given -while generating nothing at all. When an injection appears to do nothing, read -`FDwfAnalogOutStatus` back and check it says `Running` rather than `Ready`. - -Two unknowns are resolved by experiment rather than by modelling the chain, -because getting either wrong produces silence rather than a subtly wrong answer: - -- **Which side of the demodulation centre to inject.** This is the one that has - to be unambiguous, and it is: the SSB convolution filter's entire job is to - reject the other sideband, and it does so by around 40 dB on this rig. The - suite gates on that number. -- **Which AWG channel drives I.** Much weaker, and deliberately not gated on. An - amplitude imbalance between W1 and W2 at the radio's inputs is normal and - leaves an image at the mirror frequency, but the SSB filter rejects that image - anyway, so both phase senses give a usable tone and only the amplitude differs - — a few decibels in practice. The suite picks the better one and reports the - margin. - -Nothing needs rewiring either way. - -## Why AGC must be off - -AGC compresses exactly the amplitude differences being measured. With it engaged, -a filter skirt reads as a straight line and every corner measurement fails to -bracket. There is no CAT command for AGC, so the suite reads it from the `ED;` -dump on the diagnostic port and refuses to run when it is on. There is a second -guard downstream: if the reference sweep's dynamic range across the passband is -implausibly small, that is reported too. - -## Pass criteria - -**Primary: rate invariance.** Each measured frequency must land in the same place -at both sample rates, within 1.5 %. The frozen-table bug produces exactly -`176400/192000 - 1 = -8.125 %`, so the tolerance sits a factor of five inside the -failure it is looking for. The comparison also flags when a measured shift -matches that signature, and says so in the failure message. - -**Secondary: absolute accuracy**, within 4 % of the labelled frequency. Looser on -purpose. A smooth amplitude tilt anywhere in the analog path — the AWG, the -codec, the speaker amplifier — biases absolute measurements without saying -anything about the firmware. The rate comparison is immune to it, because the -same tilt applies at both rates and divides out. - -**Shape checks.** A corner in the right place is not proof of a working filter: -a broken cascade can still cross -3 dB somewhere plausible. So CW filters are -also checked for passband ripple under 1 dB and stopband beyond -25 dB, and -equaliser cells for Q within 25 % of the design value. - -## The control - -The SSB convolution filter derives its coefficients from the true sample rate -and always has — `InitFilterMask` divides by `SR[SampleRate].rate / DF` -(`DSP_FIR.cpp`). It was never affected by the bug. Measuring it is therefore a -check on the *method*: if it shows an 8 % shift, the rig or the analysis is -wrong, not the firmware. The report says this explicitly so nobody misreads a -control failure as a firmware regression. - -## What the rig can actually resolve - -Measured on this bench, driving 0.89 V into the I/Q inputs with the AF volume at -30 %: - -- The recovered tone sits **15-20 dB above the receiver's own noise**. That noise - is the limit, not the scope: it passes through the same DSP chain as the - signal, so more volume does not help and more drive is the only lever. -- Consequently a response can be followed about **5 dB below the passband** - before the tone disappears into the noise. That is why the SSB filter edge is - called at -3 dB rather than the more usual -6 dB, and why corner searches - record NaN probes rather than pretending to have measured something. -- The AF volume control is steep: 54 % clipped a 5 V scope range outright while - 30 % gives about 30 mV of noise. The suite sets it and restores it. -- Reported THD tracks that noise floor rather than any real distortion, so it is - recorded but does not invalidate a measurement; auto-levelling is the one place - it is used as a limit. - -## Known measurement limits - -**Equaliser cells 0, 1 and 13.** Cells 0 (198.425 Hz) and 1 (250 Hz) sit at or -below the SSB filter's 200 Hz low cut, so their measured shape is the product of -the cell and the skirt. Cell 13 (4000 Hz) sits in the decimation filter's skirt, -whose corner is a fraction of Fs and is *meant* to move with the rate. All three -are flagged `edge_limited` and judged loosely on absolute accuracy. Their -rate-invariance check is still applied at full strength, because the same skirt -applies at both rates and cannot hide a shift. The `FL` CAT command can move the -low cut out of the way if cells 0 and 1 need a cleaner measurement. - -**The AM DC blocker** is only reachable because `MD4;` was added to select AM; -`MD5;` selects SAM, which routes to a different demodulator without the blocker. -It is off by default because it is slower and noisier than the rest — envelope -measurements at 10-40 Hz need long captures. - -**Scope sample rate.** The AD2's record mode drops samples above roughly -250 kHz. The default of 96 kHz is far below that; every capture records its lost -and corrupted counts, and any point with drops is excluded from fits rather than -silently averaged in. - -## CAT additions this required - -Most of the radio state the suite drives was previously touchscreen-only. Four -commands were added and three existing ones fixed: - -| Command | Form | Purpose | -|---|---|---| -| `SR` | `SRn;` / `SR;` | Sample rate, 0 = 176.4 k, 1 = 192 k | -| `CF` | `CFn;` / `CF;` | CW filter index 0-5 | -| `EQ` | `EQbbvvv;` / `EQbb;` | Equaliser cell `bb` = 00-13, level 000-100 | -| `FL` | `FL####;` / `FL;` | Filter low cut, the mirror of `FW` | - -Fixes: - -- `MD_write` now sets `ED.modulation[]` as well as `bands[].mode`. Setting only - the latter left `InitFilterMask` treating the difference as a deliberate - departure from the band default and **mirroring the passband** — so `MD` did - not just fail to change the demodulator, it inverted the receive filter. -- `MD1`/`MD2` now dispatch `TO_SSB_MODE` when in CW receive. Previously that - transition existed only on the front-panel button, so CAT could enter CW and - never leave. -- `FW`'s `read_len` no longer equals its `set_len`. `command_parser` tests the - write form first, so the two being equal made `FW;` unreachable and the filter - bandwidth write-only. - -Note the parser rule for anyone adding more: **`set_len` and `read_len` must -differ**, or the read function can never be called. - -## Regenerating figures - -The JSON keeps every raw sweep point, so figures and the Markdown report can be -rebuilt from a stored result without the hardware: - -```bash -cd code/tools -./venv/bin/python filter_hil/plot_filter_hil.py filter_hil/results/.json -``` - -## Trusting the tool - -`code/tools/filter_hil/test_filter_hil.py` covers the measurement maths against -synthetic signals: amplitude accurate to 0.02 dB on and off bin, corner finding -on analytic filters, Q extraction, and the `ED;` parser against a captured -fixture including interleaved debug output. - -The test that matters most feeds the comparison a synthetic **-8.125 % shift** and -asserts that every CW and equaliser check fails and is identified as the known -frozen-table signature. Without it, a suite that quietly passed everything would -look identical to a working radio. diff --git a/code/docs/RX_DSP_Chain_Parameters.md b/code/docs/RX_DSP_Chain_Parameters.md deleted file mode 100644 index 8e3fb2d..0000000 --- a/code/docs/RX_DSP_Chain_Parameters.md +++ /dev/null @@ -1,116 +0,0 @@ -# Receive DSP Chain — Step-by-Step Parameter Sourcing - -Analysis of the receive audio processing chain: each step, its location in the -code, and whether its DSP parameters are **derived from the sample rate (Fs)** or -**hard-coded** (baked-in coefficient tables with an implicit Fs assumption). - -## Global context - -- Input rate = `SR[SampleRate].rate`, default **192 kHz** (`Globals.cpp:106`). -- Decimation factor `DF = DF1*DF2 = 4*2 = 8`, a compile-time constant (`SDT.h:409-410`). -- So the audio-rate back half of the chain (ConvolutionFilter onward) runs at - **Fs/8 = 24 ksps** when Fs = 192 kHz. -- Pipeline defined in `ReceiveProcessing()`, `DSP.cpp:839`. - -## Chain steps - -- **Read IQ input** — `ReadIQInputBuffer`, `DSP.cpp:133` - - Sets `data->sampleRate_Hz = SR[SampleRate].rate`. **Fs-derived** (source of truth). - -- **RF gain** — `ApplyRFGain`, `DSP.cpp:115` - - Pure dB→linear scaling; no frequency parameters. N/A. - -- **IQ amplitude/phase correction** — `ApplyIQCorrection`, `DSP.cpp:206` - - Per-band calibration factors; no frequency parameters. N/A. - -- **Zoom FFT (spectrum display)** — `ZoomFFTExe`, `DSP_FFT.cpp:574` - - Decimation biquads `mag_coeffs[]`, `DSP_FIR.cpp:690`. **Hard-coded.** - - Elliptic biquads designed for **Fs = 48 kHz**, 60 dB stopband. Corners: - 2×=12 kHz, 4×=6 kHz, 8×=3 kHz, 16×=1.5 kHz, 32×=750 Hz. - - Note: runs on full-rate (192 kHz) data before DecimateBy8, so at the default - input rate the effective corners land 4× higher than the labels (design-rate - vs runtime-rate mismatch). - -- **Frequency translation +Fs/4** — `FreqShiftFs4`, `DSP.cpp:879` - - Multiplication-free ±Fs/4 shift. **Fs-derived** (shift = Fs/4 by construction). - -- **Fine-tune frequency shift** — `FreqShiftF`, `DSP.cpp:899` - - NCO increment `= 2π·shift/sampleRate_Hz`. **Fs-derived.** - -- **Decimate by 8 (÷4 then ÷2)** — `DecimateBy8`, `DSP_FFT.cpp:662` - - FIR coeffs via `InitializeDecimationFilter` / `CalcFIRCoeffs`, - `DSP_FFT.cpp:365`, `DSP_FIR.cpp:1284`. **Fs-derived.** - - Normalized cutoff = `n_desired_BW_Hz/Fs`, tap count from `n_att_dB`. - - Targets hard-fixed: `n_desired_BW_Hz = 9000`, `n_att_dB = 90` (`SDT.h:412-413`), - but normalization scales with Fs. - -- **Volume scale (bandwidth compensation)** — `VolumeScale`, `DSP.cpp:219` - - `volScaleFactor = 7.0874·Fcut_kHz^-1.232`. **Hard-coded** empirical curve fit - (keyed off the band filter cutoff in kHz, not Fs). - -- **Convolution bandpass filter** — `ConvolutionFilter`, `DSP_FFT.cpp:678` - - Filter mask via `CalcCplxFIRCoeffs`, `DSP_FIR.cpp:1357`. **Fs-derived.** - - Passband edges from per-band `FLoCut_Hz`/`FHiCut_Hz` (default 200–3000 Hz, - `Globals.cpp:39+`), normalized by `Fs/DF`. Data-driven edges, adaptive Fs. - -- **AGC** — `AGC` / `InitializeAGC`, `DSP.cpp:313` / `DSP.cpp:238` - - All attack/decay/hang multipliers = `f(sample_rate = Fs/DF)`. **Fs-derived.** - - Time constants (tau) and hangtimes are hard-coded seconds, converted to - per-sample multipliers using Fs. - -- **Demodulate** — `Demodulate`, `DSP.cpp:629` - - SSB (LSB/USB): copy only, no parameters. N/A. - - AM: DC-blocker `w = audiotmp + wold*0.99` (`DSP.cpp:654`) is **hard-coded** - (pole 0.99 ⇒ ~38 Hz corner at 24 ksps; comment says "below 200 Hz"). - Followed by AM audio lowpass biquad `biquad_lowpass1` (`DSP_FFT.cpp:358`): - **Fs-derived** (`SetIIRCoeffs`, corner = band FHiCut, Q=1.3 hard-coded, Fs/DF). - - SAM: `AMDecodeSAM`, `DSP.cpp:567` — PLL gains all from `sampleRate_Hz` - (**Fs-derived**); PLL physical constants (`pll_fmax=4000`, `omegaN=200`, - `zeta=0.65`, `tauR=0.02`, `tauI=1.4`, `DSP.cpp:551-556`) are hard-coded. - -- **Receive band EQ (14-band graphic)** — `BandEQ`, `DSP_FFT.cpp:819` - - `EQ_Band1..14Coeffs`, `DSP_FIR.cpp` (~line 400+). **Hard-coded.** - - 4-pole Gaussian ⅓-octave biquads; centers 400/500/630/793/1000/1259/1587/ - 2000/2500/3150/4000 Hz. Implied design rate **24 ksps** (post-decimation). - -- **Noise reduction** — `NoiseReduction`, `DSP.cpp:672` - - Kim / Spectral / LMS algorithms; internal constants are algorithm tuning - parameters (not Fs-normalized). Mostly hard-coded, block-size dependent. - -- **Notch filter (LMS)** — `Xanr`, called at `DSP.cpp:933` - - Adaptive LMS; coefficients learned at runtime. Neither fixed table nor - Fs-normalized (adapts to signal, implicitly block/rate dependent). - -- **CW decode** — `DoCWReceiveProcessing`, `DSP_CWProcessing.cpp:86` - - Decode FIR `CW_Filter_Coeffs2[64]`, `DSP_FIR.cpp:95`. **Hard-coded** — 64-tap - Parks-McClellan, **24 ksps**, Fc = 1560 Hz. - - Reference sine / Goertzel: `DSP_CWProcessing.cpp:65, 106` — **Fs-derived** - (`phs = 2π·f_tone/(Fs/DF)`; Goertzel uses `data->sampleRate_Hz`). - -- **CW audio bandpass** — `CWAudioFilter`, `DSP_CWProcessing.cpp:538` - - `CW_AudioFilterCoeffs1..5`, `DSP_FIR.cpp:31-81`. **Hard-coded.** - - 12-pole Chebyshev LPFs, **24 KSPS**; cutoffs 840 Hz / 1.08 / 1.32 / 1.80 / - 2.0 kHz (UI: 0.8/1.0/1.3/1.8/2.0 kHz). - -- **Interpolate back to Fs** — `InterpolateReceiveData`, `DSP.cpp:697` - - Interpolation FIRs `FIR_int1`/`FIR_int2` via `CalcFIRCoeffs`, - `DSP_FFT.cpp:394-397`. **Fs-derived** (computed at `Fs/DF1` and `Fs`). - -- **Volume adjust (audio level)** — `AdjustVolume`, `DSP.cpp:721` - - `VolumeToAmplification` — pure user-level gain curve; no frequency - parameters. N/A. - -## Summary - -- **Fs-derived (follow sample-rate changes correctly):** decimation/interpolation - filters, convolution bandpass mask, AM audio lowpass, AGC, SAM PLL, all - frequency shifts, CW reference sine / Goertzel. -- **Hard-coded coefficient tables (implicit Fs assumption):** - - Zoom-FFT `mag_coeffs` — design **Fs = 48 kHz**. - - CW audio filters, CW decode FIR, 14-band EQ, AM DC-blocker — design **Fs = 24 ksps** - (i.e. correct only for 192 kHz input). -- **Empirical / algorithm-tuned (not Fs-normalized):** VolumeScale curve, SAM PLL - physical constants, noise-reduction internals. -- The audible passband edges are **data-driven** from the band table - (`FLoCut_Hz`/`FHiCut_Hz`, default 200–3000 Hz), feeding the *computed* convolution - mask — not baked into any coefficient table. diff --git a/code/docs/Sample_Rate_Independence_Plan.md b/code/docs/Sample_Rate_Independence_Plan.md deleted file mode 100644 index 96c9920..0000000 --- a/code/docs/Sample_Rate_Independence_Plan.md +++ /dev/null @@ -1,146 +0,0 @@ -# Sample-Rate-Independent DSP Filters - -## Problem - -Phoenix can run at 192 ksps or 176.4 ksps, selected at run time and persisted. -Most of the DSP chain derives its coefficients from `SR[SampleRate].rate`, but a -handful of stages shipped **frozen coefficient tables** designed offline for one -rate — 24 kHz audio, i.e. 192 ksps decimated by 8. Run at 22.05 kHz instead, -every corner and centre frequency in those tables scaled by -`176400 / 192000 = 0.91875`, so a filter labelled 2.0 kHz actually cut at -1.84 kHz and the "4000 Hz" equaliser cell peaked at 3675 Hz. - -The stages affected were the CW audio filters, the CW decoder input filter, the -14-band equaliser (receive and transmit), the AM DC blocker, and the transmit -filter that sets the audio bandwidth. - -## Approach - -Each affected stage is now generated at run time from an **analog design spec** -rather than carrying a digital coefficient table. The spec is in Hz and does not -depend on the sample rate; the sample rate only enters through the bilinear -transform that discretises it. Prewarping the design frequency -(`wc = 2*Fs*tan(pi*f/Fs)`) cancels the frequency compression the bilinear -transform introduces, so each response lands on its labelled frequency at any -rate. - -The filter families are unchanged. What was a 12-pole Chebyshev is still a -12-pole Chebyshev; the equaliser cells still have exactly the shape they had. - -`ChangeSampleRate()` calls `InitializeSignalProcessing()`, which calls -`InitializeFilters()` and `InitializeTransmitFilters()`. Both of those now -regenerate their coefficient tables as their first step, so a rate change -retunes the whole chain with no extra plumbing. - -## What each stage does now - -| Stage | Design | Where | -|---|---|---| -| CW audio filters ×5 | Chebyshev type I, order 12, 0.02 dB ripple. Ripple edges 807.1 / 1038.0 / 1269.0 / 1731.5 / 1963.2 Hz | `CalcChebyshevILowpassCoeffs()`, `DSP_FIR.cpp` | -| Equaliser cells ×14 | 4 stagger-tuned analog bandpass sections per cell, peak normalised to unity | `CalcBandpassCascadeCoeffs()`, `DSP_FIR.cpp` | -| CW decoder input FIR | 64-tap Kaiser windowed sinc, −6 dB at 1749 Hz, DC gain normalised to 1 | `CalcFIRCoeffs()` | -| AM DC blocker | One pole highpass, `pole = exp(-2*pi*38/Fs)` | `InitializeFilters()`, `DSP_FFT.cpp` | -| Transmit audio bandwidth (`FIR_int3`) | 48-tap Kaiser lowpass, −6 dB at 3040 Hz (−3 dB near 2.76 kHz) | `CalcFIRCoeffs()` | -| Transmit decimate-by-2 (`coeffs12K_8K`) | 48-tap Kaiser lowpass, −6 dB at 3500 Hz | `CalcFIRCoeffs()` | - -### Where the design constants came from - -The Chebyshev order and ripple, and the equaliser prototypes, were recovered -from the frozen tables themselves rather than guessed: - -- The CW tables' passband ripple measures 0.0200 dB exactly, and `cheby1(12, - 0.02, Wn)` fits them to 0.013 dB RMSE. The ripple edge — the natural parameter - for the family — is the highest frequency at which the response is still at or - above its DC level. -- Every equaliser biquad has `b1 = 0` and `b2 = -b0`, putting its zeros at - `z = ±1`. That is the bilinear image of the analog bandpass - `(wn/Q)s / (s^2 + (wn/Q)s + wn^2)`, so an inverse bilinear transform recovers - the analog `(wn, Q)` of each section exactly. - -`code/tools/extract_filter_prototypes.py` does this. It reads -`code/test/reference_filters.cpp` and prints the C literals that live in -`DSP_FIR.cpp`. Re-run it if a reference table ever changes. - -## What deliberately was not changed - -**The zoom-FFT `mag_coeffs` tables.** Their comments say "sample rate 48k" and -they are applied at the full ADC rate, which looks like a bug. It is not: their -−6 dB points measure at `1.01 × (Fs/2/zoom)` for every zoom index, i.e. they are -specified purely as a fraction of `Fs`. That is exactly right for a decimation -anti-alias filter, and they are correct at any sample rate. (Indices 8–10 are -duplicates of index 7 and genuinely wrong, but they sit beyond -`SPECTRUM_ZOOM_MAX` and are never reached.) - -**The transmit decimation and interpolation FIRs** `coeffs192K_10K_LPF_FIR` and -`coeffs48K_8K_LPF_FIR`, and the ±45° Hilbert pair. These are also normalised to -`Fs` — corners at 0.057 and 0.127 `Fs`, and a 90° band spanning 0.0167 to -0.45 `Fs` — so they scale correctly by construction. - -The general rule: a filter whose job is anti-aliasing or anti-imaging should -scale with `Fs` and needs no attention. A filter that defines an audio-band -response has to be anchored in Hz. - -## One deliberate behaviour change - -`coeffs12K_8K_LPF_FIR` feeds a decimate-by-2 stage, so its stopband has to sit -below a quarter of its input rate. The table it replaces was flat to -0.425 `Fs` and −60 dB only at 0.478 `Fs`, giving essentially no protection: -everything between roughly 6 and 9.5 kHz folded back into the transmit audio -unattenuated. The generated filter is a real lowpass, so this aliasing is gone. -Transmitted audio therefore differs from previous releases even at 192 ksps. - -`TransmitChain176k.DecimatorStopsBeforeTheFoldPoint` and -`FilterDesign.TransmitDecimatorRejectsAliases` pin the new behaviour and record -the old. - -## Validation - -`code/test/FilterDesign_test.cpp` (target `all_FilterDesign_tests`) answers two -questions. It measures responses by correlating the filter output against a -complex exponential through a Hann window, which is accurate to well under -0.01 dB — peak picking, as the older sweep tests use, can be a decibel out when -there are few samples per cycle. - -**Does the generated filter still do what the frozen table did?** Every response -is measured against the original coefficients, kept verbatim in -`code/test/reference_filters.cpp`, at 192 ksps: - -| Stage | Agreement with the frozen table | -|---|---| -| CW audio filters | within 0.05 dB | -| Equaliser cells | within 0.01 dB | -| CW decode FIR | −6 dB corner within 2 % | -| Transmit audio bandwidth | −3 dB corner within 2 % | -| Flat equaliser sum | within 0.05 dB | - -**Do the filters hold their frequencies across a rate change?** -`FilterDesign.GeneratedCornersHoldAcrossRates` writes -`filtercmp_rate_summary.txt`. Every ratio now reads 1.00 where it used to read -0.9187: - -``` -CW_audio_2000_minus6dB,fs_derived,2064.4,2063.5,0.9996,1.0000 -EQ_band13_4000_peak,fs_derived,4000.0,4000.0,1.0000,1.0000 -TX_audio_bandwidth_minus3dB,fs_derived,2776.1,2797.5,1.0077,1.0000 -CW_decode_FIR_minus6dB,fs_derived,1748.0,1748.1,1.0000,1.0000 -``` - -`FilterDesign.FlatEqualiserSumStaysFlat` covers the property most at risk here. -`BandEQ` sums the 14 cells with alternating sign, a reconstruction that only -comes out level if every cell keeps its shape and peak gain. It is checked -through the real `BandEQ` path against the reference tables. Note the flat sum -sits at roughly +4 dB, not 0 dB — that is how the equaliser has always behaved. - -Also updated: -- `ReceiveChain176k.AllStagesHoldTheirFrequencies` (was - `HardCodedStagesShiftFsDerivedStay`) — these assertions used to encode the - shift and now assert its absence. -- `TransmitChain176k` — new suite, the transmit counterpart. -- `compare_176k_vs_192k.ipynb` — overlays the generated and frozen sweeps. - -### Running it - -```bash -cd code/test/build && cmake ../ && make -j && ctest --output-on-failure -ctest -R "FilterDesign|ReceiveChain176k|TransmitChain176k" -V -``` diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index 9cd8e9c..8aaa16a 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -14,7 +14,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "40635af" -#define BUILD_TIMESTAMP "2026-07-31 14:53:11" +#define GIT_COMMIT_HASH "b16ec3a" +#define BUILD_TIMESTAMP "2026-07-31 16:46:06" #endif // BUILDINFO_H diff --git a/code/test/transmit/transmit_test.py b/code/test/transmit/transmit_test.py new file mode 100644 index 0000000..6b59c65 --- /dev/null +++ b/code/test/transmit/transmit_test.py @@ -0,0 +1,540 @@ +#!/usr/bin/env python3 +""" +Transmit PTT Signal Integrity Test + +Repeatedly engages PTT on a radio transmitter via an Analog Discovery 2, +captures I/Q output waveforms, and analyzes them for discontinuities and +signal quality issues. + +Usage: + python transmit_test.py # 100 iterations with defaults + python transmit_test.py -n 5 # quick 5-iteration test + python transmit_test.py --help # show all options +""" + +import sys +import os +import time +import signal as signal_module +import argparse +from ctypes import * +from pathlib import Path +from datetime import datetime + +import numpy as np +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt + +# Add Waveforms SDK samples directory so we can import dwfconstants +sys.path.insert(0, "/usr/share/digilent/waveforms/samples/py") +from dwfconstants import * + + +# --------------------------------------------------------------------------- +# SDK helpers +# --------------------------------------------------------------------------- + +def load_dwf(): + """Load the Waveforms SDK shared library.""" + if sys.platform.startswith("win"): + return cdll.dwf + elif sys.platform.startswith("darwin"): + return cdll.LoadLibrary("/Library/Frameworks/dwf.framework/dwf") + else: + return cdll.LoadLibrary("libdwf.so") + + +def dwf_error_msg(dwf_lib): + """Return the last DWF error message as a string.""" + buf = create_string_buffer(512) + dwf_lib.FDwfGetLastErrorMsg(buf) + return buf.value.decode() + + +# --------------------------------------------------------------------------- +# Hardware configuration +# --------------------------------------------------------------------------- + +def configure_device(dwf_lib, args): + """Open the AD2 and configure all I/O. Returns device handle.""" + hdwf = c_int() + + version = create_string_buffer(16) + dwf_lib.FDwfGetVersion(version) + print(f"DWF Version: {version.value.decode()}") + + print("Opening device...") + dwf_lib.FDwfDeviceOpen(c_int(-1), byref(hdwf)) + if hdwf.value == hdwfNone.value: + print(f"Failed to open device: {dwf_error_msg(dwf_lib)}") + sys.exit(1) + + # Manual configure mode + dwf_lib.FDwfDeviceAutoConfigureSet(hdwf, c_int(0)) + + # --- Analog output: W1 = 500 Hz sine, 50 mV amplitude --- + ch_out = c_int(0) + dwf_lib.FDwfAnalogOutNodeEnableSet(hdwf, ch_out, AnalogOutNodeCarrier, c_int(1)) + dwf_lib.FDwfAnalogOutNodeFunctionSet(hdwf, ch_out, AnalogOutNodeCarrier, funcSine) + dwf_lib.FDwfAnalogOutNodeFrequencySet(hdwf, ch_out, AnalogOutNodeCarrier, c_double(500.0)) + dwf_lib.FDwfAnalogOutNodeAmplitudeSet(hdwf, ch_out, AnalogOutNodeCarrier, c_double(0.05)) + dwf_lib.FDwfAnalogOutNodeOffsetSet(hdwf, ch_out, AnalogOutNodeCarrier, c_double(0.0)) + dwf_lib.FDwfAnalogOutConfigure(hdwf, ch_out, c_int(1)) # start + print("W1: 500 Hz sine, 50 mV amplitude — running") + + # --- Scope: Ch1 and Ch2 --- + sample_rate = args.sample_rate + n_samples = int(sample_rate * args.acquire_time) + + for ch in [0, 1]: + dwf_lib.FDwfAnalogInChannelEnableSet(hdwf, c_int(ch), c_int(1)) + dwf_lib.FDwfAnalogInChannelRangeSet(hdwf, c_int(ch), c_double(5.0)) # AD2 minimum HW range + dwf_lib.FDwfAnalogInChannelOffsetSet(hdwf, c_int(ch), c_double(1.6)) # center window at 1.6V + + dwf_lib.FDwfAnalogInAcquisitionModeSet(hdwf, acqmodeRecord) + dwf_lib.FDwfAnalogInFrequencySet(hdwf, c_double(sample_rate)) + dwf_lib.FDwfAnalogInRecordLengthSet(hdwf, c_double(args.acquire_time)) + dwf_lib.FDwfAnalogInConfigure(hdwf, c_int(1), c_int(0)) # apply config, don't start + print(f"Scope: {sample_rate/1000:.0f} kHz, {args.acquire_time*1000:.0f} ms " + f"({n_samples} samples), range 5 V, offset +1.6 V") + + # --- Digital IO: DIO-0 as output, default HIGH (PTT off) --- + dwf_lib.FDwfDigitalIOOutputEnableSet(hdwf, c_int(0x0001)) + dwf_lib.FDwfDigitalIOOutputSet(hdwf, c_int(0x0001)) # HIGH = PTT off + dwf_lib.FDwfDigitalIOConfigure(hdwf) + print("DIO-0: output, HIGH (PTT disengaged)") + + # --- DigitalIn: capture DIO 1-4 (Teensy pins 28-31, Flag() bus) --- + # AD2 internal clock is 100 MHz; divider chosen to match scope sample rate. + if args.capture_flag: + clk_hz = c_double() + dwf_lib.FDwfDigitalInInternalClockInfo(hdwf, byref(clk_hz)) + divider = int(round(clk_hz.value / sample_rate)) + dwf_lib.FDwfDigitalInDividerSet(hdwf, c_uint(divider)) + # 8-bit sample format covers DIO 0..7 (we use DIO 1..4) + dwf_lib.FDwfDigitalInSampleFormatSet(hdwf, c_int(8)) + dwf_lib.FDwfDigitalInAcquisitionModeSet(hdwf, acqmodeRecord) + dwf_lib.FDwfDigitalInInputOrderSet(hdwf, c_int(1)) + # In record mode the run is unbounded; we stop after n_samples are read. + print(f"DigitalIn: {clk_hz.value/divider/1000:.1f} kHz, " + f"capturing DIO 1-4 (Flag bus) in record mode") + + # Wait for offset stabilization + print("Waiting 2 s for offset stabilization...") + time.sleep(2) + + return hdwf, sample_rate, n_samples + + +# --------------------------------------------------------------------------- +# PTT control +# --------------------------------------------------------------------------- + +def ptt_engage(dwf_lib, hdwf): + """Set DIO-0 LOW to engage PTT (radio transmits).""" + dwf_lib.FDwfDigitalIOOutputSet(hdwf, c_int(0x0000)) + dwf_lib.FDwfDigitalIOConfigure(hdwf) + + +def ptt_disengage(dwf_lib, hdwf): + """Set DIO-0 HIGH to disengage PTT.""" + dwf_lib.FDwfDigitalIOOutputSet(hdwf, c_int(0x0001)) + dwf_lib.FDwfDigitalIOConfigure(hdwf) + + +# --------------------------------------------------------------------------- +# Data acquisition +# --------------------------------------------------------------------------- + +def acquire_data(dwf_lib, hdwf, n_samples, capture_flag=False): + """Acquire record-mode data from both scope channels. + + If capture_flag is True, also acquire 8-bit DIO snapshots in parallel + (DIO 1-4 carry the firmware Flag() bus; DIO-0 is the PTT output). + + Returns (ch1_array, ch2_array, dio_array_or_None, lost, corrupted). + """ + buf1 = (c_double * n_samples)() + buf2 = (c_double * n_samples)() + dio_buf = (c_uint8 * n_samples)() if capture_flag else None + + # Start digital first so it's armed when scope acquisition begins + if capture_flag: + dwf_lib.FDwfDigitalInConfigure(hdwf, c_int(0), c_int(1)) + dwf_lib.FDwfAnalogInConfigure(hdwf, c_int(0), c_int(1)) + + sts = c_byte() + c_available = c_int() + c_lost = c_int() + c_corrupted = c_int() + total_samples = 0 + total_lost = 0 + total_corrupted = 0 + + while total_samples < n_samples: + dwf_lib.FDwfAnalogInStatus(hdwf, c_int(1), byref(sts)) + + if total_samples == 0 and sts.value in ( + DwfStateConfig.value, DwfStatePrefill.value, DwfStateArmed.value + ): + continue + + dwf_lib.FDwfAnalogInStatusRecord( + hdwf, byref(c_available), byref(c_lost), byref(c_corrupted) + ) + + total_lost += c_lost.value + total_corrupted += c_corrupted.value + total_samples += c_lost.value # count lost as consumed + + if c_available.value == 0: + continue + + avail = c_available.value + if total_samples + avail > n_samples: + avail = n_samples - total_samples + + dwf_lib.FDwfAnalogInStatusData( + hdwf, c_int(0), + byref(buf1, sizeof(c_double) * total_samples), c_int(avail) + ) + dwf_lib.FDwfAnalogInStatusData( + hdwf, c_int(1), + byref(buf2, sizeof(c_double) * total_samples), c_int(avail) + ) + total_samples += avail + + ch1 = np.frombuffer(buf1, dtype=np.float64).copy() + ch2 = np.frombuffer(buf2, dtype=np.float64).copy() + + dio = None + if capture_flag: + # DigitalIn record mode: pull samples as they arrive until we have n_samples. + d_avail = c_int(); d_lost = c_int(); d_corrupted = c_int() + d_sts = c_byte() + d_total = 0 + # Bounded loop — at the same sample rate as scope, this should fill in + # acquire_time seconds, with very small slack for SDK overhead. + deadline = time.monotonic() + 5.0 + while d_total < n_samples and time.monotonic() < deadline: + dwf_lib.FDwfDigitalInStatus(hdwf, c_int(1), byref(d_sts)) + dwf_lib.FDwfDigitalInStatusRecord( + hdwf, byref(d_avail), byref(d_lost), byref(d_corrupted) + ) + avail = d_avail.value + if avail == 0: + if d_sts.value == DwfStateDone.value: + break + continue + if d_total + avail > n_samples: + avail = n_samples - d_total + dwf_lib.FDwfDigitalInStatusData( + hdwf, + byref(dio_buf, d_total), # uint8 buf, byte offset == sample offset + c_int(avail), + ) + d_total += avail + # Stop digital acquisition cleanly + dwf_lib.FDwfDigitalInConfigure(hdwf, c_int(0), c_int(0)) + dio = np.frombuffer(dio_buf, dtype=np.uint8).copy() + + return ch1, ch2, dio, total_lost, total_corrupted + + +# --------------------------------------------------------------------------- +# Signal analysis +# --------------------------------------------------------------------------- + +def check_amplitude(signal, min_rms): + """Check that the AC-coupled RMS amplitude exceeds min_rms. + + Returns (passed, rms_value). + """ + ac = signal - np.mean(signal) + rms = np.sqrt(np.mean(ac ** 2)) + return rms >= min_rms, rms + + +def check_discontinuities(signal): + """Check for sudden jumps/discontinuities in the waveform. + + For a pure sinusoid, max(|derivative|) / rms(derivative) = sqrt(2). + A ratio much larger than that indicates a discontinuity. + + Returns (passed, peak_to_rms_ratio). + """ + deriv = np.diff(signal) + rms_deriv = np.sqrt(np.mean(deriv ** 2)) + if rms_deriv == 0: + return False, float("inf") + ratio = np.max(np.abs(deriv)) / rms_deriv + # sqrt(2) ~ 1.414 for pure sine; allow up to 5.0 for noise margin + return ratio < 5.0, ratio + + +def check_spectral_purity(signal, sample_rate, expected_freq, min_snr_db): + """Check that the signal is a clean sinusoid via FFT. + + Returns (passed, snr_db, dominant_freq). + """ + ac = signal - np.mean(signal) + n = len(ac) + windowed = ac * np.hanning(n) + + spectrum = np.abs(np.fft.rfft(windowed)) + freqs = np.fft.rfftfreq(n, d=1.0 / sample_rate) + + # Find dominant frequency + peak_bin = np.argmax(spectrum) + dominant_freq = freqs[peak_bin] + + # Frequency check + freq_ok = abs(dominant_freq - expected_freq) < 50.0 + + # SNR: power in fundamental +/- 3 bins vs. everything else + fund_lo = max(0, peak_bin - 3) + fund_hi = min(len(spectrum), peak_bin + 4) # exclusive + power = spectrum ** 2 + fund_power = np.sum(power[fund_lo:fund_hi]) + total_power = np.sum(power[1:]) # exclude DC bin + noise_power = total_power - fund_power + + if noise_power <= 0: + snr_db = 100.0 # effectively infinite + else: + snr_db = 10.0 * np.log10(fund_power / noise_power) + + passed = freq_ok and snr_db >= min_snr_db + return passed, snr_db, dominant_freq + + +def analyze_channel(signal, sample_rate, name, min_rms, min_snr_db, + expected_freq=500.0): + """Run all signal quality checks on one channel. + + Returns a dict with pass/fail, metrics, and failure reasons. + """ + reasons = [] + + amp_ok, rms = check_amplitude(signal, min_rms) + if not amp_ok: + reasons.append(f"{name}: low amplitude (RMS={rms:.4f} V)") + + disc_ok, ratio = check_discontinuities(signal) + if not disc_ok: + reasons.append(f"{name}: discontinuity (peak/rms deriv={ratio:.1f})") + + spec_ok, snr_db, dom_freq = check_spectral_purity( + signal, sample_rate, expected_freq, min_snr_db + ) + if not spec_ok: + if abs(dom_freq - expected_freq) >= 50.0: + reasons.append(f"{name}: unexpected freq ({dom_freq:.1f} Hz)") + if snr_db < min_snr_db: + reasons.append(f"{name}: low SNR ({snr_db:.1f} dB)") + + return { + "name": name, + "passed": len(reasons) == 0, + "rms": rms, + "snr_db": snr_db, + "dominant_freq": dom_freq, + "deriv_ratio": ratio, + "failure_reasons": reasons, + } + + +# --------------------------------------------------------------------------- +# Data saving +# --------------------------------------------------------------------------- + +def save_waveform(outdir, iteration, ch1, ch2, sample_rate, dio=None): + """Save raw waveform data as .npz and a plot as .png.""" + fail_dir = Path(outdir) / "failures" + fail_dir.mkdir(parents=True, exist_ok=True) + ts = datetime.now().strftime("%Y%m%d_%H%M%S") + stem = f"fail_iter{iteration:04d}_{ts}" + + npz_path = fail_dir / f"{stem}.npz" + if dio is not None: + np.savez(npz_path, ch1=ch1, ch2=ch2, sample_rate=sample_rate, dio=dio) + else: + np.savez(npz_path, ch1=ch1, ch2=ch2, sample_rate=sample_rate) + + png_path = fail_dir / f"{stem}.png" + t_ms = np.arange(len(ch1)) / sample_rate * 1000 + fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 6), sharex=True) + ax1.plot(t_ms, ch1, linewidth=0.5) + ax1.set_ylabel("Voltage (V)") + ax1.set_title(f"Iteration {iteration} - I channel") + ax1.grid(True, alpha=0.3) + ax2.plot(t_ms, ch2, linewidth=0.5) + ax2.set_ylabel("Voltage (V)") + ax2.set_xlabel("Time (ms)") + ax2.set_title(f"Iteration {iteration} - Q channel") + ax2.grid(True, alpha=0.3) + fig.tight_layout() + fig.savefig(png_path, dpi=150) + plt.close(fig) + + return npz_path, png_path + + +# --------------------------------------------------------------------------- +# Main test loop +# --------------------------------------------------------------------------- + +def run_test(args): + dwf_lib = load_dwf() + hdwf, sample_rate, n_samples = configure_device(dwf_lib, args) + + # Safety: ensure PTT is disengaged on exit + def cleanup(*_): + print("\nDisengaging PTT and closing device...") + ptt_disengage(dwf_lib, hdwf) + dwf_lib.FDwfAnalogOutReset(hdwf, c_int(0)) + dwf_lib.FDwfDeviceCloseAll() + + def sigint_handler(sig, frame): + cleanup() + sys.exit(1) + + signal_module.signal(signal_module.SIGINT, sigint_handler) + + results = [] + + try: + for i in range(args.iterations): + iter_num = i + 1 + print(f"\n--- Iteration {iter_num}/{args.iterations} ---") + + ptt_engage(dwf_lib, hdwf) + time.sleep(args.settle_time) + + ch1, ch2, dio, lost, corrupted = acquire_data( + dwf_lib, hdwf, n_samples, capture_flag=args.capture_flag + ) + + ptt_disengage(dwf_lib, hdwf) + + if lost > 0: + print(f" WARNING: {lost} samples lost") + if corrupted > 0: + print(f" WARNING: {corrupted} samples corrupted") + + res_i = analyze_channel( + ch1, sample_rate, "I", args.min_rms, args.min_snr + ) + res_q = analyze_channel( + ch2, sample_rate, "Q", args.min_rms, args.min_snr + ) + + passed = res_i["passed"] and res_q["passed"] + status = "PASS" if passed else "FAIL" + + print(f" [{status}] I: RMS={res_i['rms']:.4f}V " + f"SNR={res_i['snr_db']:.1f}dB " + f"freq={res_i['dominant_freq']:.1f}Hz " + f"Q: RMS={res_q['rms']:.4f}V " + f"SNR={res_q['snr_db']:.1f}dB " + f"freq={res_q['dominant_freq']:.1f}Hz") + + if not passed: + for r in res_i["failure_reasons"] + res_q["failure_reasons"]: + print(f" -> {r}") + npz_path, png_path = save_waveform( + args.output_dir, iter_num, ch1, ch2, sample_rate, dio + ) + print(f" Saved: {npz_path}") + print(f" Plot: {png_path}") + elif args.save_all: + save_waveform(args.output_dir, iter_num, ch1, ch2, sample_rate, dio) + + results.append({ + "iteration": iter_num, + "passed": passed, + "i": res_i, + "q": res_q, + "lost": lost, + "corrupted": corrupted, + }) + + if i < args.iterations - 1: + time.sleep(args.interval) + + # --- Summary --- + print("\n" + "=" * 64) + total = len(results) + n_passed = sum(1 for r in results if r["passed"]) + n_failed = total - n_passed + print(f"SUMMARY: {n_passed}/{total} passed, {n_failed}/{total} failed") + print("=" * 64) + + if n_failed > 0: + print("\nFailed iterations:") + for r in results: + if not r["passed"]: + reasons = (r["i"]["failure_reasons"] + + r["q"]["failure_reasons"]) + print(f" #{r['iteration']}: {', '.join(reasons)}") + + i_snrs = [r["i"]["snr_db"] for r in results] + q_snrs = [r["q"]["snr_db"] for r in results] + print(f"\nI channel SNR: min={min(i_snrs):.1f} " + f"max={max(i_snrs):.1f} mean={np.mean(i_snrs):.1f} dB") + print(f"Q channel SNR: min={min(q_snrs):.1f} " + f"max={max(q_snrs):.1f} mean={np.mean(q_snrs):.1f} dB") + + sys.exit(0 if n_failed == 0 else 1) + + finally: + cleanup() + + +# --------------------------------------------------------------------------- +# CLI +# --------------------------------------------------------------------------- + +def main(): + parser = argparse.ArgumentParser( + description="Transmit PTT signal integrity test using Analog Discovery 2" + ) + parser.add_argument( + "-n", "--iterations", type=int, default=100, + help="number of PTT test cycles (default: 100)") + parser.add_argument( + "--settle-time", type=float, default=0.5, + help="seconds to wait after PTT engage before capture (default: 0.5)") + parser.add_argument( + "--acquire-time", type=float, default=0.1, + help="scope acquisition duration in seconds (default: 0.1)") + parser.add_argument( + "--interval", type=float, default=0.5, + help="seconds to wait between iterations (default: 0.5)") + parser.add_argument( + "--sample-rate", type=float, default=100000, + help="scope sample rate in Hz (default: 100000)") + parser.add_argument( + "--min-snr", type=float, default=20.0, + help="minimum SNR in dB to pass spectral purity check (default: 20.0)") + parser.add_argument( + "--min-rms", type=float, default=0.005, + help="minimum RMS amplitude in V to pass (default: 0.005)") + parser.add_argument( + "--output-dir", type=str, default=".", + help="directory for saving failure data (default: current dir)") + parser.add_argument( + "--save-all", action="store_true", + help="save waveform data for all iterations, not just failures") + parser.add_argument( + "--capture-flag", action="store_true", + help="also capture AD2 DIO 1-4 (Teensy pins 28-31, the Flag() bus) " + "in parallel with the scope; saved into the .npz as 'dio' uint8") + + args = parser.parse_args() + run_test(args) + + +if __name__ == "__main__": + main() diff --git a/code/tools/README.md b/code/tools/README.md index e8c38ea..6d9b75d 100644 --- a/code/tools/README.md +++ b/code/tools/README.md @@ -8,6 +8,8 @@ read it back through test instruments on the bench. |---|---|---| | [`filter_hil/`](filter_hil/README.md) | Receive filter rate-independence test suite | AD2 + radio | | [`tx_filter_hil/`](tx_filter_hil/README.md) | Transmit filter rate-independence test suite | AD2 + radio | +| [`receive_chain_test.py`](#receive_chain_testpy) | Check the demodulated audio for a clean, uninterrupted tone | AD2 + radio + signal generator | +| [`../test/transmit/transmit_test.py`](#transmit_testpy) | Check the exciter I/Q outputs across repeated PTT cycles | AD2 + radio | | [`flag_timing.py`](#flag_timingpy) | Measure firmware execution timing from `Flag()` pin transitions | AD2 + radio | | [`plot_flag_timing.py`](#plot_flag_timingpy) | Plot distributions from a `flag_timing.py` capture | none | | [`serial_diag.py`](#serial_diagpy) | Interactive CAT control + live diagnostic monitor | radio | @@ -36,7 +38,7 @@ Per-tool dependencies, if you would rather install selectively: | Package | Needed by | |---|---| | `numpy` | everything except `serial_diag.py`'s CAT-only mode | -| `matplotlib` | the plotting tools and both HIL suites | +| `matplotlib` | the plotting tools, both HIL suites, `receive_chain_test.py`, `transmit_test.py` | | `scipy` | `extract_filter_prototypes.py` | | `pyserial` | anything that talks CAT: `serial_diag.py`, both HIL suites | | `sounddevice` | `usb_audio_test.py`, and the audio commands in `serial_diag.py` | @@ -119,6 +121,53 @@ conditions, and the failure table are all there. Background and results are in --- +## `receive_chain_test.py` + +An end-to-end integrity check on the receive chain: an external signal +generator supplies the RF, the AD2 samples the demodulated audio, and the tool +asserts that the recovered tone is at the right frequency and amplitude and is +free of interruptions and discontinuities. It writes a PNG for eyeballing and +prints a pass/fail summary, optionally with a machine-parseable JSON line. + +```bash +./venv/bin/python receive_chain_test.py # defaults: 1 kHz, 234 mV RMS +./venv/bin/python receive_chain_test.py --json --quiet # for scripting +./venv/bin/python receive_chain_test.py --expected-tone 1500 --plot rx.png +``` + +Wiring: AD2 scope Ch1 on the SDR audio output; the signal generator drives the +antenna input. Exit codes are 0 pass, 1 fail, 2 the AD2 could not be reached. +The tolerances are all flags (`--freq-tol`, `--rms-tol`, `--min-snr`, +`--max-env-cv`, …). Requires `numpy`, `matplotlib` and the WaveForms runtime. +Driven by the `receive-test` Skill. + +--- + +## `transmit_test.py` + +The transmit counterpart, and the one tool that does **not** live in this +directory — it is `code/test/transmit/transmit_test.py`, and its captures land +in whatever directory you run it from (`--output-dir`, default `.`), which is +why everything under `code/test/transmit/` except the script itself is +gitignored. It engages PTT through the AD2 repeatedly, +captures the exciter I/Q outputs each time, and looks for the intermittent +failures where a PTT cycle produces a dead channel, a discontinuity or a +distorted waveform. + +```bash +cd ../test/transmit +python3 transmit_test.py -n 5 # quick smoke test +python3 transmit_test.py -n 100 # full run +``` + +Wiring: AD2 DIO-0 controls PTT (low = transmit), W1 drives the microphone input +with a 500 Hz 100 mV sine, and scope Ch1/Ch2 read I and Q. Each iteration +reports RMS, SNR and dominant frequency; failures are saved to `failures/` as +`.npz` plus a PNG. Exit code 0 if every iteration passed. Driven by the +`transmit-test` Skill. + +--- + ## `flag_timing.py` Measures how long firmware code takes to run. `Flag(val)` in `Globals.cpp` diff --git a/code/tools/receive_chain_test.py b/code/tools/receive_chain_test.py new file mode 100755 index 0000000..e085237 --- /dev/null +++ b/code/tools/receive_chain_test.py @@ -0,0 +1,553 @@ +#!/usr/bin/env python3 +""" +Receive-chain integrity test using an Analog Discovery 2. + +Samples the SDR's demodulated audio output on AD2 oscilloscope channel 1 +and checks that the recovered tone is at the expected frequency (1 kHz), +expected amplitude (~234 mV RMS), and free of interruptions or +discontinuities. The RF input to the SDR is supplied by an external signal +generator (not the AD2). Writes a PNG plot for human verification and +prints a pass/fail summary plus a machine-parseable JSON line. + +Wiring +------ + AD2 Scope Ch1 <- SDR audio output + External signal generator -> SDR antenna / ADC input + +Exit codes +---------- + 0 PASS - all checks passed + 1 FAIL - one or more checks failed + 2 ERROR - AD2 not reachable / DWF call failed +""" + +import argparse +import ctypes +import json +import os +import sys +import time +from dataclasses import dataclass, asdict +from typing import Optional + +import numpy as np +import matplotlib + +matplotlib.use("Agg") +import matplotlib.pyplot as plt + +# --- DWF library binding --------------------------------------------------- + +def _load_dwf(): + if sys.platform.startswith("win"): + return ctypes.cdll.dwf + if sys.platform.startswith("darwin"): + return ctypes.cdll.LoadLibrary("/Library/Frameworks/dwf.framework/dwf") + return ctypes.cdll.LoadLibrary("libdwf.so") + + +# DWF constants (mirrors dwfconstants.py - kept inline so this script has no +# extra import dependency beyond libdwf.so + numpy + matplotlib). +HDWF_NONE = 0 +ACQMODE_RECORD = 3 +TRIG_SRC_NONE = 0 +DWF_STATE_CONFIG = 4 +DWF_STATE_PREFILL = 5 +DWF_STATE_ARMED = 1 +DWF_STATE_DONE = 2 + + +def _dwf_last_error(dwf) -> str: + buf = ctypes.create_string_buffer(512) + dwf.FDwfGetLastErrorMsg(buf) + return buf.value.decode("utf-8", errors="replace") + + +def _bind_argtypes(dwf): + c_int = ctypes.c_int + c_double = ctypes.c_double + c_byte = ctypes.c_byte + + dwf.FDwfDeviceOpen.argtypes = [c_int, ctypes.POINTER(c_int)] + dwf.FDwfDeviceCloseAll.argtypes = [] + dwf.FDwfDeviceAutoConfigureSet.argtypes = [c_int, c_int] + dwf.FDwfGetLastErrorMsg.argtypes = [ctypes.c_char_p] + + dwf.FDwfAnalogInReset.argtypes = [c_int] + dwf.FDwfAnalogInChannelEnableSet.argtypes = [c_int, c_int, c_int] + dwf.FDwfAnalogInChannelRangeSet.argtypes = [c_int, c_int, c_double] + dwf.FDwfAnalogInChannelOffsetSet.argtypes = [c_int, c_int, c_double] + dwf.FDwfAnalogInAcquisitionModeSet.argtypes = [c_int, c_int] + dwf.FDwfAnalogInFrequencySet.argtypes = [c_int, c_double] + dwf.FDwfAnalogInRecordLengthSet.argtypes = [c_int, c_double] + dwf.FDwfAnalogInConfigure.argtypes = [c_int, c_int, c_int] + dwf.FDwfAnalogInStatus.argtypes = [c_int, c_int, ctypes.POINTER(c_byte)] + dwf.FDwfAnalogInStatusRecord.argtypes = [ + c_int, + ctypes.POINTER(c_int), + ctypes.POINTER(c_int), + ctypes.POINTER(c_int), + ] + dwf.FDwfAnalogInStatusData.argtypes = [c_int, c_int, ctypes.c_void_p, c_int] + + +# --- Capture --------------------------------------------------------------- + +def record_channel1( + dwf, + hdwf, + sample_rate_hz: float, + record_len_s: float, + range_v: float, + log, +): + """Capture scope channel 1 in record (streaming) mode and return samples. + + Returns + ------- + (samples: np.ndarray, lost: int, corrupted: int) + """ + n_samples = int(round(sample_rate_hz * record_len_s)) + buf = (ctypes.c_double * n_samples)() + sts = ctypes.c_byte() + avail = ctypes.c_int() + lost = ctypes.c_int() + corrupted = ctypes.c_int() + total_lost = 0 + total_corrupted = 0 + + dwf.FDwfAnalogInReset(hdwf) + dwf.FDwfAnalogInChannelEnableSet(hdwf, ctypes.c_int(0), ctypes.c_int(1)) + dwf.FDwfAnalogInChannelRangeSet(hdwf, ctypes.c_int(0), ctypes.c_double(range_v)) + dwf.FDwfAnalogInChannelOffsetSet(hdwf, ctypes.c_int(0), ctypes.c_double(0.0)) + dwf.FDwfAnalogInAcquisitionModeSet(hdwf, ctypes.c_int(ACQMODE_RECORD)) + dwf.FDwfAnalogInFrequencySet(hdwf, ctypes.c_double(sample_rate_hz)) + dwf.FDwfAnalogInRecordLengthSet(hdwf, ctypes.c_double(record_len_s)) + + # Arm but don't start. + dwf.FDwfAnalogInConfigure(hdwf, ctypes.c_int(1), ctypes.c_int(0)) + + # Wait for analog frontend offset to settle. + log("Waiting 2.0 s for analog frontend to settle...") + time.sleep(2.0) + + log(f"Starting acquisition ({n_samples} samples @ {sample_rate_hz:.0f} Hz, {record_len_s*1000:.1f} ms)...") + dwf.FDwfAnalogInConfigure(hdwf, ctypes.c_int(0), ctypes.c_int(1)) + + c_samples = 0 + deadline = time.monotonic() + record_len_s * 5 + 5.0 # generous timeout + + while c_samples < n_samples: + if time.monotonic() > deadline: + raise RuntimeError("Timed out waiting for acquisition") + + if dwf.FDwfAnalogInStatus(hdwf, ctypes.c_int(1), ctypes.byref(sts)) != 1: + raise RuntimeError(f"FDwfAnalogInStatus failed: {_dwf_last_error(dwf)}") + + if c_samples == 0 and sts.value in (DWF_STATE_CONFIG, DWF_STATE_PREFILL, DWF_STATE_ARMED): + continue + + dwf.FDwfAnalogInStatusRecord(hdwf, ctypes.byref(avail), ctypes.byref(lost), ctypes.byref(corrupted)) + c_samples += lost.value + total_lost += lost.value + total_corrupted += corrupted.value + + if avail.value == 0: + continue + + take = avail.value + if c_samples + take > n_samples: + take = n_samples - c_samples + + dwf.FDwfAnalogInStatusData( + hdwf, + ctypes.c_int(0), + ctypes.byref(buf, ctypes.sizeof(ctypes.c_double) * c_samples), + ctypes.c_int(take), + ) + c_samples += take + + samples = np.frombuffer(buf, dtype=np.float64).copy() + return samples, total_lost, total_corrupted + + +# --- Analysis -------------------------------------------------------------- + +@dataclass +class Analysis: + sample_rate_hz: float + n_samples: int + duration_s: float + rms_v: float + peak_v: float + dc_offset_v: float + dominant_freq_hz: float + snr_db: float + tone_fraction: float # fraction of total AC power at the dominant bin (±2 bins) + envelope_mean_v: float + envelope_min_v: float + envelope_max_v: float + envelope_cv: float # coefficient of variation: stddev/mean + max_window_dropout: float # smallest windowed RMS / median windowed RMS + max_sample_jump_v: float # largest |x[n]-x[n-1]| in volts + expected_jump_v: float # 2*pi*f*A/Fs - theoretical max for a clean sine + + +def analyze(samples: np.ndarray, sample_rate_hz: float, expected_freq_hz: float, expected_rms_v: float) -> Analysis: + n = samples.size + duration_s = n / sample_rate_hz + dc = float(np.mean(samples)) + ac = samples - dc + rms = float(np.sqrt(np.mean(ac * ac))) + peak = float(np.max(np.abs(ac))) + + # FFT-based dominant-frequency detection. + # Use a Hann window for low spectral leakage; correct amplitude scaling for the window. + window = np.hanning(n) + win_gain = window.mean() # coherent gain + spectrum = np.fft.rfft(ac * window) / (n * win_gain) * 2.0 + freqs = np.fft.rfftfreq(n, d=1.0 / sample_rate_hz) + mag = np.abs(spectrum) + + # Ignore the DC bin and anything below 50 Hz (mains/leakage). + mask = freqs >= 50.0 + if not np.any(mask): + dominant_freq = 0.0 + tone_power = 0.0 + else: + idx_in_mask = int(np.argmax(mag[mask])) + dominant_idx = int(np.flatnonzero(mask)[0]) + idx_in_mask + # Parabolic interpolation around the peak for sub-bin frequency precision. + if 1 <= dominant_idx < mag.size - 1: + a, b, c = mag[dominant_idx - 1], mag[dominant_idx], mag[dominant_idx + 1] + denom = (a - 2 * b + c) + delta = 0.5 * (a - c) / denom if denom != 0 else 0.0 + else: + delta = 0.0 + bin_hz = sample_rate_hz / n + dominant_freq = (dominant_idx + delta) * bin_hz + + # Power at the tone (±2 bins) vs total AC power. + lo = max(dominant_idx - 2, 0) + hi = min(dominant_idx + 3, mag.size) + tone_power = float(np.sum(mag[lo:hi] ** 2)) + + total_power = float(np.sum(mag ** 2)) + tone_fraction = tone_power / total_power if total_power > 0 else 0.0 + # SNR: tone power vs everything else in the AC band. + other_power = max(total_power - tone_power, 1e-30) + snr_db = 10.0 * np.log10(tone_power / other_power) if tone_power > 0 else -120.0 + + # Envelope via analytic-signal magnitude (no scipy dependency: build the + # analytic signal via FFT directly). + X = np.fft.fft(ac) + H = np.zeros(n) + if n % 2 == 0: + H[0] = 1.0 + H[n // 2] = 1.0 + H[1:n // 2] = 2.0 + else: + H[0] = 1.0 + H[1:(n + 1) // 2] = 2.0 + analytic = np.fft.ifft(X * H) + envelope = np.abs(analytic) + + # Trim the first and last ~one cycle to skip Hilbert edge effects. + trim = max(1, int(round(sample_rate_hz / max(expected_freq_hz, 1.0)))) + env_core = envelope[trim:-trim] if envelope.size > 2 * trim else envelope + env_mean = float(np.mean(env_core)) + env_std = float(np.std(env_core)) + env_min = float(np.min(env_core)) + env_max = float(np.max(env_core)) + env_cv = env_std / env_mean if env_mean > 0 else float("inf") + + # Windowed RMS to spot dropouts: split into ~10 ms windows and look for + # the minimum vs the median - a clean tone should be flat. + win_len = max(1, int(round(0.010 * sample_rate_hz))) + n_windows = ac.size // win_len + if n_windows >= 3: + windows = ac[: n_windows * win_len].reshape(n_windows, win_len) + win_rms = np.sqrt(np.mean(windows * windows, axis=1)) + median_rms = float(np.median(win_rms)) + min_rms = float(np.min(win_rms)) + max_window_dropout = (min_rms / median_rms) if median_rms > 0 else 0.0 + else: + max_window_dropout = 1.0 + + # Sample-to-sample slew: for an ideal sine A*sin(2*pi*f*t), the maximum + # per-sample step is 2*pi*f*A/Fs. A glitch (zero pop, missing chunk) + # produces a jump much larger than that. + diffs = np.abs(np.diff(ac)) + max_sample_jump = float(np.max(diffs)) if diffs.size > 0 else 0.0 + # Use measured peak (not expected) so the bound holds even when the tone + # is the wrong amplitude. + expected_jump = 2.0 * np.pi * max(expected_freq_hz, 1.0) * peak / sample_rate_hz + + return Analysis( + sample_rate_hz=sample_rate_hz, + n_samples=n, + duration_s=duration_s, + rms_v=rms, + peak_v=peak, + dc_offset_v=dc, + dominant_freq_hz=dominant_freq, + snr_db=snr_db, + tone_fraction=tone_fraction, + envelope_mean_v=env_mean, + envelope_min_v=env_min, + envelope_max_v=env_max, + envelope_cv=env_cv, + max_window_dropout=max_window_dropout, + max_sample_jump_v=max_sample_jump, + expected_jump_v=expected_jump, + ) + + +# --- Pass/fail ------------------------------------------------------------- + +@dataclass +class PassFail: + passed: bool + checks: dict + + +def evaluate(a: Analysis, expected_freq_hz: float, freq_tol_hz: float, + expected_rms_v: float, rms_tol_frac: float, + min_snr_db: float, max_env_cv: float, + min_window_ratio: float, jump_margin: float) -> PassFail: + checks = {} + + freq_err = abs(a.dominant_freq_hz - expected_freq_hz) + checks["frequency"] = { + "value_hz": a.dominant_freq_hz, + "expected_hz": expected_freq_hz, + "tolerance_hz": freq_tol_hz, + "error_hz": freq_err, + "pass": freq_err <= freq_tol_hz, + } + + rms_err_frac = abs(a.rms_v - expected_rms_v) / expected_rms_v if expected_rms_v else float("inf") + checks["amplitude_rms"] = { + "value_v": a.rms_v, + "expected_v": expected_rms_v, + "tolerance_frac": rms_tol_frac, + "error_frac": rms_err_frac, + "pass": rms_err_frac <= rms_tol_frac, + } + + checks["snr"] = { + "value_db": a.snr_db, + "min_db": min_snr_db, + "pass": a.snr_db >= min_snr_db, + } + + checks["envelope_stability"] = { + "cv": a.envelope_cv, + "max_cv": max_env_cv, + "min_v": a.envelope_min_v, + "max_v": a.envelope_max_v, + "pass": a.envelope_cv <= max_env_cv, + } + + checks["window_dropout"] = { + "min_over_median": a.max_window_dropout, + "min_required": min_window_ratio, + "pass": a.max_window_dropout >= min_window_ratio, + } + + jump_threshold = a.expected_jump_v * jump_margin + checks["sample_jump"] = { + "max_jump_v": a.max_sample_jump_v, + "expected_max_v": a.expected_jump_v, + "threshold_v": jump_threshold, + "pass": a.max_sample_jump_v <= jump_threshold, + } + + passed = all(c["pass"] for c in checks.values()) + return PassFail(passed=passed, checks=checks) + + +# --- Plotting -------------------------------------------------------------- + +def write_plot(samples: np.ndarray, sample_rate_hz: float, expected_freq_hz: float, + analysis: Analysis, verdict: PassFail, png_path: str): + n = samples.size + t_ms = np.arange(n) / sample_rate_hz * 1000.0 + + fig, (ax_time, ax_freq) = plt.subplots(2, 1, figsize=(11, 7)) + + ax_time.plot(t_ms, samples, linewidth=0.6, color="C0", label="Audio output") + ax_time.set_xlabel("Time (ms)") + ax_time.set_ylabel("Voltage (V)") + ax_time.set_title( + f"SDR audio output | RMS={analysis.rms_v*1000:.1f} mV, " + f"dominant={analysis.dominant_freq_hz:.1f} Hz, SNR={analysis.snr_db:.1f} dB " + f"[{ 'PASS' if verdict.passed else 'FAIL' }]" + ) + ax_time.grid(True, alpha=0.3) + # Highlight a couple of cycles for sanity-checking the waveform shape. + if expected_freq_hz > 0: + cycle_ms = 1000.0 / expected_freq_hz + ax_time.set_xlim(0, min(5 * cycle_ms, t_ms[-1])) + ax_time.legend(loc="upper right", fontsize=8) + + # FFT plot (magnitude in dBV). + ac = samples - np.mean(samples) + window = np.hanning(n) + win_gain = window.mean() + spec = np.fft.rfft(ac * window) / (n * win_gain) * 2.0 + freqs = np.fft.rfftfreq(n, d=1.0 / sample_rate_hz) + mag_db = 20 * np.log10(np.maximum(np.abs(spec), 1e-9)) + ax_freq.plot(freqs, mag_db, linewidth=0.6, color="C1") + ax_freq.axvline(expected_freq_hz, color="green", linestyle="--", linewidth=0.8, + label=f"expected {expected_freq_hz:.0f} Hz") + ax_freq.axvline(analysis.dominant_freq_hz, color="red", linestyle=":", linewidth=0.8, + label=f"measured {analysis.dominant_freq_hz:.1f} Hz") + ax_freq.set_xlabel("Frequency (Hz)") + ax_freq.set_ylabel("Magnitude (dBV)") + ax_freq.set_xlim(0, min(10 * expected_freq_hz, sample_rate_hz / 2)) + ax_freq.set_ylim(top=10, bottom=-100) + ax_freq.grid(True, alpha=0.3) + ax_freq.legend(loc="upper right", fontsize=8) + + fig.tight_layout() + fig.savefig(png_path, dpi=110) + plt.close(fig) + + +# --- Main ------------------------------------------------------------------ + +def main(): + p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("--sample-rate", type=float, default=200_000.0, + help="Scope sample rate (Hz). Default: 200000") + p.add_argument("--duration", type=float, default=0.200, + help="Capture duration in seconds. Must be >= 0.1. Default: 0.200") + p.add_argument("--scope-range", type=float, default=2.0, + help="Scope input range in volts (default: 2.0)") + + p.add_argument("--expected-tone", type=float, default=1000.0, + help="Expected demodulated tone frequency (Hz). Default: 1000") + p.add_argument("--expected-rms", type=float, default=0.234, + help="Expected RMS amplitude (V). Default: 0.234") + p.add_argument("--freq-tol", type=float, default=20.0, + help="Frequency tolerance (Hz). Default: 20") + p.add_argument("--rms-tol", type=float, default=0.25, + help="Fractional RMS tolerance. Default: 0.25 (+/-25 percent)") + p.add_argument("--min-snr", type=float, default=30.0, + help="Minimum tone SNR (dB). Default: 30") + p.add_argument("--max-env-cv", type=float, default=0.10, + help="Maximum envelope coefficient of variation. Default: 0.10") + p.add_argument("--min-window-ratio", type=float, default=0.70, + help="Min windowed RMS / median windowed RMS. Default: 0.70") + p.add_argument("--jump-margin", type=float, default=3.0, + help="Max sample-to-sample jump vs theoretical. Default: 3.0") + + p.add_argument("--plot", default=None, + help="Path to output PNG (default: receive_chain_.png next to script)") + p.add_argument("--json", action="store_true", help="Also emit a JSON document on stdout") + p.add_argument("--quiet", action="store_true", help="Suppress progress output") + args = p.parse_args() + + if args.duration < 0.100: + print(f"--duration must be >= 0.1 s (got {args.duration})", file=sys.stderr) + return 2 + + def log(msg): + if not args.quiet: + print(msg, file=sys.stderr, flush=True) + + if args.plot is None: + here = os.path.dirname(os.path.abspath(__file__)) + ts = time.strftime("%Y%m%d_%H%M%S") + args.plot = os.path.join(here, f"receive_chain_{ts}.png") + + try: + dwf = _load_dwf() + except OSError as e: + print(f"libdwf.so not loadable: {e}. Install the Digilent WaveForms SDK.", file=sys.stderr) + return 2 + + _bind_argtypes(dwf) + + hdwf = ctypes.c_int() + log("Opening AD2...") + if dwf.FDwfDeviceOpen(ctypes.c_int(-1), ctypes.byref(hdwf)) != 1 or hdwf.value == HDWF_NONE: + print(f"Failed to open AD2: {_dwf_last_error(dwf)}", file=sys.stderr) + return 2 + + try: + # Manual configure so AnalogIn applies only when we ask. + dwf.FDwfDeviceAutoConfigureSet(hdwf, ctypes.c_int(0)) + + samples, lost, corrupted = record_channel1( + dwf, hdwf, + sample_rate_hz=args.sample_rate, + record_len_s=args.duration, + range_v=args.scope_range, + log=log, + ) + if lost: + log(f"WARNING: {lost} samples lost during capture") + if corrupted: + log(f"WARNING: {corrupted} samples flagged corrupted during capture") + + analysis = analyze(samples, args.sample_rate, args.expected_tone, args.expected_rms) + verdict = evaluate( + analysis, + expected_freq_hz=args.expected_tone, + freq_tol_hz=args.freq_tol, + expected_rms_v=args.expected_rms, + rms_tol_frac=args.rms_tol, + min_snr_db=args.min_snr, + max_env_cv=args.max_env_cv, + min_window_ratio=args.min_window_ratio, + jump_margin=args.jump_margin, + ) + + write_plot(samples, args.sample_rate, args.expected_tone, analysis, verdict, args.plot) + + # Human-readable summary on stdout. + status = "PASS" if verdict.passed else "FAIL" + print(f"[{status}] Receive chain test") + print(f" Samples: {analysis.n_samples} ({analysis.duration_s*1000:.1f} ms @ {analysis.sample_rate_hz:.0f} Hz)") + print(f" Tone freq: {analysis.dominant_freq_hz:.2f} Hz (expected {args.expected_tone:.0f} ± {args.freq_tol:.0f} Hz)") + print(f" RMS amplitude: {analysis.rms_v*1000:.1f} mV (expected {args.expected_rms*1000:.0f} mV ± {args.rms_tol*100:.0f}%)") + print(f" SNR: {analysis.snr_db:.1f} dB (min {args.min_snr:.1f} dB)") + print(f" Envelope CV: {analysis.envelope_cv:.4f} (max {args.max_env_cv:.3f})") + print(f" Window dropout: {analysis.max_window_dropout:.3f} (min {args.min_window_ratio:.3f})") + print(f" Max sample jump:{analysis.max_sample_jump_v*1000:.2f} mV (theoretical {analysis.expected_jump_v*1000:.2f} mV)") + if lost or corrupted: + print(f" Capture issues: lost={lost} corrupted={corrupted}") + print(f" Plot: {args.plot}") + for name, chk in verdict.checks.items(): + mark = "OK " if chk["pass"] else "BAD" + print(f" [{mark}] {name}") + + if args.json: + doc = { + "passed": verdict.passed, + "analysis": asdict(analysis), + "checks": verdict.checks, + "capture": { + "lost_samples": lost, + "corrupted_samples": corrupted, + "sample_rate_hz": args.sample_rate, + "duration_s": args.duration, + }, + "plot": args.plot, + } + print(json.dumps(doc)) + + return 0 if verdict.passed else 1 + + finally: + try: + dwf.FDwfAnalogInReset(hdwf) + except Exception: + pass + dwf.FDwfDeviceCloseAll() + + +if __name__ == "__main__": + sys.exit(main()) From f58d4433149201a54b524c6d8a11903e1489cc6e Mon Sep 17 00:00:00 2001 From: Oliver King Date: Fri, 31 Jul 2026 16:46:12 -0400 Subject: [PATCH 20/25] Model the digital and SSB transmit chains in software Three tests that walk the transmit stages the way TransmitProcessing() does - DigitalTxChain() entering at Fs/4 as ReadUSBTransmitBuffer() hands it over, MicTxChain() entering at Fs with TXDecimateBy4 in series. The bench measured a ~2.8 dB spread over 200-2200 Hz on the exciter I/Q at 176.4 ksps, and modelling the filters accounted for only ~0.6 dB of it plus 1.9 dB from BandEQ. Running the chain with no codec, no analog path and no instrument separates the DSP's contribution from everything downstream, so whatever the bench sees on top of this is not the DSP. Co-Authored-By: Claude Opus 5 --- code/src/PhoenixSketch/BuildInfo.h | 4 +- code/test/TransmitChain_test.cpp | 252 +++++++++++++++++++++++++++++ 2 files changed, 254 insertions(+), 2 deletions(-) diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index 8aaa16a..c8ec97b 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -14,7 +14,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "b16ec3a" -#define BUILD_TIMESTAMP "2026-07-31 16:46:06" +#define GIT_COMMIT_HASH "9baf83d" +#define BUILD_TIMESTAMP "2026-07-31 16:46:12" #endif // BUILDINFO_H diff --git a/code/test/TransmitChain_test.cpp b/code/test/TransmitChain_test.cpp index d219a88..ad1fd55 100644 --- a/code/test/TransmitChain_test.cpp +++ b/code/test/TransmitChain_test.cpp @@ -1135,3 +1135,255 @@ TEST(TransmitChain176k, DecimatorStopsBeforeTheFoldPoint){ SampleRate = saved_rate; InitializeTransmitFilters(&TXfilters); } + +/** + * Amplitude response of the DIGITAL-mode transmit chain, in software. + * + * Digital mode feeds USB audio in at Fs/4 and so skips TXDecimateBy4; this walks + * the same stages ReadUSBTransmitBuffer() hands to TransmitProcessing(). + * + * The point is to separate the DSP from everything downstream of it. A bench + * sweep of the exciter I/Q at 176.4 ksps measured a ~2.8 dB spread over + * 200-2200 Hz, but modelling the filters accounted for only about 0.6 dB of it + * plus 1.9 dB from BandEQ. Running the chain here, with no codec, no analog path + * and no instrument, says how much of the measured shape is actually the DSP. + */ +static void DigitalTxChain(float32_t *I, float32_t *Q, uint32_t sampleRate_Hz){ + DataBlock data; + data.I = I; data.Q = Q; + data.N = 512; + data.sampleRate_Hz = sampleRate_Hz; // Fs/4, the USB audio rate + TXDecimateBy2(&data,&TXfilters); // 512 in, 256 out + BandEQ(&data, &RXfilters, TX); + arm_copy_f32(data.I,data.Q,256); + TXDecimateBy2Again(&data,&TXfilters); // 256 in, 128 out + HilbertTransform(&data,&TXfilters); // 128 + TXInterpolateBy2Again(&data,&TXfilters); // 128 in, 256 out + ApplyIQCorrection(&data, + ED.IQXAmpCorrectionFactor[ED.currentBand[ED.activeVFO]], + ED.IQXPhaseCorrectionFactor[ED.currentBand[ED.activeVFO]]); + SidebandSelection(&data); + TXInterpolateBy2(&data,&TXfilters); // 256 in, 512 out + TXInterpolateBy4(&data,&TXfilters); // 512 in, 2048 out +} + +/** + * Amplitude response of the SSB (microphone) transmit chain, in software. + * + * The digital-mode model above enters the chain one stage down, at Fs/4. SSB + * enters it at the top, so TXDecimateBy4 is in series as well - and, on the + * bench, so are the codec's ADC and the microphone input network, neither of + * which the digital-mode sweep exercised. + * + * Same purpose as DigitalTxChain: everything this reproduces is the DSP, so + * whatever the bench measures on top of it is not. + */ +static void MicTxChain(float32_t *I, float32_t *Q, uint32_t sampleRate_Hz){ + DataBlock data; + data.I = I; data.Q = Q; + data.N = 2048; + data.sampleRate_Hz = sampleRate_Hz; // Fs, the microphone rate + TXDecimateBy4(&data,&TXfilters); // 2048 in, 512 out + TXDecimateBy2(&data,&TXfilters); // 512 in, 256 out + BandEQ(&data, &RXfilters, TX); + arm_copy_f32(data.I,data.Q,256); + TXDecimateBy2Again(&data,&TXfilters); // 256 in, 128 out + HilbertTransform(&data,&TXfilters); // 128 + TXInterpolateBy2Again(&data,&TXfilters); // 128 in, 256 out + ApplyIQCorrection(&data, + ED.IQXAmpCorrectionFactor[ED.currentBand[ED.activeVFO]], + ED.IQXPhaseCorrectionFactor[ED.currentBand[ED.activeVFO]]); + SidebandSelection(&data); + TXInterpolateBy2(&data,&TXfilters); // 256 in, 512 out + TXInterpolateBy4(&data,&TXfilters); // 512 in, 2048 out +} + +/** + * The SSB transmit passband the DSP alone produces, at both sample rates. + * + * Writes mic_tx_passband.csv (rate_sps,f_Hz,amplitude,dB_re_800Hz) for the bench + * comparison in Transmit_Passband_Investigation.md. Subtracting this from a + * microphone-driven bench sweep leaves the codec, the analog paths and the + * instrument - which is the residual under investigation. + * + * Amplitude is read by correlation over four concatenated output blocks (8192 + * samples) rather than by peak picking: at 200 Hz a single 2048-sample block is + * only 2.3 FFT bins from DC, which is inside the Hann main lobe. + */ +TEST(TransmitChain176k, MicPassbandAcrossRates){ + uint8_t saved_rate = SampleRate; + const uint8_t rates[2] = {SAMPLE_RATE_176K, SAMPLE_RATE_192K}; + + const float32_t fStart = 200.0f, fStop = 3400.0f, fStep = 100.0f; + const int NF = (int)((fStop - fStart)/fStep) + 1; + + const int CAPTURE_BLOCKS = 4; + const int SETTLE_BLOCKS = 8; + static float32_t I[2048], Q[2048]; + static float32_t out[2048*4]; + + FILE *f = fopen("mic_tx_passband.csv","w"); + if (f) fprintf(f, "rate_sps,f_Hz,amplitude,dB\n"); + + for (int r = 0; r < 2; r++){ + SampleRate = rates[r]; + InitializeFilters(ED.spectrum_zoom, &RXfilters); + InitializeTransmitFilters(&TXfilters); + const float32_t fs = (float32_t)SR[SampleRate].rate; + + float32_t resp[64]; + for (int k = 0; k < NF; k++){ + const float32_t tone = fStart + fStep*(float32_t)k; + int captured = 0; + for (int blk = 0; blk < SETTLE_BLOCKS + CAPTURE_BLOCKS; blk++){ + for (uint32_t i = 0; i < 2048; i++){ + const double t = (double)(blk*2048 + (int)i)/(double)fs; + I[i] = 0.5f*(float32_t)sin(2.0*M_PI*(double)tone*t); + Q[i] = I[i]; + } + MicTxChain(I, Q, (uint32_t)fs); + if (blk >= SETTLE_BLOCKS){ + memcpy(&out[captured*2048], I, 2048*sizeof(float32_t)); + captured++; + } + } + resp[k] = TXToneAmplitude(out, 2048*CAPTURE_BLOCKS, tone, fs); + } + + // Referenced to 800 Hz, which is where the bench sweeps peak and how the + // measured tables in the investigation are normalised. + const int ref = (int)((800.0f - fStart)/fStep); + printf("\n SSB (microphone) TX chain, software only, %d sps\n", + SR[SampleRate].rate); + for (int k = 0; k < NF; k++){ + const float32_t db = 20.0f*log10f(resp[k]/resp[ref]); + printf(" %8.0f Hz %+8.2f dB\n", fStart + fStep*(float32_t)k, db); + if (f) fprintf(f, "%d,%.0f,%.8f,%.4f\n", SR[SampleRate].rate, + fStart + fStep*(float32_t)k, resp[k], db); + } + EXPECT_GT(resp[ref], 0.0f); + } + if (f) fclose(f); + + SampleRate = saved_rate; + InitializeFilters(ED.spectrum_zoom, &RXfilters); + InitializeTransmitFilters(&TXfilters); +} + +/** + * The digital-mode passband on the same fine grid as MicPassbandAcrossRates. + * + * Writes digital_tx_passband_fine.csv in the same shape as mic_tx_passband.csv + * so the same tool differences either bench sweep against its own model. Digital + * mode forces 176.4 ksps, so there is only the one rate. + */ +TEST(TransmitChain176k, DigitalPassbandFineGrid){ + uint8_t saved_rate = SampleRate; + SampleRate = SAMPLE_RATE_176K; + InitializeFilters(ED.spectrum_zoom, &RXfilters); + InitializeTransmitFilters(&TXfilters); + const float32_t audioFs = (float32_t)SR[SampleRate].rate / 4.0f; // 44100 + const float32_t fs = (float32_t)SR[SampleRate].rate; + + const float32_t fStart = 200.0f, fStop = 3400.0f, fStep = 100.0f; + const int NF = (int)((fStop - fStart)/fStep) + 1; + const int CAPTURE_BLOCKS = 4, SETTLE_BLOCKS = 8; + + static float32_t I[2048], Q[2048]; + static float32_t out[2048*4]; + float32_t resp[64]; + + for (int k = 0; k < NF; k++){ + const float32_t tone = fStart + fStep*(float32_t)k; + int captured = 0; + for (int blk = 0; blk < SETTLE_BLOCKS + CAPTURE_BLOCKS; blk++){ + for (uint32_t i = 0; i < 512; i++){ + const double t = (double)(blk*512 + (int)i)/(double)audioFs; + I[i] = 0.5f*(float32_t)sin(2.0*M_PI*(double)tone*t); + Q[i] = I[i]; + } + DigitalTxChain(I, Q, (uint32_t)audioFs); + if (blk >= SETTLE_BLOCKS){ + memcpy(&out[captured*2048], I, 2048*sizeof(float32_t)); + captured++; + } + } + resp[k] = TXToneAmplitude(out, 2048*CAPTURE_BLOCKS, tone, fs); + } + + const int ref = (int)((800.0f - fStart)/fStep); + FILE *f = fopen("digital_tx_passband_fine.csv","w"); + if (f) fprintf(f, "rate_sps,f_Hz,amplitude,dB\n"); + printf("\n digital TX chain, software only, 176400 sps\n"); + for (int k = 0; k < NF; k++){ + const float32_t db = 20.0f*log10f(resp[k]/resp[ref]); + printf(" %8.0f Hz %+8.2f dB\n", fStart + fStep*(float32_t)k, db); + if (f) fprintf(f, "176400,%.0f,%.8f,%.4f\n", + fStart + fStep*(float32_t)k, resp[k], db); + } + if (f) fclose(f); + EXPECT_GT(resp[ref], 0.0f); + + SampleRate = saved_rate; + InitializeFilters(ED.spectrum_zoom, &RXfilters); + InitializeTransmitFilters(&TXfilters); +} + +TEST(TransmitChain176k, DigitalPassbandIsFlatInBand){ + uint8_t saved_rate = SampleRate; + SampleRate = SAMPLE_RATE_176K; + InitializeFilters(ED.spectrum_zoom, &RXfilters); + InitializeTransmitFilters(&TXfilters); + const float32_t audioFs = (float32_t)SR[SampleRate].rate / 4.0f; // 44100 + + const float32_t freqs[] = {200,400,600,800,1000,1200,1400,1600,1800, + 2000,2200,2400,2600,2800,3000,3200}; + const int NF = sizeof(freqs)/sizeof(freqs[0]); + float32_t resp[NF]; + + float32_t I[2048], Q[2048]; + for (int k = 0; k < NF; k++){ + float32_t amp = 0.0f; + // Several blocks so the FIR state settles; measure the last one. + for (int rep = 0; rep < 8; rep++){ + for (uint32_t i = 0; i < 512; i++){ + float32_t t = (float32_t)(rep*512 + i)/audioFs; + I[i] = 0.5f*sinf(TWO_PI*freqs[k]*t); + Q[i] = I[i]; + } + DigitalTxChain(I, Q, audioFs); + if (rep == 7) amp = getmax(I, 2048); + } + resp[k] = amp; + } + + float32_t peak = 0.0f; + for (int k = 0; k < NF; k++) if (resp[k] > peak) peak = resp[k]; + + FILE *f = fopen("digital_tx_passband.txt","w"); + printf("\n digital TX chain response at 176.4 ksps (software only)\n"); + printf(" %8s %10s %9s\n", "f (Hz)", "amp", "dB"); + for (int k = 0; k < NF; k++){ + float32_t db = 20.0f*log10f(resp[k]/peak); + printf(" %8.0f %10.5f %+9.2f\n", freqs[k], resp[k], db); + if (f) fprintf(f, "%.0f,%.6f,%.3f\n", freqs[k], resp[k], db); + } + if (f) fclose(f); + + // In-band flatness, 200-2200 Hz (indices 0..10) + float32_t lo = 1e9f, hi = -1e9f; + for (int k = 0; k <= 10; k++){ + float32_t db = 20.0f*log10f(resp[k]/peak); + if (db < lo) lo = db; + if (db > hi) hi = db; + } + printf(" 200-2200 Hz spread: %.2f dB\n", hi-lo); + + SampleRate = saved_rate; + InitializeFilters(ED.spectrum_zoom, &RXfilters); + InitializeTransmitFilters(&TXfilters); + + // Loose bound: this documents what the DSP actually does. The bench measured + // 2.8 dB; if the DSP is much flatter than that the rest is downstream. + EXPECT_LT(hi-lo, 6.0f) << "digital transmit passband spread over 200-2200 Hz"; +} From 31293e6af51ea31dc84f17b4d42d8ae30fa8581e Mon Sep 17 00:00:00 2001 From: Oliver King Date: Fri, 31 Jul 2026 16:46:20 -0400 Subject: [PATCH 21/25] Bring the README release notes and the wiki current for V1.4.0 The V1.4.0 release notes predated digital mode entirely: no feature entry, the CAT table still at 29 commands rather than 32, the test count at 740, and the build instructions naming Dual Serial without saying that digital mode needs Serial + MIDI + Audio and that this leaves one CDC port with CAT on it. Three bug fixes were missing too - the bands[].mode sideband inversion, the optional TX; parameter, and the two digital-mode buffering fixes. Memory figures and the ctest sample output are re-measured rather than inherited. The wiki had the mirror-image gap. digital-mode.md was written and the pages that mention digital mode by name were updated, but four pages documenting code the same commit edited were not: hardware-state-machine (the DIGITAL_STATES composite in both switch tables, which digital-mode.md itself calls the load-bearing detail), persistent-config (the two new ED fields), overview (USBAudio.cpp, the ModeSm role) and development-backlog, which still listed #13 as not yet wired in and sequenced behind #14. Verified while checking: 779/779 unit tests pass, and both firmware configurations compile clean at 600 MHz o1lto - usb=serial2 and usb=serialmidiaudio. Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 2 +- README.md | 48 ++++++++++++++++--------- code/src/PhoenixSketch/BuildInfo.h | 4 +-- wiki/firmware/hardware-state-machine.md | 15 ++++++-- wiki/firmware/overview.md | 9 ++--- wiki/firmware/persistent-config.md | 4 +-- wiki/index.md | 3 +- wiki/log.md | 33 +++++++++++++++++ wiki/roadmap/development-backlog.md | 15 ++++---- 9 files changed, 97 insertions(+), 36 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 29ef92f..c81974a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -15,7 +15,7 @@ This is the **Phoenix SDR (Software Defined Radio)** project - firmware for a Te ### Key Features - Dual VFO (Variable Frequency Oscillator) operation -- SSB (Single Sideband) and CW (Morse Code) modes +- SSB (Single Sideband), CW (Morse Code), and DIGITAL (USB audio, for FT8 etc.) modes - Real-time digital signal processing - State machine-controlled hardware management - CAT (Computer Aided Transceiver) control interface diff --git a/README.md b/README.md index 2ccf697..26cd2ce 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ Some of the features of the T41 V12 hardware running the Phoenix firmware: * Receive and transmit audio equalizers. * Automated calibration routines for receive IQ balance, transmit IQ balance, transmit carrier nulling, and PA output power. * Selectable sample rate: 192 or 176.4 ksps, chosen at run time and persisted, with the audio filters redesigned on each change so their frequencies do not move. +* Digital mode: bi-directional USB audio for FT8 and the other WSJT-X modes, with no external sound card and no resampling. * CAT control. The T41-EP is a fully open-source radio. This repository hosts the transceiver software, licensed under GPLV3 (see LICENSE file). The hardware designs are hosted on Bill-K9HZ's [GitHub repository](https://github.com/DRWJSCHMIDT/T41/tree/main/T41_V012_Files). The primary forum for discussions on the T41-EP radio is on [Groups.io](https://groups.io/g/SoftwareControlledHamRadio/topics). @@ -64,6 +65,13 @@ The mapping of the buttons to various functions is defined in `code/src/PhoenixS ### Major New Features +**Digital Mode: USB Audio for FT8 and the Other WSJT-X Modes** +A third operating mode alongside SSB and CW. In receive the demodulated audio is streamed to the PC over USB audio (and still to the speaker); in transmit the audio source is the PC instead of the microphone. Enter it by cycling the mode button (SSB → CW → DIGITAL) or with the new `DG` CAT command; WSJT-X keys the radio over CAT in the normal way. + +No resampler and no modified Teensy core file are needed, because at 176.4 ksps the receive chain's Fs/4 audio tap *is* 44,100 Hz — the fixed rate of the Teensy USB audio endpoint — and the audio library's graph clock is exactly 4× the USB block rate. Entering digital mode therefore forces 176.4 ksps and leaving restores the previous rate. `USBAudio.cpp` keeps the stock `AudioInputUSB`/`AudioOutputUSB` objects but drives them from a 4:1 pacer rather than from the I²S-clocked audio graph. + +This mode requires the **Serial + MIDI + Audio** USB type (see the Arduino build settings below). In a build without a USB audio interface the firmware compiles and runs exactly as before, with the DIGITAL leg simply absent from the mode cycle. + **Selectable Sample Rate (192 or 176.4 ksps)** The radio's sample rate can now be changed while it is running, from the menu or over CAT with the new `SR` command, and the choice is persisted across power cycles. `ChangeSampleRate()` reconfigures the I²S clock and rebuilds the entire DSP chain. @@ -75,8 +83,8 @@ The CW audio filters, the 14 equaliser cells, the CW decoder input filter, and t **Rapid-Tune Audio Mute and Spectrum Freeze** Spinning the Center Tune or Fine Tune encoder quickly reprograms the VFO on every pass of the main loop, producing audible glitches and a jerky spectrum. With `MUTE_ON_RAPID_TUNE` enabled (the default), rapid tuning is detected and the audio is muted and the spectrum/waterfall redraw paused until tuning stops. Comment out the `#define` in `Config.h` to restore the old behaviour. -**CAT Control of the DSP Settings** -Four new commands, bringing the table to 29: `SR` (sample rate), `CF` (CW audio filter index), `EQ` (receive equaliser cell) and `FL` (DSP filter low cut — the mirror of the existing `FW` high cut). These were added so the filters could be measured on real hardware using a script. They are not standard CAT keywords. +**CAT Control of the DSP Settings and Digital Mode** +Seven new commands, bringing the table to 32. Four control the DSP: `SR` (sample rate), `CF` (CW audio filter index), `EQ` (receive equaliser cell) and `FL` (DSP filter low cut — the mirror of the existing `FW` high cut); these were added so the filters could be measured on real hardware using a script. Three serve digital mode: `DG` (enter/leave), `DR` (USB receive level) and `DS` (read-only transmit-path counters). None of the seven is a standard CAT keyword. **Hardware-in-the-Loop Filter Test Suites** `code/tools/filter_hil/` is an automated measurement suite for the receive DSP filters on the actual radio, at every sample rate, using an Analog Discovery 2 to inject a quadrature tone into the I/Q inputs and read the demodulated audio off the speaker. @@ -88,6 +96,9 @@ A new `wiki/` directory holds an interlinked reference covering the firmware mod ### Bug Fixes +- **Sideband selection was inverted on bands whose default is the other sideband.** `SetModulation()` wrote `bands[].mode` as well as `ED.modulation[]`, but `bands[].mode` is the band *default* against which `InitFilterMask()` measures its passband mirroring. Making the default agree with the request switched the mirroring off, so on 40 m selecting USB actually tuned the radio LSB while the display went on saying USB. `MD_read`/`IF_read` read the same field and so reported the band default rather than the mode in use. This is the other half of the `MD` fix listed below: the earlier fix made `MD` write `ED.modulation[]`, this one stops it from also writing the band default that the mirroring is measured against. The front-panel DEMODULATION button was never affected — it only ever wrote `ED.modulation[]`. +- **`TX;` without a parameter.** The TS-480 spec makes P1 optional, and Hamlib picks between `TX;`, `TX0;` and `TX1;` according to the configured PTT type, so the radio keyed for some clients and silently refused for others. All forms of `TX` and `RX` are now accepted. +- **Digital-mode audio buffering** (found on the bench). The USB play queue was never prefilled, giving 147 dropouts per 12 s of receive; and the transmit record queue was started for all of digital mode but drained only while transmitting, so it sat at its 209-block ceiling and held roughly 418 of the 500 audio blocks. Bounding it improved transmit spurs by 47 dB — and, because it had been starving the shared audio pool, improved receive second-harmonic distortion by 17.5 dB and the receive noise floor by 16 dB. - **Three long-standing CAT bugs.** `MD` set the band's mode but never `ED.modulation[]`, and because `InitFilterMask()` compares the two and treats a difference as deliberate, `MD` did not change the demodulator but mirrored the receive passband. `MD1`/`MD2` could not escape CW mode, so a CAT client could enter CW and never leave. `FW;` was unreadable because the command declared equal set and read lengths, which makes the read handler unreachable. `MD4` now selects AM, which was previously unreachable. - **NaN values leaking out of uninitialised DMAMEM.** `ResetDSP()` existed but was never actually called during signal-processing initialisation, so the DMAMEM arrays could be read before being zeroed. - **The blue filter bar** on the spectrum display and the band edges on the audio display are drawn in the correct places (reported by Wolfgang Fiebig). @@ -100,7 +111,8 @@ A new `wiki/` directory holds an interlinked reference covering the firmware mod - Frequency units renamed throughout from dHz to **cHz** (centi-Hz, Hz × 100), which is what the code always actually used. - Faster encoder handling, and spectrum artifacts while tuning fixed. - `BuildInfo.h` is stamped automatically by a pre-commit hook, which is itself versioned in the repository so every clone gets it. -- Unit tests grown from 699 to 740, including a suite that checks each generated filter against the reference table it replaced and that every corner holds across a rate change. +- Unit tests grown from 699 to 779, including a suite that checks each generated filter against the reference table it replaced and that every corner holds across a rate change, and a suite covering the digital-mode state transitions and CAT commands. +- Two new persisted settings, `digitalDriveLevel` and `digitalRxLevel`, with menu entries under Microphone options ("USB drive", "USB RX level"). ## V1.3 Release Notes @@ -275,7 +287,9 @@ We don't want button presses to change the hardware state at random, unspecified ## Remote control -The radio will provide two serial interfaces over USB. The first, at a baud rate of 115200, prints debug messages. The second, at a baud rate of 38400, implements CAT control with a partial implementation of the Kenwood TS-480 CAT Interface. +Built with the **Dual Serial** USB type, the radio provides two serial interfaces over USB. The first, at a baud rate of 115200, prints debug messages. The second, at a baud rate of 38400, implements CAT control with a partial implementation of the Kenwood TS-480 CAT Interface. + +Built with **Serial + MIDI + Audio** — the USB type digital mode needs — Teensyduino offers only one CDC port, so CAT moves to that first (and only) port and the debug output is compiled out to keep it from corrupting the CAT stream. Point your CAT client at the first port in that configuration. # Build environment @@ -300,7 +314,7 @@ The libraries to install using this process are: Configure the Arduino IDE to compile with the following settings: -* Dual Serial +* USB type: **Serial + MIDI + Audio** if you want digital mode (FT8 etc.), otherwise **Dual Serial**. See the note under Remote control above — the choice determines which port carries CAT. * 600 MHz * Fast with LTO @@ -308,9 +322,9 @@ You should see memory usage in the region of the figures below when compilation are indicative rather than exact — they move with every release, and with your `Config.h` options: ``` Memory Usage on Teensy 4.1: - FLASH: code:287164, data:75372, headers:9172 free for files:7754756 - RAM1: variables:127136, code:283976, padding:10936 free for local variables:102240 - RAM2: variables:300480 free for malloc/new:223808 + FLASH: code:302828, data:78444, headers:8868 free for files:7736324 + RAM1: variables:139744, code:299672, padding:28008 free for local variables:56864 + RAM2: variables:302528 free for malloc/new:221760 ``` ## StateSmith @@ -345,16 +359,16 @@ This will compile and run the unit test programs. You should see an output that ```bash ... -737/740 Test #737: PowerCalibrationTest.FitPowerCurve_RealWorldData .............................. Passed 0.01 sec - Start 738: PowerCalibrationWalkthroughTest.CompleteCalibrationAllBands -738/740 Test #738: PowerCalibrationWalkthroughTest.CompleteCalibrationAllBands ................... Passed 1.75 sec - Start 739: PowerCalibrationWalkthroughTest.RemeasuringDataPoints_StateRemainsCorrect -739/740 Test #739: PowerCalibrationWalkthroughTest.RemeasuringDataPoints_StateRemainsCorrect ..... Passed 0.55 sec - Start 740: PowerCalibrationWalkthroughTest.StateTransitions_ResetBehavior -740/740 Test #740: PowerCalibrationWalkthroughTest.StateTransitions_ResetBehavior ................ Passed 0.60 sec +776/779 Test #776: PowerCalibrationTest.FitPowerCurve_RealWorldData .............................. Passed 0.01 sec + Start 777: PowerCalibrationWalkthroughTest.CompleteCalibrationAllBands +777/779 Test #777: PowerCalibrationWalkthroughTest.CompleteCalibrationAllBands ................... Passed 1.75 sec + Start 778: PowerCalibrationWalkthroughTest.RemeasuringDataPoints_StateRemainsCorrect +778/779 Test #778: PowerCalibrationWalkthroughTest.RemeasuringDataPoints_StateRemainsCorrect ..... Passed 0.54 sec + Start 779: PowerCalibrationWalkthroughTest.StateTransitions_ResetBehavior +779/779 Test #779: PowerCalibrationWalkthroughTest.StateTransitions_ResetBehavior ................ Passed 0.60 sec -100% tests passed, 0 tests failed out of 740 +100% tests passed, 0 tests failed out of 779 -Total Test time (real) = 76.35 sec +Total Test time (real) = 91.50 sec ``` diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index c8ec97b..8294cca 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -14,7 +14,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "9baf83d" -#define BUILD_TIMESTAMP "2026-07-31 16:46:12" +#define GIT_COMMIT_HASH "f58d443" +#define BUILD_TIMESTAMP "2026-07-31 16:46:20" #endif // BUILDINFO_H diff --git a/wiki/firmware/hardware-state-machine.md b/wiki/firmware/hardware-state-machine.md index 1c1c918..2a252e0 100644 --- a/wiki/firmware/hardware-state-machine.md +++ b/wiki/firmware/hardware-state-machine.md @@ -3,7 +3,7 @@ title: Hardware & Calibration Coordinator (HardwareSm) type: module status: draft created: 2026-06-08 -updated: 2026-06-08 +updated: 2026-07-31 tags: [hardware, coordinator, relays, tr-switching, calibration, vfo, statesmith] source_refs: [] related: ["[[overview]]", "[[state-machine-architecture]]", "[[mode-state-machine]]", "[[tune-frequency-control]]", "[[rf-board]]", "[[filter-boards]]", "[[iq-imbalance-correction]]", "[[persistent-config]]"] @@ -44,8 +44,8 @@ Maps mode → RF board state, then `HandleRFHardwareStateChange()` does the phys | RFHardwareState | ModeSm states that map to it | |---|---| -| `RFReceive` | SSB_RECEIVE, CW_RECEIVE, CALIBRATE_FREQUENCY, CALIBRATE_OFFSET_SPACE, CALIBRATE_TX_IQ_SPACE | -| `RFTransmit` | SSB_TRANSMIT, CALIBRATE_OFFSET_MARK | +| `RFReceive` | SSB_RECEIVE, CW_RECEIVE, DIGITAL_RECEIVE, **DIGITAL_STATES**, CALIBRATE_FREQUENCY, CALIBRATE_OFFSET_SPACE, CALIBRATE_TX_IQ_SPACE | +| `RFTransmit` | SSB_TRANSMIT, DIGITAL_TRANSMIT, CALIBRATE_OFFSET_MARK | | `RFCWMark` (key down) | CW_TRANSMIT_MARK/DIT_MARK/DAH_MARK, CALIBRATE_POWER_MARK | | `RFCWSpace` (key up) | CW_TRANSMIT_SPACE/KEYER_SPACE/KEYER_WAIT, CALIBRATE_POWER_SPACE | | `RFCalReceiveIQ` | CALIBRATE_RX_IQ | @@ -70,6 +70,15 @@ in [[tune-frequency-control]]. The per-state frequency formulas and the SSB-TX 3 monitor trick are documented there. Calibration tune states place the VFOs specially (e.g. `TuneForReceiveIQCalibration` puts the test tone Fs/4 from the LO, `HardwareSm.cpp:605`). +[[digital-mode]] adds no tune state of its own: `DIGITAL_RECEIVE` → `TuneReceive` and +`DIGITAL_TRANSMIT` → `TuneSSBTX`, since digital transmit *is* an SSB transmission with the +audio arriving over USB. What it does add is the **composite** `DIGITAL_STATES` in the receive +group of both this function and `UpdateRFHardwareState()`. `EnterDigitalMode()`/ +`ExitDigitalMode()` are the composite's entry/exit actions and call `ChangeSampleRate()`, which +ends in `UpdateTuneState()` while `state_id` is still the composite — the leaf has not been +entered yet. Without those cases it falls to `default:` and reprograms the VFO from a stale tune +state on every entry and exit (`HardwareSm.cpp:727-741`). + ## 3. Calibration orchestration Four routines, each a hand-written **partial that wraps a StateSmith-generated sub-machine** diff --git a/wiki/firmware/overview.md b/wiki/firmware/overview.md index 83231fa..d5a5f38 100644 --- a/wiki/firmware/overview.md +++ b/wiki/firmware/overview.md @@ -3,10 +3,10 @@ title: Firmware Architecture Overview type: overview status: draft created: 2026-06-08 -updated: 2026-07-29 +updated: 2026-07-31 tags: [architecture, state-machines, dsp, teensy] source_refs: [] -related: ["[[main-loop]]", "[[mode-state-machine]]", "[[ui-state-machine]]", "[[tune-frequency-control]]", "[[hardware-state-machine]]", "[[rf-board]]", "[[filter-boards]]", "[[dsp-chain]]", "[[display-subsystem]]", "[[front-panel]]", "[[cat-control]]", "[[persistent-config]]", "[[code-heritage]]", "[[hardware-platform]]", "[[i2c-bus-map]]", "[[sample-rate-switching]]", "[[runtime-filter-design]]"] +related: ["[[main-loop]]", "[[mode-state-machine]]", "[[digital-mode]]", "[[ui-state-machine]]", "[[tune-frequency-control]]", "[[hardware-state-machine]]", "[[rf-board]]", "[[filter-boards]]", "[[dsp-chain]]", "[[display-subsystem]]", "[[front-panel]]", "[[cat-control]]", "[[persistent-config]]", "[[code-heritage]]", "[[hardware-platform]]", "[[i2c-bus-map]]", "[[sample-rate-switching]]", "[[runtime-filter-design]]"] --- # Firmware Architecture Overview @@ -61,7 +61,7 @@ Phoenix is unusually state-machine-heavy: **six StateSmith-generated** machines | Machine | File | Generated? | Role | |---|---|---|---| -| ModeSm | `ModeSm.cpp/h` | ✔ StateSmith | Operating mode: SSB/CW × RX/TX, iambic keyer, calibration entry | +| ModeSm | `ModeSm.cpp/h` | ✔ StateSmith | Operating mode: SSB/CW/DIGITAL × RX/TX, iambic keyer, calibration entry | | UISm | `UISm.cpp/h` | ✔ StateSmith | Screen/menu navigation (SPLASH→HOME→menus) | | PowerCalSm | `PowerCalSm.cpp/h` | ✔ StateSmith | Power-amplifier calibration sub-routine | | ReceiveIQCalSm | `ReceiveIQCalSm.cpp/h` | ✔ StateSmith | RX I/Q balance calibration | @@ -98,7 +98,8 @@ list and queue semantics. (encoders/buttons). **Signal processing** — [[dsp-chain]] (DSP.cpp routing/AGC, DSP_FFT spectrum, DSP_FIR -filters, DSP_Noise NR, DSP_CWProcessing), plus MainBoard_AudioIO codec interface. +filters, DSP_Noise NR, DSP_CWProcessing), plus MainBoard_AudioIO codec interface and +`USBAudio.cpp`, the 4:1-paced USB audio transport used by [[digital-mode]]. **User interface** — [[display-subsystem]] (RA8875 12-pane layout, home/menus/calibration screens), [[ui-state-machine]]. diff --git a/wiki/firmware/persistent-config.md b/wiki/firmware/persistent-config.md index 87dccfd..fb2d6fb 100644 --- a/wiki/firmware/persistent-config.md +++ b/wiki/firmware/persistent-config.md @@ -3,7 +3,7 @@ title: Persistent Configuration (ED struct, Storage, ParamSave) type: module status: draft created: 2026-06-08 -updated: 2026-07-29 +updated: 2026-07-31 tags: [config, ed-struct, littlefs, sdcard, json, persistence, globals, bands, sample-rate] source_refs: [] related: ["[[overview]]", "[[main-loop]]", "[[tune-frequency-control]]", "[[hardware-state-machine]]", "[[iq-imbalance-correction]]", "[[dsp-chain]]", "[[sample-rate-switching]]"] @@ -21,7 +21,7 @@ operating configuration and calibration**, with sensible inline defaults. Field | Group | Fields (selected) | |---|---| -| Audio / DSP | `agc`, `audioVolume`, `rfGainAllBands_dB`, `nrOptionSelect`, `ANR_notchOn`, `currentMicGain`, **`sampleRate`** | +| Audio / DSP | `agc`, `audioVolume`, `rfGainAllBands_dB`, `nrOptionSelect`, `ANR_notchOn`, `currentMicGain`, **`sampleRate`**, `digitalDriveLevel`, `digitalRxLevel` | | Tuning | `activeVFO`, `currentBand[2]`, `centerFreq_Hz[2]`, `fineTuneFreq_Hz[2]`, `stepFineTune`, `freqIncrement`, `freqCorrectionFactor`, `lastFrequencies[band][3]` | | Modulation/CW | `modulation[2]`, `keyType`, `currentWPM`, `keyerFlip`, `CWToneIndex`, `CWFilterIndex`, `sidetoneVolume`, `decoderFlag` | | Spectrum/display | `spectrum_zoom`, `spectrumScale`, `spectrumNoiseFloor[band]`, `spectrumFloorAuto`, `dbm_calibration[band]` (S-meter) | diff --git a/wiki/index.md b/wiki/index.md index c9e6aee..a18796c 100644 --- a/wiki/index.md +++ b/wiki/index.md @@ -3,10 +3,11 @@ title: Phoenix Wiki Index type: index status: stub created: 2026-06-08 -updated: 2026-07-29 +updated: 2026-07-31 --- + diff --git a/wiki/log.md b/wiki/log.md index 59b192a..ae1a20c 100644 --- a/wiki/log.md +++ b/wiki/log.md @@ -1069,3 +1069,36 @@ the audio pool was degrading both directions. **Method note:** before believing a close-in spur, count the FFT bins. Anything within ~5 bins of the carrier is skirt until proven otherwise. I asserted a spur at 3.5 bins twice. + +## [2026-07-31] lint | Pre-release consistency pass (wiki + README) + +Checked the wiki and the README release notes against the tree ahead of making the repository +public. 49 pages, no orphans, no broken navigational wikilinks (the four unresolved ones are +historical prose inside this log and the schema examples in [[CLAUDE]]). + +**Found stale and fixed.** [[digital-mode]] was written as a page but not integrated into the +pages whose *code* it changed: + +- [[development-backlog]] still listed #13 as "under active debugging; not yet wired in" and + sequenced it behind [[openaudio-library]] (#14). #13 shipped first and without #14, so the + two-item "audio-plumbing track" no longer exists. +- [[hardware-state-machine]] omitted the DIGITAL states from both switch tables — including the + `DIGITAL_STATES` composite case, which [[digital-mode]] itself calls the load-bearing gotcha. +- [[persistent-config]] was missing `digitalDriveLevel` / `digitalRxLevel`. +- [[overview]] had no `USBAudio.cpp` in the module map and described ModeSm as SSB/CW only. + +**Lesson for the next feature page.** Writing the feature's own page and updating the pages it +*touches* are separate jobs, and the second is the one that gets skipped: the 2026-07-30/31 +commit updated 8 wiki pages, all of them ones that mention digital mode by name, and none of the +four above, which describe code the same commit edited. Diffing the commit's source-file list +against the pages that document those files finds this in a minute. + +**README.** The V1.4.0 release notes predated digital mode entirely — no feature entry, CAT +table still at 29 commands (it is 32), test count at 740 (776), and the build instructions named +Dual Serial without mentioning that digital mode needs Serial + MIDI + Audio and moves CAT to the +first port. Also missing from the bug list: the `bands[].mode` sideband inversion, the optional +`TX;` parameter, and the two digital-mode buffering fixes. + +Verified while checking: both firmware configurations compile clean (`usb=serial2` and +`usb=serialmidiaudio`, 600 MHz, o1lto), and 779/779 unit tests pass — 776 committed plus 3 +uncommitted transmit-chain tests in the working tree. diff --git a/wiki/roadmap/development-backlog.md b/wiki/roadmap/development-backlog.md index 5d634fe..525ae41 100644 --- a/wiki/roadmap/development-backlog.md +++ b/wiki/roadmap/development-backlog.md @@ -3,10 +3,10 @@ title: Development Backlog type: roadmap status: draft created: 2026-06-09 -updated: 2026-06-09 +updated: 2026-07-31 tags: [development, backlog, features, github-issues, index] source_refs: [] -related: ["[[documentation-todos]]", "[[transmit-spectrum]]", "[[manual-notch]]", "[[usb-audio]]", "[[openaudio-library]]"] +related: ["[[documentation-todos]]", "[[transmit-spectrum]]", "[[manual-notch]]", "[[usb-audio]]", "[[digital-mode]]", "[[openaudio-library]]"] --- # Development Backlog @@ -17,21 +17,24 @@ describing **what needs to be done and the current state** — these are *task d not solution designs*. The [[documentation-todos]] page tracks wiki/documentation work separately. -## Open issues (as of 2026-06-09) +## Open issues (table as of 2026-06-09; #13 closed out 2026-07-31) | Issue | Task | Status in code | Effort | Page | |---|---|---|---|---| | [#10](https://github.com/KI3P/Phoenix/issues/10) | See the transmit spectrum | **Largely built** (SSB + dual-VFO); needs verify + edge cases | Low–Med | [[transmit-spectrum]] | | [#11](https://github.com/KI3P/Phoenix/issues/11) | Manual notch filter | Auto-notch scaffolding exists; manual mode unimplemented | Med | [[manual-notch]] | -| [#13](https://github.com/KI3P/Phoenix/issues/13) | Bi-directional USB audio | Under active debugging (in-tree docs); not yet wired in | Med–High | [[usb-audio]] | +| ~~[#13](https://github.com/KI3P/Phoenix/issues/13)~~ | Bi-directional USB audio | **Done (2026-07-31)** — shipped as [[digital-mode]], verified on the bench in both directions | — | [[usb-audio]] *(superseded)* | | [#14](https://github.com/KI3P/Phoenix/issues/14) | Change OpenAudio library | Foundational; proposal to evaluate | High | [[openaudio-library]] | ## Two natural tracks - **DSP/UI feature track** — [[transmit-spectrum]] (#10) and [[manual-notch]] (#11). Both *extend existing partial backends*, are independent, and are lower-risk. Good near-term work. -- **Audio-plumbing track** — [[openaudio-library]] (#14) → [[usb-audio]] (#13). Foundational and - coupled; #14 likely enables/eases #13. Higher risk; design carefully and sequence together. +- **Audio-plumbing track** — [[openaudio-library]] (#14). This was originally a two-item track + sequenced #14 → [[usb-audio]] (#13), on the assumption that the library change would enable the + USB audio work. #13 shipped first and without it, as [[digital-mode]]: the stock Teensy + `AudioInputUSB`/`AudioOutputUSB` objects were reused and taken off the I2S-clocked graph rather + than replaced. #14 therefore stands alone, and no longer blocks anything. ## Notes - The wiki documentation effort surfaced that **#10 and #11 already have partial backends** — From 679466de592848b71cb73d451ad329fcdb9afb79 Mon Sep 17 00:00:00 2001 From: Oliver King Date: Mon, 3 Aug 2026 18:59:46 -0400 Subject: [PATCH 22/25] Fixed a bug in the display code where the Decoder text in the Status pane became large if the fine tune encoder was turned while the radio was in CW mode with decoder enabled. Thanks to Rick Price KN4AIE for reporting the bug! --- code/src/PhoenixSketch/BuildInfo.h | 4 +- .../PhoenixSketch/MainBoard_DisplayHome.cpp | 11 ++- code/test/Display_test.cpp | 78 +++++++++++++++++++ code/test/RA8875.h | 16 ++++ code/test/RA8875_mock.cpp | 34 ++++++-- 5 files changed, 134 insertions(+), 9 deletions(-) diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index 8294cca..da22445 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -14,7 +14,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "f58d443" -#define BUILD_TIMESTAMP "2026-07-31 16:46:20" +#define GIT_COMMIT_HASH "31293e6" +#define BUILD_TIMESTAMP "2026-08-03 18:59:46" #endif // BUILDINFO_H diff --git a/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp b/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp index 9fce83b..40a066c 100644 --- a/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp +++ b/code/src/PhoenixSketch/MainBoard_DisplayHome.cpp @@ -292,6 +292,12 @@ void DrawVFOPanes(void) { tft.print(freqBuffer); PaneVFOB.stale = false; } + + // The font source is sticky in the RA8875 library: setFontScale() does not clear a + // GFX font, only setFontDefault() does. These are the only panes that install one, so + // put the shared font state back before any other pane draws, otherwise those panes + // render their text in FreeSansBold and overflow their boxes. + tft.setFontDefault(); } /////////////////////////////////////////////////////////////////////////////// @@ -1732,9 +1738,11 @@ void UpdateAntennaSetting(void){ } void DrawSettingsPane(void) { + // The individual settings only set the font scale, so select the built-in font here + // for all of them rather than inheriting whatever font was last installed. + tft.setFontDefault(); if (PaneSettings.stale){ tft.fillRect(PaneSettings.x0, PaneSettings.y0, PaneSettings.width, PaneSettings.height, RA8875_BLACK); - tft.setFontDefault(); tft.setFontScale((enum RA8875tsize)1); column1x = 5.5*tft.getFontWidth(); column2x = 13.5*tft.getFontWidth(); @@ -1769,6 +1777,7 @@ void MorseCharacterDisplay() { if (!IsMorseCharacterBufferUpdated()) return; tft.fillRect(PaneStateOfHealth.x0, PaneStateOfHealth.y0, PaneStateOfHealth.width, PaneStateOfHealth.height+2, RA8875_BLACK); + tft.setFontDefault(); tft.setFontScale((enum RA8875tsize)1); tft.setTextColor(RA8875_WHITE); tft.setCursor(PaneStateOfHealth.x0, PaneStateOfHealth.y0); diff --git a/code/test/Display_test.cpp b/code/test/Display_test.cpp index 22109b3..f4a0248 100644 --- a/code/test/Display_test.cpp +++ b/code/test/Display_test.cpp @@ -9,6 +9,7 @@ #include #include "SDT.h" +#include "RA8875.h" // for the mock display's print log #include #include @@ -130,6 +131,83 @@ TEST_F(DisplayTest, MenuRedrawn) { } +/** + * The VFO panes are the only part of the home screen drawn in a GFX font + * (FreeSansBold). The font source is sticky in the RA8875 library - setFontScale() + * does not clear it, only setFontDefault() does - so if the VFO panes leave their + * font installed, every pane drawn afterwards that only sets a font scale renders + * its text in FreeSansBold and overflows its box. That was visible as the + * "Decoder:" line, and the decoded CW text, growing huge while the fine tune knob + * was turned in CW mode: the fine tune redraws the VFO panes, but the spectrum pane + * (which would otherwise have restored the default font) skips its redraw while the + * knob is spinning. + * + * Check the invariant directly: no text outside the two VFO panes is ever drawn in + * a GFX font. + */ +TEST_F(DisplayTest, HomeScreenFontIsNotLeakedOutOfTheVFOPanes) { + // The VFO panes occupy the top left of the screen: {5,5,280,50} and {300,5,220,40} + const uint16_t VFO_PANE_MAX_X = 525; + const uint16_t VFO_PANE_MAX_Y = 55; + + Q_in_L.setChannel(0); + Q_in_R.setChannel(1); + Q_in_L.clear(); + Q_in_R.clear(); + StartMillis(); + + InitializeStorage(); + InitializeFrontPanel(); + InitializeSignalProcessing(); + InitializeAudio(); + InitializeDisplay(); + InitializeRFHardware(); + + modeSM.vars.waitDuration_ms = CW_TRANSMIT_SPACE_TIMEOUT_MS; + modeSM.vars.ditDuration_ms = DIT_DURATION_MS; + ModeSm_start(&modeSM); + ED.agc = AGCOff; + ED.nrOptionSelect = NROff; + uiSM.vars.splashDuration_ms = 1; + UISm_start(&uiSM); + UpdateAudioIOState(); + start_timer1ms(); + + loop(); MyDelay(10); + ASSERT_EQ(uiSM.state_id, UISm_StateId_HOME); + + // Select CW mode + SetButton(TOGGLE_MODE); + SetInterrupt(iBUTTON_PRESSED); + loop(); MyDelay(10); + ASSERT_EQ(modeSM.state_id, ModeSm_StateId_CW_RECEIVE); + + RA8875ClearPrintLog(); + + // Turn the decoder on and off again, spinning the fine tune knob throughout. The + // spins are close enough together to latch the rapid-tuning state, which is what + // makes the spectrum pane skip the redraw that would have reset the font. + for (int i = 0; i < 6; i++) { + SetInterrupt(iFINETUNE_INCREASE); + loop(); MyDelay(2); + SetInterrupt(iFINETUNE_INCREASE); + loop(); MyDelay(2); + SetButton(DECODER_TOGGLE); + SetInterrupt(iBUTTON_PRESSED); + loop(); MyDelay(2); + } + + unsigned nprints = RA8875PrintLogSize(); + EXPECT_GT(nprints, 0u) << "no text was drawn - the test did not exercise the home screen"; + for (unsigned i = 0; i < nprints; i++) { + RA8875PrintRecord r = RA8875PrintLogEntry(i); + if (!r.customFont) continue; + EXPECT_TRUE((r.x <= VFO_PANE_MAX_X) && (r.y <= VFO_PANE_MAX_Y)) + << "text at (" << r.x << "," << r.y << ") was drawn in a GFX font left " + << "installed by the VFO panes"; + } +} + /** * Test IncrementVariable() with TYPE_I8 * Verifies that 8-bit integer variables are incremented correctly diff --git a/code/test/RA8875.h b/code/test/RA8875.h index 6b6c9f5..8b35d1b 100644 --- a/code/test/RA8875.h +++ b/code/test/RA8875.h @@ -96,6 +96,9 @@ class RA8875 { void updateScreen(); private: + // Test instrumentation - see RA8875ClearPrintLog() below + void recordPrint(); + uint8_t _cs; uint8_t _rst; uint8_t _font_scale; @@ -105,6 +108,19 @@ class RA8875 { const void* _custom_font; }; +// Test instrumentation (implemented by RA8875_mock.cpp). Every print() is logged +// along with the cursor position and whether a GFX font was installed at the time, +// so tests can check that each pane draws its text in the font it intends to. +struct RA8875PrintRecord { + uint16_t x; + uint16_t y; + bool customFont; + uint8_t fontScale; +}; +void RA8875ClearPrintLog(); +unsigned RA8875PrintLogSize(); +RA8875PrintRecord RA8875PrintLogEntry(unsigned index); + #ifdef USE_SDL_DISPLAY // Cleanup function for SDL resources - call at program exit void RA8875_SDL_Cleanup(); diff --git a/code/test/RA8875_mock.cpp b/code/test/RA8875_mock.cpp index 1d29f07..c917d0c 100644 --- a/code/test/RA8875_mock.cpp +++ b/code/test/RA8875_mock.cpp @@ -2,6 +2,7 @@ #include "Arduino.h" #include #include +#include RA8875::RA8875(uint8_t cs, uint8_t rst) : _cs(cs), _rst(rst), _font_scale(1), _cursor_x(0), _cursor_y(0), _text_color(RA8875_WHITE), _custom_font(nullptr) { } @@ -64,28 +65,49 @@ void RA8875::setFont(const void* font) { _custom_font = font; } +// Log of every print() made, for tests that check which font text was drawn in +static std::vector printLog; + +void RA8875ClearPrintLog() { + printLog.clear(); +} + +unsigned RA8875PrintLogSize() { + return (unsigned)printLog.size(); +} + +RA8875PrintRecord RA8875PrintLogEntry(unsigned index) { + if (index >= printLog.size()) + return {0, 0, false, 0}; + return printLog[index]; +} + +void RA8875::recordPrint() { + printLog.push_back({_cursor_x, _cursor_y, _custom_font != nullptr, _font_scale}); +} + void RA8875::print(const char* text) { - // Mock implementation - could log the text if needed for testing + recordPrint(); } void RA8875::print(const String& str) { - // Mock implementation - could log the text if needed for testing + recordPrint(); } void RA8875::print(int value) { - // Mock implementation - could log the value if needed for testing + recordPrint(); } void RA8875::print(int64_t value) { - // Mock implementation - could log the value if needed for testing + recordPrint(); } void RA8875::print(float value) { - // Mock implementation - could log the value if needed for testing + recordPrint(); } void RA8875::print(float value, int digits) { - // Mock implementation - could log the value if needed for testing + recordPrint(); } void RA8875::setFontDefault() { From ab696737a54c5f45b65251513fc57ed9832de60d Mon Sep 17 00:00:00 2001 From: Oliver King Date: Wed, 5 Aug 2026 17:54:11 -0400 Subject: [PATCH 23/25] Accept serial time sync when CAT shares the primary Serial port With the serial+midi+audio USB type there is only one CDC port, so CATSerial is Serial and CheckForCATSerialEvents() drains it before CheckForSerialTimeSync() ever runs. The PJRC time packet was therefore swallowed whole: the clock was never set, and because the packet has no ';' the orphaned bytes stayed in catCommand and prefixed the next real command, which came back "?;". Confirmed on the radio - a "T\n" followed by "FA;" answered "?;" instead of the frequency. The packet format is a PJRC standard and is unchanged on the wire. What changes is which reader sees it. CheckForCATSerialEvents() now treats a newline terminator as proof the bytes are not CAT traffic, since no Kenwood command contains one: a 'T' prefix hands the digits to the new shared ApplyTimeSyncDigits(), and anything else newline-terminated is discarded instead of corrupting the command after it. That second half also fixes CAT clients that end their commands with CRLF. CheckForSerialTimeSync() keeps its own byte loop for two-port builds but now shares the same validation, so both USB types accept exactly the same bytes. It is no longer called under AUDIO_INTERFACE, where it could only steal the tail of a packet the CAT reader is already handling. The "Time set:" confirmation is suppressed there too - on a shared port it would land inside the CAT client's response stream, the same reason Debug() is stubbed out in those builds. ApplyTimeSyncDigits() also checks every character is a digit. atoll() accepts a leading sign and stops at the first non-digit, which mattered little when only the dedicated reader could reach it but matters now that the CAT reader hands over arbitrary newline-terminated bytes. Verified on the radio in both USB types: the clock sets, and CAT answers normally immediately afterwards. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_016evrfRjUh8P1mviUCdXNJM --- code/src/PhoenixSketch/BuildInfo.h | 4 +- code/src/PhoenixSketch/CAT.cpp | 19 ++++++ code/src/PhoenixSketch/Loop.cpp | 63 +++++++++++++++--- code/src/PhoenixSketch/Loop.h | 12 ++++ code/test/CAT_test.cpp | 103 +++++++++++++++++++++++++++++ code/test/Loop_test.cpp | 14 ++++ 6 files changed, 204 insertions(+), 11 deletions(-) diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index da22445..45ab935 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -14,7 +14,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "31293e6" -#define BUILD_TIMESTAMP "2026-08-03 18:59:46" +#define GIT_COMMIT_HASH "679466d" +#define BUILD_TIMESTAMP "2026-08-05 17:54:11" #endif // BUILDINFO_H diff --git a/code/src/PhoenixSketch/CAT.cpp b/code/src/PhoenixSketch/CAT.cpp index fdafb7d..08a38d8 100644 --- a/code/src/PhoenixSketch/CAT.cpp +++ b/code/src/PhoenixSketch/CAT.cpp @@ -1132,6 +1132,13 @@ char *FL_read( char* cmd ){ * Reads characters from the CAT serial port, buffers them until a semicolon * terminator is received, then parses and executes the command via command_parser(). * Sends response back over the same port. Handles buffer overflow by clearing the buffer. + * + * A newline terminator instead means the buffered bytes are not CAT traffic, since + * no Kenwood command contains one. In a build with a USB audio interface this port + * is also the only CDC port, so that is how a PJRC time-sync packet arrives; it is + * handed to ApplyTimeSyncDigits(). Any other newline-terminated run of bytes is + * dropped. Both cases exist to keep foreign bytes from being prepended to the next + * real command, which would turn it into "?;". */ void CheckForCATSerialEvents(void){ int i; @@ -1177,6 +1184,18 @@ void CheckForCATSerialEvents(void){ Serial.println(); #endif // DEBUG_CAT } + }else if( c == '\n' || c == '\r' ){ + // Not CAT: no Kenwood command contains a newline. On a single-port + // build (USB audio, where CATSerial is Serial) this is how a PJRC + // time-sync packet arrives - 'T' + 10 digits + '\n' - because this + // reader drains the port before CheckForSerialTimeSync() could see + // it. Hand the digits over; anything else newline-terminated is + // discarded rather than left to corrupt the next real command. + if( catCommand[0] == 'T' && catCommandIndex > 0 ){ + ApplyTimeSyncDigits( &catCommand[1], (uint8_t)(catCommandIndex - 1) ); + } + catCommandIndex = 0; + memset( catCommand, 0, sizeof( catCommand )); }else{ catCommandIndex++; if( catCommandIndex >= 128 ){ diff --git a/code/src/PhoenixSketch/Loop.cpp b/code/src/PhoenixSketch/Loop.cpp index b01bbd2..1a1874d 100644 --- a/code/src/PhoenixSketch/Loop.cpp +++ b/code/src/PhoenixSketch/Loop.cpp @@ -1525,9 +1525,57 @@ void ShutdownTeensy(void){ // PC-side one-liner (Python 3): // python -c "import serial,time; s=serial.Serial('COMx',115200); s.write(('T'+str(int(time.time()))+'\n').encode()); s.close()" // Replace COMx with the Teensy USB serial port (e.g. COM6). +// +// Which routine reads the packet depends on the USB type. Without a USB audio +// interface there are two CDC ports and CheckForSerialTimeSync() below has +// Serial to itself. With AUDIO_INTERFACE there is only one, CATSerial is Serial, +// and CheckForCATSerialEvents() drains everything available before this could +// run - so there the CAT reader recognises the packet by its newline terminator +// and calls ApplyTimeSyncDigits() directly. The bytes on the wire are identical +// either way; only the reader that sees them differs. #define TIME_SYNC_HEADER 'T' #define TIME_SYNC_LEN 10 // digits in a Unix timestamp until ~year 2286 +/** + * Set both clocks from the digit field of a PJRC time-sync packet. + * + * Shared by the two readers that can receive the packet so that a build with a + * USB audio interface and a build without accept exactly the same bytes. + * + * @param digits Timestamp digits alone - no 'T' header, no terminator + * @param count Number of digits available + * @return true if the timestamp was valid and the clocks were set + */ +bool ApplyTimeSyncDigits(const char* digits, uint8_t count) { + if (count != TIME_SYNC_LEN) return false; + + // atoll() would accept a leading sign or embedded spaces and quietly stop at + // the first non-digit, so vet every character before trusting the value. The + // CAT reader hands over whatever arrived newline-terminated, which is not + // necessarily a timestamp. + for (uint8_t i = 0; i < count; i++) { + if (digits[i] < '0' || digits[i] > '9') return false; + } + + char tsbuf[TIME_SYNC_LEN + 1]; + memcpy(tsbuf, digits, count); + tsbuf[count] = '\0'; + + time_t t = (time_t)atoll(tsbuf); + if (t <= 1000000000UL) return false; // sanity: after ~2001 + + Teensy3Clock.set(t); + setTime(t); +#ifndef AUDIO_INTERFACE + // Only safe on a two-port build. Where CAT shares this port the confirmation + // would land in the middle of the CAT client's response stream - the same + // reason Debug() is stubbed out in those builds (see SDT.h). + Serial.print("Time set: "); + Serial.println((int64_t)t); +#endif + return true; +} + void CheckForSerialTimeSync(void) { static char tsbuf[TIME_SYNC_LEN + 2]; static uint8_t tsidx = 0; @@ -1541,15 +1589,7 @@ void CheckForSerialTimeSync(void) { memset(tsbuf, 0, sizeof(tsbuf)); } else if (collecting) { if (c == '\n' || c == '\r') { - if (tsidx == TIME_SYNC_LEN) { - time_t t = (time_t)atoll(tsbuf); - if (t > 1000000000UL) { // sanity: after ~2001 - Teensy3Clock.set(t); - setTime(t); - Serial.print("Time set: "); - Serial.println((int64_t)t); - } - } + ApplyTimeSyncDigits(tsbuf, tsidx); collecting = false; tsidx = 0; } else if (tsidx < TIME_SYNC_LEN) { @@ -1573,7 +1613,12 @@ FASTRUN void loop(void){ // Front-panel encoders/buttons are now drained by fpServiceTimer (1 ms, below // audio priority) instead of being polled here once per loop iteration. CheckForCATSerialEvents(); +#ifndef AUDIO_INTERFACE + // Only on a two-port build. With a USB audio interface CAT owns this port + // and has already drained it, so calling this could only steal the tail of a + // packet the CAT reader is handling; it recognises time packets itself. CheckForSerialTimeSync(); +#endif ConsumeInterrupt(); // Step 2: Perform signal processing diff --git a/code/src/PhoenixSketch/Loop.h b/code/src/PhoenixSketch/Loop.h index b538ac5..8cc4d5c 100644 --- a/code/src/PhoenixSketch/Loop.h +++ b/code/src/PhoenixSketch/Loop.h @@ -90,9 +90,21 @@ void PrependInterrupt(InterruptType i); * @note Packet format: 'T' + 10-digit Unix UTC timestamp + '\n' (or '\r') * @note On valid packet, sets the Teensy hardware RTC and TimeLib software clock * @note Non-blocking; drains the input buffer each call + * @note NOT called when CAT shares this port (AUDIO_INTERFACE); the CAT reader + * recognises the same packet there and hands it to ApplyTimeSyncDigits() */ void CheckForSerialTimeSync(void); +/** + * @brief Set both clocks from the digits of a PJRC time-sync packet + * @param digits The timestamp digits alone - no 'T' header, no terminator + * @param count Number of digits available + * @return true if the timestamp was valid and the clocks were set + * @note Shared by the two readers that can receive the packet, so a build with + * and a build without a USB audio interface accept exactly the same bytes + */ +bool ApplyTimeSyncDigits(const char* digits, uint8_t count); + /** * @brief Main program loop executed repeatedly while radio is powered on * @note FASTRUN annotation places function in RAM for maximum execution speed diff --git a/code/test/CAT_test.cpp b/code/test/CAT_test.cpp index 7659d6f..8d57ca3 100644 --- a/code/test/CAT_test.cpp +++ b/code/test/CAT_test.cpp @@ -3154,3 +3154,106 @@ TEST(CAT, DR_ParserReachesBothForms) { ED.digitalRxLevel = saved; } + +// ============================================================================ +// Time-sync packets on the CAT port +// +// In a build with a USB audio interface there is one CDC port, CATSerial is +// Serial, and CheckForCATSerialEvents() drains it before CheckForSerialTimeSync() +// could run. The CAT reader therefore has to recognise the PJRC packet itself - +// 'T' + 10 digits + '\n', unchanged on the wire - and everything else that +// arrives newline-terminated has to be discarded rather than prepended to the +// next command. These tests drive CATSerial directly, so they exercise that path +// in either build. +// ============================================================================ + +// Helper: feed bytes to the CAT port and process them in one call. +static void runCATSerial(const char* bytes) { + Teensy3Clock.wasSet = false; + Teensy3Clock.lastSet = 0; + CATSerial.clearBuffer(); + CATSerial.feedData(bytes); + CheckForCATSerialEvents(); +} + +TEST(CAT, TimeSyncPacketOnCATPortSetsClock) { + runCATSerial("T1748476800\n"); + EXPECT_TRUE(Teensy3Clock.wasSet) + << "the CAT reader owns the port on a USB-audio build and must honour " + "the time packet itself"; + EXPECT_EQ(Teensy3Clock.lastSet, (time_t)1748476800); +} + +TEST(CAT, TimeSyncPacketOnCATPortAcceptsCarriageReturn) { + runCATSerial("T1748476800\r"); + EXPECT_TRUE(Teensy3Clock.wasSet); + EXPECT_EQ(Teensy3Clock.lastSet, (time_t)1748476800); +} + +TEST(CAT, TimeSyncPacketDoesNotCorruptTheNextCATCommand) { + // The bug this fixes: the packet's bytes stayed in catCommand, so the next + // command parsed as "T1748476800\nFA00014200000;" and came back "?;". + int64_t savedFreq = ED.centerFreq_Hz[VFO_A]; + int32_t savedBand = ED.currentBand[VFO_A]; + + runCATSerial("T1748476800\nFA00014200000;"); + ConsumeInterrupt(); + EXPECT_TRUE(Teensy3Clock.wasSet); + EXPECT_EQ(ED.centerFreq_Hz[VFO_A], 14200000L + SR[SampleRate].rate/4) + << "a command arriving straight after a time packet must still execute"; + + ED.centerFreq_Hz[VFO_A] = savedFreq; + ED.currentBand[VFO_A] = savedBand; +} + +TEST(CAT, TimeSyncPacketRejectsMalformedTimestamps) { + runCATSerial("T12345\n"); // too few digits + EXPECT_FALSE(Teensy3Clock.wasSet); + + runCATSerial("T17484768000\n"); // too many digits + EXPECT_FALSE(Teensy3Clock.wasSet); + + runCATSerial("T0000000001\n"); // parses, but fails the ~2001 sanity check + EXPECT_FALSE(Teensy3Clock.wasSet); + + runCATSerial("Tabcdefghij\n"); // right length, not digits + EXPECT_FALSE(Teensy3Clock.wasSet); + + runCATSerial("T -174847680\n"); // atoll() would stop at the space + EXPECT_FALSE(Teensy3Clock.wasSet); + + runCATSerial("1748476800\n"); // no 'T' header + EXPECT_FALSE(Teensy3Clock.wasSet); +} + +TEST(CAT, TCommandsAreStillCATCommands) { + // "TX;" and "TX0;" start with 'T' too. They are semicolon-terminated, so the + // newline branch must never see them. + ModeSm_start(&modeSM); + modeSM.state_id = ModeSm_StateId_SSB_RECEIVE; + + runCATSerial("TX;"); + ConsumeInterrupt(); + EXPECT_FALSE(Teensy3Clock.wasSet) + << "TX; must not be mistaken for a time packet"; + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_SSB_TRANSMIT); + + runCATSerial("RX;"); + ConsumeInterrupt(); + EXPECT_EQ(modeSM.state_id, ModeSm_StateId_SSB_RECEIVE); +} + +TEST(CAT, StrayNewlineTerminatedBytesAreDiscarded) { + // A client that ends its commands with CRLF used to leave the line ending in + // catCommand, which then prefixed - and broke - the following command. + int64_t savedFreq = ED.centerFreq_Hz[VFO_A]; + int32_t savedBand = ED.currentBand[VFO_A]; + + runCATSerial("FA00014200000;\r\nFA00007100000;"); + ConsumeInterrupt(); + EXPECT_EQ(ED.centerFreq_Hz[VFO_A], 7100000L + SR[SampleRate].rate/4) + << "a CRLF between commands must not break the command after it"; + + ED.centerFreq_Hz[VFO_A] = savedFreq; + ED.currentBand[VFO_A] = savedBand; +} diff --git a/code/test/Loop_test.cpp b/code/test/Loop_test.cpp index a1974c1..7b8e3ee 100644 --- a/code/test/Loop_test.cpp +++ b/code/test/Loop_test.cpp @@ -2141,6 +2141,20 @@ TEST(Loop, TimeSyncNewHeaderResetsCollection) { EXPECT_EQ(Teensy3Clock.lastSet, (time_t)1748476800); } +TEST(Loop, TimeSyncRejectsNonDigitTimestamp) { + // Right length, wrong characters. atoll() alone would return 0 here and the + // sanity check would catch it, but the CAT reader feeds ApplyTimeSyncDigits() + // arbitrary newline-terminated bytes, so the digit check has to be explicit. + runSerialTimeSync("Tabcdefghij\n"); + EXPECT_FALSE(Teensy3Clock.wasSet); +} + +TEST(Loop, TimeSyncRejectsSignedTimestamp) { + // atoll() would stop at the space and hand back a plausible-looking number. + runSerialTimeSync("T -174847680\n"); + EXPECT_FALSE(Teensy3Clock.wasSet); +} + TEST(Loop, TimeSyncRejectsOverrunPacket) { // 11 digits then newline: tsidx hits TIME_SYNC_LEN before newline, // 11th digit triggers overrun branch, clock must not be set. From e2f01802714a1cd8243b5ebd9de1194243eaf15e Mon Sep 17 00:00:00 2001 From: Oliver King Date: Wed, 5 Aug 2026 17:54:26 -0400 Subject: [PATCH 24/25] Add cross-platform scripts to set the radio clock from the PC set_radio_time.py (Python 3 + pyserial, so Linux/macOS/Windows) and Set-RadioTime.ps1 (Windows PowerShell 5.1, no modules needed, for operators who would rather not install Python). Both send the standard PJRC time packet and find the radio by PJRC's USB vendor ID, and both align transmission to a second boundary so the radio's seconds tick with the PC's. The radio applies no time-zone offset of its own: the timestamp goes straight into TimeLib and the display reads hour()/minute()/second() back out of it, so it shows the UTC decomposition of whatever number it is given. MY_TIMEZONE in Config.h is only a label - "EST: " is pasted in front of the digits as a string and shifts nothing. So the scripts send epoch + the local UTC offset by default, taken from the OS time-zone database so DST is handled, and --utc/-Utc sends a true UTC stamp for anyone running MY_TIMEZONE "UTC: ". --offset/-Offset overrides the zone and --list/-List shows candidate ports. The README explains the offset question with a table mapping the Config.h setting to the right invocation, and notes that this clock is cosmetic - the display is its only consumer, and WSJT-X takes its timing from the PC - so nobody mistakes it for an FT8 decode fix. The Python script is tested against the radio in both USB types, including the offset forms, the argument errors, a missing port, and the suppressed confirmation on a shared port. The PowerShell script is UNTESTED: there is no PowerShell on the development machine, so it has only been reviewed by inspection. It needs a run on Windows before anyone relies on it. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_016evrfRjUh8P1mviUCdXNJM --- code/src/PhoenixSketch/BuildInfo.h | 4 +- code/tools/README.md | 76 ++++++++ code/tools/Set-RadioTime.ps1 | 266 ++++++++++++++++++++++++++ code/tools/set_radio_time.py | 293 +++++++++++++++++++++++++++++ 4 files changed, 637 insertions(+), 2 deletions(-) create mode 100644 code/tools/Set-RadioTime.ps1 create mode 100644 code/tools/set_radio_time.py diff --git a/code/src/PhoenixSketch/BuildInfo.h b/code/src/PhoenixSketch/BuildInfo.h index 45ab935..a568a3d 100644 --- a/code/src/PhoenixSketch/BuildInfo.h +++ b/code/src/PhoenixSketch/BuildInfo.h @@ -14,7 +14,7 @@ #ifndef BUILDINFO_H #define BUILDINFO_H -#define GIT_COMMIT_HASH "679466d" -#define BUILD_TIMESTAMP "2026-08-05 17:54:11" +#define GIT_COMMIT_HASH "ab69673" +#define BUILD_TIMESTAMP "2026-08-05 17:54:26" #endif // BUILDINFO_H diff --git a/code/tools/README.md b/code/tools/README.md index 6d9b75d..9025cb7 100644 --- a/code/tools/README.md +++ b/code/tools/README.md @@ -12,6 +12,8 @@ read it back through test instruments on the bench. | [`../test/transmit/transmit_test.py`](#transmit_testpy) | Check the exciter I/Q outputs across repeated PTT cycles | AD2 + radio | | [`flag_timing.py`](#flag_timingpy) | Measure firmware execution timing from `Flag()` pin transitions | AD2 + radio | | [`plot_flag_timing.py`](#plot_flag_timingpy) | Plot distributions from a `flag_timing.py` capture | none | +| [`set_radio_time.py`](#set_radio_timepy) | Set the radio's clock from the PC | radio | +| [`Set-RadioTime.ps1`](#set-radiotimeps1) | The same, for Windows without Python | radio | | [`serial_diag.py`](#serial_diagpy) | Interactive CAT control + live diagnostic monitor | radio | | [`usb_audio_test.py`](#usb_audio_testpy) | Send a test tone into the radio's USB audio input | radio | | [`siglent_capture.py`](#siglent_capturepy) | Bare two-channel capture from a networked SIGLENT scope | SIGLENT scope | @@ -241,6 +243,80 @@ Options: `--out-dir` (defaults to beside the JSON), `--prefix`, `--flag-labels`, --- +## `set_radio_time.py` + +Sets the radio's clock from the PC's. Sends a PJRC-standard time packet — `'T'` ++ 10-digit timestamp + newline — which the firmware uses to set both the +coin-cell-backed hardware RTC and the software clock behind the display. + +```bash +./venv/bin/python set_radio_time.py # display reads local time +./venv/bin/python set_radio_time.py --utc # display reads UTC +./venv/bin/python set_radio_time.py --list # show candidate ports +./venv/bin/python set_radio_time.py --port COM5 # choose the port yourself +./venv/bin/python set_radio_time.py --offset -08:00 # override the local offset +``` + +It needs only `pyserial`, so it also runs against a bare +`python3 -m pip install pyserial` on Windows and macOS — the venv above is a +convenience, not a requirement. The port is found by USB vendor ID (0x16C0, +PJRC); with Dual Serial both ports work and it picks the lower-numbered one. + +### Why there is a `--utc` switch + +The radio applies **no time-zone offset of its own**. The timestamp goes +straight into TimeLib and the display reads `hour()`/`minute()`/`second()` back +out of it, so the radio shows the *UTC decomposition of whatever number it is +given*. `MY_TIMEZONE` in `Config.h` is only a label — `"EST: "` is pasted in +front of the digits as a string and shifts nothing. + +So the timestamp has to be pre-shifted by whatever the display is meant to read: + +| `MY_TIMEZONE` is | Run | Sends | +|---|---|---| +| a local zone, e.g. `"EST: "` | `set_radio_time.py` | epoch + local UTC offset | +| `"UTC: "` | `set_radio_time.py --utc` | a true UTC epoch | + +This clock is cosmetic — the display is its only consumer. FT8 timing comes from +the PC's clock, so WSJT-X is unaffected by what is set here. + +### Confirmation, and the lack of it + +On **Dual Serial** the radio echoes `Time set: ` and the script prints it. +On **serial+midi+audio** there is one CDC port shared with CAT, so the firmware +suppresses that echo rather than injecting it into a CAT client's response +stream; the script says so and the display is the check. On that USB type, +WSJT-X or rigctld holding the only port will also block the script from opening +it — close them first. + +--- + +## `Set-RadioTime.ps1` + +The Windows counterpart of `set_radio_time.py`, for operators who would rather +not install Python. Same packet, same behaviour, no modules beyond what ships +with Windows PowerShell 5.1. + +```powershell +.\Set-RadioTime.ps1 # display reads local time +.\Set-RadioTime.ps1 -Utc # display reads UTC +.\Set-RadioTime.ps1 -List # show candidate ports +.\Set-RadioTime.ps1 -Port COM5 # choose the port yourself +.\Set-RadioTime.ps1 -Offset -08:00 # override the local offset +``` + +If PowerShell refuses to run it because of the execution policy: + +```powershell +Unblock-File .\Set-RadioTime.ps1 +# or, for this session only: +powershell -ExecutionPolicy Bypass -File .\Set-RadioTime.ps1 +``` + +Read the `--utc` discussion above — it applies identically. + +--- + ## `serial_diag.py` Interactive CAT control of the radio with the diagnostic stream displayed live diff --git a/code/tools/Set-RadioTime.ps1 b/code/tools/Set-RadioTime.ps1 new file mode 100644 index 0000000..5c63596 --- /dev/null +++ b/code/tools/Set-RadioTime.ps1 @@ -0,0 +1,266 @@ +<# +.SYNOPSIS + Set the Phoenix radio's clock over USB serial. + +.DESCRIPTION + Sends a PJRC-standard time packet - 'T' + 10-digit timestamp + newline - to + the radio, which sets both the coin-cell-backed hardware RTC and the software + clock that drives the front-panel display. + + WHAT THE RADIO DOES WITH THE NUMBER + + The firmware feeds the timestamp straight to TimeLib and the display reads + hour()/minute()/second() back out of it. Nothing applies a time-zone offset. + The MY_TIMEZONE setting in Config.h is only a label - "EST: " and friends are + pasted in front of the digits as a string, and changing it does not shift the + clock. + + So the radio shows the UTC decomposition of whatever number it is given. To + make the display read local wall-clock time, the timestamp has to be shifted + by the local UTC offset before it is sent. That is what this script does by + default. Use -Utc to send a true UTC timestamp instead, which is what you + want if MY_TIMEZONE is set to "UTC: ". + + Either way this clock is cosmetic: it drives the display and nothing else. + FT8 timing comes from the PC's clock, not the radio's, so WSJT-X is + unaffected by what you set here. + + This is the Windows counterpart of set_radio_time.py, for people who would + rather not install Python. It needs no modules beyond what ships with + Windows PowerShell 5.1. + +.PARAMETER Port + Serial port to use, e.g. COM5. Autodetected if omitted. + +.PARAMETER Utc + Send a true UTC timestamp. Use if MY_TIMEZONE is set to "UTC: ". + +.PARAMETER Offset + Override the local UTC offset, e.g. +05:30 or -08:00. + +.PARAMETER List + List candidate ports and exit. + +.EXAMPLE + .\Set-RadioTime.ps1 + Sets the clock so the display reads local wall-clock time. + +.EXAMPLE + .\Set-RadioTime.ps1 -Utc + Sets the clock so the display reads UTC. + +.EXAMPLE + .\Set-RadioTime.ps1 -Port COM5 + Uses COM5 rather than autodetecting. + +.NOTES + If PowerShell refuses to run this because of the execution policy, either + unblock the file: + Unblock-File .\Set-RadioTime.ps1 + or run it for this session only: + powershell -ExecutionPolicy Bypass -File .\Set-RadioTime.ps1 +#> + +[CmdletBinding()] +param( + [string]$Port, + [switch]$Utc, + [string]$Offset, + [switch]$List +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +$TeensyVid = 'VID_16C0' # PJRC +$PacketDigits = 10 # the firmware accepts exactly 10, nothing else + +function Stop-WithError { + param([string]$Message, [string]$Hint) + Write-Host "error: $Message" -ForegroundColor Red + if ($Hint) { Write-Host " $Hint" -ForegroundColor DarkGray } + exit 1 +} + +function Get-PortSortKey { + # Natural sort, so COM9 comes before COM10. + param([string]$Name) + if ($Name -match '(\d+)') { return [int]$Matches[1] } + return [int]::MaxValue +} + +function Get-TeensyPort { + <# + With Dual Serial the radio presents two ports: the lower-numbered one is + Serial, which is the port the firmware's own time-sync reader watches. + With the serial+midi+audio USB type there is only one, shared with CAT - + the CAT reader recognises the time packet there, so either way the first + port works. + #> + $found = @() + try { + # Match inside the ForEach-Object rather than relying on $Matches set by a + # Where-Object in a different scope, which is not reliably visible here. + $found = @(Get-CimInstance -ClassName Win32_PnPEntity -ErrorAction Stop | + Where-Object { $_.PNPDeviceID -like "*$TeensyVid*" } | + ForEach-Object { + if ($_.Name -match '\(COM(\d+)\)') { + [pscustomobject]@{ + Device = "COM$($Matches[1])" + Description = $_.Name + } + } + }) + } catch { + # Not Windows, or WMI unavailable - fall back to bare port names below. + } + return @($found | Sort-Object { Get-PortSortKey $_.Device }) +} + +function Get-AnyPort { + $names = @() + try { $names = @([System.IO.Ports.SerialPort]::GetPortNames()) } catch { } + return @($names | Sort-Object { Get-PortSortKey $_ } | + ForEach-Object { [pscustomobject]@{ Device = $_; Description = 'serial port' } }) +} + +function Format-Offset { + # Render an offset as UTC+HH:MM. Custom TimeSpan format strings drop the sign + # entirely, so a negative offset would otherwise read as "+04:00". + param([int]$Seconds) + if ($Seconds -eq 0) { return 'UTC' } + $sign = if ($Seconds -gt 0) { '+' } else { '-' } + $magnitude = [Math]::Abs($Seconds) + # [int] rounds - and rounds to even - so a half-hour zone like +05:30 would + # come out as +06:00. Truncate explicitly. + $hours = [Math]::Floor($magnitude / 3600) + $minutes = [Math]::Floor(($magnitude % 3600) / 60) + return 'UTC{0}{1:00}:{2:00}' -f $sign, $hours, $minutes +} + +function ConvertFrom-OffsetString { + # Accept +HH:MM, -HH:MM, +HH, or a bare number of hours. + param([string]$Text) + if ($Text.Trim() -notmatch '^([+-]?)(\d{1,2})(?::?([0-5]\d))?$') { + Stop-WithError "cannot read time-zone offset '$Text'" 'use a form like +05:30, -08:00 or +1' + } + $sign = if ($Matches[1] -eq '-') { -1 } else { 1 } + $hours = [int]$Matches[2] + # An optional group that did not participate is simply absent from $Matches, + # so test for the key rather than indexing it under Set-StrictMode. + $minutes = if ($Matches.ContainsKey(3)) { [int]$Matches[3] } else { 0 } + if ($hours -gt 14) { Stop-WithError "time-zone offset '$Text' is out of range" } + return $sign * ($hours * 3600 + $minutes * 60) +} + +# ---------------------------------------------------------------- list and exit +if ($List) { + $teensy = Get-TeensyPort + if ($teensy.Count -gt 0) { + Write-Host 'Teensy ports:' + $teensy | ForEach-Object { Write-Host " $($_.Device) ($($_.Description))" } + } else { + Write-Host 'no Teensy ports found' + } + $every = Get-AnyPort + if ($every.Count -gt 0) { + Write-Host 'all serial ports:' + $every | ForEach-Object { Write-Host " $($_.Device)" } + } + exit 0 +} + +if ($Utc -and $Offset) { + Stop-WithError '-Utc and -Offset contradict each other' 'pass one or the other' +} + +# ------------------------------------------------------------------ pick a port +if ($Port) { + $device = $Port +} else { + $teensy = Get-TeensyPort + if ($teensy.Count -eq 0) { + $every = Get-AnyPort + if ($every.Count -eq 0) { + Stop-WithError 'no Teensy found' 'no serial ports at all - check the USB cable and that the radio is on' + } + $names = ($every | ForEach-Object { $_.Device }) -join ', ' + Stop-WithError 'no Teensy found' "ports seen, none of them a Teensy: $names`n pass one explicitly with -Port if you know which it is" + } + if ($teensy.Count -gt 1) { + Write-Host "found $($teensy.Count) Teensy ports, using the first:" + $teensy | ForEach-Object { Write-Host " $($_.Device) ($($_.Description))" } + } + $device = $teensy[0].Device +} + +# ----------------------------------------------------------------- open and set +$serial = New-Object System.IO.Ports.SerialPort $device, 115200, 'None', 8, 'One' +$serial.ReadTimeout = 300 +$serial.WriteTimeout = 1000 + +try { + $serial.Open() +} catch { + Stop-WithError "cannot open ${device}: $($_.Exception.Message)" ` + ("if the radio is on the serial+midi+audio USB type, WSJT-X or rigctld may be holding`n" + + ' the only port - close it and try again') +} + +try { + Start-Sleep -Milliseconds 300 + $serial.DiscardInBuffer() # drop any boot chatter + + # Transmit on a second boundary so the radio's seconds line up with the PC's + # rather than landing mid-tick. + $epoch = [DateTimeOffset]::UtcNow.ToUnixTimeSeconds() + 1 + $sendAt = [DateTimeOffset]::FromUnixTimeSeconds($epoch) + + if ($Utc) { + $offsetSeconds = 0 + } elseif ($Offset) { + $offsetSeconds = ConvertFrom-OffsetString $Offset + } else { + $offsetSeconds = [int][TimeZoneInfo]::Local.GetUtcOffset($sendAt.UtcDateTime).TotalSeconds + } + + $stamp = $epoch + $offsetSeconds + if ("$stamp".Length -ne $PacketDigits) { + Stop-WithError "timestamp $stamp is not $PacketDigits digits" ` + "the firmware accepts exactly 10 - check the PC's clock" + } + + while ([DateTimeOffset]::UtcNow.ToUnixTimeSeconds() -lt $epoch) { + Start-Sleep -Milliseconds 1 + } + $serial.Write("T$stamp`n") + + $shown = [DateTimeOffset]::FromUnixTimeSeconds($stamp).UtcDateTime + $zone = Format-Offset $offsetSeconds + Write-Host "sent T$stamp on $device" + Write-Host ("radio should now display {0:yyyy-MM-dd HH:mm:ss} ($zone)" -f $shown) + + # Read whatever comes back for about a second. + $reply = '' + $deadline = (Get-Date).AddSeconds(1) + while ((Get-Date) -lt $deadline) { + if ($serial.BytesToRead -gt 0) { + $reply += $serial.ReadExisting() + $deadline = (Get-Date).AddMilliseconds(250) + } else { + Start-Sleep -Milliseconds 20 + } + } + + if ($reply -match 'Time set') { + Write-Host "radio confirmed: $($reply.Trim())" + } elseif ($reply.Trim()) { + Write-Host "radio said: $($reply.Trim())" + } else { + Write-Host ("no confirmation - expected on the serial+midi+audio USB type, where the`n" + + 'confirmation is suppressed to keep it out of the CAT stream. Check the display.') + } +} finally { + if ($serial.IsOpen) { $serial.Close() } + $serial.Dispose() +} diff --git a/code/tools/set_radio_time.py b/code/tools/set_radio_time.py new file mode 100644 index 0000000..9dbc61c --- /dev/null +++ b/code/tools/set_radio_time.py @@ -0,0 +1,293 @@ +#!/usr/bin/env python3 +"""Set the Phoenix radio's clock over USB serial. + +Sends a PJRC-standard time packet - 'T' + 10-digit timestamp + newline - to the +radio, which sets both the coin-cell-backed hardware RTC and the software clock +that drives the front-panel display. + +WHAT THE RADIO DOES WITH THE NUMBER +----------------------------------- +The firmware feeds the timestamp straight to TimeLib and the display reads +hour()/minute()/second() back out of it. Nothing applies a time-zone offset. The +MY_TIMEZONE setting in Config.h is only a label - "EST: " and friends are pasted +in front of the digits as a string, and changing it does not shift the clock. + +So the radio shows the *UTC decomposition of whatever number it is given*. To +make the display read local wall-clock time, the timestamp has to be shifted by +the local UTC offset before it is sent. That is what this script does by +default. Pass --utc to send a true UTC timestamp instead, which is what you want +if MY_TIMEZONE is set to "UTC: ". + +Either way this clock is cosmetic: it drives the display and nothing else. FT8 +timing comes from the PC's clock, not the radio's, so WSJT-X is unaffected by +what you set here. + +USAGE +----- + python3 set_radio_time.py # display shows local time + python3 set_radio_time.py --utc # display shows UTC + python3 set_radio_time.py --list # show candidate ports + python3 set_radio_time.py --port COM5 # pick the port yourself + python3 set_radio_time.py --offset -08:00 # override the local offset + +Requires pyserial: python3 -m pip install pyserial +""" + +import argparse +import re +import sys +import time +from datetime import datetime, timezone + +TEENSY_VID = 0x16C0 # PJRC +PACKET_DIGITS = 10 # the firmware accepts exactly 10, nothing else +SETTLE_S = 0.3 # let the CDC port come up before writing + + +def fail(message, hint=None): + print(f"error: {message}", file=sys.stderr) + if hint: + print(f" {hint}", file=sys.stderr) + sys.exit(1) + + +def import_serial(): + try: + import serial + import serial.tools.list_ports as list_ports + except ImportError: + fail("pyserial is not installed", + "install it with: python3 -m pip install pyserial") + return serial, list_ports + + +def port_sort_key(device): + """Natural sort, so COM9 comes before COM10 and ttyACM2 before ttyACM10.""" + return [int(part) if part.isdigit() else part + for part in re.split(r"(\d+)", device)] + + +def find_ports(list_ports): + """Teensy ports, most likely first. + + With Dual Serial the radio presents two: the lower-numbered one is Serial, + which is the port the firmware's own time-sync reader watches. With the + serial+midi+audio USB type there is only one, shared with CAT - the CAT + reader recognises the time packet there, so either way the first port works. + """ + candidates = [p for p in list_ports.comports() if p.vid == TEENSY_VID] + return sorted(candidates, key=lambda p: port_sort_key(p.device)) + + +def describe(port): + label = port.description or "serial port" + return f"{port.device} ({label})" + + +def plausible_ports(list_ports): + """Ports worth showing a user. + + Motherboards enumerate dozens of legacy /dev/ttyS* that are never a radio, so + prefer USB devices and only fall back to the full list if there are none. + """ + every = sorted(list_ports.comports(), key=lambda p: port_sort_key(p.device)) + usb = [p for p in every if p.vid is not None] + return usb or every + + +def local_offset_seconds(at): + """Seconds east of UTC at the given moment, from the OS time-zone database.""" + offset = datetime.fromtimestamp(at).astimezone().utcoffset() + if offset is None: # no zone info available at all + return 0 + return int(offset.total_seconds()) + + +def format_offset(seconds): + """Render an offset as UTC+HH:MM. timedelta's own repr turns a negative + offset into '-1 day, 20:00:00', which is not what anyone wants to read.""" + if seconds == 0: + return "UTC" + sign = "+" if seconds > 0 else "-" + magnitude = abs(seconds) + return f"UTC{sign}{magnitude // 3600:02d}:{magnitude % 3600 // 60:02d}" + + +def parse_offset(text): + """Accept +HH:MM, -HH:MM, +HH, or a bare number of hours.""" + match = re.fullmatch(r"([+-]?)(\d{1,2})(?::?([0-5]\d))?", text.strip()) + if not match: + fail(f"cannot read time-zone offset {text!r}", + "use a form like +05:30, -08:00 or +1") + sign = -1 if match.group(1) == "-" else 1 + hours = int(match.group(2)) + minutes = int(match.group(3) or 0) + if hours > 14: + fail(f"time-zone offset {text!r} is out of range") + return sign * (hours * 3600 + minutes * 60) + + +def choose_port(args, list_ports): + if args.port: + return args.port + + found = find_ports(list_ports) + if not found: + every = plausible_ports(list_ports) + hint = ("no serial ports at all - check the USB cable and that the radio is on" + if not every else + "ports seen, none of them a Teensy:\n " + + "\n ".join(describe(p) for p in every) + + "\n pass one explicitly with --port if you know which it is") + fail("no Teensy found", hint) + + if len(found) > 1: + print(f"found {len(found)} Teensy ports, using the first:") + for p in found: + print(f" {describe(p)}") + return found[0].device + + +def open_port(serial, device): + try: + return serial.Serial(device, 115200, timeout=0.3) + except PermissionError: + fail(f"permission denied opening {device}", + "on Linux: sudo usermod -a -G dialout $USER (then log out and back in)") + except Exception as exc: # noqa: BLE001 - report anything + # Distinguish "there is no such port" from "something else has it", since + # the fix is completely different. + text = str(exc).lower() + missing = ("no such file" in text or "cannot find" in text + or getattr(exc, "errno", None) == 2) + if missing: + fail(f"no such port: {device}", "run with --list to see what is connected") + fail(f"cannot open {device}: {exc}", + "something else may already have the port. On the serial+midi+audio USB " + "type\n there is only one, so close WSJT-X or rigctld and try again") + + +def read_reply(handle, seconds=1.0): + deadline, buffer = time.time() + seconds, b"" + while time.time() < deadline: + waiting = handle.in_waiting + if waiting: + buffer += handle.read(waiting) + deadline = time.time() + 0.25 # keep reading while it is talking + else: + time.sleep(0.02) + return buffer + + +def glue_negative_offset(argv): + """Let "--offset -08:00" work as well as "--offset=-08:00". + + argparse reads any token starting with '-' as another option, so a western + hemisphere offset - which is most of them - would otherwise be rejected. + Splice the two tokens together before argparse sees them. + """ + out = [] + index = 0 + while index < len(argv): + token = argv[index] + if token == "--offset" and index + 1 < len(argv) \ + and re.fullmatch(r"[+-]?\d{1,2}(?::?\d\d)?", argv[index + 1]): + out.append(f"--offset={argv[index + 1]}") + index += 2 + continue + out.append(token) + index += 1 + return out + + +def main(): + parser = argparse.ArgumentParser( + description="Set the Phoenix radio's clock over USB serial.", + epilog="The radio applies no time-zone offset of its own, so by default " + "this sends a timestamp shifted into local time to make the " + "display read local wall-clock time.") + parser.add_argument("--port", metavar="DEV", + help="serial port to use (e.g. COM5, /dev/ttyACM0)") + parser.add_argument("--utc", action="store_true", + help="send a true UTC timestamp - use if MY_TIMEZONE is \"UTC: \"") + parser.add_argument("--offset", metavar="TZ", + help="override the local UTC offset, e.g. +05:30") + parser.add_argument("--list", action="store_true", + help="list candidate ports and exit") + args = parser.parse_args(glue_negative_offset(sys.argv[1:])) + + serial, list_ports = import_serial() + + if args.list: + found = find_ports(list_ports) + if found: + print("Teensy ports:") + for p in found: + print(f" {describe(p)}") + else: + print("no Teensy ports found") + every = plausible_ports(list_ports) + others = [p for p in every if p.vid != TEENSY_VID] + if others: + print("other serial ports:") + for p in others: + print(f" {describe(p)}") + return 0 + + if args.utc and args.offset: + fail("--utc and --offset contradict each other", "pass one or the other") + + # Validate the offset before touching hardware - no point opening a port only + # to reject the command line. + manual_offset = parse_offset(args.offset) if args.offset else None + + device = choose_port(args, list_ports) + handle = open_port(serial, device) + + try: + time.sleep(SETTLE_S) + handle.reset_input_buffer() # drop any boot chatter + + # Transmit on a second boundary so the radio's seconds line up with the + # PC's rather than landing mid-tick. + send_at = int(time.time()) + 1 + + if args.utc: + offset = 0 + elif manual_offset is not None: + offset = manual_offset + else: + offset = local_offset_seconds(send_at) + + stamp = send_at + offset + if len(str(stamp)) != PACKET_DIGITS: + fail(f"timestamp {stamp} is not {PACKET_DIGITS} digits", + "the firmware accepts exactly 10 - check the PC's clock") + + while time.time() < send_at: + time.sleep(0.001) + handle.write(f"T{stamp}\n".encode("ascii")) + handle.flush() + + shown = datetime.fromtimestamp(stamp, timezone.utc) + zone = format_offset(offset) + print(f"sent T{stamp} on {device}") + print(f"radio should now display {shown:%Y-%m-%d %H:%M:%S} ({zone})") + + reply = read_reply(handle) + if b"Time set" in reply: + print("radio confirmed:", reply.decode("ascii", "replace").strip()) + elif reply: + print("radio said:", reply.decode("ascii", "replace").strip()) + else: + print("no confirmation - expected on the serial+midi+audio USB type, " + "where the\nconfirmation is suppressed to keep it out of the CAT " + "stream. Check the display.") + finally: + handle.close() + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) From d35a4ff3800f4d2830ec2bfd5844f6168e99cb19 Mon Sep 17 00:00:00 2001 From: Dave Solt Date: Fri, 7 Aug 2026 12:28:06 -0400 Subject: [PATCH 25/25] Fix Set-RadioTime.ps1 .Count error on Windows PowerShell 5.1 Under Set-StrictMode a single object returned by Get-TeensyPort/Get-AnyPort has no .Count property in PS 5.1, raising PropertyNotFoundStrict before any packet is sent. Wrap both in @() so .Count works for 0, 1, or many ports. Tested on PS 5.1 / Win 11. --- code/tools/Set-RadioTime.ps1 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/tools/Set-RadioTime.ps1 b/code/tools/Set-RadioTime.ps1 index 5c63596..9ea5dbb 100644 --- a/code/tools/Set-RadioTime.ps1 +++ b/code/tools/Set-RadioTime.ps1 @@ -155,14 +155,14 @@ function ConvertFrom-OffsetString { # ---------------------------------------------------------------- list and exit if ($List) { - $teensy = Get-TeensyPort + $teensy = @(Get-TeensyPort) if ($teensy.Count -gt 0) { Write-Host 'Teensy ports:' $teensy | ForEach-Object { Write-Host " $($_.Device) ($($_.Description))" } } else { Write-Host 'no Teensy ports found' } - $every = Get-AnyPort + $every = @(Get-AnyPort) if ($every.Count -gt 0) { Write-Host 'all serial ports:' $every | ForEach-Object { Write-Host " $($_.Device)" } @@ -178,9 +178,9 @@ if ($Utc -and $Offset) { if ($Port) { $device = $Port } else { - $teensy = Get-TeensyPort + $teensy = @(Get-TeensyPort) if ($teensy.Count -eq 0) { - $every = Get-AnyPort + $every = @(Get-AnyPort) if ($every.Count -eq 0) { Stop-WithError 'no Teensy found' 'no serial ports at all - check the USB cable and that the radio is on' }

)V-5Yxy=6-$``R>lJ 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 L%<<%7=WqUho5_l; diff --git a/code/docs/DrawDisplay_baseline_flag2.png b/code/docs/DrawDisplay_baseline_flag2.png deleted file mode 100644 index e00cdf1c10307ce428da236eab70ad2053d91c3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70352 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 diff --git a/code/docs/DrawDisplay_baseline_flag3.png b/code/docs/DrawDisplay_baseline_flag3.png deleted file mode 100644 index 1421de374a786d9f7b37a704b9e595c9aea76d59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77997 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