@tscircuit/schematic-trace-solver 0.0.146 → 0.0.148
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 +7 -2
- package/dist/index.js +191 -76
- package/lib/solvers/AvailableNetOrientationSolver/AvailableNetOrientationSolver.ts +38 -30
- package/lib/solvers/NetLabelPlacementSolver/NetLabelPlacementSolver.ts +6 -21
- package/lib/solvers/SchematicTraceLinesSolver/SchematicTraceSingleLineSolver2/SchematicTraceSingleLineSolver2.ts +7 -23
- package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +57 -0
- package/lib/solvers/TraceAnchoredNetLabelOverlapSolver/candidates.ts +7 -14
- package/lib/solvers/TraceCleanupSolver/sub-solver/UntangleTraceSubsolver.ts +17 -1
- package/lib/solvers/TraceCleanupSolver/sub-solver/generateLShapeRerouteCandidates.ts +52 -0
- package/lib/types/InputProblem.ts +8 -0
- package/lib/utils/getNetLabelWidthForConnection.ts +63 -0
- package/package.json +1 -1
- package/tests/repros/__snapshots__/board1096-usb-label-overlap-iteration.snap.svg +3 -3
- package/tests/repros/__snapshots__/repro-core-555-power-cross-net-overlap.snap.svg +59 -0
- package/tests/repros/__snapshots__/repro-ti-power-output-section.snap.svg +80 -0
- package/tests/repros/repro-core-555-power-cross-net-overlap.test.ts +136 -0
- package/tests/repros/repro-ti-power-output-section.input.ts +341 -0
- package/tests/repros/repro-ti-power-output-section.test.ts +13 -0
- package/tests/solvers/InlineNetLabelSolver/__snapshots__/fallback-net-label-width.snap.svg +69 -0
- package/tests/solvers/InlineNetLabelSolver/fallback-net-label-width.test.ts +152 -0
|
@@ -35,6 +35,7 @@ import { UnroutedTraceRecoverySolver } from "../UnroutedTraceRecoverySolver/Unro
|
|
|
35
35
|
import { SameNetJunctionAlignmentSolver } from "../SameNetJunctionAlignmentSolver/SameNetJunctionAlignmentSolver"
|
|
36
36
|
import { TraceElbowTransitionSimplificationSolver } from "../TraceElbowTransitionSimplificationSolver/TraceElbowTransitionSimplificationSolver"
|
|
37
37
|
import { InlineNetLabelSolver } from "../InlineNetLabelSolver/InlineNetLabelSolver"
|
|
38
|
+
import { findPerpendicularPathCrossings } from "../TraceCleanupSolver/sub-solver/findIntersectionsWithObstacles"
|
|
38
39
|
|
|
39
40
|
type PipelineStep<T extends new (...args: any[]) => BaseSolver> = {
|
|
40
41
|
solverName: string
|
|
@@ -259,6 +260,61 @@ export class SchematicTracePipelineSolver extends BaseSolver {
|
|
|
259
260
|
const prevSolverOutput =
|
|
260
261
|
instance.traceElbowTransitionSimplificationSolver!.getOutput()
|
|
261
262
|
const traces = prevSolverOutput.traces
|
|
263
|
+
const overlapShiftSolver = instance.traceOverlapShiftSolver!
|
|
264
|
+
const inlineLabelNetIds = new Set(
|
|
265
|
+
[
|
|
266
|
+
...instance.inputProblem.directConnections,
|
|
267
|
+
...instance.inputProblem.netConnections,
|
|
268
|
+
]
|
|
269
|
+
.filter((connection) => connection.allowInlineNetLabel)
|
|
270
|
+
.map((connection) => connection.netId),
|
|
271
|
+
)
|
|
272
|
+
// An overlap shift can separate collinear inline-label traces by creating
|
|
273
|
+
// a new perpendicular crossing. Limit the extra untangle work to those
|
|
274
|
+
// newly introduced crossings so established routes remain stable.
|
|
275
|
+
const traceIdsInNewCrossingsAfterOverlapShift = new Set<string>()
|
|
276
|
+
for (
|
|
277
|
+
let traceIndex = 0;
|
|
278
|
+
traceIndex < overlapShiftSolver.inputTracePaths.length;
|
|
279
|
+
traceIndex++
|
|
280
|
+
) {
|
|
281
|
+
const inputTrace = overlapShiftSolver.inputTracePaths[traceIndex]!
|
|
282
|
+
const shiftedTrace =
|
|
283
|
+
overlapShiftSolver.correctedTraceMap[inputTrace.mspPairId]!
|
|
284
|
+
for (
|
|
285
|
+
let otherTraceIndex = traceIndex + 1;
|
|
286
|
+
otherTraceIndex < overlapShiftSolver.inputTracePaths.length;
|
|
287
|
+
otherTraceIndex++
|
|
288
|
+
) {
|
|
289
|
+
const otherInputTrace =
|
|
290
|
+
overlapShiftSolver.inputTracePaths[otherTraceIndex]!
|
|
291
|
+
if (inputTrace.globalConnNetId === otherInputTrace.globalConnNetId) {
|
|
292
|
+
continue
|
|
293
|
+
}
|
|
294
|
+
if (
|
|
295
|
+
!inlineLabelNetIds.has(inputTrace.userNetId ?? "") &&
|
|
296
|
+
!inlineLabelNetIds.has(otherInputTrace.userNetId ?? "")
|
|
297
|
+
) {
|
|
298
|
+
continue
|
|
299
|
+
}
|
|
300
|
+
const otherShiftedTrace =
|
|
301
|
+
overlapShiftSolver.correctedTraceMap[otherInputTrace.mspPairId]!
|
|
302
|
+
const crossingCountBeforeShift = findPerpendicularPathCrossings(
|
|
303
|
+
inputTrace.tracePath,
|
|
304
|
+
otherInputTrace.tracePath,
|
|
305
|
+
).length
|
|
306
|
+
const crossingCountAfterShift = findPerpendicularPathCrossings(
|
|
307
|
+
shiftedTrace.tracePath,
|
|
308
|
+
otherShiftedTrace.tracePath,
|
|
309
|
+
).length
|
|
310
|
+
if (crossingCountAfterShift > crossingCountBeforeShift) {
|
|
311
|
+
traceIdsInNewCrossingsAfterOverlapShift.add(inputTrace.mspPairId)
|
|
312
|
+
traceIdsInNewCrossingsAfterOverlapShift.add(
|
|
313
|
+
otherInputTrace.mspPairId,
|
|
314
|
+
)
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
262
318
|
|
|
263
319
|
const labelMergingOutput =
|
|
264
320
|
instance.traceLabelOverlapAvoidanceSolver!.labelMergingSolver!.getOutput()
|
|
@@ -270,6 +326,7 @@ export class SchematicTracePipelineSolver extends BaseSolver {
|
|
|
270
326
|
allLabelPlacements: labelMergingOutput.netLabelPlacements,
|
|
271
327
|
mergedLabelNetIdMap: labelMergingOutput.mergedLabelNetIdMap,
|
|
272
328
|
paddingBuffer: 0.1,
|
|
329
|
+
eligibleTraceIds: traceIdsInNewCrossingsAfterOverlapShift,
|
|
273
330
|
},
|
|
274
331
|
]
|
|
275
332
|
}),
|
|
@@ -8,6 +8,7 @@ import type { InputProblem } from "lib/types/InputProblem"
|
|
|
8
8
|
import { dedupeOrientations } from "lib/utils/dedupeOrientations"
|
|
9
9
|
import type { FacingDirection } from "lib/utils/dir"
|
|
10
10
|
import { getOrientationConstraint } from "lib/utils/getOrientationConstraint"
|
|
11
|
+
import { getNetLabelWidthForConnection } from "lib/utils/getNetLabelWidthForConnection"
|
|
11
12
|
import {
|
|
12
13
|
EPS,
|
|
13
14
|
getManhattanDistance,
|
|
@@ -310,20 +311,12 @@ const getNetLabelWidth = (
|
|
|
310
311
|
inputProblem: InputProblem,
|
|
311
312
|
label: NetLabelPlacement,
|
|
312
313
|
) => {
|
|
313
|
-
const
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
dc.pinIds.some((pid) => label.pinIds.includes(pid)),
|
|
320
|
-
)?.netLabelWidth
|
|
321
|
-
if (dcWidth !== undefined) return dcWidth
|
|
322
|
-
|
|
323
|
-
const ncWidthByPinId = inputProblem.netConnections.find((nc) =>
|
|
324
|
-
nc.pinIds.some((pid) => label.pinIds.includes(pid)),
|
|
325
|
-
)?.netLabelWidth
|
|
326
|
-
if (ncWidthByPinId !== undefined) return ncWidthByPinId
|
|
314
|
+
const configuredWidth = getNetLabelWidthForConnection({
|
|
315
|
+
inputProblem,
|
|
316
|
+
netId: label.netId,
|
|
317
|
+
pinIds: label.pinIds,
|
|
318
|
+
})
|
|
319
|
+
if (configuredWidth !== undefined) return configuredWidth
|
|
327
320
|
|
|
328
321
|
if (label.orientation === "y+" || label.orientation === "y-") {
|
|
329
322
|
return label.height
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
} from "./findIntersectionsWithObstacles"
|
|
13
13
|
import {
|
|
14
14
|
generateLShapeRerouteCandidates,
|
|
15
|
+
generatePerimeterCornerTraceDetours,
|
|
15
16
|
generatePerpendicularTraceDetours,
|
|
16
17
|
} from "./generateLShapeRerouteCandidates"
|
|
17
18
|
import { isPathColliding, type CollisionInfo } from "./isPathColliding"
|
|
@@ -53,6 +54,7 @@ export interface UntangleTraceSubsolverInput {
|
|
|
53
54
|
allLabelPlacements: NetLabelPlacement[]
|
|
54
55
|
mergedLabelNetIdMap: Record<string, Set<string>>
|
|
55
56
|
paddingBuffer: number
|
|
57
|
+
eligibleTraceIds?: ReadonlySet<string>
|
|
56
58
|
}
|
|
57
59
|
|
|
58
60
|
/**
|
|
@@ -127,7 +129,7 @@ export class UntangleTraceSubsolver extends BaseSolver {
|
|
|
127
129
|
|
|
128
130
|
if (this.processingCrossings) {
|
|
129
131
|
// The L-shape pass below only reacts when both arms intersect obstacles.
|
|
130
|
-
// Resolve strict
|
|
132
|
+
// Resolve eligible strict cross-net crossings before entering it.
|
|
131
133
|
const crossing = this._findCrossing()
|
|
132
134
|
if (crossing) {
|
|
133
135
|
if (!this._resolveCrossing(crossing)) {
|
|
@@ -207,8 +209,12 @@ export class UntangleTraceSubsolver extends BaseSolver {
|
|
|
207
209
|
const otherTrace = traces[secondIndex]!
|
|
208
210
|
if (trace.globalConnNetId === otherTrace.globalConnNetId) continue
|
|
209
211
|
const isInitialBundleCrossing = this._isTraceBundle(trace, otherTrace)
|
|
212
|
+
const isEligibleInitialCrossing =
|
|
213
|
+
this.input.eligibleTraceIds?.has(trace.mspPairId) === true ||
|
|
214
|
+
this.input.eligibleTraceIds?.has(otherTrace.mspPairId) === true
|
|
210
215
|
if (
|
|
211
216
|
!isInitialBundleCrossing &&
|
|
217
|
+
!isEligibleInitialCrossing &&
|
|
212
218
|
!this.reroutedTraceIds.has(trace.mspPairId) &&
|
|
213
219
|
!this.reroutedTraceIds.has(otherTrace.mspPairId)
|
|
214
220
|
) {
|
|
@@ -259,6 +265,16 @@ export class UntangleTraceSubsolver extends BaseSolver {
|
|
|
259
265
|
chipBounds,
|
|
260
266
|
clearance: this.input.paddingBuffer,
|
|
261
267
|
}),
|
|
268
|
+
...generatePerimeterCornerTraceDetours({
|
|
269
|
+
trace: crossing.trace,
|
|
270
|
+
chipBounds,
|
|
271
|
+
clearance: this.input.paddingBuffer,
|
|
272
|
+
}),
|
|
273
|
+
...generatePerimeterCornerTraceDetours({
|
|
274
|
+
trace: crossing.otherTrace,
|
|
275
|
+
chipBounds,
|
|
276
|
+
clearance: this.input.paddingBuffer,
|
|
277
|
+
}),
|
|
262
278
|
]
|
|
263
279
|
const chipObstacles = getObstacleRects(this.input.inputProblem).filter(
|
|
264
280
|
(obstacle) => obstacle.kind === "chip",
|
|
@@ -122,6 +122,58 @@ export interface TraceDetourCandidate {
|
|
|
122
122
|
path: Point[]
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
+
export const generatePerimeterCornerTraceDetours = ({
|
|
126
|
+
trace,
|
|
127
|
+
chipBounds,
|
|
128
|
+
clearance,
|
|
129
|
+
}: Omit<
|
|
130
|
+
PerpendicularTraceDetourInput,
|
|
131
|
+
"segmentIndex" | "obstacleStart" | "obstacleEnd"
|
|
132
|
+
>): TraceDetourCandidate[] => {
|
|
133
|
+
if (trace.tracePath.length < 4 || chipBounds.length === 0) return []
|
|
134
|
+
|
|
135
|
+
const start = trace.tracePath[0]!
|
|
136
|
+
const firstEscape = trace.tracePath[1]!
|
|
137
|
+
const lastEscape = trace.tracePath.at(-2)!
|
|
138
|
+
const end = trace.tracePath.at(-1)!
|
|
139
|
+
const minX = Math.min(...chipBounds.map((bounds) => bounds.minX)) - clearance
|
|
140
|
+
const maxX = Math.max(...chipBounds.map((bounds) => bounds.maxX)) + clearance
|
|
141
|
+
const minY = Math.min(...chipBounds.map((bounds) => bounds.minY)) - clearance
|
|
142
|
+
const maxY = Math.max(...chipBounds.map((bounds) => bounds.maxY)) + clearance
|
|
143
|
+
const candidates: TraceDetourCandidate[] = []
|
|
144
|
+
|
|
145
|
+
for (const channelX of [minX, maxX]) {
|
|
146
|
+
for (const channelY of [minY, maxY]) {
|
|
147
|
+
candidates.push({
|
|
148
|
+
traceId: trace.mspPairId,
|
|
149
|
+
path: simplifyPath([
|
|
150
|
+
start,
|
|
151
|
+
firstEscape,
|
|
152
|
+
{ x: firstEscape.x, y: channelY },
|
|
153
|
+
{ x: channelX, y: channelY },
|
|
154
|
+
{ x: channelX, y: lastEscape.y },
|
|
155
|
+
lastEscape,
|
|
156
|
+
end,
|
|
157
|
+
]),
|
|
158
|
+
})
|
|
159
|
+
candidates.push({
|
|
160
|
+
traceId: trace.mspPairId,
|
|
161
|
+
path: simplifyPath([
|
|
162
|
+
start,
|
|
163
|
+
firstEscape,
|
|
164
|
+
{ x: channelX, y: firstEscape.y },
|
|
165
|
+
{ x: channelX, y: channelY },
|
|
166
|
+
{ x: lastEscape.x, y: channelY },
|
|
167
|
+
lastEscape,
|
|
168
|
+
end,
|
|
169
|
+
]),
|
|
170
|
+
})
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return candidates
|
|
175
|
+
}
|
|
176
|
+
|
|
125
177
|
export const generatePerpendicularTraceDetours = ({
|
|
126
178
|
trace,
|
|
127
179
|
segmentIndex,
|
|
@@ -35,6 +35,13 @@ export interface InputDirectConnection {
|
|
|
35
35
|
netId?: string
|
|
36
36
|
netLabelWidth?: number
|
|
37
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Width of the conventional anchored label to use only when an inline label
|
|
40
|
+
* cannot be placed. Unlike `netLabelWidth`, this does not affect whether or
|
|
41
|
+
* how the point-to-point connection is routed.
|
|
42
|
+
*/
|
|
43
|
+
fallbackNetLabelWidth?: number
|
|
44
|
+
|
|
38
45
|
/**
|
|
39
46
|
* When true, this point-to-point connection may be labeled with an "inline
|
|
40
47
|
* net label": the net name is drawn parallel to (and offset from) the routed
|
|
@@ -66,6 +73,7 @@ export interface InputNetConnection {
|
|
|
66
73
|
netId: string
|
|
67
74
|
pinIds: Array<PinId>
|
|
68
75
|
netLabelWidth?: number
|
|
76
|
+
fallbackNetLabelWidth?: number
|
|
69
77
|
netLabelHeight?: number
|
|
70
78
|
|
|
71
79
|
/**
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
InputDirectConnection,
|
|
3
|
+
InputNetConnection,
|
|
4
|
+
InputProblem,
|
|
5
|
+
NetId,
|
|
6
|
+
PinId,
|
|
7
|
+
} from "lib/types/InputProblem"
|
|
8
|
+
|
|
9
|
+
type ConnectionWithLabelWidth = InputDirectConnection | InputNetConnection
|
|
10
|
+
|
|
11
|
+
const getConfiguredWidth = (
|
|
12
|
+
connections: Array<ConnectionWithLabelWidth | undefined>,
|
|
13
|
+
includeFallbackNetLabelWidth: boolean,
|
|
14
|
+
) => {
|
|
15
|
+
const explicitWidth = connections.find(
|
|
16
|
+
(connection) => connection?.netLabelWidth !== undefined,
|
|
17
|
+
)?.netLabelWidth
|
|
18
|
+
if (explicitWidth !== undefined) return explicitWidth
|
|
19
|
+
if (!includeFallbackNetLabelWidth) return undefined
|
|
20
|
+
|
|
21
|
+
return connections.find(
|
|
22
|
+
(connection) => connection?.fallbackNetLabelWidth !== undefined,
|
|
23
|
+
)?.fallbackNetLabelWidth
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const getNetLabelWidthForConnection = ({
|
|
27
|
+
inputProblem,
|
|
28
|
+
netId,
|
|
29
|
+
pinIds,
|
|
30
|
+
includeFallbackNetLabelWidth = true,
|
|
31
|
+
}: {
|
|
32
|
+
inputProblem: InputProblem
|
|
33
|
+
netId?: NetId
|
|
34
|
+
pinIds: readonly PinId[]
|
|
35
|
+
includeFallbackNetLabelWidth?: boolean
|
|
36
|
+
}): number | undefined => {
|
|
37
|
+
if (netId) {
|
|
38
|
+
const widthByNetId = getConfiguredWidth(
|
|
39
|
+
[
|
|
40
|
+
inputProblem.netConnections.find(
|
|
41
|
+
(connection) => connection.netId === netId,
|
|
42
|
+
),
|
|
43
|
+
inputProblem.directConnections.find(
|
|
44
|
+
(connection) => connection.netId === netId,
|
|
45
|
+
),
|
|
46
|
+
],
|
|
47
|
+
includeFallbackNetLabelWidth,
|
|
48
|
+
)
|
|
49
|
+
if (widthByNetId !== undefined) return widthByNetId
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return getConfiguredWidth(
|
|
53
|
+
[
|
|
54
|
+
inputProblem.directConnections.find((connection) =>
|
|
55
|
+
connection.pinIds.some((pinId) => pinIds.includes(pinId)),
|
|
56
|
+
),
|
|
57
|
+
inputProblem.netConnections.find((connection) =>
|
|
58
|
+
connection.pinIds.some((pinId) => pinIds.includes(pinId)),
|
|
59
|
+
),
|
|
60
|
+
],
|
|
61
|
+
includeFallbackNetLabelWidth,
|
|
62
|
+
)
|
|
63
|
+
}
|
package/package.json
CHANGED
|
@@ -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="2.9875,-2.9000000000000004 4.049999999999999,-2.8" data-type="line" data-label="" points="181.75432098765435,470.7160493827161 218.4827160493827,467.2592592592593" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.7 4.049999999999999,-2.8" data-type="line" data-label="" points="181.75432098765435,463.80246913580254 218.4827160493827,467.2592592592593" fill="none" stroke="hsl(112, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.3000000000000007 4.049999999999999,-3.2" data-type="line" data-label="" points="181.75432098765435,449.9753086419754 218.4827160493827,481.0864197530865" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.5000000000000004 4.049999999999999,-3.2" data-type="line" data-label="" points="181.75432098765435,456.8888888888889 218.4827160493827,481.0864197530865" fill="none" stroke="hsl(224, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="7.15,-2.8 7.619999999999999,-4" data-type="line" data-label="" points="325.64320987654327,467.2592592592593 341.8901234567901,508.74074074074076" fill="none" stroke="hsl(224, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="7.15,-3.2 7.619999999999999,-2" data-type="line" data-label="" points="325.64320987654327,481.0864197530865 341.8901234567901,439.60493827160496" fill="none" stroke="hsl(120, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.58,-4 8.5,-2.9" data-type="line" data-label="" points="375.0753086419753,508.74074074074076 372.30987654320995,470.7160493827161" fill="none" stroke="hsl(112, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.58,-2 8.5,-3.1" data-type="line" data-label="" points="375.0753086419753,439.60493827160496 372.30987654320995,477.6296296296297" fill="none" stroke="hsl(160, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.54,8 11.7,-3" data-type="line" data-label="" points="373.69259259259263,93.92592592592592 482.92716049382716,474.17283950617286" fill="none" stroke="hsl(232, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="11.7,-3 11.53,7.95" data-type="line" data-label="" points="482.92716049382716,474.17283950617286 477.0506172839507,95.65432098765433" fill="none" stroke="hsl(184, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.66,6 11.7,-3.2" data-type="line" data-label="" points="377.8407407407408,163.06172839506172 482.92716049382716,481.0864197530865" fill="none" stroke="hsl(136, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="5,1.38 11.7,-2.8" data-type="line" data-label="" points="251.32222222222225,322.7654320987655 482.92716049382716,467.2592592592593" fill="none" stroke="hsl(280, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.6,1 5,1.38" data-type="line" data-label="" points="375.76666666666665,335.90123456790127 251.32222222222225,322.7654320987655" fill="none" stroke="hsl(304, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.6,1 11.53,0.95" data-type="line" data-label="" points="375.76666666666665,335.90123456790127 477.0506172839507,337.6296296296297" fill="none" stroke="hsl(32, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-1.4999999999999998" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,422.320987654321" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-3.1000000000000005 1.9000000000000001,-6.3" data-type="line" data-label="" points="181.75432098765435,477.6296296296297 144.16172839506174,588.246913580247" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-3.3000000000000003 4.5,-6.3" data-type="line" data-label="" points="181.75432098765435,484.54320987654324 234.0382716049383,588.246913580247" fill="none" stroke="hsl(72, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="4.049999999999999,-3 12.47,7.95" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 509.5444444444445,95.65432098765433" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 12.47,0.95" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 509.5444444444445,337.6296296296297" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 5,0.6200000000000001" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 251.32222222222225,349.03703703703707" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-1.4999999999999998" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,422.320987654321" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-1.7" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-3.9000000000000004" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-4.1" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-4.300000000000001" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-4.5" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 12.47,0.95" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 509.5444444444445,337.6296296296297" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 5,0.6200000000000001" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 251.32222222222225,349.03703703703707" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-1.4999999999999998" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,422.320987654321" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-1.7" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-3.9000000000000004" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-4.1" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-4.300000000000001" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-4.5" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 5,0.6200000000000001" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 251.32222222222225,349.03703703703707" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-1.4999999999999998" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,422.320987654321" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-1.7" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-3.9000000000000004" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-4.1" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-4.300000000000001" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-4.5" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-1.4999999999999998" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,422.320987654321" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-1.7" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-3.9000000000000004" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-4.1" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-4.300000000000001" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-4.5" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-1.7" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-3.9000000000000004" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-4.1" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-3.9000000000000004" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-4.1" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-3.9000000000000004 2.9875,-4.1" data-type="line" data-label="" points="181.75432098765435,505.283950617284 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-3.9000000000000004 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,505.283950617284 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-3.9000000000000004 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,505.283950617284 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-4.1 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,512.1975308641976 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-4.1 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,512.1975308641976 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-4.300000000000001 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,519.1111111111112 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.460000000000001,8 7.34,6" data-type="line" data-label="" points="336.3592592592594,93.92592592592592 332.21111111111117,163.06172839506172" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.460000000000001,8 7.4,1" data-type="line" data-label="" points="336.3592592592594,93.92592592592592 334.28518518518524,335.90123456790127" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.34,6 7.4,1" data-type="line" data-label="" points="332.21111111111117,163.06172839506172 334.28518518518524,335.90123456790127" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.9000000000000001 2.9875,-2.1000000000000005" data-type="line" data-label="" points="181.75432098765435,436.1481481481482 181.75432098765435,443.0617283950618" fill="none" stroke="hsl(170, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-2.7 3.0875,-2.7 3.0875,-2.8 4.049999999999999,-2.8" data-type="line" data-label="" points="181.75432098765435,463.80246913580254 185.21111111111114,463.80246913580254 185.21111111111114,467.2592592592593 218.4827160493827,467.2592592592593" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.9000000000000004 3.0875,-2.9000000000000004 3.0875,-2.7 2.9875,-2.7" data-type="line" data-label="" points="181.75432098765435,470.7160493827161 185.21111111111114,470.7160493827161 185.21111111111114,463.80246913580254 181.75432098765435,463.80246913580254" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.3000000000000007 3.1875,-2.3000000000000007 3.1875,-2.5000000000000004 2.9875,-2.5000000000000004" data-type="line" data-label="" points="181.75432098765435,449.9753086419754 188.66790123456792,449.9753086419754 188.66790123456792,456.8888888888889 181.75432098765435,456.8888888888889" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.15,-2.8 7.285,-2.8 7.285,-4 7.619999999999999,-4" data-type="line" data-label="" points="325.64320987654327,467.2592592592593 330.30987654320995,467.2592592592593 330.30987654320995,508.74074074074076 341.8901234567901,508.74074074074076" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.15,-3.2 7.484999999999999,-3.2 7.484999999999999,-2 7.619999999999999,-2" data-type="line" data-label="" points="325.64320987654327,481.0864197530865 337.22345679012346,481.0864197530865 337.22345679012346,439.60493827160496 341.8901234567901,439.60493827160496" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.58,-4 8.78,-4 8.78,-4.54 7.319999999999999,-4.54 7.319999999999999,-2.9 8.5,-2.9" data-type="line" data-label="" points="375.0753086419753,508.74074074074076 381.98888888888894,508.74074074074076 381.98888888888894,527.4074074074074 331.51975308641977,527.4074074074074 331.51975308641977,470.7160493827161 372.30987654320995,470.7160493827161" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.58,-2 8.78,-2 8.78,-1.46 7.519999999999999,-1.46 7.519999999999999,-3.1 8.5,-3.1" data-type="line" data-label="" points="375.0753086419753,439.60493827160496 381.98888888888894,439.60493827160496 381.98888888888894,420.93827160493834 338.4333333333333,420.93827160493834 338.4333333333333,477.6296296296297 372.30987654320995,477.6296296296297" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-4.1 3.1875,-4.1 3.1875,-3.9000000000000004 2.9875,-3.9000000000000004" data-type="line" data-label="" points="181.75432098765435,512.1975308641976 188.66790123456792,512.1975308641976 188.66790123456792,505.283950617284 181.75432098765435,505.283950617284" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-4.300000000000001 3.1875,-4.300000000000001 3.1875,-4.1 2.9875,-4.1" data-type="line" data-label="" points="181.75432098765435,519.1111111111112 188.66790123456792,519.1111111111112 188.66790123456792,512.1975308641976 181.75432098765435,512.1975308641976" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-4.5 2.9875,-4.7 3.1875,-4.7 3.1875,-4.300000000000001 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,526.0246913580247 181.75432098765435,532.9382716049383 188.66790123456792,532.9382716049383 188.66790123456792,519.1111111111112 181.75432098765435,519.1111111111112" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-1.2999999999999998 3.1875,-1.2999999999999998 3.1875,-1.7 2.9875,-1.7" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,415.40740740740745 188.66790123456792,415.40740740740745 188.66790123456792,429.2345679012346 181.75432098765435,429.2345679012346" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.34,6 7.14,6 7.14,8 7.460000000000001,8" data-type="line" data-label="" points="332.21111111111117,163.06172839506172 325.2975308641976,163.06172839506172 325.2975308641976,93.92592592592592 336.3592592592594,93.92592592592592" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-1.9000000000000001 3.1875,-1.9000000000000001 3.1875,-2.1000000000000005 2.9875,-2.1000000000000005" data-type="line" data-label="" points="181.75432098765435,436.1481481481482 188.66790123456792,436.1481481481482 188.66790123456792,443.0617283950618 181.75432098765435,443.0617283950618" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.54,8 10.035,8 10.035,7.95 11.53,7.95" data-type="line" data-label="" points="373.69259259259263,93.92592592592592 425.3716049382716,93.92592592592592 425.3716049382716,95.65432098765433 477.0506172839507,95.65432098765433" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="5,1.38 5,1.58 8.8,1.58 8.8,1 8.6,1" data-type="line" data-label="" points="251.32222222222225,322.7654320987655 251.32222222222225,315.85185185185185 382.6802469135803,315.85185185185185 382.6802469135803,335.90123456790127 375.76666666666665,335.90123456790127" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="11.7,-2.8 11.899999999999999,-2.8 11.899999999999999,-0.9249999999999999 11.33,-0.9249999999999999 11.33,0.95 11.53,0.95" data-type="line" data-label="" points="482.92716049382716,467.2592592592593 489.8407407407408,467.2592592592593 489.8407407407408,402.44444444444446 470.1370370370371,402.44444444444446 470.1370370370371,337.6296296296297 477.0506172839507,337.6296296296297" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.5000000000000004 3.6187499999999995,-2.5000000000000004 3.6187499999999995,-3.2 4.049999999999999,-3.2" data-type="line" data-label="" points="181.75432098765435,456.8888888888889 203.5753086419753,456.8888888888889 203.5753086419753,481.0864197530865 218.4827160493827,481.0864197530865" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-3.9000000000000004 3.5187499999999994,-3.9000000000000004 3.5187499999999994,-3 4.049999999999999,-3" data-type="line" data-label="" points="181.75432098765435,505.283950617284 200.11851851851853,505.283950617284 200.11851851851853,474.17283950617286 218.4827160493827,474.17283950617286" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-1.7 3.2875,-1.7 3.2875,-1.9500000000000002 3.5875,-1.9500000000000002 3.5875,-2.6000000000000005 3.2875,-2.6000000000000005 3.2875,-3.9000000000000004 2.9875,-3.9000000000000004" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 192.12469135802473,429.2345679012346 192.12469135802473,437.87654320987656 202.4950617283951,437.87654320987656 202.4950617283951,460.3456790123457 192.12469135802473,460.3456790123457 192.12469135802473,505.283950617284 181.75432098765435,505.283950617284" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.66,6 13.360999999999997,6 13.360999999999997,-3.2 11.7,-3.2" data-type="line" data-label="" points="377.8407407407408,163.06172839506172 540.3444444444444,163.06172839506172 540.3444444444444,481.0864197530865 482.92716049382716,481.0864197530865" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="12.47,7.95 12.711,7.95 12.711,7.599" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 517.8753086419754,95.65432098765433 517.8753086419754,107.78765432098766" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="12.47,0.95 12.711,0.95 12.711,0.599" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 517.8753086419754,337.6296296296297 517.8753086419754,349.762962962963" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.4,1 7.049,1 7.049,1.051" data-type="line" data-label="" points="334.28518518518524,335.90123456790127 322.1518518518519,335.90123456790127 322.1518518518519,334.1382716049383" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_7" data-x="10.1" data-y="-3" x="372.30987654321" y="463.80246913580254" width="110.6172839506172" height="20.740740740740705" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_49" data-x="5.6" data-y="-3" x="218.48271604938267" y="460.3456790123457" width="107.16049382716056" height="27.65432098765433" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_50" data-x="8.1" data-y="-2" x="341.8901234567901" y="427.85185185185185" width="33.18518518518522" height="23.506172839506178" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_51" data-x="8.1" data-y="-4" x="341.8901234567901" y="496.98765432098764" width="33.18518518518522" height="23.506172839506178" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_52" data-x="12" data-y="8" x="477.0506172839507" y="81.50030888888892" width="32.493827160493765" height="24.851234074074" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_53" data-x="8" data-y="8" x="336.3592592592594" y="82.17283950617286" width="37.33333333333326" height="23.50617283950612" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_54" data-x="8" data-y="6" x="332.2111111111112" y="151.30864197530866" width="45.62962962962962" height="23.50617283950615" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_55" data-x="12" data-y="1" x="477.0506172839507" y="323.47561753086427" width="32.493827160493765" height="24.851234074074" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_56" data-x="8" data-y="0.9999999999999999" x="334.2851851851853" y="324.14814814814815" width="41.48148148148141" height="23.506172839506178" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_57" data-x="5.2524999999999995" data-y="1" x="235.76666666666662" y="322.7654320987655" width="48.567901234567955" height="26.271604938271594" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_58" data-x="1.8" data-y="-3" x="99.65555555555557" y="422.320987654321" width="82.09876543209877" height="103.7037037037037" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_59" data-x="2.2" data-y="-6.3" x="144.16172839506174" y="576.493827160494" width="20.740740740740762" height="23.50617283950612" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_60" data-x="4.8" data-y="-6.3" x="234.0382716049383" y="576.493827160494" width="20.740740740740733" height="23.50617283950612" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="U_MCU_USB_BOOT" data-x="9.74" data-y="-2.5700000000000003" x="386.1370370370371" y="456.1975308641976" width="58.07407407407413" height="6.2222222222222285" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="ESP32_P4NRW32X" data-x="9.74" data-y="-3.4299999999999997" x="386.1370370370371" y="485.925925925926" width="58.07407407407413" height="6.222222222222172" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="USBLC6_2SC6" data-x="5.109999999999999" data-y="-3.53" x="232.3098765432099" y="489.3827160493828" width="45.62962962962962" height="6.222222222222172" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="U_ESD" data-x="4.749999999999999" data-y="-2.4850000000000003" x="230.23580246913582" y="452.0493827160494" width="24.888888888888857" height="8.641975308641975" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="TYPE-C-31-M-12" data-x="1.8525" data-y="-4.43" x="113.48271604938273" y="520.4938271604939" width="58.074074074074076" height="6.222222222222172" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="J_USB" data-x="1.3125000000000002" data-y="-1.585" x="111.40864197530865" y="420.93827160493834" width="24.888888888888914" height="8.641975308641918" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: USB_HS_DM_MCU
|
|
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="2.9875,-2.9000000000000004 4.049999999999999,-2.8" data-type="line" data-label="" points="181.75432098765435,470.7160493827161 218.4827160493827,467.2592592592593" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.7 4.049999999999999,-2.8" data-type="line" data-label="" points="181.75432098765435,463.80246913580254 218.4827160493827,467.2592592592593" fill="none" stroke="hsl(112, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.3000000000000007 4.049999999999999,-3.2" data-type="line" data-label="" points="181.75432098765435,449.9753086419754 218.4827160493827,481.0864197530865" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.5000000000000004 4.049999999999999,-3.2" data-type="line" data-label="" points="181.75432098765435,456.8888888888889 218.4827160493827,481.0864197530865" fill="none" stroke="hsl(224, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="7.15,-2.8 7.619999999999999,-4" data-type="line" data-label="" points="325.64320987654327,467.2592592592593 341.8901234567901,508.74074074074076" fill="none" stroke="hsl(224, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="7.15,-3.2 7.619999999999999,-2" data-type="line" data-label="" points="325.64320987654327,481.0864197530865 341.8901234567901,439.60493827160496" fill="none" stroke="hsl(120, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.58,-4 8.5,-2.9" data-type="line" data-label="" points="375.0753086419753,508.74074074074076 372.30987654320995,470.7160493827161" fill="none" stroke="hsl(112, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.58,-2 8.5,-3.1" data-type="line" data-label="" points="375.0753086419753,439.60493827160496 372.30987654320995,477.6296296296297" fill="none" stroke="hsl(160, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.54,8 11.7,-3" data-type="line" data-label="" points="373.69259259259263,93.92592592592592 482.92716049382716,474.17283950617286" fill="none" stroke="hsl(232, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="11.7,-3 11.53,7.95" data-type="line" data-label="" points="482.92716049382716,474.17283950617286 477.0506172839507,95.65432098765433" fill="none" stroke="hsl(184, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.66,6 11.7,-3.2" data-type="line" data-label="" points="377.8407407407408,163.06172839506172 482.92716049382716,481.0864197530865" fill="none" stroke="hsl(136, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="5,1.38 11.7,-2.8" data-type="line" data-label="" points="251.32222222222225,322.7654320987655 482.92716049382716,467.2592592592593" fill="none" stroke="hsl(280, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.6,1 5,1.38" data-type="line" data-label="" points="375.76666666666665,335.90123456790127 251.32222222222225,322.7654320987655" fill="none" stroke="hsl(304, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.6,1 11.53,0.95" data-type="line" data-label="" points="375.76666666666665,335.90123456790127 477.0506172839507,337.6296296296297" fill="none" stroke="hsl(32, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-1.4999999999999998" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,422.320987654321" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-3.1000000000000005 1.9000000000000001,-6.3" data-type="line" data-label="" points="181.75432098765435,477.6296296296297 144.16172839506174,588.246913580247" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-3.3000000000000003 4.5,-6.3" data-type="line" data-label="" points="181.75432098765435,484.54320987654324 234.0382716049383,588.246913580247" fill="none" stroke="hsl(72, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="4.049999999999999,-3 12.47,7.95" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 509.5444444444445,95.65432098765433" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 12.47,0.95" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 509.5444444444445,337.6296296296297" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 5,0.6200000000000001" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 251.32222222222225,349.03703703703707" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-1.4999999999999998" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,422.320987654321" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-1.7" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-3.9000000000000004" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-4.1" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-4.300000000000001" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-4.5" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 12.47,0.95" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 509.5444444444445,337.6296296296297" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 5,0.6200000000000001" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 251.32222222222225,349.03703703703707" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-1.4999999999999998" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,422.320987654321" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-1.7" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-3.9000000000000004" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-4.1" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-4.300000000000001" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-4.5" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 5,0.6200000000000001" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 251.32222222222225,349.03703703703707" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-1.4999999999999998" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,422.320987654321" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-1.7" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-3.9000000000000004" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-4.1" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-4.300000000000001" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-4.5" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-1.4999999999999998" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,422.320987654321" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-1.7" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-3.9000000000000004" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-4.1" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-4.300000000000001" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-4.5" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-1.7" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-3.9000000000000004" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-4.1" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-3.9000000000000004" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-4.1" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-3.9000000000000004 2.9875,-4.1" data-type="line" data-label="" points="181.75432098765435,505.283950617284 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-3.9000000000000004 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,505.283950617284 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-3.9000000000000004 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,505.283950617284 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-4.1 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,512.1975308641976 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-4.1 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,512.1975308641976 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-4.300000000000001 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,519.1111111111112 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.460000000000001,8 7.34,6" data-type="line" data-label="" points="336.3592592592594,93.92592592592592 332.21111111111117,163.06172839506172" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.460000000000001,8 7.4,1" data-type="line" data-label="" points="336.3592592592594,93.92592592592592 334.28518518518524,335.90123456790127" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.34,6 7.4,1" data-type="line" data-label="" points="332.21111111111117,163.06172839506172 334.28518518518524,335.90123456790127" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.9000000000000001 2.9875,-2.1000000000000005" data-type="line" data-label="" points="181.75432098765435,436.1481481481482 181.75432098765435,443.0617283950618" fill="none" stroke="hsl(170, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-2.7 3.0875,-2.7 3.0875,-2.8 4.049999999999999,-2.8" data-type="line" data-label="" points="181.75432098765435,463.80246913580254 185.21111111111114,463.80246913580254 185.21111111111114,467.2592592592593 218.4827160493827,467.2592592592593" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.9000000000000004 3.0875,-2.9000000000000004 3.0875,-2.7 2.9875,-2.7" data-type="line" data-label="" points="181.75432098765435,470.7160493827161 185.21111111111114,470.7160493827161 185.21111111111114,463.80246913580254 181.75432098765435,463.80246913580254" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.3000000000000007 3.1875,-2.3000000000000007 3.1875,-2.5000000000000004 2.9875,-2.5000000000000004" data-type="line" data-label="" points="181.75432098765435,449.9753086419754 188.66790123456792,449.9753086419754 188.66790123456792,456.8888888888889 181.75432098765435,456.8888888888889" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.15,-2.8 7.285,-2.8 7.285,-4 7.619999999999999,-4" data-type="line" data-label="" points="325.64320987654327,467.2592592592593 330.30987654320995,467.2592592592593 330.30987654320995,508.74074074074076 341.8901234567901,508.74074074074076" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.15,-3.2 7.484999999999999,-3.2 7.484999999999999,-2 7.619999999999999,-2" data-type="line" data-label="" points="325.64320987654327,481.0864197530865 337.22345679012346,481.0864197530865 337.22345679012346,439.60493827160496 341.8901234567901,439.60493827160496" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.58,-4 8.78,-4 8.78,-4.54 7.319999999999999,-4.54 7.319999999999999,-2.9 8.5,-2.9" data-type="line" data-label="" points="375.0753086419753,508.74074074074076 381.98888888888894,508.74074074074076 381.98888888888894,527.4074074074074 331.51975308641977,527.4074074074074 331.51975308641977,470.7160493827161 372.30987654320995,470.7160493827161" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.58,-2 8.78,-2 8.78,-1.46 7.519999999999999,-1.46 7.519999999999999,-3.1 8.5,-3.1" data-type="line" data-label="" points="375.0753086419753,439.60493827160496 381.98888888888894,439.60493827160496 381.98888888888894,420.93827160493834 338.4333333333333,420.93827160493834 338.4333333333333,477.6296296296297 372.30987654320995,477.6296296296297" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-4.1 3.1875,-4.1 3.1875,-3.9000000000000004 2.9875,-3.9000000000000004" data-type="line" data-label="" points="181.75432098765435,512.1975308641976 188.66790123456792,512.1975308641976 188.66790123456792,505.283950617284 181.75432098765435,505.283950617284" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-4.300000000000001 3.1875,-4.300000000000001 3.1875,-4.1 2.9875,-4.1" data-type="line" data-label="" points="181.75432098765435,519.1111111111112 188.66790123456792,519.1111111111112 188.66790123456792,512.1975308641976 181.75432098765435,512.1975308641976" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-4.5 2.9875,-4.7 3.1875,-4.7 3.1875,-4.300000000000001 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,526.0246913580247 181.75432098765435,532.9382716049383 188.66790123456792,532.9382716049383 188.66790123456792,519.1111111111112 181.75432098765435,519.1111111111112" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-1.2999999999999998 3.1875,-1.2999999999999998 3.1875,-1.7 2.9875,-1.7" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,415.40740740740745 188.66790123456792,415.40740740740745 188.66790123456792,429.2345679012346 181.75432098765435,429.2345679012346" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.34,6 7.14,6 7.14,8 7.460000000000001,8" data-type="line" data-label="" points="332.21111111111117,163.06172839506172 325.2975308641976,163.06172839506172 325.2975308641976,93.92592592592592 336.3592592592594,93.92592592592592" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-1.9000000000000001 3.1875,-1.9000000000000001 3.1875,-2.1000000000000005 2.9875,-2.1000000000000005" data-type="line" data-label="" points="181.75432098765435,436.1481481481482 188.66790123456792,436.1481481481482 188.66790123456792,443.0617283950618 181.75432098765435,443.0617283950618" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.54,8 10.035,8 10.035,7.95 11.53,7.95" data-type="line" data-label="" points="373.69259259259263,93.92592592592592 425.3716049382716,93.92592592592592 425.3716049382716,95.65432098765433 477.0506172839507,95.65432098765433" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="5,1.38 5,1.58 8.8,1.58 8.8,1 8.6,1" data-type="line" data-label="" points="251.32222222222225,322.7654320987655 251.32222222222225,315.85185185185185 382.6802469135803,315.85185185185185 382.6802469135803,335.90123456790127 375.76666666666665,335.90123456790127" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="11.7,-2.8 11.899999999999999,-2.8 11.899999999999999,-0.9249999999999999 11.33,-0.9249999999999999 11.33,0.95 11.53,0.95" data-type="line" data-label="" points="482.92716049382716,467.2592592592593 489.8407407407408,467.2592592592593 489.8407407407408,402.44444444444446 470.1370370370371,402.44444444444446 470.1370370370371,337.6296296296297 477.0506172839507,337.6296296296297" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.5000000000000004 3.5187499999999994,-2.5000000000000004 3.5187499999999994,-3.2 4.049999999999999,-3.2" data-type="line" data-label="" points="181.75432098765435,456.8888888888889 200.11851851851853,456.8888888888889 200.11851851851853,481.0864197530865 218.4827160493827,481.0864197530865" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-3.9000000000000004 3.5187499999999994,-3.9000000000000004 3.5187499999999994,-3 4.049999999999999,-3" data-type="line" data-label="" points="181.75432098765435,505.283950617284 200.11851851851853,505.283950617284 200.11851851851853,474.17283950617286 218.4827160493827,474.17283950617286" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-1.7 3.2875,-1.7 3.2875,-3.9000000000000004 2.9875,-3.9000000000000004" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 192.12469135802473,429.2345679012346 192.12469135802473,505.283950617284 181.75432098765435,505.283950617284" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.66,6 13.360999999999997,6 13.360999999999997,-3.2 11.7,-3.2" data-type="line" data-label="" points="377.8407407407408,163.06172839506172 540.3444444444444,163.06172839506172 540.3444444444444,481.0864197530865 482.92716049382716,481.0864197530865" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="12.47,7.95 12.711,7.95 12.711,7.599" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 517.8753086419754,95.65432098765433 517.8753086419754,107.78765432098766" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="12.47,0.95 12.711,0.95 12.711,0.599" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 517.8753086419754,337.6296296296297 517.8753086419754,349.762962962963" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.4,1 7.049,1 7.049,1.051" data-type="line" data-label="" points="334.28518518518524,335.90123456790127 322.1518518518519,335.90123456790127 322.1518518518519,334.1382716049383" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_7" data-x="10.1" data-y="-3" x="372.30987654321" y="463.80246913580254" width="110.6172839506172" height="20.740740740740705" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_49" data-x="5.6" data-y="-3" x="218.48271604938267" y="460.3456790123457" width="107.16049382716056" height="27.65432098765433" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_50" data-x="8.1" data-y="-2" x="341.8901234567901" y="427.85185185185185" width="33.18518518518522" height="23.506172839506178" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_51" data-x="8.1" data-y="-4" x="341.8901234567901" y="496.98765432098764" width="33.18518518518522" height="23.506172839506178" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_52" data-x="12" data-y="8" x="477.0506172839507" y="81.50030888888892" width="32.493827160493765" height="24.851234074074" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_53" data-x="8" data-y="8" x="336.3592592592594" y="82.17283950617286" width="37.33333333333326" height="23.50617283950612" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_54" data-x="8" data-y="6" x="332.2111111111112" y="151.30864197530866" width="45.62962962962962" height="23.50617283950615" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_55" data-x="12" data-y="1" x="477.0506172839507" y="323.47561753086427" width="32.493827160493765" height="24.851234074074" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_56" data-x="8" data-y="0.9999999999999999" x="334.2851851851853" y="324.14814814814815" width="41.48148148148141" height="23.506172839506178" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_57" data-x="5.2524999999999995" data-y="1" x="235.76666666666662" y="322.7654320987655" width="48.567901234567955" height="26.271604938271594" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_58" data-x="1.8" data-y="-3" x="99.65555555555557" y="422.320987654321" width="82.09876543209877" height="103.7037037037037" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_59" data-x="2.2" data-y="-6.3" x="144.16172839506174" y="576.493827160494" width="20.740740740740762" height="23.50617283950612" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_60" data-x="4.8" data-y="-6.3" x="234.0382716049383" y="576.493827160494" width="20.740740740740733" height="23.50617283950612" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="U_MCU_USB_BOOT" data-x="9.74" data-y="-2.5700000000000003" x="386.1370370370371" y="456.1975308641976" width="58.07407407407413" height="6.2222222222222285" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="ESP32_P4NRW32X" data-x="9.74" data-y="-3.4299999999999997" x="386.1370370370371" y="485.925925925926" width="58.07407407407413" height="6.222222222222172" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="USBLC6_2SC6" data-x="5.109999999999999" data-y="-3.53" x="232.3098765432099" y="489.3827160493828" width="45.62962962962962" height="6.222222222222172" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="U_ESD" data-x="4.749999999999999" data-y="-2.4850000000000003" x="230.23580246913582" y="452.0493827160494" width="24.888888888888857" height="8.641975308641975" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="TYPE-C-31-M-12" data-x="1.8525" data-y="-4.43" x="113.48271604938273" y="520.4938271604939" width="58.074074074074076" height="6.222222222222172" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="J_USB" data-x="1.3125000000000002" data-y="-1.585" x="111.40864197530865" y="420.93827160493834" width="24.888888888888914" height="8.641975308641918" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: USB_HS_DM_MCU
|
|
2
2
|
globalConnNetId: connectivity_net4" data-x="8.78" data-y="-3.775" x="378.5320987654321" y="493.1851851851853" width="6.913580246913625" height="15.555555555555543" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: USB_HS_DP_MCU
|
|
3
3
|
globalConnNetId: connectivity_net5" data-x="8.78" data-y="-2.225" x="378.5320987654321" y="439.604938271605" width="6.913580246913625" height="15.555555555555543" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: .R_RESET_PU > .pin2 to .C_RESET > .pin1
|
|
4
4
|
globalConnNetId: connectivity_net8" data-x="4.16" data-y="1.58" x="193.24814814814818" y="312.39506172839504" width="58.074074074074076" height="6.913580246913568" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: .C_RESET > .pin1 to .U_MCU > .pin103
|
|
@@ -11,7 +11,7 @@ globalConnNetId: connectivity_net9" data-x="2.9875" data-y="-4.91" x="173.458024
|
|
|
11
11
|
globalConnNetId: connectivity_net9" data-x="12.711" data-y="7.389" x="509.5790123456791" y="107.78765432098764" width="16.59259259259261" height="14.518518518518505" fill="#00000066" stroke="#000000" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: GND
|
|
12
12
|
globalConnNetId: connectivity_net9" data-x="12.711" data-y="0.389" x="509.5790123456791" y="349.762962962963" width="16.59259259259261" height="14.518518518518533" fill="#00000066" stroke="#000000" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: GND
|
|
13
13
|
globalConnNetId: connectivity_net9" data-x="5" data-y="0.40900000000000014" x="243.02592592592595" y="349.07160493827166" width="16.59259259259261" height="14.518518518518533" fill="#00000066" stroke="#000000" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: .J_USB > .pin8 to .U_ESD > .pin3
|
|
14
|
-
globalConnNetId: connectivity_net1" data-x="3.
|
|
14
|
+
globalConnNetId: connectivity_net1" data-x="3.5187499999999994" data-y="-2.2750000000000004" x="196.66172839506174" y="441.3333333333334" width="6.913580246913568" height="15.555555555555543" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: USB_HS_DP_POST_ESD
|
|
15
15
|
globalConnNetId: connectivity_net3" data-x="7.484999999999999" data-y="-3.4250000000000003" x="333.76666666666665" y="481.0864197530865" width="6.913580246913568" height="15.555555555555543" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: USB_HS_DM_POST_ESD
|
|
16
16
|
globalConnNetId: connectivity_net2" data-x="7.285" data-y="-2.5749999999999997" x="326.85308641975314" y="451.70370370370375" width="6.913580246913568" height="15.555555555555543" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: V3V3
|
|
17
17
|
globalConnNetId: connectivity_net12" data-x="7.14" data-y="8.21" x="314.9271604938272" y="79.40740740740733" width="20.740740740740762" height="14.51851851851859" fill="#ef444466" stroke="#ef4444" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: V3V3
|
|
@@ -79,7 +79,7 @@ orientation: y-" data-x="2.9875" data-y="-4.7" cx="181.75432098765435" cy="532.9
|
|
|
79
79
|
orientation: y-" data-x="12.711" data-y="7.599" cx="517.8753086419754" cy="107.78765432098766" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
80
80
|
orientation: y-" data-x="12.711" data-y="0.599" cx="517.8753086419754" cy="349.762962962963" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
81
81
|
orientation: y-" data-x="5" data-y="0.6200000000000001" cx="251.32222222222225" cy="349.03703703703707" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
82
|
-
orientation: y+" data-x="3.
|
|
82
|
+
orientation: y+" data-x="3.5187499999999994" data-y="-2.5000000000000004" cx="200.11851851851853" cy="456.8888888888889" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
83
83
|
orientation: y-" data-x="7.484999999999999" data-y="-3.2" cx="337.22345679012346" cy="481.0864197530865" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
84
84
|
orientation: y+" data-x="7.285" data-y="-2.8" cx="330.30987654320995" cy="467.2592592592593" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
85
85
|
orientation: y+" data-x="7.14" data-y="8" cx="325.2975308641976" cy="93.92592592592592" r="3" fill="hsl(80, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
@@ -0,0 +1,59 @@
|
|
|
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.5,3 -2.38,3" data-type="line" data-label="" points="56.18029471251077,218.9540595203698 399.20254261774056,218.9540595203698" fill="none" stroke="hsl(192, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-3.5,3 -2.7,1.5" data-type="line" data-label="" points="217.98324183761918,218.9540595203698 347.4255995377058,461.65848020803236" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.62,3 -3.3,1.5" data-type="line" data-label="" points="522.1727824328229,218.9540595203698 250.34383126264083,461.65848020803236" fill="none" stroke="hsl(190, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-4.5,3 -4.6,3 -4.6,3.4250000000000003 -2.48,3.4250000000000003 -2.48,3 -2.38,3" data-type="line" data-label="" points="56.18029471251077,218.9540595203698 40,218.9540595203698 40,150.18780699219872 383.02224790522973,150.18780699219872 383.02224790522973,218.9540595203698 399.20254261774056,218.9540595203698" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.5,3 -2.5,3 -2.5,1.5 -2.7,1.5" data-type="line" data-label="" points="217.98324183761918,218.9540595203698 379.7861889627275,218.9540595203698 379.7861889627275,461.65848020803236 347.4255995377058,461.65848020803236" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.62,3 -1.3790000000000002,3 -1.3790000000000002,3.251" data-type="line" data-label="" points="522.1727824328229,218.9540595203698 561.1672926899739,218.9540595203698 561.1672926899739,178.34151979196758" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.3,1.5 -3.541,1.5 -3.541,1.9509999999999998" data-type="line" data-label="" points="250.34383126264083,461.65848020803236 211.34932100548974,461.65848020803236 211.34932100548974,388.6853510546085" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="-4" data-y="3" x="56.18029471251077" y="166.36810170470955" width="161.8029471251084" height="105.17191563132053" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.006180357142857142"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="-2" data-y="3" x="399.2025426177405" y="178.50332273909274" width="122.97023981508238" height="80.90147356255414" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.006180357142857142"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="-3" data-y="1.5" x="250.3438312626409" y="393.70124241548683" width="97.08176827506497" height="135.91447558509105" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.006180357142857142"/></g><g><rect data-type="rect" data-label="netId: GND
|
|
2
|
+
globalConnNetId: connectivity_net1" data-x="-3" data-y="2.79" x="260.0520080901473" y="218.9540595203698" width="77.6654146200521" height="67.95723779254547" fill="#00000066" stroke="#000000" stroke-width="0.006180357142857142"/></g><g><rect data-type="rect" data-label="netId: VCC
|
|
3
|
+
globalConnNetId: connectivity_net2" data-x="-1.3790000000000002" data-y="3.461" x="522.3345853799478" y="110.38428199942206" width="77.66541462005205" height="67.95723779254547" fill="#ef444466" stroke="#ef4444" stroke-width="0.006180357142857142"/></g><g><rect data-type="rect" data-label="netId: VCC
|
|
4
|
+
globalConnNetId: connectivity_net2" data-x="-3.541" data-y="2.161" x="172.51661369546378" y="320.72811326206295" width="77.66541462005193" height="67.95723779254553" fill="#ef444466" stroke="#ef4444" stroke-width="0.006180357142857142"/></g><g><rect data-type="rect" data-label="INLINE netId: .B1 > .pin1 to .SW1 > .pin1
|
|
5
|
+
axis: x
|
|
6
|
+
side: y+" data-x="-3.54" data-y="3.535" x="166.20629875758448" y="122.68130598093029" width="90.60965039006078" height="19.41635365501304" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.006180357142857142"/></g><text data-type="text" data-label=".B1 > .pin1 to .SW1 > .pin1" data-x="-3.54" data-y="3.535" x="211.51112395261487" y="132.3894828084368" fill="green" font-size="19.416353655013005" font-family="sans-serif" text-anchor="middle" dominant-baseline="central"><![CDATA[.B1 > .pin1 to .SW1 > .pin1]]></text><g><circle data-type="point" data-label="schematic_port_0
|
|
7
|
+
x-" data-x="-4.5" data-y="3" cx="56.18029471251077" cy="218.9540595203698" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_1
|
|
8
|
+
x+" data-x="-3.5" data-y="3" cx="217.98324183761918" cy="218.9540595203698" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_2
|
|
9
|
+
x-" data-x="-2.38" data-y="3" cx="399.20254261774056" cy="218.9540595203698" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_3
|
|
10
|
+
x+" data-x="-1.62" data-y="3" cx="522.1727824328229" cy="218.9540595203698" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_4
|
|
11
|
+
x-" data-x="-3.3" data-y="1.5" cx="250.34383126264083" cy="461.65848020803236" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_5
|
|
12
|
+
x+" data-x="-2.7" data-y="1.5" cx="347.4255995377058" cy="461.65848020803236" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
13
|
+
orientation: y-" data-x="-3" data-y="3" cx="298.8847154001734" cy="218.9540595203698" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
14
|
+
orientation: y+" data-x="-1.3790000000000002" data-y="3.251" cx="561.1672926899739" cy="178.34151979196758" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
|
|
15
|
+
orientation: y+" data-x="-3.541" data-y="1.9509999999999998" cx="211.34932100548974" cy="388.6853510546085" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="inline anchor
|
|
16
|
+
.B1 > .pin1 to .SW1 > .pin1" data-x="-3.54" data-y="3.4250000000000003" cx="211.51112395261487" cy="150.18780699219872" r="3" fill="green"/></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[
|
|
17
|
+
document.currentScript.parentElement.addEventListener('mousemove', (e) => {
|
|
18
|
+
const svg = e.currentTarget;
|
|
19
|
+
const rect = svg.getBoundingClientRect();
|
|
20
|
+
const x = e.clientX - rect.left;
|
|
21
|
+
const y = e.clientY - rect.top;
|
|
22
|
+
const crosshair = svg.getElementById('crosshair');
|
|
23
|
+
const h = svg.getElementById('crosshair-h');
|
|
24
|
+
const v = svg.getElementById('crosshair-v');
|
|
25
|
+
const coords = svg.getElementById('coordinates');
|
|
26
|
+
|
|
27
|
+
crosshair.style.display = 'block';
|
|
28
|
+
h.setAttribute('x1', '0');
|
|
29
|
+
h.setAttribute('x2', '640');
|
|
30
|
+
h.setAttribute('y1', y);
|
|
31
|
+
h.setAttribute('y2', y);
|
|
32
|
+
v.setAttribute('x1', x);
|
|
33
|
+
v.setAttribute('x2', x);
|
|
34
|
+
v.setAttribute('y1', '0');
|
|
35
|
+
v.setAttribute('y2', '640');
|
|
36
|
+
|
|
37
|
+
// Calculate real coordinates using inverse transformation
|
|
38
|
+
const matrix = {"a":161.80294712510837,"c":0,"e":784.2935567754985,"b":0,"d":-161.80294712510837,"f":704.3629008956949};
|
|
39
|
+
// Manually invert and apply the affine transform
|
|
40
|
+
// Since we only use translate and scale, we can directly compute:
|
|
41
|
+
// x' = (x - tx) / sx
|
|
42
|
+
// y' = (y - ty) / sy
|
|
43
|
+
const sx = matrix.a;
|
|
44
|
+
const sy = matrix.d;
|
|
45
|
+
const tx = matrix.e;
|
|
46
|
+
const ty = matrix.f;
|
|
47
|
+
const realPoint = {
|
|
48
|
+
x: (x - tx) / sx,
|
|
49
|
+
y: (y - ty) / sy // Flip y back since we used negative scale
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
|
|
53
|
+
coords.setAttribute('x', (x + 5).toString());
|
|
54
|
+
coords.setAttribute('y', (y - 5).toString());
|
|
55
|
+
});
|
|
56
|
+
document.currentScript.parentElement.addEventListener('mouseleave', () => {
|
|
57
|
+
document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
|
|
58
|
+
});
|
|
59
|
+
]]></script></svg>
|