瀏覽代碼

'hand drawn' pcb for power connector

clementinecomputing 5 年之前
父節點
當前提交
4a361eb104

+ 73 - 0
experiment/pcb/export/export

@@ -0,0 +1,73 @@
+#!/bin/bash
+
+ifnsvg="../power-conn-pcb_5.svg"
+ifn="../power-conn-pcb_5.ps"
+s=100000
+s_inv=`echo "1.0/$s" | bc -l`
+f_ink=`echo "72/25.4" | bc -l `
+f_ink_inv=`echo "25.4/72" | bc -l `
+
+viewbox=`cat $ifnsvg | xpup '/svg/@viewBox'`
+
+x0=`echo "$viewbox" | cut -f1 -d' '`
+y0=`echo "$viewbox" | cut -f2 -d' '`
+
+x1=`echo "$viewbox" | cut -f3 -d' '`
+y1=`echo "$viewbox" | cut -f4 -d' '`
+
+pstoedit -f gnuplot $ifn raw.gp
+head -n -7 raw.gp > body.gp
+tail -n 7 raw.gp > outline.gp
+
+## A better way?
+## $ xj ../power-conn-pcb_5.svg  | \
+##   jq '.["{http://www.w3.org/2000/svg}svg"]["{http://www.w3.org/2000/svg}g"][] | select( . >= {} ) | select( .["@{http://www.inkscape.org/namespaces/inkscape}label"] == "outline" )'
+
+
+R=0.3
+
+clipcli -t union -S nonzero -O 1 -s body.gp -F -x $s -T -R $R > raw_u.gp
+clipcli -t union -S nonzero -O 1 -s outline.gp -F -x $s -T -R $R >> raw_u.gp
+
+t=`echo "$f_ink_inv / $s" | bc -l` 
+
+cat raw_u.gp | ./gpmat $t 0 0 $t > out.gp
+
+
+###
+
+./xj $ifnsvg | \
+  jq -c '.["{http://www.w3.org/2000/svg}svg"]["{http://www.w3.org/2000/svg}g"]["{http://www.w3.org/2000/svg}circle"][] | [ .["@cx"], .["@cy"] ]' | \
+  tr -d '[]' | sed 's/,/ /g' | \
+  ./gpmat 1 0 0 -1 0 $y1 > drill.txt
+
+###
+
+echo -e "G90\nG21\n\n" > out.ngc
+./gp2ngc out.gp | \
+  grecode -cw >> out.ngc
+
+minx=`./ngc_bounds out.ngc | grep min_x | cut -f2 -d' '`
+miny=`./ngc_bounds out.ngc | grep min_y | cut -f2 -d' '`
+
+echo "# $minx $miny"
+
+#shiftx="-50"
+#shifty="-40"
+
+shiftx="-85"
+shifty="-10"
+
+grecode -shift -$minx -$miny out.ngc | \
+  grecode -shift $shiftx $shifty | \
+  sed 's/^G0\(.*\)/G0 Z1\nG0\1\nG1 Z-1/' | \
+  sed 's/^[gG]1\(.*\)/G1\1 Z-1/' > out_fin.ngc
+
+cat drill.txt | \
+  awk '{ print "G0 Z1\nG0", "X"$1, "Y"$2, "Z1\nG1 Z-1\nG0 Z1\n" }' | \
+  grecode -cw > drill.ngc
+
+grecode -shift -$minx -$miny drill.ngc | \
+  grecode -shift $shiftx $shifty > drill_fin.ngc
+
+cat out_fin.ngc drill_fin.ngc > fin.ngc

+ 689 - 0
experiment/pcb/export/gp2ngc

@@ -0,0 +1,689 @@
+#!/usr/bin/python
+
+from __future__ import print_function
+import os, sys, re, getopt, numpy as np, math, json
+
+from signal import signal, SIGPIPE, SIG_DFL
+signal(SIGPIPE,SIG_DFL)
+
+VERSION = "0.1.0"
+
+ctx = {
+  "units" : "mm", "epsilon" : 1.0/1024.0,
+  "sort": False,
+  "explicit_speed": False,
+  "premul" : 1.0, "premul_x" : 1.0, "premul_y" : 1.0, "premul_z" : 1.0,
+  "header" : "", "footer" : "",
+  "g0speed" : "", "g1speed" : "",
+  "z_active": False,
+  "z_step" : 7.0, "z_height" : 5.0, "z_plunge" : -21.0, "z_0" : 0.0, "z_slow" : "", "z_rapid" : "",
+  "tab_n" : 0, "tab_offset" : 0.0, "tab_length" : 50.0, "tab_height" : 5.0, "tab_slide_factor" : 1/8.0,
+  "tab_default_n" : 4,
+  "close_polygon": True
+}
+
+ctx_laser = {
+  "units" : "mm", "epsilon" : 1.0/1024.0,
+  "sort": False,
+  "explicit_speed": False,
+  "premul" : 1.0, "premul_x" : 1.0, "premul_y" : 1.0, "premul_z" : 1.0,
+  "header" : "", "footer" : "",
+  "g0speed" : "F5000", "g1speed" : "F3000",
+  "z_active": False,
+  "z_step" : 0.0, "z_height" : 0.0, "z_plunge" : 0.0, "z_0" : 0.0, "z_slow" : 0.0, "z_rapid" : 0.0,
+  "tab_n" : 0, "tab_offset" : 0.0, "tab_length" : 2.5, "tab_height" : 0.0, "tab_slide_factor" : 1/8.0,
+  "tab_default_n" : 4,
+  "close_polygon": True
+}
+
+ctx_maslow = {
+  "units" : "mm", "epsilon" : 1.0/(1024.0*1024.0),
+  "sort": False,
+  "explicit_speed": False,
+  "premul" : 1.0, "premul_x" : 1.0, "premul_y" : 1.0, "premul_z" : 1.0,
+  "header" : "", "footer" : "",
+  #"g0speed" : 800.0, "g1speed" : 800.0,
+  "g0speed" : "", "g1speed" : "",
+  "z_active": True,
+  "z_step" : 7.0, "z_height" : 5.0, "z_plunge" : -21.0, "z_0" : 0.0, "z_slow" : "", "z_rapid" : "",
+  #"tab_n" : 3, "tab_offset" : 0.0, "tab_length" : 50.0, "tab_height" : 3.0, "tab_slide_factor" : 1/8.0,
+  "tab_n" : 3, "tab_offset" : 0.0, "tab_length" : 50.0, "tab_height" : 10.0, "tab_slide_factor" : 1/8.0,
+  "tab_default_n" : 3,
+  "close_polygon": True
+}
+
+def usage():
+  print("version:", VERSION)
+  print("usage:")
+  print("")
+  print("    gp2ngc [options] <in-gnuplot> <out-ngc>")
+  print("")
+  print("  [--preset preset]      use preset tool context (options are 'maslow', 'laser')")
+  print("  [-i infile]            input file ('-' for stdin, default)")
+  print("  [-o outfile]           output file ('-' for stdout, default)")
+  print("  [--header str]         string to print before any processing")
+  print("  [--footer str]         string to print after any processing")
+  print("  [--rapid str]          string to append at end of rapid motion (G0)")
+  print("  [--slow str]           string to append at end of slow motion (G1)")
+  print("  [--z-rapid str]        z rapid (default to rapid)")
+  print("  [--z-slow str]         z rapid (default to rapid)")
+  print("  [--z-step dz]          z step down per pass")
+  print("  [--z-raise Z]          z height to raise z to for rapid motion")
+  print("  [--z-plunge z]         z final plunge depth")
+  print("  [--tab-n n]            insert n tabs per contour")
+  print("  [--tab-length s]       tab length")
+  print("  [--tab-height h]       tab height")
+  print("  [--show-context]       show context information")
+  print("  [--close-polygon]      connect first and last point in polygon point list (default)")
+  print("  [--open-polygon]       do not connect first and last point in polygon point list")
+  print("")
+
+def print_polygon_debug(pgn, ofp=sys.stdout):
+  print("", file=ofp)
+  for idx in range(len(pgn)):
+    print("#", idx, pgn[idx]["t"], ":", pgn[idx]["x"], pgn[idx]["y"], pgn[idx]["s"], "n:", pgn[idx]["n"], file=ofp)
+
+def print_polygon_debug2(pgn, ofp=sys.stdout):
+  print("", file=ofp)
+  for idx in range(len(pgn)):
+    z = 0.0
+    if pgn[idx]["t"] == "t": z = 1
+    print(pgn[idx]["x"], pgn[idx]["y"], z, file=ofp)
+
+    #if idx>0 and ((pgn[idx-1]["t"] == "." and pgn[idx]["t"] == "t") or (pgn[idx-1]["t"] == "t" and pgn[idx]["t"] == ".")):
+    #  print( "\n", file=ofp)
+
+
+def cmp_pgn_ele(a,b):
+  if (len(a) == 0): return -1
+  if (len(b) == 0): return 1
+
+  s0 = math.sqrt(a[0][0]*a[0][0] + a[0][1]*a[0][1])
+  s1 = math.sqrt(b[0][0]*b[0][0] + b[0][1]*b[0][1])
+
+  if s0 < s1: return -1
+  if s1 > s0: return  1
+  return 0
+
+def polygons_sort(pgns):
+  pgns.sort(cmp_pgn_ele)
+
+
+def print_polygon(pgn, ofp=sys.stdout):
+  print("", file=ofp)
+  for idx in range(len(pgn)):
+    print(pgn[idx]["x"], pgn[idx]["y"], file=ofp)
+
+
+def crossprodmag(u,v, eps=1.0/1024.0):
+  ux = u["x"]
+  uy = u["y"]
+  us = math.sqrt(ux*ux + uy*uy)
+
+  vx = v["x"]
+  vy = v["y"]
+  vs = math.sqrt(vx*vx + vy*vy)
+
+  if (abs(us) < eps) or (abs(vs) < eps): return 0.0
+
+  return ((ux*vy) - (uy*vx))/(us*vs)
+
+
+def ingest_egest_orig(ctx, ifp = sys.stdin, ofp = sys.stdout):
+  polygons = []
+  polygon = []
+
+  print(ctx["header"], file=ofp)
+
+  line_no=0
+  #for line in sys.stdin:
+  for line in ifp:
+    line = line.strip()
+    line_no += 1
+
+    if (len(line)==0) or (line == ""):
+      if len(polygon)>0:
+        polygons.append(polygon)
+      polygon = []
+      continue
+
+    if line[0]=='#': continue
+
+    r = re.split(r'\s+', line)
+
+    if len(r)!=2:
+      print("Error on line " + str(line_no) + ": number of arguments is not 2 (" + line + ")", file=sys.stderr)
+      sys.exit(1)
+
+    try:
+      x = float(r[0]) * ctx["premul"]
+      y = float(r[1]) * ctx["premul"]
+    except Exception, e:
+      print(e, file=sys.stderr)
+      sys.exit(1)
+
+    polygon.append([x,y])
+
+  for p in polygons:
+    if len(p)==0: continue
+
+    x0 = p[0][0]
+    y0 = p[0][1]
+
+    print("G0", "X" + "{:.10f}".format(x0), "Y" + "{:.10f}".format(y0), sfx_rapid, file=ofp)
+    for xy in p:
+      x = xy[0]
+      y = xy[1]
+      print("G1", "X" + "{:.10f}".format(x), "Y" + "{:.10f}".format(y), ctx["g1speed"], file=ofp)
+
+    if ctx["close_polygon"]:
+      print("G1", "X" + "{:.10f}".format(x0), "Y" + "{:.10f}".format(y0), ctx["g1speed"], file=ofp)
+
+    print(file=ofp)
+
+  print(sfx, file=ofp)
+
+def ingest_egest(ctx, ifp = sys.stdin, ofp = sys.stdout):
+  polygons = []
+  polygon = []
+
+  print(ctx["header"], file=ofp)
+
+  line_no=0
+  #for line in sys.stdin:
+  for line in ifp:
+    line = line.strip()
+    line_no += 1
+
+    if (len(line)==0) or (line == ""):
+      if len(polygon)>0:
+        polygons.append(polygon)
+      polygon = []
+      continue
+
+    if line[0]=='#': continue
+
+    r = re.split(r'\s+', line)
+
+    if len(r)!=2:
+      print("Error on line " + str(line_no) + ": number of arguments is not 2 (" + line + ")", file=sys.stderr)
+      sys.exit(1)
+
+    try:
+      x = float(r[0]) * ctx["premul"]
+      y = float(r[1]) * ctx["premul"]
+    except Exception, e:
+      print(e, file=sys.stderr)
+      sys.exit(1)
+
+    polygon.append([x,y])
+
+  if len(polygon)>0:
+    polygons.append(polygon)
+
+  if ctx["sort"]:
+    polygons_sort(polygons)
+
+  for p in polygons:
+    if len(p)==0: continue
+
+    x0 = p[0][0]
+    y0 = p[0][1]
+
+    print("G0", "X" + "{:.10f}".format(x0), "Y" + "{:.10f}".format(y0), ctx["g0speed"], file=ofp)
+
+    nstep=1
+    if ctx["z_active"]:
+      print("G0", "Z" + "{:.10f}".format(ctx["z_height"]), ctx["z_rapid"], file=ofp)
+      nstep = int(math.ceil(( abs(ctx["z_plunge"] - ctx["z_0"]) )/ctx["z_step"]))
+
+    for s in range(nstep):
+
+      if ctx["z_active"]:
+        zh = ((ctx["z_plunge"] - ctx["z_0"]) * float(s+1)/float(nstep)) + ctx["z_0"]
+        if zh < ctx["z_plunge"]:
+          print(";#(CLAMPING)", file=ofp)
+          zh = ctx["z_plunge"]
+
+        print("G1", "Z" + "{:.10f}".format(zh), ctx["z_slow"], file=ofp)
+
+      for xy in p:
+        x = xy[0]
+        y = xy[1]
+        print("G1", "X" + "{:.10f}".format(x), "Y" + "{:.10f}".format(y), ctx["g1speed"], file=ofp)
+
+      if ctx["close_polygon"]:
+        print("G1", "X" + "{:.10f}".format(x0), "Y" + "{:.10f}".format(y0), ctx["g1speed"], file=ofp)
+
+      print(file=ofp)
+
+    if ctx["z_active"]:
+      print("G0", "Z" + "{:.10f}".format(ctx["z_height"]), ctx["z_rapid"], file=ofp)
+
+  print(ctx["footer"], file=ofp)
+
+## decorate the pgn array of objects with the cross product normal
+## magnitude value 'n'
+##
+def polygon_decorate_n(pgn):
+  if len(pgn) < 3:
+    for idx in range(len(pgn)):
+      pgn[idx]["n"] = 0.0
+    return
+
+  for idx in range(len(pgn)):
+    prv_idx = (idx + len(pgn) - 1) % len(pgn)
+    nxt_idx = (idx + 1) % len(pgn)
+    v0 = { "x": pgn[prv_idx]["x"] - pgn[idx]["x"], "y" : pgn[prv_idx]["y"] - pgn[idx]["y"] }
+    v1 = { "x": pgn[nxt_idx]["x"] - pgn[idx]["x"], "y" : pgn[nxt_idx]["y"] - pgn[idx]["y"] }
+    pgn[idx]["n"] = crossprodmag(v0,v1)
+
+## calculate the 'score' of the tab placed at path s-position 'tab_beg' with
+## tab length 'tab_len'.
+## This is length of each portion the tab falls on the line segment times the
+## magnitude of the normal.
+## Since the left and right segment use the same normal, and the normal is thus
+## multiplied by itself, this score is strictly positive.
+##
+def polygon_curve_score(pgn, tab_beg, tab_len):
+  score = 0.0
+  if len(pgn) < 3: return score
+  for idx in range(len(pgn)):
+
+    prv_idx = (idx + len(pgn) - 1) % len(pgn)
+    nxt_idx = (idx + 1) % len(pgn)
+
+    if (tab_beg + tab_len) < pgn[idx]["s"]: return score
+    if tab_beg > pgn[idx]["s"]: continue
+
+    s0 = abs(max(pgn[prv_idx]["s"], tab_beg) - pgn[idx]["s"])
+    s1 = abs(pgn[idx]["s"] - min(tab_beg + tab_len, pgn[nxt_idx]["s"]))
+
+    score += s0*s1*pgn[idx]["n"]*pgn[idx]["n"]
+
+  return score
+
+
+## insert the tab into the 'pgn' array at s-position 'tab_beg' with
+## 'tab_len'.
+## This does not wrap around from the end to the beginning (though this
+## might be upadted in the future).
+## This constructs a new array and returns it.
+##
+def polygon_insert_tab_at(pgn, tab_beg, tab_len):
+  ret_p = []
+
+  prv_x = 0.0
+  prv_y = 0.0
+  prv_s = 0.0
+
+  for pnt_idx in range(len(pgn)):
+    p = pgn[pnt_idx]
+
+    if pnt_idx==0:
+      prv_x = p["x"]
+      prv_y = p["y"]
+      prv_s = p["s"]
+
+    # take care of pathological case when line segment is 0 length
+    #
+    r = math.sqrt((prv_x - p["x"])*(prv_x - p["x"]) + (prv_y - p["y"])*(prv_y - p["y"]))
+    if abs(r) < ctx["epsilon"]:
+      prv_x = p["x"]
+      prv_y = p["y"]
+      prv_s = p["s"]
+      r = 1.0
+
+    # If the tab is completel to the 'left' of the current vertex, we can insert it
+    # completely without needing to split the tab into segements.
+    # Do so, making sure \to insert an extra 'down' entry so that if we are right
+    # next to another tab in the list, we'll properly render the outline.
+    #
+    if (tab_beg <= p["s"]) and ((tab_beg + tab_len) < p["s"]):
+      ds = tab_beg - prv_s
+      x = (ds * (p["x"] - prv_x) / r) + prv_x
+      y = (ds * (p["y"] - prv_y) / r) + prv_y
+      ret_p.append( {"x": x, "y": y, "s": tab_beg, "t": "t", "n":0.0 } )
+
+      ds = tab_beg + tab_len - prv_s
+      x = (ds * (p["x"] - prv_x) / r) + prv_x
+      y = (ds * (p["y"] - prv_y) / r) + prv_y
+      ret_p.append( {"x": x, "y": y, "s": tab_beg + tab_len, "t": "t", "n":0.0 } )
+
+      ret_p.append( {"x": x, "y": y, "s": tab_beg + tab_len, "t": ".", "n":0.0 } )
+
+      ret_p += pgn[pnt_idx:]
+      return ret_p
+
+    pnt_type = p["t"]
+
+    # The tab is split across the current vertex and entries to the right.
+    # Shave off the head of the tab, add/modify the entries to create a 'tab'
+    # entry in the 'pgn' list.
+    #
+    if (tab_beg <= p["s"]) and ((tab_beg + tab_len) > p["s"]):
+      ds = tab_beg - prv_s
+      x = (ds * (p["x"] - prv_x) / r) + prv_x
+      y = (ds * (p["y"] - prv_y) / r) + prv_y
+      ret_p.append( {"x": x, "y": y, "s": tab_beg, "t": "t", "n": 0.0 } )
+
+      pnt_type = "t"
+
+      tab_len -= (p["s"] - tab_beg)
+      tab_beg = p["s"]
+
+    ret_p.append( { "x" : p["x"], "y": p["y"], "s": p["s"], "t": pnt_type, "n": 0.0 })
+
+    prv_x = p["x"]
+    prv_y = p["y"]
+    prv_s = p["s"]
+
+  return ret_p
+
+
+## Process polygon and insert tabs.
+##
+def ingest_egest_with_tabs(ctx, ifp = sys.stdin, ofp = sys.stdout):
+  polygons = []
+  polygon = []
+
+  print(ctx["header"], file=ofp)
+
+  firstPoint = True
+  prev_x = 0.0
+  prev_y = 0.0
+
+  line_no=0
+  for line in ifp:
+    line = line.strip()
+    line_no += 1
+
+    if (len(line)==0) or (line == ""):
+      if len(polygon)>0:
+        polygons.append(polygon)
+      polygon = []
+      firstPoint = True
+      continue
+
+    if line[0]=='#': continue
+
+    r = re.split(r'\s+', line)
+
+    if len(r)!=2:
+      print("Error on line " + str(line_no) + ": number of arguments is not 2 (" + line + ")", file=sys.stderr)
+      sys.exit(1)
+
+    try:
+      x = float(r[0]) * ctx["premul"]
+      y = float(r[1]) * ctx["premul"]
+    except Exception, e:
+      print(e, file=sys.stderr)
+      sys.exit(1)
+
+    # record lenght of outline as we go
+    #
+    s = 0.0
+    if not firstPoint:
+      ds = math.sqrt( (prev_x - x)*(prev_x - x) + (prev_y - y)*(prev_y - y) )
+      s = polygon[ len(polygon) - 1 ]["s"] + ds
+
+    prev_x = x
+    prev_y = y
+
+    # '.' type ("T" field) represent simple contour whereas 't' type
+    # represents tabs. Though space iniefficient, it's easier
+    # to decorate entries with modifiers like this than do it a more
+    # complicated but efficietn way.
+    #
+    polygon.append({ "x":x, "y":y, "s": s, "t": ".", "n":0.0 })
+    firstPoint = False
+
+  if len(polygon)!=0:
+    polygons.append(polygon)
+
+  if ctx["sort"]:
+    polygons_sort(polygons)
+
+
+
+  # decorate with 'n' cross product magnitude value for
+  # score tab positioning heuristic.
+  #
+  for pgn_idx in range(len(polygons)):
+    pgn = polygons[pgn_idx]
+    if len(pgn)<3:
+      for idx in range(len(pgn)):
+        pgn[idx]["n"] = 0.0
+      continue
+
+    for idx in range(len(pgn)):
+      prv_idx = (idx + len(pgn) - 1) % len(pgn)
+      nxt_idx = (idx + 1) % len(pgn)
+      v0 = { "x": pgn[prv_idx]["x"] - pgn[idx]["x"], "y" : pgn[prv_idx]["y"] - pgn[idx]["y"] }
+      v1 = { "x": pgn[nxt_idx]["x"] - pgn[idx]["x"], "y" : pgn[nxt_idx]["y"] - pgn[idx]["y"] }
+      pgn[idx]["n"] = crossprodmag( v0, v1 )
+
+  _zheight = ctx["z_height"]
+  _zplunge = ctx["z_plunge"]
+  _zzero = ctx["z_0"]
+  _zstep = ctx["z_step"]
+  _g0speed = ctx["g0speed"]
+  _g1speed = ctx["g1speed"]
+
+  _tabheight = ctx["tab_height"]
+  _ztabstart = _zplunge + _tabheight
+
+  _tablen = ctx["tab_length"]
+  _ntab = ctx["tab_n"]
+
+  # a bit inefficient but construct tabs
+  #
+  for pidx in range(len(polygons)):
+    p = polygons[pidx]
+    if len(p)==0: continue
+
+    polygon_decorate_n(polygons[pidx])
+
+    clen = p[ len(p) - 1 ]["s"]
+
+    s_window_len = (clen / (float(_ntab))) - _tablen
+
+    if _tablen <= 0.0: continue
+    if clen < (float(_ntab) * _tablen): continue
+    for tabidx in range(_ntab):
+
+      tab_s_offset = float(tabidx) * clen / float(_ntab)
+
+      # this heuristic, for simplicity, only uses two scores, one at the original
+      # offset and another at some distance away that doesn't overlap with the
+      # other tab, to determine where the tab should be positioned.
+      #
+      n_tab_sample = 4
+      score, min_score, min_idx = [], 0, 0
+      for idx in range(n_tab_sample):
+        tab_shift = float(idx) * s_window_len / float(n_tab_sample)
+        score.append( polygon_curve_score(polygons[pidx], tab_s_offset + tab_shift , _tablen) )
+        #print("#", tab_s_offset + tab_shift, score[idx])
+        if idx==0:
+          min_score = score[0]
+          min_idx = 0
+        elif min_score > score[idx]:
+          min_score = score[idx]
+          min_idx = idx
+      #print("## min_score", min_score, ", min_idx", min_idx)
+
+      tab_shift = float(min_idx) * s_window_len / float(n_tab_sample)
+      polygons[pidx] = polygon_insert_tab_at(polygons[pidx], tab_s_offset + tab_shift, _tablen)
+
+      #if score0 == min(score0, score1, score2):
+      #  polygons[pidx] = polygon_insert_tab_at(polygons[pidx], tab_s_offset, _tablen)
+      #elif score1 == min(score0, score1, score2):
+      #  polygons[pidx] = polygon_insert_tab_at(polygons[pidx], tab_s_offset + s_window_len/2, _tablen)
+      #else:
+      #  polygons[pidx] = polygon_insert_tab_at(polygons[pidx], tab_s_offset + s_window_len, _tablen)
+
+    #print_polygon_debug(polygons[pidx])
+
+  for p in polygons:
+    if len(p)==0: continue
+
+    x0 = p[0]["x"]
+    y0 = p[0]["y"]
+
+    print("G0", "X" + "{:.10f}".format(x0), "Y" + "{:.10f}".format(y0), _g0speed, file=ofp)
+
+    nstep=1
+    if ctx["z_active"]:
+      print("G0", "Z" + "{:.10f}".format(_zheight), _g0speed, file=ofp)
+      nstep = int(abs(math.ceil((_zplunge - _zzero)/_zstep)))
+
+    prev_entry_type = "."
+
+    for s in range(nstep):
+
+      if ctx["z_active"]:
+        zh = ((_zplunge - _zzero) * float(s+1)/float(nstep)) + _zzero
+        if zh < _zplunge:
+          zh = _zplunge
+
+        #if (zh < _ztabstart) and (prev_entry_type == ".") and (xy["t"] == "t"):
+        #    #print(";# up!", file=ofp)
+        #    print("G1", "Z" + "{:.10f}".format(_ztabstart), _g1speed, file=ofp)
+        #else:
+        #  print("G1", "Z" + "{:.10f}".format(zh), _g1speed, file=ofp)
+
+      firstIter = True
+
+      for xy in p:
+
+        if firstIter:
+          if (zh < _ztabstart) and (prev_entry_type == ".") and (xy["t"] == "t"):
+              #print(";# up!", file=ofp)
+              print("G1", "Z" + "{:.10f}".format(_ztabstart), _g1speed, file=ofp)
+          else:
+            print("G1", "Z" + "{:.10f}".format(zh), _g1speed, file=ofp)
+        firstIter = False
+
+
+
+        if ctx["z_active"] and (zh < _ztabstart):
+          if (prev_entry_type == "t") and (xy["t"] == "."):
+
+            #print(";# down!", file=ofp)
+            print("G1", "Z" + "{:.10f}".format(zh), _g1speed, file=ofp)
+
+        x = xy["x"]
+        y = xy["y"]
+        print("G1", "X" + "{:.10f}".format(x), "Y" + "{:.10f}".format(y), _g1speed, file=ofp)
+
+        if ctx["z_active"]:
+          if zh < _ztabstart:
+            if (prev_entry_type == ".") and (xy["t"] == "t"):
+              #print(";# up!", file=ofp)
+              print("G1", "Z" + "{:.10f}".format(_ztabstart), _g1speed, file=ofp)
+
+        prev_entry_type = xy["t"]
+
+      #if ctx["z_active"]:
+      if ctx["close_polygon"]:
+        print("G1", "X" + "{:.10f}".format(x0), "Y" + "{:.10f}".format(y0), _g1speed, file=ofp)
+
+      print(file=ofp)
+
+    print("G0", "Z" + "{:.10f}".format(_zheight), _g0speed, file=ofp)
+
+  print(ctx["footer"], file=ofp)
+
+
+def main(argv):
+  global ctx
+  ifn, ofn = "-", "-"
+  ifp, ofp = sys.stdin, sys.stdout
+
+  long_opt_list = [ "help", "preset=", "show-context", "z", "explicit-speed", "premul=", "epsilon=", "header=", "footer=", "rapid=", "slow=",
+                    "z-rapid=", "z-slow=", "z-step=", "z-raise=", "z-plunge=",
+                    "tab", "tab-n=", "tab-length=", "tab-height=", "notab",
+                    "close-polygon", "open-polygon",
+                    "sort"]
+
+  try:
+    #opts,args = getopt.getopt(argv,"hi:o:",["sfx-final=", "pfx=", "sfx-rapid=","sfx-slow=", "premul=", "z-step", "z-raise", "z-plunge"])
+    opts,args = getopt.getopt(argv,"hi:o:",long_opt_list)
+  except getopt.GetoptError:
+    usage()
+    sys.exit(2)
+
+  if len(args) >= 1:
+    ifn = args[0]
+    if len(args) >= 2:
+      ofn = args[1]
+
+  for opt, arg in opts:
+    if opt == "--preset":
+      if arg.lower() in ("maslow", "maslowcnc"):
+        ctx = ctx_maslow
+      elif arg.lower() in ("laser"):
+        ctx = ctx_laser
+      else:
+        print("WARNING: no preset found, using default", file=sys.stderr)
+
+  show_context = False
+
+  for opt, arg in opts:
+
+    if opt in ("-h", "--help"):
+      usage()
+      sys.exit()
+    elif opt in ("--show-context"): show_context = True
+
+    elif opt in ("-i", "--ifile"): ifn = arg
+    elif opt in ("-o", "--ofile"): ofn = arg
+
+    elif opt in ("--premul"): ctx["premul"] = float(arg)
+
+    elif opt in ("--rapid"):
+      ctx["g0speed"] = arg
+      ctx["explicit_speed"] = True
+    elif opt in ("--slow"):
+      ctx["g1speed"] = arg
+      ctx["explicit_speed"] = True
+    elif opt in ("--explicit-speed"): ctx["explicit_speed"] = True
+
+    elif opt in ("--header"):     ctx["header"] = arg.decode('unicode_escape')
+    elif opt in ("--footer"):  ctx["footer"] = arg.decode('unicode_escape')
+
+    elif opt in ("--close-polygon"): ctx["close_polygon"] = True
+    elif opt in ("--open-polygon"): ctx["close_polygon"] = False
+
+    elif opt in ("--z"):        ctx["z_active"] = True
+    elif opt in ("--z-slow"):   ctx["z_slow"] = float(arg)
+    elif opt in ("--z-rapid"):  ctx["z_rapid"] = float(arg)
+    elif opt in ("--z-step"):   ctx["z_step"] = float(arg)
+    elif opt in ("--z-raise"):  ctx["z_height"] = float(arg)
+    elif opt in ("--z-plunge"):
+      ctx["z_active"] = True
+      ctx["z_plunge"] = float(arg)
+
+    elif opt in ("--notab"):  ctx["tab_n"] = 0
+    elif opt in ("--tab"):    ctx["tab_n"] = ctx["tab_default_n"]
+    elif opt in ("--tab-n"):  ctx["tab_n"] = int(arg)
+    elif opt in ("--tab-length"): ctx["tab_length"] = float(arg)
+    elif opt in ("--tab-height"): ctx["tab_height"] = float(arg)
+
+    elif opt in ("--sort"): ctx["sort"] = True
+
+  if show_context:
+    print(json.dumps(ctx, indent=2))
+    sys.exit(0)
+
+  if ifn != "-": ifp = open(ifn,"r")
+  if ofn != "-": ofp = open(ofn, "w")
+
+  if ctx["tab_n"] > 0 : ingest_egest_with_tabs(ctx, ifp, ofp)
+  else:                 ingest_egest(ctx, ifp, ofp)
+
+  if ifp!=sys.stdin:  ifp.close()
+  if ofp!=sys.stdout: ofp.close()
+
+if __name__ == "__main__":
+  main(sys.argv[1:])

+ 60 - 0
experiment/pcb/export/gpmat

@@ -0,0 +1,60 @@
+#!/usr/bin/python
+
+import math
+import sys
+import os
+
+
+u0 = 1.0
+u1 = 0.0
+u2 = 0.0
+u3 = 1.0
+u4 = 0.0
+u5 = 0.0
+
+if len(sys.argv)>1:
+  if (sys.argv[1] == "-h"):
+    print "\nusage:\n\n  gpmat u0 u1 u2 u3 [u4] [u5]\n\n"
+    print "  | u0 u2 u4 |"
+    print "  | u1 u3 u5 |"
+    print "  | 0  0  1  |"
+    print "\n"
+    sys.exit(0)
+  u0 = float(sys.argv[1])
+  if len(sys.argv)>2:
+    u1 = float(sys.argv[2])
+    if len(sys.argv)>3:
+      u2 = float(sys.argv[3])
+      if len(sys.argv)>4:
+        u3 = float(sys.argv[4])
+        if len(sys.argv)>5:
+          u4 = float(sys.argv[5])
+          if len(sys.argv)>6:
+            u5 = float(sys.argv[6])
+
+mat = [ [ u0, u2, u4], [ u1, u3, u5 ], [0.0, 0.0, 1.0]  ]
+
+for line in sys.stdin:
+  line = line.strip()
+  if len(line)==0:
+    print ""
+    continue
+  if line[0] == '#':
+    print line
+    continue
+
+  xy = line.split(" ")
+  x = float(xy[0])
+  y = float(xy[1])
+  z = 1.0
+
+  #print xy, x, y, z, u0, u1, u2, u3, u4, u5
+
+  tx = x*u0 + y*u2 + z*u4
+  ty = x*u1 + y*u3 + z*u5
+
+  print tx, ty
+
+
+
+

+ 113 - 0
experiment/pcb/export/ngc_bounds

@@ -0,0 +1,113 @@
+#!/usr/bin/perl
+#
+
+use strict;
+
+my $fn = ($ARGV[0] || die "provide gcode file");
+die "invalid file: $fn" if (!-e $fn);
+
+# default to mm
+my $is_mm = 1;
+
+my $have_x = 0;
+my $have_y = 0;
+my $have_z = 1;
+
+my $x_min_mm;
+my $x_max_mm;
+
+my $y_min_mm;
+my $y_max_mm;
+
+my $z_min_mm = 0;
+my $z_max_mm = 0;
+
+
+open FIL, $fn;
+while (<FIL>)
+{
+  my $l = $_;
+
+  $l =~ s/;.*//;
+  $l =~ s/\([^)]*\)//g;
+
+  my $g_line = $l;
+  while ($g_line =~ /[gG]\s*2([01])/)
+  {
+    my $zo = $1;
+    $is_mm = 0 if ($zo eq "0");
+    $is_mm = 1 if ($zo eq "1");
+    $g_line = substr $g_line, (@+[0]);
+  }
+
+  while ($g_line =~ /[xX]\s*(-?\d+(\.\d+)?|-?\.\d+)/)
+  {
+    my $x = $1;
+    my $x_mm = ( $is_mm ? $x : ($x * 25.4) );
+    if (!$have_x)
+    {
+      $x_min_mm = $x_mm;
+      $x_max_mm = $x_min_mm;
+      $have_x = 1;
+    }
+    else
+    {
+      $x_min_mm = $x_mm if ($x_min_mm > $x_mm);
+      $x_max_mm = $x_mm if ($x_max_mm < $x_mm);
+    }
+    $g_line = substr $g_line, (@+[0]);
+  }
+
+  $g_line = $l;
+  while ($g_line =~ /[yY]\s*(-?\d+(\.\d+)?|-?\.\d+)/)
+  {
+    my $y = $1;
+    my $y_mm = ( $is_mm ? $y : ($y * 25.4) );
+    if (!$have_y)
+    {
+      $y_min_mm = $y_mm;
+      $y_max_mm = $y_min_mm;
+      $have_y = 1;
+    }
+    else
+    {
+      $y_min_mm = $y_mm if ($y_min_mm > $y_mm);
+      $y_max_mm = $y_mm if ($y_max_mm < $y_mm);
+    }
+    $g_line = substr $g_line, (@+[0]);
+  }
+
+  my $g_line = $l;
+  while ($g_line =~ /[zZ]\s*(-?\d+(\.\d+)?|-?\.\d+)/)
+  {
+    my $z = $1;
+    my $z_mm = ( $is_mm ? $z : ($z * 25.4) );
+    if (!$have_z)
+    {
+      $z_min_mm = $z_mm;
+      $z_max_mm = $z_min_mm;
+      $have_z = 1;
+    }
+    else
+    {
+      $z_min_mm = $z_mm if ($z_min_mm > $z_mm);
+      $z_max_mm = $z_mm if ($z_max_mm < $z_mm);
+    }
+    $g_line = substr $g_line, (@+[0]);
+  }
+
+}
+close FIL;
+
+die "don't have all of x, y, z co-ords" if ( not $have_x or not $have_y or not $have_z );
+
+print "min_x: ", $x_min_mm, " mm, ", ($x_min_mm/25.4), " inch\n";
+print "max_x: ", $x_max_mm, " mm, ", ($x_max_mm/25.4), " inch\n";
+
+print "min_y: ", $y_min_mm, " mm, ", ($y_min_mm/25.4), " inch\n";
+print "max_y: ", $y_max_mm, " mm, ", ($y_max_mm/25.4), " inch\n";
+
+print "min_z: ", $z_min_mm, " mm, ", ($z_min_mm/25.4), " inch\n";
+print "max_z: ", $z_max_mm, " mm, ", ($z_max_mm/25.4), " inch\n";
+
+

+ 20 - 0
experiment/pcb/export/xj

@@ -0,0 +1,20 @@
+#!/usr/bin/python
+
+import xmljson
+from xmljson import badgerfish as bf
+from xml.etree.ElementTree import fromstring
+import json
+import sys
+import os
+
+if (len(sys.argv) < 2):
+  print "provide file"
+  sys.exit(-1)
+
+with open(sys.argv[1]) as fp:
+  dat = fp.read()
+
+
+  print json.dumps( bf.data(fromstring(dat)) )
+
+

+ 303 - 0
experiment/pcb/power-conn-pcb.svg

@@ -0,0 +1,303 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg1478"
+   inkscape:version="0.92.4 (unknown)"
+   sodipodi:docname="power-conn-pcb.svg">
+  <defs
+     id="defs1472" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="91.130716"
+     inkscape:cy="1027.6722"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1278"
+     inkscape:window-height="742"
+     inkscape:window-x="2150"
+     inkscape:window-y="84"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata1475">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 20.265415,25.183322 c -0.02363,1.9135 -0.225021,1.99434 0.212612,2.83482 0.631895,1.21357 2.368835,1.49482 3.177363,2.59859 0.320579,0.43764 0.602401,1.5119 0.602401,1.5119"
+       id="path1058"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caac" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 23.99793,21.639792 c 0.496095,0.75595 0.989872,1.28961 1.258128,2.04308 0.355734,0.99917 -0.07422,2.21522 0.419144,3.1541 0.335846,0.63911 1.022549,1.02814 1.606398,1.45285 0.580537,0.4223 1.223248,0.75564 1.866256,1.07486 0.635332,0.31541 1.462761,0.32171 1.960751,0.82682 0.471218,0.47796 0.755955,1.86626 0.755955,1.86626"
+       id="path1060"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caaaaac" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 23.879812,25.206942 c -0.04725,1.91351 -0.08898,1.79617 0.330726,2.53954 0.37608,0.66609 1.145406,1.02592 1.795388,1.42921 0.827659,0.51354 1.970253,0.53858 2.645837,1.24024 0.406276,0.42195 0.685081,1.61821 0.685081,1.61821"
+       id="path1062"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caaac" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 51.940052,25.204692 c -1.135896,1.46998 -0.799381,0.95016 -1.135896,1.46998 -0.442675,0.6838 -0.620393,1.53818 -1.152599,2.15486 -0.525323,0.60871 -1.29953,0.94747 -1.937705,1.43658 -0.56942,0.43641 -1.374793,0.69048 -1.687139,1.33634 -0.106664,0.22056 0,0.73499 0,0.73499"
+       id="path1064"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caaaac" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 51.605965,21.529732 c -0.902036,1.10249 -1.242547,1.31828 -1.558399,2.14316 -0.405691,1.05951 0.134956,2.35943 -0.348763,3.38567 -0.516792,1.09641 -1.510201,1.97144 -2.552897,2.58949 -0.961253,0.56977 -2.416554,0.14621 -3.22394,0.91873 -0.432562,0.41388 -0.567947,1.70384 -0.567947,1.70384"
+       id="path1066"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caaaac" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 48.198281,21.797002 c -1.135896,2.05463 -1.36824,1.4318 -1.712966,2.33284 -0.323882,0.84656 0.236985,1.9513 -0.264546,2.70631 -0.650076,0.97863 -2.00419,1.25391 -3.100615,1.676 -1.358625,0.52303 -3.251867,-0.0308 -4.242901,1.03567 -0.618781,0.66585 -0.575386,1.92964 -0.451016,2.6894"
+       id="path1068"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caaaac" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 48.298505,25.137872 c -0.300678,1.90429 -0.559562,2.16194 -1.319644,2.90656 -0.705591,0.69123 -1.805906,0.80194 -2.722809,1.1693 -0.799745,0.32042 -1.80404,0.30184 -2.422128,0.90203 -0.551902,0.53592 -0.868627,2.13816 -0.868627,2.13816"
+       id="path1070"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caaac" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-7-7"
+       cx="20.143415"
+       cy="25.340744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-8-1"
+       cx="23.643419"
+       cy="25.340744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-8-1"
+       cx="27.143419"
+       cy="25.340744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-6-1"
+       cx="30.643421"
+       cy="25.340744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-99-0-7"
+       cx="34.143421"
+       cy="25.340744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-1-4-0"
+       cx="37.643421"
+       cy="25.340744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-4-6-4"
+       cx="41.143417"
+       cy="25.340744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-9-7-0"
+       cx="44.643425"
+       cy="25.340744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-4-4-6-8"
+       cx="48.143421"
+       cy="25.340744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-9-8-0-5"
+       cx="51.643421"
+       cy="25.340744"
+       r="1.4" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 20.667017,21.805162 c 0.661458,0.94494 0.795463,1.37398 1.027622,2.12611 0.345209,1.11838 0.0141,2.41706 0.519713,3.47266 0.326193,0.68101 0.953231,1.18472 1.535533,1.66545 0.749899,0.61909 1.883486,0.76792 2.480467,1.53554 0.329479,0.42365 0.484283,1.53552 0.484283,1.53552"
+       id="path1056"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caaaac" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-2-9-1"
+       cx="20.143415"
+       cy="21.840744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-5-7-6"
+       cx="23.643419"
+       cy="21.840744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-3-5-6"
+       cx="27.143419"
+       cy="21.840744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-4-9-2"
+       cx="30.643421"
+       cy="21.840744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-99-9-7-1"
+       cx="34.143421"
+       cy="21.840744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-1-0-8-9"
+       cx="37.643421"
+       cy="21.840744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-4-2-5-6"
+       cx="41.143417"
+       cy="21.840744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-9-0-3-4"
+       cx="44.643425"
+       cy="21.840744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-4-4-1-3-8"
+       cx="48.143421"
+       cy="21.840744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-9-8-9-8-0"
+       cx="51.643421"
+       cy="21.840744"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1072"
+       cx="38.399658"
+       cy="32.224106"
+       r="1.016" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1072-6"
+       cx="40.939659"
+       cy="32.224106"
+       r="1.016" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1072-6-5"
+       cx="43.47966"
+       cy="32.224106"
+       r="1.016" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1072-6-3"
+       cx="46.019661"
+       cy="32.224106"
+       r="1.016" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1072-4"
+       cx="24.209429"
+       cy="32.253922"
+       r="1.016" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1072-6-9"
+       cx="26.74943"
+       cy="32.253922"
+       r="1.016" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1072-6-5-8"
+       cx="29.289431"
+       cy="32.253922"
+       r="1.016" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1072-6-3-3"
+       cx="31.829432"
+       cy="32.253922"
+       r="1.016" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.56917441;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1412"
+       cx="13.957938"
+       cy="33.785599"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.56917441;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1412-8"
+       cx="13.957938"
+       cy="16.135521"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.56917441;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1412-5"
+       cx="57.992165"
+       cy="16.135521"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.56917441;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1412-2"
+       cx="57.992165"
+       cy="33.785599"
+       r="1.5" />
+    <rect
+       style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.98642536;fill-rule:nonzero;stroke:#000000;stroke-width:0.73048848;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect1450"
+       width="50.076099"
+       height="24.122795"
+       x="11.247664"
+       y="12.795746" />
+  </g>
+</svg>

+ 340 - 0
experiment/pcb/power-conn-pcb_1.ps

@@ -0,0 +1,340 @@
+%!PS-Adobe-3.0
+%%Creator: cairo 1.14.6 (http://cairographics.org)
+%%CreationDate: Sun Mar  1 12:48:52 2020
+%%Pages: 1
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%DocumentMedia: A4 595 842 0 () ()
+%%BoundingBox: 30 735 175 807
+%%EndComments
+%%BeginProlog
+/languagelevel where
+{ pop languagelevel } { 1 } ifelse
+2 lt { /Helvetica findfont 12 scalefont setfont 50 500 moveto
+  (This print job requires a PostScript Language Level 2 printer.) show
+  showpage quit } if
+/q { gsave } bind def
+/Q { grestore } bind def
+/cm { 6 array astore concat } bind def
+/w { setlinewidth } bind def
+/J { setlinecap } bind def
+/j { setlinejoin } bind def
+/M { setmiterlimit } bind def
+/d { setdash } bind def
+/m { moveto } bind def
+/l { lineto } bind def
+/c { curveto } bind def
+/h { closepath } bind def
+/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
+      0 exch rlineto 0 rlineto closepath } bind def
+/S { stroke } bind def
+/f { fill } bind def
+/f* { eofill } bind def
+/n { newpath } bind def
+/W { clip } bind def
+/W* { eoclip } bind def
+/BT { } bind def
+/ET { } bind def
+/pdfmark where { pop globaldict /?pdfmark /exec load put }
+    { globaldict begin /?pdfmark /pop load def /pdfmark
+    /cleartomark load def end } ifelse
+/BDC { mark 3 1 roll /BDC pdfmark } bind def
+/EMC { mark /EMC pdfmark } bind def
+/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
+/Tj { show currentpoint cairo_store_point } bind def
+/TJ {
+  {
+    dup
+    type /stringtype eq
+    { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
+  } forall
+  currentpoint cairo_store_point
+} bind def
+/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
+    cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
+/Tf { pop /cairo_font exch def /cairo_font_matrix where
+      { pop cairo_selectfont } if } bind def
+/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
+      /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
+      /cairo_font where { pop cairo_selectfont } if } bind def
+/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
+      cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
+/g { setgray } bind def
+/rg { setrgbcolor } bind def
+/d1 { setcachedevice } bind def
+/cairo_set_page_size {
+  % Change paper size, but only if different from previous paper size otherwise
+  % duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
+  % so we use the same when checking if the size changes.
+  /setpagedevice where {
+    pop currentpagedevice
+    /PageSize known {
+      2 copy
+      currentpagedevice /PageSize get aload pop
+      exch 4 1 roll
+      sub abs 5 gt
+      3 1 roll
+      sub abs 5 gt
+      or
+    } {
+      true
+    } ifelse
+    {
+      2 array astore
+      2 dict begin
+        /PageSize exch def
+        /ImagingBBox null def
+      currentdict end
+      setpagedevice
+    } {
+      pop pop
+    } ifelse
+  } {
+    pop
+  } ifelse
+} def
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+%%PageMedia: A4
+%%PageBoundingBox: 30 735 175 807
+596 842 cairo_set_page_size
+%%EndPageSetup
+q 30 735 145 72 rectclip q
+0 g
+57.02 770.507 m 56.984 767.812 56.828 766.421 56.832 765.343 c 56.836 764.265
+ 57.039 763.491 57.672 762.269 c 58.637 760.421 60.398 759.327 62.145 758.3
+ c 63.895 757.276 65.645 756.312 66.715 754.851 c 67.105 754.316 67.539 
+753.257 67.848 752.355 c 68.156 751.456 68.352 750.71 68.352 750.71 c 69.172
+ 750.925 l 69.172 750.925 68.969 751.698 68.652 752.632 c 68.332 753.566
+ 67.918 754.648 67.398 755.355 c 66.18 757.023 64.312 758.023 62.578 759.038
+ c 60.844 760.054 59.254 761.073 58.426 762.663 c 57.82 763.827 57.688 764.362
+ 57.684 765.351 c 57.68 766.335 57.84 767.773 57.871 770.499 c h
+57.02 770.507 m f*
+68.379 780.784 m 67.672 780.316 l 69.098 778.14 70.465 776.655 71.191 774.616
+ c 71.66 773.304 71.617 771.784 71.613 770.226 c 71.609 768.667 71.648 767.062
+ 72.406 765.62 c 73.434 763.659 75.457 762.542 77.082 761.359 c 78.766 760.136
+ 80.609 759.175 82.438 758.269 c 83.402 757.788 84.461 757.562 85.426 757.273
+ c 86.395 756.984 87.254 756.64 87.879 756.007 c 88.434 755.448 88.984 754.155
+ 89.348 753.026 c 89.707 751.894 89.906 750.933 89.906 750.933 c 90.742 
+751.105 l 90.742 751.105 90.535 752.109 90.16 753.284 c 89.785 754.464 89.266
+ 755.812 88.484 756.609 c 87.695 757.405 86.68 757.788 85.672 758.089 c 
+84.66 758.394 83.648 758.616 82.812 759.03 c 80.996 759.933 79.191 760.87
+ 77.582 762.042 c 75.898 763.269 74.031 764.351 73.16 766.015 c 72.52 767.234
+ 72.461 768.683 72.465 770.222 c 72.469 771.761 72.531 773.382 71.988 774.898
+ c 71.195 777.132 69.766 778.671 68.379 780.784 c h
+68.379 780.784 m f*
+67.266 770.448 m 67.199 767.737 67.129 766.472 67.238 765.542 c 67.352 
+764.616 67.664 764.081 68.258 763.03 c 69.414 760.984 71.684 759.952 73.496
+ 758.827 c 74.742 758.054 76.168 757.671 77.492 757.226 c 78.82 756.784 
+80.031 756.288 80.91 755.378 c 81.379 754.89 81.883 753.769 82.215 752.792
+ c 82.551 751.816 82.746 750.987 82.746 750.987 c 83.57 751.183 l 83.57 
+751.183 83.375 752.05 83.023 753.069 c 82.676 754.089 82.207 755.257 81.523
+ 755.964 c 80.484 757.042 79.121 757.581 77.766 758.034 c 76.406 758.487
+ 75.047 758.862 73.945 759.546 c 72.07 760.71 69.977 761.722 69 763.448 
+c 68.402 764.507 68.18 764.855 68.086 765.644 c 67.992 766.433 68.047 767.71
+ 68.113 770.425 c h
+67.266 770.448 m f*
+146.898 770.702 m 145.289 768.624 144.727 767.96 144.445 767.624 c 144.16
+ 767.288 144.129 767.241 143.652 766.507 c 142.34 764.476 141.832 762.081
+ 140.422 760.444 c 139.016 758.816 136.859 757.866 134.996 756.437 c 134.234
+ 755.851 133.27 755.366 132.359 754.784 c 131.449 754.206 130.586 753.519
+ 130.09 752.491 c 129.859 752.015 129.895 751.468 129.934 750.999 c 129.973
+ 750.526 130.051 750.14 130.051 750.14 c 130.887 750.312 l 130.887 750.312
+ 130.816 750.655 130.781 751.069 c 130.746 751.484 130.781 751.976 130.852
+ 752.124 c 131.242 752.929 131.961 753.519 132.82 754.066 c 133.676 754.612
+ 134.656 755.105 135.508 755.761 c 137.262 757.105 139.496 758.066 141.066
+ 759.89 c 142.672 761.749 143.172 764.198 144.367 766.046 c 144.844 766.784
+ 144.816 766.741 145.098 767.077 c 145.383 767.413 145.957 768.097 147.566
+ 770.183 c h
+146.898 770.702 m f*
+145.957 781.128 m 144.688 779.573 143.812 778.651 143.121 777.796 c 142.434
+ 776.937 141.934 776.144 141.473 774.937 c 140.855 773.323 140.961 771.589
+ 141.027 769.933 c 141.098 768.276 141.121 766.706 140.492 765.37 c 139.078
+ 762.374 136.332 759.937 133.426 758.214 c 132.188 757.476 130.535 757.359
+ 128.867 757.183 c 127.195 757.007 125.473 756.761 124.211 755.55 c 123.453
+ 754.827 123.082 753.577 122.824 752.487 c 122.57 751.398 122.473 750.456
+ 122.473 750.456 c 123.316 750.366 l 123.316 750.366 123.406 751.261 123.648
+ 752.292 c 123.895 753.327 124.328 754.484 124.797 754.937 c 125.82 755.913
+ 127.309 756.167 128.953 756.343 c 130.598 756.515 132.375 756.601 133.859
+ 757.48 c 136.863 759.265 139.746 761.788 141.262 765.007 c 142.004 766.577
+ 141.949 768.308 141.883 769.972 c 141.812 771.636 141.73 773.245 142.266
+ 774.632 c 142.699 775.765 143.129 776.448 143.785 777.265 c 144.441 778.077
+ 145.328 779.019 146.617 780.589 c h
+145.957 781.128 m f*
+136.25 780.308 m 134.656 777.421 133.734 776.472 133.074 775.89 c 132.414
+ 775.308 131.887 774.98 131.375 773.644 c 130.863 772.308 131.055 770.862
+ 131.156 769.523 c 131.262 768.187 131.281 766.98 130.664 766.054 c 128.953
+ 763.476 125.238 762.679 122.078 761.464 c 120.262 760.761 117.996 760.776
+ 115.793 760.605 c 113.594 760.433 111.414 760.062 109.891 758.421 c 107.949
+ 756.331 108.141 752.651 108.504 750.441 c 109.344 750.577 l 109 752.671
+ 108.949 756.159 110.512 757.843 c 111.801 759.226 113.711 759.581 115.859
+ 759.753 c 118.008 759.921 120.348 759.886 122.383 760.671 c 125.438 761.847
+ 129.402 762.612 131.375 765.581 c 132.18 766.792 132.109 768.226 132.004
+ 769.589 c 131.898 770.952 131.758 772.273 132.164 773.339 c 132.633 774.554
+ 132.922 774.624 133.637 775.253 c 134.355 775.886 135.375 776.96 137 779.898
+ c h
+136.25 780.308 m f*
+136.488 770.698 m 136.066 768.015 135.672 766.526 135.145 765.472 c 134.617
+ 764.417 133.945 763.753 132.867 762.698 c 131.012 760.878 127.977 760.55
+ 125.293 759.476 c 124.223 759.046 122.957 758.831 121.719 758.511 c 120.48
+ 758.191 119.246 757.761 118.285 756.827 c 117.379 755.948 116.785 754.401
+ 116.359 753.054 c 115.93 751.702 115.707 750.546 115.707 750.546 c 116.543
+ 750.378 l 116.543 750.378 116.762 751.491 117.172 752.792 c 117.586 754.093
+ 118.219 755.577 118.879 756.218 c 119.668 756.987 120.738 757.378 121.93
+ 757.687 c 123.117 757.991 124.418 758.206 125.609 758.683 c 128.129 759.691
+ 131.324 759.991 133.465 762.089 c 134.543 763.144 135.316 763.901 135.906
+ 765.089 c 136.5 766.276 136.902 767.851 137.332 770.566 c h
+136.488 770.698 m f*
+61.066 770.058 m 61.066 767.866 59.293 766.089 57.098 766.089 c 54.906 
+766.089 53.133 767.866 53.133 770.058 c 53.133 772.249 54.906 774.026 57.098
+ 774.026 c 59.293 774.026 61.066 772.249 61.066 770.058 c h
+61.066 770.058 m f
+70.988 770.058 m 70.988 767.866 69.211 766.089 67.02 766.089 c 64.828 766.089
+ 63.051 767.866 63.051 770.058 c 63.051 772.249 64.828 774.026 67.02 774.026
+ c 69.211 774.026 70.988 772.249 70.988 770.058 c h
+70.988 770.058 m f
+80.91 770.058 m 80.91 767.866 79.133 766.089 76.941 766.089 c 74.75 766.089
+ 72.973 767.866 72.973 770.058 c 72.973 772.249 74.75 774.026 76.941 774.026
+ c 79.133 774.026 80.91 772.249 80.91 770.058 c h
+80.91 770.058 m f
+90.832 770.058 m 90.832 767.866 89.055 766.089 86.863 766.089 c 84.672 
+766.089 82.895 767.866 82.895 770.058 c 82.895 772.249 84.672 774.026 86.863
+ 774.026 c 89.055 774.026 90.832 772.249 90.832 770.058 c h
+90.832 770.058 m f
+100.754 770.058 m 100.754 767.866 98.977 766.089 96.785 766.089 c 94.594
+ 766.089 92.816 767.866 92.816 770.058 c 92.816 772.249 94.594 774.026 96.785
+ 774.026 c 98.977 774.026 100.754 772.249 100.754 770.058 c h
+100.754 770.058 m f
+110.676 770.058 m 110.676 767.866 108.898 766.089 106.707 766.089 c 104.516
+ 766.089 102.738 767.866 102.738 770.058 c 102.738 772.249 104.516 774.026
+ 106.707 774.026 c 108.898 774.026 110.676 772.249 110.676 770.058 c h
+110.676 770.058 m f
+120.594 770.058 m 120.594 767.866 118.82 766.089 116.629 766.089 c 114.434
+ 766.089 112.66 767.866 112.66 770.058 c 112.66 772.249 114.434 774.026 
+116.629 774.026 c 118.82 774.026 120.594 772.249 120.594 770.058 c h
+120.594 770.058 m f
+130.516 770.058 m 130.516 767.866 128.738 766.089 126.547 766.089 c 124.355
+ 766.089 122.578 767.866 122.578 770.058 c 122.578 772.249 124.355 774.026
+ 126.547 774.026 c 128.738 774.026 130.516 772.249 130.516 770.058 c h
+130.516 770.058 m f
+140.438 770.058 m 140.438 767.866 138.66 766.089 136.469 766.089 c 134.277
+ 766.089 132.5 767.866 132.5 770.058 c 132.5 772.249 134.277 774.026 136.469
+ 774.026 c 138.66 774.026 140.438 772.249 140.438 770.058 c h
+140.438 770.058 m f
+150.359 770.058 m 150.359 767.866 148.582 766.089 146.391 766.089 c 144.199
+ 766.089 142.422 767.866 142.422 770.058 c 142.422 772.249 144.199 774.026
+ 146.391 774.026 c 148.582 774.026 150.359 772.249 150.359 770.058 c h
+150.359 770.058 m f
+58.93 780.323 m 58.238 779.839 l 60.094 777.187 60.43 776.062 61.09 773.929
+ c 61.555 772.425 61.57 770.749 61.637 769.046 c 61.703 767.347 61.82 765.616
+ 62.582 764.026 c 63.566 761.976 65.402 760.519 67.051 759.159 c 68.184 
+758.226 69.555 757.675 70.82 757.081 c 72.09 756.491 73.242 755.87 74.016
+ 754.874 c 74.391 754.39 74.758 753.327 74.98 752.409 c 75.199 751.495 75.305
+ 750.726 75.305 750.726 c 76.148 750.843 l 76.148 750.843 76.035 751.648
+ 75.805 752.609 c 75.574 753.569 75.25 754.679 74.691 755.394 c 73.773 756.573
+ 72.477 757.257 71.184 757.859 c 69.887 758.46 68.59 758.995 67.594 759.819
+ c 65.941 761.183 64.223 762.577 63.352 764.39 c 62.68 765.792 62.555 767.398
+ 62.488 769.081 c 62.422 770.761 62.418 772.515 61.902 774.179 c 61.246 
+776.312 60.824 777.62 58.93 780.323 c h
+58.93 780.323 m f*
+61.066 779.98 m 61.066 777.788 59.293 776.011 57.098 776.011 c 54.906 776.011
+ 53.133 777.788 53.133 779.98 c 53.133 782.171 54.906 783.948 57.098 783.948
+ c 59.293 783.948 61.066 782.171 61.066 779.98 c h
+61.066 779.98 m f
+70.988 779.98 m 70.988 777.788 69.211 776.011 67.02 776.011 c 64.828 776.011
+ 63.051 777.788 63.051 779.98 c 63.051 782.171 64.828 783.948 67.02 783.948
+ c 69.211 783.948 70.988 782.171 70.988 779.98 c h
+70.988 779.98 m f
+80.91 779.98 m 80.91 777.788 79.133 776.011 76.941 776.011 c 74.75 776.011
+ 72.973 777.788 72.973 779.98 c 72.973 782.171 74.75 783.948 76.941 783.948
+ c 79.133 783.948 80.91 782.171 80.91 779.98 c h
+80.91 779.98 m f
+90.832 779.98 m 90.832 777.788 89.055 776.011 86.863 776.011 c 84.672 776.011
+ 82.895 777.788 82.895 779.98 c 82.895 782.171 84.672 783.948 86.863 783.948
+ c 89.055 783.948 90.832 782.171 90.832 779.98 c h
+90.832 779.98 m f
+100.754 779.98 m 100.754 777.788 98.977 776.011 96.785 776.011 c 94.594
+ 776.011 92.816 777.788 92.816 779.98 c 92.816 782.171 94.594 783.948 96.785
+ 783.948 c 98.977 783.948 100.754 782.171 100.754 779.98 c h
+100.754 779.98 m f
+110.676 779.98 m 110.676 777.788 108.898 776.011 106.707 776.011 c 104.516
+ 776.011 102.738 777.788 102.738 779.98 c 102.738 782.171 104.516 783.948
+ 106.707 783.948 c 108.898 783.948 110.676 782.171 110.676 779.98 c h
+110.676 779.98 m f
+120.594 779.98 m 120.594 777.788 118.82 776.011 116.629 776.011 c 114.434
+ 776.011 112.66 777.788 112.66 779.98 c 112.66 782.171 114.434 783.948 116.629
+ 783.948 c 118.82 783.948 120.594 782.171 120.594 779.98 c h
+120.594 779.98 m f
+130.516 779.98 m 130.516 777.788 128.738 776.011 126.547 776.011 c 124.355
+ 776.011 122.578 777.788 122.578 779.98 c 122.578 782.171 124.355 783.948
+ 126.547 783.948 c 128.738 783.948 130.516 782.171 130.516 779.98 c h
+130.516 779.98 m f
+140.438 779.98 m 140.438 777.788 138.66 776.011 136.469 776.011 c 134.277
+ 776.011 132.5 777.788 132.5 779.98 c 132.5 782.171 134.277 783.948 136.469
+ 783.948 c 138.66 783.948 140.438 782.171 140.438 779.98 c h
+140.438 779.98 m f
+150.359 779.98 m 150.359 777.788 148.582 776.011 146.391 776.011 c 144.199
+ 776.011 142.422 777.788 142.422 779.98 c 142.422 782.171 144.199 783.948
+ 146.391 783.948 c 148.582 783.948 150.359 782.171 150.359 779.98 c h
+150.359 779.98 m f
+111.73 750.546 m 111.73 748.956 110.441 747.667 108.848 747.667 c 107.258
+ 747.667 105.969 748.956 105.969 750.546 c 105.969 752.136 107.258 753.425
+ 108.848 753.425 c 110.441 753.425 111.73 752.136 111.73 750.546 c h
+111.73 750.546 m f
+118.93 750.546 m 118.93 748.956 117.641 747.667 116.051 747.667 c 114.457
+ 747.667 113.168 748.956 113.168 750.546 c 113.168 752.136 114.457 753.425
+ 116.051 753.425 c 117.641 753.425 118.93 752.136 118.93 750.546 c h
+118.93 750.546 m f
+126.129 750.546 m 126.129 748.956 124.84 747.667 123.25 747.667 c 121.66
+ 747.667 120.371 748.956 120.371 750.546 c 120.371 752.136 121.66 753.425
+ 123.25 753.425 c 124.84 753.425 126.129 752.136 126.129 750.546 c h
+126.129 750.546 m f
+133.328 750.546 m 133.328 748.956 132.039 747.667 130.449 747.667 c 128.859
+ 747.667 127.57 748.956 127.57 750.546 c 127.57 752.136 128.859 753.425 
+130.449 753.425 c 132.039 753.425 133.328 752.136 133.328 750.546 c h
+133.328 750.546 m f
+71.504 750.46 m 71.504 748.87 70.215 747.581 68.625 747.581 c 67.035 747.581
+ 65.746 748.87 65.746 750.46 c 65.746 752.054 67.035 753.343 68.625 753.343
+ c 70.215 753.343 71.504 752.054 71.504 750.46 c h
+71.504 750.46 m f
+78.707 750.46 m 78.707 748.87 77.414 747.581 75.824 747.581 c 74.234 747.581
+ 72.945 748.87 72.945 750.46 c 72.945 752.054 74.234 753.343 75.824 753.343
+ c 77.414 753.343 78.707 752.054 78.707 750.46 c h
+78.707 750.46 m f
+85.906 750.46 m 85.906 748.87 84.617 747.581 83.023 747.581 c 81.434 747.581
+ 80.145 748.87 80.145 750.46 c 80.145 752.054 81.434 753.343 83.023 753.343
+ c 84.617 753.343 85.906 752.054 85.906 750.46 c h
+85.906 750.46 m f
+93.105 750.46 m 93.105 748.87 91.816 747.581 90.227 747.581 c 88.633 747.581
+ 87.344 748.87 87.344 750.46 c 87.344 752.054 88.633 753.343 90.227 753.343
+ c 91.816 753.343 93.105 752.054 93.105 750.46 c h
+93.105 750.46 m f
+43.816 746.12 m 43.816 743.773 41.914 741.866 39.566 741.866 c 37.219 741.866
+ 35.312 743.773 35.312 746.12 c 35.312 748.468 37.219 750.37 39.566 750.37
+ c 41.914 750.37 43.816 748.468 43.816 746.12 c h
+43.816 746.12 m f
+43.816 796.151 m 43.816 793.804 41.914 791.898 39.566 791.898 c 37.219 
+791.898 35.312 793.804 35.312 796.151 c 35.312 798.499 37.219 800.401 39.566
+ 800.401 c 41.914 800.401 43.816 798.499 43.816 796.151 c h
+43.816 796.151 m f
+168.641 796.151 m 168.641 793.804 166.734 791.898 164.387 791.898 c 162.039
+ 791.898 160.137 793.804 160.137 796.151 c 160.137 798.499 162.039 800.401
+ 164.387 800.401 c 166.734 800.401 168.641 798.499 168.641 796.151 c h
+168.641 796.151 m f
+168.641 746.12 m 168.641 743.773 166.734 741.866 164.387 741.866 c 162.039
+ 741.866 160.137 743.773 160.137 746.12 c 160.137 748.468 162.039 750.37
+ 164.387 750.37 c 166.734 750.37 168.641 748.468 168.641 746.12 c h
+168.641 746.12 m f
+2.070676 w
+1 J
+1 j
+[] 0.0 d
+4 M q 1 0 0 -1 0 841.889771 cm
+31.883 36.27 141.949 68.383 re S Q
+Q Q
+showpage
+%%Trailer
+%%EOF

文件差異過大導致無法顯示
+ 295 - 0
experiment/pcb/power-conn-pcb_1.svg


+ 330 - 0
experiment/pcb/power-conn-pcb_2.ps

@@ -0,0 +1,330 @@
+%!PS-Adobe-3.0
+%%Creator: cairo 1.14.6 (http://cairographics.org)
+%%CreationDate: Mon Mar  2 14:07:29 2020
+%%Pages: 1
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%DocumentMedia: A4 595 842 0 () ()
+%%BoundingBox: 30 733 175 805
+%%EndComments
+%%BeginProlog
+/languagelevel where
+{ pop languagelevel } { 1 } ifelse
+2 lt { /Helvetica findfont 12 scalefont setfont 50 500 moveto
+  (This print job requires a PostScript Language Level 2 printer.) show
+  showpage quit } if
+/q { gsave } bind def
+/Q { grestore } bind def
+/cm { 6 array astore concat } bind def
+/w { setlinewidth } bind def
+/J { setlinecap } bind def
+/j { setlinejoin } bind def
+/M { setmiterlimit } bind def
+/d { setdash } bind def
+/m { moveto } bind def
+/l { lineto } bind def
+/c { curveto } bind def
+/h { closepath } bind def
+/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
+      0 exch rlineto 0 rlineto closepath } bind def
+/S { stroke } bind def
+/f { fill } bind def
+/f* { eofill } bind def
+/n { newpath } bind def
+/W { clip } bind def
+/W* { eoclip } bind def
+/BT { } bind def
+/ET { } bind def
+/pdfmark where { pop globaldict /?pdfmark /exec load put }
+    { globaldict begin /?pdfmark /pop load def /pdfmark
+    /cleartomark load def end } ifelse
+/BDC { mark 3 1 roll /BDC pdfmark } bind def
+/EMC { mark /EMC pdfmark } bind def
+/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
+/Tj { show currentpoint cairo_store_point } bind def
+/TJ {
+  {
+    dup
+    type /stringtype eq
+    { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
+  } forall
+  currentpoint cairo_store_point
+} bind def
+/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
+    cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
+/Tf { pop /cairo_font exch def /cairo_font_matrix where
+      { pop cairo_selectfont } if } bind def
+/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
+      /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
+      /cairo_font where { pop cairo_selectfont } if } bind def
+/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
+      cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
+/g { setgray } bind def
+/rg { setrgbcolor } bind def
+/d1 { setcachedevice } bind def
+/cairo_set_page_size {
+  % Change paper size, but only if different from previous paper size otherwise
+  % duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
+  % so we use the same when checking if the size changes.
+  /setpagedevice where {
+    pop currentpagedevice
+    /PageSize known {
+      2 copy
+      currentpagedevice /PageSize get aload pop
+      exch 4 1 roll
+      sub abs 5 gt
+      3 1 roll
+      sub abs 5 gt
+      or
+    } {
+      true
+    } ifelse
+    {
+      2 array astore
+      2 dict begin
+        /PageSize exch def
+        /ImagingBBox null def
+      currentdict end
+      setpagedevice
+    } {
+      pop pop
+    } ifelse
+  } {
+    pop
+  } ifelse
+} def
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+%%PageMedia: A4
+%%PageBoundingBox: 30 733 175 805
+596 842 cairo_set_page_size
+%%EndPageSetup
+q 30 733 145 72 rectclip q
+0 g
+61.066 770.058 m 61.066 767.866 59.293 766.089 57.098 766.089 c 54.906 
+766.089 53.133 767.866 53.133 770.058 c 53.133 772.249 54.906 774.026 57.098
+ 774.026 c 59.293 774.026 61.066 772.249 61.066 770.058 c h
+61.066 770.058 m f
+70.988 770.058 m 70.988 767.866 69.211 766.089 67.02 766.089 c 64.828 766.089
+ 63.051 767.866 63.051 770.058 c 63.051 772.249 64.828 774.026 67.02 774.026
+ c 69.211 774.026 70.988 772.249 70.988 770.058 c h
+70.988 770.058 m f
+80.91 770.058 m 80.91 767.866 79.133 766.089 76.941 766.089 c 74.75 766.089
+ 72.973 767.866 72.973 770.058 c 72.973 772.249 74.75 774.026 76.941 774.026
+ c 79.133 774.026 80.91 772.249 80.91 770.058 c h
+80.91 770.058 m f
+90.832 770.058 m 90.832 767.866 89.055 766.089 86.863 766.089 c 84.672 
+766.089 82.895 767.866 82.895 770.058 c 82.895 772.249 84.672 774.026 86.863
+ 774.026 c 89.055 774.026 90.832 772.249 90.832 770.058 c h
+90.832 770.058 m f
+100.754 770.058 m 100.754 767.866 98.977 766.089 96.785 766.089 c 94.594
+ 766.089 92.816 767.866 92.816 770.058 c 92.816 772.249 94.594 774.026 96.785
+ 774.026 c 98.977 774.026 100.754 772.249 100.754 770.058 c h
+100.754 770.058 m f
+110.676 770.058 m 110.676 767.866 108.898 766.089 106.707 766.089 c 104.516
+ 766.089 102.738 767.866 102.738 770.058 c 102.738 772.249 104.516 774.026
+ 106.707 774.026 c 108.898 774.026 110.676 772.249 110.676 770.058 c h
+110.676 770.058 m f
+120.594 770.058 m 120.594 767.866 118.82 766.089 116.629 766.089 c 114.434
+ 766.089 112.66 767.866 112.66 770.058 c 112.66 772.249 114.434 774.026 
+116.629 774.026 c 118.82 774.026 120.594 772.249 120.594 770.058 c h
+120.594 770.058 m f
+130.516 770.058 m 130.516 767.866 128.738 766.089 126.547 766.089 c 124.355
+ 766.089 122.578 767.866 122.578 770.058 c 122.578 772.249 124.355 774.026
+ 126.547 774.026 c 128.738 774.026 130.516 772.249 130.516 770.058 c h
+130.516 770.058 m f
+140.438 770.058 m 140.438 767.866 138.66 766.089 136.469 766.089 c 134.277
+ 766.089 132.5 767.866 132.5 770.058 c 132.5 772.249 134.277 774.026 136.469
+ 774.026 c 138.66 774.026 140.438 772.249 140.438 770.058 c h
+140.438 770.058 m f
+150.359 770.058 m 150.359 767.866 148.582 766.089 146.391 766.089 c 144.199
+ 766.089 142.422 767.866 142.422 770.058 c 142.422 772.249 144.199 774.026
+ 146.391 774.026 c 148.582 774.026 150.359 772.249 150.359 770.058 c h
+150.359 770.058 m f
+61.066 779.98 m 61.066 777.788 59.293 776.011 57.098 776.011 c 54.906 776.011
+ 53.133 777.788 53.133 779.98 c 53.133 782.171 54.906 783.948 57.098 783.948
+ c 59.293 783.948 61.066 782.171 61.066 779.98 c h
+61.066 779.98 m f
+70.988 779.98 m 70.988 777.788 69.211 776.011 67.02 776.011 c 64.828 776.011
+ 63.051 777.788 63.051 779.98 c 63.051 782.171 64.828 783.948 67.02 783.948
+ c 69.211 783.948 70.988 782.171 70.988 779.98 c h
+70.988 779.98 m f
+80.91 779.98 m 80.91 777.788 79.133 776.011 76.941 776.011 c 74.75 776.011
+ 72.973 777.788 72.973 779.98 c 72.973 782.171 74.75 783.948 76.941 783.948
+ c 79.133 783.948 80.91 782.171 80.91 779.98 c h
+80.91 779.98 m f
+90.832 779.98 m 90.832 777.788 89.055 776.011 86.863 776.011 c 84.672 776.011
+ 82.895 777.788 82.895 779.98 c 82.895 782.171 84.672 783.948 86.863 783.948
+ c 89.055 783.948 90.832 782.171 90.832 779.98 c h
+90.832 779.98 m f
+100.754 779.98 m 100.754 777.788 98.977 776.011 96.785 776.011 c 94.594
+ 776.011 92.816 777.788 92.816 779.98 c 92.816 782.171 94.594 783.948 96.785
+ 783.948 c 98.977 783.948 100.754 782.171 100.754 779.98 c h
+100.754 779.98 m f
+110.676 779.98 m 110.676 777.788 108.898 776.011 106.707 776.011 c 104.516
+ 776.011 102.738 777.788 102.738 779.98 c 102.738 782.171 104.516 783.948
+ 106.707 783.948 c 108.898 783.948 110.676 782.171 110.676 779.98 c h
+110.676 779.98 m f
+120.594 779.98 m 120.594 777.788 118.82 776.011 116.629 776.011 c 114.434
+ 776.011 112.66 777.788 112.66 779.98 c 112.66 782.171 114.434 783.948 116.629
+ 783.948 c 118.82 783.948 120.594 782.171 120.594 779.98 c h
+120.594 779.98 m f
+130.516 779.98 m 130.516 777.788 128.738 776.011 126.547 776.011 c 124.355
+ 776.011 122.578 777.788 122.578 779.98 c 122.578 782.171 124.355 783.948
+ 126.547 783.948 c 128.738 783.948 130.516 782.171 130.516 779.98 c h
+130.516 779.98 m f
+140.438 779.98 m 140.438 777.788 138.66 776.011 136.469 776.011 c 134.277
+ 776.011 132.5 777.788 132.5 779.98 c 132.5 782.171 134.277 783.948 136.469
+ 783.948 c 138.66 783.948 140.438 782.171 140.438 779.98 c h
+140.438 779.98 m f
+150.359 779.98 m 150.359 777.788 148.582 776.011 146.391 776.011 c 144.199
+ 776.011 142.422 777.788 142.422 779.98 c 142.422 782.171 144.199 783.948
+ 146.391 783.948 c 148.582 783.948 150.359 782.171 150.359 779.98 c h
+150.359 779.98 m f
+111.73 750.546 m 111.73 748.956 110.441 747.667 108.848 747.667 c 107.258
+ 747.667 105.969 748.956 105.969 750.546 c 105.969 752.136 107.258 753.425
+ 108.848 753.425 c 110.441 753.425 111.73 752.136 111.73 750.546 c h
+111.73 750.546 m f
+118.93 750.546 m 118.93 748.956 117.641 747.667 116.051 747.667 c 114.457
+ 747.667 113.168 748.956 113.168 750.546 c 113.168 752.136 114.457 753.425
+ 116.051 753.425 c 117.641 753.425 118.93 752.136 118.93 750.546 c h
+118.93 750.546 m f
+126.129 750.546 m 126.129 748.956 124.84 747.667 123.25 747.667 c 121.66
+ 747.667 120.371 748.956 120.371 750.546 c 120.371 752.136 121.66 753.425
+ 123.25 753.425 c 124.84 753.425 126.129 752.136 126.129 750.546 c h
+126.129 750.546 m f
+133.328 750.546 m 133.328 748.956 132.039 747.667 130.449 747.667 c 128.859
+ 747.667 127.57 748.956 127.57 750.546 c 127.57 752.136 128.859 753.425 
+130.449 753.425 c 132.039 753.425 133.328 752.136 133.328 750.546 c h
+133.328 750.546 m f
+71.504 750.46 m 71.504 748.87 70.215 747.581 68.625 747.581 c 67.035 747.581
+ 65.746 748.87 65.746 750.46 c 65.746 752.054 67.035 753.343 68.625 753.343
+ c 70.215 753.343 71.504 752.054 71.504 750.46 c h
+71.504 750.46 m f
+78.707 750.46 m 78.707 748.87 77.414 747.581 75.824 747.581 c 74.234 747.581
+ 72.945 748.87 72.945 750.46 c 72.945 752.054 74.234 753.343 75.824 753.343
+ c 77.414 753.343 78.707 752.054 78.707 750.46 c h
+78.707 750.46 m f
+85.906 750.46 m 85.906 748.87 84.617 747.581 83.023 747.581 c 81.434 747.581
+ 80.145 748.87 80.145 750.46 c 80.145 752.054 81.434 753.343 83.023 753.343
+ c 84.617 753.343 85.906 752.054 85.906 750.46 c h
+85.906 750.46 m f
+93.105 750.46 m 93.105 748.87 91.816 747.581 90.227 747.581 c 88.633 747.581
+ 87.344 748.87 87.344 750.46 c 87.344 752.054 88.633 753.343 90.227 753.343
+ c 91.816 753.343 93.105 752.054 93.105 750.46 c h
+93.105 750.46 m f
+43.816 746.12 m 43.816 743.773 41.914 741.866 39.566 741.866 c 37.219 741.866
+ 35.312 743.773 35.312 746.12 c 35.312 748.468 37.219 750.37 39.566 750.37
+ c 41.914 750.37 43.816 748.468 43.816 746.12 c h
+43.816 746.12 m f
+43.816 796.151 m 43.816 793.804 41.914 791.898 39.566 791.898 c 37.219 
+791.898 35.312 793.804 35.312 796.151 c 35.312 798.499 37.219 800.401 39.566
+ 800.401 c 41.914 800.401 43.816 798.499 43.816 796.151 c h
+43.816 796.151 m f
+168.641 796.151 m 168.641 793.804 166.734 791.898 164.387 791.898 c 162.039
+ 791.898 160.137 793.804 160.137 796.151 c 160.137 798.499 162.039 800.401
+ 164.387 800.401 c 166.734 800.401 168.641 798.499 168.641 796.151 c h
+168.641 796.151 m f
+168.641 746.12 m 168.641 743.773 166.734 741.866 164.387 741.866 c 162.039
+ 741.866 160.137 743.773 160.137 746.12 c 160.137 748.468 162.039 750.37
+ 164.387 750.37 c 166.734 750.37 168.641 748.468 168.641 746.12 c h
+168.641 746.12 m f
+55.848 780.773 m 52.434 779.366 50.715 778.71 49.434 777.827 c 48.156 776.944
+ 47.57 775.847 46.816 774.339 c 44.785 770.288 45.902 765.511 47.137 761.745
+ c 49.004 756.046 52.312 750.21 57.457 746.687 c 61.281 744.066 66.43 742.394
+ 71.176 743.53 c 72.871 743.937 74.137 745.171 75.207 746.249 c 76.277 747.323
+ 77.055 748.323 77.055 748.323 c 74.82 750.069 l 74.82 750.069 74.133 749.187
+ 73.195 748.245 c 72.262 747.308 70.977 746.398 70.516 746.288 c 66.879 
+745.417 62.348 746.776 59.062 749.026 c 54.668 752.042 51.562 757.339 49.828
+ 762.632 c 48.668 766.163 47.934 770.257 49.348 773.073 c 50.102 774.577
+ 50.254 774.948 51.039 775.491 c 51.828 776.034 53.508 776.745 56.926 778.155
+ c h
+55.848 780.773 m f*
+55.691 789.659 m 50.055 789.042 44.422 785.952 41.52 781.284 c 36.84 773.765
+ 39.961 763.651 43.02 756.159 c 44.992 751.319 48.871 746.433 53.207 743.651
+ c 57.883 740.648 63.547 739.491 68.879 739.144 c 74.121 738.804 79.816 
+739.726 84.762 742.316 c 86.477 743.214 87.965 744.905 89.191 746.398 c 
+90.418 747.89 91.305 749.206 91.305 749.206 c 88.961 750.792 l 88.961 750.792
+ 88.133 749.577 87 748.198 c 85.863 746.816 84.34 745.292 83.449 744.823
+ c 79.281 742.64 74.094 741.648 69.066 741.976 c 64.02 742.304 58.812 743.421
+ 54.738 746.038 c 50.867 748.523 47.352 753.042 45.641 757.234 c 42.68 764.487
+ 40.191 773.78 43.926 779.788 c 46.988 784.71 54.914 787.859 60.645 786.648
+ c 61.871 786.39 62.641 785.964 63.418 785.132 c 64.199 784.296 64.957 782.987
+ 65.801 781.046 c 68.398 782.167 l 67.496 784.245 66.633 785.839 65.492 
+787.062 c 64.348 788.284 62.91 789.066 61.234 789.421 c 59.453 789.796 57.57
+ 789.866 55.691 789.659 c h
+55.691 789.659 m f*
+135.852 793.55 m 133.387 793.265 130.984 792.495 129.008 790.87 c 126.051
+ 788.441 124.738 785.015 124.879 780.093 c 127.715 780.175 l 127.586 784.624
+ 128.465 786.753 130.809 788.679 c 133.641 791.007 138.508 791.112 142.699
+ 790.519 c 146.949 789.913 151.633 788.417 153.797 785.347 c 158.664 778.437
+ 158.102 767.956 156.375 759.109 c 155.648 755.386 153.676 751.691 151 748.987
+ c 148.438 746.401 145.188 744.155 141.457 742.991 c 136.719 741.519 131.629
+ 740.569 127 741.425 c 124.023 741.98 118.988 744.851 115.301 747.007 c 
+111.613 749.163 108.758 751.159 108.758 751.159 c 107.137 748.839 l 107.137
+ 748.839 110.074 746.78 113.871 744.558 c 117.672 742.339 122.711 739.343
+ 126.488 738.64 c 131.836 737.651 137.348 738.741 142.297 740.284 c 146.238
+ 741.515 149.93 743.878 153.016 746.995 c 156.102 750.112 158.32 754.253
+ 159.16 758.566 c 160.941 767.694 161.797 778.921 156.117 786.98 c 153.148
+ 791.191 147.668 792.675 143.102 793.323 c 140.852 793.644 138.32 793.839
+ 135.852 793.55 c h
+135.852 793.55 m f*
+149.488 779.827 m 147.297 778.034 l 148.047 777.116 148.996 776.355 149.828
+ 775.554 c 150.66 774.749 151.344 773.937 151.625 773.198 c 152.426 771.12
+ 152.113 768.429 151.68 765.765 c 151.188 762.737 150.199 759.734 148.652
+ 757.159 c 146.438 753.468 143.656 749.933 140.172 747.87 c 137.059 746.03
+ 133.266 744.573 130.262 745.347 c 129.5 745.542 127.879 746.835 126.691
+ 748.14 c 125.504 749.448 124.641 750.679 124.641 750.679 c 122.32 749.054
+ l 122.32 749.054 123.27 747.694 124.59 746.237 c 125.914 744.78 127.504
+ 743.128 129.559 742.601 c 133.855 741.495 138.238 743.437 141.617 745.433
+ c 145.746 747.874 148.746 751.808 151.082 755.698 c 152.852 758.644 153.934
+ 761.984 154.477 765.312 c 154.918 768.023 155.426 771.206 154.273 774.214
+ c 153.727 775.632 152.727 776.694 151.793 777.597 c 150.855 778.499 149.945
+ 779.273 149.488 779.827 c h
+149.488 779.827 m f*
+58.734 769.198 m 55.906 769.109 l 56.043 764.726 56.246 762.214 56.816 
+760.183 c 57.383 758.155 58.316 756.753 59.633 754.823 c 60.68 753.288 62.441
+ 752.12 63.984 751.159 c 65.527 750.198 66.867 749.53 66.867 749.53 c 68.133
+ 752.073 l 68.133 752.073 66.902 752.687 65.484 753.566 c 64.066 754.448
+ 62.477 755.687 61.977 756.425 c 60.664 758.339 59.992 759.351 59.543 760.948
+ c 59.098 762.542 58.867 764.874 58.734 769.198 c h
+58.734 769.198 m f*
+135.355 769.683 m 135.355 769.683 134.945 768.913 134.375 767.999 c 133.801
+ 767.089 133.016 766.03 132.598 765.671 c 131.391 764.62 129.742 763.952
+ 127.914 763.269 c 126.082 762.581 124.074 761.878 122.328 760.484 c 120.781
+ 759.245 119.008 757.499 117.551 755.792 c 116.82 754.941 116.176 754.097
+ 115.68 753.308 c 115.18 752.519 114.777 751.847 114.703 750.909 c 117.527
+ 750.694 l 117.523 750.628 117.68 751.179 118.07 751.796 c 118.461 752.413
+ 119.043 753.175 119.707 753.956 c 121.043 755.519 122.75 757.191 124.098
+ 758.269 c 125.363 759.276 127.059 759.921 128.906 760.616 c 130.75 761.308
+ 132.758 762.05 134.457 763.526 c 135.395 764.343 136.148 765.491 136.777
+ 766.495 c 137.406 767.499 137.855 768.351 137.855 768.351 c h
+135.355 769.683 m f*
+144.883 769.788 m 144.883 769.788 144.301 767.64 143.371 765.077 c 142.441
+ 762.515 141.094 759.523 139.938 758.14 c 138.832 756.819 138.125 756.511
+ 136.699 755.831 c 135.273 755.151 133.281 754.198 130.379 751.917 c 132.125
+ 749.691 l 134.848 751.827 136.484 752.593 137.918 753.273 c 139.348 753.956
+ 140.715 754.651 142.113 756.323 c 143.797 758.331 145.062 761.429 146.035
+ 764.112 c 147.008 766.796 147.617 769.046 147.617 769.046 c h
+144.883 769.788 m f*
+68.176 770.077 m 66.023 768.23 l 69.141 764.589 70.082 762.261 72.98 759.659
+ c 74.145 758.612 75.465 758.026 76.602 757.46 c 77.738 756.89 78.676 756.351
+ 79.277 755.644 c 79.734 755.101 80.441 753.62 80.91 752.355 c 81.375 751.089
+ 81.668 750.023 81.668 750.023 c 84.402 750.776 l 84.402 750.776 84.082 
+751.941 83.57 753.331 c 83.062 754.718 82.426 756.316 81.434 757.48 c 80.387
+ 758.718 79.059 759.401 77.871 759.995 c 76.68 760.589 75.609 761.105 74.875
+ 761.769 c 72.391 763.999 71.484 766.214 68.176 770.077 c h
+68.176 770.077 m f*
+2.070676 w
+1 J
+1 j
+[] 0.0 d
+4 M q 1 0 0 -1 0 841.889771 cm
+31.133 38.441 141.949 68.379 re S Q
+Q Q
+showpage
+%%Trailer
+%%EOF

文件差異過大導致無法顯示
+ 298 - 0
experiment/pcb/power-conn-pcb_2.svg


+ 331 - 0
experiment/pcb/power-conn-pcb_3.ps

@@ -0,0 +1,331 @@
+%!PS-Adobe-3.0
+%%Creator: cairo 1.14.6 (http://cairographics.org)
+%%CreationDate: Mon Mar  2 14:52:24 2020
+%%Pages: 1
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%DocumentMedia: A4 595 842 0 () ()
+%%BoundingBox: 29 732 174 804
+%%EndComments
+%%BeginProlog
+/languagelevel where
+{ pop languagelevel } { 1 } ifelse
+2 lt { /Helvetica findfont 12 scalefont setfont 50 500 moveto
+  (This print job requires a PostScript Language Level 2 printer.) show
+  showpage quit } if
+/q { gsave } bind def
+/Q { grestore } bind def
+/cm { 6 array astore concat } bind def
+/w { setlinewidth } bind def
+/J { setlinecap } bind def
+/j { setlinejoin } bind def
+/M { setmiterlimit } bind def
+/d { setdash } bind def
+/m { moveto } bind def
+/l { lineto } bind def
+/c { curveto } bind def
+/h { closepath } bind def
+/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
+      0 exch rlineto 0 rlineto closepath } bind def
+/S { stroke } bind def
+/f { fill } bind def
+/f* { eofill } bind def
+/n { newpath } bind def
+/W { clip } bind def
+/W* { eoclip } bind def
+/BT { } bind def
+/ET { } bind def
+/pdfmark where { pop globaldict /?pdfmark /exec load put }
+    { globaldict begin /?pdfmark /pop load def /pdfmark
+    /cleartomark load def end } ifelse
+/BDC { mark 3 1 roll /BDC pdfmark } bind def
+/EMC { mark /EMC pdfmark } bind def
+/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
+/Tj { show currentpoint cairo_store_point } bind def
+/TJ {
+  {
+    dup
+    type /stringtype eq
+    { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
+  } forall
+  currentpoint cairo_store_point
+} bind def
+/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
+    cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
+/Tf { pop /cairo_font exch def /cairo_font_matrix where
+      { pop cairo_selectfont } if } bind def
+/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
+      /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
+      /cairo_font where { pop cairo_selectfont } if } bind def
+/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
+      cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
+/g { setgray } bind def
+/rg { setrgbcolor } bind def
+/d1 { setcachedevice } bind def
+/cairo_set_page_size {
+  % Change paper size, but only if different from previous paper size otherwise
+  % duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
+  % so we use the same when checking if the size changes.
+  /setpagedevice where {
+    pop currentpagedevice
+    /PageSize known {
+      2 copy
+      currentpagedevice /PageSize get aload pop
+      exch 4 1 roll
+      sub abs 5 gt
+      3 1 roll
+      sub abs 5 gt
+      or
+    } {
+      true
+    } ifelse
+    {
+      2 array astore
+      2 dict begin
+        /PageSize exch def
+        /ImagingBBox null def
+      currentdict end
+      setpagedevice
+    } {
+      pop pop
+    } ifelse
+  } {
+    pop
+  } ifelse
+} def
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+%%PageMedia: A4
+%%PageBoundingBox: 29 732 174 804
+596 842 cairo_set_page_size
+%%EndPageSetup
+q 29 732 145 72 rectclip q
+0 g
+61.066 770.058 m 61.066 767.866 59.293 766.089 57.098 766.089 c 54.906 
+766.089 53.133 767.866 53.133 770.058 c 53.133 772.249 54.906 774.026 57.098
+ 774.026 c 59.293 774.026 61.066 772.249 61.066 770.058 c h
+61.066 770.058 m f
+70.988 770.058 m 70.988 767.866 69.211 766.089 67.02 766.089 c 64.828 766.089
+ 63.051 767.866 63.051 770.058 c 63.051 772.249 64.828 774.026 67.02 774.026
+ c 69.211 774.026 70.988 772.249 70.988 770.058 c h
+70.988 770.058 m f
+80.91 770.058 m 80.91 767.866 79.133 766.089 76.941 766.089 c 74.75 766.089
+ 72.973 767.866 72.973 770.058 c 72.973 772.249 74.75 774.026 76.941 774.026
+ c 79.133 774.026 80.91 772.249 80.91 770.058 c h
+80.91 770.058 m f
+90.832 770.058 m 90.832 767.866 89.055 766.089 86.863 766.089 c 84.672 
+766.089 82.895 767.866 82.895 770.058 c 82.895 772.249 84.672 774.026 86.863
+ 774.026 c 89.055 774.026 90.832 772.249 90.832 770.058 c h
+90.832 770.058 m f
+100.754 770.058 m 100.754 767.866 98.977 766.089 96.785 766.089 c 94.594
+ 766.089 92.816 767.866 92.816 770.058 c 92.816 772.249 94.594 774.026 96.785
+ 774.026 c 98.977 774.026 100.754 772.249 100.754 770.058 c h
+100.754 770.058 m f
+110.676 770.058 m 110.676 767.866 108.898 766.089 106.707 766.089 c 104.516
+ 766.089 102.738 767.866 102.738 770.058 c 102.738 772.249 104.516 774.026
+ 106.707 774.026 c 108.898 774.026 110.676 772.249 110.676 770.058 c h
+110.676 770.058 m f
+120.594 770.058 m 120.594 767.866 118.82 766.089 116.629 766.089 c 114.434
+ 766.089 112.66 767.866 112.66 770.058 c 112.66 772.249 114.434 774.026 
+116.629 774.026 c 118.82 774.026 120.594 772.249 120.594 770.058 c h
+120.594 770.058 m f
+130.516 770.058 m 130.516 767.866 128.738 766.089 126.547 766.089 c 124.355
+ 766.089 122.578 767.866 122.578 770.058 c 122.578 772.249 124.355 774.026
+ 126.547 774.026 c 128.738 774.026 130.516 772.249 130.516 770.058 c h
+130.516 770.058 m f
+140.438 770.058 m 140.438 767.866 138.66 766.089 136.469 766.089 c 134.277
+ 766.089 132.5 767.866 132.5 770.058 c 132.5 772.249 134.277 774.026 136.469
+ 774.026 c 138.66 774.026 140.438 772.249 140.438 770.058 c h
+140.438 770.058 m f
+150.359 770.058 m 150.359 767.866 148.582 766.089 146.391 766.089 c 144.199
+ 766.089 142.422 767.866 142.422 770.058 c 142.422 772.249 144.199 774.026
+ 146.391 774.026 c 148.582 774.026 150.359 772.249 150.359 770.058 c h
+150.359 770.058 m f
+61.066 779.98 m 61.066 777.788 59.293 776.011 57.098 776.011 c 54.906 776.011
+ 53.133 777.788 53.133 779.98 c 53.133 782.171 54.906 783.948 57.098 783.948
+ c 59.293 783.948 61.066 782.171 61.066 779.98 c h
+61.066 779.98 m f
+70.988 779.98 m 70.988 777.788 69.211 776.011 67.02 776.011 c 64.828 776.011
+ 63.051 777.788 63.051 779.98 c 63.051 782.171 64.828 783.948 67.02 783.948
+ c 69.211 783.948 70.988 782.171 70.988 779.98 c h
+70.988 779.98 m f
+80.91 779.98 m 80.91 777.788 79.133 776.011 76.941 776.011 c 74.75 776.011
+ 72.973 777.788 72.973 779.98 c 72.973 782.171 74.75 783.948 76.941 783.948
+ c 79.133 783.948 80.91 782.171 80.91 779.98 c h
+80.91 779.98 m f
+90.832 779.98 m 90.832 777.788 89.055 776.011 86.863 776.011 c 84.672 776.011
+ 82.895 777.788 82.895 779.98 c 82.895 782.171 84.672 783.948 86.863 783.948
+ c 89.055 783.948 90.832 782.171 90.832 779.98 c h
+90.832 779.98 m f
+100.754 779.98 m 100.754 777.788 98.977 776.011 96.785 776.011 c 94.594
+ 776.011 92.816 777.788 92.816 779.98 c 92.816 782.171 94.594 783.948 96.785
+ 783.948 c 98.977 783.948 100.754 782.171 100.754 779.98 c h
+100.754 779.98 m f
+110.676 779.98 m 110.676 777.788 108.898 776.011 106.707 776.011 c 104.516
+ 776.011 102.738 777.788 102.738 779.98 c 102.738 782.171 104.516 783.948
+ 106.707 783.948 c 108.898 783.948 110.676 782.171 110.676 779.98 c h
+110.676 779.98 m f
+120.594 779.98 m 120.594 777.788 118.82 776.011 116.629 776.011 c 114.434
+ 776.011 112.66 777.788 112.66 779.98 c 112.66 782.171 114.434 783.948 116.629
+ 783.948 c 118.82 783.948 120.594 782.171 120.594 779.98 c h
+120.594 779.98 m f
+130.516 779.98 m 130.516 777.788 128.738 776.011 126.547 776.011 c 124.355
+ 776.011 122.578 777.788 122.578 779.98 c 122.578 782.171 124.355 783.948
+ 126.547 783.948 c 128.738 783.948 130.516 782.171 130.516 779.98 c h
+130.516 779.98 m f
+140.438 779.98 m 140.438 777.788 138.66 776.011 136.469 776.011 c 134.277
+ 776.011 132.5 777.788 132.5 779.98 c 132.5 782.171 134.277 783.948 136.469
+ 783.948 c 138.66 783.948 140.438 782.171 140.438 779.98 c h
+140.438 779.98 m f
+150.359 779.98 m 150.359 777.788 148.582 776.011 146.391 776.011 c 144.199
+ 776.011 142.422 777.788 142.422 779.98 c 142.422 782.171 144.199 783.948
+ 146.391 783.948 c 148.582 783.948 150.359 782.171 150.359 779.98 c h
+150.359 779.98 m f
+111.73 750.546 m 111.73 748.956 110.441 747.667 108.848 747.667 c 107.258
+ 747.667 105.969 748.956 105.969 750.546 c 105.969 752.136 107.258 753.425
+ 108.848 753.425 c 110.441 753.425 111.73 752.136 111.73 750.546 c h
+111.73 750.546 m f
+118.93 750.546 m 118.93 748.956 117.641 747.667 116.051 747.667 c 114.457
+ 747.667 113.168 748.956 113.168 750.546 c 113.168 752.136 114.457 753.425
+ 116.051 753.425 c 117.641 753.425 118.93 752.136 118.93 750.546 c h
+118.93 750.546 m f
+126.129 750.546 m 126.129 748.956 124.84 747.667 123.25 747.667 c 121.66
+ 747.667 120.371 748.956 120.371 750.546 c 120.371 752.136 121.66 753.425
+ 123.25 753.425 c 124.84 753.425 126.129 752.136 126.129 750.546 c h
+126.129 750.546 m f
+133.328 750.546 m 133.328 748.956 132.039 747.667 130.449 747.667 c 128.859
+ 747.667 127.57 748.956 127.57 750.546 c 127.57 752.136 128.859 753.425 
+130.449 753.425 c 132.039 753.425 133.328 752.136 133.328 750.546 c h
+133.328 750.546 m f
+71.504 750.46 m 71.504 748.87 70.215 747.581 68.625 747.581 c 67.035 747.581
+ 65.746 748.87 65.746 750.46 c 65.746 752.054 67.035 753.343 68.625 753.343
+ c 70.215 753.343 71.504 752.054 71.504 750.46 c h
+71.504 750.46 m f
+78.707 750.46 m 78.707 748.87 77.414 747.581 75.824 747.581 c 74.234 747.581
+ 72.945 748.87 72.945 750.46 c 72.945 752.054 74.234 753.343 75.824 753.343
+ c 77.414 753.343 78.707 752.054 78.707 750.46 c h
+78.707 750.46 m f
+85.906 750.46 m 85.906 748.87 84.617 747.581 83.023 747.581 c 81.434 747.581
+ 80.145 748.87 80.145 750.46 c 80.145 752.054 81.434 753.343 83.023 753.343
+ c 84.617 753.343 85.906 752.054 85.906 750.46 c h
+85.906 750.46 m f
+93.105 750.46 m 93.105 748.87 91.816 747.581 90.227 747.581 c 88.633 747.581
+ 87.344 748.87 87.344 750.46 c 87.344 752.054 88.633 753.343 90.227 753.343
+ c 91.816 753.343 93.105 752.054 93.105 750.46 c h
+93.105 750.46 m f
+43.816 746.12 m 43.816 743.773 41.914 741.866 39.566 741.866 c 37.219 741.866
+ 35.312 743.773 35.312 746.12 c 35.312 748.468 37.219 750.37 39.566 750.37
+ c 41.914 750.37 43.816 748.468 43.816 746.12 c h
+43.816 746.12 m f
+43.816 796.151 m 43.816 793.804 41.914 791.898 39.566 791.898 c 37.219 
+791.898 35.312 793.804 35.312 796.151 c 35.312 798.499 37.219 800.401 39.566
+ 800.401 c 41.914 800.401 43.816 798.499 43.816 796.151 c h
+43.816 796.151 m f
+168.641 796.151 m 168.641 793.804 166.734 791.898 164.387 791.898 c 162.039
+ 791.898 160.137 793.804 160.137 796.151 c 160.137 798.499 162.039 800.401
+ 164.387 800.401 c 166.734 800.401 168.641 798.499 168.641 796.151 c h
+168.641 796.151 m f
+168.641 746.12 m 168.641 743.773 166.734 741.866 164.387 741.866 c 162.039
+ 741.866 160.137 743.773 160.137 746.12 c 160.137 748.468 162.039 750.37
+ 164.387 750.37 c 166.734 750.37 168.641 748.468 168.641 746.12 c h
+168.641 746.12 m f
+55.848 780.773 m 52.434 779.366 50.715 778.71 49.434 777.827 c 48.156 776.944
+ 47.57 775.847 46.816 774.339 c 44.785 770.288 45.902 765.511 47.137 761.745
+ c 49.004 756.046 52.312 750.21 57.457 746.687 c 61.281 744.066 66.43 742.394
+ 71.176 743.53 c 72.871 743.937 74.137 745.171 75.207 746.249 c 76.277 747.323
+ 77.055 748.323 77.055 748.323 c 74.82 750.069 l 74.82 750.069 74.133 749.187
+ 73.195 748.245 c 72.262 747.308 70.977 746.398 70.516 746.288 c 66.879 
+745.417 62.348 746.776 59.062 749.026 c 54.668 752.042 51.562 757.339 49.828
+ 762.632 c 48.668 766.163 47.934 770.257 49.348 773.073 c 50.102 774.577
+ 50.254 774.948 51.039 775.491 c 51.828 776.034 53.508 776.745 56.926 778.155
+ c h
+55.848 780.773 m f*
+55.691 789.659 m 50.055 789.042 44.422 785.952 41.52 781.284 c 36.84 773.765
+ 39.961 763.651 43.02 756.159 c 44.992 751.319 48.871 746.433 53.207 743.651
+ c 57.883 740.648 63.547 739.491 68.879 739.144 c 74.121 738.804 79.816 
+739.726 84.762 742.316 c 86.477 743.214 87.965 744.905 89.191 746.398 c 
+90.418 747.89 91.305 749.206 91.305 749.206 c 88.961 750.792 l 88.961 750.792
+ 88.133 749.577 87 748.198 c 85.863 746.816 84.34 745.292 83.449 744.823
+ c 79.281 742.64 74.094 741.648 69.066 741.976 c 64.02 742.304 58.812 743.421
+ 54.738 746.038 c 50.867 748.523 47.352 753.042 45.641 757.234 c 42.68 764.487
+ 40.191 773.78 43.926 779.788 c 46.988 784.71 54.914 787.859 60.645 786.648
+ c 61.871 786.39 62.641 785.964 63.418 785.132 c 64.199 784.296 64.957 782.987
+ 65.801 781.046 c 68.398 782.167 l 67.496 784.245 66.633 785.839 65.492 
+787.062 c 64.348 788.284 62.91 789.066 61.234 789.421 c 59.453 789.796 57.57
+ 789.866 55.691 789.659 c h
+55.691 789.659 m f*
+149.488 779.827 m 147.297 778.034 l 148.047 777.116 148.996 776.355 149.828
+ 775.554 c 150.66 774.749 151.344 773.937 151.625 773.198 c 152.426 771.12
+ 152.113 768.429 151.68 765.765 c 151.188 762.737 150.199 759.734 148.652
+ 757.159 c 146.438 753.468 143.656 749.933 140.172 747.87 c 137.059 746.03
+ 133.266 744.573 130.262 745.347 c 129.5 745.542 127.879 746.835 126.691
+ 748.14 c 125.504 749.448 124.641 750.679 124.641 750.679 c 122.32 749.054
+ l 122.32 749.054 123.27 747.694 124.59 746.237 c 125.914 744.78 127.504
+ 743.128 129.559 742.601 c 133.855 741.495 138.238 743.437 141.617 745.433
+ c 145.746 747.874 148.746 751.808 151.082 755.698 c 152.852 758.644 153.934
+ 761.984 154.477 765.312 c 154.918 768.023 155.426 771.206 154.273 774.214
+ c 153.727 775.632 152.727 776.694 151.793 777.597 c 150.855 778.499 149.945
+ 779.273 149.488 779.827 c h
+149.488 779.827 m f*
+58.734 769.198 m 55.906 769.109 l 56.043 764.726 56.246 762.214 56.816 
+760.183 c 57.383 758.155 58.316 756.753 59.633 754.823 c 60.68 753.288 62.441
+ 752.12 63.984 751.159 c 65.527 750.198 66.867 749.53 66.867 749.53 c 68.133
+ 752.073 l 68.133 752.073 66.902 752.687 65.484 753.566 c 64.066 754.448
+ 62.477 755.687 61.977 756.425 c 60.664 758.339 59.992 759.351 59.543 760.948
+ c 59.098 762.542 58.867 764.874 58.734 769.198 c h
+58.734 769.198 m f*
+135.355 769.683 m 135.355 769.683 134.945 768.913 134.375 767.999 c 133.801
+ 767.089 133.016 766.03 132.598 765.671 c 131.391 764.62 129.742 763.952
+ 127.914 763.269 c 126.082 762.581 124.074 761.878 122.328 760.484 c 120.781
+ 759.245 119.008 757.499 117.551 755.792 c 116.82 754.941 116.176 754.097
+ 115.68 753.308 c 115.18 752.519 114.777 751.847 114.703 750.909 c 117.527
+ 750.694 l 117.523 750.628 117.68 751.179 118.07 751.796 c 118.461 752.413
+ 119.043 753.175 119.707 753.956 c 121.043 755.519 122.75 757.191 124.098
+ 758.269 c 125.363 759.276 127.059 759.921 128.906 760.616 c 130.75 761.308
+ 132.758 762.05 134.457 763.526 c 135.395 764.343 136.148 765.491 136.777
+ 766.495 c 137.406 767.499 137.855 768.351 137.855 768.351 c h
+135.355 769.683 m f*
+144.883 769.788 m 144.883 769.788 144.301 767.64 143.371 765.077 c 142.441
+ 762.515 141.094 759.523 139.938 758.14 c 138.832 756.819 138.125 756.511
+ 136.699 755.831 c 135.273 755.151 133.281 754.198 130.379 751.917 c 132.125
+ 749.691 l 134.848 751.827 136.484 752.593 137.918 753.273 c 139.348 753.956
+ 140.715 754.651 142.113 756.323 c 143.797 758.331 145.062 761.429 146.035
+ 764.112 c 147.008 766.796 147.617 769.046 147.617 769.046 c h
+144.883 769.788 m f*
+68.176 770.077 m 66.023 768.23 l 69.141 764.589 70.082 762.261 72.98 759.659
+ c 74.145 758.612 75.465 758.026 76.602 757.46 c 77.738 756.89 78.676 756.351
+ 79.277 755.644 c 79.734 755.101 80.441 753.62 80.91 752.355 c 81.375 751.089
+ 81.668 750.023 81.668 750.023 c 84.402 750.776 l 84.402 750.776 84.082 
+751.941 83.57 753.331 c 83.062 754.718 82.426 756.316 81.434 757.48 c 80.387
+ 758.718 79.059 759.401 77.871 759.995 c 76.68 760.589 75.609 761.105 74.875
+ 761.769 c 72.391 763.999 71.484 766.214 68.176 770.077 c h
+68.176 770.077 m f*
+147.852 790.468 m 145.977 790.359 144.121 789.808 142.547 789.038 c 140.668
+ 788.12 139.266 786.253 138.113 784.605 c 136.957 782.956 136.164 781.476
+ 136.164 781.476 c 138.66 780.132 l 138.66 780.132 139.387 781.476 140.438
+ 782.976 c 141.488 784.48 142.965 786.089 143.793 786.491 c 146.262 787.698
+ 149.762 788.05 151.812 786.819 c 155.387 784.683 156.852 779.214 157.855
+ 774.355 c 158.926 769.159 158.73 763.441 156.969 758.511 c 155.289 753.808
+ 151.977 749.472 148.039 746.28 c 144.59 743.487 140.227 741.526 135.848
+ 740.816 c 130.762 739.991 125.219 740.394 120.543 742.335 c 118.684 743.109
+ 115.863 745.355 113.656 747.39 c 111.453 749.421 109.793 751.226 109.793
+ 751.226 c 107.707 749.312 l 107.707 749.312 109.438 747.421 111.734 745.3
+ c 114.035 743.179 116.832 740.804 119.453 739.714 c 124.727 737.526 130.75
+ 737.124 136.297 738.023 c 141.188 738.816 145.973 740.96 149.82 744.077
+ c 154.125 747.566 157.746 752.273 159.637 757.558 c 161.605 763.073 161.797
+ 769.265 160.629 774.925 c 159.613 779.847 158.266 786.261 153.27 789.249
+ c 151.613 790.241 149.723 790.577 147.852 790.468 c h
+147.852 790.468 m f*
+2.070676 w
+1 J
+1 j
+[] 0.0 d
+4 M q 1 0 0 -1 0 841.889771 cm
+30.812 39.082 141.945 68.383 re S Q
+Q Q
+showpage
+%%Trailer
+%%EOF

文件差異過大導致無法顯示
+ 297 - 0
experiment/pcb/power-conn-pcb_3.svg


+ 332 - 0
experiment/pcb/power-conn-pcb_4.ps

@@ -0,0 +1,332 @@
+%!PS-Adobe-3.0
+%%Creator: cairo 1.14.6 (http://cairographics.org)
+%%CreationDate: Tue Mar  3 05:00:28 2020
+%%Pages: 1
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%DocumentMedia: A4 595 842 0 () ()
+%%BoundingBox: 30 733 175 805
+%%EndComments
+%%BeginProlog
+/languagelevel where
+{ pop languagelevel } { 1 } ifelse
+2 lt { /Helvetica findfont 12 scalefont setfont 50 500 moveto
+  (This print job requires a PostScript Language Level 2 printer.) show
+  showpage quit } if
+/q { gsave } bind def
+/Q { grestore } bind def
+/cm { 6 array astore concat } bind def
+/w { setlinewidth } bind def
+/J { setlinecap } bind def
+/j { setlinejoin } bind def
+/M { setmiterlimit } bind def
+/d { setdash } bind def
+/m { moveto } bind def
+/l { lineto } bind def
+/c { curveto } bind def
+/h { closepath } bind def
+/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
+      0 exch rlineto 0 rlineto closepath } bind def
+/S { stroke } bind def
+/f { fill } bind def
+/f* { eofill } bind def
+/n { newpath } bind def
+/W { clip } bind def
+/W* { eoclip } bind def
+/BT { } bind def
+/ET { } bind def
+/pdfmark where { pop globaldict /?pdfmark /exec load put }
+    { globaldict begin /?pdfmark /pop load def /pdfmark
+    /cleartomark load def end } ifelse
+/BDC { mark 3 1 roll /BDC pdfmark } bind def
+/EMC { mark /EMC pdfmark } bind def
+/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
+/Tj { show currentpoint cairo_store_point } bind def
+/TJ {
+  {
+    dup
+    type /stringtype eq
+    { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
+  } forall
+  currentpoint cairo_store_point
+} bind def
+/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
+    cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
+/Tf { pop /cairo_font exch def /cairo_font_matrix where
+      { pop cairo_selectfont } if } bind def
+/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
+      /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
+      /cairo_font where { pop cairo_selectfont } if } bind def
+/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
+      cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
+/g { setgray } bind def
+/rg { setrgbcolor } bind def
+/d1 { setcachedevice } bind def
+/cairo_set_page_size {
+  % Change paper size, but only if different from previous paper size otherwise
+  % duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
+  % so we use the same when checking if the size changes.
+  /setpagedevice where {
+    pop currentpagedevice
+    /PageSize known {
+      2 copy
+      currentpagedevice /PageSize get aload pop
+      exch 4 1 roll
+      sub abs 5 gt
+      3 1 roll
+      sub abs 5 gt
+      or
+    } {
+      true
+    } ifelse
+    {
+      2 array astore
+      2 dict begin
+        /PageSize exch def
+        /ImagingBBox null def
+      currentdict end
+      setpagedevice
+    } {
+      pop pop
+    } ifelse
+  } {
+    pop
+  } ifelse
+} def
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+%%PageMedia: A4
+%%PageBoundingBox: 30 733 175 805
+596 842 cairo_set_page_size
+%%EndPageSetup
+q 30 733 145 72 rectclip q
+0 g
+58.801 771.757 m 58.801 770.191 57.531 768.925 55.965 768.925 c 54.398 
+768.925 53.133 770.191 53.133 771.757 c 53.133 773.323 54.398 774.593 55.965
+ 774.593 c 57.531 774.593 58.801 773.323 58.801 771.757 c h
+58.801 771.757 m f
+68.723 771.757 m 68.723 770.191 67.453 768.925 65.887 768.925 c 64.32 768.925
+ 63.051 770.191 63.051 771.757 c 63.051 773.323 64.32 774.593 65.887 774.593
+ c 67.453 774.593 68.723 773.323 68.723 771.757 c h
+68.723 771.757 m f
+78.645 771.757 m 78.645 770.191 77.375 768.925 75.809 768.925 c 74.242 
+768.925 72.973 770.191 72.973 771.757 c 72.973 773.323 74.242 774.593 75.809
+ 774.593 c 77.375 774.593 78.645 773.323 78.645 771.757 c h
+78.645 771.757 m f
+88.562 771.757 m 88.562 770.191 87.293 768.925 85.73 768.925 c 84.164 768.925
+ 82.895 770.191 82.895 771.757 c 82.895 773.323 84.164 774.593 85.73 774.593
+ c 87.293 774.593 88.562 773.323 88.562 771.757 c h
+88.562 771.757 m f
+98.484 771.757 m 98.484 770.191 97.215 768.925 95.652 768.925 c 94.086 
+768.925 92.816 770.191 92.816 771.757 c 92.816 773.323 94.086 774.593 95.652
+ 774.593 c 97.215 774.593 98.484 773.323 98.484 771.757 c h
+98.484 771.757 m f
+108.406 771.757 m 108.406 770.191 107.137 768.925 105.57 768.925 c 104.008
+ 768.925 102.738 770.191 102.738 771.757 c 102.738 773.323 104.008 774.593
+ 105.57 774.593 c 107.137 774.593 108.406 773.323 108.406 771.757 c h
+108.406 771.757 m f
+118.328 771.757 m 118.328 770.191 117.059 768.925 115.492 768.925 c 113.926
+ 768.925 112.66 770.191 112.66 771.757 c 112.66 773.323 113.926 774.593 
+115.492 774.593 c 117.059 774.593 118.328 773.323 118.328 771.757 c h
+118.328 771.757 m f
+128.25 771.757 m 128.25 770.191 126.98 768.925 125.414 768.925 c 123.848
+ 768.925 122.578 770.191 122.578 771.757 c 122.578 773.323 123.848 774.593
+ 125.414 774.593 c 126.98 774.593 128.25 773.323 128.25 771.757 c h
+128.25 771.757 m f
+138.172 771.757 m 138.172 770.191 136.902 768.925 135.336 768.925 c 133.77
+ 768.925 132.5 770.191 132.5 771.757 c 132.5 773.323 133.77 774.593 135.336
+ 774.593 c 136.902 774.593 138.172 773.323 138.172 771.757 c h
+138.172 771.757 m f
+148.09 771.757 m 148.09 770.191 146.824 768.925 145.258 768.925 c 143.691
+ 768.925 142.422 770.191 142.422 771.757 c 142.422 773.323 143.691 774.593
+ 145.258 774.593 c 146.824 774.593 148.09 773.323 148.09 771.757 c h
+148.09 771.757 m f
+58.801 778.847 m 58.801 777.28 57.531 776.011 55.965 776.011 c 54.398 776.011
+ 53.133 777.28 53.133 778.847 c 53.133 780.409 54.398 781.679 55.965 781.679
+ c 57.531 781.679 58.801 780.409 58.801 778.847 c h
+58.801 778.847 m f
+68.723 778.847 m 68.723 777.28 67.453 776.011 65.887 776.011 c 64.32 776.011
+ 63.051 777.28 63.051 778.847 c 63.051 780.409 64.32 781.679 65.887 781.679
+ c 67.453 781.679 68.723 780.409 68.723 778.847 c h
+68.723 778.847 m f
+78.645 778.847 m 78.645 777.28 77.375 776.011 75.809 776.011 c 74.242 776.011
+ 72.973 777.28 72.973 778.847 c 72.973 780.409 74.242 781.679 75.809 781.679
+ c 77.375 781.679 78.645 780.409 78.645 778.847 c h
+78.645 778.847 m f
+88.562 778.847 m 88.562 777.28 87.293 776.011 85.73 776.011 c 84.164 776.011
+ 82.895 777.28 82.895 778.847 c 82.895 780.409 84.164 781.679 85.73 781.679
+ c 87.293 781.679 88.562 780.409 88.562 778.847 c h
+88.562 778.847 m f
+98.484 778.847 m 98.484 777.28 97.215 776.011 95.652 776.011 c 94.086 776.011
+ 92.816 777.28 92.816 778.847 c 92.816 780.409 94.086 781.679 95.652 781.679
+ c 97.215 781.679 98.484 780.409 98.484 778.847 c h
+98.484 778.847 m f
+108.406 778.847 m 108.406 777.28 107.137 776.011 105.57 776.011 c 104.008
+ 776.011 102.738 777.28 102.738 778.847 c 102.738 780.409 104.008 781.679
+ 105.57 781.679 c 107.137 781.679 108.406 780.409 108.406 778.847 c h
+108.406 778.847 m f
+118.328 778.847 m 118.328 777.28 117.059 776.011 115.492 776.011 c 113.926
+ 776.011 112.66 777.28 112.66 778.847 c 112.66 780.409 113.926 781.679 115.492
+ 781.679 c 117.059 781.679 118.328 780.409 118.328 778.847 c h
+118.328 778.847 m f
+128.25 778.847 m 128.25 777.28 126.98 776.011 125.414 776.011 c 123.848
+ 776.011 122.578 777.28 122.578 778.847 c 122.578 780.409 123.848 781.679
+ 125.414 781.679 c 126.98 781.679 128.25 780.409 128.25 778.847 c h
+128.25 778.847 m f
+138.172 778.847 m 138.172 777.28 136.902 776.011 135.336 776.011 c 133.77
+ 776.011 132.5 777.28 132.5 778.847 c 132.5 780.409 133.77 781.679 135.336
+ 781.679 c 136.902 781.679 138.172 780.409 138.172 778.847 c h
+138.172 778.847 m f
+148.09 778.847 m 148.09 777.28 146.824 776.011 145.258 776.011 c 143.691
+ 776.011 142.422 777.28 142.422 778.847 c 142.422 780.409 143.691 781.679
+ 145.258 781.679 c 146.824 781.679 148.09 780.409 148.09 778.847 c h
+148.09 778.847 m f
+111.73 750.546 m 111.73 748.956 110.441 747.667 108.848 747.667 c 107.258
+ 747.667 105.969 748.956 105.969 750.546 c 105.969 752.136 107.258 753.425
+ 108.848 753.425 c 110.441 753.425 111.73 752.136 111.73 750.546 c h
+111.73 750.546 m f
+118.93 750.546 m 118.93 748.956 117.641 747.667 116.051 747.667 c 114.457
+ 747.667 113.168 748.956 113.168 750.546 c 113.168 752.136 114.457 753.425
+ 116.051 753.425 c 117.641 753.425 118.93 752.136 118.93 750.546 c h
+118.93 750.546 m f
+126.129 750.546 m 126.129 748.956 124.84 747.667 123.25 747.667 c 121.66
+ 747.667 120.371 748.956 120.371 750.546 c 120.371 752.136 121.66 753.425
+ 123.25 753.425 c 124.84 753.425 126.129 752.136 126.129 750.546 c h
+126.129 750.546 m f
+133.328 750.546 m 133.328 748.956 132.039 747.667 130.449 747.667 c 128.859
+ 747.667 127.57 748.956 127.57 750.546 c 127.57 752.136 128.859 753.425 
+130.449 753.425 c 132.039 753.425 133.328 752.136 133.328 750.546 c h
+133.328 750.546 m f
+71.504 750.46 m 71.504 748.87 70.215 747.581 68.625 747.581 c 67.035 747.581
+ 65.746 748.87 65.746 750.46 c 65.746 752.054 67.035 753.343 68.625 753.343
+ c 70.215 753.343 71.504 752.054 71.504 750.46 c h
+71.504 750.46 m f
+78.707 750.46 m 78.707 748.87 77.414 747.581 75.824 747.581 c 74.234 747.581
+ 72.945 748.87 72.945 750.46 c 72.945 752.054 74.234 753.343 75.824 753.343
+ c 77.414 753.343 78.707 752.054 78.707 750.46 c h
+78.707 750.46 m f
+85.906 750.46 m 85.906 748.87 84.617 747.581 83.023 747.581 c 81.434 747.581
+ 80.145 748.87 80.145 750.46 c 80.145 752.054 81.434 753.343 83.023 753.343
+ c 84.617 753.343 85.906 752.054 85.906 750.46 c h
+85.906 750.46 m f
+93.105 750.46 m 93.105 748.87 91.816 747.581 90.227 747.581 c 88.633 747.581
+ 87.344 748.87 87.344 750.46 c 87.344 752.054 88.633 753.343 90.227 753.343
+ c 91.816 753.343 93.105 752.054 93.105 750.46 c h
+93.105 750.46 m f
+43.816 746.12 m 43.816 743.773 41.914 741.866 39.566 741.866 c 37.219 741.866
+ 35.312 743.773 35.312 746.12 c 35.312 748.468 37.219 750.37 39.566 750.37
+ c 41.914 750.37 43.816 748.468 43.816 746.12 c h
+43.816 746.12 m f
+43.816 796.151 m 43.816 793.804 41.914 791.898 39.566 791.898 c 37.219 
+791.898 35.312 793.804 35.312 796.151 c 35.312 798.499 37.219 800.401 39.566
+ 800.401 c 41.914 800.401 43.816 798.499 43.816 796.151 c h
+43.816 796.151 m f
+168.641 796.151 m 168.641 793.804 166.734 791.898 164.387 791.898 c 162.039
+ 791.898 160.137 793.804 160.137 796.151 c 160.137 798.499 162.039 800.401
+ 164.387 800.401 c 166.734 800.401 168.641 798.499 168.641 796.151 c h
+168.641 796.151 m f
+168.641 746.12 m 168.641 743.773 166.734 741.866 164.387 741.866 c 162.039
+ 741.866 160.137 743.773 160.137 746.12 c 160.137 748.468 162.039 750.37
+ 164.387 750.37 c 166.734 750.37 168.641 748.468 168.641 746.12 c h
+168.641 746.12 m f
+55.848 780.773 m 52.434 779.366 50.715 778.71 49.434 777.827 c 48.156 776.944
+ 47.57 775.847 46.816 774.339 c 44.785 770.288 45.902 765.511 47.137 761.745
+ c 49.004 756.046 52.312 750.21 57.457 746.687 c 61.281 744.066 66.43 742.394
+ 71.176 743.53 c 72.871 743.937 74.137 745.171 75.207 746.249 c 76.277 747.323
+ 77.055 748.323 77.055 748.323 c 74.82 750.069 l 74.82 750.069 74.133 749.187
+ 73.195 748.245 c 72.262 747.308 70.977 746.398 70.516 746.288 c 66.879 
+745.417 62.348 746.776 59.062 749.026 c 54.668 752.042 51.562 757.339 49.828
+ 762.632 c 48.668 766.163 47.934 770.257 49.348 773.073 c 50.102 774.577
+ 50.254 774.948 51.039 775.491 c 51.828 776.034 53.508 776.745 56.926 778.155
+ c h
+55.848 780.773 m f*
+53.816 788.452 m 48.18 787.835 44.422 785.952 41.52 781.284 c 36.84 773.765
+ 39.961 763.651 43.02 756.159 c 44.992 751.319 48.871 746.433 53.207 743.651
+ c 57.883 740.648 63.547 739.491 68.879 739.144 c 74.121 738.804 79.816 
+739.726 84.762 742.316 c 86.477 743.214 87.965 744.905 89.191 746.398 c 
+90.418 747.89 91.305 749.206 91.305 749.206 c 88.961 750.792 l 88.961 750.792
+ 88.133 749.577 87 748.198 c 85.863 746.816 84.34 745.292 83.449 744.823
+ c 79.281 742.64 74.094 741.648 69.066 741.976 c 64.02 742.304 58.812 743.421
+ 54.738 746.038 c 50.867 748.523 47.352 753.042 45.641 757.234 c 42.68 764.487
+ 40.191 773.78 43.926 779.788 c 46.988 784.71 53.039 786.651 58.77 785.441
+ c 59.996 785.183 60.766 784.757 61.543 783.925 c 62.324 783.093 63.082 
+781.78 63.926 779.839 c 66.523 780.964 l 65.621 783.038 64.758 784.636 63.617
+ 785.859 c 62.473 787.081 61.035 787.862 59.359 788.214 c 57.578 788.593
+ 55.695 788.659 53.816 788.452 c h
+53.816 788.452 m f*
+148.016 779.694 m 145.824 777.898 l 146.574 776.98 147.52 776.222 148.352
+ 775.417 c 149.184 774.616 151.359 771.726 151.359 771.726 c 152.156 769.648
+ 151.848 766.952 151.414 764.292 c 150.922 761.265 150.199 759.734 148.652
+ 757.159 c 146.438 753.468 143.656 749.933 140.172 747.87 c 137.059 746.03
+ 133.266 744.573 130.262 745.347 c 129.5 745.542 127.879 746.835 126.691
+ 748.14 c 125.504 749.448 124.641 750.679 124.641 750.679 c 122.32 749.054
+ l 122.32 749.054 123.27 747.694 124.59 746.237 c 125.914 744.78 127.504
+ 743.128 129.559 742.601 c 133.855 741.495 138.238 743.437 141.617 745.433
+ c 145.746 747.874 148.746 751.808 151.082 755.698 c 152.852 758.644 153.668
+ 760.511 154.211 763.835 c 154.652 766.55 155.16 769.734 154.004 772.741
+ c 153.461 774.159 151.254 776.558 150.32 777.46 c 149.383 778.362 148.469
+ 779.136 148.016 779.694 c h
+148.016 779.694 m f*
+57.531 770.534 m 54.703 770.448 l 54.836 766.066 56.246 762.214 56.816 
+760.183 c 57.383 758.155 58.316 756.753 59.633 754.823 c 60.68 753.288 62.441
+ 752.12 63.984 751.159 c 65.527 750.198 66.867 749.53 66.867 749.53 c 68.133
+ 752.073 l 68.133 752.073 66.902 752.687 65.484 753.566 c 64.066 754.448
+ 62.477 755.687 61.977 756.425 c 60.664 758.339 59.992 759.351 59.543 760.948
+ c 59.098 762.542 57.664 766.214 57.531 770.534 c h
+57.531 770.534 m f*
+67.238 771.55 m 65.086 769.702 l 68.203 766.062 69.145 763.737 72.043 761.132
+ c 73.207 760.085 75.465 758.026 76.602 757.46 c 77.738 756.89 78.676 756.351
+ 79.277 755.644 c 79.734 755.101 80.441 753.62 80.91 752.355 c 81.375 751.089
+ 81.668 750.023 81.668 750.023 c 84.402 750.776 l 84.402 750.776 84.082 
+751.941 83.57 753.331 c 83.062 754.718 82.426 756.316 81.434 757.48 c 80.387
+ 758.718 79.059 759.401 77.871 759.995 c 76.68 760.589 74.672 762.581 73.938
+ 763.241 c 71.453 765.472 70.547 767.687 67.238 771.55 c h
+67.238 771.55 m f*
+147.852 790.468 m 145.977 790.359 144.121 789.808 142.547 789.038 c 140.668
+ 788.12 137.656 785.585 136.504 783.937 c 135.352 782.284 134.555 780.808
+ 134.555 780.808 c 137.051 779.46 l 137.051 779.46 137.781 780.804 138.828
+ 782.308 c 139.879 783.808 142.965 786.089 143.793 786.491 c 146.262 787.698
+ 149.762 788.05 151.812 786.819 c 155.387 784.683 156.852 779.214 157.855
+ 774.355 c 158.926 769.159 158.73 763.441 156.969 758.511 c 155.289 753.808
+ 151.977 749.472 148.039 746.28 c 144.59 743.487 140.227 741.526 135.848
+ 740.816 c 130.762 739.991 125.219 740.394 120.543 742.335 c 118.684 743.109
+ 115.863 745.355 113.656 747.39 c 111.453 749.421 109.793 751.226 109.793
+ 751.226 c 107.707 749.312 l 107.707 749.312 109.438 747.421 111.734 745.3
+ c 114.035 743.179 116.832 740.804 119.453 739.714 c 124.727 737.526 130.75
+ 737.124 136.297 738.023 c 141.188 738.816 145.973 740.96 149.82 744.077
+ c 154.125 747.566 157.746 752.273 159.637 757.558 c 161.605 763.073 161.797
+ 769.265 160.629 774.925 c 159.613 779.847 158.266 786.261 153.27 789.249
+ c 151.613 790.241 149.723 790.577 147.852 790.468 c h
+147.852 790.468 m f*
+134.258 771.999 m 134.258 771.999 133.297 770.683 132.012 769.124 c 130.727
+ 767.566 129.078 765.753 127.984 764.929 c 126.957 764.151 125.48 763.683
+ 123.852 763.14 c 122.219 762.597 120.41 761.964 118.984 760.495 c 117.828
+ 759.304 117.074 758.452 116.492 757.12 c 115.91 755.792 115.484 754.116
+ 114.613 750.905 c 117.352 750.167 l 118.223 753.386 118.668 755.019 119.09
+ 755.98 c 119.508 756.944 119.887 757.359 121.016 758.523 c 121.867 759.401
+ 123.172 759.929 124.742 760.448 c 126.309 760.968 128.113 761.468 129.695
+ 762.663 c 131.227 763.819 132.855 765.691 134.195 767.319 c 135.539 768.948
+ 136.543 770.327 136.543 770.327 c h
+134.258 771.999 m f*
+143.648 771.659 m 143.648 771.659 143.484 770.702 143.211 769.53 c 142.938
+ 768.355 142.512 766.948 142.188 766.339 c 140.832 763.804 138.184 761.78
+ 135.926 759.081 c 135.035 758.019 134.145 757.441 133.059 756.409 c 131.969
+ 755.374 130.816 753.925 129.684 751.382 c 132.277 750.23 l 133.289 752.507
+ 134.133 753.519 135.012 754.355 c 135.891 755.191 136.949 755.89 138.094
+ 757.261 c 140.062 759.612 142.941 761.726 144.688 764.999 c 145.301 766.151
+ 145.676 767.62 145.973 768.886 c 146.27 770.155 146.445 771.194 146.445
+ 771.194 c h
+143.648 771.659 m f*
+2.070676 w
+1 J
+1 j
+[] 0.0 d
+4 M q 1 0 0 -1 0 841.889771 cm
+31.113 38.531 141.949 68.379 re S Q
+Q Q
+showpage
+%%Trailer
+%%EOF

文件差異過大導致無法顯示
+ 301 - 0
experiment/pcb/power-conn-pcb_4.svg


+ 346 - 0
experiment/pcb/power-conn-pcb_5.ps

@@ -0,0 +1,346 @@
+%!PS-Adobe-3.0
+%%Creator: cairo 1.14.6 (http://cairographics.org)
+%%CreationDate: Tue Mar  3 09:46:50 2020
+%%Pages: 1
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%DocumentMedia: A4 595 842 0 () ()
+%%BoundingBox: 30 732 175 804
+%%EndComments
+%%BeginProlog
+/languagelevel where
+{ pop languagelevel } { 1 } ifelse
+2 lt { /Helvetica findfont 12 scalefont setfont 50 500 moveto
+  (This print job requires a PostScript Language Level 2 printer.) show
+  showpage quit } if
+/q { gsave } bind def
+/Q { grestore } bind def
+/cm { 6 array astore concat } bind def
+/w { setlinewidth } bind def
+/J { setlinecap } bind def
+/j { setlinejoin } bind def
+/M { setmiterlimit } bind def
+/d { setdash } bind def
+/m { moveto } bind def
+/l { lineto } bind def
+/c { curveto } bind def
+/h { closepath } bind def
+/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
+      0 exch rlineto 0 rlineto closepath } bind def
+/S { stroke } bind def
+/f { fill } bind def
+/f* { eofill } bind def
+/n { newpath } bind def
+/W { clip } bind def
+/W* { eoclip } bind def
+/BT { } bind def
+/ET { } bind def
+/pdfmark where { pop globaldict /?pdfmark /exec load put }
+    { globaldict begin /?pdfmark /pop load def /pdfmark
+    /cleartomark load def end } ifelse
+/BDC { mark 3 1 roll /BDC pdfmark } bind def
+/EMC { mark /EMC pdfmark } bind def
+/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
+/Tj { show currentpoint cairo_store_point } bind def
+/TJ {
+  {
+    dup
+    type /stringtype eq
+    { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
+  } forall
+  currentpoint cairo_store_point
+} bind def
+/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
+    cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
+/Tf { pop /cairo_font exch def /cairo_font_matrix where
+      { pop cairo_selectfont } if } bind def
+/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
+      /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
+      /cairo_font where { pop cairo_selectfont } if } bind def
+/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
+      cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
+/g { setgray } bind def
+/rg { setrgbcolor } bind def
+/d1 { setcachedevice } bind def
+/cairo_set_page_size {
+  % Change paper size, but only if different from previous paper size otherwise
+  % duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
+  % so we use the same when checking if the size changes.
+  /setpagedevice where {
+    pop currentpagedevice
+    /PageSize known {
+      2 copy
+      currentpagedevice /PageSize get aload pop
+      exch 4 1 roll
+      sub abs 5 gt
+      3 1 roll
+      sub abs 5 gt
+      or
+    } {
+      true
+    } ifelse
+    {
+      2 array astore
+      2 dict begin
+        /PageSize exch def
+        /ImagingBBox null def
+      currentdict end
+      setpagedevice
+    } {
+      pop pop
+    } ifelse
+  } {
+    pop
+  } ifelse
+} def
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+%%PageMedia: A4
+%%PageBoundingBox: 30 732 175 804
+596 842 cairo_set_page_size
+%%EndPageSetup
+q 30 732 145 72 rectclip q
+0 g
+58.801 771.757 m 58.801 770.191 57.531 768.925 55.965 768.925 c 54.398 
+768.925 53.133 770.191 53.133 771.757 c 53.133 773.323 54.398 774.593 55.965
+ 774.593 c 57.531 774.593 58.801 773.323 58.801 771.757 c h
+58.801 771.757 m f
+68.723 771.757 m 68.723 770.191 67.453 768.925 65.887 768.925 c 64.32 768.925
+ 63.051 770.191 63.051 771.757 c 63.051 773.323 64.32 774.593 65.887 774.593
+ c 67.453 774.593 68.723 773.323 68.723 771.757 c h
+68.723 771.757 m f
+78.645 771.757 m 78.645 770.191 77.375 768.925 75.809 768.925 c 74.242 
+768.925 72.973 770.191 72.973 771.757 c 72.973 773.323 74.242 774.593 75.809
+ 774.593 c 77.375 774.593 78.645 773.323 78.645 771.757 c h
+78.645 771.757 m f
+88.562 771.757 m 88.562 770.191 87.293 768.925 85.73 768.925 c 84.164 768.925
+ 82.895 770.191 82.895 771.757 c 82.895 773.323 84.164 774.593 85.73 774.593
+ c 87.293 774.593 88.562 773.323 88.562 771.757 c h
+88.562 771.757 m f
+98.484 771.757 m 98.484 770.191 97.215 768.925 95.652 768.925 c 94.086 
+768.925 92.816 770.191 92.816 771.757 c 92.816 773.323 94.086 774.593 95.652
+ 774.593 c 97.215 774.593 98.484 773.323 98.484 771.757 c h
+98.484 771.757 m f
+108.406 771.757 m 108.406 770.191 107.137 768.925 105.57 768.925 c 104.008
+ 768.925 102.738 770.191 102.738 771.757 c 102.738 773.323 104.008 774.593
+ 105.57 774.593 c 107.137 774.593 108.406 773.323 108.406 771.757 c h
+108.406 771.757 m f
+118.328 771.757 m 118.328 770.191 117.059 768.925 115.492 768.925 c 113.926
+ 768.925 112.66 770.191 112.66 771.757 c 112.66 773.323 113.926 774.593 
+115.492 774.593 c 117.059 774.593 118.328 773.323 118.328 771.757 c h
+118.328 771.757 m f
+128.25 771.757 m 128.25 770.191 126.98 768.925 125.414 768.925 c 123.848
+ 768.925 122.578 770.191 122.578 771.757 c 122.578 773.323 123.848 774.593
+ 125.414 774.593 c 126.98 774.593 128.25 773.323 128.25 771.757 c h
+128.25 771.757 m f
+138.172 771.757 m 138.172 770.191 136.902 768.925 135.336 768.925 c 133.77
+ 768.925 132.5 770.191 132.5 771.757 c 132.5 773.323 133.77 774.593 135.336
+ 774.593 c 136.902 774.593 138.172 773.323 138.172 771.757 c h
+138.172 771.757 m f
+148.09 771.757 m 148.09 770.191 146.824 768.925 145.258 768.925 c 143.691
+ 768.925 142.422 770.191 142.422 771.757 c 142.422 773.323 143.691 774.593
+ 145.258 774.593 c 146.824 774.593 148.09 773.323 148.09 771.757 c h
+148.09 771.757 m f
+58.801 778.847 m 58.801 777.28 57.531 776.011 55.965 776.011 c 54.398 776.011
+ 53.133 777.28 53.133 778.847 c 53.133 780.409 54.398 781.679 55.965 781.679
+ c 57.531 781.679 58.801 780.409 58.801 778.847 c h
+58.801 778.847 m f
+68.723 778.847 m 68.723 777.28 67.453 776.011 65.887 776.011 c 64.32 776.011
+ 63.051 777.28 63.051 778.847 c 63.051 780.409 64.32 781.679 65.887 781.679
+ c 67.453 781.679 68.723 780.409 68.723 778.847 c h
+68.723 778.847 m f
+78.645 778.847 m 78.645 777.28 77.375 776.011 75.809 776.011 c 74.242 776.011
+ 72.973 777.28 72.973 778.847 c 72.973 780.409 74.242 781.679 75.809 781.679
+ c 77.375 781.679 78.645 780.409 78.645 778.847 c h
+78.645 778.847 m f
+88.562 778.847 m 88.562 777.28 87.293 776.011 85.73 776.011 c 84.164 776.011
+ 82.895 777.28 82.895 778.847 c 82.895 780.409 84.164 781.679 85.73 781.679
+ c 87.293 781.679 88.562 780.409 88.562 778.847 c h
+88.562 778.847 m f
+98.484 778.847 m 98.484 777.28 97.215 776.011 95.652 776.011 c 94.086 776.011
+ 92.816 777.28 92.816 778.847 c 92.816 780.409 94.086 781.679 95.652 781.679
+ c 97.215 781.679 98.484 780.409 98.484 778.847 c h
+98.484 778.847 m f
+108.406 778.847 m 108.406 777.28 107.137 776.011 105.57 776.011 c 104.008
+ 776.011 102.738 777.28 102.738 778.847 c 102.738 780.409 104.008 781.679
+ 105.57 781.679 c 107.137 781.679 108.406 780.409 108.406 778.847 c h
+108.406 778.847 m f
+118.328 778.847 m 118.328 777.28 117.059 776.011 115.492 776.011 c 113.926
+ 776.011 112.66 777.28 112.66 778.847 c 112.66 780.409 113.926 781.679 115.492
+ 781.679 c 117.059 781.679 118.328 780.409 118.328 778.847 c h
+118.328 778.847 m f
+128.25 778.847 m 128.25 777.28 126.98 776.011 125.414 776.011 c 123.848
+ 776.011 122.578 777.28 122.578 778.847 c 122.578 780.409 123.848 781.679
+ 125.414 781.679 c 126.98 781.679 128.25 780.409 128.25 778.847 c h
+128.25 778.847 m f
+138.172 778.847 m 138.172 777.28 136.902 776.011 135.336 776.011 c 133.77
+ 776.011 132.5 777.28 132.5 778.847 c 132.5 780.409 133.77 781.679 135.336
+ 781.679 c 136.902 781.679 138.172 780.409 138.172 778.847 c h
+138.172 778.847 m f
+148.09 778.847 m 148.09 777.28 146.824 776.011 145.258 776.011 c 143.691
+ 776.011 142.422 777.28 142.422 778.847 c 142.422 780.409 143.691 781.679
+ 145.258 781.679 c 146.824 781.679 148.09 780.409 148.09 778.847 c h
+148.09 778.847 m f
+113.973 750.413 m 113.973 748.819 112.684 747.53 111.094 747.53 c 109.504
+ 747.53 108.215 748.819 108.215 750.413 c 108.215 752.003 109.504 753.292
+ 111.094 753.292 c 112.684 753.292 113.973 752.003 113.973 750.413 c h
+113.973 750.413 m f
+121.176 750.413 m 121.176 748.819 119.883 747.53 118.293 747.53 c 116.703
+ 747.53 115.414 748.819 115.414 750.413 c 115.414 752.003 116.703 753.292
+ 118.293 753.292 c 119.883 753.292 121.176 752.003 121.176 750.413 c h
+121.176 750.413 m f
+128.375 750.413 m 128.375 748.819 127.086 747.53 125.492 747.53 c 123.902
+ 747.53 122.613 748.819 122.613 750.413 c 122.613 752.003 123.902 753.292
+ 125.492 753.292 c 127.086 753.292 128.375 752.003 128.375 750.413 c h
+128.375 750.413 m f
+71.504 750.46 m 71.504 748.87 70.215 747.581 68.625 747.581 c 67.035 747.581
+ 65.746 748.87 65.746 750.46 c 65.746 752.054 67.035 753.343 68.625 753.343
+ c 70.215 753.343 71.504 752.054 71.504 750.46 c h
+71.504 750.46 m f
+78.707 750.46 m 78.707 748.87 77.414 747.581 75.824 747.581 c 74.234 747.581
+ 72.945 748.87 72.945 750.46 c 72.945 752.054 74.234 753.343 75.824 753.343
+ c 77.414 753.343 78.707 752.054 78.707 750.46 c h
+78.707 750.46 m f
+85.906 750.46 m 85.906 748.87 84.617 747.581 83.023 747.581 c 81.434 747.581
+ 80.145 748.87 80.145 750.46 c 80.145 752.054 81.434 753.343 83.023 753.343
+ c 84.617 753.343 85.906 752.054 85.906 750.46 c h
+85.906 750.46 m f
+93.105 750.46 m 93.105 748.87 91.816 747.581 90.227 747.581 c 88.633 747.581
+ 87.344 748.87 87.344 750.46 c 87.344 752.054 88.633 753.343 90.227 753.343
+ c 91.816 753.343 93.105 752.054 93.105 750.46 c h
+93.105 750.46 m f
+43.816 746.12 m 43.816 743.773 41.914 741.866 39.566 741.866 c 37.219 741.866
+ 35.312 743.773 35.312 746.12 c 35.312 748.468 37.219 750.37 39.566 750.37
+ c 41.914 750.37 43.816 748.468 43.816 746.12 c h
+43.816 746.12 m f
+43.816 796.151 m 43.816 793.804 41.914 791.898 39.566 791.898 c 37.219 
+791.898 35.312 793.804 35.312 796.151 c 35.312 798.499 37.219 800.401 39.566
+ 800.401 c 41.914 800.401 43.816 798.499 43.816 796.151 c h
+43.816 796.151 m f
+168.641 796.151 m 168.641 793.804 166.734 791.898 164.387 791.898 c 162.039
+ 791.898 160.137 793.804 160.137 796.151 c 160.137 798.499 162.039 800.401
+ 164.387 800.401 c 166.734 800.401 168.641 798.499 168.641 796.151 c h
+168.641 796.151 m f
+168.641 746.12 m 168.641 743.773 166.734 741.866 164.387 741.866 c 162.039
+ 741.866 160.137 743.773 160.137 746.12 c 160.137 748.468 162.039 750.37
+ 164.387 750.37 c 166.734 750.37 168.641 748.468 168.641 746.12 c h
+168.641 746.12 m f
+55.848 780.773 m 52.434 779.366 50.715 778.71 49.434 777.827 c 48.156 776.944
+ 47.57 775.847 46.816 774.339 c 44.785 770.288 45.902 765.511 47.137 761.745
+ c 49.004 756.046 52.312 750.21 57.457 746.687 c 61.281 744.066 66.43 742.394
+ 71.176 743.53 c 72.871 743.937 74.137 745.171 75.207 746.249 c 76.277 747.323
+ 77.055 748.323 77.055 748.323 c 74.82 750.069 l 74.82 750.069 74.133 749.187
+ 73.195 748.245 c 72.262 747.308 70.977 746.398 70.516 746.288 c 66.879 
+745.417 62.348 746.776 59.062 749.026 c 54.668 752.042 51.562 757.339 49.828
+ 762.632 c 48.668 766.163 47.934 770.257 49.348 773.073 c 50.102 774.577
+ 50.254 774.948 51.039 775.491 c 51.828 776.034 53.508 776.745 56.926 778.155
+ c h
+55.848 780.773 m f*
+57.531 770.534 m 54.703 770.448 l 54.836 766.066 56.246 762.214 56.816 
+760.183 c 57.383 758.155 58.316 756.753 59.633 754.823 c 60.68 753.288 62.441
+ 752.12 63.984 751.159 c 65.527 750.198 66.867 749.53 66.867 749.53 c 68.133
+ 752.073 l 68.133 752.073 66.902 752.687 65.484 753.566 c 64.066 754.448
+ 62.477 755.687 61.977 756.425 c 60.664 758.339 59.992 759.351 59.543 760.948
+ c 59.098 762.542 57.664 766.214 57.531 770.534 c h
+57.531 770.534 m f*
+143.809 771.773 m 143.809 766.581 144.23 761.894 143.133 757.437 c 142.867
+ 756.362 142.023 754.495 141.258 752.991 c 140.488 751.491 139.805 750.312
+ 139.805 750.312 c 142.254 748.882 l 142.254 748.882 142.973 750.124 143.781
+ 751.702 c 144.59 753.28 145.488 755.155 145.883 756.757 c 147.129 761.812
+ 146.645 766.753 146.645 771.773 c h
+143.809 771.773 m f*
+146.676 793.542 m 145.301 793.87 143.875 793.898 142.465 793.484 c 139.57
+ 792.636 137.656 790.362 136.477 787.714 c 135.297 785.069 134.738 781.972
+ 134.398 778.956 c 137.215 778.636 l 137.543 781.515 138.094 784.374 139.07
+ 786.566 c 140.047 788.753 141.328 790.198 143.262 790.765 c 145.004 791.276
+ 147.043 790.714 149.047 789.421 c 151.051 788.132 152.922 786.151 154.129
+ 784.327 c 156.438 780.831 155.773 775.526 155.523 770.503 c 155.305 766.148
+ 154.758 761.726 152.898 758.089 c 152.43 757.171 151.074 755.601 149.867
+ 754.394 c 148.656 753.187 147.602 752.284 147.602 752.284 c 149.449 750.128
+ l 149.449 750.128 150.578 751.101 151.871 752.39 c 153.16 753.675 154.617
+ 755.226 155.426 756.8 c 157.598 761.05 158.133 765.878 158.359 770.366 
+c 158.598 775.175 159.609 781.171 156.492 785.89 c 155.07 788.038 153.004
+ 790.241 150.586 791.8 c 149.375 792.581 148.051 793.21 146.676 793.542 
+c h
+146.676 793.542 m f*
+143.168 779.976 m 141.562 779.46 140.953 778.909 140.586 778.253 c 140.406
+ 777.925 140.352 777.589 140.328 777.444 c 140.305 777.3 140.305 777.269
+ 140.234 777.097 c 139.031 774.276 139.059 770.823 139.066 767.749 c 139.066
+ 766.214 139.074 764.776 138.969 763.609 c 138.867 762.444 138.953 761.241
+ 138.688 760.859 c 137.48 759.128 134.309 757.312 131.684 755.566 c 129.754
+ 754.284 125.359 751.941 125.359 751.941 c 126.426 749.937 l 126.426 749.937
+ 130.758 752.23 132.934 753.679 c 135.418 755.327 138.781 757.026 140.547
+ 759.558 c 141.234 760.542 141.113 762.077 141.23 763.409 c 141.348 764.741
+ 141.332 766.23 141.328 767.757 c 141.324 770.812 141.395 774.05 142.312
+ 776.206 c 142.473 776.577 142.535 776.917 142.562 777.085 c 142.59 777.253
+ 142.574 777.171 142.562 777.151 c 142.543 777.112 143.219 777.198 144.512
+ 778.148 c h
+143.168 779.976 m f*
+134.164 772.198 m 133.305 767.741 132.582 765.038 131.633 763.468 c 130.688
+ 761.894 129.586 761.206 127.145 760.495 c 125.148 759.909 123.168 759.343
+ 121.426 758.042 c 119.68 756.741 118.316 754.702 117.57 751.64 c 120.324
+ 750.972 l 120.957 753.573 121.902 754.862 123.117 755.773 c 124.332 756.679
+ 125.957 757.194 127.941 757.776 c 130.699 758.581 132.742 759.804 134.062
+ 762.003 c 135.387 764.206 136.07 767.144 136.941 771.659 c h
+134.164 772.198 m f*
+143.852 772.124 m 143.246 769.761 143.352 767.628 143.438 765.753 c 143.523
+ 763.878 143.574 762.269 143.109 760.714 c 141.66 755.862 139.152 751.132
+ 135.676 747.577 c 134.086 745.948 131.891 744.749 129.609 743.968 c 127.512
+ 743.249 125.047 743.198 122.5 743.12 c 119.691 743.03 117.035 742.691 115.02
+ 743.495 c 113.496 744.105 112.016 745.179 111.543 746.319 c 111.5 746.421
+ 111.445 747.472 111.598 748.335 c 111.75 749.198 111.969 749.909 111.969
+ 749.909 c 109.254 750.737 l 109.254 750.737 108.992 749.874 108.809 748.816
+ c 108.621 747.761 108.383 746.538 108.922 745.234 c 109.875 742.941 112.039
+ 741.632 113.969 740.862 c 116.945 739.671 120.023 740.206 122.586 740.284
+ c 125.09 740.362 127.844 740.362 130.527 741.28 c 133.113 742.167 135.699
+ 743.542 137.707 745.597 c 141.582 749.558 144.266 754.679 145.828 759.901
+ c 146.461 762.019 146.352 764.007 146.266 765.882 c 146.184 767.753 146.113
+ 769.526 146.598 771.421 c h
+143.852 772.124 m f*
+66.121 771.507 m 63.383 770.769 l 64.184 767.776 64.266 765.898 64.492 
+764.202 c 64.719 762.507 65.219 760.87 66.707 759.308 c 68.074 757.878 69.875
+ 757.437 71.48 757.148 c 73.086 756.862 74.594 756.687 75.668 756.218 c 
+77.824 755.276 79.895 754.628 80.926 753.39 c 81.008 753.292 81.375 752.476
+ 81.562 751.773 c 81.75 751.073 81.844 750.48 81.844 750.48 c 84.641 750.925
+ l 84.641 750.925 84.531 751.644 84.305 752.499 c 84.078 753.355 83.832 
+754.331 83.102 755.206 c 81.309 757.355 78.684 757.991 76.801 758.816 c 
+75.145 759.538 73.43 759.679 71.984 759.941 c 70.539 760.198 69.453 760.546
+ 68.762 761.269 c 67.664 762.421 67.508 763.085 67.305 764.581 c 67.105 
+766.073 66.988 768.269 66.121 771.507 c h
+66.121 771.507 m f*
+55.23 794.222 m 52.656 794.378 50.059 793.909 47.84 792.659 c 40.355 788.441
+ 36.156 779.015 35.816 770.687 c 35.512 763.351 40.535 757.132 44.074 751.64
+ c 46.535 747.827 49.246 743.378 53.703 740.984 c 60.574 737.292 68.977 
+736.484 76.547 737.616 c 80.523 738.21 84.562 739.941 87.508 742.827 c 88.625
+ 743.917 89.316 745.464 89.883 746.812 c 90.453 748.159 90.812 749.304 90.812
+ 749.304 c 88.113 750.155 l 88.113 750.155 87.789 749.128 87.277 747.913
+ c 86.762 746.698 85.98 745.296 85.527 744.855 c 83.109 742.487 79.578 740.933
+ 76.133 740.417 c 69.066 739.362 61.215 740.167 55.047 743.48 c 51.488 745.394
+ 48.938 749.343 46.461 753.179 c 42.812 758.843 38.406 764.64 38.648 770.566
+ c 38.957 778.003 42.969 786.663 49.23 790.191 c 52.473 792.019 57.672 791.573
+ 61.023 789.589 c 62.801 788.534 63.984 785.944 64.637 783.441 c 64.945 
+782.269 64.398 780.585 64.398 778.448 c 67.234 778.448 l 67.234 779.909 
+67.973 781.874 67.379 784.155 c 66.648 786.944 65.391 790.292 62.469 792.03
+ c 60.352 793.284 57.805 794.066 55.23 794.222 c h
+55.23 794.222 m f*
+143.844 750.655 m 143.844 749.062 142.555 747.773 140.961 747.773 c 139.371
+ 747.773 138.082 749.062 138.082 750.655 c 138.082 752.245 139.371 753.534
+ 140.961 753.534 c 142.555 753.534 143.844 752.245 143.844 750.655 c h
+143.844 750.655 m f
+151.043 750.655 m 151.043 749.062 149.754 747.773 148.164 747.773 c 146.57
+ 747.773 145.281 749.062 145.281 750.655 c 145.281 752.245 146.57 753.534
+ 148.164 753.534 c 149.754 753.534 151.043 752.245 151.043 750.655 c h
+151.043 750.655 m f
+2.070676 w
+1 J
+1 j
+[] 0.0 d
+4 M q 1 0 0 -1 0 841.889771 cm
+31.305 39.289 141.945 68.379 re S Q
+Q Q
+showpage
+%%Trailer
+%%EOF

文件差異過大導致無法顯示
+ 317 - 0
experiment/pcb/power-conn-pcb_5.svg


+ 731 - 0
experiment/pcb/power-connector-pcb.svg

@@ -0,0 +1,731 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.4 (unknown)"
+   sodipodi:docname="power-connector-pcb.svg">
+  <defs
+     id="defs2" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.7"
+     inkscape:cx="48.12682"
+     inkscape:cy="694.09201"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1723"
+     inkscape:window-height="1035"
+     inkscape:window-x="143"
+     inkscape:window-y="-34"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <g
+       id="g979"
+       transform="translate(-0.2882307,-37.891525)">
+      <circle
+         r="0.75"
+         cy="96.25"
+         cx="30.75"
+         id="path815"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="96.25"
+         cx="34.25"
+         id="path815-9"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="96.25"
+         cx="37.75"
+         id="path815-6"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="96.25"
+         cx="41.25"
+         id="path815-9-0"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="96.25"
+         cx="44.75"
+         id="path815-99"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="96.25"
+         cx="48.25"
+         id="path815-9-1"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="96.25"
+         cx="51.75"
+         id="path815-6-4"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="96.25"
+         cx="55.25"
+         id="path815-9-0-9"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="96.25"
+         cx="58.75"
+         id="path815-6-4-4"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="96.25"
+         cx="62.25"
+         id="path815-9-0-9-8"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="92.75"
+         cx="30.75"
+         id="path815-2"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="92.75"
+         cx="34.25"
+         id="path815-9-5"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="92.75"
+         cx="37.75"
+         id="path815-6-3"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="92.75"
+         cx="41.25"
+         id="path815-9-0-4"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="92.75"
+         cx="44.75"
+         id="path815-99-9"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="92.75"
+         cx="48.25"
+         id="path815-9-1-0"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="92.75"
+         cx="51.75"
+         id="path815-6-4-2"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="92.75"
+         cx="55.25"
+         id="path815-9-0-9-0"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="92.75"
+         cx="58.75"
+         id="path815-6-4-4-1"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="0.75"
+         cy="92.75"
+         cx="62.25"
+         id="path815-9-0-9-8-9"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-7"
+       cx="30.12686"
+       cy="79.618301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-8"
+       cx="33.626862"
+       cy="79.618301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-8"
+       cx="37.126862"
+       cy="79.618301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-6"
+       cx="40.626862"
+       cy="79.618301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-99-0"
+       cx="44.126862"
+       cy="79.618301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-1-4"
+       cx="47.626862"
+       cy="79.618301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-4-6"
+       cx="51.126862"
+       cy="79.618301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-9-7"
+       cx="54.626862"
+       cy="79.618301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-4-4-6"
+       cx="58.126862"
+       cy="79.618301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-9-8-0"
+       cx="61.626862"
+       cy="79.618301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-2-9"
+       cx="30.12686"
+       cy="76.118301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-5-7"
+       cx="33.626862"
+       cy="76.118301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-3-5"
+       cx="37.126862"
+       cy="76.118301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-4-9"
+       cx="40.626862"
+       cy="76.118301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-99-9-7"
+       cx="44.126862"
+       cy="76.118301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-1-0-8"
+       cx="47.626862"
+       cy="76.118301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-4-2-5"
+       cx="51.126862"
+       cy="76.118301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-9-0-3"
+       cx="54.626862"
+       cy="76.118301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-4-4-1-3"
+       cx="58.126862"
+       cy="76.118301"
+       r="0.75" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.06200787;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-9-8-9-8"
+       cx="61.626862"
+       cy="76.118301"
+       r="0.75" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 30.33259,99.696427 c 0.661458,0.944943 0.795463,1.373983 1.027622,2.126113 0.345209,1.11838 0.0141,2.41706 0.519713,3.47266 0.326193,0.68101 0.953231,1.18472 1.535533,1.66545 0.749899,0.61909 1.883486,0.76792 2.480467,1.53554 0.329479,0.42365 0.484283,1.53552 0.484283,1.53552"
+       id="path1056"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caaaac" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.3;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 29.930989,103.07459 c -0.02363,1.9135 -0.225022,1.99434 0.212611,2.83482 0.631895,1.21357 2.368835,1.49482 3.177363,2.59859 0.320579,0.43764 0.602401,1.5119 0.602401,1.5119"
+       id="path1058"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caac" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 33.663503,99.531063 c 0.496095,0.755947 0.989872,1.289607 1.258128,2.043077 0.355734,0.99917 -0.07422,2.21522 0.419144,3.1541 0.335846,0.63911 1.022549,1.02814 1.606398,1.45285 0.580537,0.4223 1.223248,0.75564 1.866256,1.07486 0.635332,0.31541 1.462761,0.32171 1.960751,0.82682 0.471218,0.47796 0.755955,1.86626 0.755955,1.86626"
+       id="path1060"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caaaaac" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.3;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 33.545385,103.09821 c -0.04725,1.91351 -0.08898,1.79617 0.330726,2.53954 0.37608,0.66609 1.145406,1.02592 1.795388,1.42921 0.827659,0.51354 1.970253,0.53858 2.645837,1.24024 0.406276,0.42195 0.685081,1.61821 0.685081,1.61821"
+       id="path1062"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caaac" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.3;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 61.605625,103.09596 c -1.135896,1.46998 -0.799379,0.95016 -1.135896,1.46998 -0.442675,0.6838 -0.620391,1.53818 -1.152598,2.15486 -0.525324,0.60871 -1.299532,0.94747 -1.937707,1.43658 -0.569419,0.43641 -1.374792,0.69048 -1.687138,1.33634 -0.106665,0.22056 0,0.73499 0,0.73499"
+       id="path1064"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caaaac" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 61.271538,99.421002 c -0.902035,1.102488 -1.242546,1.318278 -1.558398,2.143158 -0.405692,1.05951 0.134957,2.35943 -0.348762,3.38567 -0.516793,1.09641 -1.510203,1.97144 -2.552899,2.58949 -0.961254,0.56977 -2.416554,0.14621 -3.22394,0.91873 -0.432562,0.41388 -0.567947,1.70384 -0.567947,1.70384"
+       id="path1066"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caaaac" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 57.863853,99.68827 c -1.135896,2.05463 -1.36824,1.4318 -1.712965,2.33284 -0.323882,0.84656 0.236984,1.9513 -0.264547,2.70631 -0.650076,0.97863 -2.004188,1.25391 -3.100613,1.676 -1.358627,0.52303 -3.251867,-0.0308 -4.242902,1.03567 -0.618781,0.66585 -0.575386,1.92964 -0.451017,2.6894"
+       id="path1068"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caaaac" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.3;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 57.964077,103.02914 c -0.300678,1.90429 -0.55956,2.16194 -1.319642,2.90656 -0.705593,0.69123 -1.805906,0.80194 -2.722809,1.1693 -0.799747,0.32042 -1.80404,0.30184 -2.422129,0.90203 -0.551901,0.53592 -0.868627,2.13816 -0.868627,2.13816"
+       id="path1070"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caaac" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-7-7"
+       cx="29.808992"
+       cy="103.23201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-8-1"
+       cx="33.308994"
+       cy="103.23201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-8-1"
+       cx="36.808994"
+       cy="103.23201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-6-1"
+       cx="40.308994"
+       cy="103.23201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-99-0-7"
+       cx="43.808994"
+       cy="103.23201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-1-4-0"
+       cx="47.308994"
+       cy="103.23201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-4-6-4"
+       cx="50.808994"
+       cy="103.23201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-9-7-0"
+       cx="54.308998"
+       cy="103.23201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-4-4-6-8"
+       cx="57.808994"
+       cy="103.23201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-9-8-0-5"
+       cx="61.308994"
+       cy="103.23201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-2-9-1"
+       cx="29.808992"
+       cy="99.73201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-5-7-6"
+       cx="33.308994"
+       cy="99.73201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-3-5-6"
+       cx="36.808994"
+       cy="99.73201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-4-9-2"
+       cx="40.308994"
+       cy="99.73201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-99-9-7-1"
+       cx="43.808994"
+       cy="99.73201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-1-0-8-9"
+       cx="47.308994"
+       cy="99.73201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-4-2-5-6"
+       cx="50.808994"
+       cy="99.73201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-9-0-3-4"
+       cx="54.308998"
+       cy="99.73201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-4-4-1-3-8"
+       cx="57.808994"
+       cy="99.73201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.11574803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-9-8-9-8-0"
+       cx="61.308994"
+       cy="99.73201"
+       r="1.4" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-7-7-8"
+       cx="31.260788"
+       cy="68.326263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-8-1-1"
+       cx="34.760788"
+       cy="68.326263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-8-1-0"
+       cx="38.260788"
+       cy="68.326263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-6-1-2"
+       cx="41.760788"
+       cy="68.326263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-99-0-7-2"
+       cx="45.260788"
+       cy="68.326263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-1-4-0-9"
+       cx="48.760788"
+       cy="68.326263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-4-6-4-7"
+       cx="52.260788"
+       cy="68.326263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-9-7-0-5"
+       cx="55.760796"
+       cy="68.326263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-4-4-6-8-6"
+       cx="59.260788"
+       cy="68.326263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-9-8-0-5-4"
+       cx="62.760788"
+       cy="68.326263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-2-9-1-6"
+       cx="31.260788"
+       cy="64.826263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-5-7-6-3"
+       cx="34.760788"
+       cy="64.826263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-3-5-6-7"
+       cx="38.260788"
+       cy="64.826263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-4-9-2-9"
+       cx="41.760788"
+       cy="64.826263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-99-9-7-1-7"
+       cx="45.260788"
+       cy="64.826263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-1-0-8-9-4"
+       cx="48.760788"
+       cy="64.826263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-4-2-5-6-9"
+       cx="52.260788"
+       cy="64.826263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-9-0-3-4-1"
+       cx="55.760796"
+       cy="64.826263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-6-4-4-1-3-8-7"
+       cx="59.260788"
+       cy="64.826263"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.12401574;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path815-9-0-9-8-9-8-0-0"
+       cx="62.760788"
+       cy="64.826263"
+       r="1.5" />
+    <g
+       id="g1295"
+       transform="translate(38.797913,-33.900435)">
+      <circle
+         r="1.016"
+         cy="88.663399"
+         cx="37.617714"
+         id="path1072-0"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="1.016"
+         cy="88.663399"
+         cx="40.157715"
+         id="path1072-6-8"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <g
+       id="g1346"
+       transform="translate(7.0492335,-0.86862598)">
+      <circle
+         r="1.016"
+         cy="110.984"
+         cx="41.015999"
+         id="path1072"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="1.016"
+         cy="110.984"
+         cx="43.556"
+         id="path1072-6"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="1.016"
+         cy="110.984"
+         cx="46.096001"
+         id="path1072-6-5"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="1.016"
+         cy="110.984"
+         cx="48.636002"
+         id="path1072-6-3"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1072-9"
+       cx="85.602081"
+       cy="54.19503"
+       r="1.016" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1072-6-4"
+       cx="88.142082"
+       cy="54.19503"
+       r="1.016" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1072-6-5-1"
+       cx="90.682083"
+       cy="54.19503"
+       r="1.016" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1072-6-3-5"
+       cx="93.222084"
+       cy="54.19503"
+       r="1.016" />
+    <g
+       transform="translate(31.949133,-34.067474)"
+       id="g1295-4">
+      <circle
+         r="1.016"
+         cy="88.663399"
+         cx="37.617714"
+         id="path1072-0-1"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="1.016"
+         cy="88.663399"
+         cx="40.157715"
+         id="path1072-6-8-5"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <g
+       id="g1346-5"
+       transform="translate(-7.1409968,-0.83880995)">
+      <circle
+         r="1.016"
+         cy="110.984"
+         cx="41.015999"
+         id="path1072-4"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="1.016"
+         cy="110.984"
+         cx="43.556"
+         id="path1072-6-9"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="1.016"
+         cy="110.984"
+         cx="46.096001"
+         id="path1072-6-5-8"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <circle
+         r="1.016"
+         cy="110.984"
+         cx="48.636002"
+         id="path1072-6-3-3"
+         style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:1.22880018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.56917441;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1412"
+       cx="23.62351"
+       cy="111.67687"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.56917441;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1412-8"
+       cx="23.62351"
+       cy="94.026787"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.56917441;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1412-5"
+       cx="67.657738"
+       cy="94.026787"
+       r="1.5" />
+    <circle
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.96832581;fill-rule:nonzero;stroke:none;stroke-width:0.56917441;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path1412-2"
+       cx="67.657738"
+       cy="111.67687"
+       r="1.5" />
+    <rect
+       style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.98642536;fill-rule:nonzero;stroke:#000000;stroke-width:0.73048848;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect1450"
+       width="50.076099"
+       height="24.122795"
+       x="20.913239"
+       y="90.687012" />
+  </g>
+</svg>