pxt-calliope/sim/visuals/microbit.ts

1673 lines
95 KiB
TypeScript
Raw Normal View History

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 {
2016-10-13 08:40:33 +02:00
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 {
2017-02-24 22:22:46 +01:00
fill-opacity:0.0;
stroke:#555;
2017-02-24 22:22:46 +01:00
stroke-width: 4px;
}
.sim-text {
font-family:"Lucida Console", Monaco, monospace;
2017-02-24 22:22:46 +01:00
font-size:14px;
fill:#fff;
2016-10-13 07:44:05 +02:00
pointer-events: none; user-select: none;
}
2016-09-27 20:00:21 +02:00
.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;
}
2016-10-13 07:44:05 +02:00
#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;
}
2016-08-31 22:39:47 +02:00
.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;
}
2016-08-31 22:39:47 +02:00
.sim-wireframe .sim-board {
stroke-width: 2px;
}
`;
2016-10-17 05:09:13 +02:00
const BOARD_SVG = `<?xml version="1.0" encoding="utf-8"?>
2017-02-24 22:22:46 +01:00
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
2017-02-24 17:51:42 +01:00
<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"
2017-02-24 22:22:46 +01:00
width="530px" height="530px" viewBox="0 0 530 530" enable-background="new 0 0 530 530" xml:space="preserve">
<path fill="#034854" d="M520.5,298.5c-18.2,0-32.9-14.7-32.9-32.9s14.7-32.9,32.9-32.9c0.6,0,1.3,0,1.9,0.1
c-19.4-9-44.4-27.4-72.1-63.3c-28.8-37.8-28.6-84.7-25.8-115c0.2-2.3,0.4-4.5,0.7-6.6c1.5-14.7-7.2-28.6-21.3-33.6l-1.1-0.4
c-9.5-3.4-20.1-2-28.4,3.9c-1.4,1-2.9,2-4.5,3.1c-22.1,14.8-62.8,37.6-104.6,37.6c-39.2,0-80.1-22.2-104.7-38.3
c5.7,5.9,9.3,14,9.3,22.9c0,18.2-14.7,32.9-32.9,32.9c-12.4,0-23.2-6.9-28.8-17c2.3,27.8-0.7,71.6-26.4,109.2
C60.1,199.2,27,220.2,3.3,232.3c2-0.4,4.1-0.6,6.2-0.6c18.2,0,33,14.4,32.9,32.8c0,18.2-14.7,32.9-32.9,32.9c-2,0-4-0.2-5.9-0.5
c17.2,5.6,37.6,16.2,71.3,56.2c34.4,40.4,35.9,94.5,32.3,124.1c-1.8,13.7,1.6,27.9,12.5,36.3c10.4,8.1,28.8,5.4,39.5-2.5
c12.4-9.3,25.8-18.2,39.5-24.5c15.5-7.2,30.1-11.1,39.6-11.8c5-0.5,9.8-2.3,11.4-7.1c2-5.7,6.2-12.7,15.9-12.7
c9.3,0,13.8,6.4,15.9,12c1.6,4.3,5.4,7.3,10,7.7c6.6,0.5,18.4,3.2,39.3,11.2c17,6.6,29.6,16.2,40.2,23.2
c18.4,11.8,32.1,8.8,41.4,2.9c8.3-5.2,12.7-14.9,11.4-24.8c-3.1-22-5.8-73,22-121.1c21.5-36.7,54.4-56.1,77.5-67.5
C522.3,298.5,521.4,298.5,520.5,298.5z M138,502.8c-8.7,0-15.7-7-15.7-15.7s7-15.7,15.7-15.7s15.7,7,15.7,15.7
S146.6,502.8,138,502.8z M393.4,501.5c-8.7,0-15.7-7-15.7-15.7c0-8.7,7-15.7,15.7-15.7s15.7,7,15.7,15.7
C409.1,494.5,402.1,501.5,393.4,501.5z M393.4,59.2c-8.6,0-15.7-6.9-15.7-15.7c0-8.8,6.9-15.7,15.7-15.7c8.8,0,15.7,6.9,15.7,15.7
C409.1,52.3,401.9,59.2,393.4,59.2z"/>
<path id="EDGE_VCC" fill="#EFDA48" d="M393.4,10.8c-9.2,0-17.6,3.8-23.6,9.9c-5.8,5.9-9.3,14-9.3,22.9c0,18.2,14.7,32.9,32.9,32.9
c14.4,0,26.6-9.3,31.1-22.1c1.2-3.4,1.8-7,1.8-10.8C426.3,25.5,411.5,10.8,393.4,10.8z M393.4,59.2c-8.6,0-15.7-6.9-15.7-15.7
c0-8.8,6.9-15.7,15.7-15.7c8.8,0,15.7,6.9,15.7,15.7C409.1,52.3,401.9,59.2,393.4,59.2z"/>
<path fill="#BDD1CF" d="M286.9,94h-41.7c-1.7,0-2.8-1.1-2.8-2.8v-32c0-1.7,1.1-2.8,2.8-2.8h41.7c1.7,0,2.8,1.1,2.8,2.8v32
C289.7,92.8,288.3,94,286.9,94z"/>
<path id="EXT_PWR" fill="#F2F2C8" d="M449.4,343l-37-15.7c-0.3-0.1-0.7-0.2-1.1-0.2l-15.9-6.7l-3,7.4l13.5,5.6l-15.7,37.4l-13.6-5.8
l-3,7.4l22.5,9.8l0.1-0.2l31.3,13.2c1.9,0.7,4.1,0,4.7-1.9l19.2-45.7C452,345.8,451.3,343.7,449.4,343z"/>
<polygon fill="#F8B133" points="354,361 326.3,361 326.3,311.2 354,311.2 "/>
<polygon fill="#1D1D1B" points="190.7,364.4 162.5,336.2 190.7,308 218.9,336.2 "/>
<polygon fill="#FFFFFF" points="184.6,379.7 165.5,379.6 165.5,362.4 184.6,362.6 "/>
<rect id="ACCEL" x="132.3" y="241.8" fill="#1D1D1B" width="23.8" height="14.4"/>
<path fill="#BDD1CF" d="M326.6,84.1h-10.3c-1,0-2-0.9-2-2V66.9c0-1,0.9-2,2-2h10.3c1,0,2,0.9,2,2v15.2
C328.4,83.2,327.6,84.1,326.6,84.1z"/>
<path fill="#FFFFFF" d="M325.9,74.5c0-3.2-0.3-8.4-4.6-8.4c-5.1,0-4.6,5-4.6,8.4c0,3.2-0.2,8.4,4.6,8.4
C326.6,82.9,325.9,77.6,325.9,74.5z"/>
<rect id="FLASH" x="350" y="90" fill="#1D1D1B" width="25.3" height="30.8"/>
<rect id="G_A0" x="80.5" y="144.4" transform="matrix(-0.5687 0.8226 -0.8226 -0.5687 301.6608 150.839)" fill="#FFFFFF" width="61.5" height="20.3"/>
<circle id="G_A0_GND" fill="#BDD1CF" cx="124.8" cy="135.6" r="2.7"/>
<circle id="G_A0_VCC" fill="#BDD1CF" cx="115.6" cy="148.2" r="2.7"/>
<circle id="G_A0_SDA" fill="#BDD1CF" cx="107.4" cy="160" r="2.7"/>
<circle id="G_A0_SCL" fill="#BDD1CF" cx="98" cy="173.5" r="2.7"/>
<rect id="G_A1" x="412.2" y="123.3" transform="matrix(-0.8226 0.5687 -0.5687 -0.8226 857.3843 40.5361)" fill="#FFFFFF" width="20.3" height="61.5"/>
<circle id="G_A1_RX" fill="#BDD1CF" cx="408.9" cy="135.2" r="2.7"/>
<circle id="G_A1_TX" fill="#BDD1CF" cx="418.2" cy="147.7" r="2.7"/>
<circle id="G_A1_VCC" fill="#BDD1CF" cx="426.5" cy="159.6" r="2.7"/>
<circle id="G_A1_GND" fill="#BDD1CF" cx="435.7" cy="173" r="2.7"/>
<path fill="#FFFFFF" d="M116.6,194.9l-37.7,13.2l9.6,30.1l39.3-14.2c7.3-2.3,9.6-9.1,7.3-16.4l-1.3-3.8
C131.6,196.8,123.8,192.6,116.6,194.9z M131.6,216.4h-5.8v-2.1l1.3-0.2l-0.7-2.3h-5.7l-0.7,2.3l1.3,0.2v2.1h-5.8v-2.1l1.3-0.2
l5.3-14.9h3.6l5.1,14.9l1.3,0.2L131.6,216.4L131.6,216.4z"/>
<path fill="#FFFFFF" d="M411.7,193c-7.6-2.1-15.2,2.8-17.4,10.1l-1,3.8c-2.1,7.3,2.1,14.9,9.4,17.1l40,12.8l8.9-30.6L411.7,193z
M413.1,215.1c-1,0.9-2.7,1.3-4.6,1.3H400v-2.1l1.8-0.3v-12.4l-1.8-0.3v-2.1h1.8h5.8c2,0,3.6,0.3,4.8,1.3c1,0.7,1.8,2,1.8,3.6
c0,0.7-0.2,1.6-0.7,2.1c-0.3,0.7-1,1-1.8,1.5c1,0.2,1.8,0.7,2.3,1.5c0.5,0.7,0.7,1.6,0.7,2.5C414.7,213,414.2,214.1,413.1,215.1z"/>
<polygon fill="#FFFFFF" points="122.8,202.8 120.9,208.8 124.8,208.8 "/>
<path fill="#FFFFFF" d="M410.1,204.8c0.3-0.3,0.5-0.7,0.5-1.3c0-0.7-0.2-1-0.5-1.5c-0.3-0.3-0.9-0.3-1.8-0.3h-3v3.6h3.2
C409.2,205.4,409.8,205.2,410.1,204.8z"/>
<path fill="#FFFFFF" d="M408.5,208.7h-3.3v5h3.2c0.9,0,1.6-0.2,2.1-0.5c0.5-0.3,0.7-1,0.7-1.8c0-0.9-0.2-1.5-0.5-2
C410.2,208.8,409.6,208.7,408.5,208.7z"/>
<rect x="75.5" y="190.3" transform="matrix(-0.4514 0.8923 -0.8923 -0.4514 290.9554 206.6756)" fill="#F9EBA7" width="12.8" height="5"/>
<rect x="100" y="202.6" transform="matrix(-0.4514 0.8923 -0.8923 -0.4514 337.565 202.7501)" fill="#F9EBA7" width="12.8" height="5"/>
<rect x="53.5" y="233.5" transform="matrix(-0.4514 0.8923 -0.8923 -0.4514 297.6011 288.9738)" fill="#F9EBA7" width="12.8" height="5"/>
<rect x="78.2" y="245.9" transform="matrix(-0.4514 0.8923 -0.8923 -0.4514 344.3886 285.0334)" fill="#F9EBA7" width="12.8" height="5"/>
<path id="BTN_A_BOX" fill="#BDD1CF" d="M90.1,244.3l-29.7-15.1c-0.9-0.5-1.3-1.6-0.9-2.7l15.1-30.1c0.5-0.9,1.6-1.3,2.7-0.9
l29.7,15.1c0.9,0.5,1.3,1.6,0.9,2.7l-15.1,30.2C92.2,244.3,91,244.8,90.1,244.3z"/>
<circle id="BTN_A" fill="#42767F" cx="83.8" cy="220" r="11.6"/>
<circle fill="#1D1D1B" cx="77.7" cy="201.5" r="3.9"/>
<circle fill="#1D1D1B" cx="102.1" cy="214" r="3.9"/>
<circle fill="#1D1D1B" cx="65.3" cy="225.8" r="3.9"/>
<circle fill="#1D1D1B" cx="89.8" cy="238.3" r="3.9"/>
<rect x="423.2" y="198.5" transform="matrix(-0.8998 0.4362 -0.4362 -0.8998 898.2063 203.5292)" fill="#F9EBA7" width="5" height="12.8"/>
<rect x="447.9" y="186.5" transform="matrix(-0.8998 0.4362 -0.4362 -0.8998 939.8604 170.0185)" fill="#F9EBA7" width="5" height="12.8"/>
<rect x="444.3" y="242.1" transform="matrix(-0.8998 0.4362 -0.4362 -0.8998 957.366 277.2607)" fill="#F9EBA7" width="5" height="12.8"/>
<rect x="469" y="230" transform="matrix(-0.8998 0.4362 -0.4362 -0.8998 998.9489 243.5197)" fill="#F9EBA7" width="5" height="12.8"/>
<path id="BTN_B_BOX" fill="#BDD1CF" d="M471.6,229.7l-30.1,14.6c-0.9,0.5-2.1,0-2.5-0.9l-14.7-30.3c-0.5-0.9,0-2.1,0.9-2.5
l30.1-14.6c0.9-0.5,2.1,0,2.5,0.9l14.7,30.3C473.1,227.9,472.8,229.2,471.6,229.7z"/>
<circle id="BTN_B" fill="#BC1254" cx="448.5" cy="220" r="11.6"/>
<circle fill="#1D1D1B" cx="430" cy="213.5" r="3.9"/>
<circle fill="#1D1D1B" cx="454.8" cy="201.6" r="3.9"/>
<circle fill="#1D1D1B" cx="442" cy="238.3" r="3.9"/>
<circle fill="#1D1D1B" cx="466.8" cy="226.2" r="3.9"/>
<polygon fill="#FFFFFF" points="139,280.5 123.8,280.5 123.8,278.8 138.4,278.8 139.4,277.4 139.4,255.8 141.4,255.8 141.4,278.3
"/>
<polygon fill="#FFFFFF" points="265.5,108.8 258.6,108.8 258.6,106.9 264.6,106.9 265.9,105.7 265.9,95.9 267.6,95.9 267.6,106.5
"/>
<polygon fill="#FFFFFF" points="339.1,73.8 328.1,73.8 328.1,75.7 338.5,75.7 339.6,76.8 339.6,100.9 338.5,102.2 337.3,102.2
337.3,104 339.1,104 341.5,101.7 341.5,76.1 "/>
<polygon fill="#FFFFFF" points="305.8,322.6 277.3,322.6 277.3,320.9 305.2,320.9 306.4,319.6 306.4,301.2 305.2,300 302,300
302,298.2 305.8,298.2 308.2,300.6 308.2,320.6 "/>
<polygon fill="#FFFFFF" points="412.1,279.8 367.8,279.8 367.8,277.9 412.3,277.9 "/>
<polygon fill="#FFFFFF" points="201.2,352.9 222.7,374.6 228.9,374.6 228.9,372.8 223.5,372.8 202.4,351.6 "/>
<polygon fill="#FFFFFF" points="406.3,386.2 390.3,402.3 368.3,402.5 368.3,400.7 389.6,400.7 404.3,385.5 "/>
<path id="C_GND1" fill="#EFDA48" d="M165.3,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C170.3,436.8,167.9,434.6,165.3,434.6z M165.3,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.5,0,2.5,1,2.5,2.5
S166.6,441.9,165.3,441.9z"/>
<circle fill="#1D1D1B" cx="165.3" cy="439.6" r="2.5"/>
<path id="C_P0" fill="#EFDA48" d="M182.2,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1
C187.5,436.8,185.1,434.6,182.2,434.6z M182.2,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
S183.6,441.9,182.2,441.9z"/>
<circle fill="#1D1D1B" cx="182.2" cy="439.6" r="2.5"/>
<path id="C_P2" fill="#EFDA48" d="M199.3,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C204.5,436.8,202.2,434.6,199.3,434.6z M199.3,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
S200.7,441.9,199.3,441.9z"/>
<circle fill="#1D1D1B" cx="199.3" cy="439.6" r="2.5"/>
<path id="C_P4" fill="#EFDA48" d="M216.4,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C221.4,436.8,219.3,434.6,216.4,434.6z M216.4,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
S217.6,441.9,216.4,441.9z"/>
<circle fill="#1D1D1B" cx="216.4" cy="439.6" r="2.5"/>
<path id="C_P6" fill="#EFDA48" d="M233.5,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1
C238.3,436.8,236.1,434.6,233.5,434.6z M233.5,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.5,0,2.5,1,2.5,2.5
S234.7,441.9,233.5,441.9z"/>
<circle fill="#1D1D1B" cx="233.5" cy="439.6" r="2.5"/>
<path id="C_P8" fill="#EFDA48" d="M250.3,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C255.5,436.8,253.3,434.6,250.3,434.6z M250.3,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
S251.8,441.9,250.3,441.9z"/>
<circle fill="#1D1D1B" cx="250.3" cy="439.6" r="2.5"/>
<path id="C_GND2" fill="#EFDA48" d="M267.5,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C272.6,436.8,270.2,434.6,267.5,434.6z M267.5,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
S268.9,441.9,267.5,441.9z"/>
<circle fill="#1D1D1B" cx="267.5" cy="439.6" r="2.5"/>
<path id="C_P10" fill="#EFDA48" d="M284.6,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1
C289.7,436.8,287.4,434.6,284.6,434.6z M284.6,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
S285.8,441.9,284.6,441.9z"/>
<circle fill="#1D1D1B" cx="284.6" cy="439.6" r="2.5"/>
<path id="C_P12" fill="#EFDA48" d="M301.5,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C306.6,436.8,304.4,434.6,301.5,434.6z M301.5,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
S302.9,441.9,301.5,441.9z"/>
<circle fill="#1D1D1B" cx="301.5" cy="439.6" r="2.5"/>
<path id="C_P14" fill="#EFDA48" d="M318.7,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1
C323.5,436.8,321.3,434.6,318.7,434.6z M318.7,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5S320,441.9,318.7,441.9
2017-02-24 17:51:42 +01:00
z"/>
2017-02-24 22:22:46 +01:00
<circle fill="#1D1D1B" cx="318.7" cy="439.6" r="2.5"/>
<path id="C_P16" fill="#EFDA48" d="M335.4,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C340.7,436.8,338.5,434.6,335.4,434.6z M335.4,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5S337,441.9,335.4,441.9
2017-02-24 17:51:42 +01:00
z"/>
2017-02-24 22:22:46 +01:00
<circle fill="#1D1D1B" cx="335.4" cy="439.6" r="2.5"/>
<path id="C_P18" fill="#EFDA48" d="M352.7,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C357.8,436.8,355.5,434.6,352.7,434.6z M352.7,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
S354.1,441.9,352.7,441.9z"/>
<circle fill="#1D1D1B" cx="352.7" cy="439.6" r="2.5"/>
<path id="C_VCC1" fill="#EFDA48" d="M369.7,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C374.6,436.8,372.5,434.6,369.7,434.6z M369.7,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
S370.9,441.9,369.7,441.9z"/>
<circle fill="#1D1D1B" cx="369.7" cy="439.6" r="2.5"/>
<path id="C_VCC2" fill="#EFDA48" d="M165.3,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C170.4,419.7,167.9,417.4,165.3,417.4z M165.3,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.5,0,2.5,1,2.5,2.5
C167.7,424,166.6,425,165.3,425z"/>
<circle fill="#1D1D1B" cx="165.3" cy="422.4" r="2.5"/>
<path id="C_P1" fill="#EFDA48" d="M182.2,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1
C187.4,419.7,185.1,417.4,182.2,417.4z M182.2,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
C184.7,424,183.6,425,182.2,425z"/>
<circle fill="#1D1D1B" cx="182.2" cy="422.4" r="2.5"/>
<path id="C_P3" fill="#EFDA48" d="M199.3,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C204.4,419.7,202.2,417.4,199.3,417.4z M199.3,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
C201.9,424,200.7,425,199.3,425z"/>
<circle fill="#1D1D1B" cx="199.3" cy="422.4" r="2.5"/>
<path id="C_P5" fill="#EFDA48" d="M216.4,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C221.5,419.7,219.3,417.4,216.4,417.4z M216.4,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
C218.7,424,217.6,425,216.4,425z"/>
<circle fill="#1D1D1B" cx="216.4" cy="422.4" r="2.5"/>
<path id="C_P7" fill="#EFDA48" d="M233.5,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1
C238.6,419.7,236.1,417.4,233.5,417.4z M233.5,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.5,0,2.5,1,2.5,2.5
C235.7,424,234.7,425,233.5,425z"/>
<circle fill="#1D1D1B" cx="233.5" cy="422.4" r="2.5"/>
<path id="C_P9" fill="#EFDA48" d="M250.3,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C255.4,419.7,253.3,417.4,250.3,417.4z M250.3,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
C252.8,424,251.8,425,250.3,425z"/>
<circle fill="#1D1D1B" cx="250.3" cy="422.4" r="2.5"/>
<path id="C_GND3" fill="#EFDA48" d="M267.5,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C272.6,419.7,270.2,417.4,267.5,417.4z M267.5,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
C270,424,268.9,425,267.5,425z"/>
<circle fill="#1D1D1B" cx="267.5" cy="422.4" r="2.5"/>
<path id="C_P11" fill="#EFDA48" d="M284.6,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1
C289.7,419.7,287.4,417.4,284.6,417.4z M284.6,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
C286.9,424,285.8,425,284.6,425z"/>
<circle fill="#1D1D1B" cx="284.6" cy="422.4" r="2.5"/>
<path id="C_P13" fill="#EFDA48" d="M301.5,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C306.6,419.7,304.4,417.4,301.5,417.4z M301.5,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
C303.9,424,302.9,425,301.5,425z"/>
<circle fill="#1D1D1B" cx="301.5" cy="422.4" r="2.5"/>
<path id="C_P15" fill="#EFDA48" d="M318.7,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1
C323.8,419.7,321.3,417.4,318.7,417.4z M318.7,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
C321,424,320,425,318.7,425z"/>
<circle fill="#1D1D1B" cx="318.7" cy="422.4" r="2.5"/>
<path id="C_P17" fill="#EFDA48" d="M335.4,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C340.6,419.7,338.5,417.4,335.4,417.4z M335.4,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
C338.1,424,337,425,335.4,425z"/>
<circle fill="#1D1D1B" cx="335.4" cy="422.4" r="2.5"/>
<path id="C_P19" fill="#EFDA48" d="M352.7,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C357.8,419.7,355.5,417.4,352.7,417.4z M352.7,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
C355.2,424,354.1,425,352.7,425z"/>
<circle fill="#1D1D1B" cx="352.7" cy="422.4" r="2.5"/>
<path id="C_GND4" fill="#EFDA48" d="M369.7,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
C374.8,419.7,372.5,417.4,369.7,417.4z M369.7,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
C372,424,370.9,425,369.7,425z"/>
<circle fill="#1D1D1B" cx="369.7" cy="422.4" r="2.5"/>
<path id="M_GND1" fill="#EFDA48" d="M233.5,384.8c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1S236.1,384.8,233.5,384.8z
M233.5,392.3c-1.3,0-2.5-1-2.5-2.5c0-1.5,1-2.5,2.5-2.5c1.5,0,2.5,1,2.5,2.5C236,391.3,234.7,392.3,233.5,392.3z"/>
<circle fill="#1D1D1B" cx="233.5" cy="389.7" r="2.5"/>
<path id="M_OUT1" fill="#EFDA48" d="M250.3,384.8c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
S253.3,384.8,250.3,384.8z M250.3,392.3c-1.3,0-2.5-1-2.5-2.5c0-1.5,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
C252.8,391.3,251.8,392.3,250.3,392.3z"/>
<circle fill="#1D1D1B" cx="250.3" cy="389.7" r="2.5"/>
<path id="M_OUT2" fill="#EFDA48" d="M267.5,384.8c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
S270.2,384.8,267.5,384.8z M267.5,392.3c-1.3,0-2.5-1-2.5-2.5c0-1.5,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
C270,391.3,268.9,392.3,267.5,392.3z"/>
<circle fill="#1D1D1B" cx="267.5" cy="389.7" r="2.5"/>
<path id="M_GND2" fill="#EFDA48" d="M284.6,384.8c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1S287.4,384.8,284.6,384.8z
M284.6,392.3c-1.3,0-2.5-1-2.5-2.5c0-1.5,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5C287.1,391.3,285.8,392.3,284.6,392.3z"/>
<circle fill="#1D1D1B" cx="284.6" cy="389.7" r="2.5"/>
<path id="M_VM" fill="#EFDA48" d="M301.5,384.8c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
S304.4,384.8,301.5,384.8z M301.5,392.3c-1.3,0-2.5-1-2.5-2.5c0-1.5,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
C304,391.3,302.9,392.3,301.5,392.3z"/>
<circle fill="#1D1D1B" cx="301.5" cy="389.7" r="2.5"/>
<path id="EDGE_P0" fill="#EFDA48" d="M9.5,231.7c-2.1,0-4.2,0.2-6.2,0.6c-15.2,2.9-26.7,16.2-26.7,32.2c0,16.1,11.7,29.6,27,32.4
c1.9,0.3,3.9,0.5,5.9,0.5c18.2,0,32.9-14.7,32.9-32.9C42.5,246.1,27.7,231.7,9.5,231.7z M9.5,279.9c-0.5,0-1.1,0-1.6-0.1
c-0.2,0-0.5-0.1-0.7-0.1c-0.3,0-0.6-0.1-0.9-0.1c-0.2,0-0.4-0.1-0.6-0.2c-0.3-0.1-0.6-0.1-0.9-0.2c-0.1,0-0.3-0.1-0.4-0.2
c-0.3-0.1-0.7-0.2-1-0.4c-0.1,0-0.1,0-0.1-0.1c-5.5-2.4-9.4-7.9-9.4-14.4c0-0.5,0-1.1,0.1-1.6c0-0.2,0.1-0.5,0.1-0.7
c0-0.3,0.1-0.6,0.1-0.9c0-0.2,0.1-0.4,0.2-0.6c0.1-0.3,0.1-0.6,0.2-0.9c0-0.1,0.1-0.3,0.2-0.4c0.1-0.3,0.2-0.7,0.4-1
c0-0.1,0-0.1,0.1-0.2c2.4-5.5,7.9-9.4,14.4-9.4c8.8,0,15.7,6.9,15.7,15.7S18.3,279.9,9.5,279.9z"/>
<circle fill="none" cx="138" cy="487.1" r="15.7"/>
<rect id="LED_0_0" x="210.7" y="146.2" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_1_0" x="236.8" y="146.2" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_2_0" x="262.7" y="146.2" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_3_0" x="288.7" y="146.2" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_4_0" x="314.6" y="146.2" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_0_1" x="210.7" y="171.7" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_1_1" x="236.8" y="171.7" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_2_1" x="262.7" y="171.7" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_3_1" x="288.7" y="171.7" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_4_1" x="314.6" y="171.7" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_0_2" x="210.7" y="197" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_1_2" x="236.8" y="197" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_2_2" x="262.7" y="197" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_3_2" x="288.7" y="197" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_4_2" x="314.6" y="197" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_0_3" x="210.7" y="222.5" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_1_3" x="236.8" y="222.5" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_2_3" x="262.7" y="222.5" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_3_3" x="288.7" y="222.5" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_4_3" x="314.6" y="222.5" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_0_4" x="210.7" y="247.8" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_1_4" x="236.8" y="247.8" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_2_4" x="262.7" y="247.8" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_3_4" x="288.7" y="247.8" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="LED_4_4" x="314.6" y="247.8" fill="#FFFFFF" width="5.1" height="12.9"/>
<rect id="rgbled" x="254.5" y="311.7" fill="#FFFFFF" width="25.5" height="24.8"/>
<circle id="rgbledcircle" fill="#BDD1CF" cx="267.1" cy="324" r="9.6"/>
<rect id="SPKR" x="408.4" y="265.3" transform="matrix(-0.3593 0.9332 -0.9332 -0.3593 868.265 -8.347)" fill="#1D1D1B" width="57.1" height="57.1"/>
<polygon fill="#EFDA48" points="353.4,181.9 353.4,171.1 372.8,171.1 372.8,181.9 "/>
<path id="MIC" fill="#1D1D1B" d="M358.4,174c-0.9,0-1.8,0.7-1.8,1.8c0,1,0.7,1.8,1.8,1.8s1.8-0.7,1.8-1.8
C360.2,174.8,359.5,174,358.4,174z"/>
<polygon fill="#FFFFFF" points="158.1,146.2 163.2,146.2 163.2,155.4 158.1,155.4 "/>
<path id="IF_LED" fill="#BDD1CF" d="M162.5,150.9c0-0.9-0.8-1.8-1.8-1.8c-0.9,0-1.8,0.8-1.8,1.8s0.8,1.8,1.8,1.8
C161.7,152.6,162.5,151.7,162.5,150.9z"/>
<rect x="175.7" y="49.5" fill="#FFFFFF" width="9.5" height="2.3"/>
<polygon fill="#FFFFFF" points="350.9,49.6 350.9,45.6 348.6,45.6 348.6,49.6 344.8,49.6 344.8,51.9 348.6,51.9 348.6,56.2
350.9,56.2 350.9,51.9 354.8,51.9 354.8,49.6 "/>
<path fill="#FFFFFF" d="M36.7,294.8c-0.3-0.3-0.6-0.6-1-0.7c-0.7-0.3-1.8-0.3-2.5,0c-0.4,0.2-0.7,0.4-0.9,0.7
c-0.3,0.3-0.4,0.7-0.6,1.1c-0.1,0.4-0.2,0.9-0.2,1.5v2c0,0.6,0.1,1.1,0.2,1.5c0.1,0.4,0.3,0.8,0.6,1.1c0.3,0.3,0.6,0.6,1,0.7
c0.4,0.2,0.8,0.2,1.3,0.2c0.5,0,0.9-0.1,1.3-0.2c0.4-0.2,0.7-0.4,0.9-0.7c0.3-0.3,0.4-0.7,0.6-1.1c0.1-0.4,0.2-0.9,0.2-1.5v-2
c0-0.6-0.1-1.1-0.2-1.5C37.2,295.5,37,295.1,36.7,294.8z M35.8,296.5l-2.7,2.1v-1.5c0-0.7,0.1-1.2,0.4-1.5c0.2-0.3,0.5-0.5,1-0.5
c0.4,0,0.7,0.1,0.9,0.3C35.6,295.8,35.8,296.1,35.8,296.5z M35.9,298.2v1.4c0,0.7-0.1,1.2-0.3,1.5c-0.2,0.3-0.5,0.5-1,0.5
c-0.4,0-0.7-0.1-0.9-0.3c-0.2-0.2-0.3-0.5-0.4-0.9L35.9,298.2z"/>
<path fill="#FFFFFF" d="M498.8,299.6c-0.1-0.2-0.1-0.4-0.3-0.6c-0.1-0.2-0.3-0.4-0.5-0.5c-0.1-0.1-0.2-0.1-0.3-0.2
c0.1,0,0.1-0.1,0.2-0.1c0.2-0.2,0.3-0.3,0.4-0.5c0.1-0.2,0.2-0.4,0.3-0.6c0.1-0.2,0.1-0.4,0.1-0.6c0-0.4-0.1-0.8-0.2-1.1
c-0.1-0.3-0.3-0.6-0.6-0.8c-0.2-0.2-0.5-0.4-0.9-0.5c-0.7-0.2-1.6-0.2-2.3,0c-0.3,0.1-0.7,0.3-0.9,0.5c-0.3,0.2-0.5,0.5-0.6,0.8
c-0.1,0.3-0.2,0.7-0.2,1v0.3h1.6v-0.3c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.1-0.3,0.2-0.4c0.1-0.1,0.2-0.2,0.4-0.2
c0.2-0.1,0.3-0.1,0.5-0.1c0.4,0,0.7,0.1,0.9,0.3c0.2,0.2,0.3,0.5,0.3,0.9c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.1,0.3-0.3,0.4
c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0.1-0.4,0.1-0.6,0.1h-1v1.4h1c0.2,0,0.5,0,0.7,0.1c0.2,0.1,0.3,0.1,0.5,0.2c0.1,0.1,0.2,0.2,0.3,0.4
c0.1,0.1,0.1,0.3,0.1,0.6c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.1,0.3-0.3,0.4c-0.1,0.1-0.2,0.2-0.4,0.2c-0.3,0.1-0.8,0.1-1.2,0
c-0.2-0.1-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.2-0.3-0.4c-0.1-0.1-0.1-0.3-0.1-0.5v-0.3H493v0.3c0,0.4,0.1,0.8,0.2,1.1
c0.2,0.3,0.4,0.6,0.6,0.8c0.3,0.2,0.6,0.4,0.9,0.5c0.3,0.1,0.7,0.2,1.1,0.2c0.4,0,0.8-0.1,1.1-0.2c0.4-0.1,0.7-0.3,0.9-0.5
c0.3-0.2,0.5-0.5,0.6-0.9c0.1-0.3,0.2-0.7,0.2-1.1C498.9,300.1,498.8,299.9,498.8,299.6z"/>
<polygon fill="#FFFFFF" points="177.4,475.2 177.4,476.7 179.6,475.9 179.6,482.8 181.2,482.8 181.2,473.8 180.9,473.8 "/>
<path fill="#FFFFFF" d="M349.5,481.4l1.8-2c0.2-0.2,0.4-0.5,0.6-0.7c0.2-0.2,0.4-0.5,0.5-0.7c0.2-0.3,0.3-0.5,0.4-0.8
c0.1-0.3,0.1-0.5,0.1-0.8c0-0.4-0.1-0.7-0.2-1c-0.1-0.3-0.3-0.6-0.6-0.8c-0.2-0.2-0.5-0.4-0.9-0.5c-0.7-0.3-1.7-0.3-2.4,0
c-0.4,0.1-0.7,0.4-0.9,0.6c-0.3,0.3-0.5,0.6-0.6,0.9c-0.1,0.3-0.2,0.7-0.2,1.1v0.3h1.6v-0.3c0-0.2,0-0.4,0.1-0.6
c0.1-0.2,0.1-0.3,0.2-0.4c0.1-0.1,0.2-0.2,0.4-0.3c0.3-0.1,0.8-0.2,1.1,0c0.1,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.2,0.2,0.4
c0.1,0.2,0.1,0.3,0.1,0.5c0,0.1,0,0.3-0.1,0.4c0,0.1-0.1,0.3-0.2,0.4c-0.1,0.2-0.2,0.3-0.4,0.6c-0.2,0.2-0.4,0.4-0.6,0.7l-2.8,3.1
v1.1h6v-1.4H349.5z"/>
<polygon fill="#FFFFFF" points="282.7,282 278.2,282 278.2,274.5 276.6,274.5 276.6,283.5 282.7,283.5 "/>
<path fill="#FFFFFF" d="M288,274.5h-1.3l-2.9,8.9h1.6l0.7-2.2h2.4l0.7,2.2h1.6l-2.8-8.7L288,274.5z M288.2,279.8h-1.5l0.8-2.5
L288.2,279.8z"/>
<path fill="#FFFFFF" d="M296.1,280.5c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.4-0.3,0.5c-0.1,0.2-0.3,0.3-0.4,0.4
c-0.3,0.2-0.9,0.2-1.2,0c-0.2-0.1-0.3-0.2-0.4-0.4c-0.1-0.2-0.2-0.3-0.3-0.5c-0.1-0.2-0.1-0.4-0.1-0.6l0-5.9h-1.5l0,6
c0,0.4,0.1,0.8,0.2,1.2c0.1,0.4,0.3,0.7,0.6,1c0.3,0.3,0.6,0.5,0.9,0.7c0.4,0.2,0.8,0.2,1.2,0.2c0.4,0,0.8-0.1,1.2-0.2
s0.7-0.4,1-0.7c0.3-0.3,0.5-0.6,0.6-1c0.1-0.4,0.2-0.8,0.2-1.2l0-5.9h-1.6L296.1,280.5z"/>
<polygon fill="#FFFFFF" points="302.9,283.5 302.9,276 305.5,276 305.5,274.5 298.8,274.5 298.8,276 301.4,276 301.4,283.5 "/>
<path fill="#FFFFFF" d="M309.4,283.6c0.4,0,0.7-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8c0.2-0.3,0.3-0.7,0.3-1.1
c0-0.3,0-0.5-0.1-0.8c-0.1-0.2-0.2-0.4-0.3-0.6c-0.1-0.2-0.3-0.4-0.5-0.5c-0.2-0.1-0.4-0.3-0.6-0.4c-0.2-0.1-0.4-0.2-0.6-0.3
c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2-0.1-0.4-0.1-0.6-0.2c-0.2-0.1-0.4-0.2-0.5-0.3c-0.1-0.1-0.3-0.2-0.4-0.4c-0.1-0.1-0.1-0.3-0.1-0.5
c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.4-0.1,0.8-0.1,1.1,0c0.2,0.1,0.3,0.2,0.4,0.3
c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2h1.6l0-0.3c0-0.4-0.1-0.8-0.3-1.2c-0.2-0.3-0.4-0.6-0.7-0.9
c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.2-1.5-0.3-2.2,0c-0.4,0.1-0.7,0.3-1,0.5c-0.3,0.2-0.5,0.5-0.7,0.8c-0.2,0.3-0.3,0.7-0.3,1.1
c0,0.4,0.1,0.8,0.3,1.1c0.2,0.3,0.4,0.5,0.7,0.8c0.3,0.2,0.6,0.4,0.9,0.5c0.3,0.1,0.6,0.3,0.9,0.4c0.2,0.1,0.4,0.1,0.6,0.2
c0.2,0.1,0.4,0.2,0.5,0.3c0.2,0.1,0.3,0.2,0.4,0.4c0.1,0.1,0.1,0.3,0.1,0.5c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.2-0.3,0.3
c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0.1-0.8,0.1-1.2,0c-0.2-0.1-0.4-0.2-0.5-0.3c-0.1-0.1-0.3-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6
l0-0.2h-1.6l0,0.3c0,0.4,0.1,0.8,0.3,1.2c0.2,0.3,0.4,0.6,0.8,0.9c0.3,0.2,0.6,0.4,1,0.5C308.6,283.5,309,283.6,309.4,283.6z"/>
<path fill="#FFFFFF" d="M315.5,280.1h1.4c0.4,0,0.8-0.1,1.2-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.9
c0.2-0.3,0.2-0.7,0.2-1.2c0-0.4-0.1-0.8-0.2-1.2c-0.2-0.3-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.7-0.2-1.2-0.2h-3v8.9
h1.6V280.1z M318,278.3c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1h-1.4v-2.7h1.4c0.2,0,0.4,0,0.6,0.1
c0.2,0.1,0.3,0.2,0.5,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.1,0.6c0,0.2,0,0.4-0.1,0.6C318.2,278.1,318.1,278.2,318,278.3z
2017-02-24 17:51:42 +01:00
"/>
2017-02-24 22:22:46 +01:00
<path fill="#FFFFFF" d="M322.6,280h1.2l1.6,3.3l0.1,0.1h1.5l0-0.4l-1.7-3.4c0.2-0.1,0.3-0.2,0.4-0.3c0.2-0.2,0.4-0.3,0.5-0.5
c0.2-0.2,0.3-0.4,0.4-0.7c0.1-0.3,0.1-0.5,0.1-0.8c0-0.5-0.1-0.9-0.2-1.2c-0.2-0.3-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5
c-0.4-0.1-0.8-0.2-1.2-0.2H321v8.9h1.6V280z M325.1,277.9c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.3
c-0.2,0.1-0.4,0.1-0.6,0.1h-1.2v-2.7h1.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.5,0.3c0.1,0.1,0.2,0.2,0.3,0.4
c0.1,0.2,0.1,0.4,0.1,0.6C325.2,277.5,325.2,277.7,325.1,277.9z"/>
<polygon fill="#FFFFFF" points="333.7,282 329.7,282 329.7,279.6 333.2,279.6 333.2,278.1 329.7,278.1 329.7,276 333.7,276
333.7,274.5 328.1,274.5 328.1,283.5 333.7,283.5 "/>
<path fill="#FFFFFF" d="M339.5,280.6c0,0.2-0.1,0.5-0.2,0.6c-0.1,0.2-0.2,0.3-0.3,0.5c-0.1,0.1-0.3,0.2-0.4,0.3
c-0.3,0.1-0.9,0.2-1.2,0c-0.2-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.2-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6c-0.1-0.2-0.1-0.4-0.1-0.6
c0-0.2,0-0.4,0-0.6v-1.2c0-0.2,0-0.4,0-0.6c0-0.2,0.1-0.4,0.1-0.6c0.1-0.2,0.1-0.4,0.2-0.6c0.1-0.2,0.2-0.3,0.3-0.4
c0.1-0.1,0.3-0.2,0.4-0.3c0.3-0.1,0.9-0.1,1.2,0c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.5c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2
h1.6l0-0.3c0-0.4-0.2-0.8-0.3-1.2c-0.2-0.4-0.4-0.7-0.6-0.9c-0.3-0.3-0.6-0.5-0.9-0.6c-0.7-0.3-1.6-0.3-2.3-0.1
c-0.3,0.1-0.6,0.3-0.8,0.4c-0.2,0.2-0.5,0.4-0.6,0.7c-0.2,0.3-0.3,0.5-0.4,0.8c-0.1,0.3-0.2,0.6-0.3,0.9c-0.1,0.3-0.1,0.6-0.1,1v1.2
c0,0.3,0,0.6,0.1,1c0.1,0.3,0.1,0.6,0.2,0.9c0.1,0.3,0.3,0.6,0.4,0.8c0.2,0.3,0.4,0.5,0.6,0.7c0.2,0.2,0.5,0.3,0.8,0.5
c0.3,0.1,0.7,0.2,1,0.2c0.4,0,0.8-0.1,1.2-0.2c0.4-0.1,0.7-0.3,0.9-0.6c0.3-0.3,0.5-0.6,0.6-0.9c0.2-0.3,0.3-0.7,0.3-1.1l0-0.3h-1.6
L339.5,280.6z"/>
<polygon fill="#FFFFFF" points="346.4,278.1 343.5,278.1 343.5,274.5 342,274.5 342,283.5 343.5,283.5 343.5,279.6 346.4,279.6
346.4,283.5 348,283.5 348,274.5 346.4,274.5 "/>
<polygon fill="#FFFFFF" points="350.9,279.6 354.4,279.6 354.4,278.1 350.9,278.1 350.9,276 354.9,276 354.9,274.5 349.3,274.5
349.3,283.5 355,283.5 355,282 350.9,282 "/>
<path fill="#FFFFFF" d="M361.2,279.4c0.2-0.2,0.4-0.3,0.6-0.5c0.2-0.2,0.3-0.4,0.4-0.7c0.1-0.3,0.1-0.5,0.1-0.8
c0-0.5-0.1-0.9-0.2-1.2c-0.2-0.4-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.8-0.2-1.2-0.2h-2.7v8.9h1.6V280h1.2l1.6,3.3
l0.1,0.1h1.5l0-0.4l-1.7-3.4C360.9,279.6,361,279.5,361.2,279.4z M360.6,277.3c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.3-0.3,0.4
c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1H358v-2.7h1.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.5,0.3
c0.1,0.1,0.2,0.3,0.3,0.4C360.6,276.9,360.6,277.1,360.6,277.3z"/>
<polygon fill="#FFFFFF" points="50.5,274.5 48.9,274.5 48.9,283.5 54.6,283.5 54.6,282 50.5,282 "/>
<path fill="#FFFFFF" d="M58.1,274.5l-2.9,8.9h1.6l0.7-2.2h2.4l0.7,2.2h1.6l-2.8-8.9H58.1z M59.5,279.8H58l0.8-2.5L59.5,279.8z"/>
<path fill="#FFFFFF" d="M64.1,277.9c0-0.2,0.1-0.4,0.1-0.6c0.1-0.2,0.1-0.4,0.2-0.6c0.1-0.2,0.2-0.3,0.3-0.4
c0.1-0.1,0.3-0.2,0.4-0.3c0.3-0.1,0.8-0.1,1.2,0c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2
h1.6l0-0.3c0-0.4-0.1-0.8-0.3-1.2c-0.2-0.3-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.3-1.6-0.3-2.2,0
c-0.3,0.1-0.6,0.3-0.8,0.5c-0.2,0.2-0.5,0.4-0.6,0.7c-0.2,0.3-0.3,0.5-0.4,0.8c-0.1,0.3-0.2,0.6-0.3,0.9c-0.1,0.3-0.1,0.6-0.1,1v1
c0,0.3,0,0.7,0.1,1c0.1,0.3,0.2,0.6,0.3,0.9c0.1,0.3,0.3,0.6,0.5,0.8c0.2,0.3,0.4,0.5,0.7,0.7c0.3,0.2,0.5,0.4,0.9,0.5
c0.3,0.1,0.7,0.2,1,0.2h0c0.6,0,1.1-0.1,1.6-0.3c0.5-0.2,0.9-0.6,1.3-1l0.1-0.1l0-3.4h-3.2v1.4h1.7l0,1.5c-0.1,0.1-0.1,0.1-0.2,0.2
c-0.1,0.1-0.2,0.1-0.4,0.2c-0.1,0-0.3,0.1-0.4,0.1c-0.1,0-0.2,0-0.3,0l-0.1,0c-0.2,0-0.4,0-0.6-0.1c-0.2-0.1-0.3-0.2-0.4-0.3
c-0.1-0.1-0.2-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.2,0-0.4-0.1-0.6v-1
C64.1,278.3,64.1,278.1,64.1,277.9z M65.9,283.3L65.9,283.3L65.9,283.3L65.9,283.3z"/>
<polygon fill="#FFFFFF" points="71.7,279.6 75.2,279.6 75.2,278.1 71.7,278.1 71.7,276 75.7,276 75.7,274.5 70.1,274.5 70.1,283.5
75.7,283.5 75.7,282 71.7,282 "/>
<path fill="#FFFFFF" d="M82.7,279.6c-0.1-0.2-0.3-0.4-0.5-0.5c-0.2-0.1-0.4-0.3-0.6-0.4c-0.2-0.1-0.4-0.2-0.6-0.3
c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2-0.1-0.4-0.1-0.6-0.2c-0.2-0.1-0.4-0.2-0.5-0.3c-0.2-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.1-0.3-0.1-0.5
c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.4-0.1,0.8-0.1,1.1,0c0.2,0.1,0.3,0.2,0.4,0.3
c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2h1.6l0-0.3c0-0.4-0.1-0.8-0.3-1.2c-0.2-0.3-0.4-0.6-0.7-0.9
c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.2-1.5-0.3-2.2,0c-0.4,0.1-0.7,0.3-1,0.5c-0.3,0.2-0.5,0.5-0.7,0.8c-0.2,0.3-0.3,0.7-0.3,1.1
c0,0.4,0.1,0.8,0.3,1.1c0.2,0.3,0.4,0.5,0.7,0.8c0.3,0.2,0.6,0.4,0.9,0.5c0.3,0.1,0.6,0.3,0.9,0.4c0.2,0.1,0.4,0.1,0.6,0.2
c0.2,0.1,0.4,0.2,0.6,0.3c0.2,0.1,0.3,0.2,0.4,0.4c0.1,0.1,0.1,0.3,0.1,0.5c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.2-0.3,0.3
c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0.1-0.8,0.1-1.2,0c-0.2-0.1-0.4-0.1-0.5-0.3c-0.1-0.1-0.3-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6
l0-0.2h-1.6l0,0.3c0,0.4,0.1,0.8,0.3,1.2c0.2,0.3,0.4,0.6,0.8,0.9c0.3,0.2,0.6,0.4,1,0.5c0.4,0.1,0.8,0.2,1.2,0.2
c0.4,0,0.7-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8c0.2-0.3,0.3-0.7,0.3-1.1c0-0.3,0-0.5-0.1-0.8
C82.9,280,82.8,279.8,82.7,279.6z"/>
<polygon fill="#FFFFFF" points="85.8,279.6 89.3,279.6 89.3,278.1 85.8,278.1 85.8,276 89.9,276 89.9,274.5 84.2,274.5 84.2,283.5
89.9,283.5 89.9,282 85.8,282 "/>
<polygon fill="#FFFFFF" points="95.4,280 92.6,274.5 91.1,274.5 91.1,283.5 92.7,283.5 92.7,278 95.5,283.5 97,283.5 97,274.5
95.4,274.5 "/>
<path fill="#FFFFFF" d="M103.9,279.6c-0.1-0.2-0.3-0.4-0.5-0.5c-0.2-0.1-0.4-0.3-0.6-0.4c-0.2-0.1-0.4-0.2-0.6-0.3
c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2-0.1-0.4-0.1-0.6-0.2c-0.2-0.1-0.4-0.2-0.5-0.3c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.1-0.3-0.1-0.5
c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.4-0.1,0.8-0.1,1.1,0c0.2,0.1,0.3,0.2,0.4,0.3
c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2h1.6l0-0.3c0-0.4-0.1-0.8-0.3-1.2c-0.2-0.3-0.4-0.6-0.7-0.9
c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.2-1.5-0.3-2.2,0c-0.4,0.1-0.7,0.3-1,0.5c-0.3,0.2-0.5,0.5-0.7,0.8c-0.2,0.3-0.3,0.7-0.3,1.1
c0,0.4,0.1,0.8,0.3,1.1c0.2,0.3,0.4,0.5,0.7,0.8c0.3,0.2,0.6,0.4,0.9,0.5c0.3,0.1,0.6,0.3,0.9,0.4c0.2,0.1,0.4,0.1,0.6,0.2
c0.2,0.1,0.4,0.2,0.6,0.3c0.2,0.1,0.3,0.2,0.4,0.4c0.1,0.1,0.1,0.3,0.1,0.5c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.2-0.3,0.3
c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0.1-0.8,0.1-1.2,0c-0.2-0.1-0.4-0.1-0.5-0.3c-0.1-0.1-0.3-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6
l0-0.2H98l0,0.3c0,0.4,0.1,0.8,0.3,1.2c0.2,0.3,0.5,0.6,0.8,0.9c0.3,0.2,0.6,0.4,1,0.5c0.4,0.1,0.8,0.2,1.2,0.2
c0.4,0,0.7-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8c0.2-0.3,0.3-0.7,0.3-1.1c0-0.3,0-0.5-0.1-0.8
C104.2,280,104.1,279.8,103.9,279.6z"/>
<path fill="#FFFFFF" d="M111.1,276.6c-0.1-0.3-0.2-0.6-0.4-0.9c-0.2-0.3-0.4-0.5-0.6-0.7c-0.2-0.2-0.5-0.4-0.8-0.5
c-0.6-0.2-1.5-0.2-2.1,0c-0.3,0.1-0.6,0.3-0.8,0.5c-0.2,0.2-0.4,0.4-0.6,0.7c-0.2,0.3-0.3,0.6-0.4,0.8c-0.1,0.3-0.2,0.6-0.2,0.9
c0,0.3-0.1,0.6-0.1,0.9v1c0,0.3,0,0.6,0.1,0.9c0.1,0.3,0.1,0.6,0.2,0.9c0.1,0.3,0.2,0.6,0.4,0.9c0.2,0.3,0.4,0.5,0.6,0.7
c0.2,0.2,0.5,0.4,0.8,0.5c0.3,0.1,0.7,0.2,1,0.2c0.4,0,0.7-0.1,1-0.2c0.3-0.1,0.6-0.3,0.8-0.5c0.2-0.2,0.4-0.4,0.6-0.7
c0.2-0.3,0.3-0.6,0.4-0.8c0.1-0.3,0.2-0.6,0.2-0.9c0-0.3,0.1-0.6,0.1-0.9v-1c0-0.3,0-0.6-0.1-0.9
C111.3,277.2,111.2,276.9,111.1,276.6z M109.8,278.5v1c0,0.2,0,0.4,0,0.6c0,0.2-0.1,0.4-0.1,0.6c-0.1,0.2-0.1,0.4-0.2,0.6
c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.2,0.2-0.4,0.3c-0.3,0.1-0.8,0.1-1.1,0c-0.2-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.2-0.3-0.3-0.4
c-0.1-0.2-0.2-0.4-0.2-0.6c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.2,0-0.4,0-0.6v-1c0-0.2,0-0.4,0-0.6c0-0.2,0.1-0.4,0.1-0.6
c0-0.2,0.1-0.4,0.2-0.6c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.4-0.3c0.2-0.1,0.3-0.1,0.5-0.1c0.2,0,0.4,0,0.5,0.1
c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0.1,0.2,0.1,0.4,0.1,0.6
C109.8,278.1,109.8,278.3,109.8,278.5z"/>
<path fill="#FFFFFF" d="M117.3,279.4c0.2-0.2,0.4-0.3,0.5-0.5c0.2-0.2,0.3-0.4,0.4-0.7c0.1-0.3,0.1-0.5,0.1-0.8
c0-0.5-0.1-0.9-0.2-1.2c-0.2-0.4-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.8-0.2-1.2-0.2h-2.7v8.9h1.6V280h1.2l1.6,3.4
h1.5l0-0.4l-1.7-3.4C117.1,279.6,117.2,279.5,117.3,279.4z M116.8,277.3c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.3-0.3,0.4
c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1h-1.2v-2.7h1.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.5,0.3
c0.1,0.1,0.2,0.2,0.3,0.4C116.7,276.9,116.8,277.1,116.8,277.3z"/>
<path fill="#FFFFFF" d="M239.4,369.8c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.8-0.2-1.2-0.2h-3v8.9h1.6v-3.4h1.4c0.4,0,0.8-0.1,1.2-0.2
c0.4-0.1,0.7-0.3,1-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.4-0.1-0.8-0.2-1.2C239.9,370.3,239.7,370,239.4,369.8z
M238.7,371.9c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1h-1.4v-2.7h1.4
c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.2,0.5,0.3c0.1,0.1,0.2,0.3,0.3,0.4C238.7,371.5,238.7,371.7,238.7,371.9z"/>
<path fill="#FFFFFF" d="M246.1,373.9c0.2-0.2,0.4-0.3,0.6-0.5c0.2-0.2,0.3-0.4,0.4-0.7c0.1-0.3,0.1-0.5,0.1-0.8
c0-0.5-0.1-0.9-0.2-1.2c-0.2-0.4-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.8-0.2-1.2-0.2h-2.7v8.9h1.6v-3.4h1.2l1.6,3.4
h1.5l0-0.4l-1.7-3.4C245.8,374.1,246,374,246.1,373.9z M245.6,371.8c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.3-0.3,0.4
c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1h-1.2v-2.7h1.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.5,0.3
c0.1,0.1,0.2,0.3,0.3,0.4C245.5,371.4,245.6,371.6,245.6,371.8z"/>
<path fill="#FFFFFF" d="M254,371.2c-0.1-0.3-0.2-0.6-0.4-0.8c-0.2-0.3-0.4-0.5-0.6-0.7c-0.2-0.2-0.5-0.4-0.8-0.5
c-0.6-0.2-1.4-0.2-2.1,0c-0.3,0.1-0.6,0.3-0.8,0.5c-0.2,0.2-0.4,0.4-0.6,0.7c-0.2,0.3-0.3,0.6-0.4,0.8c-0.1,0.3-0.2,0.6-0.2,0.9
c0,0.3-0.1,0.6-0.1,0.9v1c0,0.3,0,0.6,0.1,0.9c0.1,0.3,0.1,0.6,0.2,0.9c0.1,0.3,0.2,0.6,0.4,0.9c0.2,0.3,0.4,0.5,0.6,0.7
c0.2,0.2,0.5,0.4,0.8,0.5c0.3,0.1,0.7,0.2,1,0.2c0.4,0,0.7-0.1,1-0.2c0.3-0.1,0.6-0.3,0.8-0.5c0.2-0.2,0.4-0.4,0.6-0.7
c0.2-0.3,0.3-0.6,0.4-0.8c0.1-0.3,0.2-0.6,0.2-0.9c0.1-0.3,0.1-0.6,0.1-0.9v-1c0-0.3,0-0.6-0.1-0.9
C254.2,371.8,254.2,371.5,254,371.2z M252.8,373v1c0,0.2,0,0.4,0,0.6c0,0.2-0.1,0.4-0.1,0.6c-0.1,0.2-0.1,0.4-0.2,0.6
c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.4,0.3c-0.3,0.1-0.8,0.1-1.1,0c-0.2-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.2-0.3-0.3-0.5
c-0.1-0.2-0.2-0.4-0.2-0.6c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.2,0-0.4,0-0.6v-1c0-0.2,0-0.4,0-0.6c0-0.2,0.1-0.4,0.1-0.6
c0-0.2,0.1-0.4,0.2-0.6c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.2-0.2,0.4-0.3c0.2-0.1,0.3-0.1,0.5-0.1c0.2,0,0.4,0,0.5,0.1
c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0.1,0.2,0.1,0.4,0.1,0.6
C252.8,372.7,252.8,372.9,252.8,373z"/>
<polygon fill="#FFFFFF" points="261,370.3 261.1,370.2 261,369.1 255.2,369.1 255.2,370.5 259.1,370.5 255.2,376.8 255.1,376.8
255.1,378 261.2,378 261.2,376.6 257.1,376.6 "/>
<polygon fill="#FFFFFF" points="264.2,374.1 267.7,374.1 267.7,372.7 264.2,372.7 264.2,370.5 268.2,370.5 268.2,369.1 262.6,369.1
262.6,378 268.3,378 268.3,376.6 264.2,376.6 "/>
<path fill="#FFFFFF" d="M275.2,374.2c-0.1-0.2-0.3-0.4-0.5-0.5c-0.2-0.1-0.4-0.3-0.6-0.4c-0.2-0.1-0.4-0.2-0.6-0.3
c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2-0.1-0.4-0.1-0.6-0.2c-0.2-0.1-0.4-0.2-0.5-0.3c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.1-0.3-0.1-0.5
c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.4-0.1,0.8-0.1,1.1,0c0.2,0.1,0.3,0.2,0.4,0.3
c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2h1.6l0-0.3c0-0.4-0.1-0.8-0.3-1.2c-0.2-0.3-0.4-0.6-0.7-0.9
c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.2-1.5-0.3-2.2,0c-0.4,0.1-0.7,0.3-1,0.5c-0.3,0.2-0.5,0.5-0.7,0.8c-0.2,0.3-0.3,0.7-0.3,1.1
c0,0.4,0.1,0.8,0.3,1.1c0.2,0.3,0.4,0.5,0.7,0.8c0.3,0.2,0.6,0.4,0.9,0.5c0.3,0.1,0.6,0.3,0.9,0.4c0.2,0.1,0.4,0.1,0.6,0.2
c0.2,0.1,0.4,0.2,0.6,0.3c0.2,0.1,0.3,0.2,0.4,0.4c0.1,0.1,0.1,0.3,0.1,0.5c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.2-0.3,0.3
c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0.1-0.8,0.1-1.2,0c-0.2-0.1-0.4-0.1-0.5-0.3c-0.1-0.1-0.3-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6
l0-0.2h-1.6l0,0.3c0,0.4,0.1,0.8,0.3,1.2c0.2,0.3,0.5,0.6,0.8,0.9c0.3,0.2,0.7,0.4,1,0.5c0.4,0.1,0.8,0.2,1.2,0.2
c0.4,0,0.7-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8c0.2-0.3,0.3-0.7,0.3-1.1c0-0.3,0-0.5-0.1-0.8
C275.5,374.6,275.3,374.4,275.2,374.2z"/>
<path fill="#FFFFFF" d="M282.3,374.2c-0.1-0.2-0.3-0.4-0.5-0.5c-0.2-0.1-0.4-0.3-0.6-0.4c-0.2-0.1-0.4-0.2-0.6-0.3
c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2-0.1-0.4-0.1-0.6-0.2c-0.2-0.1-0.4-0.2-0.5-0.3c-0.1-0.1-0.3-0.2-0.4-0.4c-0.1-0.1-0.1-0.3-0.1-0.5
c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.2-0.3,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.4-0.1,0.8-0.1,1.1,0c0.2,0.1,0.3,0.2,0.4,0.3
c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2h1.6l0-0.3c0-0.4-0.1-0.8-0.3-1.2c-0.2-0.3-0.4-0.6-0.7-0.9
c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.2-1.5-0.3-2.2,0c-0.4,0.1-0.7,0.3-1,0.5c-0.3,0.2-0.5,0.5-0.7,0.8c-0.2,0.3-0.3,0.7-0.3,1.1
c0,0.4,0.1,0.8,0.3,1.1c0.2,0.3,0.4,0.5,0.7,0.8c0.3,0.2,0.6,0.4,0.9,0.5c0.3,0.1,0.6,0.3,0.9,0.4c0.2,0.1,0.4,0.1,0.6,0.2
c0.2,0.1,0.4,0.2,0.6,0.3c0.2,0.1,0.3,0.2,0.4,0.4c0.1,0.1,0.1,0.3,0.1,0.5c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.2-0.3,0.3
c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0.1-0.8,0.1-1.2,0c-0.2-0.1-0.3-0.1-0.5-0.3c-0.1-0.1-0.3-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6
l0-0.2h-1.6l0,0.3c0,0.4,0.1,0.8,0.3,1.2c0.2,0.3,0.4,0.6,0.8,0.9c0.3,0.2,0.7,0.4,1,0.5c0.4,0.1,0.8,0.2,1.2,0.2
c0.4,0,0.7-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8c0.2-0.3,0.3-0.7,0.3-1.1c0-0.3,0-0.5-0.1-0.8
C282.5,374.6,282.4,374.4,282.3,374.2z"/>
<path fill="#FFFFFF" d="M289.5,371.2c-0.1-0.3-0.3-0.6-0.4-0.8c-0.2-0.3-0.4-0.5-0.6-0.7c-0.2-0.2-0.5-0.4-0.8-0.5
c-0.6-0.2-1.4-0.2-2.1,0c-0.3,0.1-0.6,0.3-0.8,0.5c-0.2,0.2-0.4,0.4-0.6,0.7c-0.2,0.3-0.3,0.6-0.4,0.8c-0.1,0.3-0.2,0.6-0.2,0.9
c-0.1,0.3-0.1,0.6-0.1,0.9v1c0,0.3,0,0.6,0.1,0.9c0.1,0.3,0.1,0.6,0.2,0.9c0.1,0.3,0.2,0.6,0.4,0.8c0.2,0.3,0.4,0.5,0.6,0.7
c0.2,0.2,0.5,0.4,0.8,0.5c0.3,0.1,0.7,0.2,1,0.2c0.4,0,0.7-0.1,1-0.2c0.3-0.1,0.6-0.3,0.8-0.5c0.2-0.2,0.4-0.4,0.6-0.7
c0.2-0.3,0.3-0.6,0.4-0.8c0.1-0.3,0.2-0.6,0.2-0.9c0.1-0.3,0.1-0.6,0.1-0.9v-1c0-0.3,0-0.6-0.1-0.9
C289.7,371.8,289.6,371.5,289.5,371.2z M288.2,373v1c0,0.2,0,0.4,0,0.6c0,0.2-0.1,0.4-0.1,0.6c-0.1,0.2-0.1,0.4-0.2,0.6
c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.4,0.3c-0.3,0.1-0.8,0.1-1.1,0c-0.2-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.2-0.3-0.3-0.5
c-0.1-0.2-0.2-0.4-0.2-0.6c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.2,0-0.4,0-0.6v-1c0-0.2,0-0.4,0-0.6c0-0.2,0.1-0.4,0.1-0.6
c0-0.2,0.1-0.4,0.2-0.6c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.4-0.3c0.2-0.1,0.3-0.1,0.5-0.1c0.2,0,0.4,0,0.5,0.1
c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0.1,0.2,0.1,0.4,0.1,0.6
C288.2,372.7,288.2,372.9,288.2,373z"/>
<path fill="#FFFFFF" d="M295.7,373.9c0.2-0.2,0.4-0.3,0.6-0.5c0.2-0.2,0.3-0.4,0.4-0.7c0.1-0.3,0.1-0.5,0.1-0.8
c0-0.5-0.1-0.9-0.2-1.2c-0.2-0.4-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.8-0.2-1.2-0.2h-2.7v8.9h1.6v-3.4h1.2l1.6,3.3
l0.1,0.1h1.5l0-0.4l-1.7-3.4C295.4,374.1,295.6,374,295.7,373.9z M295.2,371.8c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.3-0.3,0.4
c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1h-1.2v-2.7h1.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.5,0.3
c0.1,0.1,0.2,0.2,0.3,0.4C295.1,371.4,295.2,371.6,295.2,371.8z"/>
<path fill="#FFFFFF" d="M239.2,103.5h-1.6l0,5.9c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.4-0.3,0.5c-0.1,0.2-0.3,0.3-0.4,0.4
c-0.3,0.2-0.9,0.2-1.2,0c-0.2-0.1-0.3-0.2-0.4-0.4c-0.1-0.2-0.2-0.3-0.3-0.5c-0.1-0.2-0.1-0.4-0.1-0.6l0-5.9h-1.5l0,6
c0,0.4,0.1,0.8,0.2,1.2c0.1,0.4,0.4,0.7,0.6,1c0.3,0.3,0.6,0.5,0.9,0.7c0.4,0.2,0.8,0.2,1.2,0.2c0.4,0,0.8-0.1,1.2-0.2
c0.4-0.2,0.7-0.4,1-0.7c0.3-0.3,0.5-0.6,0.6-1c0.1-0.4,0.2-0.8,0.2-1.2L239.2,103.5z"/>
<path fill="#FFFFFF" d="M246.5,110c0-0.3,0-0.5-0.1-0.8c-0.1-0.2-0.2-0.4-0.3-0.6c-0.1-0.2-0.3-0.4-0.5-0.5
c-0.2-0.1-0.4-0.3-0.6-0.4c-0.2-0.1-0.4-0.2-0.6-0.3c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2-0.1-0.4-0.1-0.6-0.2c-0.2-0.1-0.4-0.2-0.5-0.3
c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.1-0.3-0.1-0.5c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2
c0.4-0.1,0.8-0.1,1.1,0c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2h1.6l0-0.3
c0-0.4-0.1-0.8-0.3-1.2c-0.2-0.3-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.2-1.5-0.3-2.2,0c-0.4,0.1-0.7,0.3-1,0.5
c-0.3,0.2-0.5,0.5-0.7,0.8c-0.2,0.3-0.3,0.7-0.3,1.1c0,0.4,0.1,0.8,0.3,1.1c0.2,0.3,0.4,0.6,0.7,0.8c0.3,0.2,0.6,0.4,0.9,0.5
c0.3,0.1,0.6,0.3,0.9,0.4c0.2,0.1,0.4,0.1,0.6,0.2c0.2,0.1,0.4,0.2,0.6,0.3c0.2,0.1,0.3,0.2,0.4,0.4c0.1,0.1,0.1,0.3,0.1,0.5
c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.2-0.3,0.3c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0.1-0.8,0.1-1.2,0c-0.2-0.1-0.4-0.1-0.5-0.3
c-0.1-0.1-0.3-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6l0-0.2h-1.6l0,0.3c0,0.4,0.1,0.8,0.3,1.2c0.2,0.3,0.4,0.6,0.8,0.9
c0.3,0.2,0.7,0.4,1,0.5c0.4,0.1,0.8,0.2,1.2,0.2c0.4,0,0.7-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8
C246.4,110.8,246.5,110.5,246.5,110z"/>
<path fill="#FFFFFF" d="M250.5,112.4c0.4,0,0.8-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8c0.2-0.3,0.3-0.7,0.3-1.2
c0-0.3,0-0.5-0.1-0.8c-0.1-0.2-0.2-0.5-0.4-0.7c-0.2-0.2-0.3-0.4-0.5-0.5c0,0-0.1-0.1-0.1-0.1c0,0,0,0,0,0c0.2-0.1,0.3-0.3,0.5-0.4
c0.1-0.2,0.2-0.4,0.3-0.6c0.1-0.2,0.1-0.4,0.1-0.7c0-0.4-0.1-0.8-0.3-1.1c-0.2-0.3-0.4-0.6-0.7-0.8c-0.3-0.2-0.6-0.3-1-0.4
c-0.4-0.1-0.7-0.1-1.1-0.1h-2.8v8.9H250.5L250.5,112.4z M249.2,108.5h1.4c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.4,0.2
c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.2,0.1,0.3,0.1,0.5c0,0.2,0,0.4-0.1,0.5c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.3
c-0.2,0.1-0.3,0.1-0.5,0.1h-1.4V108.5z M251.6,106.5c-0.1,0.1-0.2,0.2-0.3,0.3c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0.1-0.3,0.1-0.5,0.1
h-1.2V105h1.2c0.2,0,0.4,0,0.5,0.1c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.3c0.1,0.1,0.1,0.3,0.1,0.5
C251.7,106.2,251.7,106.3,251.6,106.5z"/>
<path fill="#FFFFFF" d="M307.2,103.6c0.2-0.2,0.4-0.3,0.5-0.5c0.2-0.2,0.3-0.4,0.4-0.7c0.1-0.3,0.1-0.5,0.1-0.8
c0-0.5-0.1-0.9-0.2-1.2c-0.2-0.4-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.8-0.2-1.2-0.2h-2.7v8.9h1.6v-3.4h1.2l1.6,3.3
l0.1,0.1h1.5l0-0.4l-1.7-3.4C306.9,103.7,307,103.7,307.2,103.6z M306.6,101.5c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.3-0.3,0.4
c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1H304v-2.7h1.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.5,0.3
c0.1,0.1,0.2,0.2,0.3,0.4C306.6,101,306.6,101.2,306.6,101.5z"/>
<polygon fill="#FFFFFF" points="315.2,106.2 311.1,106.2 311.1,103.7 314.6,103.7 314.6,102.3 311.1,102.3 311.1,100.1 315.1,100.1
315.1,98.7 309.5,98.7 309.5,107.6 315.2,107.6 "/>
<path fill="#FFFFFF" d="M320,106c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0.1-0.8,0.1-1.2,0c-0.2-0.1-0.4-0.2-0.5-0.3
c-0.1-0.1-0.3-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6l0-0.2h-1.6l0,0.3c0,0.4,0.1,0.8,0.3,1.2c0.2,0.3,0.4,0.6,0.8,0.9
c0.3,0.2,0.7,0.4,1,0.5c0.4,0.1,0.8,0.2,1.2,0.2c0.3,0,0.7-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8
c0.2-0.3,0.3-0.7,0.3-1.1c0-0.3,0-0.5-0.1-0.8c-0.1-0.2-0.2-0.4-0.3-0.6c-0.1-0.2-0.3-0.4-0.5-0.5c-0.2-0.1-0.4-0.3-0.6-0.4
c-0.2-0.1-0.4-0.2-0.6-0.3c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2-0.1-0.4-0.1-0.6-0.2c-0.2-0.1-0.4-0.2-0.5-0.3c-0.2-0.1-0.3-0.2-0.4-0.4
c-0.1-0.1-0.1-0.3-0.1-0.5c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.4-0.1,0.8-0.1,1.1,0
c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2h1.6l0-0.3c0-0.4-0.1-0.8-0.3-1.2
c-0.2-0.3-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.2-1.5-0.3-2.2,0c-0.4,0.1-0.7,0.3-1,0.5c-0.3,0.2-0.5,0.5-0.7,0.8
c-0.2,0.3-0.3,0.7-0.3,1.1c0,0.4,0.1,0.8,0.3,1.1c0.2,0.3,0.4,0.5,0.7,0.8c0.3,0.2,0.6,0.4,0.9,0.5c0.3,0.1,0.6,0.3,0.9,0.4
c0.2,0.1,0.4,0.1,0.6,0.2c0.2,0.1,0.4,0.2,0.6,0.3c0.2,0.1,0.3,0.2,0.4,0.4c0.1,0.1,0.1,0.3,0.1,0.5c0,0.2,0,0.3-0.1,0.5
C320.2,105.8,320.1,105.9,320,106z"/>
<polygon fill="#FFFFFF" points="328.7,106.2 324.6,106.2 324.6,103.7 328.1,103.7 328.1,102.3 324.6,102.3 324.6,100.1 328.7,100.1
328.7,98.7 323,98.7 323,107.6 328.7,107.6 "/>
<polygon fill="#FFFFFF" points="332.1,107.6 333.7,107.6 333.7,100.1 336.3,100.1 336.3,98.7 329.5,98.7 329.5,100.1 332.1,100.1
2017-02-24 17:51:42 +01:00
"/>
2017-02-24 22:22:46 +01:00
<path fill="#FFFFFF" d="M134.3,157.5l-2.8,8.8h1.6l0.7-2.1h2.4l0.7,2.1h1.6l-2.8-8.8H134.3z M135.6,162.7h-1.5l0.7-2.4L135.6,162.7z
2017-02-24 17:51:42 +01:00
"/>
2017-02-24 22:22:46 +01:00
<path fill="#FFFFFF" d="M145.3,158.3c-0.3-0.3-0.6-0.6-0.9-0.7c-0.7-0.3-1.7-0.3-2.5,0c-0.4,0.2-0.7,0.4-0.9,0.7
c-0.3,0.3-0.4,0.7-0.6,1.1c-0.1,0.4-0.2,0.9-0.2,1.5v1.9c0,0.6,0.1,1,0.2,1.5c0.1,0.4,0.3,0.8,0.6,1.1c0.3,0.3,0.6,0.5,0.9,0.7
c0.4,0.2,0.8,0.2,1.2,0.2c0.5,0,0.9-0.1,1.2-0.2c0.4-0.2,0.7-0.4,0.9-0.7c0.2-0.3,0.4-0.7,0.6-1.1c0.1-0.4,0.2-0.9,0.2-1.5v-1.9
c0-0.5-0.1-1-0.2-1.5C145.7,159,145.6,158.6,145.3,158.3z M144.4,160.1l-2.7,2.1v-1.4c0-0.7,0.1-1.2,0.3-1.5c0.2-0.3,0.5-0.4,1-0.4
c0.4,0,0.7,0.1,0.9,0.3C144.3,159.3,144.4,159.7,144.4,160.1z M144.5,161.7v1.4c0,0.7-0.1,1.2-0.3,1.5c-0.2,0.3-0.5,0.5-1,0.5
c-0.4,0-0.7-0.1-0.9-0.3c-0.2-0.2-0.3-0.5-0.4-0.9L144.5,161.7z"/>
<path fill="#FFFFFF" d="M387.6,166.2h1.6l-2.7-8.6l-0.1-0.2h-1.3l-2.8,8.8h1.6l0.7-2.1h2.4L387.6,166.2z M386.5,162.6H385l0.7-2.4
L386.5,162.6z"/>
<polygon fill="#FFFFFF" points="393.4,166.2 395,166.2 395,157.4 394.7,157.4 391.2,158.7 391.2,160.2 393.4,159.4 "/>
<path fill="#FFFFFF" d="M314.5,402.4c-0.2-0.2-0.3-0.4-0.5-0.5c0,0-0.1-0.1-0.1-0.1c0,0,0,0,0,0c0.2-0.1,0.3-0.3,0.5-0.4
c0.1-0.2,0.2-0.4,0.3-0.6c0.1-0.2,0.1-0.4,0.1-0.7c0-0.4-0.1-0.8-0.3-1.1c-0.2-0.3-0.4-0.6-0.7-0.8c-0.3-0.2-0.6-0.3-1-0.4
c-0.4-0.1-0.7-0.1-1.1-0.1H309v8.9h3c0.4,0,0.8-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8c0.2-0.3,0.3-0.7,0.3-1.2
c0-0.3,0-0.5-0.1-0.8C314.8,402.8,314.7,402.6,314.5,402.4z M310.6,402.6h1.4c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.4,0.2
c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.2,0.1,0.3,0.1,0.5c0,0.2,0,0.4-0.1,0.5c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.3
c-0.2,0.1-0.4,0.1-0.5,0.1h-1.4V402.6z M313.1,400.5c-0.1,0.1-0.2,0.2-0.3,0.3c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0.1-0.3,0.1-0.5,0.1
h-1.2V399h1.2c0.2,0,0.4,0,0.5,0.1c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.3c0.1,0.1,0.1,0.3,0.1,0.5
C313.2,400.2,313.2,400.4,313.1,400.5z"/>
<path fill="#FFFFFF" d="M319.7,397.6h-1.3l-2.9,8.9h1.6l0.7-2.2h2.4l0.7,2.2h1.6l-2.8-8.7L319.7,397.6z M319.8,402.9h-1.5l0.8-2.5
L319.8,402.9z"/>
<polygon fill="#FFFFFF" points="322.7,399 325.2,399 325.2,406.5 326.8,406.5 326.8,399 329.4,399 329.4,397.6 322.7,397.6 "/>
<polygon fill="#FFFFFF" points="330,399 332.6,399 332.6,406.5 334.2,406.5 334.2,399 336.8,399 336.8,397.6 330,397.6 "/>
<polygon fill="#FFFFFF" points="339.3,402.6 342.8,402.6 342.8,401.2 339.3,401.2 339.3,399 343.3,399 343.3,397.6 337.7,397.6
337.7,406.5 343.4,406.5 343.4,405 339.3,405 "/>
<path fill="#FFFFFF" d="M349.3,406.5h1.5l0-0.4l-1.7-3.4c0.2-0.1,0.3-0.2,0.4-0.3c0.2-0.2,0.4-0.3,0.6-0.5c0.1-0.2,0.3-0.4,0.4-0.7
c0.1-0.3,0.1-0.5,0.1-0.8c0-0.5-0.1-0.9-0.2-1.2c-0.2-0.4-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.8-0.2-1.2-0.2h-2.7
v8.9h1.6v-3.4h1.2L349.3,406.5z M348.9,400.9c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1h-1.2V399
h1.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.5,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.1,0.6
C349,400.5,349,400.7,348.9,400.9z"/>
<polygon fill="#FFFFFF" points="351.8,399 353.8,399 353.8,405 351.8,405 351.8,406.5 357.4,406.5 357.4,405 355.4,405 355.4,399
357.4,399 357.4,397.6 351.8,397.6 "/>
<polygon fill="#FFFFFF" points="360.6,402.6 364.1,402.6 364.1,401.2 360.6,401.2 360.6,399 364.6,399 364.6,397.6 359,397.6
359,406.5 364.6,406.5 364.6,405 360.6,405 "/>
<path fill="#FFFFFF" d="M256.6,303.4h1.5l0-0.4l-1.7-3.4c0.2-0.1,0.3-0.2,0.4-0.3c0.2-0.2,0.4-0.3,0.5-0.5c0.2-0.2,0.3-0.4,0.4-0.7
c0.1-0.3,0.1-0.5,0.1-0.8c0-0.5-0.1-0.9-0.2-1.2c-0.2-0.4-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.8-0.2-1.2-0.2h-2.7
v8.9h1.6V300h1.2L256.6,303.4z M256.3,297.8c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1h-1.2v-2.7
h1.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.5,0.3c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.2,0.1,0.4,0.1,0.6
C256.4,297.5,256.4,297.7,256.3,297.8z"/>
<path fill="#FFFFFF" d="M262.2,303.5c0.6,0,1.1-0.1,1.6-0.3c0.5-0.2,0.9-0.6,1.3-1l0.1-0.1l0-3.4h-3.2v1.4h1.7l0,1.5
c-0.1,0.1-0.1,0.1-0.2,0.2c-0.1,0.1-0.2,0.1-0.4,0.2c-0.1,0-0.3,0.1-0.4,0.1c-0.1,0-0.3,0-0.4,0c-0.2,0-0.4,0-0.6-0.1
c-0.2-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.2-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.2,0-0.4-0.1-0.6v-1
c0-0.2,0-0.4,0-0.6c0-0.2,0.1-0.4,0.1-0.6c0.1-0.2,0.1-0.4,0.2-0.6c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.4-0.3
c0.3-0.1,0.8-0.1,1.2,0c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2h1.6l0-0.3
c0-0.4-0.1-0.8-0.3-1.2c-0.2-0.3-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.3-1.6-0.3-2.2,0c-0.3,0.1-0.6,0.3-0.8,0.5
c-0.2,0.2-0.5,0.4-0.6,0.7c-0.2,0.3-0.3,0.5-0.4,0.8c-0.1,0.3-0.2,0.6-0.3,0.9c-0.1,0.3-0.1,0.6-0.1,1v1c0,0.3,0,0.7,0.1,1
c0.1,0.3,0.2,0.7,0.3,0.9c0.1,0.3,0.3,0.6,0.5,0.8c0.2,0.3,0.4,0.5,0.7,0.7c0.3,0.2,0.5,0.4,0.9,0.5
C261.5,303.5,261.8,303.5,262.2,303.5L262.2,303.5z M262.2,303.3L262.2,303.3L262.2,303.3L262.2,303.3z"/>
<path fill="#FFFFFF" d="M269.2,303.4c0.4,0,0.8-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8c0.2-0.3,0.3-0.7,0.3-1.2
c0-0.3,0-0.5-0.1-0.8c-0.1-0.2-0.2-0.5-0.4-0.7c-0.2-0.2-0.3-0.4-0.5-0.5c0,0-0.1-0.1-0.1-0.1c0,0,0,0,0,0c0.2-0.1,0.3-0.3,0.5-0.4
c0.1-0.2,0.2-0.4,0.3-0.6c0.1-0.2,0.1-0.4,0.1-0.7c0-0.4-0.1-0.8-0.3-1.1c-0.2-0.3-0.4-0.6-0.7-0.8c-0.3-0.2-0.6-0.3-1-0.4
c-0.4-0.1-0.7-0.1-1.1-0.1h-2.8v8.9H269.2L269.2,303.4z M267.9,299.5h1.4c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.4,0.2
c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5c0,0.2,0,0.4-0.1,0.5c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.3
c-0.2,0.1-0.4,0.1-0.5,0.1h-1.4V299.5z M270.3,297.4c-0.1,0.1-0.2,0.2-0.3,0.3c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0.1-0.3,0.1-0.5,0.1
h-1.2v-2.1h1.2c0.2,0,0.4,0,0.5,0.1c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.3c0.1,0.1,0.1,0.3,0.1,0.5
C270.4,297.2,270.4,297.3,270.3,297.4z"/>
<polygon fill="#FFFFFF" points="278.2,294.5 276.6,294.5 276.6,303.4 282.3,303.4 282.3,302 278.2,302 "/>
<polygon fill="#FFFFFF" points="285.2,299.5 288.7,299.5 288.7,298.1 285.2,298.1 285.2,295.9 289.2,295.9 289.2,294.5 283.6,294.5
283.6,303.4 289.2,303.4 289.2,302 285.2,302 "/>
<path fill="#FFFFFF" d="M295.6,295.7c-0.3-0.4-0.8-0.7-1.3-0.9c-0.5-0.2-1-0.3-1.7-0.3h-2.2v8.9h2.2c0.6,0,1.2-0.1,1.7-0.3
c0.5-0.2,0.9-0.5,1.3-0.9c0.3-0.4,0.6-0.8,0.8-1.3c0.2-0.5,0.3-1.1,0.3-1.7v-0.6c0-0.6-0.1-1.2-0.3-1.7
C296.2,296.5,296,296,295.6,295.7z M295.1,298.6v0.6c0,0.4-0.1,0.8-0.2,1.1c-0.1,0.3-0.2,0.6-0.4,0.9c-0.2,0.2-0.4,0.4-0.7,0.6
c-0.3,0.1-0.6,0.2-1.1,0.2h-0.6v-6.1h0.6c0.4,0,0.8,0.1,1.1,0.2c0.3,0.1,0.5,0.3,0.7,0.6c0.2,0.2,0.3,0.5,0.4,0.9
C295,297.9,295.1,298.2,295.1,298.6z"/>
<g>
<path fill="#FFFFFF" d="M128.3,354.3l-0.7-1.1l0.9-0.7c0.1-0.2,0.1-0.5,0-0.8c0-0.3-0.2-0.6-0.3-0.9c-0.4-0.7-0.9-1-1.6-1.1
c-0.7-0.1-1.4,0.1-2.2,0.6l-0.3,0.2c-0.8,0.4-1.3,1-1.6,1.6c-0.3,0.6-0.2,1.3,0.1,1.9c0.2,0.3,0.4,0.6,0.6,0.8
c0.2,0.2,0.5,0.3,0.7,0.4l1.1-0.4l0.7,1.1l-1.5,0.9c-0.5-0.1-1-0.3-1.5-0.7c-0.5-0.4-0.9-0.8-1.2-1.4c-0.6-1-0.7-2.1-0.4-3.1
c0.3-1.1,1.1-1.9,2.2-2.6l0.3-0.1c1.1-0.6,2.2-0.8,3.3-0.6c1.1,0.2,1.9,0.9,2.5,1.9c0.3,0.6,0.5,1.2,0.6,1.8c0.1,0.6,0,1.2-0.2,1.7
L128.3,354.3z"/>
<path fill="#FFFFFF" d="M124.9,358l0.4,0.5l8-1.5l0.9,1.6l-5.3,6.2l0.2,0.6l-0.9,0.5l-1.5-2.6l0.9-0.5l0.4,0.5l0.9-0.9l-1.4-2.5
l-1.2,0.3l0.2,0.6l-0.9,0.5l-1.5-2.6L124.9,358z M128.7,359.5l1,1.8l2.2-2.4l0,0L128.7,359.5z"/>
<path fill="#FFFFFF" d="M128.8,367l0.9-0.5l0.6,0.7l5.5-3.2l-0.3-0.9l0.9-0.5l0.5,0.8l0.9,1.5l0.5,0.8l-0.9,0.5l-0.6-0.7l-5.4,3.1
l1.2,2.2l1-0.5l0.7,1.2l-2.1,1.2L128.8,367z"/>
<path fill="#FFFFFF" d="M132.8,373.9l0.9-0.5l0.6,0.7l5.5-3.2l-0.3-0.9l0.9-0.5l0.5,0.8l0.9,1.5l0.5,0.8l-0.9,0.5l-0.6-0.7
l-5.4,3.1l1.2,2.2l1-0.5l0.7,1.2l-2.1,1.2L132.8,373.9z"/>
<path fill="#FFFFFF" d="M143.6,377l0.9-0.5l1.8,3.2l-0.9,0.5l-0.6-0.7l-5.5,3.2l0.3,0.9l-0.9,0.5l-1.8-3.2l0.9-0.5l0.6,0.7l5.5-3.2
L143.6,377z"/>
<path fill="#FFFFFF" d="M147.2,390c-1.1,0.6-2.2,0.9-3.3,0.6c-1.1-0.2-2-0.8-2.6-1.9c-0.6-1-0.7-2.1-0.4-3.1
c0.4-1.1,1.1-1.9,2.2-2.6l0.1-0.1c1.1-0.6,2.2-0.9,3.3-0.7c1.1,0.2,1.9,0.8,2.5,1.9c0.6,1,0.7,2.1,0.4,3.2
c-0.4,1.1-1.1,1.9-2.2,2.6L147.2,390z M146.4,388.4c0.8-0.5,1.3-1,1.6-1.6c0.3-0.6,0.3-1.2-0.1-1.9c-0.4-0.6-0.9-1-1.6-1
c-0.7,0-1.4,0.2-2.2,0.6l-0.1,0.1c-0.8,0.5-1.4,1-1.7,1.6c-0.3,0.6-0.3,1.2,0.1,1.9c0.4,0.6,0.9,1,1.6,1c0.7,0,1.4-0.2,2.2-0.6
L146.4,388.4z"/>
<path fill="#FFFFFF" d="M153.9,392.7c0.5,0.9,0.7,1.7,0.5,2.5c-0.2,0.8-0.6,1.4-1.3,1.8c-0.7,0.4-1.5,0.5-2.2,0.3
c-0.7-0.2-1.4-0.8-1.9-1.7l-0.7-1.3l-1.7,1l0.3,0.9l-0.9,0.5l-1.8-3.2l0.9-0.5l0.6,0.7l5.5-3.2l-0.3-0.9l0.9-0.5l0.5,0.8
L153.9,392.7z M149.5,393.5l0.7,1.3c0.2,0.4,0.6,0.7,0.9,0.8c0.4,0.1,0.7,0,1.1-0.2c0.4-0.2,0.6-0.5,0.7-0.9c0.1-0.4,0-0.7-0.2-1.2
l-0.7-1.3L149.5,393.5z"/>
<path fill="#FFFFFF" d="M154.8,404l-1.5-2.6l-2.2,1.3l1.4,2.5l1-0.5l0.7,1.2l-2.1,1.2l-3.5-6l0.9-0.5l0.6,0.7l5.5-3.2l-0.3-0.9
l0.9-0.5l0.5,0.8l3,5.2l-2.1,1.2l-0.7-1.2l0.9-0.6l-1.4-2.4l-1.9,1.1l1.5,2.6L154.8,404z"/>
<path fill="#FFFFFF" d="M113.9,357.7l-1.3,0.9c0.7,0,1.3,0.1,1.8,0.3c0.5,0.3,1,0.7,1.3,1.3c0.3,0.6,0.5,1.1,0.5,1.6
s-0.2,1-0.6,1.4c0.6,0,1.1,0.2,1.6,0.4c0.5,0.3,0.9,0.7,1.2,1.2c0.2,0.4,0.4,0.9,0.5,1.3c0.1,0.4,0,0.9-0.1,1.3
c-0.2,0.4-0.4,0.9-0.8,1.3c-0.4,0.4-0.9,0.8-1.6,1.2l-9.5,5.5l-1.6-2.7l9.6-5.5c0.5-0.3,0.8-0.6,0.9-1c0.1-0.3,0-0.7-0.2-1
c-0.2-0.3-0.4-0.5-0.7-0.6c-0.3-0.1-0.6-0.1-0.9-0.1l-10.1,5.8l-1.5-2.6l9.6-5.5c0.5-0.3,0.8-0.6,0.9-0.9c0.1-0.3,0-0.7-0.2-1
c-0.2-0.3-0.4-0.6-0.7-0.7c-0.3-0.1-0.5-0.1-0.8-0.1l-10.1,5.9l-1.6-2.7l13-7.6L113.9,357.7z"/>
<path fill="#FFFFFF" d="M121.9,371.5l4,7l-10.7,6.2l2.2,3.9l-2.4,1.4l-6.3-10.8l2.4-1.4l2.3,4.1l8.3-4.8l-2.3-4.1L121.9,371.5z
M127.5,373.3c0.4-0.3,0.9-0.3,1.4-0.2c0.5,0.1,0.8,0.4,1.1,1c0.3,0.5,0.4,1,0.3,1.5s-0.4,0.8-0.9,1.1c-0.5,0.3-0.9,0.3-1.4,0.2
c-0.5-0.1-0.8-0.5-1.2-1c-0.3-0.5-0.4-1-0.3-1.5C126.8,374,127.1,373.6,127.5,373.3z"/>
<path fill="#FFFFFF" d="M131.7,388.4l-1.7,1.2c0.9,0.1,1.8,0.4,2.5,0.8c0.7,0.5,1.4,1.1,1.8,1.9c0.4,0.7,0.6,1.3,0.8,2
c0.1,0.7,0.1,1.3-0.1,1.9c-0.2,0.6-0.5,1.3-1.1,1.9c-0.5,0.6-1.2,1.2-2.2,1.7l-8.2,4.7l-1.7-2.9l8.1-4.7c0.5-0.3,1-0.6,1.2-1
s0.5-0.7,0.6-1c0.1-0.4,0.1-0.7,0-1.1c-0.1-0.4-0.3-0.8-0.5-1.2c-0.4-0.6-0.8-1.1-1.4-1.4c-0.6-0.3-1.2-0.5-1.8-0.5l-9.4,5.4
l-1.7-2.9l13-7.6L131.7,388.4z"/>
<path fill="#FFFFFF" d="M138.5,400.4l4,7l-10.7,6.2l2.2,3.9l-2.4,1.4l-6.3-10.8l2.4-1.4l2.3,4.1l8.3-4.8l-2.3-4.1L138.5,400.4z
M144.1,402.2c0.4-0.3,0.9-0.3,1.4-0.2c0.5,0.1,0.8,0.4,1.1,1c0.3,0.5,0.4,1,0.3,1.5s-0.4,0.8-0.9,1.1c-0.5,0.3-0.9,0.3-1.4,0.2
c-0.5-0.1-0.8-0.5-1.2-1c-0.3-0.5-0.4-1-0.3-1.5C143.4,402.8,143.7,402.5,144.1,402.2z"/>
<g>
<path fill="#FFFFFF" d="M126.3,333.7l-3.9-6.8c-0.6-1-1.9-1.4-2.9-0.8c0,0-5.8,3.3-5.1,2.9c4.3-2.4,5.8-7.9,3.3-12.2
c-2.4-4.3-7.9-5.8-12.2-3.3c-0.6,0.4-5.2,3-8.5,4.9l-12.1-5.3c-8.3-3.5-16.3,5.5-11.8,13.3l1.1,1.8c6.1-2.5,14.2-4.7,20.6-3.5
l0.1,0.2l4.7,8.2c-2.2,6.1-8.3,11.7-13.6,15.7l1.5,2.6c1.6,2.9,5.3,3.9,8.2,2.3l19.9-11.3l10.1-5.7
C126.5,336,126.9,334.7,126.3,333.7z M111.1,316.7l3.6,6.4l-4.3,2.5c-1.4,0.8-3.2,0.3-4-1.1l-0.8-1.3c-0.8-1.4-0.3-3.2,1.1-4
L111.1,316.7z M97.7,322.3l7.2-0.3l-4.6,4.9L97.7,322.3z M100.4,327.1l6.6-1.4l-3.9,6.1L100.4,327.1z M110.2,333.2l9.5-5.4
l4.4,7.7l-9.5,5.4L110.2,333.2z"/>
<path fill="#FFFFFF" d="M83.6,344.8c0.6-5.8,6.4-13.5,11.2-19.9l-17,9.7L83.6,344.8z"/>
</g>
</g>
<circle fill="none" cx="393.4" cy="485.9" r="15.7"/>
<circle fill="none" cx="138" cy="487.1" r="15.7"/>
<path id="EDGE_P3" fill="#EFDA48" d="M522.4,232.8c-0.6,0-1.3-0.1-1.9-0.1c-18.2,0-32.9,14.7-32.9,32.9s14.7,32.9,32.9,32.9
c0.9,0,1.8,0,2.7-0.1c16.9-1.4,30.2-15.5,30.2-32.8C553.4,248.1,539.7,233.8,522.4,232.8z M520.5,281c-8.5,0-15.6-6.8-15.7-15.6
c0.1-8.6,7-15.6,15.7-15.6c8.6,0,15.6,7,15.7,15.6C536.1,274.1,529.2,281,520.5,281z"/>
<path id="EDGE_P2" fill="#EFDA48" d="M393.4,453c-18.2,0-32.9,14.7-32.9,32.9c0,18.2,14.7,32.9,32.9,32.9
c18.2,0,32.9-14.7,32.9-32.9C426.1,467.8,411.3,453,393.4,453z M393.4,501.5c-8.6,0-15.7-6.9-15.7-15.7c0-8.6,6.9-15.7,15.7-15.7
c8.6,0,15.7,6.9,15.7,15.7C408.9,494.4,401.9,501.5,393.4,501.5z"/>
<path id="EDGE_P1" fill="#EFDA48" d="M138,454.2c-18.2,0-32.9,14.7-32.9,32.9c0,18.2,14.7,32.9,32.9,32.9s32.9-14.7,32.9-32.9
C170.9,469.1,156.1,454.2,138,454.2z M138,502.8c-8.6,0-15.7-6.9-15.7-15.7c0-8.8,6.9-15.7,15.7-15.7s15.7,6.9,15.7,15.7
C153.6,495.9,146.7,502.8,138,502.8z"/>
<path id="EDGE_GND" fill="#EFDA48" d="M160.6,20c-6-6.2-14.4-10-23.6-10C118.7,10,104,24.7,104,42.9c0,5.8,1.5,11.2,4.1,15.9
c5.6,10.2,16.4,17,28.8,17c18.2,0,32.9-14.7,32.9-32.9C169.8,34,166.3,25.9,160.6,20z M136.9,58.4c-8.7,0-15.7-7.1-15.7-15.7
s6.9-15.7,15.7-15.7c8.7,0,15.7,6.9,15.7,15.7S145.5,58.4,136.9,58.4z"/>
2017-02-24 17:51:42 +01:00
</svg>
`
2016-10-13 07:44:05 +02:00
const pinNames = [
2017-02-24 22:22:46 +01:00
"BTN_A", "BTN_B",
2016-10-13 11:16:10 +02:00
"EDGE_P0", "EDGE_P1", "EDGE_P2", "EDGE_P3", "EDGE_GND", "EDGE_VCC",
"C_GND1", "C_GND2", "C_GND3", "C_GND4", "C_VCC1", "C_VCC2",
2017-02-24 17:51:42 +01:00
"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",
2016-10-13 11:16:10 +02:00
"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 = [
2017-02-24 22:22:46 +01:00
"Button A", "Button B",
"P0", "P1, ANALOG IN", "P2, ANALOG IN", "P3", "GND", "+3v3",
2016-10-13 11:16:10 +02:00
"GND", "GND", "GND", "GND", "+3v3", "+3v3",
2017-02-24 22:22:46 +01:00
"C0", "C2", "C4", "C6", "C8", "C10", "C12", "C14", "C16", "C18",
"C1", "C3", "C5", "C7", "C9", "C11", "C13", "C15", "C17", "C19",
"GND", "GND", "MOTOR B", "MOTOR A", "MOTOR VM",
2016-10-13 11:16:10 +02:00
"GND", "+3v3", "C18, I2C - SDA", "C19, I2C - SCL",
"C16, Serial - RX", "C17, Serial - TX", "+3v3", "GND"
];
2017-02-24 22:22:46 +01:00
const MB_WIDTH = 530;
const MB_HEIGHT = 530;
2016-03-11 01:24:11 +01:00
export interface IBoardTheme {
accent?: string;
display?: string;
pin?: string;
pinTouched?: string;
pinActive?: string;
ledOn?: string;
ledOff?: string;
buttonOuter?: string;
2016-10-13 07:44:05 +02:00
buttonUps: string[];
2016-03-11 01:24:11 +01:00
buttonDown?: string;
2016-03-18 21:55:07 +01:00
virtualButtonOuter?: string;
virtualButtonUp?: string;
virtualButtonDown?: string;
2016-05-05 08:31:55 +02:00
lightLevelOn?: string;
2016-03-11 22:17:49 +01:00
lightLevelOff?: string;
2016-03-11 01:24:11 +01:00
}
2016-09-27 00:05:06 +02:00
export var themes: IBoardTheme[] = ["#3ADCFE"].map(accent => {
2016-03-11 01:24:11 +01:00
return {
accent: accent,
2017-02-24 22:22:46 +01:00
pin: "#EFDA48",
2016-03-11 01:24:11 +01:00
pinTouched: "#FFA500",
2016-05-05 08:31:55 +02:00
pinActive: "#FF5500",
2017-02-24 22:22:46 +01:00
ledOn: "#ff5555",
ledOff: "#e0e1e2",
2016-03-11 01:24:11 +01:00
buttonOuter: "#979797",
2016-10-13 07:44:05 +02:00
buttonUps: ["#186A8C", "#D82E50"],
2016-03-11 01:24:11 +01:00
buttonDown: "#FFA500",
2016-09-27 20:00:21 +02:00
virtualButtonDown: "#FFA500",
2016-03-18 21:55:07 +01:00
virtualButtonOuter: "#333",
virtualButtonUp: "#fff",
2016-03-11 22:17:49 +01:00
lightLevelOn: "yellow",
lightLevelOff: "#555"
2016-05-05 08:31:55 +02:00
}
});
2016-03-11 01:24:11 +01:00
2016-05-05 08:31:55 +02:00
export function randomTheme(): IBoardTheme {
2016-03-11 01:24:11 +01:00
return themes[Math.floor(Math.random() * themes.length)];
}
export interface IBoardProps {
runtime?: pxsim.Runtime;
2016-03-11 01:24:11 +01:00
theme?: IBoardTheme;
2016-05-05 08:31:55 +02:00
disableTilt?: boolean;
wireframe?: boolean;
2016-03-11 01:24:11 +01:00
}
2016-05-05 08:31:55 +02:00
export class MicrobitBoardSvg implements BoardView {
2016-05-05 08:31:55 +02:00
public element: SVGSVGElement;
2016-03-24 21:56:51 +01:00
private style: SVGStyleElement;
2016-05-05 08:31:55 +02:00
private defs: SVGDefsElement;
private g: SVGGElement;
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
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;
2016-03-11 22:17:49 +01:00
private lightLevelButton: SVGCircleElement;
2016-05-05 08:31:55 +02:00
private lightLevelGradient: SVGLinearGradientElement;
2016-03-12 00:10:36 +01:00
private lightLevelText: SVGTextElement;
2016-05-05 08:31:55 +02:00
private thermometerGradient: SVGLinearGradientElement;
2016-03-14 22:03:31 +01:00
private thermometer: SVGRectElement;
private thermometerText: SVGTextElement;
2016-09-27 20:00:21 +02:00
private shakeButton: SVGElement;
2016-08-30 21:42:30 +02:00
public board: pxsim.DalBoard;
2016-09-27 22:35:48 +02:00
private rgbLed: SVGElement;
2016-10-17 05:25:55 +02:00
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
],
2016-10-25 08:17:16 +02:00
// rings
2016-10-17 05:25:55 +02:00
"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
2016-10-25 08:17:16 +02:00
],
2016-10-17 05:25:55 +02:00
"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
],
2017-02-24 17:51:42 +01:00
"C_P3": [
2016-10-17 05:25:55 +02:00
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
]
};
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
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();
}
2016-03-11 01:24:11 +01:00
}
2016-05-05 08:31:55 +02:00
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 {
2016-10-14 08:53:24 +02:00
return 10;
}
2016-10-17 05:25:55 +02:00
private recordPinCoords() {
pinNames.forEach((nm, i) => {
2016-10-14 15:46:56 +02:00
const p = this.pins[i];
const r = p.getBoundingClientRect();
this.pinNmToCoord[nm] = [r.left + r.width / 2, r.top + r.height / 2];
});
2016-10-17 05:25:55 +02:00
console.log(JSON.stringify(this.pinNmToCoord, null, 2))
}
2016-03-11 01:24:11 +01:00
private updateTheme() {
let theme = this.props.theme;
2016-05-05 08:31:55 +02:00
2016-05-05 17:57:44 +02:00
svg.fills(this.leds, theme.ledOn);
svg.fills(this.ledsOuter, theme.ledOff);
svg.fills(this.buttonsOuter.slice(0, 2), theme.buttonOuter);
2016-10-13 07:44:05 +02:00
svg.fill(this.buttons[0], theme.buttonUps[0]);
svg.fill(this.buttons[1], theme.buttonUps[1]);
2016-05-05 17:57:44 +02:00
svg.fill(this.buttonsOuter[2], theme.virtualButtonOuter);
svg.fill(this.buttons[2], theme.virtualButtonUp);
2016-05-05 08:31:55 +02:00
2016-05-05 17:57:44 +02:00
this.pinGradients.forEach(lg => svg.setGradientColors(lg, theme.pin, theme.pinActive));
svg.setGradientColors(this.lightLevelGradient, theme.lightLevelOn, theme.lightLevelOff);
2016-05-05 08:31:55 +02:00
2016-05-05 17:57:44 +02:00
svg.setGradientColors(this.thermometerGradient, theme.ledOff, theme.ledOn);
2016-03-11 01:24:11 +01:00
}
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
public updateState() {
2016-08-30 21:42:30 +02:00
let state = this.board;
2016-03-11 01:24:11 +01:00
if (!state) return;
let theme = this.props.theme;
2016-05-05 08:31:55 +02:00
let bpState = state.buttonPairState;
let buttons = [bpState.aBtn, bpState.bBtn, bpState.abBtn];
buttons.forEach((btn, index) => {
2016-10-13 07:44:05 +02:00
svg.fill(this.buttons[index], btn.pressed ? (btn.virtual ? theme.virtualButtonDown : theme.buttonDown) : (btn.virtual ? theme.virtualButtonUp : theme.buttonUps[index]));
2016-03-11 01:24:11 +01:00
});
2016-05-05 08:31:55 +02:00
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) + "";
})
}
2016-03-11 01:24:11 +01:00
this.updatePins();
this.updateTilt();
2016-05-05 08:31:55 +02:00
this.updateHeading();
2016-03-14 22:03:31 +01:00
this.updateLightLevel();
2016-05-05 08:31:55 +02:00
this.updateTemperature();
this.updateButtonAB();
this.updateGestures();
2016-09-27 22:35:48 +02:00
this.updateRgbLed();
2016-10-27 22:47:39 +02:00
this.updateSpeaker();
2016-05-05 08:31:55 +02:00
2016-05-05 17:57:44 +02:00
if (!runtime || runtime.dead) svg.addClass(this.element, "grayscale");
else svg.removeClass(this.element, "grayscale");
2016-03-18 22:54:27 +01:00
}
2016-05-05 08:31:55 +02:00
2016-09-27 22:35:48 +02:00
private updateRgbLed() {
let state = this.board;
if (state.rgbLedState) {
if (!this.rgbLed)
2016-10-13 07:44:05 +02:00
this.rgbLed = this.element.getElementById("rgbledcircle") as SVGCircleElement;
2016-10-11 20:41:51 +02:00
const c = state.rgbLedState;
const b = c & 0xFF;
const g = (c >> 8) & 0xFF;
const r = (c >> 16) & 0xFF;
const w = (c >> 24) & 0xFF;
2016-10-17 05:25:55 +02:00
const ch = `rgba(${r}, ${g}, ${b}, 1)`;
2016-10-11 20:41:51 +02:00
svg.fill(this.rgbLed, ch);
} else if (this.rgbLed) {
svg.fill(this.rgbLed, 'white');
2016-09-27 22:35:48 +02:00
}
}
2016-10-27 22:47:39 +02:00
private updateSpeaker() {
let state = this.board;
if (state.speakerState.frequency) {
} else {
}
}
2016-03-18 22:54:27 +01:00
private updateGestures() {
2016-08-30 21:42:30 +02:00
let state = this.board;
if (state.accelerometerState.useShake && !this.shakeButton) {
2017-02-24 22:22:46 +01:00
let shake = this.mkBtn(26, MB_HEIGHT - 45);
2016-09-27 20:00:21 +02:00
this.shakeButton = shake.inner;
2016-05-05 17:57:44 +02:00
svg.fill(this.shakeButton, this.props.theme.virtualButtonUp)
2016-09-27 20:00:21 +02:00
svg.buttonEvents(shake.outer,
2016-09-27 22:35:48 +02:00
ev => { },
2016-09-27 20:00:21 +02:00
(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
}
)
2017-02-24 22:22:46 +01:00
let shakeText = svg.child(shake.outer, "text", { x: 15, y: MB_HEIGHT - 10, class: "sim-text inverted" }) as SVGTextElement;
2016-09-27 20:00:21 +02:00
shakeText.textContent = "SHAKE"
2016-05-05 08:31:55 +02:00
}
2016-03-18 21:55:07 +01:00
}
2016-05-05 08:31:55 +02:00
2016-03-18 21:55:07 +01:00
private updateButtonAB() {
2016-08-30 21:42:30 +02:00
let state = this.board;
2016-09-27 20:00:21 +02:00
if (state.buttonPairState.usesButtonAB && (<any>this.buttons[2]).style.visibility != "visible") {
2016-05-05 08:31:55 +02:00
(<any>this.buttonsOuter[2]).style.visibility = "visible";
(<any>this.buttons[2]).style.visibility = "visible";
2016-03-18 21:55:07 +01:00
this.updateTheme();
2016-05-05 08:31:55 +02:00
}
2016-03-11 01:24:11 +01:00
}
2016-05-05 08:31:55 +02:00
private updatePin(pin: Pin, index: number) {
2016-03-11 01:24:11 +01:00
if (!pin) return;
let text = this.pinTexts[index];
2016-05-05 08:31:55 +02:00
let v = "";
2016-06-04 08:15:51 +02:00
if (pin.mode & PinFlags.Analog) {
2016-05-05 08:31:55 +02:00
v = Math.floor(100 - (pin.value || 0) / 1023 * 100) + "%";
if (text) text.textContent = (pin.period ? "~" : "") + (pin.value || 0) + "";
2016-03-11 01:24:11 +01:00
}
2016-06-04 08:15:51 +02:00
else if (pin.mode & PinFlags.Digital) {
2016-06-09 23:08:15 +02:00
v = pin.value > 0 ? "0%" : "100%";
2016-03-11 01:24:11 +01:00
if (text) text.textContent = pin.value > 0 ? "1" : "0";
}
2016-06-04 08:15:51 +02:00
else if (pin.mode & PinFlags.Touch) {
v = pin.touched ? "0%" : "100%";
2016-03-11 01:24:11 +01:00
if (text) text.textContent = "";
} else {
2016-06-04 08:15:51 +02:00
v = "100%";
if (text) text.textContent = "";
2016-03-11 01:24:11 +01:00
}
2016-05-05 17:57:44 +02:00
if (v) svg.setGradientValue(this.pinGradients[index], v);
2016-03-11 01:24:11 +01:00
}
2016-05-05 08:31:55 +02:00
2016-03-14 22:03:31 +01:00
private updateTemperature() {
2016-08-30 21:42:30 +02:00
let state = this.board;
if (!state || !state.thermometerState.usesTemperature) return;
2016-05-05 08:31:55 +02:00
2016-03-14 22:03:31 +01:00
let tmin = -5;
let tmax = 50;
2016-05-05 08:31:55 +02:00
if (!this.thermometer) {
2016-03-14 22:03:31 +01:00
let gid = "gradient-thermometer";
2016-05-05 17:57:44 +02:00
this.thermometerGradient = svg.linearGradient(this.defs, gid);
2017-02-24 22:22:46 +01:00
const ty = MB_HEIGHT - 180;
2016-05-05 17:57:44 +02:00
this.thermometer = <SVGRectElement>svg.child(this.g, "rect", {
2016-05-05 08:31:55 +02:00
class: "sim-thermometer",
2017-02-24 22:22:46 +01:00
x: 28,
2016-10-13 08:30:19 +02:00
y: ty,
width: 10,
height: 80,
2016-05-05 08:31:55 +02:00
rx: 5, ry: 5,
fill: `url(#${gid})`
2016-03-14 22:03:31 +01:00
});
2016-10-17 05:25:55 +02:00
this.thermometerText = svg.child(this.g, "text", {
class: 'sim-text',
2017-02-24 22:22:46 +01:00
x: 48, y: ty + 78
2016-10-17 05:25:55 +02:00
}) as SVGTextElement;
2016-03-14 22:03:31 +01:00
this.updateTheme();
2016-05-05 08:31:55 +02:00
2016-03-14 22:03:31 +01:00
let pt = this.element.createSVGPoint();
2016-05-05 17:57:44 +02:00
svg.buttonEvents(this.thermometer,
2016-03-14 22:03:31 +01:00
(ev) => {
2016-05-05 17:57:44 +02:00
let cur = svg.cursorPoint(pt, this.element, ev);
2016-10-13 08:30:19 +02:00
let t = Math.max(0, Math.min(1, (cur.y - ty - 5) / 70))
state.thermometerState.temperature = Math.floor(tmax - t * (tmax - tmin));
2016-03-14 22:03:31 +01:00
this.updateTemperature();
2016-05-05 08:31:55 +02:00
}, ev => { }, ev => { })
2016-03-14 22:03:31 +01:00
}
2016-05-05 08:31:55 +02:00
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";
2016-03-14 22:03:31 +01:00
}
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
private updateHeading() {
let xc = 258;
let yc = 75;
2016-08-30 21:42:30 +02:00
let state = this.board;
if (!state || !state.compassState.usesHeading) return;
2016-09-27 00:05:06 +02:00
/*
2016-03-11 01:24:11 +01:00
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");
2016-05-13 07:23:23 +02:00
this.updateTheme();
2016-03-11 01:24:11 +01:00
let pt = this.element.createSVGPoint();
2016-05-05 17:57:44 +02:00
svg.buttonEvents(
2016-03-11 01:24:11 +01:00
this.head,
2016-05-05 08:31:55 +02:00
(ev: MouseEvent) => {
2016-05-05 17:57:44 +02:00
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;
2016-05-05 08:31:55 +02:00
this.updateHeading();
2016-03-11 01:24:11 +01:00
});
this.headInitialized = true;
}
2016-05-05 08:31:55 +02:00
let txt = state.compassState.heading.toString() + "°";
2016-05-05 08:31:55 +02:00
if (txt != this.headText.textContent) {
svg.rotateElement(this.head, xc, yc, state.compassState.heading + 180);
2016-03-11 01:24:11 +01:00
this.headText.textContent = txt;
2016-09-27 00:05:06 +02:00
} */
2016-03-11 01:24:11 +01:00
}
2016-05-05 08:31:55 +02:00
private lastFlashTime: number = 0;
2016-03-11 01:24:11 +01:00
public flashSystemLed() {
if (!this.systemLed)
2017-02-24 22:22:46 +01:00
this.systemLed = <SVGCircleElement>svg.child(this.g, "circle", { class: "sim-systemled", cx: 160.8, cy: 150.9, r: 4 })
2016-03-11 01:24:11 +01:00
let now = Date.now();
if (now - this.lastFlashTime > 150) {
this.lastFlashTime = now;
2016-05-13 07:23:23 +02:00
svg.animate(this.systemLed, "sim-flash")
2016-03-11 01:24:11 +01:00
}
}
2016-05-05 08:31:55 +02:00
private lastAntennaFlash: number = 0;
2016-03-11 01:24:11 +01:00
public flashAntenna() {
2016-05-05 08:31:55 +02:00
if (!this.antenna) {
2017-02-24 22:22:46 +01:00
let ax = 480;
2016-03-11 01:24:11 +01:00
let dax = 18;
let ayt = 10;
let ayb = 40;
2016-05-05 17:57:44 +02:00
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}` })
2016-03-11 01:24:11 +01:00
}
let now = Date.now();
if (now - this.lastAntennaFlash > 200) {
this.lastAntennaFlash = now;
2016-05-05 17:57:44 +02:00
svg.animate(this.antenna, 'sim-flash-stroke')
2016-03-11 01:24:11 +01:00
}
}
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
private updatePins() {
2016-08-30 21:42:30 +02:00
let state = this.board;
2016-03-11 01:24:11 +01:00
if (!state) return;
2016-05-05 08:31:55 +02:00
state.edgeConnectorState.pins.forEach((pin, i) => this.updatePin(pin, i));
2016-05-05 08:31:55 +02:00
}
2016-03-11 22:17:49 +01:00
private updateLightLevel() {
2016-08-30 21:42:30 +02:00
let state = this.board;
if (!state || !state.lightSensorState.usesLightLevel) return;
2016-05-05 08:31:55 +02:00
2016-03-11 22:17:49 +01:00
if (!this.lightLevelButton) {
2016-05-05 08:31:55 +02:00
let gid = "gradient-light-level";
2016-05-05 17:57:44 +02:00
this.lightLevelGradient = svg.linearGradient(this.defs, gid)
const cx = 30;
const cy = 45;
const r = 20;
2016-05-05 17:57:44 +02:00
this.lightLevelButton = svg.child(this.g, "circle", {
cx: `${cx}px`, cy: `${cy}px`, r: `${r}px`,
2016-05-05 08:31:55 +02:00
class: 'sim-light-level-button',
fill: `url(#${gid})`
}) as SVGCircleElement;
2016-03-11 22:17:49 +01:00
let pt = this.element.createSVGPoint();
2016-05-05 17:57:44 +02:00
svg.buttonEvents(this.lightLevelButton,
2016-03-11 22:17:49 +01:00
(ev) => {
2016-05-05 17:57:44 +02:00
let pos = svg.cursorPoint(pt, this.element, ev);
2016-05-05 08:31:55 +02:00
let rs = r / 2;
let level = Math.max(0, Math.min(255, Math.floor((pos.y - (cy - rs)) / (2 * rs) * 255)));
2016-08-30 21:42:30 +02:00
if (level != this.board.lightSensorState.lightLevel) {
this.board.lightSensorState.lightLevel = level;
2016-03-12 00:10:36 +01:00
this.applyLightLevel();
2016-03-11 22:17:49 +01:00
}
2016-05-05 08:31:55 +02:00
}, ev => { },
ev => { })
2016-10-17 05:25:55 +02:00
this.lightLevelText = svg.child(this.g, "text", { x: cx - r - 7, y: cy + r + 8, text: '', class: 'sim-text inverted' }) as SVGTextElement;
2016-03-11 22:17:49 +01:00
this.updateTheme();
2016-05-05 08:31:55 +02:00
}
svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor(state.lightSensorState.lightLevel * 100 / 255))) + '%')
this.lightLevelText.textContent = state.lightSensorState.lightLevel.toString();
2016-05-05 08:31:55 +02:00
}
2016-03-12 00:10:36 +01:00
private applyLightLevel() {
2016-08-30 21:42:30 +02:00
let lv = this.board.lightSensorState.lightLevel;
2016-05-05 17:57:44 +02:00
svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor(lv * 100 / 255))) + '%')
2016-05-05 08:31:55 +02:00
this.lightLevelText.textContent = lv.toString();
2016-03-12 00:10:36 +01:00
}
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
private updateTilt() {
if (this.props.disableTilt) return;
2016-08-30 21:42:30 +02:00
let state = this.board;
if (!state || !state.accelerometerState.accelerometer.isActive) return;
2016-03-11 01:24:11 +01:00
let x = state.accelerometerState.accelerometer.getX();
2017-02-24 22:22:46 +01:00
let y = -state.accelerometerState.accelerometer.getY();
2016-03-20 03:15:20 +01:00
let af = 8 / 1023;
2016-05-05 08:31:55 +02:00
this.element.style.transform = "perspective(30em) rotateX(" + y * af + "deg) rotateY(" + x * af + "deg)"
2016-03-20 03:15:20 +01:00
this.element.style.perspectiveOrigin = "50% 50% 50%";
2016-05-05 08:31:55 +02:00
this.element.style.perspective = "30em";
2016-03-11 01:24:11 +01:00
}
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
private buildDom() {
2016-10-17 05:09:13 +02:00
this.element = new DOMParser().parseFromString(BOARD_SVG, "image/svg+xml").querySelector("svg") as SVGSVGElement;
2016-05-05 17:57:44 +02:00
svg.hydrate(this.element, {
2016-05-05 08:31:55 +02:00
"version": "1.0",
"viewBox": `0 0 ${MB_WIDTH} ${MB_HEIGHT}`,
2016-05-05 08:31:55 +02:00
"class": "sim",
2016-03-11 01:24:11 +01:00
"x": "0px",
"y": "0px",
"width": MB_WIDTH + "px",
"height": MB_HEIGHT + "px",
2016-05-05 08:31:55 +02:00
});
2016-05-05 17:57:44 +02:00
this.style = <SVGStyleElement>svg.child(this.element, "style", {});
this.style.textContent = MB_STYLE;
2016-05-05 08:31:55 +02:00
2016-05-05 17:57:44 +02:00
this.defs = <SVGDefsElement>svg.child(this.element, "defs", {});
this.g = <SVGGElement>svg.elt("g");
2016-03-11 01:24:11 +01:00
this.element.appendChild(this.g);
2016-05-05 08:31:55 +02:00
2016-03-20 08:44:30 +01:00
// filters
2016-05-05 17:57:44 +02:00
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" })
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
// leds
this.leds = [];
this.ledsOuter = [];
2017-02-24 22:22:46 +01:00
const left = Number(this.element.getElementById("LED_0_0").getAttribute("x"));
const top = Number(this.element.getElementById("LED_0_0").getAttribute("y"));
const ledoffw = Number(this.element.getElementById("LED_1_0").getAttribute("x"))-left;
const ledoffh = Number(this.element.getElementById("LED_0_1").getAttribute("y"))-top;
const ledw = 5.1;
const ledh = 12.9;
2016-05-05 08:31:55 +02:00
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;
2016-10-13 08:40:33 +02:00
this.ledsOuter.push(svg.child(this.g, "rect", { class: "sim-led-back", x: ledleft, y: ledtop, width: ledw, height: ledh }));
2016-09-27 00:05:06 +02:00
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})` }));
2016-03-11 01:24:11 +01:00
}
}
2016-05-05 08:31:55 +02:00
2016-03-21 05:34:16 +01:00
// https://www.microbit.co.uk/device/pins
2016-03-11 01:24:11 +01:00
// P0, P1, P2
2016-10-14 08:53:24 +02:00
this.pins = pinNames.map(n => {
let p = this.element.getElementById(n) as SVGElement;
2017-02-24 22:22:46 +01:00
if(!p) console.log("missing "+n);
2016-10-14 08:53:24 +02:00
svg.addClass(p, "sim-pin");
return p;
});
2016-05-05 08:31:55 +02:00
2016-09-27 00:05:06 +02:00
this.pins.forEach((p, i) => svg.hydrate(p, { title: pinTitles[i] }));
2016-05-05 08:31:55 +02:00
this.pinGradients = this.pins.map((pin, i) => {
let gid = "gradient-pin-" + i
2016-05-05 17:57:44 +02:00
let lg = svg.linearGradient(this.defs, gid)
2016-03-11 01:24:11 +01:00
pin.setAttribute("fill", `url(#${gid})`);
return lg;
})
2016-05-05 08:31:55 +02:00
2016-06-09 23:08:15 +02:00
this.pinTexts = [67, 165, 275].map(x => <SVGTextElement>svg.child(this.g, "text", { class: "sim-text-pin", x: x, y: 345 }));
2016-10-13 07:44:05 +02:00
// 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"));
2016-06-09 23:08:15 +02:00
2016-10-13 07:44:05 +02:00
// BTN A+B
2016-06-09 23:08:15 +02:00
const outerBtn = (left: number, top: number) => {
2016-09-27 20:00:21 +02:00
const button = this.mkBtn(left, top);
this.buttonsOuter.push(button.outer);
this.buttons.push(button.inner);
return button;
2016-06-09 23:08:15 +02:00
}
2017-02-24 22:22:46 +01:00
let ab = outerBtn(69, MB_HEIGHT - 45);
let abtext = svg.child(ab.outer, "text", { x: 67, y: MB_HEIGHT - 10, class: "sim-text inverted" }) as SVGTextElement;
2016-09-27 20:00:21 +02:00
abtext.textContent = "A+B";
2016-06-09 23:08:15 +02:00
(<any>this.buttonsOuter[2]).style.visibility = "hidden";
(<any>this.buttons[2]).style.visibility = "hidden";
2016-03-11 01:24:11 +01:00
}
2016-05-05 08:31:55 +02:00
2016-09-27 20:00:21 +02:00
private mkBtn(left: number, top: number): { outer: SVGElement, inner: SVGElement } {
2016-10-13 07:44:05 +02:00
const btnr = 2;
2017-02-24 22:22:46 +01:00
const btnw = 20;
2016-10-13 07:44:05 +02:00
const btnn = 1.6;
const btnnm = 2;
2016-09-27 20:00:21 +02:00
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 };
}
2016-03-11 01:24:11 +01:00
private attachEvents() {
Runtime.messagePosted = (msg) => {
2016-07-29 22:42:21 +02:00
switch (msg.type || "") {
case "serial": this.flashSystemLed(); break;
case "radiopacket": this.flashAntenna(); break;
2016-03-11 01:24:11 +01:00
}
}
2016-03-30 06:14:27 +02:00
let tiltDecayer = 0;
2016-04-11 19:58:09 +02:00
this.element.addEventListener(pointerEvents.move, (ev: MouseEvent) => {
2016-08-30 21:42:30 +02:00
let state = this.board;
if (!state.accelerometerState.accelerometer.isActive) return;
2016-05-05 08:31:55 +02:00
2016-03-30 06:14:27 +02:00
if (tiltDecayer) {
clearInterval(tiltDecayer);
tiltDecayer = 0;
}
2016-03-20 03:15:20 +01:00
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);
2016-05-05 08:31:55 +02:00
2016-03-20 03:15:20 +01:00
let x = - Math.max(- 1023, Math.min(1023, Math.floor(ax * 1023)));
2017-02-06 23:41:24 +01:00
let y = - Math.max(- 1023, Math.min(1023, Math.floor(ay * 1023)));
2016-05-05 08:31:55 +02:00
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);
2016-03-11 01:24:11 +01:00
this.updateTilt();
}, false);
2016-04-11 19:58:09 +02:00
this.element.addEventListener(pointerEvents.leave, (ev: MouseEvent) => {
2016-08-30 21:42:30 +02:00
let state = this.board;
if (!state.accelerometerState.accelerometer.isActive) return;
2016-05-05 08:31:55 +02:00
2016-03-30 06:14:27 +02:00
if (!tiltDecayer) {
tiltDecayer = setInterval(() => {
let accx = state.accelerometerState.accelerometer.getX(MicroBitCoordinateSystem.RAW);
2016-03-30 06:14:27 +02:00
accx = Math.floor(Math.abs(accx) * 0.85) * (accx > 0 ? 1 : -1);
let accy = state.accelerometerState.accelerometer.getY(MicroBitCoordinateSystem.RAW);
2016-03-30 06:14:27 +02:00
accy = Math.floor(Math.abs(accy) * 0.85) * (accy > 0 ? 1 : -1);
2016-05-05 08:31:55 +02:00
let accz = -Math.sqrt(Math.max(0, 1023 * 1023 - accx * accx - accy * accy));
2016-03-30 06:14:27 +02:00
if (Math.abs(accx) <= 24 && Math.abs(accy) <= 24) {
2016-05-05 08:31:55 +02:00
clearInterval(tiltDecayer);
tiltDecayer = 0;
2016-03-30 06:14:27 +02:00
accx = 0;
accy = 0;
2016-05-05 08:31:55 +02:00
accz = -1023;
}
state.accelerometerState.accelerometer.update(accx, accy, accz);
2016-05-05 08:31:55 +02:00
this.updateTilt();
}, 50)
2016-03-30 06:14:27 +02:00
}
2016-03-11 01:24:11 +01:00
}, false);
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
this.pins.forEach((pin, index) => {
2016-08-30 21:42:30 +02:00
if (!this.board.edgeConnectorState.pins[index]) return;
2016-03-11 01:24:11 +01:00
let pt = this.element.createSVGPoint();
2016-05-05 17:57:44 +02:00
svg.buttonEvents(pin,
2016-03-11 01:24:11 +01:00
// move
ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
let pin = state.edgeConnectorState.pins[index];
2016-03-11 01:24:11 +01:00
let svgpin = this.pins[index];
2016-06-04 08:15:51 +02:00
if (pin.mode & PinFlags.Input) {
2016-05-05 17:57:44 +02:00
let cursor = svg.cursorPoint(pt, this.element, ev);
2016-03-11 01:24:11 +01:00
let v = (400 - cursor.y) / 40 * 1023
pin.value = Math.max(0, Math.min(1023, Math.floor(v)));
}
2016-05-05 08:31:55 +02:00
this.updatePin(pin, index);
2016-03-11 01:24:11 +01:00
},
// start
ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
let pin = state.edgeConnectorState.pins[index];
2016-03-11 01:24:11 +01:00
let svgpin = this.pins[index];
2016-05-05 17:57:44 +02:00
svg.addClass(svgpin, "touched");
2016-06-04 08:15:51 +02:00
if (pin.mode & PinFlags.Input) {
2016-05-05 17:57:44 +02:00
let cursor = svg.cursorPoint(pt, this.element, ev);
2016-03-11 01:24:11 +01:00
let v = (400 - cursor.y) / 40 * 1023
pin.value = Math.max(0, Math.min(1023, Math.floor(v)));
}
2016-05-05 08:31:55 +02:00
this.updatePin(pin, index);
2016-03-11 01:24:11 +01:00
},
// stop
(ev: MouseEvent) => {
2016-08-30 21:42:30 +02:00
let state = this.board;
let pin = state.edgeConnectorState.pins[index];
2016-03-11 01:24:11 +01:00
let svgpin = this.pins[index];
2016-05-05 17:57:44 +02:00
svg.removeClass(svgpin, "touched");
2016-03-11 01:24:11 +01:00
this.updatePin(pin, index);
return false;
2016-05-05 08:31:55 +02:00
});
2016-03-11 01:24:11 +01:00
})
2016-05-05 08:31:55 +02:00
this.pins.slice(0, 3).forEach((btn, index) => {
2016-04-11 19:58:09 +02:00
btn.addEventListener(pointerEvents.down, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
state.edgeConnectorState.pins[index].touched = true;
this.updatePin(state.edgeConnectorState.pins[index], index);
2016-03-23 23:09:48 +01:00
})
2016-04-11 19:58:09 +02:00
btn.addEventListener(pointerEvents.leave, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
state.edgeConnectorState.pins[index].touched = false;
this.updatePin(state.edgeConnectorState.pins[index], index);
2016-03-23 23:09:48 +01:00
})
2016-04-11 19:58:09 +02:00
btn.addEventListener(pointerEvents.up, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
state.edgeConnectorState.pins[index].touched = false;
this.updatePin(state.edgeConnectorState.pins[index], index);
2016-08-30 21:42:30 +02:00
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);
2016-05-05 08:31:55 +02:00
})
2016-03-23 23:09:48 +01:00
})
2016-08-30 21:42:30 +02:00
let bpState = this.board.buttonPairState;
let stateButtons = [bpState.aBtn, bpState.bBtn, bpState.abBtn];
2016-05-05 08:31:55 +02:00
this.buttonsOuter.slice(0, 2).forEach((btn, index) => {
2016-04-11 19:58:09 +02:00
btn.addEventListener(pointerEvents.down, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
stateButtons[index].pressed = true;
2016-05-05 17:57:44 +02:00
svg.fill(this.buttons[index], this.props.theme.buttonDown);
2016-03-11 01:24:11 +01:00
})
2016-04-11 19:58:09 +02:00
btn.addEventListener(pointerEvents.leave, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
stateButtons[index].pressed = false;
2016-10-13 07:44:05 +02:00
svg.fill(this.buttons[index], this.props.theme.buttonUps[index]);
2016-03-18 21:55:07 +01:00
})
2016-04-11 19:58:09 +02:00
btn.addEventListener(pointerEvents.up, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
stateButtons[index].pressed = false;
2016-10-13 07:44:05 +02:00
svg.fill(this.buttons[index], this.props.theme.buttonUps[index]);
2016-08-30 21:42:30 +02:00
this.board.bus.queue(stateButtons[index].id, DAL.MICROBIT_BUTTON_EVT_UP);
this.board.bus.queue(stateButtons[index].id, DAL.MICROBIT_BUTTON_EVT_CLICK);
2016-03-11 01:24:11 +01:00
})
})
2016-04-11 19:58:09 +02:00
this.buttonsOuter[2].addEventListener(pointerEvents.down, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
stateButtons[0].pressed = true;
stateButtons[1].pressed = true;
stateButtons[2].pressed = true;
2016-05-05 17:57:44 +02:00
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);
2016-05-05 08:31:55 +02:00
})
2016-04-11 19:58:09 +02:00
this.buttonsOuter[2].addEventListener(pointerEvents.leave, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
stateButtons[0].pressed = false;
stateButtons[1].pressed = false;
stateButtons[2].pressed = false;
2016-10-13 07:44:05 +02:00
svg.fill(this.buttons[0], this.props.theme.buttonUps[0]);
svg.fill(this.buttons[1], this.props.theme.buttonUps[1]);
2016-05-05 17:57:44 +02:00
svg.fill(this.buttons[2], this.props.theme.virtualButtonUp);
2016-03-18 21:55:07 +01:00
})
2016-04-11 19:58:09 +02:00
this.buttonsOuter[2].addEventListener(pointerEvents.up, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
stateButtons[0].pressed = false;
stateButtons[1].pressed = false;
stateButtons[2].pressed = false;
2016-10-13 07:44:05 +02:00
svg.fill(this.buttons[0], this.props.theme.buttonUps[0]);
svg.fill(this.buttons[1], this.props.theme.buttonUps[1]);
2016-05-05 17:57:44 +02:00
svg.fill(this.buttons[2], this.props.theme.virtualButtonUp);
2016-05-05 08:31:55 +02:00
2016-08-30 21:42:30 +02:00
this.board.bus.queue(stateButtons[2].id, DAL.MICROBIT_BUTTON_EVT_UP);
this.board.bus.queue(stateButtons[2].id, DAL.MICROBIT_BUTTON_EVT_CLICK);
2016-05-05 08:31:55 +02:00
})
2016-03-11 01:24:11 +01:00
}
}
}