@tscircuit/schematic-trace-solver 0.0.111 → 0.0.113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -244,6 +244,7 @@ declare class TraceOverlapIssueSolver extends BaseSolver {
244
244
  overlappingTraceSegments: OverlappingTraceSegmentLocator[];
245
245
  interactionKind: TraceInteractionKind;
246
246
  traceNetIslands: Record<ConnNetId$1, Array<SolvedTracePath>>;
247
+ traceIdsToShift?: Set<MspConnectionPairId>;
247
248
  obstacleRects: ReturnType<typeof getObstacleRects>;
248
249
  SHIFT_DISTANCE: number;
249
250
  correctedTraceMap: Record<MspConnectionPairId, SolvedTracePath>;
@@ -252,6 +253,7 @@ declare class TraceOverlapIssueSolver extends BaseSolver {
252
253
  overlappingTraceSegments: OverlappingTraceSegmentLocator[];
253
254
  interactionKind: TraceInteractionKind;
254
255
  traceNetIslands: Record<ConnNetId$1, Array<SolvedTracePath>>;
256
+ traceIdsToShift?: Set<MspConnectionPairId>;
255
257
  });
256
258
  _step(): void;
257
259
  private applyOffsets;
@@ -284,6 +286,7 @@ declare class TraceOverlapShiftSolver extends BaseSolver {
284
286
  inputProblem: InputProblem;
285
287
  inputTracePaths: Array<SolvedTracePath>;
286
288
  globalConnMap: ConnectivityMap;
289
+ traceIdsToShift?: Set<MspConnectionPairId>;
287
290
  activeSubSolver: TraceOverlapIssueSolver | null;
288
291
  /**
289
292
  * A traceNetIsland is a set of traces that are connected via the globalConnMap
@@ -295,6 +298,7 @@ declare class TraceOverlapShiftSolver extends BaseSolver {
295
298
  inputProblem: InputProblem;
296
299
  inputTracePaths: Array<SolvedTracePath>;
297
300
  globalConnMap: ConnectivityMap;
301
+ traceIdsToShift?: Set<MspConnectionPairId>;
298
302
  });
299
303
  getConstructorParams(): ConstructorParameters<typeof TraceOverlapShiftSolver>[0];
300
304
  computeTraceNetIslands(): Record<ConnNetId, Array<SolvedTracePath>>;
@@ -1071,6 +1075,7 @@ declare class SchematicTracePipelineSolver extends BaseSolver {
1071
1075
  traceCleanupSolver?: TraceCleanupSolver;
1072
1076
  example28Solver?: Example28Solver;
1073
1077
  availableNetOrientationSolver?: AvailableNetOrientationSolver;
1078
+ postLabelTraceOverlapShiftSolver?: TraceOverlapShiftSolver;
1074
1079
  railNetLabelCornerPlacementSolver?: RailNetLabelCornerPlacementSolver;
1075
1080
  traceAnchoredNetLabelOverlapSolver?: TraceAnchoredNetLabelOverlapSolver;
1076
1081
  preAlignmentNetLabelTraceCollisionSolver?: NetLabelTraceCollisionSolver;
package/dist/index.js CHANGED
@@ -1130,6 +1130,17 @@ var calculateElbowForPins = ({
1130
1130
  },
1131
1131
  { overshoot }
1132
1132
  );
1133
+ var pinsFaceEachOther = ({
1134
+ pin1,
1135
+ pin2
1136
+ }) => {
1137
+ const xDistance = pin2.x - pin1.x;
1138
+ const yDistance = pin2.y - pin1.y;
1139
+ if (Math.abs(xDistance) >= Math.abs(yDistance)) {
1140
+ return xDistance > 0 ? pin1._facingDirection === "x+" && pin2._facingDirection === "x-" : pin1._facingDirection === "x-" && pin2._facingDirection === "x+";
1141
+ }
1142
+ return yDistance > 0 ? pin1._facingDirection === "y+" && pin2._facingDirection === "y-" : pin1._facingDirection === "y-" && pin2._facingDirection === "y+";
1143
+ };
1133
1144
  var SchematicTraceSingleLineSolver2 = class extends BaseSolver {
1134
1145
  pins;
1135
1146
  connectionPair;
@@ -1178,7 +1189,9 @@ var SchematicTraceSingleLineSolver2 = class extends BaseSolver {
1178
1189
  pin2,
1179
1190
  overshoot: Math.min(0.2, Math.max(0.02, routingDistance / 4))
1180
1191
  });
1181
- const shouldUseAdaptiveElbow = findFirstCollision(defaultElbow, this.obstacles) !== null && findFirstCollision(adaptiveElbow, this.obstacles) === null;
1192
+ const adaptiveElbowIsShorter = this.pathLength(adaptiveElbow) < this.pathLength(defaultElbow);
1193
+ const defaultElbowBacktracks = this.pathLength(defaultElbow) > routingDistance + 1e-9;
1194
+ const shouldUseAdaptiveElbow = findFirstCollision(adaptiveElbow, this.obstacles) === null && (pinsFaceEachOther({ pin1, pin2 }) && defaultElbowBacktracks && adaptiveElbowIsShorter || findFirstCollision(defaultElbow, this.obstacles) !== null);
1182
1195
  this.baseElbow = defaultElbow;
1183
1196
  if (shouldUseAdaptiveElbow) {
1184
1197
  this.baseElbow = adaptiveElbow;
@@ -1731,6 +1744,7 @@ var TraceOverlapIssueSolver = class extends BaseSolver {
1731
1744
  overlappingTraceSegments;
1732
1745
  interactionKind;
1733
1746
  traceNetIslands;
1747
+ traceIdsToShift;
1734
1748
  obstacleRects;
1735
1749
  SHIFT_DISTANCE = 0.1;
1736
1750
  correctedTraceMap = {};
@@ -1739,6 +1753,7 @@ var TraceOverlapIssueSolver = class extends BaseSolver {
1739
1753
  this.overlappingTraceSegments = params.overlappingTraceSegments;
1740
1754
  this.interactionKind = params.interactionKind;
1741
1755
  this.traceNetIslands = params.traceNetIslands;
1756
+ this.traceIdsToShift = params.traceIdsToShift;
1742
1757
  this.obstacleRects = getObstacleRects(params.inputProblem);
1743
1758
  for (const { connNetId, pathsWithOverlap } of this.overlappingTraceSegments) {
1744
1759
  for (const {
@@ -1756,7 +1771,13 @@ var TraceOverlapIssueSolver = class extends BaseSolver {
1756
1771
  return path.tracePath.length === 2;
1757
1772
  });
1758
1773
  const groupShouldStayInPlace = this.overlappingTraceSegments.map(
1759
- containsStraightPinToPinTrace
1774
+ (group) => {
1775
+ if (!this.traceIdsToShift) return containsStraightPinToPinTrace(group);
1776
+ return group.pathsWithOverlap.every(({ solvedTracePathIndex }) => {
1777
+ const path = this.traceNetIslands[group.connNetId][solvedTracePathIndex];
1778
+ return !this.traceIdsToShift.has(path.mspPairId);
1779
+ });
1780
+ }
1760
1781
  );
1761
1782
  const someGroupCanShift = groupShouldStayInPlace.some(
1762
1783
  (shouldStay) => !shouldStay
@@ -2036,6 +2057,7 @@ var TraceOverlapShiftSolver = class extends BaseSolver {
2036
2057
  inputProblem;
2037
2058
  inputTracePaths;
2038
2059
  globalConnMap;
2060
+ traceIdsToShift;
2039
2061
  /**
2040
2062
  * A traceNetIsland is a set of traces that are connected via the globalConnMap
2041
2063
  */
@@ -2047,6 +2069,7 @@ var TraceOverlapShiftSolver = class extends BaseSolver {
2047
2069
  this.inputProblem = params.inputProblem;
2048
2070
  this.inputTracePaths = params.inputTracePaths;
2049
2071
  this.globalConnMap = params.globalConnMap;
2072
+ this.traceIdsToShift = params.traceIdsToShift;
2050
2073
  for (const tracePath of this.inputTracePaths) {
2051
2074
  const { mspPairId } = tracePath;
2052
2075
  this.correctedTraceMap[mspPairId] = tracePath;
@@ -2057,7 +2080,8 @@ var TraceOverlapShiftSolver = class extends BaseSolver {
2057
2080
  return {
2058
2081
  inputProblem: this.inputProblem,
2059
2082
  inputTracePaths: this.inputTracePaths,
2060
- globalConnMap: this.globalConnMap
2083
+ globalConnMap: this.globalConnMap,
2084
+ traceIdsToShift: this.traceIdsToShift
2061
2085
  };
2062
2086
  }
2063
2087
  computeTraceNetIslands() {
@@ -2145,6 +2169,9 @@ var TraceOverlapShiftSolver = class extends BaseSolver {
2145
2169
  if (!aVert && !aHorz) continue;
2146
2170
  for (let pb = 0; pb < pathsB.length; pb++) {
2147
2171
  const pathB = pathsB[pb];
2172
+ if (this.traceIdsToShift && !this.traceIdsToShift.has(pathA.mspPairId) && !this.traceIdsToShift.has(pathB.mspPairId)) {
2173
+ continue;
2174
+ }
2148
2175
  const ptsB = pathB.tracePath;
2149
2176
  for (let sb = 0; sb < ptsB.length - 1; sb++) {
2150
2177
  const b1 = ptsB[sb];
@@ -2294,7 +2321,8 @@ var TraceOverlapShiftSolver = class extends BaseSolver {
2294
2321
  inputProblem: this.inputProblem,
2295
2322
  interactionKind,
2296
2323
  overlappingTraceSegments,
2297
- traceNetIslands: this.traceNetIslands
2324
+ traceNetIslands: this.traceNetIslands,
2325
+ traceIdsToShift: this.traceIdsToShift
2298
2326
  });
2299
2327
  }
2300
2328
  visualize() {
@@ -10619,6 +10647,7 @@ var SchematicTracePipelineSolver = class extends BaseSolver {
10619
10647
  traceCleanupSolver;
10620
10648
  example28Solver;
10621
10649
  availableNetOrientationSolver;
10650
+ postLabelTraceOverlapShiftSolver;
10622
10651
  railNetLabelCornerPlacementSolver;
10623
10652
  traceAnchoredNetLabelOverlapSolver;
10624
10653
  preAlignmentNetLabelTraceCollisionSolver;
@@ -10794,6 +10823,22 @@ var SchematicTracePipelineSolver = class extends BaseSolver {
10794
10823
  }
10795
10824
  ]
10796
10825
  ),
10826
+ definePipelineStep(
10827
+ "postLabelTraceOverlapShiftSolver",
10828
+ TraceOverlapShiftSolver,
10829
+ (instance) => [
10830
+ {
10831
+ inputProblem: instance.inputProblem,
10832
+ inputTracePaths: instance.availableNetOrientationSolver.traces,
10833
+ globalConnMap: instance.mspConnectionPairSolver.globalConnMap,
10834
+ traceIdsToShift: new Set(
10835
+ instance.availableNetOrientationSolver.traces.filter(
10836
+ (trace) => trace.mspPairId.startsWith("available-net-orientation-")
10837
+ ).map((trace) => trace.mspPairId)
10838
+ )
10839
+ }
10840
+ ]
10841
+ ),
10797
10842
  definePipelineStep(
10798
10843
  "railNetLabelCornerPlacementSolver",
10799
10844
  RailNetLabelCornerPlacementSolver,
@@ -10801,7 +10846,9 @@ var SchematicTracePipelineSolver = class extends BaseSolver {
10801
10846
  return [
10802
10847
  {
10803
10848
  inputProblem: instance.inputProblem,
10804
- traces: instance.availableNetOrientationSolver.traces,
10849
+ traces: Object.values(
10850
+ instance.postLabelTraceOverlapShiftSolver.correctedTraceMap
10851
+ ),
10805
10852
  netLabelPlacements: instance.availableNetOrientationSolver.outputNetLabelPlacements
10806
10853
  }
10807
10854
  ];
@@ -10813,7 +10860,9 @@ var SchematicTracePipelineSolver = class extends BaseSolver {
10813
10860
  (instance) => [
10814
10861
  {
10815
10862
  inputProblem: instance.inputProblem,
10816
- traces: instance.availableNetOrientationSolver.traces,
10863
+ traces: Object.values(
10864
+ instance.postLabelTraceOverlapShiftSolver.correctedTraceMap
10865
+ ),
10817
10866
  netLabelPlacements: instance.railNetLabelCornerPlacementSolver.outputNetLabelPlacements
10818
10867
  }
10819
10868
  ]
@@ -10824,7 +10873,9 @@ var SchematicTracePipelineSolver = class extends BaseSolver {
10824
10873
  (instance) => [
10825
10874
  {
10826
10875
  inputProblem: instance.inputProblem,
10827
- traces: instance.availableNetOrientationSolver.traces,
10876
+ traces: Object.values(
10877
+ instance.postLabelTraceOverlapShiftSolver.correctedTraceMap
10878
+ ),
10828
10879
  netLabelPlacements: instance.traceAnchoredNetLabelOverlapSolver.outputNetLabelPlacements
10829
10880
  }
10830
10881
  ]
@@ -58,6 +58,25 @@ const calculateElbowForPins = ({
58
58
  { overshoot },
59
59
  )
60
60
 
61
+ const pinsFaceEachOther = ({
62
+ pin1,
63
+ pin2,
64
+ }: {
65
+ pin1: MspConnectionPair["pins"][number]
66
+ pin2: MspConnectionPair["pins"][number]
67
+ }) => {
68
+ const xDistance = pin2.x - pin1.x
69
+ const yDistance = pin2.y - pin1.y
70
+ if (Math.abs(xDistance) >= Math.abs(yDistance)) {
71
+ return xDistance > 0
72
+ ? pin1._facingDirection === "x+" && pin2._facingDirection === "x-"
73
+ : pin1._facingDirection === "x-" && pin2._facingDirection === "x+"
74
+ }
75
+ return yDistance > 0
76
+ ? pin1._facingDirection === "y+" && pin2._facingDirection === "y-"
77
+ : pin1._facingDirection === "y-" && pin2._facingDirection === "y+"
78
+ }
79
+
61
80
  export class SchematicTraceSingleLineSolver2 extends BaseSolver {
62
81
  pins: MspConnectionPair["pins"]
63
82
  connectionPair?: MspConnectionPair
@@ -130,9 +149,16 @@ export class SchematicTraceSingleLineSolver2 extends BaseSolver {
130
149
  pin2,
131
150
  overshoot: Math.min(0.2, Math.max(0.02, routingDistance / 4)),
132
151
  })
152
+ const adaptiveElbowIsShorter =
153
+ this.pathLength(adaptiveElbow) < this.pathLength(defaultElbow)
154
+ const defaultElbowBacktracks =
155
+ this.pathLength(defaultElbow) > routingDistance + 1e-9
133
156
  const shouldUseAdaptiveElbow =
134
- findFirstCollision(defaultElbow, this.obstacles) !== null &&
135
- findFirstCollision(adaptiveElbow, this.obstacles) === null
157
+ findFirstCollision(adaptiveElbow, this.obstacles) === null &&
158
+ ((pinsFaceEachOther({ pin1, pin2 }) &&
159
+ defaultElbowBacktracks &&
160
+ adaptiveElbowIsShorter) ||
161
+ findFirstCollision(defaultElbow, this.obstacles) !== null)
136
162
 
137
163
  // Build initial elbow path
138
164
  this.baseElbow = defaultElbow
@@ -79,6 +79,7 @@ export class SchematicTracePipelineSolver extends BaseSolver {
79
79
  traceCleanupSolver?: TraceCleanupSolver
80
80
  example28Solver?: Example28Solver
81
81
  availableNetOrientationSolver?: AvailableNetOrientationSolver
82
+ postLabelTraceOverlapShiftSolver?: TraceOverlapShiftSolver
82
83
  railNetLabelCornerPlacementSolver?: RailNetLabelCornerPlacementSolver
83
84
  traceAnchoredNetLabelOverlapSolver?: TraceAnchoredNetLabelOverlapSolver
84
85
  preAlignmentNetLabelTraceCollisionSolver?: NetLabelTraceCollisionSolver
@@ -280,6 +281,24 @@ export class SchematicTracePipelineSolver extends BaseSolver {
280
281
  },
281
282
  ],
282
283
  ),
284
+ definePipelineStep(
285
+ "postLabelTraceOverlapShiftSolver",
286
+ TraceOverlapShiftSolver,
287
+ (instance) => [
288
+ {
289
+ inputProblem: instance.inputProblem,
290
+ inputTracePaths: instance.availableNetOrientationSolver!.traces,
291
+ globalConnMap: instance.mspConnectionPairSolver!.globalConnMap,
292
+ traceIdsToShift: new Set(
293
+ instance
294
+ .availableNetOrientationSolver!.traces.filter((trace) =>
295
+ trace.mspPairId.startsWith("available-net-orientation-"),
296
+ )
297
+ .map((trace) => trace.mspPairId),
298
+ ),
299
+ },
300
+ ],
301
+ ),
283
302
  definePipelineStep(
284
303
  "railNetLabelCornerPlacementSolver",
285
304
  RailNetLabelCornerPlacementSolver,
@@ -287,7 +306,9 @@ export class SchematicTracePipelineSolver extends BaseSolver {
287
306
  return [
288
307
  {
289
308
  inputProblem: instance.inputProblem,
290
- traces: instance.availableNetOrientationSolver!.traces,
309
+ traces: Object.values(
310
+ instance.postLabelTraceOverlapShiftSolver!.correctedTraceMap,
311
+ ),
291
312
  netLabelPlacements:
292
313
  instance.availableNetOrientationSolver!.outputNetLabelPlacements,
293
314
  },
@@ -300,7 +321,9 @@ export class SchematicTracePipelineSolver extends BaseSolver {
300
321
  (instance) => [
301
322
  {
302
323
  inputProblem: instance.inputProblem,
303
- traces: instance.availableNetOrientationSolver!.traces,
324
+ traces: Object.values(
325
+ instance.postLabelTraceOverlapShiftSolver!.correctedTraceMap,
326
+ ),
304
327
  netLabelPlacements:
305
328
  instance.railNetLabelCornerPlacementSolver!
306
329
  .outputNetLabelPlacements,
@@ -313,7 +336,9 @@ export class SchematicTracePipelineSolver extends BaseSolver {
313
336
  (instance) => [
314
337
  {
315
338
  inputProblem: instance.inputProblem,
316
- traces: instance.availableNetOrientationSolver!.traces,
339
+ traces: Object.values(
340
+ instance.postLabelTraceOverlapShiftSolver!.correctedTraceMap,
341
+ ),
317
342
  netLabelPlacements:
318
343
  instance.traceAnchoredNetLabelOverlapSolver!
319
344
  .outputNetLabelPlacements,
@@ -26,6 +26,7 @@ export class TraceOverlapIssueSolver extends BaseSolver {
26
26
  overlappingTraceSegments: OverlappingTraceSegmentLocator[]
27
27
  interactionKind: TraceInteractionKind
28
28
  traceNetIslands: Record<ConnNetId, Array<SolvedTracePath>>
29
+ traceIdsToShift?: Set<MspConnectionPairId>
29
30
  obstacleRects: ReturnType<typeof getObstacleRects>
30
31
 
31
32
  SHIFT_DISTANCE = 0.1
@@ -37,11 +38,13 @@ export class TraceOverlapIssueSolver extends BaseSolver {
37
38
  overlappingTraceSegments: OverlappingTraceSegmentLocator[]
38
39
  interactionKind: TraceInteractionKind
39
40
  traceNetIslands: Record<ConnNetId, Array<SolvedTracePath>>
41
+ traceIdsToShift?: Set<MspConnectionPairId>
40
42
  }) {
41
43
  super()
42
44
  this.overlappingTraceSegments = params.overlappingTraceSegments
43
45
  this.interactionKind = params.interactionKind
44
46
  this.traceNetIslands = params.traceNetIslands
47
+ this.traceIdsToShift = params.traceIdsToShift
45
48
  this.obstacleRects = getObstacleRects(params.inputProblem)
46
49
 
47
50
  // Only add the relevant traces to the correctedTraceMap
@@ -76,7 +79,14 @@ export class TraceOverlapIssueSolver extends BaseSolver {
76
79
  })
77
80
 
78
81
  const groupShouldStayInPlace = this.overlappingTraceSegments.map(
79
- containsStraightPinToPinTrace,
82
+ (group) => {
83
+ if (!this.traceIdsToShift) return containsStraightPinToPinTrace(group)
84
+ return group.pathsWithOverlap.every(({ solvedTracePathIndex }) => {
85
+ const path =
86
+ this.traceNetIslands[group.connNetId][solvedTracePathIndex]!
87
+ return !this.traceIdsToShift!.has(path.mspPairId)
88
+ })
89
+ },
80
90
  )
81
91
  const someGroupCanShift = groupShouldStayInPlace.some(
82
92
  (shouldStay) => !shouldStay,
@@ -34,6 +34,7 @@ export class TraceOverlapShiftSolver extends BaseSolver {
34
34
  inputProblem: InputProblem
35
35
  inputTracePaths: Array<SolvedTracePath>
36
36
  globalConnMap: ConnectivityMap
37
+ traceIdsToShift?: Set<MspConnectionPairId>
37
38
 
38
39
  declare activeSubSolver: TraceOverlapIssueSolver | null
39
40
 
@@ -50,11 +51,13 @@ export class TraceOverlapShiftSolver extends BaseSolver {
50
51
  inputProblem: InputProblem
51
52
  inputTracePaths: Array<SolvedTracePath>
52
53
  globalConnMap: ConnectivityMap
54
+ traceIdsToShift?: Set<MspConnectionPairId>
53
55
  }) {
54
56
  super()
55
57
  this.inputProblem = params.inputProblem
56
58
  this.inputTracePaths = params.inputTracePaths
57
59
  this.globalConnMap = params.globalConnMap
60
+ this.traceIdsToShift = params.traceIdsToShift
58
61
 
59
62
  for (const tracePath of this.inputTracePaths) {
60
63
  const { mspPairId } = tracePath
@@ -71,6 +74,7 @@ export class TraceOverlapShiftSolver extends BaseSolver {
71
74
  inputProblem: this.inputProblem,
72
75
  inputTracePaths: this.inputTracePaths,
73
76
  globalConnMap: this.globalConnMap,
77
+ traceIdsToShift: this.traceIdsToShift,
74
78
  }
75
79
  }
76
80
 
@@ -211,6 +215,13 @@ export class TraceOverlapShiftSolver extends BaseSolver {
211
215
 
212
216
  for (let pb = 0; pb < pathsB.length; pb++) {
213
217
  const pathB = pathsB[pb]!
218
+ if (
219
+ this.traceIdsToShift &&
220
+ !this.traceIdsToShift.has(pathA.mspPairId) &&
221
+ !this.traceIdsToShift.has(pathB.mspPairId)
222
+ ) {
223
+ continue
224
+ }
214
225
  const ptsB = pathB.tracePath
215
226
  for (let sb = 0; sb < ptsB.length - 1; sb++) {
216
227
  const b1 = ptsB[sb]!
@@ -392,6 +403,7 @@ export class TraceOverlapShiftSolver extends BaseSolver {
392
403
  interactionKind,
393
404
  overlappingTraceSegments,
394
405
  traceNetIslands: this.traceNetIslands,
406
+ traceIdsToShift: this.traceIdsToShift,
395
407
  })
396
408
  }
397
409
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tscircuit/schematic-trace-solver",
3
3
  "main": "dist/index.js",
4
- "version": "0.0.111",
4
+ "version": "0.0.113",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "start": "cosmos",
@@ -1,4 +1,4 @@
1
- <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="-4.3400000000000025,-7.364455349999998 -4.140000000000002,-7.364455349999998 -4.140000000000002,-6.844727674999999 -4.890000000000002,-6.844727674999999 -4.890000000000002,-6.324999999999998" data-type="line" data-label="" points="241.17494151286712,455.8294775149467 246.99766051468674,455.8294775149467 246.99766051468674,440.6983364699766 225.16246425786323,440.6983364699766 225.16246425786323,425.5671954250065" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.6400000000000023,-7.364455349999998 -4.3400000000000025,-7.364455349999998" data-type="line" data-label="" points="261.5544580192357,455.8294775149467 241.17494151286712,455.8294775149467" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-9.808910699999998,-1.705000000000001 -9.808910699999998,-1.9050000000000002 -10.4289107,-1.9050000000000002 -10.4289107,-4.214999999999999 -9.808910699999998,-4.214999999999999 -9.808910699999998,-4.015" data-type="line" data-label="" points="81.95529025214461,291.0623864829738 81.95529025214461,296.88510548479337 63.90486134650382,296.88510548479337 63.90486134650382,364.1375099558097 81.95529025214461,364.1375099558097 81.95529025214461,358.31479095399015" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-11.05,-8.129999999999999 -11.25,-8.129999999999999 -11.25,-7.227499999999999 -10.475,-7.227499999999999 -10.475,-6.324999999999999" data-type="line" data-label="" points="45.82271900181962,478.1172344164284 40,478.1172344164284 40,451.8422149207174 62.56303613205097,451.8422149207174 62.56303613205097,425.5671954250065" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-11.05,-8.329999999999998 -11.25,-8.329999999999998 -11.25,-8.129999999999999 -11.05,-8.129999999999999" data-type="line" data-label="" points="45.82271900181962,483.93995341824797 40,483.93995341824797 40,478.1172344164284 45.82271900181962,478.1172344164284" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-9.05,-8.129999999999999 -8.850000000000001,-8.129999999999999 -8.850000000000001,-8.329999999999998 -9.05,-8.329999999999998" data-type="line" data-label="" points="104.0499090200156,478.1172344164284 109.87262802183517,478.1172344164284 109.87262802183517,483.93995341824797 104.0499090200156,483.93995341824797" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-0.8300000000000005,-0.09999999999999959 -1.5050000000000008,-0.09999999999999964" data-type="line" data-label="" points="343.36365999480114,244.33506649337147 323.71198336366,244.33506649337147" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.130000000000001,3.2594553499999996 -2.505000000000001,3.2594553499999996 -2.505000000000001,2.7199999999999998 -1.8800000000000003,2.7199999999999998 -1.8800000000000003,2.92" data-type="line" data-label="" points="276.40239147387575,146.52924398232392 294.59838835456196,146.52924398232392 294.59838835456196,162.23472856771514 312.7943852352482,162.23472856771514 312.7943852352482,156.41200956589552" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999995,0.10000000000000042 1.8449999999999998,0.10000000000000016" data-type="line" data-label="" points="401.5908500129972,238.51234749155188 421.2425266441383,238.51234749155188" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999995,1.3500000000000003 1.1699999999999995,0.7250000000000003 1.3699999999999994,0.7250000000000003 1.3699999999999994,0.10000000000000042 1.1699999999999995,0.10000000000000042" data-type="line" data-label="" points="401.5908500129972,202.12035373017937 401.5908500129972,220.31635061086564 407.41356901481674,220.31635061086564 407.41356901481674,238.51234749155188 401.5908500129972,238.51234749155188" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-0.08000000000000074,1.6894553499999998 0.5449999999999994,1.6894553499999998 0.5449999999999994,1.1500000000000004 1.1699999999999995,1.1500000000000004 1.1699999999999995,1.3500000000000003" data-type="line" data-label="" points="365.19885625162465,192.23758814660778 383.3948531323109,192.23758814660778 383.3948531323109,207.943072731999 401.5908500129972,207.943072731999 401.5908500129972,202.12035373017937" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="4.210000000000001,-2.1794553499999987 4.210000000000001,-1.659727674999999 3.460000000000001,-1.659727674999999 3.460000000000001,-1.1399999999999992 3.660000000000001,-1.1399999999999992" data-type="line" data-label="" points="490.0961788406551,304.8754873927736 490.0961788406551,289.74434634780346 468.2609825838316,289.74434634780346 468.2609825838316,274.61320530283336 474.0837015856512,274.61320530283336" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999982,-6.119999999999999 1.8449999999999984,-6.119999999999999" data-type="line" data-label="" points="401.5908500129971,419.5989084481414 421.24252664413825,419.5989084481414" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999973,-7.469999999999999 1.1699999999999973,-6.794999999999999 1.3699999999999983,-6.794999999999999 1.3699999999999983,-6.119999999999999 1.1699999999999982,-6.119999999999999" data-type="line" data-label="" points="401.59085001299707,458.9022617104237 401.59085001299707,439.2505850792826 407.41356901481674,439.2505850792826 407.41356901481674,419.5989084481414 401.5908500129971,419.5989084481414" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.4199999999999973,-7.699455349999998 2.174727674999997,-7.699455349999998 2.174727674999997,-7.269999999999999 1.1699999999999973,-7.269999999999999 1.1699999999999973,-7.469999999999999" data-type="line" data-label="" points="437.9828437743696,465.5825318429945 430.84208463737974,465.5825318429945 430.84208463737974,453.0795427086041 401.59085001299707,453.0795427086041 401.59085001299707,458.9022617104237" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.3100000000000005,-0.09999999999999964 -2.6350000000000007,-0.09999999999999964" data-type="line" data-label="" points="271.1619443722381,244.33506649337147 290.81362100337924,244.33506649337147" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.660000000000001,1.6800000000000002 -2.9850000000000003,1.6800000000000002" data-type="line" data-label="" points="260.9721861190538,192.51286737717703 280.623862750195,192.51286737717703" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9499999999999997,1.35 2.9499999999999997,0.7250000000000005 3.175,0.7250000000000005 3.175,0.10000000000000053 2.9749999999999996,0.10000000000000053" data-type="line" data-label="" points="453.41304912919156,202.12035373017937 453.41304912919156,220.3163506108656 459.96360800623864,220.3163506108656 459.96360800623864,238.51234749155188 454.140889004419,238.51234749155188" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.41,-2.92 2.4099999999999997,-2.244999999999999" data-type="line" data-label="" points="437.6917078242787,326.43540441902786 437.6917078242787,306.7837277878867" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="4.249999999999997,-6.119999999999999 2.9749999999999983,-6.119999999999999" data-type="line" data-label="" points="491.2607226410189,419.5989084481414 454.140889004419,419.5989084481414" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-7.200000000000001,-10.398910699999997 -7.400000000000001,-10.398910699999997 -7.400000000000001,-10.198910699999997 -7.200000000000001,-10.198910699999997" data-type="line" data-label="" points="157.9100597868469,544.1733816480373 152.08734078502727,544.1733816480373 152.08734078502727,538.3506626462179 157.9100597868469,538.3506626462179" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-5.200000000000001,-10.198910699999997 -5.000000000000001,-10.198910699999997 -5.000000000000001,-10.398910699999997 -5.200000000000001,-10.398910699999997" data-type="line" data-label="" points="216.13724980504287,538.3506626462179 221.9599688068625,538.3506626462179 221.9599688068625,544.1733816480373 216.13724980504287,544.1733816480373" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-4.760000000000001,1.6800000000000002 -4.960000000000001,1.6800000000000002 -4.960000000000001,-0.09999999999999964 -4.410000000000001,-0.09999999999999964" data-type="line" data-label="" points="228.947231609046,192.51286737717703 223.12451260722642,192.51286737717703 223.12451260722642,244.33506649337147 239.1369898622303,244.33506649337147" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999995,2.45 1.1699999999999995,2.6500000000000004 2.9499999999999997,2.6500000000000004 2.9499999999999997,2.4500000000000006" data-type="line" data-label="" points="401.5908500129972,170.0953992201716 401.5908500129972,164.27268021835198 453.41304912919156,164.27268021835198 453.41304912919156,170.09539922017157" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-7.5994553499999995,-1.3305446499999976 -7.5994553499999995,-0.42804464999999814 -8.965,-0.42804464999999814 -8.965,0.4744553500000013 -7.965000000000001,0.4744553500000013" data-type="line" data-label="" points="146.28047850272944,280.1606450740837 146.28047850272944,253.88562557837272 106.52456459578895,253.88562557837272 106.52456459578895,227.6106060826618 135.63815960488694,227.6106060826618" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-6.3494553499999995,-4.019999999999998 -6.3494553499999995,-4.219999999999998 -7.5994553499999995,-4.219999999999998 -7.5994553499999995,-2.430544649999999" data-type="line" data-label="" points="182.67247226410194,358.4603589290356 182.67247226410194,364.2830779308552 146.28047850272944,364.2830779308552 146.28047850272944,312.1855995840915" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-6.65,-5.8199999999999985 -6.450000000000001,-5.8199999999999985 -6.450000000000001,-6.914727674999998 -7.950000000000001,-6.914727674999998 -7.950000000000001,-8.009455349999998 -7.750000000000001,-8.009455349999998" data-type="line" data-label="" points="173.9225370418508,410.864829945412 179.7452560436704,410.864829945412 179.7452560436704,442.73628812061344 136.07486353002338,442.73628812061344 136.07486353002338,474.6077462958149 141.897582531843,474.6077462958149" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-8.650000000000002,-5.8199999999999985 -9.5625,-5.8199999999999985 -9.5625,-5.024999999999999 -10.475,-5.024999999999999 -10.475,-5.224999999999998" data-type="line" data-label="" points="115.69534702365476,410.864829945412 89.12919157785291,410.864829945412 89.12919157785291,387.71952191317905 62.56303613205097,387.71952191317905 62.56303613205097,393.5422409149987" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999982,-5.92 1.5074999999999983,-5.92 1.5074999999999983,-5.329999999999999 2.41,-5.329999999999999 2.41,-4.02" data-type="line" data-label="" points="401.5908500129971,413.77618944632184 411.4166883285677,413.77618944632184 411.4166883285677,396.599168390954 437.6917078242787,396.599168390954 437.6917078242787,358.46035892903564" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-4.890000000000002,-5.224999999999999 -4.890000000000002,-3.8324999999999996 -1.86945535,-3.8324999999999996 -1.86945535,-2.44" data-type="line" data-label="" points="225.16246425786323,393.54224091499873 225.16246425786323,353.00155986482974 313.10137790486095,353.00155986482974 313.10137790486095,312.4608788146608" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-9.808910699999998,-0.6049999999999982 -9.808910699999998,0.4744553500000017 -7.965000000000001,0.4744553500000017" data-type="line" data-label="" points="81.95529025214461,259.0374319729659 81.95529025214461,227.6106060826618 135.63815960488694,227.6106060826618" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-6.3494553499999995,-2.919999999999998 -6.3494553499999995,-1.6794553499999996 -4.2194553500000005,-1.6794553499999996" data-type="line" data-label="" points="182.67247226410194,326.4354044190278 182.67247226410194,290.31868988822464 244.68442963348065,290.31868988822464" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.0649999999999995,0.3272767499999982 7.265,0.3272767499999982 7.265,1.3167320999999976 5.765,1.3167320999999976 5.765,2.3061874499999973 5.965,2.3061874499999973" data-type="line" data-label="" points="573.2154925916299,231.89550423706794 579.0382115934494,231.89550423706794 579.0382115934494,203.08890189758262 535.3678190798025,203.08890189758262 535.3678190798025,174.28229955809732 541.1905380816221,174.28229955809732" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.0649999999999995,-1.6516339500000008 7.265,-1.6516339500000008 7.265,-0.6621786000000013 5.765,-0.6621786000000013 5.765,0.3272767499999982 5.965,0.3272767499999982" data-type="line" data-label="" points="573.2154925916299,289.50870891603853 579.0382115934494,289.50870891603853 579.0382115934494,260.7021065765532 535.3678190798025,260.7021065765532 535.3678190798025,231.89550423706794 541.1905380816221,231.89550423706794" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.0649999999999995,-3.63054465 7.265,-3.63054465 7.265,-2.6410893000000004 5.765,-2.6410893000000004 5.765,-1.6516339500000008 5.965,-1.6516339500000008" data-type="line" data-label="" points="573.2154925916299,347.1219135950091 579.0382115934494,347.1219135950091 579.0382115934494,318.31531125552385 535.3678190798025,318.31531125552385 535.3678190798025,289.50870891603853 541.1905380816221,289.50870891603853" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.119455350000001,-1.6794553499999991 -2.9194553500000007,-1.6794553499999991 -2.9194553500000007,-1.3399999999999994 -1.8694553500000004,-1.3399999999999994" data-type="line" data-label="" points="276.7093841434884,290.3186898882246 282.53210314530804,290.3186898882246 282.53210314530804,280.435924304653 313.10137790486095,280.435924304653" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.4099999999999997,-1.1149999999999993 2.4099999999999997,-0.9149999999999994 3.460000000000001,-0.9149999999999994 3.460000000000001,-1.1399999999999992" data-type="line" data-label="" points="437.6917078242787,273.88536542760596 437.6917078242787,268.06264642578634 468.2609825838316,268.06264642578634 468.2609825838316,274.61320530283336" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.8694553500000004,-1.3399999999999994 -1.8694553500000004,-0.7199999999999995 -1.3050000000000008,-0.7199999999999995 -1.3050000000000008,-0.09999999999999964 -1.5050000000000008,-0.09999999999999964" data-type="line" data-label="" points="313.10137790486095,280.435924304653 313.10137790486095,262.38549539901226 329.5347023654796,262.38549539901226 329.5347023654796,244.33506649337147 323.71198336366,244.33506649337147" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999995,-1.0999999999999996 1.9909999999999992,-1.0999999999999994 1.9909999999999992,-0.6999999999999995 1.1699999999999995,-0.6999999999999995" data-type="line" data-label="" points="401.5908500129972,273.44866150246946 425.4931115154666,273.44866150246946 425.4931115154666,261.8032234988303 401.5908500129972,261.8032234988303" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-0.8300000000000005,-0.8999999999999996 -1.0300000000000005,-0.8999999999999996 -1.0300000000000005,-0.49999999999999967 -0.8300000000000005,-0.49999999999999967" data-type="line" data-label="" points="343.36365999480114,267.6259425006499 337.5409409929816,267.6259425006499 337.5409409929816,255.98050449701068 343.36365999480114,255.98050449701068" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999995,-0.2999999999999995 1.4699999999999998,-0.2999999999999995 1.4699999999999998,-3.1599999999999997 -1.7710000000000017,-3.1599999999999997 -1.7710000000000017,-6.019999999999999 -0.8300000000000018,-6.02" data-type="line" data-label="" points="401.5908500129972,250.15778549519106 410.3249285157266,250.15778549519106 410.3249285157266,333.4226672212113 315.9677670912399,333.4226672212113 315.9677670912399,416.68754894723156 343.36365999480114,416.6875489472316" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-0.8300000000000005,0.10000000000000042 -1.3425000000000005,0.10000000000000042 -1.3425000000000005,1.6800000000000002 -1.8550000000000004,1.6800000000000002" data-type="line" data-label="" points="343.36365999480114,238.51234749155188 328.44294255263844,238.51234749155188 328.44294255263844,192.51286737717703 313.5222251104757,192.51286737717703" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="4.760000000000001,-1.1399999999999992 5.549999999999997,-1.1399999999999992 5.549999999999997,-3.43054465 5.024,-3.43054465 5.024,-3.83054465 5.549999999999997,-3.83054465 5.549999999999997,-6.119999999999999 5.349999999999997,-6.119999999999999" data-type="line" data-label="" points="506.108656095659,274.61320530283336 529.1083961528464,274.61320530283336 529.1083961528464,341.29919459318955 513.7946451780608,341.29919459318955 513.7946451780608,352.94463259682874 529.1083961528464,352.94463259682874 529.1083961528464,419.5989084481414 523.2856771510267,419.5989084481414" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-8.850000000000001,-8.129999999999999 -8.59,-8.129999999999999 -8.59,-8.130999999999998" data-type="line" data-label="" points="109.87262802183517,478.1172344164284 117.4421627242007,478.1172344164284 117.4421627242007,478.14634801143745" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-5.965000000000001,0.4744553500000013 -5.7540000000000004,0.4744553500000013 -5.7540000000000004,0.27345535000000126" data-type="line" data-label="" points="193.86534962308292,227.6106060826618 200.0083181700026,227.6106060826618 200.0083181700026,233.4624386794905" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.6400000000000023,-7.564455349999998 -3.851000000000002,-7.564455349999998 -3.851000000000002,-7.765455349999998" data-type="line" data-label="" points="261.5544580192357,461.65219651676625 255.41148947231605,461.65219651676625 255.41148947231605,467.504029113595" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-9.808910699999998,-2.9149999999999983 -9.808910699999998,-1.763999999999998 -10.259910699999997,-1.763999999999998" data-type="line" data-label="" points="81.95529025214461,326.2898364439823 81.95529025214461,292.7800885885105 68.82505890304145,292.7800885885105" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.8800000000000003,4.0200000000000005 -1.8800000000000003,5.321000000000001 -2.9310000000000005,5.321000000000001" data-type="line" data-label="" points="312.7943852352482,124.38705505588771 312.7943852352482,86.51026794905121 282.19599688068627,86.51026794905121" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999973,-8.57 1.1699999999999973,-8.671 0.9689999999999974,-8.671" data-type="line" data-label="" points="401.59085001299707,490.92721622043155 401.59085001299707,493.8676893163504 395.7390174161684,493.8676893163504" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="4.210000000000001,-3.2794553499999983 4.210000000000001,-3.8304553499999985 4.159000000000001,-3.8304553499999985" data-type="line" data-label="" points="490.0961788406551,336.9004419027814 490.0961788406551,352.9420327527944 488.6113854951911,352.9420327527944" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="-6.200000000000001" data-y="-10.298910699999997" x="157.9100597868469" y="532.5279436443982" width="58.227190018195984" height="17.468157005458806" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="-10.05" data-y="-8.229999999999999" x="45.82271900181962" y="472.2945154146088" width="58.227190018195984" height="17.468157005458806" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="-7.650000000000001" data-y="-5.8199999999999985" x="115.69534702365476" y="405.04211094359243" width="58.22719001819604" height="11.645438003639129" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="-6.965000000000001" data-y="0.4744553500000013" x="135.63815960488694" y="221.7878870808422" width="58.227190018195984" height="11.645438003639185" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_4" data-x="-2.6400000000000023" data-y="-7.464455349999998" x="261.55445801923565" y="450.0067585131271" width="58.22719001819604" height="17.46815700545875" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_5" data-x="0.16999999999999948" data-y="-0.49999999999999956" x="343.3636599948011" y="232.68962848973229" width="58.22719001819604" height="46.5817520145568" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_6" data-x="0.16999999999999815" data-y="-6.02" x="343.36365999480114" y="405.04211094359243" width="58.227190018195984" height="23.29087600727837" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_7" data-x="-9.6714107" data-y="-3.464999999999999" x="69.72758034832336" y="326.28983644398227" width="32.46165843514433" height="32.02495451000783" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_8" data-x="-10.337499999999999" data-y="-5.774999999999999" x="50.33532622822983" y="393.54224091499873" width="32.46165843514433" height="32.02495451000783" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_9" data-x="-9.551410699999998" data-y="-1.154999999999999" x="69.72758034832344" y="259.0374319729659" width="39.448921237327795" height="32.02495451000783" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_10" data-x="-4.597500000000002" data-y="-5.774999999999999" x="219.50116995061086" y="393.54224091499873" width="28.35404169482706" height="32.024954510007774" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_11" data-x="-7.200000000000001" data-y="-8.009455349999998" x="141.897582531843" y="463.2693009617884" width="32.024954510007774" height="22.67689066805292" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_12" data-x="-7.306955349999999" data-y="-1.8805446499999983" x="140.6191841954771" y="280.1606450740836" width="28.35404169482706" height="32.02495451000783" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_13" data-x="-4.890000000000002" data-y="-7.364455349999998" x="209.14998700285935" y="443.32648838055627" width="32.0249545100078" height="25.005978268780837" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_14" data-x="6.515" data-y="-3.63054465" x="541.1905380816221" y="335.78346826098266" width="32.024954510007774" height="22.676890668052977" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_15" data-x="6.515" data-y="-1.6516339500000008" x="541.1905380816221" y="278.170263582012" width="32.024954510007774" height="22.676890668053034" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_16" data-x="6.515" data-y="0.3272767499999982" x="541.1905380816221" y="220.55705890304142" width="32.024954510007774" height="22.676890668053005" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_17" data-x="6.515" data-y="2.3061874499999973" x="541.1905380816221" y="162.94385422407083" width="32.024954510007774" height="22.676890668052977" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_18" data-x="-5.9969553499999995" data-y="-3.469999999999998" x="177.01117795684956" y="326.4354044190278" width="31.84767309591885" height="32.024954510007774" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_19" data-x="-3.6694553500000007" data-y="-1.6794553499999991" x="244.68442963348065" y="277.81570075383416" width="32.024954510007774" height="25.005978268780837" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_20" data-x="-3.6800000000000006" data-y="3.2594553499999996" x="244.37743696386798" y="134.0262548479335" width="32.024954510007774" height="25.005978268780837" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_21" data-x="-0.6300000000000008" data-y="1.6894553499999998" x="333.1739017416169" y="179.73459901221736" width="32.024954510007774" height="25.005978268780837" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_22" data-x="4.502500000000001" data-y="-2.7294553499999985" x="484.4348845334028" y="304.8754873927736" width="28.35404169482706" height="32.024954510007774" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_23" data-x="2.9699999999999975" data-y="-7.699455349999998" x="437.9828437743696" y="454.24408650896805" width="32.024954510007774" height="22.676890668052977" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_24" data-x="-1.5869553500000007" data-y="-1.8899999999999997" x="307.4400835976085" y="280.435924304653" width="27.771769794645138" height="32.02495451000783" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_25" data-x="-1.6475000000000004" data-y="3.47" x="307.1330909279959" y="124.38705505588773" width="24.860410293735356" height="32.0249545100078" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_26" data-x="1.4024999999999994" data-y="1.9000000000000004" x="395.92955570574475" y="170.0953992201716" width="24.860410293735356" height="32.024954510007774" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_27" data-x="4.210000000000001" data-y="-1.1399999999999992" x="474.0837015856512" y="262.11021616844295" width="32.024954510007774" height="25.005978268780837" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_28" data-x="1.4524999999999972" data-y="-8.02" x="395.9295557057447" y="458.9022617104238" width="27.771769794645138" height="32.02495451000783" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_29" data-x="-2.0700000000000007" data-y="-0.09999999999999964" x="290.81362100337924" y="227.15804543800363" width="32.89836236028077" height="34.35404211073566" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_30" data-x="-3.8600000000000008" data-y="-0.09999999999999962" x="239.13698986223034" y="232.99662115934495" width="32.0249545100078" height="22.676890668053005" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_31" data-x="-2.4200000000000004" data-y="1.6800000000000002" x="280.62386275019503" y="175.33584632180919" width="32.898362360280714" height="34.35404211073566" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_32" data-x="-4.210000000000001" data-y="1.6800000000000002" x="228.947231609046" y="181.17442204315054" width="32.024954510007774" height="22.676890668052977" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_33" data-x="2.4099999999999997" data-y="0.10000000000000009" x="421.24252664413837" y="221.33532643618406" width="32.898362360280714" height="34.354042110735634" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_34" data-x="3.2424999999999997" data-y="1.9000000000000004" x="447.75175482193924" y="170.0953992201716" width="28.354041694827117" height="32.0249545100078" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_35" data-x="2.6525" data-y="-1.6799999999999993" x="428.2297894463218" y="273.88536542760596" width="33.04393033532625" height="32.898362360280714" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_36" data-x="2.7525000000000004" data-y="-3.4699999999999998" x="432.0304135170263" y="326.43540441902786" width="31.2654011957369" height="32.024954510007774" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_37" data-x="2.4099999999999984" data-y="-6.119999999999999" x="421.24252664413825" y="402.42188739277356" width="32.89836236028077" height="34.354042110735634" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_38" data-x="4.799999999999997" data-y="-6.119999999999999" x="491.2607226410189" y="407.095919313751" width="32.024954510007774" height="25.005978268780837" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="MY_18650_02" data-x="-6.140000000000001" data-y="-10.728910699999997" x="169.5554977904861" y="551.1606444502208" width="38.429945412009374" height="5.240447101637756" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="J_BAT_POS" data-x="-6.260000000000001" data-y="-9.868910699999997" x="169.55549779048613" y="526.1229527423966" width="31.442682609825823" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="MY_18650_02" data-x="-9.99" data-y="-8.659999999999998" x="57.46815700545881" y="490.9272162204315" width="38.429945412009374" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="J_BAT_NEG" data-x="-10.11" data-y="-7.799999999999999" x="57.468157005458835" y="465.8895245126073" width="31.442682609825795" height="5.240447101637585" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="BAT54WS" data-x="-7.830000000000002" data-y="-6.149999999999999" x="127.34078502729396" y="417.8520927475955" width="24.4554198076423" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="D_PROT" data-x="-7.890000000000002" data-y="-5.489999999999998" x="127.34078502729398" y="398.63712004159083" width="20.96178840655051" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="BAT54WS" data-x="-7.145000000000001" data-y="0.14445535000000126" x="147.28359760852612" y="234.59786888484533" width="24.4554198076423" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="D_SENSE_CLAMP" data-x="-6.785000000000001" data-y="0.8044553500000013" x="147.28359760852612" y="215.38289617884064" width="45.41720821419287" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="LM4040D25FTA" data-x="-2.5200000000000022" data-y="-7.894455349999998" x="273.1998960228749" y="468.63945931894983" width="41.92357681310108" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="U_REF" data-x="-2.940000000000002" data-y="-7.034455349999998" x="273.1998960228749" y="443.6017676111255" width="17.46815700545875" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="LMV339IDR" data-x="0.10999999999999943" data-y="-1.4299999999999997" x="355.0090979984403" y="280.435924304653" width="31.44268260982585" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="U1" data-x="-0.3100000000000006" data-y="0.4300000000000005" x="355.0090979984403" y="226.2846375877307" width="6.987262802183523" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="LMV331IDBVR" data-x="0.22999999999999798" data-y="-6.55" x="355.0090979984403" y="429.49753075123476" width="38.42994541200932" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="U2" data-x="-0.31000000000000194" data-y="-5.489999999999999" x="355.0090979984403" y="398.6371200415909" width="6.987262802183523" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="netId: BAT_RAW
1
+ <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="-4.3400000000000025,-7.364455349999998 -4.140000000000002,-7.364455349999998 -4.140000000000002,-6.844727674999999 -4.890000000000002,-6.844727674999999 -4.890000000000002,-6.324999999999998" data-type="line" data-label="" points="241.17494151286712,455.8294775149467 246.99766051468674,455.8294775149467 246.99766051468674,440.6983364699766 225.16246425786323,440.6983364699766 225.16246425786323,425.5671954250065" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.6400000000000023,-7.364455349999998 -4.3400000000000025,-7.364455349999998" data-type="line" data-label="" points="261.5544580192357,455.8294775149467 241.17494151286712,455.8294775149467" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-9.808910699999998,-1.705000000000001 -9.808910699999998,-1.9050000000000002 -10.4289107,-1.9050000000000002 -10.4289107,-4.214999999999999 -9.808910699999998,-4.214999999999999 -9.808910699999998,-4.015" data-type="line" data-label="" points="81.95529025214461,291.0623864829738 81.95529025214461,296.88510548479337 63.90486134650382,296.88510548479337 63.90486134650382,364.1375099558097 81.95529025214461,364.1375099558097 81.95529025214461,358.31479095399015" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-11.05,-8.129999999999999 -11.25,-8.129999999999999 -11.25,-7.227499999999999 -10.475,-7.227499999999999 -10.475,-6.324999999999999" data-type="line" data-label="" points="45.82271900181962,478.1172344164284 40,478.1172344164284 40,451.8422149207174 62.56303613205097,451.8422149207174 62.56303613205097,425.5671954250065" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-11.05,-8.329999999999998 -11.25,-8.329999999999998 -11.25,-8.129999999999999 -11.05,-8.129999999999999" data-type="line" data-label="" points="45.82271900181962,483.93995341824797 40,483.93995341824797 40,478.1172344164284 45.82271900181962,478.1172344164284" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-9.05,-8.129999999999999 -8.850000000000001,-8.129999999999999 -8.850000000000001,-8.329999999999998 -9.05,-8.329999999999998" data-type="line" data-label="" points="104.0499090200156,478.1172344164284 109.87262802183517,478.1172344164284 109.87262802183517,483.93995341824797 104.0499090200156,483.93995341824797" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-0.8300000000000005,-0.09999999999999959 -1.5050000000000008,-0.09999999999999964" data-type="line" data-label="" points="343.36365999480114,244.33506649337147 323.71198336366,244.33506649337147" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.130000000000001,3.2594553499999996 -2.505000000000001,3.2594553499999996 -2.505000000000001,2.7199999999999998 -1.8800000000000003,2.7199999999999998 -1.8800000000000003,2.92" data-type="line" data-label="" points="276.40239147387575,146.52924398232392 294.59838835456196,146.52924398232392 294.59838835456196,162.23472856771514 312.7943852352482,162.23472856771514 312.7943852352482,156.41200956589552" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999995,0.10000000000000042 1.8449999999999998,0.10000000000000016" data-type="line" data-label="" points="401.5908500129972,238.51234749155188 421.2425266441383,238.51234749155188" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999995,1.3500000000000003 1.1699999999999995,0.7250000000000003 1.3699999999999994,0.7250000000000003 1.3699999999999994,0.10000000000000042 1.1699999999999995,0.10000000000000042" data-type="line" data-label="" points="401.5908500129972,202.12035373017937 401.5908500129972,220.31635061086564 407.41356901481674,220.31635061086564 407.41356901481674,238.51234749155188 401.5908500129972,238.51234749155188" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-0.08000000000000074,1.6894553499999998 0.5449999999999994,1.6894553499999998 0.5449999999999994,1.1500000000000004 1.1699999999999995,1.1500000000000004 1.1699999999999995,1.3500000000000003" data-type="line" data-label="" points="365.19885625162465,192.23758814660778 383.3948531323109,192.23758814660778 383.3948531323109,207.943072731999 401.5908500129972,207.943072731999 401.5908500129972,202.12035373017937" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="4.210000000000001,-2.1794553499999987 4.210000000000001,-1.659727674999999 3.460000000000001,-1.659727674999999 3.460000000000001,-1.1399999999999992 3.660000000000001,-1.1399999999999992" data-type="line" data-label="" points="490.0961788406551,304.8754873927736 490.0961788406551,289.74434634780346 468.2609825838316,289.74434634780346 468.2609825838316,274.61320530283336 474.0837015856512,274.61320530283336" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999982,-6.119999999999999 1.8449999999999984,-6.119999999999999" data-type="line" data-label="" points="401.5908500129971,419.5989084481414 421.24252664413825,419.5989084481414" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999973,-7.469999999999999 1.1699999999999973,-6.794999999999999 1.3699999999999983,-6.794999999999999 1.3699999999999983,-6.119999999999999 1.1699999999999982,-6.119999999999999" data-type="line" data-label="" points="401.59085001299707,458.9022617104237 401.59085001299707,439.2505850792826 407.41356901481674,439.2505850792826 407.41356901481674,419.5989084481414 401.5908500129971,419.5989084481414" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.4199999999999973,-7.699455349999998 2.174727674999997,-7.699455349999998 2.174727674999997,-7.269999999999999 1.1699999999999973,-7.269999999999999 1.1699999999999973,-7.469999999999999" data-type="line" data-label="" points="437.9828437743696,465.5825318429945 430.84208463737974,465.5825318429945 430.84208463737974,453.0795427086041 401.59085001299707,453.0795427086041 401.59085001299707,458.9022617104237" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.3100000000000005,-0.09999999999999964 -2.6350000000000007,-0.09999999999999964" data-type="line" data-label="" points="271.1619443722381,244.33506649337147 290.81362100337924,244.33506649337147" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.660000000000001,1.6800000000000002 -2.9850000000000003,1.6800000000000002" data-type="line" data-label="" points="260.9721861190538,192.51286737717703 280.623862750195,192.51286737717703" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9499999999999997,1.35 2.9499999999999997,0.7250000000000005 3.175,0.7250000000000005 3.175,0.10000000000000053 2.9749999999999996,0.10000000000000053" data-type="line" data-label="" points="453.41304912919156,202.12035373017937 453.41304912919156,220.3163506108656 459.96360800623864,220.3163506108656 459.96360800623864,238.51234749155188 454.140889004419,238.51234749155188" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.41,-2.92 2.4099999999999997,-2.244999999999999" data-type="line" data-label="" points="437.6917078242787,326.43540441902786 437.6917078242787,306.7837277878867" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="4.249999999999997,-6.119999999999999 2.9749999999999983,-6.119999999999999" data-type="line" data-label="" points="491.2607226410189,419.5989084481414 454.140889004419,419.5989084481414" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-7.200000000000001,-10.398910699999997 -7.400000000000001,-10.398910699999997 -7.400000000000001,-10.198910699999997 -7.200000000000001,-10.198910699999997" data-type="line" data-label="" points="157.9100597868469,544.1733816480373 152.08734078502727,544.1733816480373 152.08734078502727,538.3506626462179 157.9100597868469,538.3506626462179" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-5.200000000000001,-10.198910699999997 -5.000000000000001,-10.198910699999997 -5.000000000000001,-10.398910699999997 -5.200000000000001,-10.398910699999997" data-type="line" data-label="" points="216.13724980504287,538.3506626462179 221.9599688068625,538.3506626462179 221.9599688068625,544.1733816480373 216.13724980504287,544.1733816480373" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-4.760000000000001,1.6800000000000002 -4.960000000000001,1.6800000000000002 -4.960000000000001,-0.09999999999999964 -4.410000000000001,-0.09999999999999964" data-type="line" data-label="" points="228.947231609046,192.51286737717703 223.12451260722642,192.51286737717703 223.12451260722642,244.33506649337147 239.1369898622303,244.33506649337147" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999995,2.45 1.1699999999999995,2.6500000000000004 2.9499999999999997,2.6500000000000004 2.9499999999999997,2.4500000000000006" data-type="line" data-label="" points="401.5908500129972,170.0953992201716 401.5908500129972,164.27268021835198 453.41304912919156,164.27268021835198 453.41304912919156,170.09539922017157" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-7.5994553499999995,-1.3305446499999976 -7.5994553499999995,-0.42804464999999814 -8.965,-0.42804464999999814 -8.965,0.4744553500000013 -7.965000000000001,0.4744553500000013" data-type="line" data-label="" points="146.28047850272944,280.1606450740837 146.28047850272944,253.88562557837272 106.52456459578895,253.88562557837272 106.52456459578895,227.6106060826618 135.63815960488694,227.6106060826618" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-6.3494553499999995,-4.019999999999998 -6.3494553499999995,-4.219999999999998 -7.5994553499999995,-4.219999999999998 -7.5994553499999995,-2.430544649999999" data-type="line" data-label="" points="182.67247226410194,358.4603589290356 182.67247226410194,364.2830779308552 146.28047850272944,364.2830779308552 146.28047850272944,312.1855995840915" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-6.65,-5.8199999999999985 -6.450000000000001,-5.8199999999999985 -6.450000000000001,-6.914727674999998 -7.950000000000001,-6.914727674999998 -7.950000000000001,-8.009455349999998 -7.750000000000001,-8.009455349999998" data-type="line" data-label="" points="173.9225370418508,410.864829945412 179.7452560436704,410.864829945412 179.7452560436704,442.73628812061344 136.07486353002338,442.73628812061344 136.07486353002338,474.6077462958149 141.897582531843,474.6077462958149" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-8.650000000000002,-5.8199999999999985 -9.5625,-5.8199999999999985 -9.5625,-5.024999999999999 -10.475,-5.024999999999999 -10.475,-5.224999999999998" data-type="line" data-label="" points="115.69534702365476,410.864829945412 89.12919157785291,410.864829945412 89.12919157785291,387.71952191317905 62.56303613205097,387.71952191317905 62.56303613205097,393.5422409149987" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999982,-5.92 1.5074999999999983,-5.92 1.5074999999999983,-5.329999999999999 2.41,-5.329999999999999 2.41,-4.02" data-type="line" data-label="" points="401.5908500129971,413.77618944632184 411.4166883285677,413.77618944632184 411.4166883285677,396.599168390954 437.6917078242787,396.599168390954 437.6917078242787,358.46035892903564" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-4.890000000000002,-5.224999999999999 -4.890000000000002,-3.8324999999999996 -1.86945535,-3.8324999999999996 -1.86945535,-2.44" data-type="line" data-label="" points="225.16246425786323,393.54224091499873 225.16246425786323,353.00155986482974 313.10137790486095,353.00155986482974 313.10137790486095,312.4608788146608" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-9.808910699999998,-0.6049999999999982 -9.808910699999998,0.4744553500000017 -7.965000000000001,0.4744553500000017" data-type="line" data-label="" points="81.95529025214461,259.0374319729659 81.95529025214461,227.6106060826618 135.63815960488694,227.6106060826618" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-6.3494553499999995,-2.919999999999998 -6.3494553499999995,-1.6794553499999996 -4.2194553500000005,-1.6794553499999996" data-type="line" data-label="" points="182.67247226410194,326.4354044190278 182.67247226410194,290.31868988822464 244.68442963348065,290.31868988822464" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.0649999999999995,0.3272767499999982 7.265,0.3272767499999982 7.265,1.3167320999999976 5.765,1.3167320999999976 5.765,2.3061874499999973 5.965,2.3061874499999973" data-type="line" data-label="" points="573.2154925916299,231.89550423706794 579.0382115934494,231.89550423706794 579.0382115934494,203.08890189758262 535.3678190798025,203.08890189758262 535.3678190798025,174.28229955809732 541.1905380816221,174.28229955809732" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.0649999999999995,-1.6516339500000008 7.265,-1.6516339500000008 7.265,-0.6621786000000013 5.765,-0.6621786000000013 5.765,0.3272767499999982 5.965,0.3272767499999982" data-type="line" data-label="" points="573.2154925916299,289.50870891603853 579.0382115934494,289.50870891603853 579.0382115934494,260.7021065765532 535.3678190798025,260.7021065765532 535.3678190798025,231.89550423706794 541.1905380816221,231.89550423706794" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.0649999999999995,-3.63054465 7.265,-3.63054465 7.265,-2.6410893000000004 5.765,-2.6410893000000004 5.765,-1.6516339500000008 5.965,-1.6516339500000008" data-type="line" data-label="" points="573.2154925916299,347.1219135950091 579.0382115934494,347.1219135950091 579.0382115934494,318.31531125552385 535.3678190798025,318.31531125552385 535.3678190798025,289.50870891603853 541.1905380816221,289.50870891603853" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.119455350000001,-1.6794553499999991 -2.9194553500000007,-1.6794553499999991 -2.9194553500000007,-1.3399999999999994 -1.8694553500000004,-1.3399999999999994" data-type="line" data-label="" points="276.7093841434884,290.3186898882246 282.53210314530804,290.3186898882246 282.53210314530804,280.435924304653 313.10137790486095,280.435924304653" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.4099999999999997,-1.1149999999999993 2.4099999999999997,-0.9149999999999994 3.460000000000001,-0.9149999999999994 3.460000000000001,-1.1399999999999992" data-type="line" data-label="" points="437.6917078242787,273.88536542760596 437.6917078242787,268.06264642578634 468.2609825838316,268.06264642578634 468.2609825838316,274.61320530283336" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.8694553500000004,-1.3399999999999994 -1.8694553500000004,-0.7199999999999995 -1.3050000000000008,-0.7199999999999995 -1.3050000000000008,-0.09999999999999964 -1.5050000000000008,-0.09999999999999964" data-type="line" data-label="" points="313.10137790486095,280.435924304653 313.10137790486095,262.38549539901226 329.5347023654796,262.38549539901226 329.5347023654796,244.33506649337147 323.71198336366,244.33506649337147" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999995,-1.0999999999999996 1.9909999999999992,-1.0999999999999994 1.9909999999999992,-0.6999999999999995 1.1699999999999995,-0.6999999999999995" data-type="line" data-label="" points="401.5908500129972,273.44866150246946 425.4931115154666,273.44866150246946 425.4931115154666,261.8032234988303 401.5908500129972,261.8032234988303" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-0.8300000000000005,-0.8999999999999996 -1.0300000000000005,-0.8999999999999996 -1.0300000000000005,-0.49999999999999967 -0.8300000000000005,-0.49999999999999967" data-type="line" data-label="" points="343.36365999480114,267.6259425006499 337.5409409929816,267.6259425006499 337.5409409929816,255.98050449701068 343.36365999480114,255.98050449701068" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999995,-0.2999999999999995 1.4699999999999998,-0.2999999999999995 1.4699999999999998,-3.1599999999999997 -1.7710000000000017,-3.1599999999999997 -1.7710000000000017,-6.019999999999999 -0.8300000000000018,-6.02" data-type="line" data-label="" points="401.5908500129972,250.15778549519106 410.3249285157266,250.15778549519106 410.3249285157266,333.4226672212113 315.9677670912399,333.4226672212113 315.9677670912399,416.68754894723156 343.36365999480114,416.6875489472316" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-0.8300000000000005,0.10000000000000042 -1.3425000000000005,0.10000000000000042 -1.3425000000000005,1.6800000000000002 -1.8550000000000004,1.6800000000000002" data-type="line" data-label="" points="343.36365999480114,238.51234749155188 328.44294255263844,238.51234749155188 328.44294255263844,192.51286737717703 313.5222251104757,192.51286737717703" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="4.760000000000001,-1.1399999999999992 5.549999999999997,-1.1399999999999992 5.549999999999997,-3.43054465 5.024,-3.43054465 5.024,-3.83054465 5.549999999999997,-3.83054465 5.549999999999997,-6.119999999999999 5.349999999999997,-6.119999999999999" data-type="line" data-label="" points="506.108656095659,274.61320530283336 529.1083961528464,274.61320530283336 529.1083961528464,341.29919459318955 513.7946451780608,341.29919459318955 513.7946451780608,352.94463259682874 529.1083961528464,352.94463259682874 529.1083961528464,419.5989084481414 523.2856771510267,419.5989084481414" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-8.850000000000001,-8.129999999999999 -8.59,-8.129999999999999 -8.59,-8.130999999999998" data-type="line" data-label="" points="109.87262802183517,478.1172344164284 117.4421627242007,478.1172344164284 117.4421627242007,478.14634801143745" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-5.965000000000001,0.4744553500000013 -5.7540000000000004,0.4744553500000013 -5.7540000000000004,0.27345535000000126" data-type="line" data-label="" points="193.86534962308292,227.6106060826618 200.0083181700026,227.6106060826618 200.0083181700026,233.4624386794905" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.6400000000000023,-7.564455349999998 -3.851000000000002,-7.564455349999998 -3.851000000000002,-7.765455349999998" data-type="line" data-label="" points="261.5544580192357,461.65219651676625 255.41148947231605,461.65219651676625 255.41148947231605,467.504029113595" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-9.808910699999998,-2.9149999999999983 -9.808910699999998,-2.814999999999998 -9.708910699999999,-2.814999999999998 -9.708910699999999,-1.763999999999998 -10.259910699999997,-1.763999999999998" data-type="line" data-label="" points="81.95529025214461,326.2898364439823 81.95529025214461,323.3784769430725 84.86664975305439,323.3784769430725 84.86664975305439,292.7800885885105 68.82505890304145,292.7800885885105" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.8800000000000003,4.0200000000000005 -1.8800000000000003,5.321000000000001 -2.9310000000000005,5.321000000000001" data-type="line" data-label="" points="312.7943852352482,124.38705505588771 312.7943852352482,86.51026794905121 282.19599688068627,86.51026794905121" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1699999999999973,-8.57 1.1699999999999973,-8.671 0.9689999999999974,-8.671" data-type="line" data-label="" points="401.59085001299707,490.92721622043155 401.59085001299707,493.8676893163504 395.7390174161684,493.8676893163504" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="4.210000000000001,-3.2794553499999983 4.210000000000001,-3.8304553499999985 4.159000000000001,-3.8304553499999985" data-type="line" data-label="" points="490.0961788406551,336.9004419027814 490.0961788406551,352.9420327527944 488.6113854951911,352.9420327527944" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="-6.200000000000001" data-y="-10.298910699999997" x="157.9100597868469" y="532.5279436443982" width="58.227190018195984" height="17.468157005458806" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="-10.05" data-y="-8.229999999999999" x="45.82271900181962" y="472.2945154146088" width="58.227190018195984" height="17.468157005458806" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="-7.650000000000001" data-y="-5.8199999999999985" x="115.69534702365476" y="405.04211094359243" width="58.22719001819604" height="11.645438003639129" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="-6.965000000000001" data-y="0.4744553500000013" x="135.63815960488694" y="221.7878870808422" width="58.227190018195984" height="11.645438003639185" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_4" data-x="-2.6400000000000023" data-y="-7.464455349999998" x="261.55445801923565" y="450.0067585131271" width="58.22719001819604" height="17.46815700545875" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_5" data-x="0.16999999999999948" data-y="-0.49999999999999956" x="343.3636599948011" y="232.68962848973229" width="58.22719001819604" height="46.5817520145568" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_6" data-x="0.16999999999999815" data-y="-6.02" x="343.36365999480114" y="405.04211094359243" width="58.227190018195984" height="23.29087600727837" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_7" data-x="-9.6714107" data-y="-3.464999999999999" x="69.72758034832336" y="326.28983644398227" width="32.46165843514433" height="32.02495451000783" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_8" data-x="-10.337499999999999" data-y="-5.774999999999999" x="50.33532622822983" y="393.54224091499873" width="32.46165843514433" height="32.02495451000783" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_9" data-x="-9.551410699999998" data-y="-1.154999999999999" x="69.72758034832344" y="259.0374319729659" width="39.448921237327795" height="32.02495451000783" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_10" data-x="-4.597500000000002" data-y="-5.774999999999999" x="219.50116995061086" y="393.54224091499873" width="28.35404169482706" height="32.024954510007774" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_11" data-x="-7.200000000000001" data-y="-8.009455349999998" x="141.897582531843" y="463.2693009617884" width="32.024954510007774" height="22.67689066805292" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_12" data-x="-7.306955349999999" data-y="-1.8805446499999983" x="140.6191841954771" y="280.1606450740836" width="28.35404169482706" height="32.02495451000783" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_13" data-x="-4.890000000000002" data-y="-7.364455349999998" x="209.14998700285935" y="443.32648838055627" width="32.0249545100078" height="25.005978268780837" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_14" data-x="6.515" data-y="-3.63054465" x="541.1905380816221" y="335.78346826098266" width="32.024954510007774" height="22.676890668052977" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_15" data-x="6.515" data-y="-1.6516339500000008" x="541.1905380816221" y="278.170263582012" width="32.024954510007774" height="22.676890668053034" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_16" data-x="6.515" data-y="0.3272767499999982" x="541.1905380816221" y="220.55705890304142" width="32.024954510007774" height="22.676890668053005" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_17" data-x="6.515" data-y="2.3061874499999973" x="541.1905380816221" y="162.94385422407083" width="32.024954510007774" height="22.676890668052977" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_18" data-x="-5.9969553499999995" data-y="-3.469999999999998" x="177.01117795684956" y="326.4354044190278" width="31.84767309591885" height="32.024954510007774" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_19" data-x="-3.6694553500000007" data-y="-1.6794553499999991" x="244.68442963348065" y="277.81570075383416" width="32.024954510007774" height="25.005978268780837" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_20" data-x="-3.6800000000000006" data-y="3.2594553499999996" x="244.37743696386798" y="134.0262548479335" width="32.024954510007774" height="25.005978268780837" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_21" data-x="-0.6300000000000008" data-y="1.6894553499999998" x="333.1739017416169" y="179.73459901221736" width="32.024954510007774" height="25.005978268780837" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_22" data-x="4.502500000000001" data-y="-2.7294553499999985" x="484.4348845334028" y="304.8754873927736" width="28.35404169482706" height="32.024954510007774" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_23" data-x="2.9699999999999975" data-y="-7.699455349999998" x="437.9828437743696" y="454.24408650896805" width="32.024954510007774" height="22.676890668052977" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_24" data-x="-1.5869553500000007" data-y="-1.8899999999999997" x="307.4400835976085" y="280.435924304653" width="27.771769794645138" height="32.02495451000783" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_25" data-x="-1.6475000000000004" data-y="3.47" x="307.1330909279959" y="124.38705505588773" width="24.860410293735356" height="32.0249545100078" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_26" data-x="1.4024999999999994" data-y="1.9000000000000004" x="395.92955570574475" y="170.0953992201716" width="24.860410293735356" height="32.024954510007774" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_27" data-x="4.210000000000001" data-y="-1.1399999999999992" x="474.0837015856512" y="262.11021616844295" width="32.024954510007774" height="25.005978268780837" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_28" data-x="1.4524999999999972" data-y="-8.02" x="395.9295557057447" y="458.9022617104238" width="27.771769794645138" height="32.02495451000783" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_29" data-x="-2.0700000000000007" data-y="-0.09999999999999964" x="290.81362100337924" y="227.15804543800363" width="32.89836236028077" height="34.35404211073566" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_30" data-x="-3.8600000000000008" data-y="-0.09999999999999962" x="239.13698986223034" y="232.99662115934495" width="32.0249545100078" height="22.676890668053005" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_31" data-x="-2.4200000000000004" data-y="1.6800000000000002" x="280.62386275019503" y="175.33584632180919" width="32.898362360280714" height="34.35404211073566" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_32" data-x="-4.210000000000001" data-y="1.6800000000000002" x="228.947231609046" y="181.17442204315054" width="32.024954510007774" height="22.676890668052977" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_33" data-x="2.4099999999999997" data-y="0.10000000000000009" x="421.24252664413837" y="221.33532643618406" width="32.898362360280714" height="34.354042110735634" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_34" data-x="3.2424999999999997" data-y="1.9000000000000004" x="447.75175482193924" y="170.0953992201716" width="28.354041694827117" height="32.0249545100078" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_35" data-x="2.6525" data-y="-1.6799999999999993" x="428.2297894463218" y="273.88536542760596" width="33.04393033532625" height="32.898362360280714" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_36" data-x="2.7525000000000004" data-y="-3.4699999999999998" x="432.0304135170263" y="326.43540441902786" width="31.2654011957369" height="32.024954510007774" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_37" data-x="2.4099999999999984" data-y="-6.119999999999999" x="421.24252664413825" y="402.42188739277356" width="32.89836236028077" height="34.354042110735634" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="schematic_component_38" data-x="4.799999999999997" data-y="-6.119999999999999" x="491.2607226410189" y="407.095919313751" width="32.024954510007774" height="25.005978268780837" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="MY_18650_02" data-x="-6.140000000000001" data-y="-10.728910699999997" x="169.5554977904861" y="551.1606444502208" width="38.429945412009374" height="5.240447101637756" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="J_BAT_POS" data-x="-6.260000000000001" data-y="-9.868910699999997" x="169.55549779048613" y="526.1229527423966" width="31.442682609825823" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="MY_18650_02" data-x="-9.99" data-y="-8.659999999999998" x="57.46815700545881" y="490.9272162204315" width="38.429945412009374" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="J_BAT_NEG" data-x="-10.11" data-y="-7.799999999999999" x="57.468157005458835" y="465.8895245126073" width="31.442682609825795" height="5.240447101637585" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="BAT54WS" data-x="-7.830000000000002" data-y="-6.149999999999999" x="127.34078502729396" y="417.8520927475955" width="24.4554198076423" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="D_PROT" data-x="-7.890000000000002" data-y="-5.489999999999998" x="127.34078502729398" y="398.63712004159083" width="20.96178840655051" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="BAT54WS" data-x="-7.145000000000001" data-y="0.14445535000000126" x="147.28359760852612" y="234.59786888484533" width="24.4554198076423" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="D_SENSE_CLAMP" data-x="-6.785000000000001" data-y="0.8044553500000013" x="147.28359760852612" y="215.38289617884064" width="45.41720821419287" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="LM4040D25FTA" data-x="-2.5200000000000022" data-y="-7.894455349999998" x="273.1998960228749" y="468.63945931894983" width="41.92357681310108" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="U_REF" data-x="-2.940000000000002" data-y="-7.034455349999998" x="273.1998960228749" y="443.6017676111255" width="17.46815700545875" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="LMV339IDR" data-x="0.10999999999999943" data-y="-1.4299999999999997" x="355.0090979984403" y="280.435924304653" width="31.44268260982585" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="U1" data-x="-0.3100000000000006" data-y="0.4300000000000005" x="355.0090979984403" y="226.2846375877307" width="6.987262802183523" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="LMV331IDBVR" data-x="0.22999999999999798" data-y="-6.55" x="355.0090979984403" y="429.49753075123476" width="38.42994541200932" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="U2" data-x="-0.31000000000000194" data-y="-5.489999999999999" x="355.0090979984403" y="398.6371200415909" width="6.987262802183523" height="5.240447101637642" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="netId: BAT_RAW
2
2
  globalConnNetId: connectivity_net12" data-x="-7.880000000000001" data-y="-10.398910699999997" x="124.1382895762932" y="541.2620221471275" width="27.94905120873409" height="5.822719001819564" fill="hsl(80, 100%, 50%, 0.35)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="netId: BAT_RAW
3
3
  globalConnNetId: connectivity_net12" data-x="-4.520000000000001" data-y="-10.198910699999997" x="221.95996880686243" y="535.439303145308" width="27.94905120873412" height="5.822719001819564" fill="hsl(80, 100%, 50%, 0.35)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="netId: BAT_RAW
4
4
  globalConnNetId: connectivity_net12" data-x="-5.970000000000001" data-y="-5.8199999999999985" x="179.7452560436704" y="407.9534704445022" width="27.94905120873409" height="5.822719001819564" fill="hsl(80, 100%, 50%, 0.35)" stroke="black" stroke-width="0.03434821428571429"/></g><g><rect data-type="rect" data-label="netId: GND
@@ -1,4 +1,4 @@
1
- <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="13.45,16 8.9,14.5" data-type="line" data-label="" points="439.8389477922427,115.96732009126299 97.87142665414046,228.70386552140667" fill="none" stroke="hsl(16, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="14.55,16 8.9,15.1" data-type="line" data-label="" points="522.5124144410149,115.96732009126299 97.87142665414046,183.6092473493493" fill="none" stroke="hsl(16, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="13.45,14 11.1,13.1" data-type="line" data-label="" points="439.8389477922427,266.28271399812115 263.2183599516844,333.92464125620734" fill="none" stroke="hsl(160, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.9,15.1 8.9,14.7" data-type="line" data-label="" points="97.87142665414046,183.6092473493493 97.87142665414046,213.67232613072088" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,15.1 11.1,13.3" data-type="line" data-label="" points="97.87142665414046,183.6092473493493 263.2183599516844,318.89310186552143" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,15.1 14.55,14" data-type="line" data-label="" points="97.87142665414046,183.6092473493493 522.5124144410149,266.28271399812115" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,15.1 14.55,16" data-type="line" data-label="" points="97.87142665414046,183.6092473493493 522.5124144410149,115.96732009126299" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.7 11.1,13.3" data-type="line" data-label="" points="97.87142665414046,213.67232613072088 263.2183599516844,318.89310186552143" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.7 14.55,14" data-type="line" data-label="" points="97.87142665414046,213.67232613072088 522.5124144410149,266.28271399812115" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.7 14.55,16" data-type="line" data-label="" points="97.87142665414046,213.67232613072088 522.5124144410149,115.96732009126299" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="11.1,13.3 14.55,14" data-type="line" data-label="" points="263.2183599516844,318.89310186552143 522.5124144410149,266.28271399812115" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="11.1,13.3 14.55,16" data-type="line" data-label="" points="263.2183599516844,318.89310186552143 522.5124144410149,115.96732009126299" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="14.55,14 14.55,16" data-type="line" data-label="" points="522.5124144410149,266.28271399812115 522.5124144410149,115.96732009126299" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.9 8.9,14.5" data-type="line" data-label="" points="97.87142665414046,198.64078674003486 97.87142665414046,228.70386552140667" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.9 11.1,12.7" data-type="line" data-label="" points="97.87142665414046,198.64078674003486 263.2183599516844,363.98772003757904" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.9 13.14,10" data-type="line" data-label="" points="97.87142665414046,198.64078674003486 416.54006173667983,566.9135018118375" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.9 13.45,16" data-type="line" data-label="" points="97.87142665414046,198.64078674003486 439.8389477922427,115.96732009126299" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.5 11.1,12.7" data-type="line" data-label="" points="97.87142665414046,228.70386552140667 263.2183599516844,363.98772003757904" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.5 13.14,10" data-type="line" data-label="" points="97.87142665414046,228.70386552140667 416.54006173667983,566.9135018118375" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.5 13.45,16" data-type="line" data-label="" points="97.87142665414046,228.70386552140667 439.8389477922427,115.96732009126299" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="11.1,12.7 13.14,10" data-type="line" data-label="" points="263.2183599516844,363.98772003757904 416.54006173667983,566.9135018118375" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="11.1,12.7 13.45,16" data-type="line" data-label="" points="263.2183599516844,363.98772003757904 439.8389477922427,115.96732009126299" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="13.14,10 13.45,16" data-type="line" data-label="" points="416.54006173667983,566.9135018118375 439.8389477922427,115.96732009126299" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="11.1,15.5 14.86,10" data-type="line" data-label="" points="263.2183599516844,153.54616856797747 545.8113004965778,566.9135018118375" fill="none" stroke="hsl(50, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.5 8.600000000000001,14.5 8.600000000000001,14.9 8.9,14.9" data-type="line" data-label="" points="97.87142665414046,228.70386552140667 75.32411756811189,228.70386552140667 75.32411756811189,198.64078674003486 97.87142665414046,198.64078674003486" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="14.55,16 14.75,16 14.75,14 14.55,14" data-type="line" data-label="" points="522.5124144410149,115.96732009126299 537.5439538317005,115.96732009126299 537.5439538317005,266.28271399812115 522.5124144410149,266.28271399812115" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.9,14.7 8.8,14.7 8.8,15.1 8.9,15.1" data-type="line" data-label="" points="97.87142665414046,213.67232613072088 90.35565695879757,213.67232613072088 90.35565695879757,183.6092473493493 97.87142665414046,183.6092473493493" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="13.45,16 12.274999999999999,16 12.274999999999999,13.299999999999999 13.630999999999998,13.299999999999999 13.630999999999998,12.9 12.274999999999999,12.9 12.274999999999999,12.7 11.1,12.7" data-type="line" data-label="" points="439.8389477922427,115.96732009126299 351.52865387196346,115.96732009126299 351.52865387196346,318.89310186552154 453.4424909408133,318.89310186552154 453.4424909408133,348.95618064689313 351.52865387196346,348.95618064689313 351.52865387196346,363.98772003757904 263.2183599516844,363.98772003757904" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="14.75,16 15.010000000000002,16 15.010000000000002,15.999" data-type="line" data-label="" points="537.5439538317005,115.96732009126299 557.0849550395922,115.96732009126299 557.0849550395922,116.04247778821627" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="11.1,13.3 13.860999999999999,13.3 13.860999999999999,12.799000000000001" data-type="line" data-label="" points="263.2183599516844,318.89310186552143 470.72876124010213,318.89310186552143 470.72876124010213,356.5471080391894" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.600000000000001,14.5 8.34,14.5 8.34,14.501" data-type="line" data-label="" points="75.32411756811189,228.70386552140667 55.783116360220106,228.70386552140667 55.783116360220106,228.62870782445316" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="13.14,10 12.929,10 12.929,10.401" data-type="line" data-label="" points="416.54006173667983,566.9135018118375 400.6817876795062,566.9135018118375 400.6817876795062,536.7752653335124" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="10" data-y="14" x="97.87142665414046" y="138.51462917729174" width="165.34693329754396" height="255.53616964165883" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013305357142857141"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="14" data-y="14" x="439.83894779224266" y="219.68494188699515" width="82.6734666487722" height="93.19554422225201" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013305357142857141"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="14" data-y="10" x="416.5400617366798" y="537.6429346396459" width="129.27123875989798" height="58.54113434438318" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013305357142857141"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="14" data-y="16" x="439.83894779224266" y="69.36954798013699" width="82.6734666487722" height="93.19554422225201" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013305357142857141"/></g><g><rect data-type="rect" data-label="ATMEGA328P_AU" data-x="10.080000000000002" data-y="12.17" x="127.93450543551216" y="397.05710669708776" width="117.24600724734955" height="13.528385451617169" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.013305357142857141"/></g><g><rect data-type="rect" data-label="U_MCU" data-x="9.600000000000001" data-y="15.83" x="127.93450543551222" y="121.97993584753738" width="45.094618172057494" height="13.528385451617169" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.013305357142857141"/></g><g><rect data-type="rect" data-label="netId: GND
1
+ <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="13.45,16 8.9,14.5" data-type="line" data-label="" points="439.8389477922427,115.96732009126299 97.87142665414046,228.70386552140667" fill="none" stroke="hsl(16, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="14.55,16 8.9,15.1" data-type="line" data-label="" points="522.5124144410149,115.96732009126299 97.87142665414046,183.6092473493493" fill="none" stroke="hsl(16, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="13.45,14 11.1,13.1" data-type="line" data-label="" points="439.8389477922427,266.28271399812115 263.2183599516844,333.92464125620734" fill="none" stroke="hsl(160, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.9,15.1 8.9,14.7" data-type="line" data-label="" points="97.87142665414046,183.6092473493493 97.87142665414046,213.67232613072088" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,15.1 11.1,13.3" data-type="line" data-label="" points="97.87142665414046,183.6092473493493 263.2183599516844,318.89310186552143" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,15.1 14.55,14" data-type="line" data-label="" points="97.87142665414046,183.6092473493493 522.5124144410149,266.28271399812115" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,15.1 14.55,16" data-type="line" data-label="" points="97.87142665414046,183.6092473493493 522.5124144410149,115.96732009126299" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.7 11.1,13.3" data-type="line" data-label="" points="97.87142665414046,213.67232613072088 263.2183599516844,318.89310186552143" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.7 14.55,14" data-type="line" data-label="" points="97.87142665414046,213.67232613072088 522.5124144410149,266.28271399812115" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.7 14.55,16" data-type="line" data-label="" points="97.87142665414046,213.67232613072088 522.5124144410149,115.96732009126299" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="11.1,13.3 14.55,14" data-type="line" data-label="" points="263.2183599516844,318.89310186552143 522.5124144410149,266.28271399812115" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="11.1,13.3 14.55,16" data-type="line" data-label="" points="263.2183599516844,318.89310186552143 522.5124144410149,115.96732009126299" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="14.55,14 14.55,16" data-type="line" data-label="" points="522.5124144410149,266.28271399812115 522.5124144410149,115.96732009126299" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.9 8.9,14.5" data-type="line" data-label="" points="97.87142665414046,198.64078674003486 97.87142665414046,228.70386552140667" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.9 11.1,12.7" data-type="line" data-label="" points="97.87142665414046,198.64078674003486 263.2183599516844,363.98772003757904" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.9 13.14,10" data-type="line" data-label="" points="97.87142665414046,198.64078674003486 416.54006173667983,566.9135018118375" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.9 13.45,16" data-type="line" data-label="" points="97.87142665414046,198.64078674003486 439.8389477922427,115.96732009126299" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.5 11.1,12.7" data-type="line" data-label="" points="97.87142665414046,228.70386552140667 263.2183599516844,363.98772003757904" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.5 13.14,10" data-type="line" data-label="" points="97.87142665414046,228.70386552140667 416.54006173667983,566.9135018118375" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.5 13.45,16" data-type="line" data-label="" points="97.87142665414046,228.70386552140667 439.8389477922427,115.96732009126299" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="11.1,12.7 13.14,10" data-type="line" data-label="" points="263.2183599516844,363.98772003757904 416.54006173667983,566.9135018118375" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="11.1,12.7 13.45,16" data-type="line" data-label="" points="263.2183599516844,363.98772003757904 439.8389477922427,115.96732009126299" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="13.14,10 13.45,16" data-type="line" data-label="" points="416.54006173667983,566.9135018118375 439.8389477922427,115.96732009126299" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="11.1,15.5 14.86,10" data-type="line" data-label="" points="263.2183599516844,153.54616856797747 545.8113004965778,566.9135018118375" fill="none" stroke="hsl(50, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="8.9,14.5 8.600000000000001,14.5 8.600000000000001,14.9 8.9,14.9" data-type="line" data-label="" points="97.87142665414046,228.70386552140667 75.32411756811189,228.70386552140667 75.32411756811189,198.64078674003486 97.87142665414046,198.64078674003486" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="14.55,16 14.75,16 14.75,14 14.55,14" data-type="line" data-label="" points="522.5124144410149,115.96732009126299 537.5439538317005,115.96732009126299 537.5439538317005,266.28271399812115 522.5124144410149,266.28271399812115" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.9,14.7 8.8,14.7 8.8,15.1 8.9,15.1" data-type="line" data-label="" points="97.87142665414046,213.67232613072088 90.35565695879757,213.67232613072088 90.35565695879757,183.6092473493493 97.87142665414046,183.6092473493493" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="13.45,16 12.274999999999999,16 12.274999999999999,13.299999999999999 13.630999999999998,13.299999999999999 13.630999999999998,12.9 12.274999999999999,12.9 12.274999999999999,12.7 11.1,12.7" data-type="line" data-label="" points="439.8389477922427,115.96732009126299 351.52865387196346,115.96732009126299 351.52865387196346,318.89310186552154 453.4424909408133,318.89310186552154 453.4424909408133,348.95618064689313 351.52865387196346,348.95618064689313 351.52865387196346,363.98772003757904 263.2183599516844,363.98772003757904" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="14.75,16 15.010000000000002,16 15.010000000000002,15.999" data-type="line" data-label="" points="537.5439538317005,115.96732009126299 557.0849550395922,115.96732009126299 557.0849550395922,116.04247778821627" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="11.1,13.3 11.2,13.3 11.2,13.280000000000001 13.860999999999999,13.280000000000001 13.860999999999999,12.799000000000001" data-type="line" data-label="" points="263.2183599516844,318.89310186552143 270.7341296470273,318.89310186552143 270.7341296470273,320.39625580459006 470.72876124010213,320.39625580459006 470.72876124010213,356.5471080391894" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.600000000000001,14.5 8.34,14.5 8.34,14.501" data-type="line" data-label="" points="75.32411756811189,228.70386552140667 55.783116360220106,228.70386552140667 55.783116360220106,228.62870782445316" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="13.14,10 12.929,10 12.929,10.401" data-type="line" data-label="" points="416.54006173667983,566.9135018118375 400.6817876795062,566.9135018118375 400.6817876795062,536.7752653335124" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="10" data-y="14" x="97.87142665414046" y="138.51462917729174" width="165.34693329754396" height="255.53616964165883" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013305357142857141"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="14" data-y="14" x="439.83894779224266" y="219.68494188699515" width="82.6734666487722" height="93.19554422225201" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013305357142857141"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="14" data-y="10" x="416.5400617366798" y="537.6429346396459" width="129.27123875989798" height="58.54113434438318" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013305357142857141"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="14" data-y="16" x="439.83894779224266" y="69.36954798013699" width="82.6734666487722" height="93.19554422225201" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013305357142857141"/></g><g><rect data-type="rect" data-label="ATMEGA328P_AU" data-x="10.080000000000002" data-y="12.17" x="127.93450543551216" y="397.05710669708776" width="117.24600724734955" height="13.528385451617169" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.013305357142857141"/></g><g><rect data-type="rect" data-label="U_MCU" data-x="9.600000000000001" data-y="15.83" x="127.93450543551222" y="121.97993584753738" width="45.094618172057494" height="13.528385451617169" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.013305357142857141"/></g><g><rect data-type="rect" data-label="netId: GND
2
2
  globalConnNetId: connectivity_net1" data-x="15.010000000000002" data-y="15.759" x="541.301838679372" y="116.04247778821627" width="31.566232720440212" height="36.075694537646086" fill="#00000066" stroke="#000000" stroke-width="0.013305357142857141"/></g><g><rect data-type="rect" data-label="netId: GND
3
3
  globalConnNetId: connectivity_net1" data-x="13.860999999999999" data-y="12.559000000000001" x="454.945644879882" y="356.54710803918937" width="31.566232720440212" height="36.07569453764597" fill="#00000066" stroke="#000000" stroke-width="0.013305357142857141"/></g><g><rect data-type="rect" data-label="netId: VCC_3V3
4
4
  globalConnNetId: connectivity_net0" data-x="12.862499999999999" data-y="16.48" x="379.9006844718829" y="43.81593101597093" width="31.566232720440325" height="72.15138907529195" fill="#ef444466" stroke="#ef4444" stroke-width="0.013305357142857141"/></g><g><rect data-type="rect" data-label="netId: VCC_3V3
@@ -0,0 +1,70 @@
1
+ <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="-11.342500000000001,-18.990000000000002 -9.797500000000001,-18.815" data-type="line" data-label="" points="428.00799467022,320.5969353764158 543.2911392405065,307.53897401732183" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-11.342500000000001,-18.990000000000002 -9.797500000000001,-20.625000000000004" data-type="line" data-label="" points="428.00799467022,320.5969353764158 543.2911392405065,442.5956029313793" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-9.797500000000001,-18.815 -9.797500000000001,-20.625000000000004" data-type="line" data-label="" points="543.2911392405065,307.53897401732183 543.2911392405065,442.5956029313793" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-11.342500000000001,-18.04 -9.797500000000001,-18.215" data-type="line" data-label="" points="428.00799467022,249.7108594270485 543.2911392405065,262.76882078614244" fill="none" stroke="hsl(273, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-11.342500000000001,-18.240000000000002 -9.797500000000001,-20.025000000000002" data-type="line" data-label="" points="428.00799467022,264.6342438374418 543.2911392405065,397.8254497001999" fill="none" stroke="hsl(274, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-9.797500000000001,-18.815 -9.797500000000001,-18.990000000000002 -11.342500000000001,-18.990000000000002" data-type="line" data-label="" points="543.2911392405065,307.53897401732183 543.2911392405065,320.5969353764158 428.00799467022,320.5969353764158" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-9.797500000000001,-20.625000000000004 -9.797500000000001,-20.825000000000003 -10.322500000000002,-20.825000000000003 -10.322500000000002,-19.015 -9.797500000000001,-19.015 -9.797500000000001,-18.815" data-type="line" data-label="" points="543.2911392405065,442.5956029313793 543.2911392405065,457.51898734177234 504.1172551632246,457.51898734177234 504.1172551632246,322.4623584277149 543.2911392405065,322.4623584277149 543.2911392405065,307.53897401732183" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-11.342500000000001,-18.04 -9.797500000000001,-18.04 -9.797500000000001,-18.215" data-type="line" data-label="" points="428.00799467022,249.7108594270485 543.2911392405065,249.7108594270485 543.2911392405065,262.76882078614244" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-11.342500000000001,-17.29 -11.041500000000001,-17.29 -11.041500000000001,-17.139" data-type="line" data-label="" points="428.00799467022,193.74816788807448 450.46768820786156,193.74816788807448 450.46768820786156,182.48101265822766" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-9.797500000000001,-20.025000000000002 -9.797500000000001,-19.925 -9.697500000000002,-19.925 -9.697500000000002,-18.874 -10.1485,-18.874" data-type="line" data-label="" points="543.2911392405065,397.8254497001999 543.2911392405065,390.36375749500326 550.752831445703,390.36375749500326 550.752831445703,311.9413724183876 517.1005996002667,311.9413724183876" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_16" data-x="-13.9425" data-y="-18.14" x="40.000000000000284" y="182.55562958027986" width="388.0079946702198" height="149.23384410393055" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013401785714285713"/></g><g><rect data-type="rect" data-label="schematic_component_17" data-x="-9.580000000000002" data-y="-18.515" x="519.0406395736176" y="262.76882078614244" width="80.95936042638255" height="44.77015323117939" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013401785714285713"/></g><g><rect data-type="rect" data-label="schematic_component_18" data-x="-9.580000000000002" data-y="-20.325000000000003" x="519.0406395736176" y="397.8254497001999" width="80.95936042638255" height="44.77015323117939" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013401785714285713"/></g><g><rect data-type="rect" data-label="U3" data-x="-16.0225" data-y="-17.025000000000002" x="65.36975349766828" y="164.6475682878082" width="26.862091938707408" height="18.654230512991262" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.013401785714285713"/></g><g><rect data-type="rect" data-label="netId: VBUS
2
+ globalConnNetId: connectivity_net3" data-x="-11.041500000000001" data-y="-16.929" x="428.08261159227186" y="151.14190539640208" width="44.77015323117939" height="31.339107261825575" fill="#ef444466" stroke="#ef4444" stroke-width="0.013401785714285713"/></g><g><rect data-type="rect" data-label="netId: D_PLUS
3
+ globalConnNetId: connectivity_net2" data-x="-10.921500000000002" data-y="-17.490000000000002" x="428.08261159227186" y="201.20986009327112" width="62.67821452365092" height="14.923384410393282" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013401785714285713"/></g><g><rect data-type="rect" data-label="netId: D_MINUS
4
+ globalConnNetId: connectivity_net1" data-x="-10.861500000000001" data-y="-17.69" x="428.08261159227186" y="216.13324450366417" width="71.6322451698868" height="14.923384410393282" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013401785714285713"/></g><g><rect data-type="rect" data-label="netId: CC1
5
+ globalConnNetId: connectivity_net4" data-x="-9.557500000000001" data-y="-18.04" x="543.2911392405065" y="242.24916722185185" width="35.8161225849434" height="14.923384410393282" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013401785714285713"/></g><g><rect data-type="rect" data-label="netId: CC2
6
+ globalConnNetId: connectivity_net5" data-x="-11.101500000000001" data-y="-18.240000000000002" x="428.0826115922719" y="257.17255163224513" width="35.8161225849434" height="14.923384410393282" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013401785714285713"/></g><g><rect data-type="rect" data-label="netId: CC2
7
+ globalConnNetId: connectivity_net5" data-x="-10.3885" data-y="-18.874" x="481.28447701532326" y="304.47968021319093" width="35.8161225849434" height="14.923384410393282" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013401785714285713"/></g><g><rect data-type="rect" data-label="netId: GND
8
+ globalConnNetId: connectivity_net0" data-x="-9.797500000000001" data-y="-21.035000000000004" x="525.3830779480347" y="457.51898734177234" width="35.8161225849434" height="31.339107261825575" fill="#00000066" stroke="#000000" stroke-width="0.013401785714285713"/></g><g><circle data-type="point" data-label="schematic_port_83
9
+ x+" data-x="-11.342500000000001" data-y="-17.29" cx="428.00799467022" cy="193.74816788807448" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_84
10
+ x+" data-x="-11.342500000000001" data-y="-17.490000000000002" cx="428.00799467022" cy="208.67155229846776" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_85
11
+ x+" data-x="-11.342500000000001" data-y="-17.69" cx="428.00799467022" cy="223.5949367088608" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_86
12
+ x+" data-x="-11.342500000000001" data-y="-18.04" cx="428.00799467022" cy="249.7108594270485" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_87
13
+ x+" data-x="-11.342500000000001" data-y="-18.240000000000002" cx="428.00799467022" cy="264.6342438374418" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_88
14
+ x+" data-x="-11.342500000000001" data-y="-18.59" cx="428.00799467022" cy="290.75016655562945" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_89
15
+ x+" data-x="-11.342500000000001" data-y="-18.79" cx="428.00799467022" cy="305.6735509660225" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_90
16
+ x+" data-x="-11.342500000000001" data-y="-18.990000000000002" cx="428.00799467022" cy="320.5969353764158" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_91
17
+ y+" data-x="-9.797500000000001" data-y="-18.215" cx="543.2911392405065" cy="262.76882078614244" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_92
18
+ y-" data-x="-9.797500000000001" data-y="-18.815" cx="543.2911392405065" cy="307.53897401732183" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_93
19
+ y+" data-x="-9.797500000000001" data-y="-20.025000000000002" cx="543.2911392405065" cy="397.8254497001999" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_94
20
+ y-" data-x="-9.797500000000001" data-y="-20.625000000000004" cx="543.2911392405065" cy="442.5956029313793" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
21
+ orientation: y+" data-x="-11.041500000000001" data-y="-17.139" cx="450.46768820786156" cy="182.48101265822766" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
22
+ orientation: x+" data-x="-11.342500000000001" data-y="-17.490000000000002" cx="428.00799467022" cy="208.67155229846776" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
23
+ orientation: x+" data-x="-11.342500000000001" data-y="-17.69" cx="428.00799467022" cy="223.5949367088608" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
24
+ orientation: x+" data-x="-9.797500000000001" data-y="-18.04" cx="543.2911392405065" cy="249.7108594270485" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
25
+ orientation: x+" data-x="-11.342500000000001" data-y="-18.240000000000002" cx="428.00799467022" cy="264.6342438374418" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
26
+ orientation: x-" data-x="-10.1485" data-y="-18.874" cx="517.1005996002667" cy="311.9413724183876" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
27
+ orientation: y-" data-x="-9.797500000000001" data-y="-20.825000000000003" cx="543.2911392405065" cy="457.51898734177234" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
28
+ document.currentScript.parentElement.addEventListener('mousemove', (e) => {
29
+ const svg = e.currentTarget;
30
+ const rect = svg.getBoundingClientRect();
31
+ const x = e.clientX - rect.left;
32
+ const y = e.clientY - rect.top;
33
+ const crosshair = svg.getElementById('crosshair');
34
+ const h = svg.getElementById('crosshair-h');
35
+ const v = svg.getElementById('crosshair-v');
36
+ const coords = svg.getElementById('coordinates');
37
+
38
+ crosshair.style.display = 'block';
39
+ h.setAttribute('x1', '0');
40
+ h.setAttribute('x2', '640');
41
+ h.setAttribute('y1', y);
42
+ h.setAttribute('y2', y);
43
+ v.setAttribute('x1', x);
44
+ v.setAttribute('x2', x);
45
+ v.setAttribute('y1', '0');
46
+ v.setAttribute('y2', '640');
47
+
48
+ // Calculate real coordinates using inverse transformation
49
+ const matrix = {"a":74.61692205196536,"c":0,"e":1274.3504330446372,"b":0,"d":-74.61692205196536,"f":-1096.3784143904065};
50
+ // Manually invert and apply the affine transform
51
+ // Since we only use translate and scale, we can directly compute:
52
+ // x' = (x - tx) / sx
53
+ // y' = (y - ty) / sy
54
+ const sx = matrix.a;
55
+ const sy = matrix.d;
56
+ const tx = matrix.e;
57
+ const ty = matrix.f;
58
+ const realPoint = {
59
+ x: (x - tx) / sx,
60
+ y: (y - ty) / sy // Flip y back since we used negative scale
61
+ }
62
+
63
+ coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
64
+ coords.setAttribute('x', (x + 5).toString());
65
+ coords.setAttribute('y', (y - 5).toString());
66
+ });
67
+ document.currentScript.parentElement.addEventListener('mouseleave', () => {
68
+ document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
69
+ });
70
+ ]]></script></svg>
@@ -0,0 +1,164 @@
1
+ {
2
+ "chips": [
3
+ {
4
+ "chipId": "schematic_component_16",
5
+ "center": {
6
+ "x": -13.9425,
7
+ "y": -18.14
8
+ },
9
+ "width": 5.199999999999999,
10
+ "height": 2,
11
+ "pins": [
12
+ {
13
+ "pinId": "schematic_port_83",
14
+ "x": -11.342500000000001,
15
+ "y": -17.29
16
+ },
17
+ {
18
+ "pinId": "schematic_port_84",
19
+ "x": -11.342500000000001,
20
+ "y": -17.490000000000002
21
+ },
22
+ {
23
+ "pinId": "schematic_port_85",
24
+ "x": -11.342500000000001,
25
+ "y": -17.69
26
+ },
27
+ {
28
+ "pinId": "schematic_port_86",
29
+ "x": -11.342500000000001,
30
+ "y": -18.04
31
+ },
32
+ {
33
+ "pinId": "schematic_port_87",
34
+ "x": -11.342500000000001,
35
+ "y": -18.240000000000002
36
+ },
37
+ {
38
+ "pinId": "schematic_port_88",
39
+ "x": -11.342500000000001,
40
+ "y": -18.59
41
+ },
42
+ {
43
+ "pinId": "schematic_port_89",
44
+ "x": -11.342500000000001,
45
+ "y": -18.79
46
+ },
47
+ {
48
+ "pinId": "schematic_port_90",
49
+ "x": -11.342500000000001,
50
+ "y": -18.990000000000002
51
+ }
52
+ ],
53
+ "sectionId": "usb"
54
+ },
55
+ {
56
+ "chipId": "schematic_component_17",
57
+ "center": {
58
+ "x": -9.580000000000002,
59
+ "y": -18.515
60
+ },
61
+ "width": 1.084999999999999,
62
+ "height": 0.6000000000000014,
63
+ "pins": [
64
+ {
65
+ "pinId": "schematic_port_91",
66
+ "x": -9.797500000000001,
67
+ "y": -18.215,
68
+ "_facingDirection": "y+"
69
+ },
70
+ {
71
+ "pinId": "schematic_port_92",
72
+ "x": -9.797500000000001,
73
+ "y": -18.815,
74
+ "_facingDirection": "y-"
75
+ }
76
+ ],
77
+ "sectionId": "usb"
78
+ },
79
+ {
80
+ "chipId": "schematic_component_18",
81
+ "center": {
82
+ "x": -9.580000000000002,
83
+ "y": -20.325000000000003
84
+ },
85
+ "width": 1.084999999999999,
86
+ "height": 0.6000000000000014,
87
+ "pins": [
88
+ {
89
+ "pinId": "schematic_port_93",
90
+ "x": -9.797500000000001,
91
+ "y": -20.025000000000002,
92
+ "_facingDirection": "y+"
93
+ },
94
+ {
95
+ "pinId": "schematic_port_94",
96
+ "x": -9.797500000000001,
97
+ "y": -20.625000000000004,
98
+ "_facingDirection": "y-"
99
+ }
100
+ ],
101
+ "sectionId": "usb"
102
+ }
103
+ ],
104
+ "directConnections": [],
105
+ "netConnections": [
106
+ {
107
+ "netId": "GND",
108
+ "netLabelWidth": 0.42,
109
+ "netLabelHeight": 0.48,
110
+ "pinIds": [
111
+ "schematic_port_90",
112
+ "schematic_port_92",
113
+ "schematic_port_94"
114
+ ]
115
+ },
116
+ {
117
+ "netId": "D_MINUS",
118
+ "netLabelWidth": 0.96,
119
+ "pinIds": ["schematic_port_85"]
120
+ },
121
+ {
122
+ "netId": "D_PLUS",
123
+ "netLabelWidth": 0.84,
124
+ "pinIds": ["schematic_port_84"]
125
+ },
126
+ {
127
+ "netId": "VBUS",
128
+ "netLabelWidth": 0.42,
129
+ "netLabelHeight": 0.6,
130
+ "pinIds": ["schematic_port_83"]
131
+ },
132
+ {
133
+ "netId": "CC1",
134
+ "netLabelWidth": 0.48,
135
+ "pinIds": ["schematic_port_86", "schematic_port_91"]
136
+ },
137
+ {
138
+ "netId": "CC2",
139
+ "netLabelWidth": 0.48,
140
+ "pinIds": ["schematic_port_87", "schematic_port_93"]
141
+ }
142
+ ],
143
+ "textBoxes": [
144
+ {
145
+ "chipId": "schematic_component_16",
146
+ "center": {
147
+ "x": -16.0225,
148
+ "y": -17.025000000000002
149
+ },
150
+ "width": 0.35999999999999943,
151
+ "height": 0.25,
152
+ "text": "U3"
153
+ }
154
+ ],
155
+ "availableNetLabelOrientations": {
156
+ "D_MINUS": ["x-", "x+"],
157
+ "D_PLUS": ["x-", "x+"],
158
+ "GND": ["y-"],
159
+ "VBUS": ["y+"],
160
+ "CC1": ["x-", "x+"],
161
+ "CC2": ["x-", "x+"]
162
+ },
163
+ "maxMspPairDistance": 2.4
164
+ }
@@ -0,0 +1,95 @@
1
+ import { expect, test } from "bun:test"
2
+ import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
3
+ import type { SolvedTracePath } from "lib/solvers/SchematicTraceLinesSolver/SchematicTraceLinesSolver"
4
+ import inputProblem from "./assets/repro-rp2040-usb-cc2-ground-overlap.input.json"
5
+
6
+ const EPS = 1e-6
7
+
8
+ const pathsHavePositiveLengthCollinearOverlap = (
9
+ first: SolvedTracePath,
10
+ second: SolvedTracePath,
11
+ ) => {
12
+ for (
13
+ let firstIndex = 0;
14
+ firstIndex < first.tracePath.length - 1;
15
+ firstIndex++
16
+ ) {
17
+ const firstStart = first.tracePath[firstIndex]!
18
+ const firstEnd = first.tracePath[firstIndex + 1]!
19
+ const firstIsVertical = Math.abs(firstStart.x - firstEnd.x) < EPS
20
+ const firstIsHorizontal = Math.abs(firstStart.y - firstEnd.y) < EPS
21
+
22
+ for (
23
+ let secondIndex = 0;
24
+ secondIndex < second.tracePath.length - 1;
25
+ secondIndex++
26
+ ) {
27
+ const secondStart = second.tracePath[secondIndex]!
28
+ const secondEnd = second.tracePath[secondIndex + 1]!
29
+ const secondIsVertical = Math.abs(secondStart.x - secondEnd.x) < EPS
30
+ const secondIsHorizontal = Math.abs(secondStart.y - secondEnd.y) < EPS
31
+
32
+ if (
33
+ firstIsVertical &&
34
+ secondIsVertical &&
35
+ Math.abs(firstStart.x - secondStart.x) < EPS
36
+ ) {
37
+ const overlapLength =
38
+ Math.min(
39
+ Math.max(firstStart.y, firstEnd.y),
40
+ Math.max(secondStart.y, secondEnd.y),
41
+ ) -
42
+ Math.max(
43
+ Math.min(firstStart.y, firstEnd.y),
44
+ Math.min(secondStart.y, secondEnd.y),
45
+ )
46
+ if (overlapLength > EPS) return true
47
+ }
48
+
49
+ if (
50
+ firstIsHorizontal &&
51
+ secondIsHorizontal &&
52
+ Math.abs(firstStart.y - secondStart.y) < EPS
53
+ ) {
54
+ const overlapLength =
55
+ Math.min(
56
+ Math.max(firstStart.x, firstEnd.x),
57
+ Math.max(secondStart.x, secondEnd.x),
58
+ ) -
59
+ Math.max(
60
+ Math.min(firstStart.x, firstEnd.x),
61
+ Math.min(secondStart.x, secondEnd.x),
62
+ )
63
+ if (overlapLength > EPS) return true
64
+ }
65
+ }
66
+ }
67
+
68
+ return false
69
+ }
70
+
71
+ test("avoids RP2040 USB-C CC2 label connector overlapping GND", () => {
72
+ const solver = new SchematicTracePipelineSolver(inputProblem as any)
73
+
74
+ solver.solve()
75
+ expect(solver).toMatchSolverSnapshot(import.meta.path)
76
+
77
+ const traces = solver.netLabelTraceCollisionSolver!.getOutput().traces
78
+ const cc2LabelConnector = traces.find(
79
+ (trace) =>
80
+ trace.userNetId === "CC2" &&
81
+ trace.mspPairId.startsWith("available-net-orientation-"),
82
+ )
83
+
84
+ expect(cc2LabelConnector).toBeDefined()
85
+
86
+ const overlappingDifferentNetTraceIds = traces
87
+ .filter(
88
+ (trace) =>
89
+ trace.globalConnNetId !== cc2LabelConnector!.globalConnNetId &&
90
+ pathsHavePositiveLengthCollinearOverlap(trace, cc2LabelConnector!),
91
+ )
92
+ .map((trace) => trace.mspPairId)
93
+
94
+ expect(overlappingDifferentNetTraceIds).toEqual([])
95
+ })
@@ -0,0 +1,63 @@
1
+ import { expect, test } from "bun:test"
2
+ import { SchematicTraceSingleLineSolver2 } from "lib/solvers/SchematicTraceLinesSolver/SchematicTraceSingleLineSolver2/SchematicTraceSingleLineSolver2"
3
+ import type { InputChip, InputProblem } from "lib/types/InputProblem"
4
+
5
+ const getOrthogonalPathLength = (points: Array<{ x: number; y: number }>) =>
6
+ points.slice(0, -1).reduce((length, point, pointIndex) => {
7
+ const nextPoint = points[pointIndex + 1]!
8
+ return (
9
+ length + Math.abs(nextPoint.x - point.x) + Math.abs(nextPoint.y - point.y)
10
+ )
11
+ }, 0)
12
+
13
+ test("repro47 uses a minimal route between nearby opposing pins", async () => {
14
+ const diode: InputChip = {
15
+ chipId: "D2",
16
+ center: { x: 3.2, y: 0.095 },
17
+ width: 0.4,
18
+ height: 0.2,
19
+ pins: [{ pinId: "D2.cathode", x: 3.4, y: 0.095 }],
20
+ }
21
+ const pushButton: InputChip = {
22
+ chipId: "SW2",
23
+ center: { x: 3.81, y: 0.045 },
24
+ width: 0.4,
25
+ height: 0.2,
26
+ pins: [{ pinId: "SW2.pin1", x: 3.61, y: 0.045 }],
27
+ }
28
+ const pins: ConstructorParameters<
29
+ typeof SchematicTraceSingleLineSolver2
30
+ >[0]["pins"] = [
31
+ {
32
+ pinId: "D2.cathode",
33
+ chipId: diode.chipId,
34
+ x: 3.4,
35
+ y: 0.095,
36
+ _facingDirection: "x+" as const,
37
+ },
38
+ {
39
+ pinId: "SW2.pin1",
40
+ chipId: pushButton.chipId,
41
+ x: 3.61,
42
+ y: 0.045,
43
+ _facingDirection: "x-" as const,
44
+ },
45
+ ]
46
+ const inputProblem: InputProblem = {
47
+ chips: [diode, pushButton],
48
+ directConnections: [{ pinIds: [pins[0].pinId, pins[1].pinId] }],
49
+ netConnections: [],
50
+ availableNetLabelOrientations: {},
51
+ }
52
+ const solver = new SchematicTraceSingleLineSolver2({
53
+ pins,
54
+ chipMap: { [diode.chipId]: diode, [pushButton.chipId]: pushButton },
55
+ inputProblem,
56
+ })
57
+
58
+ solver.solve()
59
+
60
+ expect(solver.solved).toBe(true)
61
+ expect(getOrthogonalPathLength(solver.solvedTracePath!)).toBeCloseTo(0.26)
62
+ await expect(solver).toMatchSolverSnapshot(import.meta.path)
63
+ })
@@ -0,0 +1,46 @@
1
+ <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="3.4,0.095 3.61,0.045" data-type="line" data-label="" points="261.78217821782187,306.13861386138615 378.21782178217813,333.86138613861385" fill="none" stroke="hsl(112, 100%, 50%, 0.1)" stroke-width="1px"/></g><g><polyline data-points="3.4,0.095 3.465,0.095 3.505,0.095 3.505,0.045 3.545,0.045 3.61,0.045" data-type="line" data-label="" points="261.78217821782187,306.13861386138615 297.82178217821775,306.13861386138615 320,306.13861386138615 320,333.86138613861385 342.17821782178225,333.86138613861385 378.21782178217813,333.86138613861385" fill="none" stroke="red" stroke-width="1px" stroke-dasharray="4 4"/></g><g><polyline data-points="3.4,0.095 3.61,0.045" data-type="line" data-label="" points="261.78217821782187,306.13861386138615 378.21782178217813,333.86138613861385" fill="none" stroke="blue" stroke-width="1px" stroke-dasharray="5 5"/></g><g><polyline data-points="3.4,0.095 3.465,0.095 3.505,0.095 3.505,0.045 3.545,0.045 3.61,0.045" data-type="line" data-label="" points="261.78217821782187,306.13861386138615 297.82178217821775,306.13861386138615 320,306.13861386138615 320,333.86138613861385 342.17821782178225,333.86138613861385 378.21782178217813,333.86138613861385" fill="none" stroke="green" stroke-width="1px"/></g><g><rect data-type="rect" data-label="D2" data-x="3.2" data-y="0.095" x="40" y="250.69306930693068" width="221.7821782178221" height="110.89108910891093" fill="hsl(358, 100%, 50%, 0.1)" stroke="black" stroke-width="0.0018035714285714283"/></g><g><rect data-type="rect" data-label="SW2" data-x="3.81" data-y="0.045" x="378.21782178217825" y="278.41584158415844" width="221.78217821782187" height="110.89108910891088" fill="hsl(70, 100%, 50%, 0.1)" stroke="black" stroke-width="0.0018035714285714283"/></g><g><circle data-type="point" data-label="D2.cathode
2
+ x+" data-x="3.4" data-y="0.095" cx="261.78217821782187" cy="306.13861386138615" r="3" fill="hsl(22, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="SW2.pin1
3
+ x-" data-x="3.61" data-y="0.045" cx="378.21782178217813" cy="333.86138613861385" r="3" fill="hsl(12, 100%, 50%, 0.8)"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
4
+ document.currentScript.parentElement.addEventListener('mousemove', (e) => {
5
+ const svg = e.currentTarget;
6
+ const rect = svg.getBoundingClientRect();
7
+ const x = e.clientX - rect.left;
8
+ const y = e.clientY - rect.top;
9
+ const crosshair = svg.getElementById('crosshair');
10
+ const h = svg.getElementById('crosshair-h');
11
+ const v = svg.getElementById('crosshair-v');
12
+ const coords = svg.getElementById('coordinates');
13
+
14
+ crosshair.style.display = 'block';
15
+ h.setAttribute('x1', '0');
16
+ h.setAttribute('x2', '640');
17
+ h.setAttribute('y1', y);
18
+ h.setAttribute('y2', y);
19
+ v.setAttribute('x1', x);
20
+ v.setAttribute('x2', x);
21
+ v.setAttribute('y1', '0');
22
+ v.setAttribute('y2', '640');
23
+
24
+ // Calculate real coordinates using inverse transformation
25
+ const matrix = {"a":554.4554455445545,"c":0,"e":-1623.3663366336636,"b":0,"d":-554.4554455445545,"f":358.81188118811883};
26
+ // Manually invert and apply the affine transform
27
+ // Since we only use translate and scale, we can directly compute:
28
+ // x' = (x - tx) / sx
29
+ // y' = (y - ty) / sy
30
+ const sx = matrix.a;
31
+ const sy = matrix.d;
32
+ const tx = matrix.e;
33
+ const ty = matrix.f;
34
+ const realPoint = {
35
+ x: (x - tx) / sx,
36
+ y: (y - ty) / sy // Flip y back since we used negative scale
37
+ }
38
+
39
+ coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
40
+ coords.setAttribute('x', (x + 5).toString());
41
+ coords.setAttribute('y', (y - 5).toString());
42
+ });
43
+ document.currentScript.parentElement.addEventListener('mouseleave', () => {
44
+ document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
45
+ });
46
+ ]]></script></svg>