<snapdata remixID="14420050"><project name="Voice recognition" app="Snap! 11.0.0, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="Voice recognition"><notes></notes><palette><category name="MicroBlocks" color="97,101,255,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="speak %&apos;text&apos; with %&apos;lang&apos; accent $nl and pitch %&apos;pitch&apos; rate %&apos;rate&apos;" type="command" category="sound"><header></header><code></code><translations>de:sprich _ mit _ Aussprache _ und Höhe _ Geschwindigkeit _&#xD;pt:fala _ na língua _ _ com tom _ e velocidade _&#xD;ca:digues _ amb accent _ _ to _ i velocitat _&#xD;pl:powiedz _ z akcentem _ _ wysokość _ szybkość _&#xD;</translations><inputs><input type="%s">Hello, World!</input><input type="%txt">en-US<options>العربية=ar&#xD;Български=bg&#xD;বাংলা=bn&#xD;Català=ca&#xD;Català - Valencià=ca-VA&#xD;Česky=cs&#xD;Deutsch=de&#xD;Dansk=dk&#xD;Ελληνικά=el&#xD;English-American=en-US&#xD;English-British=en-GB&#xD;Esperanto=eo&#xD;Español=es&#xD;Eesti=et&#xD;Euskara=eu&#xD;suomi=fi&#xD;Français=fr&#xD;Galego=gl&#xD;Hrvatski=hr&#xD;Magyar=hu&#xD;Interlingua=ia&#xD;Bahasa Indonesia=id&#xD;Italiano=it&#xD;日本語=ja&#xD;にほんご=ja-HIRA&#xD;ಕನ್ನಡ=kn&#xD;한국어=ko&#xD;Malayalam=ml&#xD;Nederlands=nl&#xD;Norsk=no&#xD;Polski=pl&#xD;Português=pt&#xD;Português do Brasil=pt-BR&#xD;Român=ro&#xD;Русский=ru&#xD;Slovenščina=si&#xD;svenska=sv&#xD;Tamil=ta&#xD;Telagu=te&#xD;Türkçe=tr&#xD;Українська=ua&#xD;简体中文=zh-CN&#xD;繁體中文=zh-TW</options></input><input type="%n">1</input><input type="%n">1</input></inputs><script><block s="doApplyExtension"><l>tts_speak(txt, lang, pitch, rate)</l><list><block var="text"/><block var="lang"/><block var="pitch"/><block var="rate"/></list></block></script></block-definition><block-definition s="speak %&apos;text&apos; with %&apos;lang&apos; accent $nl and pitch %&apos;pitch&apos; rate %&apos;rate&apos; and wait" type="command" category="sound"><header></header><code></code><translations>de:sprich _ mit _ Aussprache _ und Höhe _ Geschwindigkeit _ und warte&#xD;pt:fala _ na língua _ _ com tom _ e velocidade _ , e espera&#xD;ca:digues _ amb accent _ _ to _ velocitat _ i espera&#xD;pl:powiedz _ z akcentem _ _ wysokość _ szybkość _ i czekaj&#xD;</translations><inputs><input type="%s">Hello, World!</input><input type="%txt">en-US<options>العربية=ar&#xD;Български=bg&#xD;বাংলা=bn&#xD;Català=ca&#xD;Català - Valencià=ca-VA&#xD;Česky=cs&#xD;Deutsch=de&#xD;Dansk=dk&#xD;Ελληνικά=el&#xD;English-American=en-US&#xD;English-British=en-GB&#xD;Esperanto=eo&#xD;Español=es&#xD;Eesti=et&#xD;Euskara=eu&#xD;suomi=fi&#xD;Français=fr&#xD;Galego=gl&#xD;Hrvatski=hr&#xD;Magyar=hu&#xD;Interlingua=ia&#xD;Bahasa Indonesia=id&#xD;Italiano=it&#xD;日本語=ja&#xD;にほんご=ja-HIRA&#xD;ಕನ್ನಡ=kn&#xD;한국어=ko&#xD;Malayalam=ml&#xD;Nederlands=nl&#xD;Norsk=no&#xD;Polski=pl&#xD;Português=pt&#xD;Português do Brasil=pt-BR&#xD;Român=ro&#xD;Русский=ru&#xD;Slovenščina=si&#xD;svenska=sv&#xD;Tamil=ta&#xD;Telagu=te&#xD;Türkçe=tr&#xD;Українська=ua&#xD;简体中文=zh-CN&#xD;繁體中文=zh-TW</options></input><input type="%n">1</input><input type="%n">1</input></inputs><script><block s="doDeclareVariables"><list><l>callback</l></list></block><block s="doSetVar"><l>callback</l><block s="reportApplyExtension"><l>tts_speak(txt, lang, pitch, rate)</l><list><block var="text"/><block var="lang"/><block var="pitch"/><block var="rate"/></list></block></block><block s="doWaitUntil"><block s="evaluate"><block var="callback"/><list></list></block></block></script></block-definition><block-definition s="recognize speech" type="reporter" category="sensing"><header></header><code></code><translations>de:erkenne Gesprochenes&#xD;ar:التعرف على الكلام&#xD;bg:Разпознаване на изговорени думи&#xD;hr:Prepoznavanje izgovorenih riječi&#xD;hy:ճանաչել ասված բառերը&#xD;ca:reconèixer les paraules pronunciades&#xD;cs:Rozpoznávání mluvených slov&#xD;dk:At genkende talte ord&#xD;eu:ahozko hitzak ezagutu&#xD;el:Αναγνώριση προφορικών λέξεων&#xD;es:Reconocer palabras habladas&#xD;fi:Puhuttujen sanojen tunnistaminen&#xD;fr:Reconnaître les mots parlés&#xD;he:זיהוי מילים מדוברות&#xD;hi:बोले गए शब्दों को पहचानना&#xD;hu:A kimondott szavak felismerése&#xD;it:Riconoscere le parole pronunciate&#xD;ja:話し言葉を認識する&#xD;ko:말한 단어 인식&#xD;no:Gjenkjenne talte ord&#xD;po:Rozpoznawanie wypowiedzianych słów&#xD;pt_BR:Reconhecendo palavras faladas&#xD;pt:Reconhecendo palavras faladas&#xD;ro:Recunoașterea cuvintelor rostite&#xD;ru:Распознавание произнесенных слов&#xD;sk:Rozpoznávanie hovorených slov&#xD;si:Prepoznavanje govorjenih besed&#xD;sv:Att känna igen talade ord&#xD;ti:ዝተዛረቡ ቃላት ምልላይ&#xD;tr:Konuşulan kelimeleri tanıma&#xD;ua:Розпізнавання вимовлених слів&#xD;zh_CN:识别口语单词&#xD;zh_TW:辨識口語單字&#xD;nl:gesproken woorden herkennen&#xD;et:ära tunda öeldud sõnu&#xD;</translations><inputs></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>tts_recognize</l><list></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="217.99999999999991" 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="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="setting %&apos;which&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="254.66666666666666" collapsed="false">Allows reading global settings programmatically.&#xD;&#xD;Eisenberg&apos;s Law:  Anything you can do from the user interface you should be able to do in your program, and vice versa.  This library is just a beginning; there are many UI controls outside of the Settings menu.</comment><header></header><code></code><translations>pt:o valor da configuração _&#xD;ca:paràmetre _&#xD;pl:ustawienie _&#xD;</translations><inputs><input type="%s" readonly="true"><options>Project notes&#xD;Project name&#xD;User&#xD;Presentation mode&#xD;Language&#xD;Zoom blocks&#xD;Stage size&#xD;Stage scale&#xD;Retina display support&#xD;Long form input dialog&#xD;Plain prototype labels&#xD;Input sliders&#xD;Execute on slider change&#xD;Clicking sound&#xD;Turbo mode&#xD;Flat design&#xD;Keyboard editing&#xD;Visible stepping&#xD;Thread safe scripts&#xD;Prefer smooth animations&#xD;Flat line ends&#xD;Codification support&#xD;Inheritance support&#xD;Hyper blocks support&#xD;Visible palette</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>which</l></list><l>var stage = this.parentThatIsA(StageMorph),&#xD;    ide = stage.parentThatIsA(IDE_Morph),&#xD;    world = stage.parentThatIsA(WorldMorph);&#xD;&#xD;switch (which) {&#xD;    case &apos;Project notes&apos;:&#xD;        return ide.projectNotes;&#xD;    case &apos;Project name&apos;:&#xD;        return ide.projectName;&#xD;    case &apos;User&apos;:&#xD;        return ide.cloud.username;&#xD;    case &apos;Presentation mode&apos;:&#xD;        return ide.isAppMode;&#xD;    case &apos;Language&apos;:&#xD;        return SnapTranslator.language;&#xD;    case &apos;Zoom blocks&apos;:&#xD;        return SyntaxElementMorph.prototype.scale;&#xD;    case &apos;Stage size&apos;:&#xD;        return new List([stage.dimensions.x, stage.dimensions.y]);&#xD;    case &apos;Stage scale&apos;:&#xD;       return stage.scale;&#xD;    case &apos;Retina display support&apos;:&#xD;        return isRetinaEnabled();&#xD;    case &apos;Long form input dialog&apos;:&#xD;        return InputSlotDialogMorph.prototype.isLaunchingExpanded;&#xD;    case &apos;Plain prototype labels&apos;:&#xD;        return BlockLabelPlaceHolderMorph.prototype.plainLabel;&#xD;    case &apos;Input sliders&apos;:&#xD;        return MorphicPreferences.useSliderForInput;&#xD;    case &apos;Execute on slider change&apos;:&#xD;        return ArgMorph.prototype.executeOnSliderEdit;&#xD;    case &apos;Clicking sound&apos;:&#xD;        return !!BlockMorph.prototype.snapSound;&#xD;    case &apos;Turbo mode&apos;:&#xD;        return stage.isFastTracked;&#xD;    case &apos;Flat design&apos;:&#xD;        return MorphicPreferences.isFlat;&#xD;    case &apos;Keyboard editing&apos;:&#xD;        return !!this.scripts.focus;&#xD;    case &apos;Visible stepping&apos;:&#xD;        return Process.prototype.enableSingleStepping;&#xD;    case &apos;Thread safe scripts&apos;:&#xD;        return stage.isThreadSafe;&#xD;    case &apos;Prefer smooth animations&apos;:&#xD;        return StageMorph.prototype.frameRate &gt; 0;&#xD;    case &apos;Flat line ends&apos;:&#xD;        return SpriteMorph.prototype.useFlatLineEnds;&#xD;    case &apos;Codification support&apos;:&#xD;        return StageMorph.prototype.enableCodeMapping;&#xD;    case &apos;Inheritance support&apos;:&#xD;        return StageMorph.prototype.enableInheritance;&#xD;    case &apos;Hyper blocks support&apos;:&#xD;        return Process.prototype.enableHyperOps;&#xD;    default: return which;&#xD;    case &apos;Visible palette&apos;:&#xD;        return ide.currentCategory;&#xD;}</l></block><list><block var="which"/></list></block></block></script></block-definition><block-definition s="set flag %&apos;which&apos; to %&apos;tf&apos;" type="command" category="sensing"><comment x="0" y="0" w="254.66666666666666" collapsed="false">Allows changing global settings programmatically.&#xD;This block is for Boolean (checkbox) settings; use&#xD;SET VALUE for numeric or text values.&#xD;&#xD;Eisenberg&apos;s Law:  Anything you can do from the user interface you should be able to do in your program, and vice versa.  This library is just a beginning; there are many UI controls outside of the Settings menu.</comment><header></header><code></code><translations>pt:altera o valor da configuração _ para _&#xD;ca:fixa el paràmetre _ a _&#xD;pl:ustaw flagę _ na _&#xD;</translations><inputs><input type="%s" readonly="true"><options>Presentation mode&#xD;Retina display support&#xD;Long form input dialog&#xD;Plain prototype labels&#xD;Input sliders&#xD;Execute on slider change&#xD;Clicking sound&#xD;Turbo mode&#xD;Flat design&#xD;Keyboard editing&#xD;Visible stepping&#xD;Thread safe scripts&#xD;Prefer smooth animations&#xD;Flat line ends&#xD;Codification support&#xD;Inheritance support&#xD;Hyper blocks support</options></input><input type="%b"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>which</l><l>tf</l></list><l>var   stage = this.parentThatIsA(StageMorph),&#xD;        ide = stage.parentThatIsA(IDE_Morph),&#xD;        world = stage.parentThatIsA(WorldMorph),&#xD;        thisObj = this;&#xD;&#xD;if (tf != !!tf) return;&#xD;&#xD;try{&#xD;ide.savingPreferences = false;&#xD;&#xD;switch (which) {&#xD;    case &apos;Presentation mode&apos;:&#xD;        if (tf != ide.isAppMode) ide.toggleAppMode();&#xD;        break;&#xD;    case &apos;Retina display support&apos;:&#xD;        if (tf != isRetinaEnabled()) ide.toggleRetina();&#xD;        break;&#xD;    case &apos;Long form input dialog&apos;:&#xD;        if (tf != InputSlotDialogMorph.prototype.isLaunchingExpanded)&#xD;            ide.toggleLongFormInputDialog();&#xD;        break;&#xD;    case &apos;Plain prototype labels&apos;:&#xD;        if (tf != BlockLabelPlaceHolderMorph.prototype.plainLabel)&#xD;            ide.togglePlainPrototypeLabels();&#xD;        break;&#xD;    case &apos;Input sliders&apos;:&#xD;        MorphicPreferences.useSliderForInput = tf;&#xD;        break;&#xD;    case &apos;Execute on slider change&apos;:&#xD;        ArgMorph.prototype.executeOnSliderEdit = tf;&#xD;        break;&#xD;    case &apos;Clicking sound&apos;:&#xD;        if (tf != !!BlockMorph.prototype.snapSound)&#xD;            BlockMorph.prototype.toggleSnapSound();&#xD;        break;&#xD;    case &apos;Turbo mode&apos;:&#xD;        if (tf != stage.isFastTracked)&#xD;            ide.toggleFastTracking();&#xD;        break;&#xD;    case &apos;Flat design&apos;:&#xD;        if (tf == MorphicPreferences.isFlat) break;&#xD;        if (tf)&#xD;            ide.flatDesign();&#xD;        else&#xD;            ide.defaultDesign();&#xD;        break;&#xD;    case &apos;Keyboard editing&apos;:&#xD;        if (thisObj.scripts.focus &amp;&amp; !tf) {&#xD;            thisObj.scripts.focus.stopEditing();&#xD;        } else if (tf &amp;&amp; !thisObj.scripts.focus) {&#xD;            thisObj.scripts.toggleKeyboardEntry();&#xD;        };&#xD;        break;&#xD;    case &apos;Visible stepping&apos;:&#xD;        if (tf != Process.prototype.enableSingleStepping)&#xD;            ide.toggleSingleStepping();&#xD;        break;&#xD;    case &apos;Thread safe scripts&apos;:&#xD;        stage.isThreadSafe = tf;&#xD;        break;&#xD;    case &apos;Prefer smooth animations&apos;:&#xD;        if (tf != (StageMorph.prototype.frameRate &gt; 0))&#xD;            ide.toggleVariableFrameRate();&#xD;        break;&#xD;    case &apos;Flat line ends&apos;:&#xD;        SpriteMorph.prototype.useFlatLineEnds = tf;&#xD;        break;&#xD;    case &apos;Codification support&apos;:&#xD;        if (tf != StageMorph.prototype.enableCodeMapping) {&#xD;            StageMorph.prototype.enableCodeMapping = tf;&#xD;            ide.currentSprite.blocksCache.variables = null;&#xD;            ide.currentSprite.paletteCache.variables = null;&#xD;            ide.refreshPalette();&#xD;        }&#xD;        break;&#xD;    case &apos;Inheritance support&apos;:&#xD;        if (tf != StageMorph.prototype.enableInheritance) {&#xD;            StageMorph.prototype.enableInheritance = tf;&#xD;            ide.currentSprite.blocksCache.variables = null;&#xD;            ide.currentSprite.paletteCache.variables = null;&#xD;            ide.refreshPalette();&#xD;        }&#xD;        break;&#xD;    case &apos;Hyper blocks support&apos;:&#xD;        Process.prototype.enableHyperOps = tf;&#xD;        break;&#xD;};&#xD;}&#xD;finally {&#xD;ide.savingPreferences = false;&#xD;};&#xD;</l></block><list><block var="which"/><block var="tf"/></list></block></script></block-definition><block-definition s="set value %&apos;which&apos; to %&apos;value&apos;" type="command" category="sensing"><comment x="0" y="0" w="254.66666666666666" collapsed="false">Allows changing global settings programmatically.&#xD;This block is for numeric or text settings; use&#xD;SET FLAG for Boolean (checkbox) values.&#xD;&#xD;Eisenberg&apos;s Law:  Anything you can do from the user interface you should be able to do in your program, and vice versa.  This library is just a beginning; there are many UI controls outside of the Settings menu.</comment><header></header><code></code><translations>pt:altera o valor da configuração _ para _&#xD;ca:fixa el valor de _ a _&#xD;pl:ustaw wartość _ na _&#xD;</translations><inputs><input type="%s" readonly="true"><options>Project notes&#xD;Project name&#xD;Language&#xD;Zoom blocks&#xD;Stage size&#xD;Stage scale&#xD;Visible palette</options></input><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>which</l><l>value</l></list><l>var   stage = this.parentThatIsA(StageMorph),&#xD;        ide = stage.parentThatIsA(IDE_Morph),&#xD;        world = stage.parentThatIsA(WorldMorph);&#xD;&#xD;try {&#xD;ide.savingPreferences = false;&#xD;&#xD;switch (which) {&#xD;    case &apos;Project notes&apos;:&#xD;        ide.projectNotes = value;&#xD;        break;&#xD;    case &apos;Project name&apos;:&#xD;        ide.setProjectName(value);&#xD;        break;&#xD;    case &apos;Language&apos;:&#xD;        ide.setLanguage(value);&#xD;        break;&#xD;    case &apos;Zoom blocks&apos;:&#xD;        if (!isNaN(value)) ide.setBlocksScale(Math.min(value, 12));&#xD;        break;&#xD;    case &apos;Stage size&apos;:&#xD;        if ((value instanceof List) &amp;&amp; value.length()==2&#xD;                       &amp;&amp; !isNaN(value.at(1)) &amp;&amp; !isNaN(value.at(2)))&#xD;            ide.setStageExtent(new Point(value.at(1), value.at(2)));&#xD;        break;&#xD;    case &apos;Stage scale&apos;:&#xD;        ide.toggleStageSize(value != 1, Math.max(0.1, value));&#xD;        break;&#xD;    case &apos;Visible palette&apos;:&#xD;        ide.currentCategory = value.toLowerCase();&#xD;        ide.categories.children.forEach(function (each) {&#xD;                each.refresh();&#xD;        });&#xD;        ide.refreshPalette(true);&#xD;        break;&#xD;};&#xD;}&#xD;finally {ide.savingPreferences = true;&#xD;};</l></block><list><block var="which"/><block var="value"/></list></block></script></block-definition><block-definition s="init BLE extension" type="command" category="MicroBlocks" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>__module__ble__</l><l>libraries/ble/init.js</l></block></script></block-definition><block-definition s="connect to MicroBlocks via %&apos;port type&apos;" type="command" category="MicroBlocks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" initial="1">USB<options>BLE&#xD;USB</options></input></inputs><script><block s="doSetVar"><l>__mb_buffer__</l><block s="reportNewList"><list></list></block></block><block s="doIf"><custom-block s="connected to MicroBlocks"></custom-block><script><custom-block s="disconnect from MicroBlocks"></custom-block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="port type"/><l>BLE</l></list></block><script><block s="doApplyExtension"><l>ble_connect(serviceUUID, rxUUIX, txUUID)</l><list><l>bb37a001-b922-4018-8e74-e14824b3a638</l><l>bb37a002-b922-4018-8e74-e14824b3a638</l><l>bb37a003-b922-4018-8e74-e14824b3a638</l></list></block></script><list><l><bool>true</bool></l><script><block s="doApplyExtension"><l>ser_connect(baudrate)</l><list><l>115200</l></list></block></script></list></block><block s="doWaitUntil"><custom-block s="connected to MicroBlocks"></custom-block></block><block s="doSetVar"><l>__mb_lastBroadcastTime__</l><block s="reportDate"><l><option>time in milliseconds</option></l></block></block></script></block-definition><block-definition s="broadcast %&apos;message&apos; to MicroBlocks" type="command" category="MicroBlocks" helper="true"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doIf"><custom-block s="connected to MicroBlocks"></custom-block><script><block s="doDeclareVariables"><list><l>len</l><l>bytes</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>len</l><block s="reportVariadicSum"><list><block s="reportTextAttribute"><l><option>length</option></l><block var="message"/></block><l>1</l></list></block></block><block s="doSetVar"><l>bytes</l><block s="reportNewList"><list><l>251</l><l>27</l><l>0</l><block s="reportModulus"><block var="len"/><l>256</l></block><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block var="len"/><l>256</l></block></block></list></block></block><block s="doForEach"><l>i</l><block s="reportNumbers"><l>1</l><block s="reportTextAttribute"><l><option>length</option></l><block var="message"/></block></block><script><block s="doAddToList"><block s="reportUnicode"><block s="reportLetter"><block var="i"/><block var="message"/></block></block><block var="bytes"/></block></script></block><block s="doAddToList"><l>254</l><block var="bytes"/></block></script></block><block s="doIf"><block s="reportApplyExtension"><l>ble_connected()</l><list></list></block><script><block s="doApplyExtension"><l>ble_write(data)</l><list><block var="bytes"/></list></block></script><list><block s="reportApplyExtension"><l>ser_connected()</l><list></list></block><script><block s="doApplyExtension"><l>ser_write(data)</l><list><block var="bytes"/></list></block></script></list></block></script><list></list></block></script></block-definition><block-definition s="skip to next long message" type="command" category="MicroBlocks" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>i</l><l>msgLen</l></list></block><block s="doUntil"><block s="reportListIsEmpty"><block var="__mb_buffer__"/></block><script><block s="doSetVar"><l>i</l><block s="reportListIndex"><l>251</l><block var="__mb_buffer__"/></block></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="i"/><l>0</l></list></block><script><block s="doSetVar"><l>__mb_buffer__</l><block s="reportNewList"><list></list></block></block></script><list><l><bool>true</bool></l><script><block s="doSetVar"><l>__mb_buffer__</l><block s="reportListItem"><block s="reportNumbers"><block var="i"/><block s="reportListAttribute"><l><option>length</option></l><block var="__mb_buffer__"/></block></block><block var="__mb_buffer__"/></block></block><block s="doIf"><block s="reportVariadicLessThan"><list><block s="reportListAttribute"><l><option>length</option></l><block var="__mb_buffer__"/></block><l>5</l></list></block><script><block s="doReport"><l></l><comment w="90" collapsed="true">Incomplete</comment></block></script><list></list></block><block s="doSetVar"><l>msgLen</l><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block s="reportListItem"><l>5</l><block var="__mb_buffer__"/></block><l>256</l></list></block><block s="reportListItem"><l>4</l><block var="__mb_buffer__"/></block></list></block></block><block s="doIfElse"><block s="reportVariadicAnd"><list><block s="reportVariadicLessThan"><list><block s="reportListItem"><l>2</l><block var="__mb_buffer__"/></block><l>48</l></list></block><block s="reportVariadicLessThan"><list><block var="msgLen"/><l>1024</l></list></block></list></block><script><block s="doReport"><l></l><comment w="90" collapsed="true">Valid long msg</comment></block></script><script><block s="doSetVar"><l>__mb_buffer__</l><block s="reportCDR"><block var="__mb_buffer__"/></block><comment w="113" collapsed="true">skip bad msg (unlikely)</comment></block></script></block></script></list></block></script></block></script></block-definition><block-definition s="__mb_process_data__" type="command" category="MicroBlocks" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>msgLen</l><l>msgType</l><l>msgBody</l><l>msgParts</l></list></block><block s="doIf"><block s="reportApplyExtension"><l>ble_connected()</l><list></list></block><script><block s="doSetVar"><l>__mb_buffer__</l><block s="reportConcatenatedLists"><list><block var="__mb_buffer__"/><block s="reportApplyExtension"><l>ble_read()</l><list></list></block></list></block></block></script><list><block s="reportApplyExtension"><l>ser_connected()</l><list></list></block><script><block s="doSetVar"><l>__mb_buffer__</l><block s="reportConcatenatedLists"><list><block var="__mb_buffer__"/><block s="reportApplyExtension"><l>ser_read()</l><list></list></block></list></block></block></script></list></block><block s="doIf"><block s="reportNot"><block s="reportListIsEmpty"><block var="__mb_buffer__"/></block></block><script><custom-block s="skip to next long message"></custom-block><block s="doUntil"><block s="reportVariadicLessThan"><list><block s="reportListAttribute"><l><option>length</option></l><block var="__mb_buffer__"/></block><l>5</l></list></block><script><block s="doSetVar"><l>msgLen</l><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block s="reportListItem"><l>5</l><block var="__mb_buffer__"/></block><l>256</l></list></block><block s="reportListItem"><l>4</l><block var="__mb_buffer__"/></block></list></block></block><block s="doIf"><block s="reportVariadicGreaterThanOrEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block var="__mb_buffer__"/></block><block s="reportVariadicSum"><list><block var="msgLen"/><l>5</l></list></block></list></block><script><block s="doSetVar"><l>msgType</l><block s="reportListItem"><l>2</l><block var="__mb_buffer__"/></block></block><block s="doSetVar"><l>msgBody</l><block s="reportListItem"><block s="reportNumbers"><l>6</l><block s="reportVariadicSum"><list><l>5</l><block var="msgLen"/></list></block></block><block var="__mb_buffer__"/></block></block><block s="doIf"><block s="reportVariadicAnd"><list><block s="reportVariadicEquals"><list><block var="msgType"/><l>27</l></list></block><block s="reportVariadicGreaterThan"><list><block s="reportDate"><l><option>time in milliseconds</option></l></block><block s="reportVariadicSum"><list><block var="__mb_lastBroadcastTime__"/><l>50</l></list></block></list></block></list></block><script><block s="doSetVar"><l>msgParts</l><block s="reportTextSplit"><block s="reportJoinWords"><list><block s="reportUnicodeAsLetter"><block var="msgBody"/></block></list></block><l>,</l></block></block><custom-block s="broadcast threadsafely %s %receive"><block s="reportListItem"><l>1</l><block var="msgParts"/></block><list><l><option>all</option></l><block s="reportIfElse"><block s="reportVariadicGreaterThan"><list><block s="reportListAttribute"><l><option>length</option></l><block var="msgParts"/></block><l>1</l></list></block><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block var="msgParts"/></block><l>2</l></list></block><block s="reportListItem"><l>2</l><block var="msgParts"/></block><block s="reportCDR"><block var="msgParts"/></block></block><l></l></block></list></custom-block><block s="doDeleteFromList"><l><option>all</option></l><block var="__mb_buffer__"/></block><block s="doSetVar"><l>__mb_lastBroadcastTime__</l><block s="reportDate"><l><option>time in milliseconds</option></l></block></block></script><list></list></block><block s="doIfElse"><block s="reportVariadicLessThanOrEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block var="__mb_buffer__"/></block><block s="reportVariadicSum"><list><block var="msgLen"/><l>5</l></list></block></list></block><script><block s="doSetVar"><l>__mb_buffer__</l><block s="reportNewList"><list></list></block></block></script><script><block s="doSetVar"><l>__mb_buffer__</l><block s="reportListItem"><block s="reportNumbers"><block s="reportVariadicSum"><list><block var="msgLen"/><l>6</l></list></block><block s="reportListAttribute"><l><option>length</option></l><block var="__mb_buffer__"/></block></block><block var="__mb_buffer__"/></block></block></script></block></script><list><l><bool>true</bool></l><script><block s="doReport"><l></l></block></script></list></block></script></block></script><list></list></block></script></block-definition><block-definition s="disconnect from MicroBlocks" type="command" category="MicroBlocks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doApplyExtension"><l>ble_disconnect()</l><list></list></block><block s="doApplyExtension"><l>ser_disconnect()</l><list></list></block></script></block-definition><block-definition s="connected to MicroBlocks" type="predicate" category="MicroBlocks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportVariadicOr"><list><block s="reportApplyExtension"><l>ble_connected()</l><list></list></block><block s="reportApplyExtension"><l>ser_connected()</l><list></list></block></list></block></block></script></block-definition><block-definition s="broadcast threadsafely %&apos;msg&apos; %&apos;payload&apos;" type="command" category="control" helper="true"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"><options>§_messagesMenu</options></input><input type="%receive" irreplaceable="true" initial="1"></input></inputs><script><block s="doDeclareVariables"><list><l>threadsafe</l></list></block><block s="doSetVar"><l>threadsafe</l><block s="reportApplyExtension"><l>snap_threadsafe?</l><list></list></block></block><block s="doApplyExtension"><l>snap_threadsafe(on?)</l><list><block s="reportBoolean"><l><bool>true</bool></l></block></list></block><custom-block s="actual broadcast %s %mult%s"><block var="msg"/><list><block s="reportListItem"><l>1</l><block var="payload"/></block><block s="reportListItem"><l>2</l><block var="payload"/></block></list></custom-block><block s="doApplyExtension"><l>snap_threadsafe(on?)</l><list><block var="threadsafe"/></list></block></script></block-definition><block-definition s="init extensions" type="command" category="MicroBlocks" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>__module__ble__</l><l>libraries/ble/init.js</l></block><block s="doSetVar"><l>__module__serial__</l><l>libraries/serial/init.js</l></block></script></block-definition><block-definition s="actual broadcast %&apos;#1&apos; %&apos;#2&apos;" type="command" category="control" primitive="doBroadcast" helper="true"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input><input type="%mult%s" initial="1"></input></inputs><script><block s="doPrimitive"><l><bool>true</bool></l><l>doBroadcast</l></block></script></block-definition><block-definition s="actual broadcast and wait %&apos;#1&apos; %&apos;#2&apos;" type="command" category="control" primitive="doBroadcastAndWait" helper="true"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input><input type="%mult%s" initial="1"></input></inputs><script><block s="doPrimitive"><l><bool>true</bool></l><l>doBroadcastAndWait</l></block></script></block-definition></blocks><primitives><block-definition s="broadcast %&apos;#1&apos; %&apos;#2&apos;" type="command" category="control" selector="doBroadcast"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_messagesMenu</options></input><input type="%receive" readonly="true" irreplaceable="true" expand="to&#xD;with data" max="2"></input></inputs><script><custom-block s="broadcast %s to MicroBlocks"><block var="#1"/></custom-block><custom-block s="actual broadcast %s %mult%s"><block var="#1"/><block var="#2"/></custom-block><block s="doPrimitive"><l><bool>false</bool></l><l>doBroadcast</l></block></script></block-definition><block-definition s="broadcast %&apos;#1&apos; %&apos;#2&apos; and wait" type="command" category="control" selector="doBroadcastAndWait"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_messagesMenu</options></input><input type="%receive" readonly="true" irreplaceable="true" expand="to&#xD;with data" max="2"></input></inputs><script><custom-block s="broadcast %s to MicroBlocks"><block var="#1"/></custom-block><custom-block s="actual broadcast and wait %s %mult%s"><block var="#1"/><block var="#2"/></custom-block><block s="doPrimitive"><l><bool>false</bool></l><l>doBroadcastAndWait</l></block></script></block-definition></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="true" inheritance="true" sublistIDs="false" id="963"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAQAElEQVR4AezVC27kNhAEUCP3P3SC/NZeez6SSDWb9YJg1zsjkV2vDdQfH/4jQIAAAQIEbhdQwLeTu5AAAQIECHx8ZBew3wACBAgQIFAkoICL4F1LgAABAtkCCjh3/5ITIECAQKGAAi7EdzUBAgQI5Aoo4NzdZyeXngABAsUCCrh4Aa4nQIAAgUwBBZy5d6mzBaQnQGABAQW8wBKMQIAAAQJ5Ago4b+cSE8gWkJ7AIgIKeJFFGIMAAQIEsgQUcNa+pSVAIFtA+oUEFPBCyzAKAQIECOQIKOCcXUtKgACBbIHF0ivgxRZiHAIECBDIEFDAGXuWkgABAgQWE7i5gBdLbxwCBAgQIFAkoICL4F1LgAABAtkCCvjG/buKAAECBAj8J6CA/5PwNwECBAgQuFFAAd+InX2V9AQIECDwWUABf9bwMwECBAgQuElAAd8E7ZpsAekJECDwu4AC/l3EvwkQIECAwA0CCvgGZFcQyBaQngCBnwQU8E8qPiNAgAABApMFFPBkYMcTIJAtID2BRwIK+JGMzwkQIECAwEQBBTwR19EECBDIFpD+mYACfqbjOwIECBAgMElAAU+CdSwBAgQIZAu8Sq+AXwn5ngABAgQITBBQwBNQHUmAAAECBF4J7F3Ar9L7ngABAgQIFAko4CJ41xIgQIBAtoAC3nf/khEgQIDAwgIKeOHlGI0AAQIE9hVQwPvuNjuZ9AQIEFhcQAEvviDjESBAgMCeAgp4z71KlS0gPQECDQQUcIMlGZEAAQIE9hNQwPvtVCIC2QLSE2gioICbLMqYBAgQILCXgALea5/SECCQLSB9IwEF3GhZRiVAgACBfQQU8D67lIQAAQLZAs3SK+BmCzMuAQIECOwhoID32KMUBAgQINBMYHABN0tvXAIECBAgUCSggIvgXUuAAAEC2QIKeOD+HUWAAAECBN4VUMDvSnmOAAECBAgMFFDAAzGzj5KeAAECBI4IKOAjWp4lQIAAAQKDBBTwIEjHZAtIT4AAgaMCCviomOcJECBAgMAAAQU8ANERBLIFpCdA4IyAAj6j5h0CBAgQIHBRQAFfBPQ6AQLZAtITOCuggM/KeY8AAQIECFwQUMAX8LxKgACBbAHprwgo4Ct63iVAgAABAicFFPBJOK8RIECAQLbA1fQK+Kqg9wkQIECAwAkBBXwCzSsECBAgQOCqQO8Cvpre+wQIECBAoEhAARfBu5YAAQIEsgUUcN/9m5wAAQIEGgso4MbLMzoBAgQI9BVQwH13lz259AQIEGguoICbL9D4BAgQINBTQAH33JupswWkJ0BgAwEFvMESRSBAgACBfgIKuN/OTEwgW0B6ApsIKOBNFikGAQIECPQSUMC99mVaAgSyBaTfSEABb7RMUQgQIECgj4AC7rMrkxIgQCBbYLP0CnizhYpDgAABAj0EFHCPPZmSAAECBDYTOFjAm6UXhwABAgQIFAko4CJ41xIgQIBAtoACPrB/jxIgQIAAgVECCniUpHMIECBAgMABAQV8ACv7UekJECBAYKSAAh6p6SwCBAgQIPCmgAJ+E8pj2QLSEyBAYLSAAh4t6jwCBAgQIPCGgAJ+A8kjBLIFpCdAYIaAAp6h6kwCBAgQIPBCQAG/API1AQLZAtITmCWggGfJOpcAAQIECDwRUMBPcHxFgACBbAHpZwoo4Jm6ziZAgAABAg8EFPADGB8TIECAQLbA7PQKeLaw8wkQIECAwA8CCvgHFB8RIECAAIHZAmsX8Oz0zidAgAABAkUCCrgI3rUECBAgkC2ggNfdv8kIECBAYGMBBbzxckUjQIAAgXUFFPC6u8meTHoCBAhsLqCAN1+weAQIECCwpoACXnMvpsoWkJ4AgQABBRywZBEJECBAYD0BBbzeTkxEIFtAegIhAgo4ZNFiEiBAgMBaAgp4rX2YhgCBbAHpgwQUcNCyRSVAgACBdQQU8Dq7MAkBAgSyBcLSK+CwhYtLgAABAmsIKOA19mAKAgQIEAgT+K2Aw9KLS4AAAQIEigQUcBG8awkQIEAgW0ABf9q/HwkQIECAwF0CCvguafcQIECAAIFPAgr4E0b2j9ITIECAwJ0CCvhObXcRIECAAIF/BRTwvxD+yhaQngABAncLKOC7xd1HgAABAgT+ElDAfyH4n0C2gPQECFQIKOAKdXcSIECAQLyAAo7/FQBAIFtAegJVAgq4St69BAgQIBAtoICj1y88AQLZAtJXCijgSn13EyBAgECsgAKOXb3gBAgQyBaoTq+AqzfgfgIECBCIFFDAkWsXmgABAgSqBWoLuDq9+wkQIECAQJGAAi6Cdy0BAgQIZAso4Lr9u5kAAQIEggUUcPDyRSdAgACBOgEFXGeffbP0BAgQCBdQwOG/AOITIECAQI2AAq5xd2u2gPQECBD4UMB+CQgQIECAQIGAAi5AdyWBaAHhCRD4W0AB/83gDwIECBAgcK+AAr7X220ECGQLSE/gfwEF/D+FHwgQIECAwH0CCvg+azcRIEAgW0D6LwIK+AuHfxAgQIAAgXsEFPA9zm4hQIAAgWyBb+kV8DcSHxAgQIAAgfkCCni+sRsIECBAgMA3gagC/pbeBwQIECBAoEhAARfBu5YAAQIEsgUUcMz+BSVAgACBlQQU8ErbMAsBAgQIxAgo4JhVZweVngABAqsJKODVNmIeAgQIEIgQUMARaxYyW0B6AgRWFFDAK27FTAQIECCwvYAC3n7FAhLIFpCewKoCCnjVzZiLAAECBLYWUMBbr1c4AgSyBaRfWUABr7wdsxEgQIDAtgIKeNvVCkaAAIFsgdXTK+DVN2Q+AgQIENhSQAFvuVahCBAgQGB1gbkFvHp68xEgQIAAgSIBBVwE71oCBAgQyBZQwPP272QCBAgQIPBQQAE/pPEFAQIECBCYJ6CA59lmnyw9AQIECDwVUMBPeXxJgAABAgTmCCjgOa5OzRaQngABAi8FFPBLIg8QIECAAIHxAgp4vKkTCWQLSE+AwFsCCvgtJg8RIECAAIGxAgp4rKfTCBDIFpCewNsCCvhtKg8SIECAAIFxAgp4nKWTCBAgkC0g/SEBBXyIy8MECBAgQGCMgAIe4+gUAgQIEMgWOJxeAR8m8wIBAgQIELguoICvGzqBAAECBAgcFtiqgA+n9wIBAgQIECgSUMBF8K4lQIAAgWwBBbzN/gUhQIAAgU4CCrjTtsxKgAABAtsIKOBtVpkdRHoCBAh0E1DA3TZmXgIECBDYQkABb7FGIbIFpCdAoKOAAu64NTMTIECAQHsBBdx+hQIQyBaQnkBXAQXcdXPmJkCAAIHWAgq49foMT4BAtoD0nQUUcOftmZ0AAQIE2goo4LarMzgBAgSyBbqnV8DdN2h+AgQIEGgpoIBbrs3QBAgQINBd4FoBd09vfgIECBAgUCSggIvgXUuAAAEC2QIK+Pz+vUmAAAECBE4LKODTdF4kQIAAAQLnBRTwebvsN6UnQIAAgUsCCvgSn5cJECBAgMA5AQV8zs1b2QLSEyBA4LKAAr5M6AACBAgQIHBcQAEfN/MGgWwB6QkQGCKggIcwOoQAAQIECBwTUMDHvDxNgEC2gPQEhgko4GGUDiJAgAABAu8LKOD3rTxJgACBbAHphwoo4KGcDiNAgAABAu8JKOD3nDxFgAABAtkCw9Mr4OGkDiRAgAABAq8FFPBrI08QIECAAIHhAq0KeHh6BxIgQIAAgSIBBVwE71oCBAgQyBZQwG32b1ACBAgQ2ElAAe+0TVkIECBAoI2AAm6zquxBpSdAgMBuAgp4t43KQ4AAAQItBBRwizUZMltAegIEdhRQwDtuVSYCBAgQWF5AAS+/IgMSyBaQnsCuAgp4183KRYAAAQJLCyjgpddjOAIEsgWk31lAAe+8XdkIECBAYFkBBbzsagxGgACBbIHd0yvg3TcsHwECBAgsKaCAl1yLoQgQIEBgd4HnBbx7evkIECBAgECRgAIugnctAQIECGQLKODH+/cNAQIECBCYJqCAp9E6mAABAgQIPBZQwI9tsr+RngABAgSmCijgqbwOJ0CAAAECPwso4J9dfJotID0BAgSmCyjg6cQuIECAAAEC3wUU8HcTnxDIFpCeAIFbBBTwLcwuIUCAAAECXwUU8FcP/yJAIFtAegK3CSjg26hdRIAAAQIEfgko4F8WfiJAgEC2gPS3CijgW7ldRoAAAQIE/hFQwP84+JMAAQIEsgVuT6+Abyd3IQECBAgQ+PhQwH4LCBAgQIBAgcBSBVyQ35UECBAgQKBEQAGXsLuUAAECBNIFFPAyvwEGIUCAAIEkAQWctG1ZCRAgQGAZAQW8zCqyB5GeAAECaQIKOG3j8hIgQIDAEgIKeIk1GCJbQHoCBBIFFHDi1mUmQIAAgXIBBVy+AgMQyBaQnkCqgAJO3bzcBAgQIFAqoIBL+V1OgEC2gPTJAgo4efuyEyBAgECZgAIuo3cxAQIEsgXS0yvg9N8A+QkQIECgREABl7C7lAABAgSyBT4+FHD6b4D8BAgQIFAioIBL2F1KgAABAukCyQWcvnv5CRAgQKBQQAEX4ruaAAECBHIFFHDq7uUmQIAAgVIBBVzK73ICBAgQSBVQwKmbz84tPQECBMoFFHD5CgxAgAABAokCCjhx6zJnC0hPgMASAgp4iTUYggABAgTSBBRw2sblJZAtID2BZQQU8DKrMAgBAgQIJAko4KRty0qAQLaA9EsJKOCl1mEYAgQIEEgRUMApm5aTAAEC2QLLpVfAy63EQAQIECCQIKCAE7YsIwECBAgsJ3BrAS+X3kAECBAgQKBIQAEXwbuWAAECBLIFFPBt+3cRAQIECBD4JaCAf1n4iQABAgQI3CaggG+jzr5IegIECBD4KqCAv3r4FwECBAgQuEVAAd/C7JJsAekJECDwXUABfzfxCQECBAgQmC6ggKcTu4BAtoD0BAj8LKCAf3bxKQECBAgQmCqggKfyOpwAgWwB6Qk8FlDAj218Q4AAAQIEpgko4Gm0DiZAgEC2gPTPBRTwcx/fEiBAgACBKQIKeAqrQwkQIEAgW+B1egX82sgTBAgQIEBguIACHk7qQAIECBAg8Fpg5wJ+nd4TBAgQIECgSEABF8G7lgABAgSyBRTwrvuXiwABAgSWFlDAS6/HcAQIECCwq4AC3nWz2bmkJ0CAwPICCnj5FRmQAAECBHYUUMA7blWmbAHpCRBoIaCAW6zJkAQIECCwm4AC3m2j8hDIFpCeQBsBBdxmVQYlQIAAgZ0EFPBO25SFAIFsAelbCSjgVusyLAECBAjsIqCAd9mkHAQIEMgWaJdeAbdbmYEJECBAYAcBBbzDFmUgQIAAgXYCQwu4XXoDEyBAgACBIgEFXATvWgIECBDIFlDAw/bvIAIECBAg8L6AAn7fypMECBAgQGCYgAIeRpl9kPQECBAgcExAAR/z8jQBAgQIEBgioICHMDokW0B6AgQIHBdQwMfNvEGAAAECBC4LKODLhA4gkC0gPQECv+uE6gAAAkNJREFU5wQU8Dk3bxEgQIAAgUsCCvgSn5cJEMgWkJ7AeQEFfN7OmwQIECBA4LSAAj5N50UCBAhkC0h/TUABX/PzNgECBAgQOCWggE+xeYkAAQIEsgWup1fA1w2dQIAAAQIEDgso4MNkXiBAgAABAtcFOhfw9fROIECAAAECRQIKuAjetQQIECCQLaCAu+7f3AQIECDQWkABt16f4QkQIECgq4AC7rq57LmlJ0CAQHsBBdx+hQIQIECAQEcBBdxxa2bOFpCeAIEtBBTwFmsUggABAgS6CSjgbhszL4FsAekJbCOggLdZpSAECBAg0ElAAXfallkJEMgWkH4rAQW81TqFIUCAAIEuAgq4y6bMSYAAgWyB7dIr4O1WKhABAgQIdBBQwB22ZEYCBAgQ2E7gUAFvl14gAgQIECBQJKCAi+BdS4AAAQLZAgr47f17kAABAgQIjBNQwOMsnUSAAAECBN4WUMBvU2U/KD0BAgQIjBVQwGM9nUaAAAECBN4SUMBvMXkoW0B6AgQIjBdQwONNnUiAAAECBF4KKOCXRB4gkC0gPQECcwQU8BxXpxIgQIAAgacCCvgpjy8JEMgWkJ7APAEFPM/WyQQIECBA4KGAAn5I4wsCBAhkC0g/V0ABz/V1OgECBAgQ+FFAAf/I4kMCBAgQyBaYn14Bzzd2AwECBAgQ+CaggL+R+IAAAQIECMwXWLmA56d3AwECBAgQKBJQwEXwriVAgACBbAEFvOr+zUWAAAECWwso4K3XKxwBAgQIrCrwJwAAAP//lVwoVAAAAAZJREFUAwDU5ALRcl29HAAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="964"></list></costumes><sounds><list struct="atomic" id="965"></list></sounds><variables></variables><blocks></blocks><scripts><script x="31.333333333333332" y="6.666666666666667"><block s="receiveMessage"><l>clear</l><list></list></block><block s="doAddToList"><l>    (clear) </l><block var="code"/></block></script><script x="29.166666666666668" y="73.66666666666667"><block s="receiveMessage"><l>repeat 8</l><list></list></block><block s="doAddToList"><l>    (repeat 8 (</l><block var="code"/></block></script><script x="27.166666666666668" y="143.66666666666666"><block s="receiveMessage"><l>goto center</l><list></list></block><block s="doAddToList"><l>        (goto [center]) </l><block var="code"/></block></script><script x="19" y="343.1666666666667"><block s="receiveMessage"><l>move 100</l><list></list></block><block s="doAddToList"><l>           (move 100) </l><block var="code"/></block></script><script x="16.5" y="411.5"><block s="receiveMessage"><l>right 89</l><list></list></block><block s="doAddToList"><l>            (right 89)</l><block var="code"/></block></script><script x="16.333333333333332" y="486.05555555555566"><block s="receiveMessage"><l>pen up</l><list></list></block><block s="doAddToList"><l>        (up) </l><block var="code"/></block></script><script x="25" y="208.05555555555566"><block s="receiveMessage"><l>pen down</l><list></list></block><block s="doAddToList"><l>        (down) </l><block var="code"/></block></script><script x="27.500000000000153" y="276.83333333333326"><block s="receiveMessage"><l>repeat 45</l><list></list></block><block s="doAddToList"><l>        (repeat 45 (</l><block var="code"/></block></script><script x="306.1666666666667" y="174.44444444444434"><block s="receiveMessage"><l>end repeat</l><list></list></block><block s="doAddToList"><l>    ))</l><block var="code"/></block></script><script x="300.1666666666667" y="296.8333333333335"><custom-block s="parse code %code to blocks"><l>(&#xD;    (clear) &#xD;    (repeat 8 (&#xD;        (goto [center]) &#xD;        (down) &#xD;        (repeat 45 (&#xD;            (move 100) &#xD;            (right 89)&#xD;        )) &#xD;        (up)&#xD;    ))&#xD;)</l></custom-block></script><script x="321" y="475.9444444444446"><block s="receiveMessage"><l>delete last</l><list></list></block><block s="doDeleteFromList"><l><option>last</option></l><block var="code"/></block></script></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="0" y="0" heading="127" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="209,115,0,1" pen="tip" id="1042"><costumes><list struct="atomic" id="1043"></list></costumes><sounds><list struct="atomic" id="1044"></list></sounds><blocks></blocks><variables></variables><scripts><script x="56.333333333333336" y="38.00000000000002"><custom-block s="connect to MicroBlocks via %s"><l>USB</l></custom-block></script><script x="48.66666666666671" y="269.67777777777775"><block s="receiveMessage"><l>run code</l><list></list></block><block s="doAddToList"><l>)</l><block var="code"/></block><block s="doRun"><custom-block s="parse code %code to blocks"><block s="reportJoinWords"><list><block var="code"/></list></block></custom-block><list></list></block></script><script x="53.833333333333336" y="121.67777777777776"><block s="receiveGo"></block><block s="clear"></block><block s="doSetVar"><l>code</l><block s="reportNewList"><list></list></block></block><block s="doAddToList"><l>(</l><block var="code"/></block></script><script x="297.6666666666667" y="41.22222222222225"><custom-block s="connected to MicroBlocks"></custom-block></script></scripts></sprite><watcher var="code blocks" style="normal" x="10.00000000000012" y="10" color="243,118,29" hidden="true"/><watcher var="code" style="normal" x="12.000000000000169" y="19.500001999999963" color="243,118,29" extX="120" extY="105"/></sprites></stage><variables><variable name="code blocks"><l>0</l></variable><variable name="code"><list struct="atomic" id="1082">(</list></variable><variable name="__module__ble__" hidden="true"><l>libraries/ble/init.js</l></variable><variable name="__mb_buffer__" hidden="true"><list struct="atomic" id="1083"></list></variable><variable name="__mb_lastBroadcastTime__" hidden="true"><l>1756657436029</l></variable><variable name="__mb_serial_port__" hidden="true"><l></l></variable><variable name="__module__serial__" hidden="true"><l>libraries/serial/init.js</l></variable></variables></scene></scenes></project><media name="Voice recognition" app="Snap! 11.0.0, https://snap.berkeley.edu" version="2"></media></snapdata>