pxt-calliope/sim/visuals/microbit.ts
2017-02-24 17:51:42 +01:00

1873 lines
106 KiB
TypeScript

namespace pxsim.visuals {
const MB_STYLE = `
svg.sim {
margin-bottom:1em;
}
svg.sim.grayscale {
-moz-filter: grayscale(1);
-webkit-filter: grayscale(1);
filter: grayscale(1);
}
.sim-button {
pointer-events: none;
}
.sim-button-outer:hover {
stroke:grey;
stroke-width: 3px;
}
.sim-button-nut {
fill:#704A4A;
pointer-events:none;
}
.sim-button-nut:hover {
stroke:1px solid #704A4A;
}
.sim-pin:hover {
stroke:#D4AF37;
stroke-width:2px;
}
.sim-pin-touch.touched:hover {
stroke:darkorange;
}
.sim-led-back:hover {
stroke:#fff;
stroke-width:3px;
}
.sim-led:hover {
stroke:#ff7f7f;
stroke-width:3px;
}
.sim-systemled {
fill:#333;
stroke:#555;
stroke-width: 1px;
}
.sim-light-level-button {
stroke:#ccc;
stroke-width: 2px;
}
.sim-antenna {
stroke:#555;
stroke-width: 2px;
}
.sim-text {
font-family:"Lucida Console", Monaco, monospace;
font-size:10px;
fill:#fff;
pointer-events: none; user-select: none;
}
.sim-text.inverted {
fill:#000;
}
.sim-text-pin {
font-family:"Lucida Console", Monaco, monospace;
font-size:20px;
fill:#fff;
pointer-events: none;
}
.sim-thermometer {
stroke:#aaa;
stroke-width: 2px;
}
#rgbledcircle:hover {
r:8px;
}
/* animations */
.sim-theme-glow {
animation-name: sim-theme-glow-animation;
animation-timing-function: ease-in-out;
animation-direction: alternate;
animation-iteration-count: infinite;
animation-duration: 1.25s;
}
@keyframes sim-theme-glow-animation {
from { opacity: 1; }
to { opacity: 0.75; }
}
.sim-flash {
animation-name: sim-flash-animation;
animation-duration: 0.1s;
}
@keyframes sim-flash-animation {
from { fill: yellow; }
to { fill: default; }
}
.sim-flash-stroke {
animation-name: sim-flash-stroke-animation;
animation-duration: 0.4s;
animation-timing-function: ease-in;
}
@keyframes sim-flash-stroke-animation {
from { stroke: yellow; }
to { stroke: default; }
}
/* wireframe */
.sim-wireframe * {
fill: none;
stroke: black;
}
.sim-wireframe .sim-display,
.sim-wireframe .sim-led,
.sim-wireframe .sim-led-back,
.sim-wireframe .sim-head,
.sim-wireframe .sim-theme,
.sim-wireframe .sim-button-group,
.sim-wireframe .sim-button-label,
.sim-wireframe .sim-button,
.sim-wireframe .sim-text-pin
{
visibility: hidden;
}
.sim-wireframe .sim-label
{
stroke: none;
fill: #777;
}
.sim-wireframe .sim-board {
stroke-width: 2px;
}
`;
const BOARD_SVG = `<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 570 570" style="enable-background:new 0 0 570 570;" xml:space="preserve">
<style type="text/css">
.st0{fill:#034854;}
.st1{display:none;}
.st2{display:inline;}
.st3{fill:#EFDA48;}
.st4{fill:#1D1D1B;}
.st5{fill:#BDD1CF;}
.st6{fill:#F2F2C8;}
.st7{fill:#F8B133;}
.st8{fill:#FFFFFF;}
.st9{fill:#F9EBA7;}
.st10{fill:#42767F;}
.st11{fill:#BC1254;}
</style>
<symbol id="calliope_mini_backside">
</symbol>
<g>
<g>
<g>
<g>
<path class="st0" d="M143.1,47.8L143.1,47.8c11.5-8.5,27-8.9,38.7-0.9c23.1,15.5,64.2,38.9,103.6,38.9
c42.9,0,84.6-25,104.4-38.9c8-5.6,18.1-7,27.2-3.7l1.1,0.4c13.5,4.8,21.8,18.1,20.4,32.2c-3.1,28.5-5.6,77.5,24.1,116.4
c31.1,40.5,58.7,57.7,78.3,64.4c10.9,3.7,18.3,13.7,19.2,25.2l0,0c0.9,14.8-9.4,25.2-22.8,31.5c-22.2,10.5-57,29.1-79.2,67
c-26.7,46.1-24.1,94.9-21.1,116c1.3,9.4-3,18.7-10.9,23.7c-8.9,5.6-22,8.5-39.6-2.8c-10.2-6.7-22.2-15.9-38.5-22.2
c-20-7.6-31.3-10.2-37.6-10.7c-4.4-0.4-8.1-3.3-9.6-7.4c-2-5.4-6.3-11.5-15.2-11.5c-9.3,0-13.3,6.7-15.2,12.2
c-1.5,4.6-6.1,6.3-10.9,6.8c-9.1,0.7-23.1,4.4-37.9,11.3c-13.1,6.1-25.9,14.6-37.8,23.5c-10.2,7.6-27.8,10.2-37.8,2.4l0,0
c-10.5-8.1-13.7-21.7-12-34.8c3.5-28.3,2-80.1-30.9-118.8c-32.6-38.7-52.2-48.7-68.8-54c-7.2-2.4-21.1-10-22.8-26.1
c-1.7-16.1,5.6-26.8,20.2-34.1c22.8-11.3,56.4-31.8,77.9-63.1c27.9-40.7,27.9-89,24.2-114.2C132.6,66,134.6,54.1,143.1,47.8z"/>
<g class="st1">
<g class="st2">
<path class="st3" d="M186.8,449.1c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8s4.8-2.2,4.8-4.8S189.6,449.1,186.8,449.1z
M186.8,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2C189,455.1,188.1,456.1,186.8,456.1z"/>
<path class="st4" d="M186.8,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
C189,455.1,188.1,456.1,186.8,456.1z"/>
</g>
<g class="st2">
<path class="st3" d="M203.1,449.1c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8s4.8-2.2,4.8-4.8S205.9,449.1,203.1,449.1z
M203.1,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2S204.4,456.1,203.1,456.1z"/>
<path class="st4" d="M203.1,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
S204.4,456.1,203.1,456.1z"/>
</g>
<g class="st2">
<path class="st3" d="M219.4,449.1c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8s4.8-2.2,4.8-4.8S222.1,449.1,219.4,449.1z
M219.4,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2S220.7,456.1,219.4,456.1z"/>
<path class="st4" d="M219.4,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
S220.7,456.1,219.4,456.1z"/>
</g>
<g class="st2">
<path class="st3" d="M235.8,449.1c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8s4.8-2.2,4.8-4.8S238.4,449.1,235.8,449.1z
M235.8,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2C238.1,455.1,236.9,456.1,235.8,456.1z"/>
<path class="st4" d="M235.8,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
C238.1,455.1,236.9,456.1,235.8,456.1z"/>
</g>
<g class="st2">
<path class="st3" d="M252.1,449.1c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8s4.8-2.2,4.8-4.8S254.6,449.1,252.1,449.1z
M252.1,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2C254.2,455.1,253.1,456.1,252.1,456.1z"/>
<path class="st4" d="M252.1,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
C254.2,455.1,253.1,456.1,252.1,456.1z"/>
</g>
<g class="st2">
<path class="st3" d="M268.4,449.1c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8S271,449.1,268.4,449.1z
M268.4,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2S269.6,456.1,268.4,456.1z"/>
<path class="st4" d="M268.4,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2S269.6,456.1,268.4,456.1z"/>
</g>
<g class="st2">
<path class="st3" d="M284.6,449.1c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8
C289.5,451.4,287.2,449.1,284.6,449.1z M284.6,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2
S286,456.1,284.6,456.1z"/>
<path class="st4" d="M284.6,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2S286,456.1,284.6,456.1z"/>
</g>
<g class="st2">
<path class="st3" d="M301,449.1c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8S303.6,449.1,301,449.1z
M301,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2C303.1,455.1,302.2,456.1,301,456.1z"/>
<path class="st4" d="M301,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2
C303.1,455.1,302.2,456.1,301,456.1z"/>
</g>
<g class="st2">
<path class="st3" d="M317.2,449.1c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8
C322.1,451.4,319.9,449.1,317.2,449.1z M317.2,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
S318.6,456.1,317.2,456.1z"/>
<path class="st4" d="M317.2,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
S318.6,456.1,317.2,456.1z"/>
</g>
<g class="st2">
<path class="st3" d="M333.5,449.1c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8
C338.4,451.4,336.1,449.1,333.5,449.1z M333.5,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2
C335.8,455.1,334.8,456.1,333.5,456.1z"/>
<path class="st4" d="M333.5,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2
C335.8,455.1,334.8,456.1,333.5,456.1z"/>
</g>
<g class="st2">
<path class="st3" d="M349.8,449.1c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8
C354.6,451.4,352.6,449.1,349.8,449.1z M349.8,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
C352.1,455.1,351.1,456.1,349.8,456.1z"/>
<path class="st4" d="M349.8,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
C352.1,455.1,351.1,456.1,349.8,456.1z"/>
</g>
<g class="st2">
<path class="st3" d="M366.1,449.1c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8S368.9,449.1,366.1,449.1z
M366.1,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2C368.2,455.1,367.4,456.1,366.1,456.1z"/>
<path class="st4" d="M366.1,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
C368.2,455.1,367.4,456.1,366.1,456.1z"/>
</g>
<g class="st2">
<path class="st3" d="M382.4,449.1c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8s4.8-2.2,4.8-4.8S385.1,449.1,382.4,449.1z
M382.4,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2S383.6,456.1,382.4,456.1z"/>
<path class="st4" d="M382.4,456.1c-1.3,0-2.2-1.1-2.2-2.2c0-1.1,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
S383.6,456.1,382.4,456.1z"/>
</g>
</g>
<g class="st1">
<g class="st2">
<path class="st3" d="M186.8,432.6c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8s4.8-2.2,4.8-4.8S189.6,432.6,186.8,432.6z
M186.8,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2C189.2,438.7,188.1,439.9,186.8,439.9z"/>
<path class="st4" d="M186.8,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
C189.2,438.7,188.1,439.9,186.8,439.9z"/>
</g>
<g class="st2">
<path class="st3" d="M203.1,432.6c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8s4.8-2.2,4.8-4.8
C208.1,434.9,205.9,432.6,203.1,432.6z M203.1,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
C205.5,438.7,204.4,439.9,203.1,439.9z"/>
<path class="st4" d="M203.1,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
C205.5,438.7,204.4,439.9,203.1,439.9z"/>
</g>
<g class="st2">
<path class="st3" d="M219.4,432.6c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8s4.8-2.2,4.8-4.8
C224.4,434.9,222.1,432.6,219.4,432.6z M219.4,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
C221.8,438.7,220.7,439.9,219.4,439.9z"/>
<path class="st4" d="M219.4,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
C221.8,438.7,220.7,439.9,219.4,439.9z"/>
</g>
<g class="st2">
<path class="st3" d="M235.8,432.6c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8s4.8-2.2,4.8-4.8S238.4,432.6,235.8,432.6z
M235.8,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2S236.9,439.9,235.8,439.9z"/>
<path class="st4" d="M235.8,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
S236.9,439.9,235.8,439.9z"/>
</g>
<g class="st2">
<path class="st3" d="M252.1,432.6c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8s4.8-2.2,4.8-4.8S254.6,432.6,252.1,432.6z
M252.1,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2S253.1,439.9,252.1,439.9z"/>
<path class="st4" d="M252.1,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
S253.1,439.9,252.1,439.9z"/>
</g>
<g class="st2">
<path class="st3" d="M268.4,432.6c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8S271,432.6,268.4,432.6z
M268.4,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2S269.6,439.9,268.4,439.9z"/>
<path class="st4" d="M268.4,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2S269.6,439.9,268.4,439.9z"/>
</g>
<g class="st2">
<path class="st3" d="M284.6,432.6c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8
C289.5,434.9,287.2,432.6,284.6,432.6z M284.6,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2
S286,439.9,284.6,439.9z"/>
<path class="st4" d="M284.6,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2S286,439.9,284.6,439.9z"/>
</g>
<g class="st2">
<path class="st3" d="M301,432.6c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8S303.6,432.6,301,432.6z
M301,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2S302.2,439.9,301,439.9z"/>
<path class="st4" d="M301,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2S302.2,439.9,301,439.9z"/>
</g>
<g class="st2">
<path class="st3" d="M317.2,432.6c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8
C322.1,434.9,319.9,432.6,317.2,432.6z M317.2,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
S318.6,439.9,317.2,439.9z"/>
<path class="st4" d="M317.2,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
S318.6,439.9,317.2,439.9z"/>
</g>
<g class="st2">
<path class="st3" d="M333.5,432.6c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8
C338.4,434.9,336.1,432.6,333.5,432.6z M333.5,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2
S334.8,439.9,333.5,439.9z"/>
<path class="st4" d="M333.5,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2S334.8,439.9,333.5,439.9z"/>
</g>
<g class="st2">
<path class="st3" d="M349.8,432.6c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8
C354.6,434.9,352.6,432.6,349.8,432.6z M349.8,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
C352.1,438.7,351.1,439.9,349.8,439.9z"/>
<path class="st4" d="M349.8,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
C352.1,438.7,351.1,439.9,349.8,439.9z"/>
</g>
<g class="st2">
<path class="st3" d="M366.1,432.6c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8S368.9,432.6,366.1,432.6z
M366.1,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2C368.5,438.7,367.4,439.9,366.1,439.9z"/>
<path class="st4" d="M366.1,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
C368.5,438.7,367.4,439.9,366.1,439.9z"/>
</g>
<g class="st2">
<path class="st3" d="M382.4,432.6c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8s4.8-2.2,4.8-4.8S385.1,432.6,382.4,432.6z
M382.4,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2C384.8,438.7,383.6,439.9,382.4,439.9z"/>
<path class="st4" d="M382.4,439.9c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
C384.8,438.7,383.6,439.9,382.4,439.9z"/>
</g>
</g>
<g class="st1">
<g class="st2">
<path class="st3" d="M252.1,401.4c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8s4.8-2.2,4.8-4.8S254.6,401.4,252.1,401.4z
M252.1,408.6c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2S253.1,408.6,252.1,408.6z"/>
<path class="st4" d="M252.1,408.6c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
S253.1,408.6,252.1,408.6z"/>
</g>
<g class="st2">
<path class="st3" d="M268.4,401.4c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8S271,401.4,268.4,401.4z
M268.4,408.6c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2S269.6,408.6,268.4,408.6z"/>
<path class="st4" d="M268.4,408.6c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2S269.6,408.6,268.4,408.6z"/>
</g>
<g class="st2">
<path class="st3" d="M284.6,401.4c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8S287.2,401.4,284.6,401.4z
M284.6,408.6c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2S286,408.6,284.6,408.6z"/>
<path class="st4" d="M284.6,408.6c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2S286,408.6,284.6,408.6z"/>
</g>
<g class="st2">
<path class="st3" d="M301,401.4c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8S303.6,401.4,301,401.4z
M301,408.6c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2S302.2,408.6,301,408.6z"/>
<path class="st4" d="M301,408.6c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2s2.2,1.1,2.2,2.2S302.2,408.6,301,408.6z"/>
</g>
<g class="st2">
<path class="st3" d="M317.2,401.4c-2.6,0-4.8,2.2-4.8,4.8s2.2,4.8,4.8,4.8c2.6,0,4.8-2.2,4.8-4.8S319.9,401.4,317.2,401.4z
M317.2,408.6c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2S318.6,408.6,317.2,408.6z"/>
<path class="st4" d="M317.2,408.6c-1.3,0-2.2-1.1-2.2-2.2c0-1.3,1.1-2.2,2.2-2.2c1.3,0,2.2,1.1,2.2,2.2
S318.6,408.6,317.2,408.6z"/>
</g>
</g>
<g class="st1">
<g class="st2">
<polygon class="st3" points="465.5,232 458.8,225.4 465.5,218.8 472.1,225.4 "/>
<path class="st4" d="M463.8,226.9c-0.9-0.9-0.9-2.4,0-3.3s2.4-0.9,3.3,0s0.9,2.4,0,3.3S464.8,227.8,463.8,226.9z"/>
</g>
<g class="st2">
<path class="st3" d="M478.5,230.9c-1.9-1.9-5-1.9-6.8,0s-1.9,5,0,6.8c1.9,1.9,5,1.9,6.8,0
C480.2,235.9,480.2,232.9,478.5,230.9z M473.5,236.1c-0.9-0.9-0.9-2.4,0-3.3s2.4-0.9,3.3,0s0.9,2.4,0,3.3
S474.4,237,473.5,236.1z"/>
<path class="st4" d="M473.5,236.1c-0.9-0.9-0.9-2.4,0-3.3s2.4-0.9,3.3,0s0.9,2.4,0,3.3S474.4,237,473.5,236.1z"/>
</g>
<g class="st2">
<path class="st3" d="M487.1,239.4c-1.9-1.9-5-1.9-6.8,0c-1.9,1.9-1.9,5,0,6.8c1.9,1.9,5,1.9,6.8,0S489,241.2,487.1,239.4z
M482,244.4c-0.9-0.9-0.9-2.4,0-3.3s2.4-0.9,3.3,0s0.9,2.4,0,3.3S482.9,245.4,482,244.4z"/>
<path class="st4" d="M482,244.4c-0.9-0.9-0.9-2.4,0-3.3s2.4-0.9,3.3,0s0.9,2.4,0,3.3S482.9,245.4,482,244.4z"/>
</g>
<g class="st2">
<path class="st3" d="M497,249.2c-1.9-1.9-5-1.9-6.8,0s-1.9,5,0,6.8c1.9,1.9,5,1.9,6.8,0C498.8,254.2,498.8,251.1,497,249.2z
M491.8,254.2c-0.9-0.9-0.9-2.4,0-3.3s2.4-0.9,3.3,0s0.9,2.4,0,3.3S492.6,255.1,491.8,254.2z"/>
<path class="st4" d="M491.8,254.2c-0.9-0.9-0.9-2.4,0-3.3s2.4-0.9,3.3,0s0.9,2.4,0,3.3S492.6,255.1,491.8,254.2z"/>
</g>
</g>
<g class="st1">
<g class="st2">
<polygon class="st3" points="83.5,252.4 76.9,259 70,252.4 76.9,245.5 "/>
<path class="st4" d="M78.3,253.9c-0.9,0.9-2.4,0.9-3.3,0s-0.9-2.4,0-3.3s2.4-0.9,3.3,0C79.3,251.4,79.3,252.9,78.3,253.9z"/>
</g>
<g class="st2">
<path class="st3" d="M82.4,239.2c-1.9,1.9-1.9,5,0,6.8c1.9,1.9,5,1.9,6.8,0s1.9-5,0-6.8C87.4,237.4,84.3,237.4,82.4,239.2z
M87.4,244.4c-0.9,0.9-2.4,0.9-3.3,0s-0.9-2.4,0-3.3s2.4-0.9,3.3,0S88.3,243.5,87.4,244.4z"/>
<path class="st4" d="M87.4,244.4c-0.9,0.9-2.4,0.9-3.3,0s-0.9-2.4,0-3.3s2.4-0.9,3.3,0S88.3,243.5,87.4,244.4z"/>
</g>
<g class="st2">
<path class="st3" d="M90.9,230.8c-1.9,1.9-1.9,5,0,6.8c1.9,1.9,5,1.9,6.8,0c1.9-1.9,1.9-5,0-6.8
C95.9,228.8,92.8,228.8,90.9,230.8z M95.9,235.8c-0.9,0.9-2.4,0.9-3.3,0s-0.9-2.4,0-3.3s2.4-0.9,3.3,0S96.8,234.9,95.9,235.8z
"/>
<path class="st4" d="M95.9,235.8c-0.9,0.9-2.4,0.9-3.3,0s-0.9-2.4,0-3.3s2.4-0.9,3.3,0S96.8,234.9,95.9,235.8z"/>
</g>
<g class="st2">
<path class="st3" d="M100.5,220.9c-1.9,1.9-1.9,5,0,6.8c1.9,1.9,5,1.9,6.8,0c1.9-1.9,1.9-5,0-6.8
C105.5,219,102.6,219,100.5,220.9z M105.7,225.9c-0.9,0.9-2.4,0.9-3.3,0s-0.9-2.4,0-3.3s2.4-0.9,3.3,0
C106.7,223.5,106.7,225,105.7,225.9z"/>
<path class="st4" d="M105.7,225.9c-0.9,0.9-2.4,0.9-3.3,0s-0.9-2.4,0-3.3s2.4-0.9,3.3,0C106.7,223.5,106.7,225,105.7,225.9z"
/>
</g>
</g>
</g>
</g>
</g>
</g>
<path class="st5" d="M306.1,120h-39.9c-1.6,0-2.7-1.1-2.7-2.7V86.7c0-1.6,1.1-2.7,2.7-2.7h39.9c1.6,0,2.7,1.1,2.7,2.7v30.6
C308.8,118.8,307.5,120,306.1,120z"/>
<path id="EXT_PWR" class="st6" d="M441.6,408.7l-35.4-15c-1.8-0.7-2.5-2.7-1.8-4.5l18.4-43.8c0.7-1.8,2.7-2.5,4.5-1.8l35.4,15
c1.8,0.7,2.5,2.7,1.8,4.5l-18.4,43.8C445.5,408.7,443.4,409.4,441.6,408.7z"/>
<polygon class="st6" points="429.8,353.1 408.2,344.1 411.1,337 432.8,346.1 "/>
<polygon class="st6" points="411.6,396.4 390.1,387 393,379.9 414.8,389.2 "/>
<polygon class="st7" points="370.4,375.6 343.8,375.6 343.8,327.9 370.4,327.9 "/>
<polygon class="st4" points="214,378.9 187,351.9 214,324.9 241,351.9 "/>
<polygon class="st8" points="208.2,393.5 189.9,393.4 189.9,377 208.2,377.2 "/>
<rect id="ACCEL" x="158.1" y="261.5" class="st4" width="22.8" height="13.8"/>
<path class="st5" d="M344.1,110.5h-9.9c-1,0-1.9-0.9-1.9-1.9V94c0-1,0.9-1.9,1.9-1.9h9.9c1,0,1.9,0.9,1.9,1.9v14.6
C345.9,109.6,345.1,110.5,344.1,110.5z"/>
<path class="st8" d="M343.5,101.3c0-3.1-0.3-8-4.4-8c-4.9,0-4.4,4.8-4.4,8c0,3.1-0.2,8,4.4,8C344.1,109.3,343.5,104.3,343.5,101.3z"
/>
<rect id="FLASH" x="366.5" y="116.1" class="st4" width="24.2" height="29.5"/>
<rect id="G_A0" x="108.5" y="168.2" transform="matrix(0.5687 -0.8226 0.8226 0.5687 -86.8319 190.2083)" class="st8" width="58.9" height="19.4"/>
<circle id="G_A0_GND" class="st5" cx="150.9" cy="159.8" r="2.6"/>
<circle id="G_A0_VCC" class="st5" cx="142.1" cy="171.9" r="2.6"/>
<circle id="G_A0_SDA" class="st5" cx="134.2" cy="183.2" r="2.6"/>
<circle id="G_A0_SCL" class="st5" cx="125.2" cy="196.1" r="2.6"/>
<rect id="G_A1" x="426.1" y="148" transform="matrix(0.8226 -0.5687 0.5687 0.8226 -23.5698 279.31)" class="st8" width="19.4" height="58.9"/>
<circle id="G_A1_RX" class="st5" cx="422.9" cy="159.4" r="2.6"/>
<circle id="G_A1_TX" class="st5" cx="431.8" cy="171.4" r="2.6"/>
<circle id="G_A1_VCC" class="st5" cx="439.8" cy="182.8" r="2.6"/>
<circle id="G_A1_GND" class="st5" cx="448.6" cy="195.6" r="2.6"/>
<path class="st8" d="M143.1,216.6L107,229.2l9.2,28.8l37.6-13.6c7-2.2,9.2-8.7,7-15.7l-1.2-3.6C157.4,218.4,149.9,214.4,143.1,216.6
z M157.4,237.2h-5.6v-2l1.2-0.2l-0.7-2.2h-5.5l-0.7,2.2l1.2,0.2v2h-5.6v-2l1.2-0.2l5.1-14.3h3.4l4.9,14.3l1.2,0.2L157.4,237.2
L157.4,237.2z"/>
<path class="st8" d="M425.6,214.8c-7.3-2-14.6,2.7-16.7,9.7l-1,3.6c-2,7,2,14.3,9,16.4l38.3,12.3l8.5-29.3L425.6,214.8z M427,235.9
c-1,0.9-2.6,1.2-4.4,1.2h-8.2v-2l1.7-0.3v-11.9l-1.7-0.3v-2h1.7h5.6c1.9,0,3.4,0.3,4.6,1.2c1,0.7,1.7,1.9,1.7,3.4
c0,0.7-0.2,1.5-0.7,2c-0.3,0.7-1,1-1.7,1.4c1,0.2,1.7,0.7,2.2,1.4c0.5,0.7,0.7,1.5,0.7,2.4C428.5,233.9,428,235,427,235.9z"/>
<polygon class="st8" points="149,224.1 147.2,229.9 150.9,229.9 "/>
<path class="st8" d="M424.1,226.1c0.3-0.3,0.5-0.7,0.5-1.2c0-0.7-0.2-1-0.5-1.4c-0.3-0.3-0.9-0.3-1.7-0.3h-2.9v3.4h3.1
C423.2,226.6,423.8,226.4,424.1,226.1z"/>
<path class="st8" d="M422.6,229.8h-3.2v4.8h3.1c0.9,0,1.5-0.2,2-0.5s0.7-1,0.7-1.7c0-0.9-0.2-1.4-0.5-1.9
C424.2,229.9,423.6,229.8,422.6,229.8z"/>
<rect x="103.7" y="212.2" transform="matrix(0.4514 -0.8923 0.8923 0.4514 -131.2038 215.6925)" class="st9" width="12.3" height="4.8"/>
<rect x="127.2" y="224" transform="matrix(0.4514 -0.8923 0.8923 0.4514 -128.8703 243.1748)" class="st9" width="12.3" height="4.8"/>
<rect x="82.7" y="253.5" transform="matrix(0.4514 -0.8923 0.8923 0.4514 -179.6185 219.6691)" class="st9" width="12.3" height="4.8"/>
<rect x="106.2" y="265.4" transform="matrix(0.4514 -0.8923 0.8923 0.4514 -177.2847 247.1515)" class="st9" width="12.3" height="4.8"/>
<path id="BTN_A_BOX" class="st5" d="M117.7,263.9l-28.4-14.5c-0.9-0.5-1.2-1.5-0.9-2.6l14.5-28.8c0.5-0.9,1.5-1.2,2.6-0.9l28.4,14.5
c0.9,0.5,1.2,1.5,0.9,2.6l-14.5,28.9C119.7,263.9,118.5,264.4,117.7,263.9z"/>
<circle id="BTN_A" class="st10" cx="111.6" cy="240.6" r="11.1"/>
<circle class="st4" cx="105.8" cy="222.9" r="3.7"/>
<circle class="st4" cx="129.2" cy="234.9" r="3.7"/>
<circle class="st4" cx="93.9" cy="246.2" r="3.7"/>
<circle class="st4" cx="117.4" cy="258.1" r="3.7"/>
<rect x="436.7" y="220" transform="matrix(0.8998 -0.4362 0.4362 0.8998 -54.6878 214.1812)" class="st9" width="4.8" height="12.3"/>
<rect x="460.3" y="208.5" transform="matrix(0.8998 -0.4362 0.4362 0.8998 -47.2804 223.3584)" class="st9" width="4.8" height="12.3"/>
<rect x="456.9" y="261.8" transform="matrix(0.8998 -0.4362 0.4362 0.8998 -70.8784 227.1843)" class="st9" width="4.8" height="12.3"/>
<rect x="480.5" y="250.2" transform="matrix(0.8998 -0.4362 0.4362 0.8998 -63.4362 236.3334)" class="st9" width="4.8" height="12.3"/>
<path id="BTN_B_BOX" class="st5" d="M483,249.9l-28.8,14c-0.9,0.5-2,0-2.4-0.9l-14.1-29c-0.5-0.9,0-2,0.9-2.4l28.8-14
c0.9-0.5,2,0,2.4,0.9l14.1,29C484.4,248.2,484.1,249.4,483,249.9z"/>
<circle id="BTN_B" class="st11" cx="460.9" cy="240.6" r="11.1"/>
<circle class="st4" cx="443.1" cy="234.4" r="3.7"/>
<circle class="st4" cx="466.9" cy="223" r="3.7"/>
<circle class="st4" cx="454.6" cy="258.1" r="3.7"/>
<circle class="st4" cx="478.4" cy="246.5" r="3.7"/>
<rect x="201.8" y="77.4" class="st8" width="9" height="2.2"/>
<polygon class="st8" points="367.6,77.6 367.6,73.8 365.2,73.8 365.2,77.6 361.6,77.6 361.6,79.8 365.2,79.8 365.2,83.9 367.6,83.9
367.6,79.8 371.2,79.8 371.2,77.6 "/>
<polygon class="st8" points="164.5,298.5 149.9,298.5 149.9,296.9 163.9,296.9 164.9,295.6 164.9,274.9 166.8,274.9 166.8,296.4 "/>
<polygon class="st8" points="285.6,134.1 279,134.1 279,132.3 284.8,132.3 286,131.2 286,121.8 287.6,121.8 287.6,131.9 "/>
<polygon class="st8" points="356.1,100.6 345.6,100.6 345.6,102.4 355.5,102.4 356.6,103.5 356.6,126.6 355.5,127.8 354.4,127.8
354.4,129.5 356.1,129.5 358.4,127.3 358.4,102.8 "/>
<polygon class="st8" points="324.2,338.9 296.9,338.9 296.9,337.2 323.6,337.2 324.8,336 324.8,318.4 323.6,317.2 320.6,317.2
320.6,315.5 324.2,315.5 326.5,317.8 326.5,336.9 "/>
<polygon class="st8" points="426,297.9 383.6,297.9 383.6,296.1 426.2,296.1 "/>
<polygon class="st8" points="224.1,367.9 244.6,388.6 250.6,388.6 250.6,386.9 245.4,386.9 225.2,366.6 "/>
<polygon class="st8" points="420.1,400.2 405.1,415.2 384.1,415.4 384.1,413.6 404.5,413.6 418.2,399.5 "/>
<path class="st8" d="M66.4,312.6c-0.2-0.3-0.5-0.5-0.9-0.7c-0.7-0.3-1.7-0.3-2.4,0c-0.3,0.2-0.7,0.3-0.9,0.7c-0.2,0.3-0.5,0.7-0.5,1
c-0.2,0.3-0.2,0.9-0.2,1.4v1.9c0,0.5,0,1,0.2,1.4c0.2,0.3,0.3,0.9,0.5,1c0.2,0.3,0.5,0.5,0.9,0.7c0.3,0.2,0.7,0.2,1.2,0.2
s0.9,0,1.2-0.2c0.3-0.2,0.7-0.3,0.9-0.7c0.2-0.3,0.5-0.7,0.5-1c0.2-0.3,0.2-0.9,0.2-1.4v-1.7c0-0.5,0-1-0.2-1.4
C66.8,313.4,66.6,313,66.4,312.6z M65.6,314.4l-2.6,2V315c0-0.7,0.2-1.2,0.3-1.4c0.2-0.3,0.5-0.5,1-0.5c0.3,0,0.7,0.2,0.9,0.3
C65.4,313.6,65.4,313.9,65.6,314.4z M65.6,315.9v1.4c0,0.7-0.2,1.2-0.3,1.4c-0.2,0.3-0.5,0.5-1,0.5c-0.3,0-0.7-0.2-0.9-0.3
c-0.2-0.2-0.3-0.5-0.3-0.9L65.6,315.9z"/>
<path class="st8" d="M509.3,317.2c0-0.2-0.2-0.5-0.2-0.7c-0.2-0.2-0.3-0.3-0.5-0.5l-0.2-0.2c0,0,0.2,0,0.2-0.2
c0.2-0.2,0.3-0.3,0.3-0.5c0.2-0.2,0.2-0.3,0.2-0.5s0-0.3,0-0.5c0-0.3,0-0.9-0.2-1c-0.2-0.3-0.3-0.5-0.5-0.9
c-0.2-0.2-0.5-0.3-0.9-0.5c-0.7-0.2-1.5-0.2-2.2,0c-0.3,0.2-0.7,0.3-0.9,0.5s-0.5,0.5-0.5,0.9c-0.2,0.3-0.2,0.7-0.2,1v0.2h1.5v-0.2
c0-0.2,0-0.3,0.2-0.5c0-0.2,0.2-0.2,0.2-0.3c0.2-0.2,0.2-0.2,0.3-0.2c0.2,0,0.3,0,0.5,0c0.3,0,0.7,0.2,0.9,0.3s0.3,0.5,0.3,0.9
c0,0.2,0,0.3,0,0.5s-0.2,0.2-0.2,0.3c-0.2,0.2-0.2,0.2-0.3,0.2s-0.3,0.2-0.7,0.2h-1v1.4h1c0.2,0,0.5,0,0.7,0s0.3,0.2,0.5,0.2
c0.2,0.2,0.2,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5s0,0.3-0.2,0.5c0,0.2-0.2,0.3-0.2,0.3c-0.2,0.2-0.2,0.2-0.3,0.2
c-0.3,0.2-0.9,0.2-1,0c-0.2,0-0.3-0.2-0.3-0.2c-0.2-0.2-0.2-0.2-0.2-0.3c0-0.2-0.2-0.3-0.2-0.5v-0.2h-1.5v0.2c0,0.3,0,0.7,0.2,1
s0.3,0.5,0.7,0.9c0.2,0.2,0.5,0.3,0.9,0.5c0.3,0.2,0.7,0.2,1,0.2s0.7,0,1-0.2s0.7-0.3,0.9-0.5c0.3-0.2,0.5-0.5,0.7-0.9
c0.2-0.3,0.2-0.7,0.2-1C509.4,317.8,509.4,317.4,509.3,317.2z"/>
<polygon class="st8" points="201.2,485.6 201.2,487.1 203.4,486.2 203.4,492.9 204.9,492.9 204.9,484.4 204.6,484.4 "/>
<path class="st8" d="M366.1,491.6l1.7-1.9c0.2-0.2,0.3-0.5,0.5-0.7s0.3-0.5,0.5-0.7s0.3-0.5,0.3-0.7c0.2-0.3,0.2-0.5,0.2-0.9
c0-0.3,0-0.7-0.2-1s-0.3-0.5-0.5-0.9c-0.2-0.2-0.5-0.3-0.9-0.5c-0.7-0.3-1.7-0.2-2.4,0c-0.3,0.2-0.7,0.3-0.9,0.5
c-0.2,0.2-0.5,0.5-0.5,0.9c-0.2,0.3-0.2,0.7-0.2,1v0.2h1.5v-0.2c0-0.2,0-0.5,0.2-0.7c0-0.2,0.2-0.3,0.2-0.3c0.2-0.2,0.2-0.2,0.3-0.3
c0.3-0.2,0.7-0.2,1,0c0.2,0,0.3,0.2,0.3,0.2c0.2,0.2,0.2,0.2,0.2,0.3s0,0.3,0,0.5s0,0.3,0,0.3c0,0.2-0.2,0.3-0.2,0.5
s-0.2,0.3-0.3,0.5c-0.2,0.2-0.3,0.3-0.5,0.7l-2.7,3.1v1h5.8v-1.3h-3.6v0.4H366.1z"/>
<polygon class="st8" points="302.1,300.4 297.9,300.4 297.9,293.2 296.4,293.2 296.4,301.8 302.1,301.8 "/>
<path class="st8" d="M307.2,293.2H306l-2.7,8.5h1.5l0.7-2h2.4l0.7,2h1.5l-2.7-8.3L307.2,293.2z M307.4,298.4h-1.5l0.7-2.4
L307.4,298.4z"/>
<path class="st8" d="M314.9,298.9c0,0.2,0,0.3-0.2,0.7c0,0.2-0.2,0.3-0.3,0.5c-0.2,0.2-0.2,0.3-0.3,0.3c-0.3,0.2-0.9,0.2-1.2,0
c-0.2,0-0.3-0.2-0.3-0.3c-0.2-0.2-0.2-0.3-0.3-0.5c0-0.2-0.2-0.3-0.2-0.7v-5.6h-1.5v5.6c0,0.3,0,0.9,0.2,1.2c0.2,0.3,0.3,0.7,0.5,1
s0.5,0.5,0.9,0.7s0.7,0.2,1.2,0.2c0.3,0,0.9,0,1.2-0.2c0.3-0.2,0.7-0.3,0.9-0.7c0.2-0.3,0.5-0.5,0.5-1c0.2-0.3,0.2-0.7,0.2-1.2v-5.6
h-1.8L314.9,298.9z"/>
<polygon class="st8" points="321.6,301.8 321.6,294.6 324.1,294.6 324.1,293.2 317.6,293.2 317.6,294.6 320,294.6 320,301.8 "/>
<path class="st8" d="M327.6,301.9c0.3,0,0.7,0,1-0.2s0.7-0.2,1-0.5c0.3-0.2,0.5-0.5,0.7-0.7c0.2-0.3,0.3-0.7,0.3-1s0-0.5-0.2-0.7
c0-0.2-0.2-0.3-0.3-0.7c-0.2-0.2-0.3-0.3-0.5-0.5s-0.3-0.3-0.5-0.3c-0.2-0.2-0.3-0.2-0.7-0.3c-0.2,0-0.3-0.2-0.7-0.2
c-0.2,0-0.3-0.2-0.5-0.2s-0.3-0.2-0.5-0.2c-0.2-0.2-0.3-0.2-0.3-0.3c-0.2-0.2-0.2-0.3-0.2-0.5s0-0.3,0.2-0.5c0-0.2,0.2-0.2,0.3-0.3
c0.2-0.2,0.3-0.2,0.3-0.2c0.3-0.2,0.7-0.2,1,0c0.2,0,0.3,0.2,0.3,0.3c0.2,0.2,0.2,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5v0.2h1.5v-0.3
c0-0.3-0.2-0.9-0.3-1.2c-0.2-0.3-0.3-0.7-0.7-0.9c-0.3-0.2-0.5-0.3-1-0.5c-0.7-0.2-1.4-0.2-2,0c-0.3,0.2-0.7,0.3-0.9,0.5
c-0.3,0.2-0.5,0.5-0.7,0.9s-0.3,0.7-0.3,1s0.2,0.7,0.3,1c0.2,0.3,0.3,0.5,0.7,0.7c0.3,0.2,0.5,0.3,0.9,0.5c0.3,0.2,0.5,0.2,0.9,0.3
c0.2,0,0.3,0.2,0.7,0.2c0.2,0,0.3,0.2,0.5,0.3c0.2,0.2,0.3,0.2,0.3,0.3c0.2,0.2,0.2,0.3,0.2,0.5s0,0.3-0.2,0.5
c0,0.2-0.2,0.2-0.3,0.3c-0.2,0.2-0.3,0.2-0.5,0.2c-0.3,0.2-0.9,0-1.2,0c-0.2,0-0.3-0.2-0.5-0.3c-0.2-0.2-0.2-0.2-0.3-0.3
c-0.2-0.2-0.2-0.3-0.2-0.5v-0.2h-1.2v0.3c0,0.3,0.2,0.9,0.3,1.2c0.2,0.3,0.5,0.7,0.7,0.9c0.3,0.2,0.7,0.3,1,0.5
C327,301.8,327.4,301.9,327.6,301.9z"/>
<path class="st8" d="M333.6,298.5h1.4c0.3,0,0.7,0,1-0.2s0.7-0.3,0.9-0.5c0.3-0.2,0.5-0.5,0.7-0.9c0.2-0.3,0.2-0.7,0.2-1.2
c0-0.3,0-0.9-0.2-1.2c-0.2-0.3-0.3-0.7-0.7-0.9c-0.3-0.2-0.5-0.3-0.9-0.5c-0.3-0.2-0.7-0.2-1-0.2h-2.9v8.5h1.5V298.5z M336.1,296.9
c-0.2,0.2-0.3,0.2-0.5,0.3c-0.2,0-0.3,0.2-0.5,0.2h-1.4v-2.6h1.4c0.2,0,0.3,0,0.5,0.2c0.2,0,0.3,0.2,0.5,0.3
c0.2,0.2,0.2,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5s0,0.3-0.2,0.5C336.1,296.6,336.1,296.6,336.1,296.9z"/>
<path class="st8" d="M340.2,298.5h1.2l1.5,3.1v0.2h1.5v-0.3l-1.7-3.2c0.2,0,0.3-0.2,0.3-0.3c0.2-0.2,0.3-0.3,0.5-0.5
s0.3-0.3,0.3-0.7c0.2-0.2,0.2-0.5,0.2-0.9c0-0.5,0-0.9-0.2-1.2c-0.2-0.3-0.3-0.7-0.7-0.9c-0.3-0.2-0.5-0.3-1-0.5
c-0.3-0.2-0.7-0.2-1.2-0.2h-2.6v8.5h1.5v-3.1H340.2z M342.9,296.4c0,0.2-0.2,0.3-0.3,0.3c-0.2,0.2-0.3,0.2-0.5,0.2s-0.3,0.2-0.5,0.2
h-1.2v-2.6h1c0.2,0,0.3,0,0.7,0.2c0.2,0,0.3,0.2,0.5,0.2c0.2,0.2,0.2,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5
C342.9,296.1,342.9,296.4,342.9,296.4z"/>
<polygon class="st8" points="351,300.4 347.1,300.4 347.1,298 350.5,298 350.5,296.6 347.1,296.6 347.1,294.6 351,294.6 351,293.2
345.6,293.2 345.6,301.8 351,301.8 "/>
<path class="st8" d="M356.6,299c0,0.2,0,0.5-0.2,0.7c0,0.2-0.2,0.3-0.3,0.5c-0.2,0.2-0.2,0.2-0.3,0.3c-0.3,0.2-0.9,0.2-1.2,0
c-0.2,0-0.3-0.2-0.3-0.3c-0.2-0.2-0.2-0.2-0.3-0.3c0-0.2-0.2-0.3-0.2-0.5s-0.2-0.3-0.2-0.5s0-0.3,0-0.5v-1.3c0-0.2,0-0.3,0-0.5
s0-0.3,0.2-0.5s0.2-0.3,0.2-0.5s0.2-0.3,0.3-0.3c0.2-0.2,0.2-0.2,0.3-0.3c0.3-0.2,0.9-0.2,1.2,0c0.2,0,0.3,0.2,0.3,0.3
c0.2,0.2,0.2,0.3,0.3,0.5c0,0.2,0.2,0.3,0.2,0.7v0.2h1.5v-0.3c0-0.3-0.2-0.9-0.3-1.2s-0.3-0.7-0.7-0.9c-0.2-0.2-0.5-0.5-0.9-0.5
c-0.7-0.2-1.5-0.3-2.2,0c-0.3,0.2-0.5,0.2-0.9,0.5c-0.2,0.2-0.5,0.3-0.7,0.7c-0.2,0.2-0.3,0.5-0.3,0.9c-0.2,0.3-0.2,0.5-0.2,0.9
s0,0.7,0,0.9v1.2c0,0.3,0,0.7,0,0.9c0,0.3,0.2,0.7,0.2,0.9c0.2,0.3,0.2,0.5,0.3,0.9c0.2,0.2,0.3,0.5,0.7,0.7
c0.2,0.2,0.5,0.3,0.9,0.5c0.3,0.2,0.7,0.2,1,0.2s0.9,0,1.2-0.2c0.3-0.2,0.7-0.3,0.9-0.5c0.2-0.2,0.5-0.5,0.7-0.9
c0.2-0.3,0.3-0.7,0.3-1v-0.3h-1.5V299z"/>
<polygon class="st8" points="363.2,296.6 360.4,296.6 360.4,293.2 359,293.2 359,301.8 360.4,301.8 360.4,298 363.2,298
363.2,301.8 364.6,301.8 364.6,293.2 363.2,293.2 "/>
<polygon class="st8" points="367.6,298 371,298 371,296.6 367.6,296.6 367.6,294.6 371.5,294.6 371.5,293.2 366,293.2 366,301.8
371.5,301.8 371.5,300.4 367.6,300.4 "/>
<path class="st8" d="M377.4,297.9c0.2-0.2,0.3-0.3,0.5-0.5s0.3-0.3,0.3-0.7c0-0.2,0.2-0.5,0.2-0.9c0-0.5,0-0.9-0.2-1.2
c-0.2-0.3-0.3-0.7-0.7-0.9c-0.3-0.2-0.5-0.3-1-0.5c-0.3-0.2-0.7-0.2-1.2-0.2h-2.6v8.5h1.5v-3.2h1.2l1.5,3.1v0.2h1.5v-0.3l-1.7-3.2
C377.1,298,377.2,298,377.4,297.9z M376.9,295.9c0,0.2,0,0.3-0.2,0.5c0,0.2-0.2,0.3-0.3,0.3c-0.2,0.2-0.3,0.2-0.5,0.2
s-0.3,0.2-0.5,0.2h-1.2v-2.6h1c0.2,0,0.5,0,0.7,0.2c0.2,0,0.3,0.2,0.5,0.2c0.2,0.2,0.2,0.2,0.3,0.3
C376.8,295.4,376.9,295.6,376.9,295.9z"/>
<polygon class="st8" points="79.5,293.2 78,293.2 78,301.8 83.5,301.8 83.5,300.4 79.5,300.4 "/>
<path class="st8" d="M86.9,293.2l-2.7,8.5h1.5l0.7-2h2.4l0.7,2H91l-2.7-8.5H86.9z M88.2,298.4h-1.5l0.7-2.4L88.2,298.4z"/>
<path class="st8" d="M92.7,296.4c0-0.2,0-0.3,0.2-0.5c0-0.2,0.2-0.3,0.2-0.5s0.2-0.3,0.3-0.3c0.2-0.2,0.3-0.2,0.3-0.3
c0.3-0.2,0.9-0.2,1.2,0c0.2,0,0.3,0.2,0.3,0.3c0.2,0.2,0.2,0.3,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5v0.2h1.5v-0.3c0-0.3-0.2-0.9-0.3-1
c-0.2-0.3-0.3-0.7-0.7-0.9c-0.3-0.2-0.5-0.3-0.9-0.5c-0.7-0.2-1.5-0.3-2,0c-0.3,0.2-0.5,0.3-0.9,0.5c-0.2,0.2-0.5,0.3-0.7,0.7
c-0.2,0.2-0.3,0.5-0.3,0.9c-0.2,0.3-0.2,0.7-0.2,0.9c0,0.3,0,0.7,0,0.9v0.9c0,0.3,0,0.7,0.2,1c0,0.3,0.2,0.7,0.3,0.9
c0.2,0.3,0.3,0.5,0.5,0.9s0.3,0.5,0.7,0.7c0.2,0.2,0.5,0.3,0.9,0.5c0.3,0.2,0.7,0.2,1,0.2l0,0c0.5,0,1-0.2,1.5-0.3s0.9-0.5,1.2-1
l0,0V298h-3.1v1.4h1.7v1.5l-0.2,0.2c-0.2,0-0.2,0.2-0.3,0.2c-0.2,0-0.3,0-0.3,0c-0.2,0-0.2,0-0.3,0h-0.2c-0.2,0-0.3,0-0.5-0.2
c-0.2,0-0.3-0.2-0.5-0.3c-0.2-0.2-0.2-0.3-0.3-0.3c-0.2-0.2-0.2-0.3-0.2-0.5s-0.2-0.3-0.2-0.5s0-0.3,0-0.5v-1
C92.7,296.9,92.7,296.6,92.7,296.4z M94.4,301.6L94.4,301.6L94.4,301.6L94.4,301.6z"/>
<polygon class="st8" points="99.8,298 103.2,298 103.2,296.6 99.8,296.6 99.8,294.6 103.7,294.6 103.7,293.2 98.3,293.2 98.3,301.8
103.7,301.8 103.7,300.4 99.8,300.4 "/>
<path class="st8" d="M110.4,298.2c-0.2-0.2-0.3-0.3-0.5-0.5s-0.3-0.3-0.5-0.3c-0.2-0.2-0.3-0.2-0.7-0.3c-0.2,0-0.3-0.2-0.7-0.2
c-0.2,0-0.3-0.2-0.5-0.2s-0.3-0.2-0.5-0.2c-0.2-0.2-0.3-0.2-0.3-0.3s-0.2-0.3-0.2-0.5s0-0.3,0.2-0.5c0-0.2,0.2-0.2,0.3-0.3
c0.2-0.2,0.3-0.2,0.3-0.2c0.3-0.2,0.7-0.2,1,0c0.2,0,0.3,0.2,0.3,0.3c0.2,0.2,0.2,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5v0.2h1.5v-0.3
c0-0.3-0.2-0.9-0.3-1.2s-0.3-0.7-0.7-0.9c-0.3-0.2-0.5-0.3-1-0.5c-0.7-0.2-1.4-0.2-2,0c-0.3,0.2-0.7,0.3-0.9,0.5
c-0.3,0.2-0.5,0.5-0.7,0.9s-0.3,0.7-0.3,1s0.2,0.7,0.3,1c0.2,0.3,0.3,0.5,0.7,0.7c0.3,0.2,0.5,0.3,0.9,0.5c0.3,0.2,0.5,0.2,0.9,0.3
c0.2,0,0.3,0.2,0.7,0.2c0.2,0,0.3,0.2,0.5,0.3c0.2,0.2,0.3,0.2,0.3,0.3c0.2,0.2,0.2,0.3,0.2,0.5s0,0.3-0.2,0.5
c0,0.2-0.2,0.2-0.3,0.3c-0.2,0.2-0.3,0.2-0.5,0.2c-0.3,0.2-0.9,0-1.2,0c-0.2,0-0.3-0.2-0.5-0.3c-0.2-0.2-0.2-0.2-0.3-0.3
c-0.2-0.2-0.2-0.3-0.2-0.5V299h-1.6v0.3c0,0.3,0.2,0.9,0.3,1.2c0.2,0.3,0.5,0.7,0.7,0.9c0.3,0.2,0.7,0.3,1,0.5s0.7,0.2,1.2,0.2
c0.3,0,0.7,0,1-0.2s0.7-0.2,1-0.5c0.3-0.2,0.5-0.5,0.7-0.7c0.2-0.3,0.3-0.7,0.3-1s0-0.5-0.2-0.7
C110.7,298.5,110.5,298.4,110.4,298.2z"/>
<polygon class="st8" points="113.4,298 116.8,298 116.8,296.6 113.4,296.6 113.4,294.6 117.4,294.6 117.4,293.2 111.9,293.2
111.9,301.8 117.4,301.8 117.4,300.4 113.4,300.4 "/>
<polygon class="st8" points="122.6,298.4 119.9,293.2 118.5,293.2 118.5,301.8 120.1,301.8 120.1,296.4 122.8,301.8 124.2,301.8
124.2,293.2 122.6,293.2 "/>
<path class="st8" d="M130.8,298.2c-0.2-0.2-0.3-0.3-0.5-0.5s-0.3-0.3-0.5-0.3c-0.2-0.2-0.3-0.2-0.7-0.3c-0.2,0-0.3-0.2-0.7-0.2
c-0.2,0-0.3-0.2-0.5-0.2s-0.3-0.2-0.5-0.2c-0.2-0.2-0.3-0.2-0.3-0.3s-0.2-0.3-0.2-0.5s0-0.3,0.2-0.5c0-0.2,0.2-0.2,0.3-0.3
c0.2-0.2,0.3-0.2,0.3-0.2c0.3-0.2,0.7-0.2,1,0c0.2,0,0.3,0.2,0.3,0.3c0.2,0.2,0.2,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5v0.2h1.5v-0.3
c0-0.3-0.2-0.9-0.3-1.2c-0.2-0.3-0.3-0.7-0.7-0.9c-0.3-0.2-0.5-0.3-1-0.5c-0.7-0.2-1.4-0.2-2,0c-0.3,0.2-0.7,0.3-0.9,0.5
c-0.3,0.2-0.5,0.5-0.7,0.9s-0.3,0.7-0.3,1s0.2,0.7,0.3,1c0.2,0.3,0.3,0.5,0.7,0.7c0.3,0.2,0.5,0.3,0.9,0.5c0.3,0.2,0.5,0.2,0.9,0.3
c0.2,0,0.3,0.2,0.7,0.2c0.2,0,0.3,0.2,0.5,0.3c0.2,0.2,0.3,0.2,0.3,0.3c0.2,0.2,0.2,0.3,0.2,0.5s0,0.3-0.2,0.5
c0,0.2-0.2,0.2-0.3,0.3c-0.2,0.2-0.3,0.2-0.5,0.2c-0.3,0.2-0.9,0-1.2,0c-0.2,0-0.3-0.2-0.5-0.3c-0.2-0.2-0.2-0.2-0.3-0.3
c-0.2-0.2-0.2-0.3-0.2-0.5V299h-1.5v0.3c0,0.3,0.2,0.9,0.3,1.2c0.2,0.3,0.5,0.7,0.7,0.9c0.3,0.2,0.7,0.3,1,0.5s0.7,0.2,1.2,0.2
c0.3,0,0.7,0,1-0.2s0.7-0.2,1-0.5c0.3-0.2,0.5-0.5,0.7-0.7c0.2-0.3,0.3-0.7,0.3-1s0-0.5-0.2-0.7C131,298.5,131,298.4,130.8,298.2z"
/>
<path class="st8" d="M137.6,295.4c-0.2-0.3-0.2-0.5-0.3-0.9c-0.2-0.3-0.3-0.5-0.5-0.7s-0.5-0.3-0.9-0.5c-0.5-0.2-1.4-0.2-2,0
c-0.3,0.2-0.5,0.3-0.9,0.5c-0.2,0.2-0.3,0.3-0.5,0.7c-0.2,0.3-0.3,0.5-0.3,0.9c-0.2,0.3-0.2,0.5-0.2,0.9s0,0.7,0,0.9v0.9
c0,0.3,0,0.7,0,0.9c0,0.3,0.2,0.7,0.2,0.9c0.2,0.3,0.2,0.5,0.3,0.9s0.3,0.5,0.5,0.7s0.5,0.3,0.9,0.5c0.3,0.2,0.7,0.2,1,0.2
s0.7,0,1-0.2s0.5-0.3,0.9-0.5c0.2-0.2,0.3-0.3,0.5-0.7c0.2-0.3,0.3-0.5,0.3-0.9c0.2-0.3,0.2-0.5,0.2-0.9c0-0.3,0-0.7,0-0.9v-0.9
c0-0.3,0-0.7,0-0.9C137.8,295.9,137.8,295.4,137.6,295.4z M136.4,297v0.9c0,0.2,0,0.3,0,0.5s0,0.3-0.2,0.5c0,0.2-0.2,0.3-0.2,0.5
s-0.2,0.3-0.3,0.3c-0.2,0.2-0.2,0.2-0.3,0.3c-0.3,0.2-0.7,0.2-1,0c-0.2,0-0.3-0.2-0.3-0.3c-0.2-0.2-0.2-0.3-0.3-0.5
c0-0.2-0.2-0.3-0.2-0.5s-0.2-0.3-0.2-0.5s0-0.3,0-0.5v-0.9c0-0.2,0-0.3,0-0.5s0-0.3,0.2-0.5c0-0.2,0.2-0.3,0.2-0.5s0.2-0.3,0.3-0.5
c0.2-0.2,0.2-0.2,0.3-0.3c0.2,0,0.3-0.2,0.5-0.2s0.3,0,0.5,0.2c0.2,0,0.3,0.2,0.3,0.3c0.2,0.2,0.2,0.3,0.3,0.3
c0,0.2,0.2,0.3,0.2,0.5s0.2,0.3,0.2,0.5C136.4,296.6,136.4,296.9,136.4,297z"/>
<path class="st8" d="M143.6,297.9c0.2-0.2,0.3-0.3,0.5-0.5s0.3-0.3,0.3-0.7c0-0.2,0.2-0.5,0.2-0.9c0-0.5,0-0.9-0.2-1.2
s-0.3-0.7-0.7-0.9c-0.3-0.2-0.5-0.3-1-0.5c-0.3-0.2-0.7-0.2-1.2-0.2h-2.6v8.5h1.5v-3.2h1.2l1.5,3.2h1.5v-0.3l-1.7-3.2
C143.4,298,143.6,298,143.6,297.9z M143.1,295.9c0,0.2,0,0.3-0.2,0.5c0,0.2-0.2,0.3-0.3,0.3c-0.2,0.2-0.3,0.2-0.5,0.2
s-0.3,0.2-0.5,0.2h-1.2v-2.6h1c0.2,0,0.3,0,0.7,0.2c0.2,0,0.3,0.2,0.5,0.2c0.2,0.2,0.2,0.2,0.3,0.3
C143.1,295.4,143.1,295.6,143.1,295.9z"/>
<path class="st8" d="M260.6,384.5c-0.3-0.2-0.5-0.3-0.9-0.5c-0.3-0.2-0.7-0.2-1-0.2h-2.9v8.5h1.5v-3.2h1.4c0.3,0,0.7,0,1-0.2
s0.7-0.3,0.9-0.5c0.3-0.2,0.5-0.5,0.7-0.9c0.2-0.3,0.2-0.7,0.2-1.2c0-0.3,0-0.9-0.2-1.2C261.1,385,260.9,384.8,260.6,384.5z
M260.1,386.5c0,0.2,0,0.3-0.2,0.5c0,0.2-0.2,0.3-0.3,0.3c-0.2,0.2-0.3,0.2-0.5,0.3c-0.2,0-0.3,0.2-0.5,0.2h-1.4v-2.6h1.4
c0.2,0,0.3,0,0.5,0.2c0.2,0,0.3,0.2,0.5,0.3c0.2,0.2,0.2,0.2,0.3,0.3C259.9,386,260.1,386.2,260.1,386.5z"/>
<path class="st8" d="M267.1,388.4c0.2-0.2,0.3-0.3,0.5-0.5s0.3-0.3,0.3-0.7c0-0.2,0.2-0.5,0.2-0.9c0-0.5,0-0.9-0.2-1.2
c-0.2-0.3-0.3-0.7-0.7-0.9c-0.3-0.2-0.5-0.3-1-0.5c-0.3-0.2-0.7-0.2-1.2-0.2h-2.6v8.5h1.5v-3.2h1.2l1.5,3.2h1.5v-0.3l-1.7-3.2
C266.9,388.6,266.9,388.6,267.1,388.4z M266.6,386.5c0,0.2,0,0.3-0.2,0.5c0,0.2-0.2,0.3-0.3,0.3c-0.2,0.2-0.3,0.2-0.5,0.2
s-0.3,0.2-0.5,0.2h-1.2v-2.6h1c0.2,0,0.3,0,0.7,0.2c0.2,0,0.3,0.2,0.5,0.2c0.2,0.2,0.2,0.2,0.3,0.3
C266.6,386,266.6,386.2,266.6,386.5z"/>
<path class="st8" d="M274.6,385.9c-0.2-0.3-0.2-0.5-0.3-0.9c-0.2-0.2-0.3-0.5-0.5-0.7s-0.5-0.3-0.9-0.5c-0.7-0.2-1.4-0.2-2,0
c-0.3,0.2-0.5,0.3-0.9,0.5c-0.2,0.2-0.3,0.3-0.5,0.7c-0.2,0.3-0.3,0.5-0.3,0.9c-0.2,0.3-0.2,0.5-0.2,0.9s0,0.5,0,0.9v0.9
c0,0.3,0,0.7,0,0.9c0,0.3,0.2,0.7,0.2,0.9c0.2,0.3,0.2,0.5,0.3,0.9c0.2,0.3,0.3,0.5,0.5,0.7s0.5,0.3,0.9,0.5c0.3,0.2,0.7,0.2,1,0.2
s0.7,0,1-0.2s0.5-0.3,0.9-0.5c0.2-0.2,0.3-0.3,0.5-0.7c0.2-0.3,0.3-0.5,0.3-0.9c0.2-0.3,0.2-0.5,0.2-0.9c0-0.3,0-0.7,0-0.9v-0.9
c0-0.3,0-0.5,0-0.9S274.6,386.2,274.6,385.9z M273.5,387.6v0.9c0,0.2,0,0.3,0,0.5s0,0.3-0.2,0.5c0,0.2-0.2,0.3-0.2,0.5
s-0.2,0.3-0.3,0.5c-0.2,0.2-0.2,0.2-0.3,0.3c-0.3,0.2-0.7,0.2-1,0c-0.2,0-0.3-0.2-0.3-0.3c-0.2-0.2-0.2-0.3-0.3-0.5
c0-0.2-0.2-0.3-0.2-0.5s-0.2-0.3-0.2-0.5s0-0.3,0-0.5v-0.9c0-0.2,0-0.3,0-0.5s0-0.3,0.2-0.5c0-0.2,0.2-0.3,0.2-0.5s0.2-0.3,0.3-0.5
c0.2-0.2,0.2-0.2,0.3-0.3c0.2,0,0.3-0.2,0.5-0.2s0.3,0,0.5,0.2c0.2,0,0.3,0.2,0.3,0.3c0.2,0.2,0.2,0.3,0.3,0.3
c0,0.2,0.2,0.3,0.2,0.5s0,0.3,0.2,0.5C273.5,387.2,273.5,387.4,273.5,387.6z"/>
<polygon class="st8" points="281.4,385 281.4,384.9 281.4,383.9 275.8,383.9 275.8,385.2 279.5,385.2 275.8,391.1 275.8,391.4
275.8,392.4 281.5,392.4 281.5,391 277.6,391 "/>
<polygon class="st8" points="284.4,388.6 287.9,388.6 287.9,387.2 284.4,387.2 284.4,385.2 288.4,385.2 288.4,383.9 282.9,383.9
282.9,392.4 288.4,392.4 288.4,391 284.4,391 "/>
<path class="st8" d="M295,388.9c-0.2-0.2-0.3-0.3-0.5-0.5s-0.3-0.3-0.5-0.3c-0.2-0.2-0.3-0.2-0.7-0.3c-0.2,0-0.3-0.2-0.7-0.2
c-0.2,0-0.3-0.2-0.5-0.2s-0.3-0.2-0.5-0.2c-0.2-0.2-0.3-0.2-0.3-0.3s-0.2-0.3-0.2-0.5s0-0.3,0.2-0.5c0-0.2,0.2-0.2,0.3-0.3
c0.2-0.2,0.3-0.2,0.3-0.2c0.3-0.2,0.7-0.2,1,0c0.2,0,0.3,0.2,0.3,0.3c0.2,0.2,0.2,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5v0.2h1.5v-0.3
c0-0.3-0.2-0.9-0.3-1.2c-0.2-0.3-0.3-0.7-0.7-0.9c-0.3-0.2-0.5-0.3-1-0.5c-0.7-0.2-1.4-0.2-2,0c-0.3,0.2-0.7,0.3-0.9,0.5
c-0.3,0.2-0.5,0.5-0.7,0.9s-0.3,0.7-0.3,1s0.2,0.7,0.3,1c0.2,0.3,0.3,0.5,0.7,0.7s0.5,0.3,0.9,0.5c0.3,0.2,0.5,0.2,0.9,0.3
c0.2,0,0.3,0.2,0.7,0.2c0.2,0,0.3,0.2,0.5,0.3c0.2,0.2,0.3,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5s0,0.3-0.2,0.5c0,0.2-0.2,0.2-0.3,0.3
s-0.3,0.2-0.5,0.2c-0.3,0.2-0.9,0-1.2,0c-0.2,0-0.3-0.2-0.5-0.3c-0.2-0.2-0.2-0.2-0.3-0.3c-0.2-0.2-0.2-0.3-0.2-0.5v-0.2H289v0.3
c0,0.3,0.2,0.9,0.3,1.2c0.2,0.3,0.5,0.7,0.7,0.9c0.3,0.2,0.7,0.3,1,0.5s0.7,0.2,1.2,0.2c0.3,0,0.7,0,1-0.2s0.7-0.2,1-0.5
c0.3-0.2,0.5-0.5,0.7-0.7c0.2-0.3,0.3-0.7,0.3-1s0-0.5-0.2-0.7C295.1,389.1,295.1,388.9,295,388.9z"/>
<path class="st8" d="M301.8,388.9c-0.2-0.2-0.3-0.3-0.5-0.5s-0.3-0.3-0.5-0.3c-0.2-0.2-0.3-0.2-0.7-0.3c-0.2,0-0.3-0.2-0.7-0.2
c-0.2,0-0.3-0.2-0.5-0.2s-0.3-0.2-0.5-0.2c-0.2-0.2-0.3-0.2-0.3-0.3s-0.2-0.3-0.2-0.5s0-0.3,0.2-0.5c0-0.2,0.2-0.2,0.3-0.3
c0.2-0.2,0.2-0.2,0.3-0.2c0.3-0.2,0.7-0.2,1,0c0.2,0,0.3,0.2,0.3,0.3c0.2,0.2,0.2,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5v0.2h1.5v-0.3
c0-0.3-0.2-0.9-0.3-1.2c-0.2-0.3-0.3-0.7-0.7-0.9c-0.3-0.2-0.5-0.3-1-0.5c-0.7-0.2-1.4-0.2-2,0c-0.3,0.2-0.7,0.3-0.9,0.5
c-0.3,0.2-0.5,0.5-0.7,0.9c-0.2,0.3-0.3,0.7-0.3,1s0.2,0.7,0.3,1c0.2,0.3,0.3,0.5,0.7,0.7s0.5,0.3,0.9,0.5c0.3,0.2,0.5,0.2,0.9,0.3
c0.2,0,0.3,0.2,0.7,0.2c0.2,0,0.3,0.2,0.5,0.3c0.2,0.2,0.3,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5s0,0.3-0.2,0.5c0,0.2-0.2,0.2-0.3,0.3
s-0.3,0.2-0.5,0.2c-0.3,0.2-0.9,0-1.2,0c-0.2,0-0.3-0.2-0.5-0.3c-0.2-0.2-0.2-0.2-0.3-0.3c-0.2-0.2-0.2-0.3-0.2-0.5v-0.2h-1.5v0.3
c0,0.3,0.2,0.9,0.3,1.2s0.5,0.7,0.7,0.9c0.3,0.2,0.7,0.3,1,0.5s0.7,0.2,1.2,0.2c0.3,0,0.7,0,1-0.2s0.7-0.2,1-0.5
c0.3-0.2,0.5-0.5,0.7-0.7c0.2-0.3,0.3-0.7,0.3-1s0-0.5-0.2-0.7C302,389.1,302,388.9,301.8,388.9z"/>
<path class="st8" d="M308.6,385.9c-0.2-0.3-0.2-0.5-0.3-0.9c-0.2-0.2-0.3-0.5-0.5-0.7s-0.5-0.3-0.9-0.5c-0.5-0.2-1.4-0.2-2,0
c-0.3,0.2-0.5,0.3-0.9,0.5c-0.2,0.2-0.3,0.3-0.5,0.7c-0.2,0.3-0.3,0.5-0.3,0.9c-0.2,0.3-0.2,0.5-0.2,0.9s0,0.7,0,0.9v0.9
c0,0.3,0,0.7,0,0.9c0,0.3,0.2,0.7,0.2,0.9c0.2,0.3,0.2,0.5,0.3,0.9c0.2,0.3,0.3,0.5,0.5,0.7s0.5,0.3,0.9,0.5s0.7,0.2,1,0.2
s0.7,0,1-0.2s0.5-0.3,0.9-0.5c0.2-0.2,0.3-0.3,0.5-0.7c0.2-0.3,0.3-0.5,0.3-0.9c0.2-0.3,0.2-0.5,0.2-0.9c0-0.3,0-0.7,0-0.9v-0.9
c0-0.3,0-0.7,0-0.9C308.8,386.4,308.8,386.2,308.6,385.9z M307.4,387.6v0.9c0,0.2,0,0.3,0,0.5s0,0.3-0.2,0.5c0,0.2-0.2,0.3-0.2,0.5
s-0.2,0.3-0.3,0.3c-0.2,0.2-0.2,0.2-0.3,0.3c-0.3,0.2-0.7,0.2-1,0c-0.2,0-0.3-0.2-0.3-0.3c-0.2-0.2-0.2-0.3-0.3-0.5
c0-0.2-0.2-0.3-0.2-0.5s-0.2-0.3-0.2-0.5s0-0.3,0-0.5v-0.9c0-0.2,0-0.3,0-0.5s0-0.3,0.2-0.5c0-0.2,0.2-0.3,0.2-0.5s0.2-0.3,0.3-0.5
c0.2-0.2,0.2-0.2,0.3-0.3c0.2,0,0.3-0.2,0.5-0.2s0.3,0,0.5,0.2c0.2,0,0.3,0.2,0.3,0.3c0.2,0.2,0.2,0.3,0.3,0.3
c0,0.2,0.2,0.3,0.2,0.5s0.2,0.3,0.2,0.5C307.4,387.2,307.4,387.4,307.4,387.6z"/>
<path class="st8" d="M314.6,388.4c0.2-0.2,0.3-0.3,0.5-0.5s0.3-0.3,0.3-0.7c0.2-0.2,0.2-0.5,0.2-0.9c0-0.5,0-0.9-0.2-1.2
c-0.2-0.3-0.3-0.7-0.7-0.9c-0.3-0.2-0.5-0.3-1-0.5c-0.3-0.2-0.7-0.2-1.2-0.2h-2.6v8.5h1.5v-3.2h1.2l1.5,3.1v0.2h1.5v-0.3l-1.7-3.2
C314.4,388.6,314.4,388.6,314.6,388.4z M314.1,386.5c0,0.2,0,0.3-0.2,0.5c0,0.2-0.2,0.3-0.3,0.3c-0.2,0.2-0.3,0.2-0.5,0.2
s-0.3,0.2-0.5,0.2h-1.2v-2.6h1c0.2,0,0.3,0,0.7,0.2c0.2,0,0.3,0.2,0.5,0.2c0.2,0.2,0.2,0.2,0.3,0.3
C314.1,386,314.1,386.2,314.1,386.5z"/>
<path class="st8" d="M260.4,129.2h-1.5v5.6c0,0.2,0,0.3-0.2,0.7c0,0.2-0.2,0.3-0.3,0.5c-0.2,0.2-0.2,0.3-0.3,0.3
c-0.3,0.2-0.9,0.2-1.2,0c-0.2,0-0.3-0.2-0.3-0.3c-0.2-0.2-0.2-0.3-0.3-0.5c0-0.2-0.2-0.3-0.2-0.7v-5.6h-1.2v5.6c0,0.3,0,0.9,0.2,1.2
s0.3,0.7,0.5,1s0.5,0.5,0.9,0.7c0.3,0.2,0.7,0.2,1.2,0.2c0.3,0,0.9,0,1.2-0.2c0.3-0.2,0.7-0.3,0.9-0.7c0.2-0.3,0.5-0.5,0.5-1
c0.2-0.3,0.2-0.7,0.2-1.2L260.4,129.2z"/>
<path class="st8" d="M267.4,135.5c0-0.3,0-0.5-0.2-0.7c0-0.2-0.2-0.3-0.3-0.7c-0.2-0.2-0.3-0.3-0.5-0.5s-0.3-0.3-0.5-0.3
c-0.2-0.2-0.3-0.2-0.7-0.3c-0.2,0-0.3-0.2-0.7-0.2c-0.2,0-0.3-0.2-0.5-0.2s-0.3-0.2-0.5-0.2c-0.2-0.2-0.3-0.2-0.3-0.3
s-0.2-0.3-0.2-0.5s0-0.3,0.2-0.5c0-0.2,0.2-0.2,0.3-0.3c0.2-0.2,0.3-0.2,0.3-0.2c0.3-0.2,0.7-0.2,1,0c0.2,0,0.3,0.2,0.3,0.3
c0.2,0.2,0.2,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5v0.2h1.5v-0.3c0-0.3-0.2-0.9-0.3-1.2c-0.2-0.3-0.3-0.7-0.7-0.9s-0.5-0.3-1-0.5
c-0.7-0.2-1.4-0.2-2,0c-0.3,0.2-0.7,0.3-0.9,0.5c-0.3,0.2-0.5,0.5-0.7,0.9c-0.2,0.3-0.3,0.7-0.3,1s0.2,0.7,0.3,1
c0.2,0.3,0.3,0.5,0.7,0.7c0.3,0.2,0.5,0.3,0.9,0.5c0.3,0.2,0.5,0.2,0.9,0.3c0.2,0,0.3,0.2,0.7,0.2c0.2,0,0.3,0.2,0.5,0.3
c0.2,0.2,0.3,0.2,0.3,0.3s0.2,0.3,0.2,0.5s0,0.3-0.2,0.5c0,0.2-0.2,0.2-0.3,0.3c-0.2,0.2-0.3,0.2-0.5,0.2c-0.3,0.2-0.9,0-1.2,0
c-0.2,0-0.3-0.2-0.5-0.3c-0.2-0.2-0.2-0.2-0.3-0.3s-0.2-0.3-0.2-0.5v-0.2h-1.5v0.3c0,0.3,0.2,0.9,0.3,1.2c0.2,0.3,0.5,0.7,0.7,0.9
c0.3,0.2,0.7,0.3,1,0.5s0.7,0.2,1.2,0.2c0.3,0,0.7,0,1-0.2s0.7-0.2,1-0.5c0.3-0.2,0.5-0.5,0.7-0.7
C267.4,136.3,267.4,135.8,267.4,135.5z"/>
<path class="st8" d="M271.2,137.9c0.3,0,0.7,0,1-0.2s0.7-0.3,0.9-0.5c0.3-0.2,0.5-0.5,0.7-0.9c0.2-0.3,0.2-0.7,0.2-1.2
c0-0.3,0-0.5-0.2-0.7c0-0.2-0.2-0.5-0.3-0.7c-0.2-0.2-0.3-0.3-0.5-0.5c0,0-0.2,0-0.2-0.2l0,0c0.2-0.2,0.3-0.2,0.5-0.3
c0.2-0.2,0.2-0.3,0.3-0.5c0-0.2,0.2-0.3,0.2-0.7s0-0.9-0.2-1c-0.2-0.3-0.3-0.5-0.7-0.7c-0.3-0.2-0.5-0.3-0.9-0.3
c-0.3-0.2-0.7-0.2-1-0.2h-2.7v8.5L271.2,137.9L271.2,137.9z M270,134h1.4c0.2,0,0.3,0,0.5,0.2c0.2,0,0.3,0.2,0.3,0.2
c0.2,0.2,0.2,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5s0,0.3-0.2,0.5c0,0.2-0.2,0.3-0.3,0.3c-0.2,0.2-0.3,0.2-0.5,0.2s-0.3,0.2-0.5,0.2
h-1.4V134H270z M272.4,132.1c0,0.2-0.2,0.2-0.3,0.3c-0.2,0.2-0.3,0.2-0.3,0.2c-0.2,0-0.3,0-0.5,0h-1.2v-2h1.2c0.2,0,0.3,0,0.5,0
s0.3,0.2,0.3,0.2c0.2,0,0.2,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5S272.4,131.9,272.4,132.1z"/>
<path class="st8" d="M325.6,129.4c0.2-0.2,0.3-0.3,0.5-0.5s0.3-0.3,0.3-0.7c0.2-0.2,0.2-0.5,0.2-0.9c0-0.5,0-0.9-0.2-1.2
s-0.3-0.7-0.7-0.9c-0.3-0.2-0.5-0.3-1-0.5c-0.3-0.2-0.7-0.2-1.2-0.2h-2.6v8.5h1.5v-3.2h1.2l1.5,3.1v0.2h1.5v-0.3l-1.7-3.2
C325.2,129.5,325.5,129.4,325.6,129.4z M325.1,127.3c0,0.2,0,0.3-0.2,0.5c0,0.2-0.2,0.3-0.3,0.3c-0.2,0.2-0.3,0.2-0.5,0.2
s-0.3,0.2-0.5,0.2h-1.3v-2.6h1c0.2,0,0.5,0,0.7,0.2c0.2,0,0.3,0.2,0.5,0.2c0.2,0.2,0.2,0.2,0.3,0.3
C325,126.8,325.1,127.1,325.1,127.3z"/>
<polygon class="st8" points="333.2,131.8 329.4,131.8 329.4,129.5 332.6,129.5 332.6,128.2 329.4,128.2 329.4,126 333.1,126
333.1,124.6 327.9,124.6 327.9,133.1 333.2,133.1 "/>
<path class="st8" d="M337.9,131.6c-0.2,0.2-0.3,0.2-0.5,0.2c-0.3,0.2-0.9,0-1.2,0c-0.2,0-0.3-0.2-0.5-0.3c-0.2-0.2-0.2-0.2-0.3-0.3
s-0.2-0.3-0.2-0.5v-0.2h-1.5v0.3c0,0.3,0.2,0.9,0.3,1.2s0.5,0.7,0.7,0.9c0.3,0.2,0.7,0.3,1,0.5s0.7,0.2,1.2,0.2c0.3,0,0.7,0,1-0.2
s0.7-0.2,1-0.5c0.3-0.2,0.5-0.5,0.7-0.7c0.2-0.3,0.3-0.7,0.3-1s0-0.5-0.2-0.7c0-0.2-0.2-0.5-0.3-0.7c-0.2-0.2-0.3-0.3-0.5-0.5
s-0.3-0.3-0.5-0.3c-0.2-0.2-0.3-0.2-0.7-0.3c-0.2,0-0.3-0.2-0.7-0.2c-0.2,0-0.3-0.2-0.5-0.2s-0.3-0.2-0.5-0.2
c-0.2-0.2-0.3-0.2-0.3-0.3s-0.2-0.3-0.2-0.5s0-0.3,0.2-0.5c0-0.2,0.2-0.2,0.3-0.3c0.2-0.2,0.3-0.2,0.3-0.2c0.3-0.2,0.7-0.2,1,0
c0.2,0,0.3,0.2,0.3,0.3c0.2,0.2,0.2,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5v0.2h1.5v-0.5c0-0.3-0.2-0.9-0.3-1c-0.2-0.3-0.3-0.7-0.7-0.9
c-0.3-0.2-0.5-0.3-1-0.5c-0.7-0.2-1.4-0.2-2,0c-0.3,0.2-0.7,0.3-0.9,0.5c-0.3,0.2-0.5,0.5-0.7,0.7c-0.2,0.3-0.3,0.7-0.3,1
s0.2,0.7,0.3,1c0.2,0.3,0.3,0.5,0.7,0.7c0.3,0.2,0.5,0.3,0.9,0.5c0.3,0.2,0.7,0.2,0.9,0.3c0.2,0,0.3,0.2,0.7,0.2
c0.2,0,0.3,0.2,0.5,0.3c0.2,0.2,0.3,0.2,0.3,0.3s0.2,0.3,0.2,0.5s0,0.3-0.2,0.5L337.9,131.6z"/>
<polygon class="st8" points="346.2,131.8 342.4,131.8 342.4,129.5 345.8,129.5 345.8,128.2 342.4,128.2 342.4,126 346.2,126
346.2,124.6 340.8,124.6 340.8,133.1 346.2,133.1 "/>
<polygon class="st8" points="349.5,133.1 351,133.1 351,126 353.6,126 353.6,124.6 347.1,124.6 347.1,126 349.5,126 "/>
<path class="st8" d="M159.9,181l-2.7,8.5h1.5l0.7-2h2.2l0.7,2h1.5l-2.7-8.5H159.9z M161.1,186.1h-1.4l0.7-2.4L161.1,186.1z"/>
<path class="st8" d="M170.5,181.9c-0.2-0.3-0.5-0.5-0.9-0.7c-0.7-0.3-1.7-0.3-2.4,0c-0.3,0.2-0.7,0.3-0.9,0.7
c-0.2,0.3-0.5,0.7-0.5,1c-0.2,0.3-0.2,0.9-0.2,1.4v1.9c0,0.5,0,1,0.2,1.4s0.3,0.9,0.5,1c0.2,0.3,0.5,0.5,0.9,0.7
c0.3,0.2,0.7,0.2,1.2,0.2s0.9,0,1.2-0.2s0.7-0.3,0.9-0.7c0.2-0.3,0.3-0.7,0.5-1s0.2-0.9,0.2-1.4v-1.9c0-0.5,0-1-0.2-1.4
S170.7,182.2,170.5,181.9z M169.6,183.5l-2.6,2V184c0-0.7,0.2-1.2,0.3-1.4c0.2-0.3,0.5-0.5,1-0.5c0.3,0,0.7,0.2,0.9,0.3
C169.5,182.8,169.6,183,169.6,183.5z M169.6,185.1v1.4c0,0.7-0.2,1.2-0.3,1.4c-0.2,0.3-0.5,0.5-1,0.5c-0.3,0-0.7-0.2-0.9-0.3
c-0.2-0.2-0.3-0.5-0.3-0.9L169.6,185.1z"/>
<path class="st8" d="M402.8,189.4h1.5l-2.6-8.3v-0.2h-1.2l-2.7,8.5h1.5l0.7-2h2.2L402.8,189.4z M401.6,185.9h-1.4l0.7-2.4
L401.6,185.9z"/>
<polygon class="st8" points="408.2,189.4 409.8,189.4 409.8,181 409.6,181 406.1,182.2 406.1,183.5 408.2,182.9 "/>
<path class="st8" d="M330.9,415.6c-0.2-0.2-0.3-0.3-0.5-0.5c0,0-0.2,0-0.2-0.2l0,0c0.2-0.2,0.3-0.2,0.5-0.3c0.2-0.2,0.2-0.3,0.3-0.5
c0-0.2,0.2-0.3,0.2-0.7s0-0.9-0.2-1c-0.2-0.3-0.3-0.5-0.7-0.7c-0.3-0.2-0.5-0.3-0.9-0.3c-0.3,0-0.7-0.2-1-0.2h-2.7v8.5h2.9
c0.3,0,0.7,0,1-0.2s0.7-0.3,0.9-0.5c0.3-0.2,0.5-0.5,0.7-0.9c0.2-0.3,0.2-0.7,0.2-1.2c0-0.3,0-0.5-0.2-0.7
C331.2,415.9,331.1,415.7,330.9,415.6z M327.1,415.7h1.4c0.2,0,0.3,0,0.5,0.2c0.2,0,0.3,0.2,0.3,0.2c0.2,0.2,0.2,0.2,0.3,0.3
c0,0.2,0.2,0.3,0.2,0.5s0,0.3-0.2,0.5c0,0.2-0.2,0.3-0.3,0.3c-0.2,0.2-0.3,0.2-0.5,0.2s-0.3,0.2-0.5,0.2h-1.4v-2.4H327.1z
M329.6,413.6c0,0.2-0.2,0.2-0.3,0.3c-0.2,0.2-0.2,0.2-0.3,0.2s-0.3,0-0.5,0h-1.2v-1.9h1.2c0.2,0,0.3,0,0.5,0s0.3,0.2,0.3,0.2
c0.2,0,0.2,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5C329.6,413.6,329.6,413.6,329.6,413.6z"/>
<path class="st8" d="M335.9,410.9h-1.2l-2.7,8.5h1.5l0.7-2h2.4l0.7,2h1.5l-2.7-8.3L335.9,410.9z M336.1,416.1h-1.5l0.7-2.4
L336.1,416.1z"/>
<polygon class="st8" points="338.8,412.4 341.1,412.4 341.1,419.4 342.6,419.4 342.6,412.4 345.1,412.4 345.1,410.9 338.8,410.9 "/>
<polygon class="st8" points="345.8,412.4 348.2,412.4 348.2,419.4 349.8,419.4 349.8,412.4 352.1,412.4 352.1,410.9 345.8,410.9 "/>
<polygon class="st8" points="354.8,415.7 358,415.7 358,414.4 354.8,414.4 354.8,412.4 358.5,412.4 358.5,410.9 353.2,410.9
353.2,419.4 358.6,419.4 358.6,418.1 354.8,418.1 "/>
<path class="st8" d="M364.2,419.4h1.5v-0.3l-1.7-3.2c0.2,0,0.3-0.2,0.3-0.3c0.2-0.2,0.3-0.3,0.5-0.5s0.3-0.3,0.3-0.7
c0-0.2,0.2-0.5,0.2-0.9c0-0.5,0-0.9-0.2-1.2s-0.3-0.7-0.7-0.9c-0.3-0.2-0.5-0.3-1-0.5c-0.3-0.2-0.7-0.2-1.2-0.2h-2.6v8.5h1.5V416
h1.2L364.2,419.4z M364,414.1c0,0.2-0.2,0.3-0.3,0.3c-0.2,0.2-0.3,0.2-0.5,0.2s-0.3,0.2-0.5,0.2h-1.3v-2.6h1c0.2,0,0.3,0,0.7,0.2
c0.2,0,0.3,0.2,0.5,0.2c0.2,0.2,0.2,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5C364,413.9,364,414.1,364,414.1z"/>
<polygon class="st8" points="366.6,412.4 368.6,412.4 368.6,418.1 366.6,418.1 366.6,419.4 372.1,419.4 372.1,418.1 370.1,418.1
370.1,412.4 372.1,412.4 372.1,410.9 366.6,410.9 "/>
<polygon class="st8" points="375.1,415.7 378.5,415.7 378.5,414.4 375.1,414.4 375.1,412.4 379,412.4 379,410.9 373.5,410.9
373.5,419.4 379,419.4 379,418.1 375.1,418.1 "/>
<path class="st8" d="M277.1,320.9h1.5v-0.3l-1.7-3.2c0.2,0,0.3-0.2,0.3-0.3c0.2-0.2,0.3-0.3,0.5-0.5s0.3-0.3,0.3-0.7
c0.2-0.2,0.2-0.5,0.2-0.9c0-0.5,0-0.9-0.2-1.2c-0.2-0.3-0.3-0.7-0.7-0.9c-0.3-0.2-0.5-0.3-1-0.5c-0.3-0.2-0.7-0.2-1.2-0.2h-2.6v8.5
h1.5v-3.2h1.2L277.1,320.9z M276.8,315.5c0,0.2-0.2,0.3-0.3,0.3c-0.2,0.2-0.3,0.2-0.5,0.2s-0.3,0.2-0.5,0.2h-1.2v-2.6h1
c0.2,0,0.3,0,0.7,0.2c0.2,0,0.3,0.2,0.5,0.2c0.2,0.2,0.2,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5C276.9,315.2,276.9,315.4,276.8,315.5z"
/>
<path class="st8" d="M282.6,321c0.5,0,1-0.2,1.5-0.3c0.5-0.2,0.9-0.5,1.2-1l0,0v-3.2h-3.1v1.4h1.7v1.5l-0.2,0.2
c-0.2,0-0.2,0.2-0.3,0.2s-0.3,0-0.3,0c-0.2,0-0.2,0-0.3,0c-0.2,0-0.3,0-0.5-0.2c-0.2,0-0.3-0.2-0.5-0.3c-0.2-0.2-0.2-0.3-0.3-0.3
c-0.2-0.2-0.2-0.3-0.2-0.5s-0.2-0.3-0.2-0.5s0-0.3,0-0.5v-1c0-0.2,0-0.3,0-0.5s0-0.3,0.2-0.5c0-0.2,0.2-0.3,0.2-0.5s0.2-0.3,0.3-0.3
c0.2-0.2,0.2-0.2,0.3-0.3c0.3-0.2,0.9-0.2,1.2,0c0.2,0,0.3,0.2,0.3,0.3c0.2,0.2,0.2,0.3,0.3,0.5c0,0.2,0.2,0.3,0.2,0.5v0.2h1.5v-0.3
c0-0.3-0.2-0.9-0.3-1c-0.2-0.3-0.3-0.7-0.7-0.9c-0.3-0.2-0.5-0.3-0.9-0.5c-0.7-0.2-1.5-0.3-2.2,0c-0.3,0.2-0.5,0.3-0.9,0.5
c-0.2,0.2-0.5,0.3-0.7,0.7c-0.2,0.2-0.3,0.5-0.3,0.9c-0.2,0.3-0.2,0.5-0.2,0.9s0,0.7,0,0.9v1c0,0.3,0,0.7,0.2,1
c0,0.3,0.2,0.7,0.3,0.9c0.2,0.3,0.3,0.5,0.5,0.9c0.2,0.2,0.3,0.5,0.7,0.7c0.2,0.2,0.5,0.3,0.9,0.5C281.6,321,282.1,321,282.6,321
L282.6,321z M282.6,320.9L282.6,320.9L282.6,320.9L282.6,320.9z"/>
<path class="st8" d="M289.1,320.9c0.3,0,0.7,0,1-0.2s0.7-0.3,0.9-0.5c0.3-0.2,0.5-0.5,0.7-0.9c0.2-0.3,0.2-0.7,0.2-1.2
c0-0.3,0-0.5-0.2-0.7c0-0.2-0.2-0.5-0.3-0.7s-0.3-0.3-0.5-0.5c0,0-0.2,0-0.2-0.2l0,0c0.2-0.2,0.3-0.2,0.5-0.3
c0.2-0.2,0.2-0.3,0.3-0.5c0-0.2,0.2-0.3,0.2-0.7s0-0.9-0.2-1c-0.2-0.3-0.3-0.5-0.7-0.7c-0.3-0.2-0.5-0.3-0.9-0.3
c-0.3-0.2-0.7-0.2-1-0.2h-2.7v8.5h2.9V320.9z M288,317.1h1.4c0.2,0,0.3,0,0.5,0.2c0.2,0,0.3,0.2,0.3,0.2c0.2,0.2,0.2,0.2,0.3,0.3
c0,0.2,0.2,0.3,0.2,0.5s0,0.3-0.2,0.5c0,0.2-0.2,0.3-0.3,0.3c-0.2,0.2-0.3,0.2-0.5,0.2s-0.3,0.2-0.5,0.2h-1.4v-2.4H288z
M290.1,315.2c0,0.2-0.2,0.2-0.3,0.3c-0.2,0.2-0.3,0.2-0.3,0.2c-0.2,0-0.3,0-0.5,0h-1.2v-2h1.2c0.2,0,0.3,0,0.5,0s0.3,0.2,0.3,0.2
c0.2,0,0.2,0.2,0.3,0.3c0,0.2,0.2,0.3,0.2,0.5C290.4,314.9,290.4,315,290.1,315.2z"/>
<polygon class="st8" points="297.9,312.4 296.4,312.4 296.4,320.9 301.8,320.9 301.8,319.4 297.9,319.4 "/>
<polygon class="st8" points="304.5,317.2 307.9,317.2 307.9,315.9 304.5,315.9 304.5,313.6 308.5,313.6 308.5,312.4 303,312.4
303,320.9 308.5,320.9 308.5,319.4 304.5,319.4 "/>
<path class="st8" d="M314.6,313.5c-0.3-0.3-0.7-0.7-1.2-0.9c-0.5-0.2-1-0.3-1.5-0.3h-2v8.5h2c0.5,0,1.2-0.2,1.5-0.3
c0.5-0.2,0.9-0.5,1.2-0.9c0.3-0.3,0.5-0.9,0.7-1.2c0.2-0.5,0.3-1,0.3-1.5v-0.5c0-0.5-0.2-1.2-0.3-1.5
C315.1,314.2,314.9,313.9,314.6,313.5z M314.1,316.4v0.7c0,0.3,0,0.7-0.2,1s-0.2,0.5-0.3,0.9c-0.2,0.2-0.3,0.3-0.7,0.5
c-0.3,0.2-0.7,0.2-1,0.2h-0.5V314h0.5c0.3,0,0.7,0,1,0.2s0.5,0.3,0.7,0.5s0.3,0.5,0.3,0.9C313.9,315.5,314.1,315.9,314.1,316.4z"/>
<path class="st8" d="M152.6,364.9l-0.7-1.2l0.9-0.7c0-0.2,0-0.5,0-0.9s-0.2-0.5-0.3-0.9c-0.3-0.7-0.9-1-1.7-1.2
c-0.7,0-1.4,0.2-2.2,0.5l-0.3,0.2c-0.9,0.5-1.4,1-1.5,1.7c-0.3,0.7-0.2,1.4,0.2,1.9c0.2,0.3,0.3,0.5,0.7,0.7
c0.2,0.2,0.5,0.3,0.7,0.3l1.2-0.5l0.7,1.2l-1.5,0.9c-0.5-0.2-1-0.3-1.5-0.7c-0.5-0.3-0.9-0.9-1.2-1.4c-0.7-1-0.7-2-0.3-3.2
c0.3-1,1-1.9,2.2-2.6l0.3-0.2c1.2-0.7,2.2-0.9,3.2-0.7c1,0.2,1.9,0.9,2.6,1.9c0.3,0.5,0.5,1.2,0.7,1.9c0,0.7,0,1.2-0.2,1.7
L152.6,364.9z"/>
<path class="st8" d="M149.2,368.8l0.3,0.5l8-1.5l0.9,1.5l-5.3,6.1l0.2,0.5l-0.9,0.5l-1.5-2.6l0.9-0.5l0.3,0.5l0.9-1l-1.4-2.6
l-1.2,0.3l0.2,0.5l-0.9,0.5l-1.5-2.6L149.2,368.8z M153.1,370l1,1.7l2.2-2.4l0,0L153.1,370z"/>
<path class="st8" d="M153.1,377.8l0.9-0.5l0.7,0.7l5.5-3.2l-0.3-0.9l0.9-0.5l0.5,0.9l0.9,1.5l0.5,0.9l-0.9,0.5l-0.7-0.7l-5.5,3.1
l1.2,2.2l1-0.5l0.7,1.2l-2.2,1.2L153.1,377.8z"/>
<path class="st8" d="M157.2,384.8l0.9-0.5l0.7,0.7l5.5-3.2l-0.3-0.9l0.9-0.5l0.5,0.9l0.9,1.5l0.5,0.9l-0.9,0.5l-0.7-0.7l-5.5,3.1
l1.2,2.2l1-0.5l0.7,1.2l-2.2,1.2L157.2,384.8z"/>
<path class="st8" d="M167.9,387.8l0.9-0.5l1.9,3.2l-0.9,0.5l-0.7-0.7l-5.5,3.2l0.3,0.9l-0.9,0.5l-1.9-3.2l0.9-0.5l0.7,0.7l5.5-3.2
L167.9,387.8z"/>
<path class="st8" d="M171.7,400.9c-1.2,0.7-2.2,0.9-3.4,0.7s-2-0.9-2.6-1.9c-0.7-1-0.7-2-0.3-3.2c0.3-1,1.2-1.9,2.2-2.6h0.2
c1.2-0.7,2.2-0.9,3.4-0.7c1.2,0.2,2,0.9,2.6,1.9c0.7,1,0.7,2,0.3,3.2C173.7,399.4,172.9,400.2,171.7,400.9L171.7,400.9z
M170.8,399.4c0.9-0.5,1.4-1,1.7-1.5c0.3-0.7,0.3-1.2-0.2-1.9c-0.3-0.7-0.9-1-1.5-1c-0.7,0-1.4,0.2-2.2,0.7h-0.2
c-0.9,0.5-1.4,1-1.7,1.5c-0.3,0.7-0.3,1.2,0.2,1.9c0.3,0.7,0.9,1,1.5,1C169.2,400,170,399.9,170.8,399.4L170.8,399.4z"/>
<path class="st8" d="M178.5,403.6c0.5,0.9,0.7,1.7,0.5,2.6s-0.7,1.4-1.4,1.9s-1.5,0.5-2.2,0.3s-1.4-0.9-1.9-1.7l-0.7-1.4l-1.7,1
l0.3,0.9l-0.9,0.5l-1.9-3.2l0.9-0.5l0.7,0.7l5.5-3.2l-0.3-0.9l0.9-0.5l0.5,0.9L178.5,403.6z M173.9,404.4l0.7,1.4
c0.2,0.5,0.5,0.7,0.9,0.9c0.3,0,0.7,0,1-0.2s0.7-0.5,0.7-0.9c0.2-0.3,0-0.7-0.2-1.2l-0.7-1.4L173.9,404.4z"/>
<path class="st8" d="M179.4,415.1l-1.5-2.6l-2.2,1.2l1.4,2.6l1-0.5l0.7,1.2l-2,1.2l-3.6-6.1l0.9-0.5l0.7,0.7l5.5-3.2l-0.3-0.9
l0.9-0.5l0.5,0.9l3.1,5.3l-2,1.2l-0.7-1.2l0.9-0.7l-1.4-2.4l-1.9,1.2l1.5,2.6L179.4,415.1z"/>
<path class="st8" d="M138.1,368.4l-1.4,0.9c0.7,0,1.2,0,1.9,0.3c0.5,0.3,1,0.7,1.4,1.4c0.3,0.5,0.5,1,0.5,1.5s-0.2,1-0.5,1.4
c0.5,0,1,0.2,1.5,0.3c0.5,0.3,0.9,0.7,1.2,1.2c0.2,0.5,0.3,0.9,0.5,1.4c0,0.5,0,0.9-0.2,1.4s-0.5,0.9-0.9,1.2
c-0.3,0.3-0.9,0.9-1.5,1.2l-9.5,5.6l-1.5-2.7l9.5-5.6c0.5-0.3,0.9-0.7,0.9-1s0-0.7-0.2-1s-0.3-0.5-0.7-0.7c-0.3-0.2-0.5-0.2-0.9,0
l-10.2,5.8l-1.5-2.6l9.5-5.6c0.5-0.3,0.9-0.7,0.9-0.9c0.2-0.3,0-0.7-0.2-1s-0.3-0.5-0.7-0.7s-0.5-0.2-0.9-0.2l-10.2,6l-1.5-2.7
l13.1-7.7L138.1,368.4z"/>
<path class="st8" d="M146.2,382.1l4.1,7l-10.7,6.1l2.2,3.9l-2.4,1.4l-6.3-10.9l2.4-1.2l2.4,4.1l8.3-4.8l-2.4-4.1L146.2,382.1z
M151.9,384c0.5-0.3,0.9-0.3,1.4-0.2c0.5,0.2,0.9,0.5,1.2,1s0.3,1,0.3,1.5c-0.2,0.5-0.3,0.9-0.9,1c-0.5,0.3-0.9,0.3-1.4,0.2
c-0.5-0.2-0.9-0.5-1.2-1s-0.3-1-0.3-1.5C151.1,384.8,151.4,384.4,151.9,384z"/>
<path class="st8" d="M156,399.4l-1.7,1.2c0.9,0.2,1.7,0.3,2.6,0.9c0.7,0.5,1.4,1.2,1.9,1.9c0.3,0.7,0.7,1.4,0.9,2
c0.2,0.7,0.2,1.4,0,2c-0.2,0.7-0.5,1.2-1,1.9s-1.2,1.2-2.2,1.7l-8.2,4.8l-1.7-2.9l8.2-4.8c0.5-0.3,1-0.7,1.2-1
c0.3-0.3,0.5-0.7,0.5-1s0-0.7,0-1.2c-0.2-0.3-0.3-0.9-0.5-1.2c-0.3-0.7-0.9-1.2-1.4-1.4c-0.5-0.3-1.2-0.5-1.9-0.5l-9.4,5.5l-1.7-2.9
l13.1-7.7L156,399.4z"/>
<path class="st8" d="M163,411.2l4.1,7l-10.7,6.1l2.2,3.9l-2.4,1.4l-6.3-10.9l2.4-1.4l2.4,4.1l8.3-4.8l-2.4-4.1L163,411.2z
M168.6,413.1c0.5-0.3,0.9-0.3,1.4-0.2c0.5,0.2,0.9,0.5,1.2,1s0.3,1,0.3,1.5c-0.2,0.5-0.3,0.9-0.9,1c-0.5,0.3-0.9,0.3-1.4,0.2
c-0.5-0.2-0.9-0.5-1.2-1s-0.3-1-0.3-1.5C167.8,413.9,168.1,413.6,168.6,413.1z"/>
<path class="st8" d="M150.6,344.1l-3.9-6.8c-0.5-1-1.9-1.4-2.9-0.9c0,0-5.8,3.2-5.1,2.9c4.3-2.4,5.8-8,3.4-12.3
c-2.4-4.3-8-5.8-12.3-3.4c-0.7,0.3-5.3,3.1-8.5,4.9l-12.3-5.3c-8.3-3.6-16.4,5.5-11.9,13.3l1,1.9c6.1-2.6,14.3-4.8,20.8-3.6l0.2,0.2
l4.8,8.3c-2.2,6.1-8.3,11.8-13.8,15.8l1.5,2.6c1.7,2.9,5.5,3.9,8.3,2.2l19.9-11.4l10-5.8C150.9,346.5,151.2,345.2,150.6,344.1z
M135.2,327.1l3.7,6.5l-4.4,2.6c-1.4,0.9-3.2,0.3-3.9-1l-0.9-1.4c-0.9-1.4-0.3-3.2,1-3.9L135.2,327.1z M121.8,332.8l7.2-0.3
l-4.6,4.9L121.8,332.8z M124.5,337.5l6.6-1.5l-3.9,6.1L124.5,337.5z M134.6,343.6l9.5-5.5l4.4,7.7l-9.5,5.5L134.6,343.6z"/>
<path class="st8" d="M111.2,360.5c0.5-5.6,6.1-12.9,10.7-19.1l-16.4,9.4L111.2,360.5z"/>
<path id="C_GND1" class="st3" d="M189.7,446.1c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9
C194.5,448.2,192.2,446.1,189.7,446.1z M189.7,453.1c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4s2.4,1,2.4,2.4S190.9,453.1,189.7,453.1z"/>
<circle class="st4" cx="189.7" cy="450.9" r="2.4"/>
<path id="C_P0" class="st3" d="M205.9,446.1c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9
C210.9,448.2,208.6,446.1,205.9,446.1z M205.9,453.1c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4
S207.2,453.1,205.9,453.1z"/>
<circle class="st4" cx="205.9" cy="450.9" r="2.4"/>
<path id="C_P2" class="st3" d="M222.2,446.1c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9
C227.2,448.2,225,446.1,222.2,446.1z M222.2,453.1c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4S223.6,453.1,222.2,453.1
z"/>
<circle class="st4" cx="222.2" cy="450.9" r="2.4"/>
<path id="C_P4" class="st3" d="M238.6,446.1c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9
C243.4,448.2,241.4,446.1,238.6,446.1z M238.6,453.1c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4
S239.8,453.1,238.6,453.1z"/>
<circle class="st4" cx="238.6" cy="450.9" r="2.4"/>
<path id="C_P6" class="st3" d="M255,446.1c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9
C259.6,448.2,257.5,446.1,255,446.1z M255,453.1c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4s2.4,1,2.4,2.4S256.1,453.1,255,453.1z"/>
<circle class="st4" cx="255" cy="450.9" r="2.4"/>
<path id="C_P8" class="st3" d="M271.1,446.1c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
C276.1,448.2,273.9,446.1,271.1,446.1z M271.1,453.1c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4
S272.5,453.1,271.1,453.1z"/>
<circle class="st4" cx="271.1" cy="450.9" r="2.4"/>
<path id="C_GND2" class="st3" d="M287.5,446.1c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
C292.4,448.2,290.1,446.1,287.5,446.1z M287.5,453.1c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4
S288.9,453.1,287.5,453.1z"/>
<circle class="st4" cx="287.5" cy="450.9" r="2.4"/>
<path id="C_P10" class="st3" d="M303.9,446.1c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9
C308.8,448.2,306.6,446.1,303.9,446.1z M303.9,453.1c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4
S305.1,453.1,303.9,453.1z"/>
<circle class="st4" cx="303.9" cy="450.9" r="2.4"/>
<path id="C_P12" class="st3" d="M320.1,446.1c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
C325,448.2,322.9,446.1,320.1,446.1z M320.1,453.1c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4S321.4,453.1,320.1,453.1
z"/>
<circle class="st4" cx="320.1" cy="450.9" r="2.4"/>
<path id="C_P14" class="st3" d="M336.6,446.1c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9
C341.2,448.2,339.1,446.1,336.6,446.1z M336.6,453.1c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4
S337.8,453.1,336.6,453.1z"/>
<circle class="st4" cx="336.6" cy="450.9" r="2.4"/>
<path id="C_P16" class="st3" d="M352.6,446.1c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
C357.6,448.2,355.5,446.1,352.6,446.1z M352.6,453.1c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4
S354.1,453.1,352.6,453.1z"/>
<circle class="st4" cx="352.6" cy="450.9" r="2.4"/>
<path id="C_P18" class="st3" d="M369.1,446.1c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
C374,448.2,371.8,446.1,369.1,446.1z M369.1,453.1c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4S370.5,453.1,369.1,453.1
z"/>
<circle class="st4" cx="369.1" cy="450.9" r="2.4"/>
<path id="C_VCC1" class="st3" d="M385.4,446.1c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
C390.1,448.2,388.1,446.1,385.4,446.1z M385.4,453.1c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4
S386.6,453.1,385.4,453.1z"/>
<circle class="st4" cx="385.4" cy="450.9" r="2.4"/>
<path id="C_VCC2" class="st3" d="M189.7,429.6c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9S192.2,429.6,189.7,429.6z
M189.7,436.9c-1.2,0-2.4-1-2.4-2.4c0-1.2,1-2.4,2.4-2.4s2.4,1,2.4,2.4C192,435.9,190.9,436.9,189.7,436.9z"/>
<circle class="st4" cx="189.7" cy="434.4" r="2.4"/>
<path id="C_P1" class="st3" d="M205.9,429.6c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9S208.6,429.6,205.9,429.6z
M205.9,436.9c-1.2,0-2.4-1-2.4-2.4c0-1.2,1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4S207.2,436.9,205.9,436.9z"/>
<circle class="st4" cx="205.9" cy="434.4" r="2.4"/>
<path id="C_P3" class="st3" d="M222.2,429.6c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9S225,429.6,222.2,429.6z
M222.2,436.9c-1.2,0-2.4-1-2.4-2.4c0-1.2,1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4C224.7,435.9,223.6,436.9,222.2,436.9z"/>
<circle class="st4" cx="222.2" cy="434.4" r="2.4"/>
<path id="C_P5" class="st3" d="M238.6,429.6c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9S241.4,429.6,238.6,429.6z
M238.6,436.9c-1.2,0-2.4-1-2.4-2.4c0-1.2,1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4C240.8,435.9,239.8,436.9,238.6,436.9z"/>
<circle class="st4" cx="238.6" cy="434.4" r="2.4"/>
<path id="C_P7" class="st3" d="M255,429.6c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9S257.5,429.6,255,429.6z
M255,436.9c-1.2,0-2.4-1-2.4-2.4c0-1.2,1-2.4,2.4-2.4s2.4,1,2.4,2.4C257.1,435.9,256.1,436.9,255,436.9z"/>
<circle class="st4" cx="255" cy="434.4" r="2.4"/>
<path id="C_P9" class="st3" d="M271.1,429.6c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9S273.9,429.6,271.1,429.6
z M271.1,436.9c-1.2,0-2.4-1-2.4-2.4c0-1.2,1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4C273.5,435.9,272.5,436.9,271.1,436.9z"/>
<circle class="st4" cx="271.1" cy="434.4" r="2.4"/>
<path id="C_GND3" class="st3" d="M287.5,429.6c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
S290.1,429.6,287.5,429.6z M287.5,436.9c-1.2,0-2.4-1-2.4-2.4c0-1.2,1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4S288.9,436.9,287.5,436.9z"/>
<circle class="st4" cx="287.5" cy="434.4" r="2.4"/>
<path id="C_P11" class="st3" d="M303.9,429.6c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9S306.6,429.6,303.9,429.6z
M303.9,436.9c-1.2,0-2.4-1-2.4-2.4c0-1.2,1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4C306.1,435.9,305.1,436.9,303.9,436.9z"/>
<circle class="st4" cx="303.9" cy="434.4" r="2.4"/>
<path id="C_P13" class="st3" d="M320.1,429.6c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
S322.9,429.6,320.1,429.6z M320.1,436.9c-1.2,0-2.4-1-2.4-2.4c0-1.2,1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4
C322.4,435.9,321.4,436.9,320.1,436.9z"/>
<circle class="st4" cx="320.1" cy="434.4" r="2.4"/>
<path id="C_P15" class="st3" d="M336.6,429.6c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9S339.1,429.6,336.6,429.6z
M336.6,436.9c-1.2,0-2.4-1-2.4-2.4c0-1.2,1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4C338.8,435.9,337.8,436.9,336.6,436.9z"/>
<circle class="st4" cx="336.6" cy="434.4" r="2.4"/>
<path id="C_P17" class="st3" d="M352.6,429.6c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
S355.5,429.6,352.6,429.6z M352.6,436.9c-1.2,0-2.4-1-2.4-2.4c0-1.2,1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4
C355.1,435.9,354.1,436.9,352.6,436.9z"/>
<circle class="st4" cx="352.6" cy="434.4" r="2.4"/>
<path id="C_P19" class="st3" d="M369.1,429.6c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
S371.8,429.6,369.1,429.6z M369.1,436.9c-1.2,0-2.4-1-2.4-2.4c0-1.2,1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4S370.5,436.9,369.1,436.9z"/>
<circle class="st4" cx="369.1" cy="434.4" r="2.4"/>
<path id="C_GND4" class="st3" d="M385.4,429.6c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
S388.1,429.6,385.4,429.6z M385.4,436.9c-1.2,0-2.4-1-2.4-2.4c0-1.2,1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4
C387.6,435.9,386.6,436.9,385.4,436.9z"/>
<circle class="st4" cx="385.4" cy="434.4" r="2.4"/>
<path id="M_GND1" class="st3" d="M255,398.4c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9S257.5,398.4,255,398.4z
M255,405.6c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4s2.4,1,2.4,2.4S256.1,405.6,255,405.6z"/>
<circle class="st4" cx="255" cy="403.1" r="2.4"/>
<path id="M_OUT1" class="st3" d="M271.1,398.4c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
S273.9,398.4,271.1,398.4z M271.1,405.6c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4S272.5,405.6,271.1,405.6z"/>
<circle class="st4" cx="271.1" cy="403.1" r="2.4"/>
<path id="M_OUT2" class="st3" d="M287.5,398.4c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
S290.1,398.4,287.5,398.4z M287.5,405.6c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4S288.9,405.6,287.5,405.6z"/>
<circle class="st4" cx="287.5" cy="403.1" r="2.4"/>
<path id="M_GND2" class="st3" d="M303.9,398.4c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9S306.6,398.4,303.9,398.4z
M303.9,405.6c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4S305.1,405.6,303.9,405.6z"/>
<circle class="st4" cx="303.9" cy="403.1" r="2.4"/>
<path id="M_VM" class="st3" d="M320.1,398.4c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9S322.9,398.4,320.1,398.4
z M320.1,405.6c-1.2,0-2.4-1-2.4-2.4s1-2.4,2.4-2.4c1.2,0,2.4,1,2.4,2.4S321.4,405.6,320.1,405.6z"/>
<circle class="st4" cx="320.1" cy="403.1" r="2.4"/>
<path id="EDGE_P0" class="st3" d="M40.5,251.8C23.1,251.8,9,265.9,9,283.2s14.1,31.5,31.5,31.5S72,300.6,72,283.2
C72.1,265.6,57.9,251.8,40.5,251.8z M40.5,298c-8.2,0-15-6.6-15-15c0-8.2,6.6-15,15-15s15,6.6,15,15S48.9,298,40.5,298z"/>
<path id="EDGE_VCC" class="st3" d="M408.1,40.3c-17.4,0-31.5,14.1-31.5,31.5s14.1,31.5,31.5,31.5s31.5-14.1,31.5-31.5
S425.4,40.3,408.1,40.3z M408.1,86.6c-8.2,0-15-6.6-15-15s6.6-15,15-15s15,6.6,15,15S416.2,86.6,408.1,86.6z"/>
<path id="EDGE_P3" class="st3" d="M529.8,252.8c-17.4,0-31.5,14.1-31.5,31.5s14.1,31.5,31.5,31.5s31.5-14.1,31.5-31.5
S547.2,252.8,529.8,252.8z M529.8,299c-8.2,0-15-6.6-15-15c0-8.2,6.6-15,15-15c8.2,0,15,6.6,15,15C544.8,292.4,538.2,299,529.8,299z
"/>
<path id="EDGE_P2" class="st3" d="M408.1,463.7c-17.4,0-31.5,14.1-31.5,31.5c0,17.4,14.1,31.5,31.5,31.5s31.5-14.1,31.5-31.5
C439.4,477.9,425.2,463.7,408.1,463.7z M408.1,510.2c-8.2,0-15-6.6-15-15c0-8.2,6.6-15,15-15c8.2,0,15,6.6,15,15
C422.9,503.4,416.2,510.2,408.1,510.2z"/>
<path id="EDGE_P1" class="st3" d="M163.5,464.9c-17.4,0-31.5,14.1-31.5,31.5c0,17.4,14.1,31.5,31.5,31.5s31.5-14.1,31.5-31.5
C195,479.1,180.9,464.9,163.5,464.9z M163.5,511.4c-8.2,0-15-6.6-15-15s6.6-15,15-15s15,6.6,15,15S171.9,511.4,163.5,511.4z"/>
<path id="EDGE_GND" class="st3" d="M162.5,39.5C145.1,39.5,131,53.6,131,71s14.1,31.5,31.5,31.5S194,88.4,194,71
S179.9,39.5,162.5,39.5z M162.5,85.9c-8.3,0-15-6.8-15-15s6.6-15,15-15c8.3,0,15,6.6,15,15S170.7,85.9,162.5,85.9z"/>
<circle class="st8" cx="529.8" cy="284.2" r="15"/>
<circle class="st8" cx="408.1" cy="71.8" r="15"/>
<circle class="st8" cx="162.5" cy="71" r="15"/>
<circle class="st8" cx="40.5" cy="283" r="15"/>
<circle class="st8" cx="163.5" cy="496.4" r="15"/>
<circle class="st8" cx="408.1" cy="495.2" r="15"/>
<rect id="LED_0_0" x="233.2" y="169.9" class="st8" width="4.9" height="12.4"/>
<rect id="LED_1_0" x="258.1" y="169.9" class="st8" width="4.9" height="12.4"/>
<rect id="LED_2_0" x="282.9" y="169.9" class="st8" width="4.9" height="12.4"/>
<rect id="LED_3_0" x="307.8" y="169.9" class="st8" width="4.9" height="12.4"/>
<rect id="LED_4_0" x="332.6" y="169.9" class="st8" width="4.9" height="12.4"/>
<rect id="LED_0_1" x="233.2" y="194.4" class="st8" width="4.9" height="12.4"/>
<rect id="LED_1_1" x="258.1" y="194.4" class="st8" width="4.9" height="12.4"/>
<rect id="LED_2_1" x="282.9" y="194.4" class="st8" width="4.9" height="12.4"/>
<rect id="LED_3_1" x="307.8" y="194.4" class="st8" width="4.9" height="12.4"/>
<rect id="LED_4_1" x="332.6" y="194.4" class="st8" width="4.9" height="12.4"/>
<rect id="LED_0_2" x="233.2" y="218.6" class="st8" width="4.9" height="12.4"/>
<rect id="LED_1_2" x="258.1" y="218.6" class="st8" width="4.9" height="12.4"/>
<rect id="LED_2_2" x="282.9" y="218.6" class="st8" width="4.9" height="12.4"/>
<rect id="LED_3_2" x="307.8" y="218.6" class="st8" width="4.9" height="12.4"/>
<rect id="LED_4_2" x="332.6" y="218.6" class="st8" width="4.9" height="12.4"/>
<rect id="LED_0_3" x="233.2" y="243" class="st8" width="4.9" height="12.4"/>
<rect id="LED_1_3" x="258.1" y="243" class="st8" width="4.9" height="12.4"/>
<rect id="LED_2_3" x="282.9" y="243" class="st8" width="4.9" height="12.4"/>
<rect id="LED_3_3" x="307.8" y="243" class="st8" width="4.9" height="12.4"/>
<rect id="LED_4_3" x="332.6" y="243" class="st8" width="4.9" height="12.4"/>
<rect id="LED_0_4" x="233.2" y="267.2" class="st8" width="4.9" height="12.4"/>
<rect id="LED_1_4" x="258.1" y="267.2" class="st8" width="4.9" height="12.4"/>
<rect id="LED_2_4" x="282.9" y="267.2" class="st8" width="4.9" height="12.4"/>
<rect id="LED_3_4" x="307.8" y="267.2" class="st8" width="4.9" height="12.4"/>
<rect id="LED_4_4" x="332.6" y="267.2" class="st8" width="4.9" height="12.4"/>
<rect id="rgbled" x="275.1" y="328.4" class="st8" width="24.4" height="23.7"/>
<circle class="st5" cx="287.2" cy="340.2" r="9.2"/>
<rect id="SPKR" x="422.5" y="284" transform="matrix(0.3593 -0.9332 0.9332 0.3593 -2.3395 619.2816)" class="st4" width="54.7" height="54.7"/>
<polygon class="st3" points="369.8,204.1 369.8,193.8 388.4,193.8 388.4,204.1 "/>
<path id="M_GND1_2_" class="st4" d="M374.6,196.6c-0.9,0-1.7,0.7-1.7,1.7s0.7,1.7,1.7,1.7s1.7-0.7,1.7-1.7S375.6,196.6,374.6,196.6z
"/>
<polygon class="st8" points="182.8,169.9 187.7,169.9 187.7,178.8 182.8,178.8 "/>
<path id="M_GND1_1_" class="st5" d="M187,174.4c0-0.9-0.8-1.7-1.7-1.7s-1.7,0.8-1.7,1.7c0,0.9,0.8,1.7,1.7,1.7S187,175.2,187,174.4z
"/>
<use xlink:href="#calliope_mini_backside" width="-32766" height="-32766" id="XMLID_3_" x="16383" y="16383" transform="matrix(0 0 0 0 30658.1055 -30089.127)" style="overflow:visible;"/>
</svg>
`
const pinNames = [
"EXT_PWR", "SPKR", "BTN_A", "BTN_B",
"EDGE_P0", "EDGE_P1", "EDGE_P2", "EDGE_P3", "EDGE_GND", "EDGE_VCC",
"C_GND1", "C_GND2", "C_GND3", "C_GND4", "C_VCC1", "C_VCC2",
"C_P0", "C_P2", "C_P4", "C_P6", "C_P8", "C_P10", "C_P12", "C_P14", "C_P16", "C_P18",
"C_P1", "C_P3", "C_P5", "C_P7", "C_P9", "C_P11", "C_P13", "C_P15", "C_P17", "C_P19",
"M_GND1", "M_GND2", "M_OUT1", "M_OUT2", "M_VM",
"G_A0_GND", "G_A0_VCC", "G_A0_SDA", "G_A0_SCL",
"G_A1_RX", "G_A1_TX", "G_A1_VCC", "G_A1_GND"
];
const pinTitles = [
"External Power", "Speaker", "Button A", "Button B",
"0, ANALOG IN", "1, ANALOG IN", "2, ANALOG IN", "3, ANALOG IN", "GND", "+3v3",
"GND", "GND", "GND", "GND", "+3v3", "+3v3",
"C0, ANALOG IN", "C2, ANALOG IN", "C4", "C6", "C8", "C10", "C12", "C14", "C16", "C18",
"C1, ANALOG IN", "C3, ANALOG IN", "C5", "C7", "C9", "C11", "C13", "C15", "C17", "C19",
"GND", "GND", "MOTOR1", "MOTOR2", "MOTOR VM",
"GND", "+3v3", "C18, I2C - SDA", "C19, I2C - SCL",
"C16, Serial - RX", "C17, Serial - TX", "+3v3", "GND"
];
const MB_WIDTH = 251.8;
const MB_HEIGHT = 222.2;
export interface IBoardTheme {
accent?: string;
display?: string;
pin?: string;
pinTouched?: string;
pinActive?: string;
ledOn?: string;
ledOff?: string;
buttonOuter?: string;
buttonUps: string[];
buttonDown?: string;
virtualButtonOuter?: string;
virtualButtonUp?: string;
virtualButtonDown?: string;
lightLevelOn?: string;
lightLevelOff?: string;
}
export var themes: IBoardTheme[] = ["#3ADCFE"].map(accent => {
return {
accent: accent,
pin: "#D4AF37",
pinTouched: "#FFA500",
pinActive: "#FF5500",
ledOn: "#ff7777",
ledOff: "#fff",
buttonOuter: "#979797",
buttonUps: ["#186A8C", "#D82E50"],
buttonDown: "#FFA500",
virtualButtonDown: "#FFA500",
virtualButtonOuter: "#333",
virtualButtonUp: "#fff",
lightLevelOn: "yellow",
lightLevelOff: "#555"
}
});
export function randomTheme(): IBoardTheme {
return themes[Math.floor(Math.random() * themes.length)];
}
export interface IBoardProps {
runtime?: pxsim.Runtime;
theme?: IBoardTheme;
disableTilt?: boolean;
wireframe?: boolean;
}
export class MicrobitBoardSvg implements BoardView {
public element: SVGSVGElement;
private style: SVGStyleElement;
private defs: SVGDefsElement;
private g: SVGGElement;
private buttons: SVGElement[];
private buttonsOuter: SVGElement[];
private pins: SVGElement[];
private pinGradients: SVGLinearGradientElement[];
private pinTexts: SVGTextElement[];
private ledsOuter: SVGElement[];
private leds: SVGElement[];
private systemLed: SVGCircleElement;
private antenna: SVGPolylineElement;
private lightLevelButton: SVGCircleElement;
private lightLevelGradient: SVGLinearGradientElement;
private lightLevelText: SVGTextElement;
private thermometerGradient: SVGLinearGradientElement;
private thermometer: SVGRectElement;
private thermometerText: SVGTextElement;
private shakeButton: SVGElement;
public board: pxsim.DalBoard;
private rgbLed: SVGElement;
private pinNmToCoord: Map<Coord> = {
"EXT_PWR": [
92.30997467041016,
-42.92474937438965
],
"SPKR": [
106.44635391235352,
-16.370698928833008
],
"BTN_A": [
93.8138427734375,
56.631452560424805
],
"BTN_B": [
204.92835235595703,
56.631452560424805
],
// rings
"EDGE_P0": [
56.002254486083984,
95.43130111694336
],
"EDGE_P1": [
103.00893783569336,
175.82388305664062
],
"EDGE_P2": [
195.90512084960938,
175.3082733154297
],
"EDGE_P3": [
241.79466247558594,
95.3883285522461
],
"EDGE_GND": [
103.00893783569336,
14.86682915687561
],
"EDGE_VCC": [
195.64733123779297,
14.86682915687561
],
"C_GND1": [
113.1493148803711,
159.83989715576172
],
"C_GND2": [
150.27342987060547,
159.83989715576172
],
"C_GND3": [
150.27342987060547,
153.5666275024414
],
"C_GND4": [
187.39752960205078,
153.5666275024414
],
"C_VCC1": [
187.39752960205078,
159.83989715576172
],
"C_VCC2": [
113.1922836303711,
153.5666275024414
],
"C_P0": [
119.33667373657227,
159.83989715576172
],
"C_P2": [
125.52401733398438,
159.83989715576172
],
"C_P4": [
131.71136474609375,
159.83989715576172
],
"C_P6": [
137.89871978759766,
159.83989715576172
],
"C_P8": [
144.08607482910156,
159.83989715576172
],
"C_P10": [
156.46077728271484,
159.83989715576172
],
"C_P12": [
162.64812469482422,
159.83989715576172
],
"C_P14": [
168.83545684814453,
159.83989715576172
],
"C_P16": [
175.02281951904297,
159.83989715576172
],
"C_P20": [
181.2101821899414,
159.83989715576172
],
"C_P1": [
119.379638671875,
153.5666275024414
],
"C_P3": [
125.56698226928711,
153.5666275024414
],
"C_P5": [
131.71136474609375,
153.5666275024414
],
"C_P7": [
137.89871978759766,
153.5666275024414
],
"C_P9": [
144.08607482910156,
153.5666275024414
],
"C_P11": [
156.46077728271484,
153.5666275024414
],
"C_P13": [
162.64812469482422,
153.5666275024414
],
"C_P15": [
168.83545684814453,
153.5666275024414
],
"C_P21": [
175.02281951904297,
153.5666275024414
],
"C_P19": [
181.2101821899414,
153.5666275024414
],
"M_GND1": [
137.89871978759766,
141.70752716064453
],
"M_GND2": [
156.46077728271484,
141.70752716064453
],
"M_OUT1": [
144.08607482910156,
141.70752716064453
],
"M_OUT2": [
150.27342987060547,
141.70752716064453
],
"M_VM": [
162.64812469482422,
141.70752716064453
],
"G_A0_GND": [
82.47036743164062,
72.35763549804688
],
"G_A0_VCC": [
78.34546279907227,
76.3106689453125
],
"G_A0_SDA": [
74.65023803710938,
80.00588989257812
],
"G_A0_SCL": [
70.43940734863281,
84.21672821044922
],
"G_A1_RX": [
216.52963256835938,
71.4982795715332
],
"G_A1_TX": [
220.65453338623047,
75.53724670410156
],
"G_A1_VCC": [
224.34976959228516,
79.23247528076172
],
"G_A1_GND": [
228.56060028076172,
83.44330978393555
]
};
constructor(public props: IBoardProps) {
this.buildDom();
if (props && props.wireframe)
svg.addClass(this.element, "sim-wireframe");
if (props && props.theme)
this.updateTheme();
if (props && props.runtime) {
this.board = this.props.runtime.board as pxsim.DalBoard;
this.board.updateSubscribers.push(() => this.updateState());
this.updateState();
this.attachEvents();
}
}
public getView(): SVGAndSize<SVGSVGElement> {
return {
el: this.element,
y: 0,
x: 0,
w: MB_WIDTH,
h: MB_HEIGHT
};
}
public getCoord(pinNm: string): Coord {
return this.pinNmToCoord[pinNm];
}
public highlightPin(pinNm: string): void {
//TODO: for instructions
}
public getPinDist(): number {
return 10;
}
private recordPinCoords() {
pinNames.forEach((nm, i) => {
const p = this.pins[i];
const r = p.getBoundingClientRect();
this.pinNmToCoord[nm] = [r.left + r.width / 2, r.top + r.height / 2];
});
console.log(JSON.stringify(this.pinNmToCoord, null, 2))
}
private updateTheme() {
let theme = this.props.theme;
svg.fills(this.leds, theme.ledOn);
svg.fills(this.ledsOuter, theme.ledOff);
svg.fills(this.buttonsOuter.slice(0, 2), theme.buttonOuter);
svg.fill(this.buttons[0], theme.buttonUps[0]);
svg.fill(this.buttons[1], theme.buttonUps[1]);
svg.fill(this.buttonsOuter[2], theme.virtualButtonOuter);
svg.fill(this.buttons[2], theme.virtualButtonUp);
this.pinGradients.forEach(lg => svg.setGradientColors(lg, theme.pin, theme.pinActive));
svg.setGradientColors(this.lightLevelGradient, theme.lightLevelOn, theme.lightLevelOff);
svg.setGradientColors(this.thermometerGradient, theme.ledOff, theme.ledOn);
}
public updateState() {
let state = this.board;
if (!state) return;
let theme = this.props.theme;
let bpState = state.buttonPairState;
let buttons = [bpState.aBtn, bpState.bBtn, bpState.abBtn];
buttons.forEach((btn, index) => {
svg.fill(this.buttons[index], btn.pressed ? (btn.virtual ? theme.virtualButtonDown : theme.buttonDown) : (btn.virtual ? theme.virtualButtonUp : theme.buttonUps[index]));
});
if (state.ledMatrixState.disabled) {
this.leds.forEach((led, i) => {
const sel = (<SVGStylable><any>led)
sel.style.opacity = "0";
})
} else {
const bw = state.ledMatrixState.displayMode == pxsim.DisplayMode.bw
const img = state.ledMatrixState.image;
this.leds.forEach((led, i) => {
const sel = (<SVGStylable><any>led)
sel.style.opacity = ((bw ? img.data[i] > 0 ? 255 : 0 : img.data[i]) / 255.0) + "";
})
}
this.updatePins();
this.updateTilt();
this.updateHeading();
this.updateLightLevel();
this.updateTemperature();
this.updateButtonAB();
this.updateGestures();
this.updateRgbLed();
this.updateSpeaker();
if (!runtime || runtime.dead) svg.addClass(this.element, "grayscale");
else svg.removeClass(this.element, "grayscale");
}
private updateRgbLed() {
let state = this.board;
if (state.rgbLedState) {
if (!this.rgbLed)
this.rgbLed = this.element.getElementById("rgbledcircle") as SVGCircleElement;
const c = state.rgbLedState;
const b = c & 0xFF;
const g = (c >> 8) & 0xFF;
const r = (c >> 16) & 0xFF;
const w = (c >> 24) & 0xFF;
const ch = `rgba(${r}, ${g}, ${b}, 1)`;
svg.fill(this.rgbLed, ch);
} else if (this.rgbLed) {
svg.fill(this.rgbLed, 'white');
}
}
private updateSpeaker() {
let state = this.board;
if (state.speakerState.frequency) {
} else {
}
}
private updateGestures() {
let state = this.board;
if (state.accelerometerState.useShake && !this.shakeButton) {
let shake = this.mkBtn(26, MB_HEIGHT - 67);
this.shakeButton = shake.inner;
svg.fill(this.shakeButton, this.props.theme.virtualButtonUp)
svg.buttonEvents(shake.outer,
ev => { },
(ev) => {
svg.fill(this.shakeButton, this.props.theme.virtualButtonDown)
},
(ev) => {
svg.fill(this.shakeButton, this.props.theme.virtualButtonUp);
this.board.bus.queue(DAL.MICROBIT_ID_GESTURE, 11); // GESTURE_SHAKE
}
)
let shakeText = svg.child(shake.outer, "text", { x: 20, y: MB_HEIGHT - 40, class: "sim-text inverted" }) as SVGTextElement;
shakeText.textContent = "SHAKE"
}
}
private updateButtonAB() {
let state = this.board;
if (state.buttonPairState.usesButtonAB && (<any>this.buttons[2]).style.visibility != "visible") {
(<any>this.buttonsOuter[2]).style.visibility = "visible";
(<any>this.buttons[2]).style.visibility = "visible";
this.updateTheme();
}
}
private updatePin(pin: Pin, index: number) {
if (!pin) return;
let text = this.pinTexts[index];
let v = "";
if (pin.mode & PinFlags.Analog) {
v = Math.floor(100 - (pin.value || 0) / 1023 * 100) + "%";
if (text) text.textContent = (pin.period ? "~" : "") + (pin.value || 0) + "";
}
else if (pin.mode & PinFlags.Digital) {
v = pin.value > 0 ? "0%" : "100%";
if (text) text.textContent = pin.value > 0 ? "1" : "0";
}
else if (pin.mode & PinFlags.Touch) {
v = pin.touched ? "0%" : "100%";
if (text) text.textContent = "";
} else {
v = "100%";
if (text) text.textContent = "";
}
if (v) svg.setGradientValue(this.pinGradients[index], v);
}
private updateTemperature() {
let state = this.board;
if (!state || !state.thermometerState.usesTemperature) return;
let tmin = -5;
let tmax = 50;
if (!this.thermometer) {
let gid = "gradient-thermometer";
this.thermometerGradient = svg.linearGradient(this.defs, gid);
const ty = MB_HEIGHT - 192;
this.thermometer = <SVGRectElement>svg.child(this.g, "rect", {
class: "sim-thermometer",
x: 85,
y: ty,
width: 10,
height: 80,
rx: 5, ry: 5,
fill: `url(#${gid})`
});
this.thermometerText = svg.child(this.g, "text", {
class: 'sim-text',
x: 100, y: MB_HEIGHT - 174
}) as SVGTextElement;
this.updateTheme();
let pt = this.element.createSVGPoint();
svg.buttonEvents(this.thermometer,
(ev) => {
let cur = svg.cursorPoint(pt, this.element, ev);
let t = Math.max(0, Math.min(1, (cur.y - ty - 5) / 70))
state.thermometerState.temperature = Math.floor(tmax - t * (tmax - tmin));
this.updateTemperature();
}, ev => { }, ev => { })
}
let t = Math.max(tmin, Math.min(tmax, state.thermometerState.temperature))
let per = Math.floor((state.thermometerState.temperature - tmin) / (tmax - tmin) * 100)
svg.setGradientValue(this.thermometerGradient, 100 - per + "%");
this.thermometerText.textContent = t + "°C";
}
private updateHeading() {
let xc = 258;
let yc = 75;
let state = this.board;
if (!state || !state.compassState.usesHeading) return;
/*
if (!this.headInitialized) {
let p = this.head.firstChild.nextSibling as SVGPathElement;
p.setAttribute("d", "m269.9,50.134647l0,0l-39.5,0l0,0c-14.1,0.1 -24.6,10.7 -24.6,24.8c0,13.9 10.4,24.4 24.3,24.7l0,0l39.6,0c14.2,0 40.36034,-22.97069 40.36034,-24.85394c0,-1.88326 -26.06034,-24.54606 -40.16034,-24.64606m-0.2,39l0,0l-39.3,0c-7.7,-0.1 -14,-6.4 -14,-14.2c0,-7.8 6.4,-14.2 14.2,-14.2l39.1,0c7.8,0 14.2,6.4 14.2,14.2c0,7.9 -6.4,14.2 -14.2,14.2l0,0l0,0z");
this.updateTheme();
let pt = this.element.createSVGPoint();
svg.buttonEvents(
this.head,
(ev: MouseEvent) => {
let cur = svg.cursorPoint(pt, this.element, ev);
state.compassState.heading = Math.floor(Math.atan2(cur.y - yc, cur.x - xc) * 180 / Math.PI + 90);
if (state.compassState.heading < 0) state.compassState.heading += 360;
this.updateHeading();
});
this.headInitialized = true;
}
let txt = state.compassState.heading.toString() + "°";
if (txt != this.headText.textContent) {
svg.rotateElement(this.head, xc, yc, state.compassState.heading + 180);
this.headText.textContent = txt;
} */
}
private lastFlashTime: number = 0;
public flashSystemLed() {
if (!this.systemLed)
this.systemLed = <SVGCircleElement>svg.child(this.g, "circle", { class: "sim-systemled", cx: 75, cy: MB_HEIGHT - 171, r: 2 })
let now = Date.now();
if (now - this.lastFlashTime > 150) {
this.lastFlashTime = now;
svg.animate(this.systemLed, "sim-flash")
}
}
private lastAntennaFlash: number = 0;
public flashAntenna() {
if (!this.antenna) {
let ax = 380;
let dax = 18;
let ayt = 10;
let ayb = 40;
this.antenna = <SVGPolylineElement>svg.child(this.g, "polyline", { class: "sim-antenna", points: `${ax},${ayb} ${ax},${ayt} ${ax += dax},${ayt} ${ax},${ayb} ${ax += dax},${ayb} ${ax},${ayt} ${ax += dax},${ayt} ${ax},${ayb} ${ax += dax},${ayb} ${ax},${ayt} ${ax += dax},${ayt}` })
}
let now = Date.now();
if (now - this.lastAntennaFlash > 200) {
this.lastAntennaFlash = now;
svg.animate(this.antenna, 'sim-flash-stroke')
}
}
private updatePins() {
let state = this.board;
if (!state) return;
state.edgeConnectorState.pins.forEach((pin, i) => this.updatePin(pin, i));
}
private updateLightLevel() {
let state = this.board;
if (!state || !state.lightSensorState.usesLightLevel) return;
if (!this.lightLevelButton) {
let gid = "gradient-light-level";
this.lightLevelGradient = svg.linearGradient(this.defs, gid)
const cx = 30;
const cy = 45;
const r = 20;
this.lightLevelButton = svg.child(this.g, "circle", {
cx: `${cx}px`, cy: `${cy}px`, r: `${r}px`,
class: 'sim-light-level-button',
fill: `url(#${gid})`
}) as SVGCircleElement;
let pt = this.element.createSVGPoint();
svg.buttonEvents(this.lightLevelButton,
(ev) => {
let pos = svg.cursorPoint(pt, this.element, ev);
let rs = r / 2;
let level = Math.max(0, Math.min(255, Math.floor((pos.y - (cy - rs)) / (2 * rs) * 255)));
if (level != this.board.lightSensorState.lightLevel) {
this.board.lightSensorState.lightLevel = level;
this.applyLightLevel();
}
}, ev => { },
ev => { })
this.lightLevelText = svg.child(this.g, "text", { x: cx - r - 7, y: cy + r + 8, text: '', class: 'sim-text inverted' }) as SVGTextElement;
this.updateTheme();
}
svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor(state.lightSensorState.lightLevel * 100 / 255))) + '%')
this.lightLevelText.textContent = state.lightSensorState.lightLevel.toString();
}
private applyLightLevel() {
let lv = this.board.lightSensorState.lightLevel;
svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor(lv * 100 / 255))) + '%')
this.lightLevelText.textContent = lv.toString();
}
private updateTilt() {
if (this.props.disableTilt) return;
let state = this.board;
if (!state || !state.accelerometerState.accelerometer.isActive) return;
let x = state.accelerometerState.accelerometer.getX();
let y = state.accelerometerState.accelerometer.getY();
let af = 8 / 1023;
this.element.style.transform = "perspective(30em) rotateX(" + y * af + "deg) rotateY(" + x * af + "deg)"
this.element.style.perspectiveOrigin = "50% 50% 50%";
this.element.style.perspective = "30em";
}
private buildDom() {
this.element = new DOMParser().parseFromString(BOARD_SVG, "image/svg+xml").querySelector("svg") as SVGSVGElement;
svg.hydrate(this.element, {
"version": "1.0",
"viewBox": `0 0 ${MB_WIDTH} ${MB_HEIGHT}`,
"class": "sim",
"x": "0px",
"y": "0px",
"width": MB_WIDTH + "px",
"height": MB_HEIGHT + "px",
});
this.style = <SVGStyleElement>svg.child(this.element, "style", {});
this.style.textContent = MB_STYLE;
this.defs = <SVGDefsElement>svg.child(this.element, "defs", {});
this.g = <SVGGElement>svg.elt("g");
this.element.appendChild(this.g);
// filters
let glow = svg.child(this.defs, "filter", { id: "filterglow", x: "-5%", y: "-5%", width: "120%", height: "120%" });
svg.child(glow, "feGaussianBlur", { stdDeviation: "5", result: "glow" });
let merge = svg.child(glow, "feMerge", {});
for (let i = 0; i < 3; ++i) svg.child(merge, "feMergeNode", { in: "glow" })
// leds
this.leds = [];
this.ledsOuter = [];
const left = 103.04, top = MB_HEIGHT - 158.59;
const ledoffw = 10.91, ledoffh = 10.68;
const ledw = 2.7;
const ledh = 5.47;
for (let i = 0; i < 5; ++i) {
let ledtop = i * ledoffh + top;
for (let j = 0; j < 5; ++j) {
let ledleft = j * ledoffw + left;
let k = i * 5 + j;
this.ledsOuter.push(svg.child(this.g, "rect", { class: "sim-led-back", x: ledleft, y: ledtop, width: ledw, height: ledh }));
this.leds.push(svg.child(this.g, "rect", { class: "sim-led", x: ledleft - 1, y: ledtop - 1, width: ledw + 2, height: ledh + 2, rx: 2, ry: 2, title: `(${j},${i})` }));
}
}
// https://www.microbit.co.uk/device/pins
// P0, P1, P2
this.pins = pinNames.map(n => {
let p = this.element.getElementById(n) as SVGElement;
svg.addClass(p, "sim-pin");
return p;
});
this.pins.forEach((p, i) => svg.hydrate(p, { title: pinTitles[i] }));
this.pinGradients = this.pins.map((pin, i) => {
let gid = "gradient-pin-" + i
let lg = svg.linearGradient(this.defs, gid)
pin.setAttribute("fill", `url(#${gid})`);
return lg;
})
this.pinTexts = [67, 165, 275].map(x => <SVGTextElement>svg.child(this.g, "text", { class: "sim-text-pin", x: x, y: 345 }));
// BTN A, B
const btnids = ["BTN_A", "BTN_B"];
this.buttonsOuter = btnids.map(n => this.element.getElementById(n + "_BOX") as SVGElement);
this.buttonsOuter.forEach(b => svg.addClass(b, "sim-button-outer"));
this.buttons = btnids.map(n => this.element.getElementById(n) as SVGElement);
this.buttons.forEach(b => svg.addClass(b, "sim-button"));
// BTN A+B
const outerBtn = (left: number, top: number) => {
const button = this.mkBtn(left, top);
this.buttonsOuter.push(button.outer);
this.buttons.push(button.inner);
return button;
}
let ab = outerBtn(210, MB_HEIGHT - 168);
let abtext = svg.child(ab.outer, "text", { x: 208, y: MB_HEIGHT - 173, class: "sim-text inverted" }) as SVGTextElement;
abtext.textContent = "A+B";
(<any>this.buttonsOuter[2]).style.visibility = "hidden";
(<any>this.buttons[2]).style.visibility = "hidden";
}
private mkBtn(left: number, top: number): { outer: SVGElement, inner: SVGElement } {
const btnr = 2;
const btnw = 16;
const btnn = 1.6;
const btnnm = 2;
const btnb = 5;
let btng = svg.child(this.g, "g", { class: "sim-button-group" });
svg.child(btng, "rect", { class: "sim-button-outer", x: left, y: top, rx: btnr, ry: btnr, width: btnw, height: btnw });
svg.child(btng, "circle", { class: "sim-button-nut", cx: left + btnnm, cy: top + btnnm, r: btnn });
svg.child(btng, "circle", { class: "sim-button-nut", cx: left + btnnm, cy: top + btnw - btnnm, r: btnn });
svg.child(btng, "circle", { class: "sim-button-nut", cx: left + btnw - btnnm, cy: top + btnw - btnnm, r: btnn });
svg.child(btng, "circle", { class: "sim-button-nut", cx: left + btnw - btnnm, cy: top + btnnm, r: btnn });
const outer = btng;
const inner = svg.child(btng, "circle", {
class: "sim-button",
cx: left + btnw / 2,
cy: top + btnw / 2,
r: btnb
});
return { outer, inner };
}
private attachEvents() {
Runtime.messagePosted = (msg) => {
switch (msg.type || "") {
case "serial": this.flashSystemLed(); break;
case "radiopacket": this.flashAntenna(); break;
}
}
let tiltDecayer = 0;
this.element.addEventListener(pointerEvents.move, (ev: MouseEvent) => {
let state = this.board;
if (!state.accelerometerState.accelerometer.isActive) return;
if (tiltDecayer) {
clearInterval(tiltDecayer);
tiltDecayer = 0;
}
let bbox = this.element.getBoundingClientRect();
let ax = (ev.clientX - bbox.width / 2) / (bbox.width / 3);
let ay = (ev.clientY - bbox.height / 2) / (bbox.height / 3);
let x = - Math.max(- 1023, Math.min(1023, Math.floor(ax * 1023)));
let y = - Math.max(- 1023, Math.min(1023, Math.floor(ay * 1023)));
let z2 = 1023 * 1023 - x * x - y * y;
let z = Math.floor((z2 > 0 ? -1 : 1) * Math.sqrt(Math.abs(z2)));
state.accelerometerState.accelerometer.update(x, y, z);
this.updateTilt();
}, false);
this.element.addEventListener(pointerEvents.leave, (ev: MouseEvent) => {
let state = this.board;
if (!state.accelerometerState.accelerometer.isActive) return;
if (!tiltDecayer) {
tiltDecayer = setInterval(() => {
let accx = state.accelerometerState.accelerometer.getX(MicroBitCoordinateSystem.RAW);
accx = Math.floor(Math.abs(accx) * 0.85) * (accx > 0 ? 1 : -1);
let accy = state.accelerometerState.accelerometer.getY(MicroBitCoordinateSystem.RAW);
accy = Math.floor(Math.abs(accy) * 0.85) * (accy > 0 ? 1 : -1);
let accz = -Math.sqrt(Math.max(0, 1023 * 1023 - accx * accx - accy * accy));
if (Math.abs(accx) <= 24 && Math.abs(accy) <= 24) {
clearInterval(tiltDecayer);
tiltDecayer = 0;
accx = 0;
accy = 0;
accz = -1023;
}
state.accelerometerState.accelerometer.update(accx, accy, accz);
this.updateTilt();
}, 50)
}
}, false);
this.pins.forEach((pin, index) => {
if (!this.board.edgeConnectorState.pins[index]) return;
let pt = this.element.createSVGPoint();
svg.buttonEvents(pin,
// move
ev => {
let state = this.board;
let pin = state.edgeConnectorState.pins[index];
let svgpin = this.pins[index];
if (pin.mode & PinFlags.Input) {
let cursor = svg.cursorPoint(pt, this.element, ev);
let v = (400 - cursor.y) / 40 * 1023
pin.value = Math.max(0, Math.min(1023, Math.floor(v)));
}
this.updatePin(pin, index);
},
// start
ev => {
let state = this.board;
let pin = state.edgeConnectorState.pins[index];
let svgpin = this.pins[index];
svg.addClass(svgpin, "touched");
if (pin.mode & PinFlags.Input) {
let cursor = svg.cursorPoint(pt, this.element, ev);
let v = (400 - cursor.y) / 40 * 1023
pin.value = Math.max(0, Math.min(1023, Math.floor(v)));
}
this.updatePin(pin, index);
},
// stop
(ev: MouseEvent) => {
let state = this.board;
let pin = state.edgeConnectorState.pins[index];
let svgpin = this.pins[index];
svg.removeClass(svgpin, "touched");
this.updatePin(pin, index);
return false;
});
})
this.pins.slice(0, 3).forEach((btn, index) => {
btn.addEventListener(pointerEvents.down, ev => {
let state = this.board;
state.edgeConnectorState.pins[index].touched = true;
this.updatePin(state.edgeConnectorState.pins[index], index);
})
btn.addEventListener(pointerEvents.leave, ev => {
let state = this.board;
state.edgeConnectorState.pins[index].touched = false;
this.updatePin(state.edgeConnectorState.pins[index], index);
})
btn.addEventListener(pointerEvents.up, ev => {
let state = this.board;
state.edgeConnectorState.pins[index].touched = false;
this.updatePin(state.edgeConnectorState.pins[index], index);
this.board.bus.queue(state.edgeConnectorState.pins[index].id, DAL.MICROBIT_BUTTON_EVT_UP);
this.board.bus.queue(state.edgeConnectorState.pins[index].id, DAL.MICROBIT_BUTTON_EVT_CLICK);
})
})
let bpState = this.board.buttonPairState;
let stateButtons = [bpState.aBtn, bpState.bBtn, bpState.abBtn];
this.buttonsOuter.slice(0, 2).forEach((btn, index) => {
btn.addEventListener(pointerEvents.down, ev => {
let state = this.board;
stateButtons[index].pressed = true;
svg.fill(this.buttons[index], this.props.theme.buttonDown);
})
btn.addEventListener(pointerEvents.leave, ev => {
let state = this.board;
stateButtons[index].pressed = false;
svg.fill(this.buttons[index], this.props.theme.buttonUps[index]);
})
btn.addEventListener(pointerEvents.up, ev => {
let state = this.board;
stateButtons[index].pressed = false;
svg.fill(this.buttons[index], this.props.theme.buttonUps[index]);
this.board.bus.queue(stateButtons[index].id, DAL.MICROBIT_BUTTON_EVT_UP);
this.board.bus.queue(stateButtons[index].id, DAL.MICROBIT_BUTTON_EVT_CLICK);
})
})
this.buttonsOuter[2].addEventListener(pointerEvents.down, ev => {
let state = this.board;
stateButtons[0].pressed = true;
stateButtons[1].pressed = true;
stateButtons[2].pressed = true;
svg.fill(this.buttons[0], this.props.theme.buttonDown);
svg.fill(this.buttons[1], this.props.theme.buttonDown);
svg.fill(this.buttons[2], this.props.theme.buttonDown);
})
this.buttonsOuter[2].addEventListener(pointerEvents.leave, ev => {
let state = this.board;
stateButtons[0].pressed = false;
stateButtons[1].pressed = false;
stateButtons[2].pressed = false;
svg.fill(this.buttons[0], this.props.theme.buttonUps[0]);
svg.fill(this.buttons[1], this.props.theme.buttonUps[1]);
svg.fill(this.buttons[2], this.props.theme.virtualButtonUp);
})
this.buttonsOuter[2].addEventListener(pointerEvents.up, ev => {
let state = this.board;
stateButtons[0].pressed = false;
stateButtons[1].pressed = false;
stateButtons[2].pressed = false;
svg.fill(this.buttons[0], this.props.theme.buttonUps[0]);
svg.fill(this.buttons[1], this.props.theme.buttonUps[1]);
svg.fill(this.buttons[2], this.props.theme.virtualButtonUp);
this.board.bus.queue(stateButtons[2].id, DAL.MICROBIT_BUTTON_EVT_UP);
this.board.bus.queue(stateButtons[2].id, DAL.MICROBIT_BUTTON_EVT_CLICK);
})
}
}
}