diff --git a/flatland/utils/graphics_pil.py b/flatland/utils/graphics_pil.py index 6098f434b46bf96648136aa0b6060b8881629be1..6a8f17f9f73c10ad6d33f51fcbea173ed1a455fc 100644 --- a/flatland/utils/graphics_pil.py +++ b/flatland/utils/graphics_pil.py @@ -73,6 +73,11 @@ class PILGL(GraphicsLayer): "#64dd17#aeea00#ffd600#ffab00#ff6d00#ff3d00#5d4037#455a64" self.ltAgentColors = [self.rgb_s2i(sColor) for sColor in sColors.split("#")] + permute = np.random.permutation(len(self.ltAgentColors)) + tmp = [] + for p in permute: + tmp.append(self.ltAgentColors[p]) + self.ltAgentColors = tmp self.nAgentColors = len(self.ltAgentColors) self.window_root = None @@ -373,6 +378,11 @@ class PILSVG(PILGL): dPilTargetFiles = self.loadSVGs(dTargetFiles, rotate=False, agent_colors=self.ltAgentColors, backgroundImage="Background_rail.svg", whitefilter="Background_white_filter.svg") + + # Load station and recolorize them + station = self.pilFromSvgFile("svg", "Bahnhof_#d50000_target.svg") + self.ltStationColors = self.recolorImage(station, [0, 0, 0], self.ltAgentColors, False) + # Merge them with the regular rails. # https://stackoverflow.com/questions/38987/how-to-merge-two-dictionaries-in-a-single-expression self.dPilRail = {**dPilRailFiles, **dPilTargetFiles} @@ -429,49 +439,48 @@ class PILSVG(PILGL): return dPil def setRailAt(self, row, col, binTrans, iTarget=None, isSelected=False): - if iTarget is None: - if binTrans in self.dPilRail: - pilTrack = self.dPilRail[binTrans] - - if binTrans == 0: - if self.background_grid[col][row] < 4: - a = int(self.background_grid[col][row]) - a = a % len(self.dBuildings) - if (col + row) % 10 > 7: - pilTrack = self.dScenery[0] - else: - if (col + row + col * row) % 3 == 0: - a = (a + (col + row + col * row)) % len(self.dBuildings) - pilTrack = self.dBuildings[a] - elif (self.background_grid[col][row] > 4) or ((col ** 3 + row ** 2 + col * row) % 10 == 0): - a = int(self.background_grid[col][row]) - 4 - a = (a + (col + row + col * row + col ** 3 + row ** 4)) % len(self.dScenery) - if (col + row + col * row) % 10 > 2: - a = 0 - pilTrack = self.dScenery[a] - - self.drawImageRC(pilTrack, (row, col)) - else: - print("Illegal rail:", row, col, format(binTrans, "#018b")[2:], binTrans) + if binTrans in self.dPilRail: + pilTrack = self.dPilRail[binTrans] + if iTarget is not None: + pilTrack = Image.alpha_composite(pilTrack, self.ltStationColors[iTarget % len(self.ltStationColors)]) + + if binTrans == 0: + if self.background_grid[col][row] < 4: + a = int(self.background_grid[col][row]) + a = a % len(self.dBuildings) + if (col + row) % 10 > 7: + pilTrack = self.dScenery[0] + else: + if (col + row + col * row) % 3 == 0: + a = (a + (col + row + col * row)) % len(self.dBuildings) + pilTrack = self.dBuildings[a] + elif (self.background_grid[col][row] > 4) or ((col ** 3 + row ** 2 + col * row) % 10 == 0): + a = int(self.background_grid[col][row]) - 4 + a = (a + (col + row + col * row + col ** 3 + row ** 4)) % len(self.dScenery) + if (col + row + col * row) % 10 > 2: + a = 0 + pilTrack = self.dScenery[a] + + self.drawImageRC(pilTrack, (row, col)) else: - if (binTrans, iTarget) in self.dPilRail: - pilTrack = self.dPilRail[(binTrans, iTarget)] - self.drawImageRC(pilTrack, (row, col)) - else: - print("Illegal target rail:", row, col, format(binTrans, "#018b")[2:], (binTrans, iTarget)) + print("Illegal rail:", row, col, format(binTrans, "#018b")[2:], binTrans) + if iTarget is not None: if isSelected: svgBG = self.pilFromSvgFile("svg", "Selected_Target.svg") self.clear_layer(3, 0) self.drawImageRC(svgBG, (row, col), layer=3) - def recolorImage(self, pil, a3BaseColor, ltColors): + def recolorImage(self, pil, a3BaseColor, ltColors, invert=False): rgbaImg = array(pil) lPils = [] for iColor, tnColor in enumerate(ltColors): # find the pixels which match the base paint color - xy_color_mask = np.all(rgbaImg[:, :, 0:3] - a3BaseColor == 0, axis=2) + if invert: + xy_color_mask = np.all(rgbaImg[:, :, 0:3] - a3BaseColor != 0, axis=2) + else: + xy_color_mask = np.all(rgbaImg[:, :, 0:3] - a3BaseColor == 0, axis=2) rgbaImg2 = np.copy(rgbaImg) # Repaint the base color with the new color diff --git a/notebooks/Scene_Editor.ipynb b/notebooks/Scene_Editor.ipynb index 9ed6bafd3bd21763eb26ffe383cd356c1c1121b6..2877d19d8325dc5baad0344026c632582b6ef6f9 100644 --- a/notebooks/Scene_Editor.ipynb +++ b/notebooks/Scene_Editor.ipynb @@ -9,9 +9,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "<style>.container { width:95% !important; }</style>" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "from IPython.core.display import display, HTML\n", "display(HTML(\"<style>.container { width:95% !important; }</style>\"))" @@ -19,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -49,11 +62,26 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "scrolled": false }, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d0b362c4de2849fe93f505143d04b243", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(Canvas(), VBox(children=(Text(value='temp.pkl', description='Filename'), Button(description='Re…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "mvc.view.display()" ] diff --git a/svg/Bahnhof_#d50000_target.svg b/svg/Bahnhof_#d50000_target.svg new file mode 100644 index 0000000000000000000000000000000000000000..a1dd4604bbe46279381438574b9e2618e97ea124 --- /dev/null +++ b/svg/Bahnhof_#d50000_target.svg @@ -0,0 +1,373 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Ebene_1" + x="0px" + y="0px" + viewBox="0 0 240 240" + style="enable-background:new 0 0 240 240;" + xml:space="preserve" + sodipodi:docname="Bahnhof_#d50000_target.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><metadata + id="metadata165"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title></dc:title></cc:Work></rdf:RDF></metadata> + <defs + id="defs163"/> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1017" + id="namedview161" + showgrid="false" + inkscape:zoom="3.5" + inkscape:cx="120" + inkscape:cy="111.85562" + inkscape:window-x="-8" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:current-layer="Ebene_1"/> + <style + type="text/css" + id="style2"> + .st0{fill:#D50000;} + .st1{fill:#E20613;} + .st2{fill:#FFFFFF;} + .st3{fill:#585858;} + .st4{fill:#1D1D1B;} + .st5{fill:#858B8A;} + .st6{fill:none;} +</style> + <g + id="g16"> + <path + class="st0" + d="M146.27,104.75c1.07,0,1.94,0.87,1.94,1.94s-0.87,1.94-1.94,1.94c-0.42,0-0.8-0.13-1.12-0.36v7.88h25.42v-4.08 v-7.44H69.53v11.52h25.08v-7.88c-0.32,0.22-0.7,0.36-1.12,0.36c-1.07,0-1.94-0.87-1.94-1.94s0.87-1.94,1.94-1.94h1.12h2.33h0.7 h1.63h1.12c1.07,0,1.94,0.87,1.94,1.94s-0.87,1.94-1.94,1.94c-0.42,0-0.8-0.13-1.12-0.36v7.88h6.9v-0.64h16.75h10.9v0.64h6.68 v-7.88c-0.32,0.22-0.7,0.36-1.12,0.36c-1.07,0-1.94-0.87-1.94-1.94s0.87-1.94,1.94-1.94h1.12h2.33h0.7h1.63H146.27z" + id="path4"/> + <path + class="st0" + d="M89.76,124.67v12.52v1.38H76.18v-1.38v-12.52v-0.68h-6.66H20.73v65.53h48.79H92.1v-2.29h0.98v-1.05h1.52 v-33.72c-0.32,0.22-0.7,0.36-1.12,0.36c-1.07,0-1.94-0.87-1.94-1.94c0-1.07,0.87-1.94,1.94-1.94h-3.15v-2.71v-2.71h1.76v-0.47h0.98 v-1.05h1.52v-18h-4.85V124.67z M42.78,166.43v1.38v12.52v1.38H29.2v-1.38v-12.52v-1.38v-7.09h8.22h5.35V166.43z M42.78,135.58v1.38 v12.52v1.38H29.2v-1.38v-12.52v-1.38v-7.09h8.22h5.35V135.58z M62.28,166.43v1.38v12.52v1.38H48.71v-1.38v-12.52v-1.38v-7.09h8.22 h5.35V166.43z M62.28,135.58v1.38v12.52v1.38H48.71v-1.38v-12.52v-1.38v-7.09h8.22h5.35V135.58z M89.76,154.13v1.38v12.52v1.38 H76.18v-1.38v-12.52v-1.38v-7.09h8.22h5.35V154.13z" + id="path6"/> + <polygon + class="st0" + points="133.81,136.5 133.81,137.88 106.17,137.88 106.17,136.5 106.17,123.99 99.27,123.99 99.27,141.99 100.79,141.99 100.79,143.04 101.78,143.04 101.78,143.51 137.98,143.51 137.98,143.04 138.97,143.04 138.97,141.99 140.49,141.99 140.49,123.99 133.81,123.99 " + id="polygon8"/> + <path + class="st0" + d="M170.57,123.99h-6.66v0.68v12.52v1.38h-13.58v-1.38v-12.52v-0.68h-5.18v18h1.52v1.05h0.98v0.47h1.76v2.71v2.71 h-3.15c1.07,0,1.94,0.87,1.94,1.94c0,1.07-0.87,1.94-1.94,1.94c-0.42,0-0.8-0.13-1.12-0.36v33.72h1.52v1.05h0.98v2.29h22.91h48.79 v-65.53H170.57z M163.91,154.13v1.38v12.52v1.38h-13.58v-1.38v-12.52v-1.38v-7.09h8.22h5.35V154.13z M191.58,166.43v1.38v12.52 v1.38h-13.58v-1.38v-12.52v-1.38v-7.09h8.22h5.35V166.43z M191.58,135.58v1.38v12.52v1.38h-13.58v-1.38v-12.52v-1.38v-7.09h8.22 h5.35V135.58z M211.09,166.43v1.38v12.52v1.38h-13.58v-1.38v-12.52v-1.38v-7.09h8.22h5.35V166.43z M211.09,135.58v1.38v12.52v1.38 h-13.58v-1.38v-12.52v-1.38v-7.09h8.22h5.35V135.58z" + id="path10"/> + <path + class="st0" + d="M137.43,150.87c0-1.07,0.87-1.94,1.94-1.94h-38.99c1.07,0,1.94,0.87,1.94,1.94c0,1.07-0.87,1.94-1.94,1.94 c-0.42,0-0.8-0.13-1.12-0.36v33.72h1.52v1.05h0.98v2.29h18.67h17.54v-2.29h0.98v-1.05h1.52v-33.72c-0.32,0.22-0.7,0.36-1.12,0.36 C138.3,152.82,137.43,151.95,137.43,150.87z M135.51,189.46h-0.59h-14.47h-0.59h-15.02h-0.04h-0.55v-32.71h0.55h0.04h15.02h0.59 h14.47h0.59V189.46z" + id="path12"/> + <path + class="st0" + d="M176.97,96.4L120.29,62L64.55,96.38v3.45h112.42V96.4z M120.76,93.18c-5.68,0-10.28-4.6-10.28-10.28 c0-5.68,4.6-10.28,10.28-10.28c5.68,0,10.28,4.6,10.28,10.28C131.04,88.58,126.44,93.18,120.76,93.18z" + id="path14"/> +</g> + <path + class="st1" + d="M135.6,34.49l-14.76,3.47v11.26l14.76-3.47V34.49z M132.01,42.11l-2.69,0.6v2.72l-2.19,0.63V43.2l-2.69,0.6 V41.6l2.69-0.6v-2.72l2.19-0.63v2.86l2.69-0.6V42.11z" + id="path18"/> + <g + id="g76"> + <polygon + class="st2" + points="76.18,124.67 76.18,137.19 79.06,137.19 89.76,137.19 89.76,124.67 82.25,124.67 " + id="polygon20"/> + <polygon + class="st2" + points="76.18,116.2 76.18,123.29 82.6,123.29 89.76,123.29 89.76,116.2 84.41,116.2 " + id="polygon22"/> + <polygon + class="st2" + points="150.33,124.67 150.33,137.19 153.2,137.19 163.91,137.19 163.91,124.67 156.4,124.67 " + id="polygon24"/> + <polygon + class="st2" + points="150.33,116.2 150.33,123.29 156.75,123.29 163.91,123.29 163.91,116.2 158.56,116.2 " + id="polygon26"/> + <polygon + class="st2" + points="76.18,147.04 76.18,154.13 82.6,154.13 89.76,154.13 89.76,147.04 84.41,147.04 " + id="polygon28"/> + <polygon + class="st2" + points="76.18,155.51 76.18,168.04 79.06,168.04 89.76,168.04 89.76,155.51 82.25,155.51 " + id="polygon30"/> + <polygon + class="st2" + points="150.33,155.51 150.33,168.04 153.2,168.04 163.91,168.04 163.91,155.51 156.4,155.51 " + id="polygon32"/> + <polygon + class="st2" + points="150.33,147.04 150.33,154.13 156.75,154.13 163.91,154.13 163.91,147.04 158.56,147.04 " + id="polygon34"/> + <path + class="st2" + d="M120.45,158.37v6.38v22.81h14.47v-29.18h-11.87H120.45z M123.78,173.75v1.09h-1.86v-1.09H123.78z" + id="path36"/> + <path + class="st2" + d="M104.84,187.55h6.33h8.69V166.2v-7.83h-15.02V187.55z M116.53,173.75h0.26h1.6v1.09h-1.87v-0.44V173.75z" + id="path38"/> + <polygon + class="st2" + points="48.71,128.5 48.71,135.58 55.12,135.58 62.28,135.58 62.28,128.5 56.93,128.5 " + id="polygon40"/> + <polygon + class="st2" + points="48.71,136.97 48.71,149.49 51.58,149.49 62.28,149.49 62.28,136.97 54.77,136.97 " + id="polygon42"/> + <polygon + class="st2" + points="48.71,167.81 48.71,180.33 51.58,180.33 62.28,180.33 62.28,167.81 54.77,167.81 " + id="polygon44"/> + <polygon + class="st2" + points="48.71,159.34 48.71,166.43 55.12,166.43 62.28,166.43 62.28,159.34 56.93,159.34 " + id="polygon46"/> + <polygon + class="st2" + points="29.2,136.97 29.2,149.49 32.07,149.49 42.78,149.49 42.78,136.97 35.26,136.97 " + id="polygon48"/> + <polygon + class="st2" + points="29.2,128.5 29.2,135.58 35.62,135.58 42.78,135.58 42.78,128.5 37.42,128.5 " + id="polygon50"/> + <polygon + class="st2" + points="29.2,159.34 29.2,166.43 35.62,166.43 42.78,166.43 42.78,159.34 37.42,159.34 " + id="polygon52"/> + <polygon + class="st2" + points="29.2,167.81 29.2,180.33 32.07,180.33 42.78,180.33 42.78,167.81 35.26,167.81 " + id="polygon54"/> + <polygon + class="st2" + points="197.51,136.97 197.51,149.49 200.38,149.49 211.09,149.49 211.09,136.97 203.58,136.97 " + id="polygon56"/> + <polygon + class="st2" + points="197.51,159.34 197.51,166.43 203.93,166.43 211.09,166.43 211.09,159.34 205.74,159.34 " + id="polygon58"/> + <polygon + class="st2" + points="197.51,167.81 197.51,180.33 200.38,180.33 211.09,180.33 211.09,167.81 203.58,167.81 " + id="polygon60"/> + <polygon + class="st2" + points="178.01,136.97 178.01,149.49 180.88,149.49 191.58,149.49 191.58,136.97 184.07,136.97 " + id="polygon62"/> + <polygon + class="st2" + points="178.01,128.5 178.01,135.58 184.42,135.58 191.58,135.58 191.58,128.5 186.23,128.5 " + id="polygon64"/> + <polygon + class="st2" + points="178.01,159.34 178.01,166.43 184.42,166.43 191.58,166.43 191.58,159.34 186.23,159.34 " + id="polygon66"/> + <polygon + class="st2" + points="178.01,167.81 178.01,180.33 180.88,180.33 191.58,180.33 191.58,167.81 184.07,167.81 " + id="polygon68"/> + <polygon + class="st2" + points="133.81,122.59 133.81,116.15 133.81,115.51 122.91,115.51 106.17,115.51 106.17,116.15 106.17,122.59 119.23,122.59 " + id="polygon70"/> + <polygon + class="st2" + points="133.81,136.5 133.81,123.99 133.81,123.98 118.52,123.98 106.17,123.98 106.17,123.99 106.17,136.5 112.02,136.5 " + id="polygon72"/> + <polygon + class="st2" + points="205.74,128.5 197.51,128.5 197.51,135.58 203.93,135.58 211.09,135.58 211.09,128.5 " + id="polygon74"/> +</g> + <g + id="g136"> + <polygon + class="st3" + points="133.81,136.5 112.02,136.5 106.17,136.5 106.17,137.88 133.81,137.88 " + id="polygon78"/> + <polygon + class="st3" + points="76.18,137.19 76.18,138.58 89.76,138.58 89.76,137.19 79.06,137.19 " + id="polygon80"/> + <polygon + class="st3" + points="150.33,137.19 150.33,138.58 163.91,138.58 163.91,137.19 153.2,137.19 " + id="polygon82"/> + <polygon + class="st3" + points="76.18,168.04 76.18,169.42 89.76,169.42 89.76,168.04 79.06,168.04 " + id="polygon84"/> + <polygon + class="st3" + points="150.33,168.04 150.33,169.42 163.91,169.42 163.91,168.04 153.2,168.04 " + id="polygon86"/> + <path + class="st3" + d="M120.45,156.75h-0.59h-15.02h-0.04h-0.55v32.71h0.55h0.04h15.02h0.59h14.47h0.59v-32.71h-0.59H120.45z M119.86,166.2v21.35h-8.69h-6.33v-29.18h15.02V166.2z M134.92,187.55h-14.47v-22.81v-6.38h2.6h11.87V187.55z" + id="path88"/> + <polygon + class="st3" + points="118.39,173.75 116.79,173.75 116.53,173.75 116.53,174.39 116.53,174.84 118.39,174.84 " + id="polygon90"/> + <rect + x="121.92" + y="173.75" + class="st3" + width="1.86" + height="1.09" + id="rect92"/> + <polygon + class="st3" + points="178.01,180.33 178.01,181.72 191.58,181.72 191.58,180.33 180.88,180.33 " + id="polygon94"/> + <polygon + class="st3" + points="48.71,149.49 48.71,150.87 62.28,150.87 62.28,149.49 51.58,149.49 " + id="polygon96"/> + <polygon + class="st3" + points="48.71,180.33 48.71,181.72 62.28,181.72 62.28,180.33 51.58,180.33 " + id="polygon98"/> + <polygon + class="st3" + points="29.2,149.49 29.2,150.87 42.78,150.87 42.78,149.49 32.07,149.49 " + id="polygon100"/> + <polygon + class="st3" + points="29.2,180.33 29.2,181.72 42.78,181.72 42.78,180.33 32.07,180.33 " + id="polygon102"/> + <polygon + class="st3" + points="197.51,149.49 197.51,150.87 211.09,150.87 211.09,149.49 200.38,149.49 " + id="polygon104"/> + <polygon + class="st3" + points="197.51,180.33 197.51,181.72 211.09,181.72 211.09,180.33 200.38,180.33 " + id="polygon106"/> + <polygon + class="st3" + points="178.01,149.49 178.01,150.87 191.58,150.87 191.58,149.49 180.88,149.49 " + id="polygon108"/> + <polygon + class="st3" + points="133.81,123.98 133.81,122.59 119.23,122.59 106.17,122.59 106.17,123.98 118.52,123.98 " + id="polygon110"/> + <polygon + class="st3" + points="76.18,123.29 76.18,123.99 76.18,124.67 82.25,124.67 89.76,124.67 89.76,123.99 89.76,123.29 82.6,123.29 " + id="polygon112"/> + <polygon + class="st3" + points="150.33,123.29 150.33,123.99 150.33,124.67 156.4,124.67 163.91,124.67 163.91,123.99 163.91,123.29 156.75,123.29 " + id="polygon114"/> + <polygon + class="st3" + points="76.18,154.13 76.18,155.51 82.25,155.51 89.76,155.51 89.76,154.13 82.6,154.13 " + id="polygon116"/> + <polygon + class="st3" + points="150.33,154.13 150.33,155.51 156.4,155.51 163.91,155.51 163.91,154.13 156.75,154.13 " + id="polygon118"/> + <polygon + class="st3" + points="178.01,166.43 178.01,167.81 184.07,167.81 191.58,167.81 191.58,166.43 184.42,166.43 " + id="polygon120"/> + <polygon + class="st3" + points="48.71,135.58 48.71,136.97 54.77,136.97 62.28,136.97 62.28,135.58 55.12,135.58 " + id="polygon122"/> + <polygon + class="st3" + points="48.71,166.43 48.71,167.81 54.77,167.81 62.28,167.81 62.28,166.43 55.12,166.43 " + id="polygon124"/> + <polygon + class="st3" + points="29.2,135.58 29.2,136.97 35.26,136.97 42.78,136.97 42.78,135.58 35.62,135.58 " + id="polygon126"/> + <polygon + class="st3" + points="29.2,166.43 29.2,167.81 35.26,167.81 42.78,167.81 42.78,166.43 35.62,166.43 " + id="polygon128"/> + <polygon + class="st3" + points="203.93,135.58 197.51,135.58 197.51,136.97 203.58,136.97 211.09,136.97 211.09,135.58 " + id="polygon130"/> + <polygon + class="st3" + points="197.51,166.43 197.51,167.81 203.58,167.81 211.09,167.81 211.09,166.43 203.93,166.43 " + id="polygon132"/> + <polygon + class="st3" + points="178.01,135.58 178.01,136.97 184.07,136.97 191.58,136.97 191.58,135.58 184.42,135.58 " + id="polygon134"/> +</g> + <path + class="st2" + d="M120.76,72.62c-5.68,0-10.28,4.6-10.28,10.28c0,5.68,4.6,10.28,10.28,10.28c5.68,0,10.28-4.6,10.28-10.28 C131.04,77.22,126.44,72.62,120.76,72.62z M120.76,92.04c-5.04,0-9.13-4.1-9.13-9.13c0-5.04,4.1-9.13,9.13-9.13 c5.04,0,9.13,4.1,9.13,9.13C129.89,87.94,125.8,92.04,120.76,92.04z" + id="path138"/> + <path + class="st2" + d="M120.76,74.82c-4.46,0-8.09,3.63-8.09,8.09c0,4.46,3.63,8.09,8.09,8.09c4.46,0,8.09-3.63,8.09-8.09 C128.85,78.44,125.22,74.82,120.76,74.82z M126.97,82.9c0,0.29-0.23,0.52-0.52,0.52h-5.69c-0.29,0-0.52-0.23-0.52-0.52v-6.2 c0-0.29,0.23-0.52,0.52-0.52c0.29,0,0.52,0.23,0.52,0.52v5.67h5.17C126.74,82.38,126.97,82.61,126.97,82.9z" + id="path140"/> + <g + id="g146"> + <path + class="st4" + d="M120.76,73.77c-5.04,0-9.13,4.1-9.13,9.13c0,5.04,4.1,9.13,9.13,9.13c5.04,0,9.13-4.1,9.13-9.13 C129.89,77.87,125.8,73.77,120.76,73.77z M120.76,90.99c-4.46,0-8.09-3.63-8.09-8.09c0-4.46,3.63-8.09,8.09-8.09 c4.46,0,8.09,3.63,8.09,8.09C128.85,87.36,125.22,90.99,120.76,90.99z" + id="path142"/> + <path + class="st4" + d="M126.45,82.38h-5.17V76.7c0-0.29-0.23-0.52-0.52-0.52c-0.29,0-0.52,0.23-0.52,0.52v6.2 c0,0.29,0.23,0.52,0.52,0.52h5.69c0.29,0,0.52-0.23,0.52-0.52C126.97,82.61,126.74,82.38,126.45,82.38z" + id="path144"/> +</g> + <g + id="g152"> + <path + class="st5" + d="M170.57,104.96h9.66V93.08l-59.4-36.22v-18.9h-1.51v19.17L61.3,93.08v11.87h8.23H170.57z M64.55,96.38 L120.29,62l56.68,34.39v3.44H64.55V96.38z" + id="path148"/> + <path + class="st5" + d="M163.91,123.99h6.66h48.79h2.54v-7.84h-51.33h-25.42v-7.88c0.32,0.22,0.7,0.36,1.12,0.36 c1.07,0,1.94-0.87,1.94-1.94s-0.87-1.94-1.94-1.94h-1.12h-1.63h-0.7h-2.33h-1.12c-1.07,0-1.94,0.87-1.94,1.94s0.87,1.94,1.94,1.94 c0.42,0,0.8-0.13,1.12-0.36v7.88h-6.68v6.45v1.38v0.01h6.68v18h-1.52v1.05h-0.98v0.47h-36.21v-0.47h-0.98v-1.05h-1.52v-18h6.9 v-0.01v-1.38v-6.45h-6.9v-7.88c0.32,0.22,0.7,0.36,1.12,0.36c1.07,0,1.94-0.87,1.94-1.94s-0.87-1.94-1.94-1.94h-1.12h-1.63h-0.7 h-2.33h-1.12c-1.07,0-1.94,0.87-1.94,1.94s0.87,1.94,1.94,1.94c0.42,0,0.8-0.13,1.12-0.36v7.88H69.53H18.19v7.84h2.54h48.79h6.66 v-0.7v-7.09h8.22h5.35v7.09v0.7h4.85v18h-1.52v1.05H92.1v0.47h-1.76v2.71v2.71h3.15c-1.07,0-1.94,0.87-1.94,1.94 c0,1.07,0.87,1.94,1.94,1.94c0.42,0,0.8-0.13,1.12-0.36v33.72h-1.52v1.05H92.1v2.29H69.53H20.73h-2.54v3.99H221.9v-3.99h-2.54 h-48.79h-22.91v-2.29h-0.98v-1.05h-1.52v-33.72c0.32,0.22,0.7,0.36,1.12,0.36c1.07,0,1.94-0.87,1.94-1.94 c0-1.07-0.87-1.94-1.94-1.94h3.15v-2.71v-2.71h-1.76v-0.47h-0.98v-1.05h-1.52v-18h5.18v-0.7v-7.09h8.22h5.35v7.09V123.99z M101.78,189.52v-2.29h-0.98v-1.05h-1.52v-33.72c0.32,0.22,0.7,0.36,1.12,0.36c1.07,0,1.94-0.87,1.94-1.94 c0-1.07-0.87-1.94-1.94-1.94h38.99c-1.07,0-1.94,0.87-1.94,1.94c0,1.07,0.87,1.94,1.94,1.94c0.42,0,0.8-0.13,1.12-0.36v33.72h-1.52 v1.05h-0.98v2.29h-17.54H101.78z" + id="path150"/> +</g> + <polygon + class="st2" + points="129.32,37.65 127.12,38.28 127.12,41 124.43,41.6 124.43,43.8 127.12,43.2 127.12,46.06 129.32,45.43 129.32,42.71 132.01,42.11 132.01,39.92 129.32,40.52 " + id="polygon154"/> + <g + id="g158"> + <rect + class="st6" + width="240" + height="240" + id="rect156"/> +</g> + <rect + style="fill:#000000;fill-opacity:1" + id="rect972" + width="197.95059" + height="37.642857" + x="21.047144" + y="197.5" + ry="18.535713"/></svg>