<snapdata remixID="14933313"><project name="! BabylonJS Blocks" app="Snap! 11.0.8, https://snap.berkeley.edu" version="2"><notes>A block library for blocks that work with Babylon.js!&#xD;&#xD;The library has been used by BeetleBlocks and so it doesn&apos;t require any external sources. However, all of the rest of the project requires JavaScript to run.&#xD;&#xD;Inside is a demo that creates a rectangle inside of a glowing cube, and a couple of (unfinished) blocks that will help you get started.&#xD;&#xD;To help contribute, check the forum page:&#xD;https://forum.snap.berkeley.edu/t/20809</notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAADqUlEQVR4AeySPW4UQRhEPy9aESMkiAg4BEKERJyAU3EMAkRGwkGQczICUiQCBGLstTWBg/nZ6f2mq7ueJdvSznZP1at3GPiBQD0CHw7BDwQqEkDAivB5dQQCYkFVAghYFT8vR0AcqErAV8Cq2Hn5SAABRxL8r0IAAatg56UjAQQcSfC/CgEErIKdl44EEHAkwf8qBBCwCvaqL5V6OQJKzeEXBgH9NpdqjIBSc/iFQUC/zaUaI6DUHH5hENBvc6nGuwoo1ZwwEgQQUGIG3xAI6Lu9RHMElJjBNwQC+m4v0RwBJWbwDYGAu2zPS6YIIOAUGT7fhQAC7oKZl0wRQMApMny+CwEE3AUzL5kigIBTZPh8FwIIuAtm35csNUfAJUI8TyWAgKl4uXyJAAIuEeJ5KgEETMXL5UsEEHCJEM9TCSBgKl4uXyLQr4BLzXkuQQABJWbwDYGAvttLNEdAiRl8QyCg7/YSzRFQYgbfEAjY3/ZNNULApubqLywC9rdpU40QsKm5+guLgP1t2lQjBGxqrv7CImB/mzbV6KICNtWcsBIEEFBiBt8QCOi7vURzBJSYwTcEAvpuL9EcASVm8A2BgBfZnku2EkDAjeSGvxG/rof483PYeAPHTgQQ8ERhw+/v7//jy8evcf3pRwz/NlzAkTsCCHiH4fw/j58d4u2rd/HyzfO4enT+eU7cE0DAew5n/z0+iXjx/hhPXx8jroKfjQQQcCM4jl2GAAJehqPtLaXFEbCUIOeLCCBgET4OlxJAwFKCnC8igIBF+DhcSgABSwlyvogAAhbh43ApgXYFLG3OeQkCCCgxg28IBPTdXqI5AkrM4BsCAX23l2iOgBIz+IZAwPa27yoxAnY1Z3tlELC9zbpKjIBdzdleGQRsb7OuEiNgV3O2VwYB29usq8RnCdhVc8pIEEBAiRl8QyCg7/YSzRFQYgbfEAjou71EcwSUmME3BAKu2p4vZRFAwCyy3LuKAAKuwsSXsgggYBZZ7l1FAAFXYeJLWQQQMIss964igICrMPl+Kbs5AmYT5v5ZAgg4i4eH2QQQMJsw988SQMBZPDzMJoCA2YS5f5YAAs7i4WE2AV0Bs5tzvwQBBJSYwTcEAvpuL9EcASVm8A2BgL7bSzRHQIkZfEMgoN72VokQ0GpuvbIIqLeJVSIEtJpbrywC6m1ilQgBrebWK4uAeptYJXogoFVzykoQQECJGXxDIKDv9hLNEVBiBt8QJwE/39bnNwIG+zP4dgMAAP//LFKn2gAAAAZJREFUAwCvDPrjfSAhrAAAAABJRU5ErkJggg==</thumbnail><scenes select="1"><scene name="! BabylonJS Blocks"><notes>A block library for blocks that work with Babylon.js!&#xD;&#xD;The library has been used by BeetleBlocks and so it doesn&apos;t require any external sources. However, all of the rest of the project requires JavaScript to run.&#xD;&#xD;Inside is a demo that creates a rectangle inside of a glowing cube, and a couple of (unfinished) blocks that will help you get started.&#xD;&#xD;To help contribute, check the forum page:&#xD;https://forum.snap.berkeley.edu/t/20809</notes><palette><category name="3D Beetle" color="92,181,255,1"/><category name="Babylon Extensions" color="140,72,153,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="reset" type="command" category="3D Beetle"><header></header><code></code><translations>ca:reinicia&#xD;</translations><inputs></inputs><script><custom-block s="stop extruding"></custom-block><custom-block s="go home"></custom-block><custom-block s="clear scene"></custom-block><custom-block s="set shape offset to %l"><block s="reportNewList"><list><l>0</l><l>0</l></list></block></custom-block><custom-block s="set %s scale to %n"><l>shape</l><l>1</l></custom-block><custom-block s="set %s scale to %n"><l>movement</l><l>1</l></custom-block><block s="doIf"><block s="reportListContainsItem"><block s="reportApplyExtension"><l>var_names(scope)</l><list><l>global</l></list></block><l>bb_stack</l></block><script><block s="doApplyExtension"><l>var_set(name, val)</l><list><l>bb_stack</l><block s="reportNewList"><list></list></block></list></block></script><list></list></block></script></block-definition><block-definition s="clear scene" type="command" category="3D Beetle" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doApplyExtension"><l>bb_clear()</l><list></list></block></script></block-definition><block-definition s="go home" type="command" category="3D Beetle"><header></header><code></code><translations>ca:torna a casa&#xD;</translations><inputs></inputs><script><custom-block s="go to %l"><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l></list></block></custom-block><block s="doApplyExtension"><l>bb_setrot(x, y, z)</l><list><l>0</l><l>0</l><l>0</l></list></block></script></block-definition><block-definition s="move %&apos;n&apos; steps" type="command" category="3D Beetle" space="true"><header></header><code></code><translations>ca:mou-te _ passos&#xD;</translations><inputs><input type="%n">1</input></inputs><script><custom-block s="change relative %s by %n"><l>z</l><block var="n"/></custom-block></script></block-definition><block-definition s="go to %&apos;position&apos;" type="command" category="3D Beetle" space="true"><header></header><code></code><translations>ca:vés a _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="position"/><l><option>list</option></l></block></block><script><block s="doSetVar"><l>position</l><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l></list></block></block></script><list></list></block><block s="doApplyExtension"><l>bb_goto(x, y, z)</l><block var="position"/></block></script></block-definition><block-definition s="set %&apos;which&apos; position to %&apos;what&apos;" type="command" category="3D Beetle"><header></header><code></code><translations>ca:fixa la coordenada _ a _&#xD;</translations><inputs><input type="%s" readonly="true">x<options>x&#xD;y&#xD;z</options></input><input type="%n">3</input></inputs><script><block s="doDeclareVariables"><list><l>mask</l></list></block><block s="doSetVar"><l>mask</l><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportVariadicEquals"><list><l></l><block var="which"/></list></block></autolambda><list></list></block><block s="reportNewList"><list><l>x</l><l>y</l><l>z</l></list></block></block></block><custom-block s="go to %l"><block s="reportVariadicSum"><list><block s="reportDifference"><custom-block s="%s position"><l></l></custom-block><block s="reportVariadicProduct"><list><block var="mask"/><custom-block s="%s position"><l></l></custom-block></list></block></block><block s="reportVariadicProduct"><list><block var="mask"/><block s="reportNewList"><list><block var="what"/><block var="what"/><block var="what"/></list></block></list></block></list></block></custom-block></script></block-definition><block-definition s="change absolute %&apos;which&apos; by %&apos;n&apos;" type="command" category="3D Beetle"><header></header><code></code><translations>ca:augmenta la coordenada _ en _&#xD;</translations><inputs><input type="%s" readonly="true">x<options>x&#xD;y&#xD;z</options></input><input type="%n">2</input></inputs><script><custom-block s="go to %l"><block s="reportVariadicSum"><list><custom-block s="%s position"><l></l></custom-block><block s="reportVariadicProduct"><list><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportVariadicEquals"><list><l></l><block var="which"/></list></block></autolambda><list></list></block><block s="reportNewList"><list><l>x</l><l>y</l><l>z</l></list></block></block><block s="reportNewList"><list><block var="n"/><block var="n"/><block var="n"/></list></block></list></block></list></block></custom-block></script></block-definition><block-definition s="change relative %&apos;which&apos; by %&apos;n&apos;" type="command" category="3D Beetle"><header></header><code></code><translations>ca:mou-te en la _ pròpia _ passos&#xD;</translations><inputs><input type="%s" readonly="true">y<options>x&#xD;y&#xD;z</options></input><input type="%n">2</input></inputs><script><block s="doApplyExtension"><l>bb_move(axis, steps)</l><list><block var="which"/><block var="n"/></list></block></script></block-definition><block-definition s="%&apos;which&apos; position" type="reporter" category="3D Beetle"><header></header><code></code><translations>ca:posició _&#xD;</translations><inputs><input type="%s" readonly="true">x<options>x&#xD;y&#xD;z</options></input></inputs><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="which"/><l></l></list></block><script><block s="doReport"><block s="reportApplyExtension"><l>bb_position()</l><list></list></block></block></script><script><block s="doReport"><block s="reportListItem"><block s="reportListIndex"><block var="which"/><block s="reportNewList"><list><l>x</l><l>y</l><l>z</l></list></block></block><block s="reportApplyExtension"><l>bb_position()</l><list></list></block></block></block></script></block></script></block-definition><block-definition s="rotate %&apos;which&apos; by %&apos;what&apos;" type="command" category="3D Beetle" space="true"><header></header><code></code><translations>ca:gira sobre _ propi en _ graus&#xD;</translations><inputs><input type="%s" readonly="true">z<options>x&#xD;y&#xD;z</options></input><input type="%n">15</input></inputs><script><block s="doDeclareVariables"><list><l>empty</l></list></block><block s="doSetVar"><l>empty</l><l></l></block><block s="doApplyExtension"><l>bb_rotate(x, y, z)</l><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicEquals"><list><l></l><block var="which"/></list></block><block var="what"/><block var="empty"/></block></autolambda><list></list></block><block s="reportNewList"><list><l>x</l><l>y</l><l>z</l></list></block></block></block></script></block-definition><block-definition s="set %&apos;which&apos; rotation to %&apos;what&apos;" type="command" category="3D Beetle"><header></header><code></code><translations>ca:fixa l&apos;angle _ propi a _&#xD;</translations><inputs><input type="%s" readonly="true">z<options>x&#xD;y&#xD;z</options></input><input type="%n">45</input></inputs><script><block s="doDeclareVariables"><list><l>empty</l></list></block><block s="doSetVar"><l>empty</l><l></l></block><block s="doApplyExtension"><l>bb_setrot(x, y, z)</l><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicEquals"><list><l></l><block var="which"/></list></block><block var="what"/><block var="empty"/></block></autolambda><list></list></block><block s="reportNewList"><list><l>x</l><l>y</l><l>z</l></list></block></block></block></script></block-definition><block-definition s="point to %&apos;point&apos;" type="command" category="3D Beetle"><header></header><code></code><translations>ca:apunta cap a _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="point"/><l><option>list</option></l></block></block><script><block s="doSetVar"><l>point</l><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l></list></block></block></script><list></list></block><block s="doApplyExtension"><l>bb_pointto(x, y, z)</l><block var="point"/></block></script></block-definition><block-definition s="%&apos;which&apos; rotation" type="reporter" category="3D Beetle"><header></header><code></code><translations>ca:angle _&#xD;</translations><inputs><input type="%s" readonly="true">z<options>x&#xD;y&#xD;z</options></input></inputs><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="which"/><l></l></list></block><script><block s="doReport"><block s="reportApplyExtension"><l>bb_rotation()</l><list></list></block></block></script><script><block s="doReport"><block s="reportListItem"><block s="reportListIndex"><block var="which"/><block s="reportNewList"><list><l>x</l><l>y</l><l>z</l></list></block></block><block s="reportApplyExtension"><l>bb_rotation()</l><list></list></block></block></block></script></block></script></block-definition><block-definition s="start extruding %&apos;base&apos;" type="command" category="3D Beetle" space="true"><header></header><code></code><translations>ca:comença a extrudir amb _ de base&#xD;</translations><inputs><input type="%s" readonly="true">$_circle<options>circle=$_circle&#xD;triangle=$_triangle&#xD;square=$_square&#xD;semicircle=$_semicircle&#xD;line=$_line&#xD;point=$_point&#xD;sprite positions=$_sprite positions</options></input></inputs><script><block s="doApplyExtension"><l>bb_stopextruding()</l><list></list></block><block s="doIfElse"><block s="reportIsA"><block var="base"/><l><option>list</option></l></block><script><block s="doApplyExtension"><l>bb_setextrusionbase(base)</l><list><block var="base"/></list></block></script><script><block s="doApplyExtension"><l>bb_setextrusionbase(base)</l><list><block s="reportApplyExtension"><l>txt_transform(name, txt)</l><list><l>unselect</l><block var="base"/></list></block></list></block></script></block><block s="doApplyExtension"><l>bb_startextruding()</l><list></list></block></script></block-definition><block-definition s="stop extruding" type="command" category="3D Beetle"><header></header><code></code><translations>ca:deixa d&apos;extrudir&#xD;</translations><inputs></inputs><script><block s="doApplyExtension"><l>bb_stopextruding()</l><list></list></block></script></block-definition><block-definition s="log sprite positions in %&apos;script&apos;" type="command" category="3D Beetle" space="true"><header></header><code></code><translations>ca:enregistra les posicions de la tortuga _&#xD;</translations><inputs><input type="%cs" initial="1"></input></inputs><script><block s="doApplyExtension"><l>bb_logspritepositions(bool, currentPos)</l><list><block s="reportBoolean"><l><bool>true</bool></l></block><block s="getPosition"></block></list></block><block s="doRun"><block var="script"/><list></list></block><block s="doApplyExtension"><l>bb_logspritepositions(bool, currentPos)</l><list><block s="reportBoolean"><l><bool>false</bool></l></block></list></block></script></block-definition><block-definition s="shape points" type="reporter" category="3D Beetle" space="true"><header></header><code></code><translations>ca:punts de la base&#xD;</translations><inputs></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>bb_extrusionbasepoints()</l><list></list></block></block></script></block-definition><block-definition s="set shape offset to %&apos;offset&apos;" type="command" category="3D Beetle" space="true"><header></header><code></code><translations>ca:fixa el desplaçament de la base a _&#xD;</translations><inputs><input type="%l" initial="1"></input></inputs><script><block s="doApplyExtension"><l>bb_setoffset(offset)</l><list><block var="offset"/></list></block></script></block-definition><block-definition s="set %&apos;which&apos; scale to %&apos;n&apos;" type="command" category="3D Beetle"><header></header><code></code><translations>ca:fixa l&apos;escala de _ a _&#xD;</translations><inputs><input type="%s" readonly="true" initial="1">$_shape<options>shape=$_shape&#xD;movement=$_movement</options></input><input type="%n">1</input></inputs><script><block s="doApplyExtension"><l>bb_setscale(scale, which)</l><list><block var="n"/><block s="reportApplyExtension"><l>txt_transform(name, txt)</l><list><l>unselect</l><block var="which"/></list></block></list></block></script></block-definition><block-definition s="change %&apos;which&apos; scale by %&apos;n&apos;" type="command" category="3D Beetle"><header></header><code></code><translations>ca:augmenta l&apos;escala de _ en _&#xD;</translations><inputs><input type="%s" readonly="true" initial="1">$_shape<options>shape=$_shape&#xD;movement=$_movement</options></input><input type="%n">0.5</input></inputs><script><custom-block s="set %s scale to %n"><block var="which"/><block s="reportVariadicSum"><list><custom-block s="%s scale"><block var="which"/></custom-block><block var="n"/></list></block></custom-block></script></block-definition><block-definition s="%&apos;which&apos; scale" type="reporter" category="3D Beetle"><header></header><code></code><translations>ca:escala de _&#xD;</translations><inputs><input type="%s" readonly="true" initial="1">$_shape<options>shape=$_shape&#xD;movement=$_movement</options></input></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>bb_scale(which)</l><list><block s="reportApplyExtension"><l>txt_transform(name, txt)</l><list><l>unselect</l><block var="which"/></list></block></list></block></block></script></block-definition><block-definition s="push position" type="command" category="3D Beetle" space="true"><header></header><code></code><translations>ca:enregistra posició actual&#xD;</translations><inputs></inputs><script><block s="doAddToList"><block s="reportNewList"><list><custom-block s="%s position"><l></l></custom-block><custom-block s="%s rotation"><l></l></custom-block></list></block><custom-block s="stack"></custom-block></block></script></block-definition><block-definition s="pop position" type="command" category="3D Beetle"><header></header><code></code><translations>ca:torna a la posició enregistrada&#xD;</translations><inputs></inputs><script><block s="doWarp"><script><block s="doIf"><block s="reportNot"><block s="reportListIsEmpty"><custom-block s="stack"></custom-block></block></block><script><block s="doDeclareVariables"><list><l>record</l></list></block><block s="doSetVar"><l>record</l><block s="reportListItem"><l><option>last</option></l><custom-block s="stack"></custom-block></block></block><block s="doApplyExtension"><l>bb_goto(x, y, z)</l><block s="reportListItem"><l>1</l><block var="record"/></block></block><block s="doApplyExtension"><l>bb_setrot(x, y, z)</l><block s="reportListItem"><l>2</l><block var="record"/></block></block><block s="doDeleteFromList"><l><option>last</option></l><custom-block s="stack"></custom-block></block></script><list></list></block></script></block></script></block-definition><block-definition s="stack" type="reporter" category="3D Beetle" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIf"><block s="reportNot"><block s="reportListContainsItem"><block s="reportApplyExtension"><l>var_names(scope)</l><list><l>global</l></list></block><l>bb_stack</l></block></block><script><block s="doApplyExtension"><l>var_declare(scope, name)</l><list><l>global</l><l>bb_stack</l></list></block><block s="doApplyExtension"><l>var_hide(name)</l><list><l>bb_stack</l></list></block><block s="doApplyExtension"><l>var_set(name, val)</l><list><l>bb_stack</l><block s="reportNewList"><list></list></block></list></block></script><list></list></block><block s="doReport"><block s="reportApplyExtension"><l>var_get(name)</l><list><l>bb_stack</l></list></block></block></script></block-definition><block-definition s="init module" type="command" category="3D Beetle" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>__module__beetle__</l><l>libraries/beetle/init.js</l></block></script><scripts><script x="59.50413223140498" y="111.42809917355369"><block s="doSetVar"><l>__module__beetle__</l><l>libraries/beetle/init.js</l></block></script></scripts></block-definition><block-definition s="beetle view" type="reporter" category="3D Beetle" space="true"><header></header><code></code><translations>ca:vista de l&apos;escarbat&#xD;</translations><inputs></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>bb_beetleView()</l><list></list></block></block></script></block-definition><block-definition s="load babylon extension" type="command" category="Babylon Extensions"><comment x="0" y="0" w="193.65614809782608" collapsed="false">Loads the Beetle extension for the Babylon.js library.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/beetle/init.js</l></list></block></script></block-definition><block-definition s="get scene" type="reporter" category="Babylon Extensions"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="load babylon extension"></custom-block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return world.children[0].stage.beetleController.scene;</l></block><list></list></block></block></script></block-definition><block-definition s="get camera" type="reporter" category="Babylon Extensions"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="load babylon extension"></custom-block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return world.children[0].stage.beetleController.camera;</l></block><list></list></block></block></script></block-definition><block-definition s="get cached color material %&apos;color&apos;" type="reporter" category="Babylon Extensions" space="true"><comment x="0" y="0" w="167.3913043478261" collapsed="false">Gets a cached material from a color, similar to the material the Beetle creates.</comment><header></header><code></code><translations></translations><inputs><input type="%clr" initial="1">rgba(145,26,68,1)</input></inputs><script><block s="doReport"><l></l></block></script></block-definition><block-definition s="create %&apos;materialType&apos; material" type="reporter" category="Babylon Extensions"><comment x="0" y="0" w="200.43478260869566" collapsed="false">Creates a special material for use with custom shapes.&#xD;&#xD;standard: The default material. Affects performance less.&#xD;&#xD;PBR: Mimics realistic materials. Better graphics, but uses more resources.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">standard<options>standard&#xD;PBR</options></input></inputs><script><block s="doIf"><block s="reportListContainsItem"><block s="reportNewList"><list><l>standard</l><l>PBR</l></list></block><block var="materialType"/></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>material</l></list><l>switch (material) {&#xD;  case &apos;PBR&apos;:&#xD;    return new BABYLON.PBRMaterial();&#xD;  default:&#xD;    return new BABYLON.StandardMaterial();&#xD;}</l></block><list><block var="materialType"/></list></block></block></script><list></list></block><block s="doReport"><l></l></block></script></block-definition><block-definition s="set %&apos;colorProperty&apos; color of material %&apos;material&apos; to %&apos;value&apos;" type="command" category="Babylon Extensions" space="true"><comment x="0" y="0" w="232.60869565217394" collapsed="false">Sets the color of a material&apos;s property. A material can have a color property and texture property.&#xD;&#xD;diffuse: The primary color, or the &quot;albedo&quot;.&#xD;specular: The color of the reflection of light.&#xD;ambient: Write something better&#xD;emissive: The &quot;light&quot; the material gives off.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">diffuse<options>diffuse&#xD;specular&#xD;ambient&#xD;emissive</options></input><input type="%obj" readonly="true" initial="1">⚫</input><input type="%clr" initial="1">rgba(145,26,68,1)</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>scene</l><l>property</l><l>material</l><l>value</l></list><l>function convertToColor3(color) {&#xD;  return new BABYLON.Color3(color.r / 255, color.g / 255, color.b / 255)&#xD;}&#xD;&#xD;material[property + &apos;Color&apos;] = convertToColor3(value);</l></block><list><custom-block s="get scene"></custom-block><block var="colorProperty"/><block var="material"/><block var="value"/></list></block></script></block-definition><block-definition s="set %&apos;textureProperty&apos; texture of material %&apos;material&apos; to costume %&apos;costume&apos;" type="command" category="Babylon Extensions"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">diffuse<options>diffuse&#xD;ambient&#xD;emissive&#xD;bump</options></input><input type="%obj" readonly="true" initial="1">⚫</input><input type="%s" readonly="true" initial="1">$_current<options>§_costumesMenu</options></input></inputs></block-definition><block-definition s="set %&apos;numericProperty&apos; of material %&apos;material&apos; to %&apos;value&apos;" type="command" category="Babylon Extensions" space="true"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">alpha<options>alpha</options></input><input type="%obj" readonly="true" initial="1">⚫</input><input type="%n" initial="1">100</input></inputs><script><block s="doIf"><block s="reportListContainsItem"><block s="reportListItem"><l>1</l><block s="reportBlockAttribute"><l><option>menus</option></l><block s="reifyReporter"><script><custom-block s="set %s of material %obj to %n"><l>alpha</l><l/><l>100</l></custom-block></script><list></list></block></block></block><block var="numericProperty"/></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>property</l><l>value</l><l>material</l></list><l>switch (property) {&#xD;  case &apos;alpha&apos;:&#xD;    material.alpha = value / 100;&#xD;  break;&#xD;}</l></block><list><block var="numericProperty"/><block var="value"/><block var="material"/></list></block></block></script><list></list></block></script></block-definition><block-definition s="set %&apos;flagProperty&apos; of material %&apos;material&apos; to %&apos;value&apos;" type="command" category="Babylon Extensions"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">show back faces<options>show back faces&#xD;lighting</options></input><input type="%obj" readonly="true" initial="1">⚫</input><input type="%b" readonly="true" initial="1"><options>§_costumesMenu</options></input></inputs><script><block s="doIf"><block s="reportListContainsItem"><block s="reportListItem"><l>1</l><block s="reportBlockAttribute"><l><option>menus</option></l><block s="reifyReporter"><script><custom-block s="set %s of material %obj to %b"><l>show back faces</l><l/><l/></custom-block></script><list></list></block></block></block><block var="flagProperty"/></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>property</l><l>value</l><l>material</l></list><l>switch (property) {&#xD;  case &apos;show back faces&apos;:&#xD;    material.backFaceCulling = !value;&#xD;  break;&#xD;  case &apos;lighting&apos;:&#xD;    material.disableLighting = !value;&#xD;}</l></block><list><block var="flagProperty"/><block var="value"/><block var="material"/></list></block></block></script><list></list></block></script></block-definition><block-definition s="create box shape %&apos;properties&apos;" type="reporter" category="Babylon Extensions" space="true"><header></header><code></code><translations></translations><inputs><input type="%mult%n" expand="x size&#xD;y size&#xD;z size" max="3">2&#xD;2&#xD;2</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>scene</l><l>x</l><l>y</l><l>z</l></list><l>const properties = {&#xD;    width:  x || 2,&#xD;    height: y || x || 2,&#xD;    depth:  z || (x &amp;&amp; !y ? x : 2) &#xD;};&#xD;&#xD;return BABYLON.MeshBuilder.CreateBox("babylonExtensionObject", properties, scene);</l></block><block s="reportListAttribute"><l><option>flatten</option></l><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><custom-block s="get scene"></custom-block></list></block><block s="reportEnvironment"><l><option>inputs</option></l></block></list></block></block></block></block></script></block-definition><block-definition s="apply material %&apos;material&apos; to mesh %&apos;shape&apos;" type="command" category="Babylon Extensions" space="true"><header></header><code></code><translations></translations><inputs><input type="%obj" initial="1"></input><input type="%obj" initial="1"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>material</l><l>mesh</l></list><l>mesh.material = material;</l></block><list><block var="material"/><block var="shape"/></list></block></script></block-definition><block-definition s="set billboard property of mesh %&apos;mesh&apos; to: $nl x: %&apos;x&apos; y: %&apos;y&apos; z: %&apos;z&apos; $nl" type="command" category="Babylon Extensions"><header></header><code></code><translations></translations><inputs><input type="%obj" initial="1"></input><input type="%b" readonly="true" irreplaceable="true" initial="1"></input><input type="%b" initial="1"></input><input type="%b" initial="1"></input></inputs><script><custom-block s="load babylon extension"></custom-block><block s="doRun"><block s="reportJSFunction"><list><l>mesh</l><l>x</l><l>y</l><l>z</l></list><l>// get your custom scene and camera&#xD;const scene = world.children[0].stage.beetleController.scene;&#xD;const cam = world.children[0].stage.beetleController.camera;&#xD;&#xD;// assign the mesh you want to make into a billboard&#xD;const plane = mesh;&#xD;&#xD;if (!plane.material) {&#xD;    const mat = new BABYLON.StandardMaterial("billboardMat", scene);&#xD;    mat.emissiveColor = BABYLON.Color3.White();&#xD;    plane.material = mat;&#xD;}&#xD;&#xD;// boolean flags for axes&#xD;const billboardX = x; // rotate along X?&#xD;const billboardY = y; // rotate along Y?&#xD;const billboardZ = z; // rotate along Z?&#xD;&#xD;/* ----------------------------------------------------&#xD;   ENABLE BILLBOARD MODE BASED ON BOOLEANS&#xD;---------------------------------------------------- */&#xD;let mode = 0;&#xD;if (billboardX) mode |= BABYLON.Mesh.BILLBOARDMODE_X;&#xD;if (billboardY) mode |= BABYLON.Mesh.BILLBOARDMODE_Y;&#xD;if (billboardZ) mode |= BABYLON.Mesh.BILLBOARDMODE_Z;&#xD;&#xD;plane.billboardMode = mode;&#xD;&#xD;/* ----------------------------------------------------&#xD;   FOLLOW CAMERA POSITION AND ROTATE TO FACE FORWARD&#xD;---------------------------------------------------- */&#xD;scene.onBeforeRenderObservable.add(() =&gt; {&#xD;    // Offset to keep the mesh slightly in front of the camera&#xD;    const offset = new BABYLON.Vector3(0, 0, 2); // distance in front&#xD;    const forward = cam.getDirection(BABYLON.Axis.Z);&#xD;    const targetPos = cam.position.add(forward.scale(offset.z));&#xD;&#xD;    plane.position.copyFrom(targetPos);&#xD;&#xD;    // Optional: make it always face camera if needed&#xD;    plane.lookAt(cam.position.add(forward.scale(5)));&#xD;});&#xD;</l></block><list><block var="mesh"/><block var="x"/><block var="y"/><block var="z"/></list><comment w="238.69565217391306" collapsed="false">Sets the mesh to be a billboard, meaning it follows the camera by rotating itself to be viewable from all axes.&#xD;&#xD;</comment></block></script></block-definition><block-definition s="set camera FOV to %&apos;fov&apos;" type="command" category="Babylon Extensions"><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">45</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>camera</l><l>fov</l></list><l>let rad = degrees =&gt; degrees * Math.PI / 180;&#xD;&#xD;camera.fov = rad(fov)</l></block><list><custom-block s="get camera"></custom-block><block var="fov"/></list></block></script></block-definition><block-definition s="set camera mode to %&apos;camMode&apos;" type="command" category="Babylon Extensions"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" initial="1">perspective<options>perspective&#xD;orthographic</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>camera</l><l>camMode</l></list><l>if (camMode == "perspective") {&#xD;  camera.mode = BABYLON.Camera.PERSPECTIVE_CAMERA;&#xD;} else if (camMode == "orthographic") {&#xD;  camera.mode = BABYLON.Camera.ORTHOGRAPHIC_CAMERA;&#xD;}</l></block><list><custom-block s="get camera"></custom-block><block var="camMode"/></list></block></script></block-definition><block-definition s="create new mesh with custom vertex %&apos;Verticies&apos;" type="reporter" category="Babylon Extensions"><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>list</l></list><block s="reportJoinWords"><list><custom-block s="multiline %mlt"><l>const scene = world.children[0].stage.beetleController.scene&#xD;&#xD;const customMesh = new BABYLON.Mesh("customMesh",scene)&#xD;&#xD;const vertexData = new BABYLON.VertexData()&#xD;&#xD;vertexData.positions = </l></custom-block><block s="reportListAttribute"><l><option>flatten</option></l><block var="Verticies"/></block><custom-block s="multiline %mlt"><l> vertexData.applyToMesh(customMesh, true);</l></custom-block></list></block></block><list></list></block></block></script><scripts><script x="105.45703125" y="289.4999999999999"><block var="Verticies"/></script><script x="190.02275390625005" y="297.5999999999999"><custom-block s="parse code %code to blocks"><l>(list (list -0.5 -0.5 -0.5) (list 0.5 -0.5 -0.5) (list 0.5 0.5 -0.5) (list -0.5 0.5 -0.5) (list -0.5 -0.5 0.5) (list 0.5 -0.5 0.5) (list 0.5 0.5 0.5) (list -0.5 0.5 0.5) )</l></custom-block></script></scripts></block-definition><block-definition s="parse code %&apos;code&apos; to blocks" type="reporter" category="operators"><comment x="0" y="0" w="104" collapsed="false">turn LISP syntax text code into blocks</comment><header></header><code></code><translations>de:verwandle Code _ in Blöcke&#xD;ca:blocs del codi textual _&#xD;</translations><inputs><input type="%code" initial="1">(+ 3 4)</input></inputs><script><block s="doReport"><block s="reportJoinWords"><block s="reportTextSplit"><block var="code"/><l><option>blocks</option></l></block></block></block></script></block-definition><block-definition s="encode blocks %&apos;script&apos; to text %&apos;lines&apos; pretty" type="reporter" category="operators"><comment x="0" y="0" w="106" collapsed="false">turn blocks into LISP syntax text code.</comment><header></header><code></code><translations>de:verwandle Blöcke _ in Code _ formatiert&#xD;ca:codi textual dels blocs _ formatats _&#xD;</translations><inputs><input type="%repRing" initial="1"></input><input type="%b" initial="1">true</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportListAttribute"><l></l><block s="reportTextSplit"><block var="script"/><l><option>blocks</option></l></block></block></autolambda><list></list></block><list><block s="reportIfElse"><block var="lines"/><l>lines</l><l>text</l></block></list></block></block></script></block-definition><block-definition s="multiline %&apos;text&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:o texto multilinha _&#xD;ca:multilínia _&#xD;pl:wielowiersz _&#xD;</translations><inputs><input type="%mlt"></input></inputs><script><block s="doReport"><block var="text"/></block></script></block-definition><block-definition s="substring of %&apos;string&apos; before %&apos;marker&apos;" type="reporter" category="operators"><comment x="0" y="0" w="175.33333333333334" collapsed="false">Reports the part of the first string up to the first instance of the second string inside it.  If the second string isn&apos;t found, reports the entire first string.</comment><header></header><code></code><translations>pt:o texto de _ antes de _&#xD;ca:part del text _ anterior a _&#xD;pl:podciąg _ przed _&#xD;</translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l></list></block><block s="doSetVar"><l>index</l><custom-block s="position of %s in %txt"><block var="marker"/><block var="string"/></custom-block></block><block s="doReport"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="index"/><l>0</l></list></block><block var="string"/><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="index"/><l>1</l></list></block><l></l><custom-block s="substring of %txt from position %n to position %n inclusive"><block var="string"/><l>1</l><block s="reportDifference"><block var="index"/><l>1</l></block></custom-block></block></block></block></script></block-definition><block-definition s="substring of %&apos;string&apos; after %&apos;marker&apos;" type="reporter" category="operators"><comment x="0" y="0" w="203.33333333333334" collapsed="false">Reports the portion of the first input string starting after the first occurrence of the second string.  If the second string isn&apos;t found in the first string, reports an empty string.</comment><header></header><code></code><translations>pt:o texto de _ depois de _&#xD;ca:part del text _ posterior a _&#xD;pl:podciąg _ po _&#xD;</translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l><l>end</l></list></block><block s="doSetVar"><l>index</l><custom-block s="position of %s in %txt"><block var="marker"/><block var="string"/></custom-block></block><block s="doSetVar"><l>end</l><block s="reportVariadicSum"><list><block var="index"/><block s="reportTextAttribute"><l><option>length</option></l><block var="marker"/></block></list></block></block><block s="doReport"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="index"/><l>0</l></list></block><l></l><block s="reportIfElse"><block s="reportVariadicGreaterThan"><list><block var="end"/><block s="reportTextAttribute"><l><option>length</option></l><block var="string"/></block></list></block><l></l><custom-block s="substring of %txt from position %n to position %n inclusive"><block var="string"/><block var="end"/><l></l></custom-block></block></block></block></script></block-definition><block-definition s="position of %&apos;small&apos; in %&apos;large&apos;" type="reporter" category="operators"><comment x="0" y="0" w="294" collapsed="false">Reports the character position (starting from 1) of the beginning of the first input string inside the second input string.&#xD;If it&apos;s not found, reports 0.</comment><header></header><code></code><translations>pt:a posição de _ em _&#xD;ca:posició de _ en _&#xD;pl:pozycja _ w _&#xD;</translations><inputs><input type="%s"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportGlobalFlag"><l><option>case sensitivity</option></l></block><block s="reportApplyExtension"><l>txt_indexof(sub, txt)</l><list><block var="small"/><block var="large"/></list></block><block s="reportApplyExtension"><l>txt_indexof(sub, txt)</l><list><block s="reportTextAttribute"><l><option>lower case</option></l><block var="small"/></block><block s="reportTextAttribute"><l><option>lower case</option></l><block var="large"/></block></list></block></block></block></script></block-definition><block-definition s="substring of %&apos;str&apos; from position %&apos;start&apos; to position %&apos;end&apos; inclusive" type="reporter" category="operators"><comment x="0" y="0" w="297.3333333333333" collapsed="false">Reports the portion of the first input (string) starting at the position given by the second input (counting from 1, like LETTER n OF) and ending at the position given by the third input (also counting from 1).  If the third input is empty, reports the portion from the first position to the end of the string.&#xD;If a position number is negative, counts from the end backward, so -1 is the last character, -2 is the next to last, etc.</comment><header></header><code></code><translations>pt:o texto de _ entre as posições _ e _ , inclusive&#xD;ca:part del text _ des de la posició _ fins _&#xD;pl:podciąg _ od pozycji _ do pozycji _ włącznie&#xD;</translations><inputs><input type="%txt"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="reportJoinWords"><block s="reportLetter"><block s="reportNumbers"><block s="reportIfElse"><block s="reportVariadicLessThan"><list><block var="start"/><l>0</l></list></block><block s="reportVariadicSum"><list><block s="reportVariadicSum"><list><block var="start"/><l>1</l></list></block><block s="reportTextAttribute"><l><option>length</option></l><block var="str"/></block></list></block><block var="start"/></block><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="end"/><l>0</l></list></block><block s="reportTextAttribute"><l><option>length</option></l><block var="str"/></block><block s="reportIfElse"><block s="reportVariadicLessThan"><list><block var="end"/><l>0</l></list></block><block s="reportVariadicSum"><list><block s="reportVariadicSum"><list><block var="end"/><l>1</l></list></block><block s="reportTextAttribute"><l><option>length</option></l><block var="str"/></block></list></block><block var="end"/></block></block></block><block var="str"/></block></block></block></script></block-definition><block-definition s="text %&apos;string&apos; contains %&apos;marker&apos;" type="predicate" category="operators"><comment x="0" y="0" w="218" collapsed="false">Reports True if the first input string contains the second input string, otherwise false.&#xD;&#xD;Comparison is case-independent by default; use USE CASE-INDEPENDENT COMPARISONS to change that.</comment><header></header><code></code><translations>pt:o texto de _ antes de _&#xD;ca:text _ conté _ ?&#xD;pl:tekst _ zawiera _&#xD;</translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportVariadicGreaterThan"><list><custom-block s="position of %s in %txt"><block var="marker"/><block var="string"/></custom-block><l>0</l></list></block></block></script></block-definition><block-definition s="mesh.pos %&apos;Mesh&apos;" type="reporter" category="Babylon Extensions"><header></header><code></code><translations></translations><inputs><input type="%anyUE" initial="1"></input></inputs><scripts><script x="40" y="81.83333333333331"><block s="doReport"><l></l></block></script><script x="77.5" y="111.8666666666665"><block s="reportJSFunction"><list><l></l></list><l></l></block></script></scripts></block-definition></blocks><primitives></primitives><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="1158"><pentrails>data:image/png;base64,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</pentrails><costumes><list struct="atomic" id="1159"></list></costumes><sounds><list struct="atomic" id="1160"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="3D CONTROL" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="145,26,68,1" pen="tip" id="1165"><wear><ref mediaID="1"></ref></wear><costumes><list struct="atomic" id="1166"></list></costumes><sounds><list struct="atomic" id="1167"></list></sounds><blocks></blocks><variables></variables><scripts><script x="30" y="10"><block s="evaluate"><block s="reportJSFunction"><list><l>scene</l></list><l>return new List(scene.meshes);</l></block><list><custom-block s="get scene"></custom-block></list><comment w="90" collapsed="false">manual deletion for debugging.&#xD;&#xD;for some reason this works and snap i love you for this</comment></block></script><script x="30" y="119.31884057971001"><custom-block s="go home"></custom-block><block s="doDeclareVariables"><list><l>GlowMaterial</l><l>NormalMaterial</l><l>Box</l><l>InnerBox</l></list></block><block s="doSetVar"><l>GlowMaterial</l><custom-block s="create %s material"><l>standard</l></custom-block></block><block s="doSetVar"><l>NormalMaterial</l><custom-block s="create %s material"><l>standard</l></custom-block></block><block s="doSetVar"><l>Box</l><custom-block s="create box shape %mult%n"><list><l>-8</l><l>-8</l><l>-8</l></list></custom-block></block><block s="doSetVar"><l>InnerBox</l><custom-block s="create box shape %mult%n"><list><l>6</l><l>1.5</l><l>3</l></list></custom-block></block><custom-block s="set %s color of material %obj to %clr"><l>emissive</l><block var="GlowMaterial"/><color>178,0,247,1</color></custom-block><custom-block s="set %s of material %obj to %n"><l>alpha</l><block var="GlowMaterial"/><l>50</l></custom-block><custom-block s="set %s of material %obj to %b"><l>lighting</l><block var="GlowMaterial"/><l><bool>false</bool></l></custom-block><custom-block s="apply material %obj to mesh %obj"><block var="GlowMaterial"/><block var="Box"/></custom-block><custom-block s="apply material %obj to mesh %obj"><block var="NormalMaterial"/><block var="InnerBox"/></custom-block><custom-block s="set camera mode to %s"><l>perspective</l></custom-block><custom-block s="set camera FOV to %n"><l>80</l></custom-block><custom-block s="set %s rotation to %n"><l>y</l><l>45</l></custom-block><custom-block s="set %s rotation to %n"><l>x</l><l>-30</l></custom-block><custom-block s="change relative %s by %n"><l>y</l><l>-1</l></custom-block><custom-block s="move %n steps"><l>-10</l></custom-block><block s="doSwitchToCostume"><custom-block s="beetle view"></custom-block></block></script><script x="179.60869565217388" y="90.33333333333337"><custom-block s="create new mesh with custom vertex %l"><l/></custom-block></script><script x="255.60869565217388" y="411"><custom-block s="parse code %code to blocks"><l>(list (list -0.5 -0.5 -0.5) (list 0.5 -0.5 -0.5) (list 0.5 0.5 -0.5) (list -0.5 0.5 -0.5) (list -0.5 -0.5 0.5) (list 0.5 -0.5 0.5) (list 0.5 0.5 0.5) (list -0.5 0.5 0.5) )</l></custom-block></script><script x="350.6086956521739" y="371.6666666666667"><block s="reportListAttribute"><l><option>flatten</option></l><block s="reportNewList"><list><block s="reportNewList"><list><l>-0.5</l><l>-0.5</l><l>-0.5</l></list></block><block s="reportNewList"><list><l>0.5</l><l>-0.5</l><l>-0.5</l></list></block><block s="reportNewList"><list><l>0.5</l><l>0.5</l><l>-0.5</l></list></block><block s="reportNewList"><list><l>-0.5</l><l>0.5</l><l>-0.5</l></list></block><block s="reportNewList"><list><l>-0.5</l><l>-0.5</l><l>0.5</l></list></block><block s="reportNewList"><list><l>0.5</l><l>-0.5</l><l>0.5</l></list></block><block s="reportNewList"><list><l>0.5</l><l>0.5</l><l>0.5</l></list></block><block s="reportNewList"><list><l>-0.5</l><l>0.5</l><l>0.5</l></list></block></list></block></block></script><script x="314" y="552.4855072463768"><block s="reportJoinWords"><block s="reportNewList"><list><block s="reportNewList"><list><l>-0.5</l><l>-0.5</l><l>-0.5</l></list></block><block s="reportNewList"><list><l>0.5</l><l>-0.5</l><l>-0.5</l></list></block><block s="reportNewList"><list><l>0.5</l><l>0.5</l><l>-0.5</l></list></block><block s="reportNewList"><list><l>-0.5</l><l>0.5</l><l>-0.5</l></list></block><block s="reportNewList"><list><l>-0.5</l><l>-0.5</l><l>0.5</l></list></block><block s="reportNewList"><list><l>0.5</l><l>-0.5</l><l>0.5</l></list></block><block s="reportNewList"><list><l>0.5</l><l>0.5</l><l>0.5</l></list></block><block s="reportNewList"><list><l>-0.5</l><l>0.5</l><l>0.5</l></list></block></list></block></block></script><script x="794.0046875" y="612.4855072463768"><block s="reportNewList"><list><l></l></list></block></script><script x="306" y="526.1521739130434"><block s="reportTextSplit"><l>hello world</l><l><option>line</option></l></block></script><script x="67.69012451171875" y="594.9618408645408"><custom-block s="set billboard property of mesh %obj to: %br x: %b y: %b z: %b %br"><l/><l/><l/><l/></custom-block></script><script x="59.72990417480469" y="543.7523376907128"><custom-block s="create new mesh with custom vertex %l"><l/><comment w="90" collapsed="false">I got the base set up this just needs to be fixed</comment></custom-block></script></scripts></sprite></sprites></stage><variables><variable name="__module__beetle__" hidden="true"><l>libraries/beetle/init.js</l></variable></variables></scene></scenes></project><media name="! BabylonJS Blocks" app="Snap! 11.0.8, https://snap.berkeley.edu" version="2"><costume name="render" center-x="4" center-y="4" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAHCAYAAAA1WQxeAAAA2UlEQVR4ASSNT4tBURjGn3PuzNwZM9PMlvInkvIndsrCByAsSFFWspYPYG95ba2xUIrYWLKwsBNZ2St3dQshznHOvW89b72/5+l9KMQMwJUpbuERLg1Lp4hkwgId4mxXcW0+wQoE5M+SkpdsjLODPvH4lslVqBvrpWv1nW/mlbclxWZWcMrIV/Tm9Mfc/8fsvLIotSrs7W565iKM8ki/OglOy50Aj69dm8SSPj6Y/CIC1BC9hjj4z9p7sGu5kWeb3Ev2DtWgRfzqGaiaDZ8aB9GlGK5tyVIg+gsAAP//V2UtRgAAAAZJREFUAwB4xUeqBrYkggAAAABJRU5ErkJggg==" mediaID="1"/></media></snapdata>