<snapdata remixID="11348093"><project name="MW web" app="Snap! 7, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAAAXNSR0IArs4c6QAABBBJREFUeF7t2bFLFgEch/HfKy+I4hKIkLQ4KC066KDg5CzmIryIg4vD+6KLLkIIQrgopQ1SrQ1CgqBDs1uKi4GDg6D/gUkaGYi8cddUEXe5PPDec6Pe8X3veT+86lmq1+v18LAAVKAkQKi8s2kBAQoBLSBANL/jAtQAWkCAaH7HBagBtIAA0fyOC1ADaAEBovkdF6AG0AICRPM7LkANoAUEiOZ3XIAaQAsIEM3vuAA1gBYQIJrfcQFqAC0gQDS/4wLUAFpAgGh+xwWoAbSAANH8jgtQA2gBAaL5HRegBtACAkTzOy5ADaAFBIjmd1yAGkALCBDN77gANYAWECCa33EBagAtIEA0v+MC1ABaQIBofscFqAG0gADR/I4LUANoAQGi+R0XoAbQAgJE8zsuQA2gBQSI5ndcgBpACwgQze+4ADWAFhAgmt9xAWoALSBANL/jAtQAWkCAaH7HBagBtIAA0fyOC1ADaAEBovkdF6AG0AICRPM7LkANoAUEiOZ3XIAaQAsIEM3vuAA1gBYQIJrfcQFqAC0gQDS/4wLUAFpAgGh+xwWoAbSAANH8jgtQA2gBAaL5HRegBtACAkTzOy5ADaAFBIjmd1yAGkALCBDN77gANYAWECCa33EBagAtIEA0v+MC1ABaQIBofscFqAG0gADR/I4LUANoAQGi+R0XoAbQAgJE8zsuQA2gBQSI5ndcgBpACwgQze+4ADWAFhAgmt9xAWoALSBANL/jAtQAWkCAaH7HBagBtEAmwNHR0VheXo7e3t5oaWl50It9+awcjyvvY2pq6kHXe1HjFsgEuLOzE1tbW2mB+/v76OrqilqtFj09PdHU1JS7zLdXj6KtrS1+3P6I5x9vo/b2c3R3d+e+3hMbs0AmwOS2k0/Ak5OTvwpcXV1FpVKJ8fHx6OzszCxUf/ckSqXSr/PqEVGK+PL1e7w4fhqvP3zKvN4TGq9ALoAzMzNxeXn5293f3d1Fe3t7TE9Px8jISK4yAsyVqVAnZQJcW1uLw8PDSMB1dHTEwMBAzM7O/nekP38EV98cpz/GPYpdIBPgwsJCrKysRGtr64NL+UfIg9M1/IWZABu+gDeIFhAgmt9xAWoALZALYPKoZXt7O32hS0tL6e+Ei4uLsbq6muvFJ79Hrq+vx+bmZvos8Pr6Ovr7+2N4eDh9LJN8/eLiIj3Ho1gFcgHc39+PoaGhaG5uTh8+J1DOz8+jr68vqtVqZrGNjY2Yn5+Po6OjGBwcjLOzs/Qv4MnJyZibm4tyuRwHBwfpOR7FKpALYJJkb28vdnd3Y2xsLCYmJtJPwOQ/GckzwqzjXwBvbm7SS09PTwWYFbFBv58bYIPev7cFFxAg/AYUfV6ARRcA378A4Teg6PMCLLoA+P5/AsElfbcbeB7SAAAAAElFTkSuQmCC</thumbnail><scenes select="1"><scene name="MW web"><notes></notes><palette><category name="Project" color="0,5,1,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="Draw line from %&apos;P0&apos; to %&apos;P1&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="up"></block><block s="doGotoObject"><block var="P0"/></block><block s="down"></block><block s="doGotoObject"><block var="P1"/></block><block s="up"></block></script></block-definition><block-definition s="for %&apos;i&apos; = %&apos;start&apos; to %&apos;end&apos; by %&apos;step&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations>de:für _ = _ bis _ _ca:per _ = _ fins _ _es:para _ = _ hasta _ _fr:pour _ allant de _ à _ _&#xD;</translations><inputs><input type="%upvar"></input><input type="%n">1</input><input type="%n">10</input><input type="%n">1</input><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>tester</l></list></block><block s="doIfElse"><block s="reportGreaterThan"><block var="start"/><block var="end"/></block><script><block s="doSetVar"><l>tester</l><block s="reifyReporter"><autolambda><block s="reportLessThan"><block var="i"/><block var="end"/></block></autolambda><list></list></block></block></script><script><block s="doSetVar"><l>tester</l><block s="reifyReporter"><autolambda><block s="reportGreaterThan"><block var="i"/><block var="end"/></block></autolambda><list></list></block></block></script></block><block s="doSetVar"><l>i</l><block var="start"/></block><block s="doUntil"><block s="evaluate"><block var="tester"/><list></list></block><script><block s="doRun"><block var="action"/><list></list></block><block s="doChangeVar"><l>i</l><block var="step"/></block></script></block></script></block-definition><block-definition s="pixel $rectangleSolid or $rectangle %&apos;fill&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%b"></input></inputs><script><block s="doIf"><block var="fill"/><script><block s="doDeclareVariables"><list><l>old position</l></list></block><block s="doSetVar"><l>old position</l><block s="reportNewList"><list><block s="xPosition"></block><block s="yPosition"></block></list></block></block><block s="up"></block><block s="changeXPosition"><block s="reportQuotient"><block var="PIXEL"/><l>-2</l></block></block><block s="down"></block><block s="changeXPosition"><block var="PIXEL"/></block><block s="up"></block><block s="doGotoObject"><block var="old position"/></block></script></block></script></block-definition><block-definition s="Filled?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportTouchingColor"><color>255,255,255,1</color></block></block></script></block-definition><block-definition s="%&apos;A&apos; xor %&apos;B&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%b"></input><input type="%b"></input></inputs><script><block s="doReport"><block s="reportNot"><block s="reportEquals"><block var="A"/><block var="B"/></block></block></block></script></block-definition><block-definition s="xor of N and NW" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>N</l><l>NW</l></list></block><block s="changeYPosition"><block var="PIXEL"/></block><block s="doSetVar"><l>N</l><custom-block s="Filled?"></custom-block></block><block s="changeXPosition"><block s="reportDifference"><l>0</l><block var="PIXEL"/></block></block><block s="doSetVar"><l>NW</l><custom-block s="Filled?"></custom-block></block><block s="changeXPosition"><block var="PIXEL"/></block><block s="changeYPosition"><block s="reportDifference"><l>0</l><block var="PIXEL"/></block></block><block s="doReport"><custom-block s="%b xor %b"><block var="N"/><block var="NW"/></custom-block></block></script></block-definition><block-definition s="numbers from %&apos;from&apos; to %&apos;to&apos;" type="reporter" category="lists"><header></header><code></code><translations>de:Zahlen von _ bis _ca:nombres des de _ a _es:números de _ a _fr:nombres de _ à _&#xD;</translations><inputs><input type="%n">1</input><input type="%n">10</input></inputs><script><block s="doIf"><block s="reportGreaterThan"><block var="from"/><block var="to"/></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportCONS"><block var="from"/><custom-block s="numbers from %n to %n"><block s="reportVariadicSum"><list><block var="from"/><l>1</l></list></block><block var="to"/></custom-block></block></block></script></block-definition><block-definition s="map %&apos;func&apos; over %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations>de:wende _ an auf _ca:mapeja _ sobre _es:mapear _ sobre _fr:appliquer _ à _&#xD;</translations><inputs><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doIf"><custom-block s="empty? %l"><block var="data"/></custom-block><script><block s="doReport"><block var="data"/></block></script></block><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="func"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><custom-block s="map %repRing over %l"><block var="func"/><block s="reportCDR"><block var="data"/></block></custom-block></block></block></script></block-definition><block-definition s="sort %&apos;data&apos; ordering with %&apos;function&apos;" type="reporter" category="lists"><comment x="0" y="0" w="204" collapsed="false">Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot.  For a list of numbers, using &lt; as the comparison function will sort from low to high; using &gt; will sort from high to low.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%predRing"></input></inputs><script><block s="doDeclareVariables"><list><l>even items</l><l>odd items</l><l>merge</l></list></block><block s="doSetVar"><l>odd items</l><block s="reifyScript"><script><block s="doIf"><block s="reportEquals"><l></l><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><l/></block><block s="evaluate"><block var="even items"/><list><block s="reportCDR"><l/></block></list></block></block></block></script><list></list></block></block><block s="doSetVar"><l>even items</l><block s="reifyScript"><script><block s="doIf"><block s="reportEquals"><l></l><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="evaluate"><block var="odd items"/><list><block s="reportCDR"><l/></block></list></block></block></script><list></list></block></block><block s="doSetVar"><l>merge</l><block s="reifyScript"><script><block s="doIf"><block s="reportEquals"><block var="#1"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block var="#2"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="#2"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block var="#1"/></block></script></block><block s="doIfElse"><block s="evaluate"><block var="function"/><list><block s="reportListItem"><l>1</l><block var="#1"/></block><block s="reportListItem"><l>1</l><block var="#2"/></block></list></block><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="#1"/></block><block s="evaluate"><block var="merge"/><list><block s="reportCDR"><block var="#1"/></block><block var="#2"/></list></block></block></block></script><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="#2"/></block><block s="evaluate"><block var="merge"/><list><block var="#1"/><block s="reportCDR"><block var="#2"/></block></list></block></block></block></script></block></script><list><l>#1</l><l>#2</l></list></block></block><block s="doIf"><block s="reportEquals"><block var="data"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportCDR"><block var="data"/></block><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block var="data"/></block></script></block><block s="doReport"><block s="evaluate"><block var="merge"/><list><custom-block s="sort %l ordering with %predRing"><block s="evaluate"><block var="odd items"/><list><block var="data"/></list></block><block var="function"/></custom-block><custom-block s="sort %l ordering with %predRing"><block s="evaluate"><block var="even items"/><list><block var="data"/></list></block><block var="function"/></custom-block></list></block></block></script></block-definition><block-definition s="assoc %&apos;key&apos; %&apos;a-list&apos;" type="reporter" category="lists"><comment x="0" y="0" w="289.3333333333333" collapsed="false">The second input is an &quot;association list,&quot; a list of two-item lists.  Each of those smaller lists has a &quot;key&quot; as its first item and a &quot;value&quot; as its second.  ASSOC reports the first key-value pair in the association list whose key matches the first input.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="a-list"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="key"/><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="a-list"/></block></block></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="a-list"/></block></block></script></block><block s="doReport"><custom-block s="assoc %s %l"><block var="key"/><block s="reportCDR"><block var="a-list"/></block></custom-block></block></script></block-definition><block-definition s="%&apos;#&apos; for each %&apos;item&apos; of %&apos;data&apos; %&apos;action&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%upvar"></input><input type="%l"></input><input type="%cs"></input></inputs><script><block s="doSetVar"><l>#</l><l>1</l></block><block s="doUntil"><custom-block s="empty? %l"><block var="data"/></custom-block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><l>1</l><block var="data"/></block></block><block s="doRun"><block var="action"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><block s="doSetVar"><l>data</l><block s="reportCDR"><block var="data"/></block></block><block s="doChangeVar"><l>#</l><l>1</l></block></script></block></script></block-definition><block-definition s="Go to top left corner" type="command" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="gotoXY"><block s="reportVariadicProduct"><list><block s="reportQuotient"><block s="reportDifference"><block s="reportQuotient"><block s="reportListItem"><l>1</l><custom-block s="setting %s"><l>Stage size</l></custom-block></block><block var="PIXEL"/></block><l>1</l></block><l>-2</l></block><block var="PIXEL"/></list></block><block s="reportVariadicProduct"><list><block s="reportQuotient"><block s="reportDifference"><block s="reportQuotient"><block s="reportListItem"><l>2</l><custom-block s="setting %s"><l>Stage size</l></custom-block></block><block var="PIXEL"/></block><l>1</l></block><l>2</l></block><block var="PIXEL"/></list></block></block></script></block-definition><block-definition s="odd? %&apos;X&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportEquals"><block s="reportModulus"><block var="X"/><l>2</l></block><l>1</l></block></block></script></block-definition><block-definition s="Go to top center" type="command" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="gotoXY"><l>0</l><block s="reportVariadicProduct"><list><block s="reportQuotient"><block s="reportDifference"><block s="reportQuotient"><block s="reportListItem"><l>2</l><custom-block s="setting %s"><l>Stage size</l></custom-block></block><block var="PIXEL"/></block><l>1</l></block><l>2</l></block><block var="PIXEL"/></list></block></block></script></block-definition><block-definition s="Center Line %&apos;length&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="forward"><block s="reportVariadicProduct"><list><block s="reportQuotient"><block s="reportDifference"><block var="length"/><l>1</l></block><l>2</l></block><block var="PIXEL"/></list></block></block><block s="turnLeft"><l>180</l></block><block s="doRepeat"><block s="reportDifference"><block var="length"/><l>1</l></block><script><custom-block s="pixel $rectangleSolid or $rectangle %b"><l><bool>true</bool></l></custom-block><block s="forward"><block var="PIXEL"/></block></script></block><custom-block s="pixel $rectangleSolid or $rectangle %b"><l><bool>true</bool></l></custom-block><block s="turnLeft"><l>180</l></block><block s="forward"><block s="reportVariadicProduct"><list><block s="reportQuotient"><block s="reportDifference"><block var="length"/><l>1</l></block><l>2</l></block><block var="PIXEL"/></list></block></block></script><scripts><script x="161.5" y="274.1"><custom-block s="Center Line %s"><l>2</l></custom-block></script><script x="203.5" y="143.10000000000002"><block s="forward"><block s="reportVariadicProduct"><list><block s="reportQuotient"><block s="reportDifference"><l>3</l><l>1</l></block><l>2</l></block><block var="PIXEL"/></list></block></block></script></scripts></block-definition><block-definition s="PIXEL move %&apos;steps&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doRepeat"><block var="steps"/><script><custom-block s="pixel $rectangleSolid or $rectangle %b"><l><bool>true</bool></l></custom-block><block s="forward"><block var="PIXEL"/></block></script></block><custom-block s="pixel $rectangleSolid or $rectangle %b"><l><bool>true</bool></l></custom-block></script></block-definition><block-definition s="Turn pixel ( %&apos;x&apos; , %&apos;y&apos; ) on" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="gotoXY"><block s="reportVariadicProduct"><list><block var="x"/><block var="PIXEL"/></list></block><block s="reportVariadicProduct"><list><block var="y"/><block var="PIXEL"/></list></block></block><custom-block s="pixel $rectangleSolid or $rectangle %b"><l><bool>true</bool></l></custom-block></script></block-definition><block-definition s="Checker %&apos;N&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><custom-block s="for %upvar = %n to %n %cs"><l>y</l><l>0</l><block s="reportDifference"><block var="N"/><l>1</l></block><script><custom-block s="for %upvar = %n to %n %cs"><l>x</l><l>0</l><block s="reportDifference"><block var="N"/><l>1</l></block><script><block s="doIf"><block s="reportEquals"><block s="reportModulus"><block s="reportVariadicSum"><list><block var="x"/><block var="y"/></list></block><l>2</l></block><l>0</l></block><script><custom-block s="Turn pixel ( %n , %n ) on"><block var="x"/><block var="y"/></custom-block></script></block></script></custom-block></script></custom-block></script><scripts><script x="30" y="226.93333333333337"><block s="reportOr"><block s="reportEquals"><block s="reportModulus"><block var="x"/><l>2</l></block><l>1</l></block><block s="reportEquals"><block s="reportModulus"><block var="y"/><l>2</l></block><l>1</l></block></block></script><script x="46.000001" y="257.9333393333334"><block s="reportVariadicSum"><list><l></l><l></l></list></block></script><script x="196.2958994375" y="263.9333393333334"><block var="x"/></script></scripts></block-definition><block-definition s="Mandelbrot %&apos;max iteration&apos; Iterations %&apos;x0&apos; %&apos;y0&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>x</l><l>y</l><l>iteration</l><l>xtemp</l></list></block><block s="doSetVar"><l>x</l><l>0</l></block><block s="doSetVar"><l>y</l><l>0</l></block><block s="doSetVar"><l>iteration</l><l>0</l></block><block s="doUntil"><block s="reportNot"><block s="reportAnd"><block s="reportLessThan"><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block var="x"/><block var="x"/></list></block><block s="reportVariadicProduct"><list><block var="y"/><block var="y"/></list></block></list></block><l>4</l></block><block s="reportLessThan"><block var="iteration"/><block var="max iteration"/></block></block></block><script><block s="doSetVar"><l>xtemp</l><block s="reportVariadicSum"><list><block s="reportDifference"><block s="reportVariadicProduct"><list><block var="x"/><block var="x"/></list></block><block s="reportVariadicProduct"><list><block var="y"/><block var="y"/></list></block></block><block var="x0"/></list></block></block><block s="doSetVar"><l>y</l><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><l>2</l><block s="reportVariadicProduct"><list><block var="x"/><block var="y"/></list></block></list></block><block var="y0"/></list></block></block><block s="doSetVar"><l>x</l><block var="xtemp"/></block><block s="doChangeVar"><l>iteration</l><l>1</l></block></script></block></script></block><block s="doReport"><block var="iteration"/></block></script></block-definition><block-definition s="$flash Mandelbrot %&apos;maxiters&apos; Iterations %&apos;x0&apos; %&apos;y0&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>maxiters</l><l>x0</l><l>y0</l></list><l>var x,y,iteration,xtemp;x=0;y=0;iteration=0;while ((x*x+y*y &lt; 4) &amp;&amp; (iteration &lt; +maxiters)) {  xtemp = ((x*x) - (y*y)) + +x0;  y = (2*x*y) + +y0;  x = xtemp;  iteration = iteration + 1;}return iteration;</l></block><list><block var="maxiters"/><block var="x0"/><block var="y0"/></list></block></block></script></block-definition><block-definition s="for %&apos;i&apos; = %&apos;start&apos; to %&apos;end&apos; by %&apos;step&apos; loop? %&apos;loop?&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations>de:für _ = _ bis _ _ca:per _ = _ fins _ _es:para _ = _ hasta _ _fr:pour _ allant de _ à _ _&#xD;</translations><inputs><input type="%upvar"></input><input type="%n">1</input><input type="%n">10</input><input type="%n">1</input><input type="%b"></input><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>tester</l><l>reverse tester</l></list></block><block s="doIfElse"><block s="reportGreaterThan"><block var="start"/><block var="end"/></block><script><block s="doSetVar"><l>tester</l><block s="reifyReporter"><autolambda><block s="reportLessThan"><block var="i"/><block var="end"/></block></autolambda><list></list></block></block><block s="doSetVar"><l>reverse tester</l><block s="reifyReporter"><autolambda><block s="reportGreaterThan"><block s="reportDifference"><block var="i"/><block var="step"/></block><block var="start"/></block></autolambda><list></list></block></block></script><script><block s="doSetVar"><l>tester</l><block s="reifyReporter"><autolambda><block s="reportGreaterThan"><block var="i"/><block var="end"/></block></autolambda><list></list></block></block><block s="doSetVar"><l>reverse tester</l><block s="reifyReporter"><autolambda><block s="reportLessThan"><block s="reportDifference"><block var="i"/><block var="step"/></block><block var="start"/></block></autolambda><list></list></block></block></script></block><block s="doSetVar"><l>i</l><block var="start"/></block><block s="doUntil"><block s="evaluate"><block var="tester"/><list></list></block><script><block s="doRun"><block var="action"/><list></list></block><block s="doChangeVar"><l>i</l><block var="step"/></block></script></block><block s="doIf"><block var="loop?"/><script><block s="doChangeVar"><l>i</l><block s="reportDifference"><l>0</l><block var="step"/></block></block><block s="doChangeVar"><l>i</l><block s="reportDifference"><l>0</l><block var="step"/></block></block><block s="doUntil"><block s="evaluate"><block var="reverse tester"/><list></list></block><script><block s="doRun"><block var="action"/><list></list></block><block s="doChangeVar"><l>i</l><block s="reportDifference"><l>0</l><block var="step"/></block></block></script></block></script></block></script></block-definition><block-definition s="pic... %&apos;filename&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>filename</l></list><l>var stage = this.parentThatIsA(StageMorph);var ide = this.parentThatIsA(IDE_Morph);ide.saveCanvasAs(stage.fullImageClassic(), filename);</l></block><list><block var="filename"/></list></block></script></block-definition><block-definition s="Mandelbrot!!" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>PIXEL</l><block s="reportListItem"><l>2</l><custom-block s="setting %s"><l>Stage size</l></custom-block></block></block><block s="doUntil"><block s="reportLessThan"><block var="PIXEL"/><l>1</l></block><script><block s="doWarp"><script><block s="setSize"><block var="PIXEL"/></block><block s="doDeclareVariables"><list><l>iterations</l><l>rows</l><l>cols</l><l>zoomscale</l></list></block><block s="doSetVar"><l>cols</l><block s="reportQuotient"><block s="reportListItem"><l>2</l><custom-block s="setting %s"><l>Stage size</l></custom-block></block><block var="PIXEL"/></block></block><block s="doSetVar"><l>rows</l><block s="reportQuotient"><block s="reportListItem"><l>1</l><custom-block s="setting %s"><l>Stage size</l></custom-block></block><block var="PIXEL"/></block></block><block s="doSetVar"><l>zoomscale</l><block s="reportQuotient"><block var="cols"/><l>3</l></block></block><block s="setHeading"><l>90</l></block><custom-block s="for %upvar = %n to %n by %n %cs"><l>y</l><block s="reportQuotient"><block s="reportDifference"><block var="rows"/><l>1</l></block><l>-2</l></block><block s="reportQuotient"><block s="reportDifference"><block var="rows"/><l>1</l></block><l>2</l></block><l>1</l><script><custom-block s="for %upvar = %n to %n by %n %cs"><l>x</l><block s="reportQuotient"><block s="reportDifference"><block var="cols"/><l>1</l></block><l>-2</l></block><block s="reportQuotient"><block s="reportDifference"><block var="cols"/><l>1</l></block><l>2</l></block><l>1</l><script><block s="gotoXY"><block s="reportVariadicProduct"><list><block var="x"/><block var="PIXEL"/></list></block><block s="reportVariadicProduct"><list><block var="y"/><block var="PIXEL"/></list></block></block><block s="doSetVar"><l>iterations</l><custom-block s="$flash Mandelbrot %n Iterations %n %n"><block var="MAX ITERATIONS"/><block s="reportVariadicSum"><list><block s="reportQuotient"><block s="reportQuotient"><block var="x"/><block var="zoomscale"/></block><block var="ZOOM"/></block><block s="reportListItem"><l>1</l><block var="CENTER"/></block></list></block><block s="reportVariadicSum"><list><block s="reportQuotient"><block s="reportQuotient"><block var="y"/><block var="zoomscale"/></block><block var="ZOOM"/></block><block s="reportListItem"><l>2</l><block var="CENTER"/></block></list></block></custom-block></block><custom-block s="set pen color to h: %n s: %n v: %n"><block s="reportQuotient"><block s="reportModulus"><block s="reportVariadicSum"><list><block var="iterations"/><block s="reportVariadicProduct"><list><l>68</l><block s="reportQuotient"><block var="MAX ITERATIONS"/><l>100</l></block></list></block></list></block><block var="MAX ITERATIONS"/></block><block var="MAX ITERATIONS"/></block><l>1</l><custom-block s="if %b then %anyUE else %anyUE"><block s="reportEquals"><block var="iterations"/><block var="MAX ITERATIONS"/></block><l>0</l><l>1</l></custom-block></custom-block><custom-block s="pixel $rectangleSolid or $rectangle %b"><l><bool>true</bool></l></custom-block></script></custom-block></script></custom-block></script></block><block s="doSetVar"><l>PIXEL</l><block s="reportQuotient"><block var="PIXEL"/><l>3</l></block></block></script></block><block s="doSetVar"><l>PIXEL</l><l>1</l></block></script></block-definition><block-definition s="Draw Grid" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="clear"></block><custom-block s="set pen color to r: %n g: %n b: %n"><l>255</l><l>255</l><l>255</l></custom-block><block s="doIf"><block s="reportGreaterThan"><block var="PIXEL"/><l>1</l></block><script><block s="setSize"><l>.333</l></block><custom-block s="set flag %s to %b"><l>Flat line ends</l><l><bool>true</bool></l></custom-block><block s="doDeclareVariables"><list><l>X min</l><l>X max</l><l>Y min</l><l>Y max</l></list></block><block s="doSetVar"><l>X min</l><block s="reportQuotient"><block s="reportListItem"><l>1</l><custom-block s="setting %s"><l>Stage size</l></custom-block></block><l>-2</l></block></block><block s="doSetVar"><l>X max</l><block s="reportQuotient"><block s="reportListItem"><l>1</l><custom-block s="setting %s"><l>Stage size</l></custom-block></block><l>2</l></block></block><block s="doSetVar"><l>Y min</l><block s="reportQuotient"><block s="reportListItem"><l>2</l><custom-block s="setting %s"><l>Stage size</l></custom-block></block><l>-2</l></block></block><block s="doSetVar"><l>Y max</l><block s="reportQuotient"><block s="reportListItem"><l>2</l><custom-block s="setting %s"><l>Stage size</l></custom-block></block><l>2</l></block></block><block s="doWarp"><script><custom-block s="for %upvar = %n to %n by %n %cs"><l>x</l><block var="X min"/><block var="X max"/><block var="PIXEL"/><script><custom-block s="Draw line from %l to %l"><block s="reportNewList"><list><block var="x"/><block var="Y min"/></list></block><block s="reportNewList"><list><block var="x"/><block var="Y max"/></list></block></custom-block></script></custom-block><custom-block s="for %upvar = %n to %n by %n %cs"><l>y</l><block var="Y min"/><block var="Y max"/><block var="PIXEL"/><script><custom-block s="Draw line from %l to %l"><block s="reportNewList"><list><block var="X min"/><block var="y"/></list></block><block s="reportNewList"><list><block var="X max"/><block var="y"/></list></block></custom-block></script></custom-block></script></block></script></block><block s="setSize"><block var="PIXEL"/></block><block s="gotoXY"><l>0</l><l>0</l></block><custom-block s="pixel $rectangleSolid or $rectangle %b"><l><bool>false</bool></l></custom-block></script></block-definition><block-definition s="Mandelbrot iterations at C= %&apos;C&apos; capped at %&apos;max iterations&apos;" type="reporter" category="other"><comment x="0" y="0" w="90" collapsed="false">f(z,c) = z^2 + c</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>iterations so far</l><l>Z</l></list></block><block s="doSetVar"><l>Z</l><custom-block s="COMPLEX 0"></custom-block></block><block s="doSetVar"><l>iterations so far</l><l>0</l></block><block s="doWarp"><script><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="iterations so far"/><block var="max iterations"/></block><custom-block s="COMPLEX %s &gt; 2 from origin"><block var="Z"/></custom-block></block><script><block s="doSetVar"><l>Z</l><custom-block s="COMPLEX f( z= %s , c= %s )"><block var="Z"/><block var="C"/></custom-block></block><block s="doChangeVar"><l>iterations so far</l><l>1</l></block></script></block></script></block><block s="doReport"><block var="iterations so far"/></block></script></block-definition><block-definition s="COMPLEX f( z= %&apos;z&apos; , c= %&apos;c&apos; )" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="COMPLEX %s + %s"><custom-block s="COMPLEX %s * %s"><block var="z"/><block var="z"/><variables><variable name="a"><l>0</l></variable><variable name="b"><l>0</l></variable><variable name="c"><l>0</l></variable><variable name="d"><l>0</l></variable></variables></custom-block><block var="c"/></custom-block></block></script></block-definition><block-definition s="COMPLEX %&apos;Z1&apos; * %&apos;Z2&apos;" type="reporter" category="other"><comment x="0" y="0" w="253" collapsed="false">(a+bi) * (c+di) = ac + bci + adi + bdii = ac-bd + (bc+ad)i</comment><variables><list struct="atomic" id="1322">a,b,c,d</list></variables><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doIfElse"><block var="COMPLEX?"/><script><block s="doSetVar"><l>a</l><block s="reportListItem"><l>1</l><block var="Z1"/></block></block><block s="doSetVar"><l>b</l><block s="reportListItem"><l>2</l><block var="Z1"/></block></block><block s="doSetVar"><l>c</l><block s="reportListItem"><l>1</l><block var="Z2"/></block></block><block s="doSetVar"><l>d</l><block s="reportListItem"><l>2</l><block var="Z2"/></block></block><block s="doReport"><block s="reportNewList"><list><block s="reportDifference"><block s="reportVariadicProduct"><list><block var="a"/><block var="c"/></list></block><block s="reportVariadicProduct"><list><block var="b"/><block var="d"/></list></block></block><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block var="b"/><block var="c"/></list></block><block s="reportVariadicProduct"><list><block var="a"/><block var="d"/></list></block></list></block></list></block></block></script><script><block s="doReport"><block s="reportVariadicProduct"><list><block var="Z1"/><block var="Z2"/></list></block></block></script></block></script></block-definition><block-definition s="COMPLEX 0" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportIfElse"><block var="COMPLEX?"/><block s="reportNewList"><list><l>0</l><l>0</l></list></block><l>0</l></block></block></script><scripts><script x="56.5" y="79.1"><block s="doReport"><l>0</l></block></script></scripts></block-definition><block-definition s="COMPLEX %&apos;Z1&apos; + %&apos;Z2&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="if %b then %anyUE else %anyUE"><block var="COMPLEX?"/><custom-block s="%upvar map %repRing over %mult%l"><l>#</l><block s="reifyReporter"><autolambda><block s="reportVariadicSum"><list><l></l><l></l></list></block></autolambda><list></list></block><list><block var="Z1"/><block var="Z2"/></list></custom-block><block s="reportVariadicSum"><list><block var="Z1"/><block var="Z2"/></list></block></custom-block></block></script></block-definition><block-definition s="COMPLEX %&apos;C&apos; &gt; 2 from origin" type="predicate" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportGreaterThan"><custom-block s="if %b then %anyUE else %anyUE"><block var="COMPLEX?"/><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block s="reportListItem"><l>1</l><block var="C"/></block><block s="reportListItem"><l>1</l><block var="C"/></block></list></block><block s="reportVariadicProduct"><list><block s="reportListItem"><l>2</l><block var="C"/></block><block s="reportListItem"><l>2</l><block var="C"/></block></list></block></list></block><block s="reportVariadicProduct"><list><block var="C"/><block var="C"/></list></block></custom-block><l>4</l></block></block></script></block-definition><block-definition s="label pixel %&apos;text&apos; aligned %&apos;alignment&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%s">center&#xD;        <options>left=1center=2right=3</options></input></inputs><script><block s="doSetVar"><l>DEBUG</l><block var="alignment"/></block><block s="doDeclareVariables"><list><l>old direction</l><l>old position</l><l>size</l></list></block><block s="doSetVar"><l>size</l><block s="reportVariadicProduct"><list><block var="PIXEL"/><block s="reportQuotient"><l>1.2</l><block s="reportStringSize"><block var="text"/></block></block></list></block></block><block s="doSetVar"><l>old direction</l><block s="direction"></block></block><block s="doSetVar"><l>old position</l><block s="reportNewList"><list><block s="xPosition"></block><block s="yPosition"></block></list></block></block><block s="setHeading"><l>90</l></block><block s="changeXPosition"><block s="reportVariadicProduct"><list><block s="reportListItem"><block var="alignment"/><block s="reportNewList"><list><l>0</l><l>-0.3</l><l>-0.6</l></list></block></block><block s="reportVariadicProduct"><list><block var="size"/><block s="reportStringSize"><block var="text"/></block></list></block></list></block></block><block s="changeYPosition"><block s="reportQuotient"><block var="size"/><l>-3</l></block></block><custom-block s="label %txt of size %n"><block var="text"/><block var="size"/></custom-block><block s="setHeading"><block var="old direction"/></block><block s="doGotoObject"><block var="old position"/></block></script><scripts><script x="227.5" y="263.09999999999997"><custom-block s="set pen color to r: %n g: %n b: %n"><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block></custom-block><custom-block s="label pixel %txt aligned %s"><l>1</l><l>2</l></custom-block><custom-block s="set pen color to r: %n g: %n b: %n"><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block></custom-block><custom-block s="label pixel %txt aligned %s"><l>22</l><l>2</l></custom-block><custom-block s="set pen color to r: %n g: %n b: %n"><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block></custom-block><custom-block s="label pixel %txt aligned %s"><l>333</l><l>2</l></custom-block><custom-block s="set pen color to r: %n g: %n b: %n"><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block></custom-block><custom-block s="label pixel %txt aligned %s"><l>4444</l><l>2</l></custom-block><custom-block s="set pen color to r: %n g: %n b: %n"><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block></custom-block><custom-block s="label pixel %txt aligned %s"><l>55555</l><l>2</l></custom-block><custom-block s="set pen color to r: %n g: %n b: %n"><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block></custom-block><custom-block s="label pixel %txt aligned %s"><l>666666</l><l>2</l></custom-block><custom-block s="set pen color to r: %n g: %n b: %n"><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block></custom-block><custom-block s="label pixel %txt aligned %s"><l>7777777</l><l>2</l></custom-block></script><script x="323.000002" y="105.50000299999999"><block s="reportListItem"><l>1</l><block s="reportNewList"><list><l>1.2</l><l>0.7</l><l>0.45</l><l>0.32</l><l>0.25</l><l>0.2</l><l>0.17</l></list></block></block></script></scripts></block-definition><block-definition s="round to tenths %&apos;x&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportQuotient"><block s="reportRound"><block s="reportVariadicProduct"><list><block var="x"/><l>10</l></list></block></block><l>10</l></block></block></script><scripts><script x="37" y="82.09999999999997"><custom-block s="round to tenths %n"><l>1.26</l></custom-block></script></scripts></block-definition><block-definition s="add %&apos;n&apos; to %&apos;n2&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="reportVariadicSum"><list><block var="n"/><block var="n2"/></list></block></block></script></block-definition><block-definition s="improved: number %&apos;n&apos; dot cut %&apos;d&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt">12.3456789</input><input type="%txt">3</input></inputs><script><block s="doIfElse"><custom-block s="%txt contains %txt ?"><block var="n"/><l>e</l></custom-block><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doSetVar"><l>a</l><block s="reportTextSplit"><block var="n"/><l>e</l></block></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportQuotient"><block s="reportMonadic"><l><option>floor</option></l><block s="reportVariadicProduct"><list><block s="reportListItem"><l>1</l><block var="a"/></block><block s="reportPower"><l>10</l><block var="d"/></block></list></block></block><block s="reportPower"><l>10</l><block var="d"/></block></block><l>e</l><block s="reportListItem"><l>2</l><block var="a"/></block></list></block></block></script><script><block s="doReport"><block s="reportQuotient"><block s="reportMonadic"><l><option>floor</option></l><block s="reportVariadicProduct"><list><block var="n"/><block s="reportPower"><l>10</l><block var="d"/></block></list></block></block><block s="reportPower"><l>10</l><block var="d"/></block></block></block></script></block></script></block-definition><block-definition s="%&apos;text1&apos; contains %&apos;text2&apos; ?" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt">hello world</input><input type="%txt">e</input></inputs><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doSetVar"><l>a</l><block s="reportTextSplit"><block var="text1"/><block var="text2"/></block></block><block s="doIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="a"/></block><l>1</l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block-definition><block-definition s="convert %&apos;num&apos; to scientific notation" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>a</l><l>b</l></list></block><block s="doSetVar"><l>b</l><l>1</l></block><block s="doSetVar"><l>a</l><l></l></block><block s="doRepeat"><l>1</l><script><block s="doSetVar"><l>a</l><block s="reportJoinWords"><list><block var="a"/><block s="reportLetter"><block var="b"/><block s="reportMonadic"><l><option>abs</option></l><block var="num"/></block></block><l>.</l></list></block></block><block s="doChangeVar"><l>b</l><l>1</l></block></script></block><block s="doRepeat"><l>3</l><script><block s="doSetVar"><l>a</l><block s="reportJoinWords"><list><block var="a"/><block s="reportLetter"><block var="b"/><block s="reportMonadic"><l><option>abs</option></l><block var="num"/></block></block></list></block></block><block s="doChangeVar"><l>b</l><l>1</l></block></script></block><block s="doIfElse"><block s="reportEquals"><block s="reportStringSize"><block var="num"/></block><l>1</l></block><script><block s="doReport"><block var="num"/></block></script><script><block s="doIfElse"><custom-block s="%txt contains %txt ?"><block var="num"/><l>-</l></custom-block><script><block s="doReport"><block s="reportJoinWords"><list><l>-</l><block var="a"/><l>e+</l><block s="reportDifference"><block s="reportStringSize"><block var="num"/></block><l>1</l></block></list></block></block></script><script><block s="doReport"><block s="reportJoinWords"><list><block var="a"/><l>e+</l><block s="reportDifference"><block s="reportStringSize"><block var="num"/></block><l>1</l></block></list></block></block></script></block></script></block></script><scripts><script x="434.85546875" y="263.99999999999994"><block var="num"/></script></scripts></block-definition><block-definition s="random %&apos;text&apos; separator %&apos;sep&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt">1,2,3,4,5</input><input type="%txt">,</input></inputs><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doSetVar"><l>a</l><block s="reportTextSplit"><block var="text"/><block var="sep"/></block></block><block s="doReport"><block s="reportListItem"><l><option>any</option></l><block var="a"/></block></block></script></block-definition><block-definition s="substr %&apos;s&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>answer</l></list><l> return answer.substring(0, answer.length - 1);</l></block><list><block var="s"/></list></block></block></script></block-definition><block-definition s="set cloud var %&apos;cloud&apos; to %&apos;value&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><custom-block s="ignore %s"><block s="reportURL"><block s="reportJoinWords"><list><l>snapextensions.uni-goettingen.de/handleTextfile.php?type=write&amp;content=</l><block var="value"/><l>&amp;filename=./textfiles/</l><block s="reportJoinWords"><list><block var="cloud"/><l>_id_</l><custom-block s="cloud ID"></custom-block></list></block><l>.txt</l></list></block></block></custom-block></script></block-definition><block-definition s="cloud var %&apos;s&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="substr %s"><block s="reportURL"><block s="reportJoinWords"><list><l>snapextensions.uni-goettingen.de/handleTextfile.php?type=read&amp;filename=./textfiles/</l><block s="reportJoinWords"><list><block var="s"/><l>_id_</l><custom-block s="cloud ID"></custom-block></list></block><l>.txt</l></list></block></block></custom-block></block></script></block-definition><block-definition s="cloud ID %&apos;s&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>a</l></list><l>cloudid = a</l></block><list><block var="s"/></list></block></script></block-definition><block-definition s="cloud ID" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return cloudid;</l></block><list></list></block></block></script></block-definition><block-definition s="Open website %&apos;website&apos;" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">Opens a website in a new tab or window. Make sure it starts with https:// or http://</comment><header></header><code></code><translations></translations><inputs><input type="%s">https://www.google.com</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>openWebAddress</l></list><l>window.open(openWebAddress);</l></block><list><block var="website"/></list></block></script></block-definition><block-definition s="Alert %&apos;alert text&apos;" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">Popup with text.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>alertNameText</l></list><l>alert(alertNameText);</l></block><list><block var="alert text"/></list></block></script></block-definition><block-definition s="Notification title %&apos;title&apos; text %&apos;text&apos; icon link %&apos;icon&apos; image link %&apos;image&apos;" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">Creates a desktop notification. Any or all of the inputs can be filled.NB: Will ask user for permission first.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%txt"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>notificationTitle</l><l>notificationText</l><l>iconLink</l><l>imageLink</l></list><l>// Check if the browser supports notifications  if (!("Notification" in window)) {}  else if (Notification.permission === "granted") {    var notification = new Notification(notificationTitle, {body:notificationText, icon:iconLink, image:imageLink});  }  else if (Notification.permission !== "denied") {    Notification.requestPermission().then(function (permission) {    if (permission === "granted") {        var notification = new Notification(notificationText);      }    });  }</l></block><list><block var="title"/><block var="text"/><block var="icon"/><block var="image"/></list></block></script></block-definition><block-definition s="Confirm popup %&apos;text&apos;" type="predicate" category="other"><comment x="0" y="0" w="90" collapsed="false">Popup with &apos;Ok&apos; or &apos;Cancel&apos;</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>confirmText</l></list><l>return(confirm(confirmText));</l></block><list><block var="text"/></list></block></block></script></block-definition><block-definition s="Prompt %&apos;text&apos; default %&apos;default text&apos;" type="reporter" category="other"><comment x="0" y="0" w="90" collapsed="false">Popup with an input.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>promptText</l><l>promptDefault</l></list><l>return(prompt(promptText, promptDefault));</l></block><list><block var="text"/><block var="default text"/></list></block></block></script></block-definition><block-definition s="popup %&apos;text&apos;" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">Creates a new window with text in.</comment><header></header><code></code><translations></translations><inputs><input type="%s">Text</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>javaText</l></list><l>let newWindow = window.open("about:blank", "", "_blank"); let textBlock = javaTextif (newWindow) {	newWindow.document.write(textBlock);}</l></block><list><block var="text"/></list></block></script></block-definition><block-definition s="set cookie var %&apos;cname&apos; to %&apos;cvalue&apos; will expire in %&apos;exdays&apos; days" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">Creates a browser cookie with the value, title, and expire date.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%n"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>cname</l><l>exdays</l><l>cvalue</l></list><l>var d = new Date();  d.setTime(d.getTime() + (exdays*24*60*60*1000));  var expires = "expires="+ d.toUTCString();  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";</l></block><list><block var="cname"/><block var="exdays"/><block var="cvalue"/></list></block></script></block-definition><block-definition s="get cookie var %&apos;cname&apos;" type="reporter" category="other"><comment x="0" y="0" w="90" collapsed="false">Returns the value of the specified cookie.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>cname</l></list><l>var name = cname + "=";  var decodedCookie = decodeURIComponent(document.cookie);  var ca = decodedCookie.split(&apos;;&apos;);  for(var i = 0; i &lt;ca.length; i++) {    var c = ca[i];    while (c.charAt(0) == &apos; &apos;) {      c = c.substring(1);    }    if (c.indexOf(name) == 0) {      return c.substring(name.length, c.length);    }  }return ca;</l></block><list><block var="cname"/></list></block></block></script></block-definition><block-definition s="set cursor %&apos;cursor name&apos;" type="command" category="other"><comment x="0" y="0" w="261" collapsed="false">Sets cursor to a specific image. See https://www.w3schools.com/CSSref/playit.asp?filename=playcss_cursor&amp;preval=alias for a list of keywords</comment><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>cursorName</l></list><l>document.body.style.cursor = cursorName;</l></block><list><block var="cursor name"/></list></block></script></block-definition><block-definition s="return cursor" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">&quot;Help! I don&apos;t know how to change the cursor back!&quot;</comment><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="set cursor %txt"><l>default</l></custom-block></script></block-definition><block-definition s="website popup %&apos;website&apos;" type="command" category="other"><comment x="0" y="0" w="114" collapsed="false">Opens a new window with a website.</comment><header></header><code></code><translations></translations><inputs><input type="%s">https://www.google.com</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>javaWebsite</l></list><l>let newWindow = window.open(javaWebsite, "", "_blank");</l></block><list><block var="website"/></list></block></script></block-definition><block-definition s="pen %&apos;state&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%b"></input></inputs><script><block s="doIfElse"><block var="state"/><script><block s="down"></block></script><script><block s="up"></block></script></block></script></block-definition><block-definition s="wait for click" type="command" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWaitUntil"><block s="reportMouseDown"></block></block><block s="doWaitUntil"><block s="reportNot"><block s="reportMouseDown"></block></block></block></script></block-definition><block-definition s="get hex at mouse-pointer" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportJoinWords"><list><custom-block s="convert decimal %n to 2-digit-padded hex"><block s="reportListItem"><l>1</l><block s="reportAspect"><l><option>r-g-b-a</option></l><l><option>mouse-pointer</option></l></block></block></custom-block><custom-block s="convert decimal %n to 2-digit-padded hex"><block s="reportListItem"><l>2</l><block s="reportAspect"><l><option>r-g-b-a</option></l><l><option>mouse-pointer</option></l></block></block></custom-block><custom-block s="convert decimal %n to 2-digit-padded hex"><block s="reportListItem"><l>3</l><block s="reportAspect"><l><option>r-g-b-a</option></l><l><option>mouse-pointer</option></l></block></block></custom-block></list></block></block></script></block-definition><block-definition s="convert hex %&apos;hex&apos; to decimal" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>hex</l></list><l>return parseInt(hex, 16)</l></block><list><block var="hex"/></list></block></block></script></block-definition><block-definition s="convert hex %&apos;hex&apos; to rgb" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">Returns list [r,g,b]</comment><header></header><code></code><translations></translations><inputs><input type="%s">ff00ff</input></inputs><script><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="hex"/></block><l>6</l></block><script><block s="doReport"><block s="reportNewList"><list><custom-block s="convert hex %s to decimal"><custom-block s="substring of %txt from position %n to position %n inclusive"><block var="hex"/><l>1</l><l>2</l></custom-block></custom-block><custom-block s="convert hex %s to decimal"><custom-block s="substring of %txt from position %n to position %n inclusive"><block var="hex"/><l>3</l><l>4</l></custom-block></custom-block><custom-block s="convert hex %s to decimal"><custom-block s="substring of %txt from position %n to position %n inclusive"><block var="hex"/><l>5</l><l>6</l></custom-block></custom-block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="hex"/></block><l>3</l></block><script><block s="doReport"><block s="reportNewList"><list><custom-block s="convert hex %s to decimal"><block s="reportJoinWords"><list><block s="reportLetter"><l>1</l><block var="hex"/></block><block s="reportLetter"><l>1</l><block var="hex"/></block></list></block></custom-block><custom-block s="convert hex %s to decimal"><block s="reportJoinWords"><list><block s="reportLetter"><l>2</l><block var="hex"/></block><block s="reportLetter"><l>2</l><block var="hex"/></block></list></block></custom-block><custom-block s="convert hex %s to decimal"><block s="reportJoinWords"><list><block s="reportLetter"><l>3</l><block var="hex"/></block><block s="reportLetter"><l>3</l><block var="hex"/></block></list></block></custom-block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="hex"/></block><l>1</l></block><script><block s="doReport"><block s="reportNewList"><list><custom-block s="convert hex %s to decimal"><block s="reportJoinWords"><list><block s="reportLetter"><l>1</l><block var="hex"/></block><block s="reportLetter"><l>1</l><block var="hex"/></block></list></block></custom-block><custom-block s="convert hex %s to decimal"><block s="reportJoinWords"><list><block s="reportLetter"><l>1</l><block var="hex"/></block><block s="reportLetter"><l>1</l><block var="hex"/></block></list></block></custom-block><custom-block s="convert hex %s to decimal"><block s="reportJoinWords"><list><block s="reportLetter"><l>1</l><block var="hex"/></block><block s="reportLetter"><l>1</l><block var="hex"/></block></list></block></custom-block></list></block></block></script></block></script></block-definition><block-definition s="set pen colour to hex: %&apos;hex&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%s">123456</input></inputs><script><custom-block s="set pen color to r: %n g: %n b: %n"><block s="reportListItem"><l>1</l><custom-block s="convert hex %s to rgb"><block var="hex"/></custom-block></block><block s="reportListItem"><l>2</l><custom-block s="convert hex %s to rgb"><block var="hex"/></custom-block></block><block s="reportListItem"><l>3</l><custom-block s="convert hex %s to rgb"><block var="hex"/></custom-block></block></custom-block></script></block-definition><block-definition s="convert decimal %&apos;dec&apos; to 2-digit-padded hex" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>hex</l></list></block><block s="doSetVar"><l>hex</l><block s="evaluate"><block s="reportJSFunction"><list><l>dec</l></list><l>return dec.toString(16)</l></block><list><block var="dec"/></list></block></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="hex"/></block><l>1</l></block><script><block s="doSetVar"><l>hex</l><block s="reportJoinWords"><list><l>0</l><block var="hex"/></list></block></block></script></block><block s="doReport"><block var="hex"/></block></script></block-definition><block-definition s="hexmap-style hex at this sprite" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>output-temp</l></list></block><block s="doSetVar"><l>output-temp</l><custom-block s="get hex at this sprite"></custom-block></block><block s="doIf"><block s="reportAnd"><block s="reportEquals"><block s="reportLetter"><l>1</l><block var="output-temp"/></block><block s="reportLetter"><l>2</l><block var="output-temp"/></block></block><block s="reportAnd"><block s="reportEquals"><block s="reportLetter"><l>3</l><block var="output-temp"/></block><block s="reportLetter"><l>4</l><block var="output-temp"/></block></block><block s="reportEquals"><block s="reportLetter"><l>5</l><block var="output-temp"/></block><block s="reportLetter"><l>6</l><block var="output-temp"/></block></block></block></block><script><block s="doIfElse"><block s="reportAnd"><block s="reportEquals"><block s="reportLetter"><l>2</l><block var="output-temp"/></block><block s="reportLetter"><l>3</l><block var="output-temp"/></block></block><block s="reportEquals"><block s="reportLetter"><l>4</l><block var="output-temp"/></block><block s="reportLetter"><l>5</l><block var="output-temp"/></block></block></block><script><block s="doSetVar"><l>output-temp</l><block s="reportJoinWords"><list><l>m</l><block s="reportLetter"><l>1</l><block var="output-temp"/></block></list></block></block></script><script><block s="doSetVar"><l>output-temp</l><block s="reportJoinWords"><list><l>s</l><block s="reportLetter"><l>1</l><block var="output-temp"/></block><block s="reportLetter"><l>3</l><block var="output-temp"/></block><block s="reportLetter"><l>5</l><block var="output-temp"/></block></list></block></block></script></block></script></block><block s="doReport"><block var="output-temp"/></block></script></block-definition><block-definition s="get hex at this sprite" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportJoinWords"><list><custom-block s="convert decimal %n to 2-digit-padded hex"><block s="reportListItem"><l>1</l><block s="reportAspect"><l><option>r-g-b-a</option></l><l><option>myself</option></l></block></block></custom-block><custom-block s="convert decimal %n to 2-digit-padded hex"><block s="reportListItem"><l>2</l><block s="reportAspect"><l><option>r-g-b-a</option></l><l><option>myself</option></l></block></block></custom-block><custom-block s="convert decimal %n to 2-digit-padded hex"><block s="reportListItem"><l>3</l><block s="reportAspect"><l><option>r-g-b-a</option></l><l><option>myself</option></l></block></block></custom-block></list></block></block></script></block-definition><block-definition s="create hexmap from x: %&apos;x1&apos; y: %&apos;y1&apos; to x: %&apos;x2&apos; y: %&apos;y2&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%n">-220</input><input type="%n">160</input><input type="%n">220</input><input type="%n">-160</input></inputs><script><block s="doDeclareVariables"><list><l>hexmap-out</l><l>oldX</l><l>oldY</l><l>oldDIR</l></list></block><block s="doSetVar"><l>oldX</l><block s="xPosition"></block></block><block s="doSetVar"><l>oldY</l><block s="yPosition"></block></block><block s="doSetVar"><l>oldDIR</l><block s="direction"></block></block><block s="gotoXY"><block var="x1"/><block var="y1"/></block><block s="doWarp"><script><block s="doFor"><l>y</l><block var="y1"/><block var="y2"/><script><block s="doFor"><l>x</l><block var="x1"/><block var="x2"/><script><block s="doSetVar"><l>hexmap-out</l><block s="reportJoinWords"><list><block var="hexmap-out"/><custom-block s="hexmap-style hex at this sprite"></custom-block></list></block></block><block s="setXPosition"><block s="reportVariadicSum"><list><block var="x"/><l>1</l></list></block></block></script></block><block s="doSetVar"><l>hexmap-out</l><block s="reportJoinWords"><list><block var="hexmap-out"/><l>\</l></list></block></block><block s="setYPosition"><block s="reportDifference"><block var="y"/><l>1</l></block></block><block s="setXPosition"><block var="x1"/></block></script><comment w="117" collapsed="true">using for just in case I need the loop count, even though I don&apos;t think I will</comment></block></script></block><block s="setXPosition"><block var="oldX"/></block><block s="setYPosition"><block var="oldY"/></block><block s="setHeading"><block var="oldDIR"/></block><block s="doReport"><block var="hexmap-out"/></block></script></block-definition><block-definition s="Seconds %&apos;sec&apos; To Minutes" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportQuotient"><block var="sec"/><l>60</l></block></block></script></block-definition><block-definition s="write %&apos;text&apos; size %&apos;size&apos; direction %&apos;direction&apos; at x: %&apos;x&apos; y: %&apos;y&apos; color %&apos;color1&apos; %&apos;color2&apos; %&apos;color3&apos; %&apos;color4&apos; clear? %&apos;clear?&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%txt">Hello!</input><input type="%n">12</input><input type="%n">90</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input><input type="%n">100</input><input type="%n">0</input><input type="%n">0</input><input type="%b">true</input></inputs><script><block s="doDeclareVariables"><list><l>code</l></list></block><block s="doSetVar"><l>code</l><block s="reifyScript"><script><block s="doDeclareVariables"><list><l>X</l><l>Y</l><l>Direction</l></list></block><block s="doSetVar"><l>X</l><block s="xPosition"></block></block><block s="doSetVar"><l>Y</l><block s="yPosition"></block></block><block s="doSetVar"><l>Direction</l><block s="direction"></block></block><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="setHeading"><block var="direction"/></block><block s="setPenColorDimension"><l><option>hue</option></l><block var="color1"/></block><block s="setPenColorDimension"><l><option>saturation</option></l><block var="color2"/></block><block s="setPenColorDimension"><l><option>brightness</option></l><block var="color3"/></block><block s="setPenColorDimension"><l><option>transparency</option></l><block var="color4"/></block><block s="write"><block var="text"/><block var="size"/></block><block s="gotoXY"><block var="X"/><block var="Y"/></block><block s="setHeading"><block var="Direction"/></block></script><list></list></block></block><block s="doIfElse"><block var="clear?"/><script><block s="clear"></block><block s="doRun"><block var="code"/><list></list></block></script><script><block s="doRun"><block var="code"/><list></list></block></script></block></script></block-definition><block-definition s="$cloudGradient Highscore" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l>Snap! Didn&apos;t Added Cloud Variable :(</l></block></script></block-definition><block-definition s="Convert %&apos;boolean&apos; To Text" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%b">true</input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="boolean"/><block s="reportBoolean"><l><bool>true</bool></l></block></block><script><block s="doReport"><l>true</l></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="boolean"/><block s="reportBoolean"><l><bool>false</bool></l></block></block><script><block s="doReport"><l>false</l></block></script><script><block s="doReport"><l>error</l></block></script></block></script></block></script></block-definition><block-definition s="play note %&apos;note&apos; for %&apos;seconds&apos; seconds" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%n">60<options>§_pianoKeyboardMenu</options></input><input type="%n">0.5</input></inputs><script><block s="doPlayNote"><block var="note"/><block s="reportVariadicProduct"><list><block s="reportQuotient"><block s="getTempo"></block><l>60</l></block><l>0.5</l></list></block></block></script></block-definition><block-definition s="forever if %&apos;boolean&apos; %&apos;command&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%b"></input><input type="%cs"></input></inputs><script><block s="doForever"><script><block s="doIf"><block s="reportEquals"><block var="boolean"/><block s="reportBoolean"><l><bool>true</bool></l></block></block><script><block s="fork"><block var="command"/><list></list></block></script></block></script></block></script></block-definition><block-definition s="Reverse %&apos;text&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt">Hello!</input></inputs><script><block s="doDeclareVariables"><list><l>a</l><l>b</l><l>c</l></list></block><block s="doSetVar"><l>a</l><block s="reportStringSize"><block var="text"/></block></block><block s="doSetVar"><l>b</l><l></l></block><block s="doWarp"><script><block s="doRepeat"><block s="reportStringSize"><block var="text"/></block><script><block s="doSetVar"><l>b</l><block s="reportJoinWords"><list><block var="b"/><block s="reportLetter"><block var="a"/><block var="text"/></block></list></block></block><block s="doChangeVar"><l>a</l><l>-1</l></block></script></block></script></block><block s="doReport"><block var="b"/></block></script></block-definition><block-definition s="%&apos;number1&apos; e %&apos;number2&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">1.3</input><input type="%s">2</input></inputs><script><block s="doReport"><block s="reportVariadicProduct"><list><block var="number1"/><block s="reportMonadic"><l><option>10^</option></l><block var="number2"/></block></list></block></block></script></block-definition><block-definition s="add commas to %&apos;num&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">1234567890</input></inputs><script><block s="doDeclareVariables"><list><l>a</l><l>b</l></list></block><block s="doSetVar"><l>a</l><block s="reportVariadicSum"><list><block s="reportStringSize"><block var="num"/></block><l>1</l></list></block></block><block s="doSetVar"><l>b</l><block s="reportTextSplit"><block var="num"/><l><option>letter</option></l></block></block><block s="doRepeat"><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block s="reportDifference"><block var="a"/><l>1</l></block><l>3.00001</l></block></block><script><block s="doChangeVar"><l>a</l><l>-3</l></block><block s="doInsertInList"><l>,</l><block var="a"/><block var="b"/></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block var="b"/></list></block></block></script></block-definition><block-definition s="is %&apos;letter&apos; a vowel?" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">a</input></inputs><script><block s="doIfElse"><block s="reportGreaterThan"><block s="reportStringSize"><block var="letter"/></block><l>1</l></block><script><block s="doReport"><l>Error: There can only be 1 letter at a time</l></block></script><script><block s="doIfElse"><block s="reportOr"><block s="reportEquals"><block var="letter"/><l>a</l></block><block s="reportOr"><block s="reportEquals"><block var="letter"/><l>e</l></block><block s="reportOr"><block s="reportEquals"><block var="letter"/><l>i</l></block><block s="reportOr"><block s="reportEquals"><block var="letter"/><l>o</l></block><block s="reportEquals"><block var="letter"/><l>u</l></block></block></block></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="letter"/><l>y</l></block><script><block s="doReport"><l>maybe</l></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block></script></block></script></block-definition><block-definition s="$flag was clicked %&apos;number&apos; times" type="predicate" category="other"><header></header><code></code><translations></translations><inputs><input type="%n">10</input></inputs><script><block s="doIfElse"><block s="reportEquals"><custom-block s="flag counter"></custom-block><block var="number"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="%&apos;number&apos; squared" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">5</input></inputs><script><block s="doReport"><block s="reportVariadicProduct"><list><block var="number"/><block var="number"/></list></block></block></script></block-definition><block-definition s="reset flag counter" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>flag</l><l>0</l></block></script></block-definition><block-definition s="flag counter" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>flags</l></list></block><block s="doReport"><block var="flags"/></block></script></block-definition><block-definition s="forever if %&apos;thing&apos; then %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%b"></input><input type="%cs"></input></inputs><script><block s="doForever"><script><block s="doIf"><block var="thing"/><script><block s="doRun"><block var="action"/><list></list></block></script></block></script></block></script></block-definition><block-definition s="change costume by %&apos;input&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doSwitchToCostume"><block s="reportVariadicSum"><list><block s="getCostumeIdx"></block><block var="input"/></list></block></block></script><scripts><script x="157" y="127.19999999999999"><block s="reportDifference"><l></l><l></l></block></script></scripts></block-definition><block-definition s="forever if %&apos;thing&apos; then %&apos;action&apos; else %&apos;action2&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%b"></input><input type="%cs"></input><input type="%cs"></input></inputs><script><block s="doForever"><script><block s="doIfElse"><block var="thing"/><script><block s="doRun"><block var="action"/><list></list></block></script><script><block s="doRun"><block var="action2"/><list></list></block></script></block></script></block></script></block-definition><block-definition s="beep" type="command" category="sound"><header></header><code></code><translations></translations><inputs></inputs><script><block s="playFreq"><l>1000</l></block><block s="doWait"><l>1</l></block><block s="stopFreq"></block></script></block-definition><block-definition s="custom beep at %&apos;number&apos; Hz for %&apos;wait&apos; seconds" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%n">1000</input><input type="%n">1</input></inputs><script><block s="playFreq"><block var="number"/></block><block s="doWait"><block var="wait"/></block><block s="stopFreq"></block></script></block-definition><block-definition s="alarm" type="command" category="sound"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRepeat"><l>10</l><script><custom-block s="custom beep at %n Hz for %n seconds"><l>1200</l><l>0.5</l></custom-block><block s="doWait"><l>0.5</l></block></script></block></script></block-definition><block-definition s="while %&apos;thing&apos; do %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%boolUE"></input><input type="%cs"></input></inputs><script><block s="doUntil"><block s="reportNot"><block var="thing"/></block><script><block s="doRun"><block var="action"/><list></list></block></script></block></script></block-definition><block-definition s="%&apos;number&apos; cubed" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">5</input></inputs><script><block s="doReport"><block s="reportVariadicProduct"><list><block var="number"/><block s="reportVariadicProduct"><list><block var="number"/><block var="number"/></list></block></list></block></block></script></block-definition><block-definition s="%&apos;value&apos; nand %&apos;value2&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%b"></input><input type="%b"></input></inputs><script><block s="doIfElse"><block s="reportNot"><block s="reportAnd"><block var="value"/><block var="value2"/></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="%&apos;value&apos; nor %&apos;value2&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%b"></input><input type="%b"></input></inputs><script><block s="doIfElse"><block s="reportNot"><block s="reportOr"><block var="value"/><block var="value2"/></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="sprite clicked?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIfElse"><block s="reportAnd"><block s="reportMouseDown"></block><block s="reportTouchingObject"><l><option>mouse-pointer</option></l></block></block><script><block s="doWaitUntil"><custom-block s="mouse up?"></custom-block></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="typewriter %&apos;text&apos; for %&apos;seconds&apos; secs" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%txt">Hello!</input><input type="%n">2</input></inputs><script><block s="doDeclareVariables"><list><l>number</l><l>say</l></list></block><block s="doSetVar"><l>number</l><l>0</l></block><block s="doSetVar"><l>say</l><l></l></block><block s="doRepeat"><block s="reportStringSize"><block var="text"/></block><script><block s="doChangeVar"><l>number</l><l>1</l></block><block s="doSetVar"><l>say</l><block s="reportJoinWords"><list><block var="say"/><block s="reportLetter"><block var="number"/><block var="text"/></block></list></block></block><block s="bubble"><block var="say"/></block><block s="doWait"><l>0</l></block></script></block><block s="doWait"><block var="seconds"/></block><block s="bubble"><l></l></block></script></block-definition><block-definition s="typewriter %&apos;text&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%txt">Hello!</input></inputs><script><block s="doDeclareVariables"><list><l>number</l><l>say</l></list></block><block s="doSetVar"><l>number</l><l>0</l></block><block s="doSetVar"><l>say</l><l></l></block><block s="doRepeat"><block s="reportStringSize"><block var="text"/></block><script><block s="doChangeVar"><l>number</l><l>1</l></block><block s="doSetVar"><l>say</l><block s="reportJoinWords"><list><block var="say"/><block s="reportLetter"><block var="number"/><block var="text"/></block></list></block></block><block s="bubble"><block var="say"/></block><block s="doWait"><l>0</l></block></script></block><block s="bubble"><block var="say"/></block></script></block-definition><block-definition s="while mouse down %&apos;action&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doIf"><block s="reportMouseDown"></block><script><block s="doRun"><block var="action"/><list></list></block></script></block></script></block-definition><block-definition s="speak %&apos;msg&apos; $nl with language %&apos;accent&apos; accent $nl with pitch %&apos;pitch&apos; $nl with rate %&apos;rate&apos;" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s">Hello World!</input><input type="%s" readonly="true">en<options>English=en&#xD;Spanish=es&#xD;German=de&#xD;French=fr&#xD;Polish=pl&#xD;Chinese=zh&#xD;Japanese=ja</options></input><input type="%n">1</input><input type="%n">1</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>msg</l><l>accent</l><l>pitch</l><l>rate</l></list><l>var utter = new SpeechSynthesisUtterance (msg); utter.lang = accent; utter.pitch = pitch; utter.rate = rate; window.speechSynthesis.speak(utter);</l></block><list><block var="msg"/><block var="accent"/><block var="pitch"/><block var="rate"/></list></block></script></block-definition><block-definition s="typewriter %&apos;text&apos; size %&apos;number2&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>say</l><l>number</l></list></block><block s="doSetVar"><l>number</l><l>0</l></block><block s="doSetVar"><l>say</l><l></l></block><block s="doRepeat"><block s="reportStringSize"><block var="text"/></block><script><block s="doChangeVar"><l>number</l><l>1</l></block><block s="doSetVar"><l>say</l><block s="reportLetter"><block var="number"/><block var="text"/></block></block><block s="write"><block var="say"/><block var="number2"/></block><block s="doWait"><l>0</l></block></script></block></script><scripts><script x="198.5498066875" y="98.00000200000005"><block s="reportJoinWords"><list><block var="say"/><l></l></list></block></script></scripts></block-definition><block-definition s="crash" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>crasher</l></list></block><block s="doSetVar"><l>crasher</l><l>76417285467124612</l></block><block s="doForever"><script><custom-block s="crash"></custom-block><block s="doSetVar"><l>crasher</l><block s="reportJoinWords"><list><block var="crasher"/><block var="crasher"/></list></block></block></script></block></script></block-definition><block-definition s="pi" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l>3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900994657640789512694683983525957098258226205224894077267194782684826014769909026401363944374553050682034962524517493996514314298091906592509372216964615157098583874105978859597729754989301617539284681382686838689427741559918559252459539594310499725246808459872736446958486538367362226260991246080512438843904512441365497627807977156914359977001296160894416948685558484063534220722258284886481584560285060168427394522674676788952521385225499546667278239864565961163548862305774564980355936345681743241125150760694794510965960940252288797108931456691368672287489405601015033086179286809208747609178249385890097149096759852613655497818931297848216829989487226588048575640142704775551323796414515237462343645428584447952658678210511413547357395231134271661021359695362314429524849371871101457654035902799344037420073105785390621983874478084784896833214457138687519435064302184531910484810053706146806749192781911979399520614196634287544406437451237181921799983910159195618146751426912397489409071864942319615679452080951465502252316038819301420937621378559566389377870830390697920773467221825625996615014215030680384477345492026054146659252014974428507325186660021324340881907104863317346496514539057962685610055081066587969981635747363840525714591028970641401109712062804390397595156771577004203378699360072305587631763594218731251471205329281918261861258673215791984148488291644706095752706957220917567116722910981690915280173506712748583222871835209353965725121083579151369882091444210067510334671103141267111369908658516398315019701651511685171437657618351556508849099898599823873455283316355076479185358932261854896321329330898570642046752590709154814165498594616371802709819943099244889575712828905923233260972997120844335732654893823911932597463667305836041428138830320382490375898524374417029132765618093773444030707469211201913020330380197621101100449293215160842444859637669838952286847831235526582131449576857262433441893039686426243410773226978028073189154411010446823252716201052652272111660396665573092547110557853763466820653109896526918620564769312570586356620185581007293606598764861179104533488503461136576867532494416680396265797877185560845529654126654085306143444318586769751456614068007002378776591344017127494704205622305389945613140711270004078547332699390814546646458807972708266</l></block></script></block-definition><block-definition s="infinity" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l>Infinity</l></block></script></block-definition><block-definition s="factorial %&apos;n&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">5</input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block var="n"/><l>0</l></block><l>undefined</l><block s="reportVariadicProduct"><list><block var="n"/><custom-block s="factorial %n"><block s="reportDifference"><block var="n"/><l>1</l></block></custom-block></list></block></block></block></script><scripts><script x="230.7177764375001" y="13.833338333333302"><block var="n"/></script></scripts></block-definition><block-definition s="if %&apos;thing?&apos; then %&apos;action&apos;" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%b"></input><input type="%s"></input></inputs><script><block s="doIf"><block var="thing?"/><script><block s="doReport"><block var="action"/></block></script></block></script></block-definition><block-definition s="global variables %&apos;names&apos;" type="command" category="variables"><header></header><code></code><translations>pt:cria as variáveis globais _&#xD;</translations><inputs><input type="%mult%txt"></input></inputs><script><block s="doForEach"><l>each item</l><block var="names"/><script><block s="doRun"><block s="reportJSFunction"><list><l>name</l></list><l>if ((typeof name) != "string") {    throw new Error("name isn&apos;t a string: " + name);}if (name != "") this.addVariable(name, true);</l></block><list><block var="each item"/></list></block></script></block><block s="doRun"><block s="reportJSFunction"><list></list><l>var ide = this.parentThatIsA(IDE_Morph);ide.flushBlocksCache(&apos;variables&apos;); // b/c of inheritanceide.refreshPalette();</l></block><list></list></block></script></block-definition><block-definition s="sprite-local variables %&apos;names&apos;" type="command" category="variables"><header></header><code></code><translations>pt:cria as variáveis de objecto _&#xD;</translations><inputs><input type="%mult%txt"></input></inputs><script><block s="doForEach"><l>each item</l><block var="names"/><script><block s="doRun"><block s="reportJSFunction"><list><l>name</l></list><l>if ((typeof name) != "string") {    throw new Error("name isn&apos;t a string: " + name);}if (name != "") this.addVariable(name, false);</l></block><list><block var="each item"/></list></block></script></block><block s="doRun"><block s="reportJSFunction"><list></list><l>var ide = this.parentThatIsA(IDE_Morph);ide.flushBlocksCache(&apos;variables&apos;); // b/c of inheritanceide.refreshPalette();</l></block><list></list></block></script></block-definition><block-definition s="does variable %&apos;var&apos; exist?" type="predicate" category="variables"><header></header><code></code><translations>pt:a variável _ existe&#xD;</translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>varname</l></list><l>if ((typeof varname) != "string") {    throw new Error("name isn&apos;t a string: " + varname);}return this.isVariableNameInUse(varname, true);</l></block><list><block var="var"/></list></block></block></script></block-definition><block-definition s="variable %&apos;var&apos;" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s">&#xD;          &#xD;        <options>§_getVarNamesDict</options></input></inputs><script><block s="doIf"><custom-block s="does variable %s exist?"><block var="var"/></custom-block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>v</l></list><l>return this.variables.getVar(v)</l></block><list><block var="var"/></list></block></block></script></block><block s="doRun"><block s="reportJSFunction"><list><l>v</l></list><l>throw new ReferenceError(`Variable ${v} does not exist.`)</l></block><list><block var="var"/></list></block></script></block-definition><block-definition s="show all globals" type="command" category="variables"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doForEach"><l>var</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>return new List(Object.getOwnPropertyNames(this.globalVariables().vars))</l></block><list></list></block><script><block s="doShowVar"><l></l></block></script></block></script></block-definition><block-definition s="hide all globals" type="command" category="variables"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doForEach"><l>var</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>return new List(Object.getOwnPropertyNames(this.globalVariables().vars))</l></block><list></list></block><script><block s="doHideVar"><l></l></block></script></block></script></block-definition><block-definition s="delete variable %&apos;var&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s">&#xD;          &#xD;        <options>§_getVarNamesDict</options></input></inputs><script><block s="doIf"><custom-block s="does variable %s exist?"><block var="var"/></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>v</l></list><l>this.deleteVariable(v)</l></block><list><block var="var"/></list></block></script></block></script></block-definition><block-definition s="set variable %&apos;var&apos; watcher %&apos;type&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s">&#xD;          &#xD;        <options>§_getVarNamesDict</options></input><input type="%s" readonly="true">normal        &#xD;        <options>normallargeslider</options></input></inputs><script><block s="doIf"><custom-block s="does variable %s exist?"><block var="var"/></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>v,t</l></list><l>var watcher = this.findVariableWatcher(v)switch(t) {case "normal": watcher.styleNormal(); break;case "large": watcher.styleLarge(); break;case "slider": watcher.styleSlider(); break;}</l></block><list><block var="var"/><block var="type"/></list></block></script></block></script></block-definition><block-definition s="variable %&apos;var&apos; slider min" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s">&#xD;          &#xD;        <options>§_getVarNamesDict</options></input></inputs><script><block s="doIf"><custom-block s="does variable %s exist?"><block var="var"/></custom-block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>v</l></list><l>return this.findVariableWatcher(v).sliderMorph.start</l></block><list><block var="var"/></list></block></block></script></block><block s="doReport"><l>NaN</l></block></script></block-definition><block-definition s="variable %&apos;var&apos; slider max" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s">&#xD;          &#xD;        <options>§_getVarNamesDict</options></input></inputs><script><block s="doIf"><custom-block s="does variable %s exist?"><block var="var"/></custom-block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>v</l></list><l>return this.findVariableWatcher(v).sliderMorph.stop</l></block><list><block var="var"/></list></block></block></script></block><block s="doReport"><l>NaN</l></block></script></block-definition><block-definition s="set variable %&apos;var&apos; slider min %&apos;val&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s">&#xD;          &#xD;        <options>§_getVarNamesDict</options></input><input type="%n"></input></inputs><script><block s="doIf"><custom-block s="does variable %s exist?"><block var="var"/></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>v,u</l></list><l>this.findVariableWatcher(v).sliderMorph.setStart(u)</l></block><list><block var="var"/><block var="val"/></list></block></script></block></script></block-definition><block-definition s="set variable %&apos;var&apos; slider max %&apos;val&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s">&#xD;          &#xD;        <options>§_getVarNamesDict</options></input><input type="%n"></input></inputs><script><block s="doIf"><custom-block s="does variable %s exist?"><block var="var"/></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>v,u</l></list><l>this.findVariableWatcher(v).sliderMorph.setStop(u)</l></block><list><block var="var"/><block var="val"/></list></block></script></block></script></block-definition><block-definition s="move variable %&apos;var&apos; watcher to x: %&apos;x&apos; y: %&apos;y&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s">&#xD;          &#xD;        <options>§_getVarNamesDict</options></input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doIf"><custom-block s="does variable %s exist?"><block var="var"/></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>v,x,y</l></list><l>var watcher = this.findVariableWatcher(v)//Copied from SpriteMorph&apos;s gotoXY methodvar stage = this.parentThatIsA(StageMorph),  newX,  newY,  dest;if(!stage) {return;}x = !isFinite(+x) ? 0 : +x;y = !isFinite(+y) ? 0 : +y;newX = stage.center().x + x * stage.scale;newY = stage.center().y - y * stage.scale;dest = new Point(newX, newY).subtract(watcher.extent().divideBy(2));watcher.setPosition(dest)</l></block><list><block var="var"/><block var="x"/><block var="y"/></list></block></script></block></script></block-definition><block-definition s="change variable %&apos;var&apos; watcher x by %&apos;delta&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s">&#xD;          &#xD;        <options>§_getVarNamesDict</options></input><input type="%n">10</input></inputs><script><block s="doIf"><custom-block s="does variable %s exist?"><block var="var"/></custom-block><script><block s="doRun"><block s="reportJSFunction"><list></list><l>alert("Work in Progress")</l></block><list></list></block></script></block></script><scripts><script x="10" y="136"><custom-block s="move variable %s watcher to x: %n y: %n"><block var="var"/><block s="reportVariadicSum"><list><custom-block s="variable %s watcher x"><block var="var"/></custom-block><block var="delta"/></list></block><custom-block s="variable %s watcher y"><block var="var"/></custom-block></custom-block></script></scripts></block-definition><block-definition s="set variable %&apos;var&apos; watcher x to %&apos;x&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s">&#xD;          &#xD;        <options>§_getVarNamesDict</options></input><input type="%n">0</input></inputs><script><block s="doIf"><custom-block s="does variable %s exist?"><block var="var"/></custom-block><script><block s="doRun"><block s="reportJSFunction"><list></list><l>alert("Work in Progress")</l></block><list></list></block></script></block></script><scripts><script x="10" y="136"><custom-block s="move variable %s watcher to x: %n y: %n"><block var="var"/><block var="x"/><custom-block s="variable %s watcher y"><block var="var"/></custom-block></custom-block></script></scripts></block-definition><block-definition s="change variable %&apos;var&apos; watcher y by %&apos;delta&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s">&#xD;          &#xD;        <options>§_getVarNamesDict</options></input><input type="%n">10</input></inputs><script><block s="doIf"><custom-block s="does variable %s exist?"><block var="var"/></custom-block><script><block s="doRun"><block s="reportJSFunction"><list></list><l>alert("Work in Progress")</l></block><list></list></block></script></block></script><scripts><script x="10" y="136"><custom-block s="move variable %s watcher to x: %n y: %n"><block var="var"/><custom-block s="variable %s watcher x"><block var="var"/></custom-block><block s="reportVariadicSum"><list><custom-block s="variable %s watcher y"><block var="var"/></custom-block><block var="delta"/></list></block></custom-block></script></scripts></block-definition><block-definition s="set variable %&apos;var&apos; watcher y to %&apos;y&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s">&#xD;          &#xD;        <options>§_getVarNamesDict</options></input><input type="%n">0</input></inputs><script><block s="doIf"><custom-block s="does variable %s exist?"><block var="var"/></custom-block><script><block s="doRun"><block s="reportJSFunction"><list></list><l>alert("Work in Progress")</l></block><list></list></block></script></block></script><scripts><script x="10" y="136.00000000000003"><custom-block s="move variable %s watcher to x: %n y: %n"><block var="var"/><custom-block s="variable %s watcher x"><block var="var"/></custom-block><block var="y"/></custom-block></script></scripts></block-definition><block-definition s="variable %&apos;var&apos; watcher x" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s">&#xD;          &#xD;        <options>§_getVarNamesDict</options></input></inputs><script><block s="doReport"><l>Work in Progress</l></block></script></block-definition><block-definition s="variable %&apos;var&apos; watcher y" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s">&#xD;          &#xD;        <options>§_getVarNamesDict</options></input></inputs><script><block s="doReport"><l>Work in Progress</l></block></script></block-definition><block-definition s="swap %&apos;a&apos; ⇄ %&apos;b&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s">&#xD;          &#xD;        <options>§_getVarNamesDict</options></input><input type="%s">&#xD;          &#xD;        <options>§_getVarNamesDict</options></input></inputs><script><block s="doIf"><block s="reportAnd"><custom-block s="does variable %s exist?"><block var="a"/></custom-block><custom-block s="does variable %s exist?"><block var="b"/></custom-block></block><script><block s="doRun"><block s="reifyScript"><script><block s="doDeclareVariables"><list><l>temp</l></list></block><block s="doSetVar"><l>temp</l><custom-block s="variable %s"><block var="a"/></custom-block></block><block s="doSetVar"><l></l><custom-block s="variable %s"><block var="b"/></custom-block></block><block s="doSetVar"><l></l><block var="temp"/></block></script><list></list></block><list><block var="a"/><block var="b"/></list></block></script></block></script></block-definition><block-definition s="%&apos;message&apos; received?" type="predicate" category="control"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportEquals"><block s="getLastMessage"></block><block var="message"/></block></block></script></block-definition><block-definition s="%&apos;Text&apos; contains %&apos;value&apos; in %&apos;Caps?&apos; ?" type="predicate" category="operators"><comment x="0" y="0" w="196" collapsed="false">This block is like Scratch&apos;s &lt;(text) contains (text)&gt; predicate. The only thing different is that you can choose to have caps sensitive on or off, which is a feature Scratch doesn&apos;t have.&#xD;&#xD;HELP:&#xD;If the text you put in the first input contains the text you put in the second input, it will say true. The drop down menu on the right allows you to choose between caps sensitive or no caps sensitive. </comment><header></header><code></code><translations></translations><inputs><input type="%s">Hello World</input><input type="%s">World</input><input type="%n">0<options>Cap Senstive=1&#xD;No Cap Sensitive=0</options></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="Caps?"/><l>1</l></block><script><block s="doReport"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block s="reportTextSplit"><block var="Text"/><block var="value"/></block></block><l>1</l></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="Caps?"/><l>0</l></block><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>a</l><l>b</l></list></block><block s="doSetVar"><l>value</l><block s="reportTextSplit"><block var="value"/><l><option>letter</option></l></block></block><block s="doSetVar"><l>Text</l><block s="reportTextSplit"><block var="Text"/><l><option>letter</option></l></block></block><block s="doForEach"><l>variable</l><block s="reportNewList"><list><block var="Text"/><block var="value"/></list></block><script><block s="doSetVar"><l>a</l><l>0</l></block><block s="doForEach"><l>item</l><block var="variable"/><script><block s="doChangeVar"><l>a</l><l>1</l></block><block s="doIf"><block s="reportAnd"><block s="reportLessThan"><block s="reportUnicode"><block var="item"/></block><block s="reportUnicode"><l>Z</l></block></block><block s="reportGreaterThan"><block s="reportUnicode"><block var="item"/></block><l>64</l></block></block><script><block s="doReplaceInList"><block var="a"/><block var="variable"/><block s="reportUnicodeAsLetter"><block s="reportVariadicSum"><list><block s="reportUnicode"><block var="item"/></block><l>32</l></list></block></block></block></script></block></script></block></script></block><block s="doReport"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block s="reportTextSplit"><block s="reportJoinWords"><block var="Text"/></block><block s="reportJoinWords"><block var="value"/></block></block></block><l>1</l></block></block></script></block></script><script><block s="doReport"><l></l></block></script></block></script></block></script></block-definition><block-definition s="%&apos;t1&apos; == %&apos;t2&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="%s contains %s in %n ?"><block var="t1"/><block var="t2"/><l>1</l></custom-block></block></script></block-definition><block-definition s="pinwheel, branches: %&apos;number of branches&apos; size: %&apos;size&apos; backup: %&apos;backup&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doRepeat"><block var="number of branches"><comment w="90" collapsed="true">Repeats by the number of branches</comment></block><script><block s="forward"><block var="size"/><comment w="90" collapsed="true">Moves By the Number inserted</comment></block><block s="forward"><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>abs</option></l><block var="backup"/></block><l>-1</l></list></block></block><block s="turn"><block s="reportQuotient"><l>360</l><block var="number of branches"/></block><comment w="90" collapsed="true">you turn by 360 divided by the number of branches</comment></block></script></block></script></block-definition><block-definition s="Create 2 Pinwheels with different spoke %&apos;Number of Spokes&apos; %&apos;Number of Spokes Part 2&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doRepeat"><block var="Number of Spokes"/><script><block s="forward"><l>100</l></block><block s="forward"><l>-70</l></block><block s="turn"><block s="reportQuotient"><l>360</l><block var="Number of Spokes"/></block></block></script></block><block s="up"></block><block s="forward"><l>200</l></block><block s="down"></block><block s="doRepeat"><block var="Number of Spokes Part 2"/><script><block s="forward"><l>100</l></block><block s="forward"><l>-70</l></block><block s="turn"><block s="reportQuotient"><l>360</l><block var="Number of Spokes Part 2"/></block></block></script></block></script></block-definition><block-definition s="asterisk, branches: %&apos;branches&apos; branch length: %&apos;length&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><custom-block s="pinwheel, branches: %s size: %s backup: %s"><block var="branches"/><block var="length"/><block var="length"/></custom-block></script></block-definition><block-definition s="Polygon, branches: %&apos;branches&apos; branch length: %&apos;length&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><custom-block s="pinwheel, branches: %s size: %s backup: %s"><block var="branches"/><block var="length"/><l>0</l></custom-block></script></block-definition><block-definition s="polygon version 2, branches: %&apos;number of branches&apos; size %&apos;size&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doRepeat"><block var="number of branches"/><script><block s="forward"><block var="size"/></block><block s="turn"><block s="reportQuotient"><l>360</l><block var="number of branches"/></block></block></script></block></script></block-definition><block-definition s="nest squares, number of squares: %&apos;number of squares&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doFor"><l>number of squares</l><block var="number of squares"/><l>1</l><script><custom-block s="polygon version 2, branches: %s size %s"><l>4</l><block s="reportVariadicProduct"><list><l>5</l><block var="number of squares"/></list></block></custom-block></script></block></script></block-definition><block-definition s="Create drawing %&apos;drawing&apos; with width %&apos;x&apos; height %&apos;y&apos; and background %&apos;color&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%n"></input><input type="%n"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>drawing</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><l>1</l><block var="y"/><script><block s="doFor"><l>i</l><l>1</l><block var="x"/><script><block s="doAddToList"><block var="color"/><block var="drawing"/></block></script></block></script></block></script></block></script></block-definition><block-definition s="color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos; %&apos;a&apos; as rgba" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="r"/><block var="g"/><block var="b"/><block var="a"/></list></block></block></script></block-definition><block-definition s="insert circle at x,y %&apos;x&apos; %&apos;y&apos; with radius %&apos;r&apos; and color %&apos;l&apos; for drawing %&apos;v&apos; with dimensions %&apos;w&apos; %&apos;h&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%l"></input><input type="%l"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doWarp"><script><block s="doFor"><l>j</l><l>1</l><block var="h"/><script><block s="doFor"><l>i</l><l>1</l><block var="w"/><script><block s="doIf"><block s="reportLessThan"><block s="reportVariadicSum"><list><block s="reportPower"><block s="reportDifference"><block var="j"/><block var="y"/></block><l>2</l></block><block s="reportPower"><block s="reportDifference"><block var="i"/><block var="x"/></block><l>2</l></block></list></block><block s="reportPower"><block var="r"/><l>2</l></block></block><script><block s="doReplaceInList"><block var="a"/><block var="v"/><block var="l"/></block></script></block><block s="doChangeVar"><l>a</l><l>1</l></block></script></block></script></block></script></block></script><scripts><script x="408.0000030000001" y="162.00000300000005"><block var="v"/></script></scripts></block-definition><block-definition s="fill area x1,y1,x2,y2 %&apos;x1&apos; %&apos;y1&apos; %&apos;x2&apos; %&apos;y2&apos; of drawing %&apos;d&apos; with color %&apos;c&apos; with dimensions %&apos;w&apos; %&apos;h&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%l"></input><input type="%l"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doWarp"><script><block s="doFor"><l>j</l><l>1</l><block var="h"/><script><block s="doFor"><l>i</l><l>1</l><block var="w"/><script><block s="doChangeVar"><l>a</l><l>1</l></block><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block var="j"/><block var="y1"/></block><block s="reportLessThan"><block var="j"/><block var="y2"/></block></block><script><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block var="i"/><block var="x1"/></block><block s="reportLessThan"><block var="i"/><block var="x2"/></block></block><script><block s="doReplaceInList"><block var="a"/><block var="d"/><block var="c"/></block></script></block></script></block></script></block></script></block></script></block></script></block-definition><block-definition s="random color" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reportRandom"><l>1</l><l>255</l></block><block s="reportRandom"><l>1</l><l>255</l></block><block s="reportRandom"><l>1</l><l>255</l></block><l>255</l></list></block></block></script></block-definition><block-definition s="fill color %&apos;c&apos; with linear gradient %&apos;g1&apos; to %&apos;g2&apos; from drawing %&apos;l&apos; with dimensions %&apos;w&apos; %&apos;h&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input><input type="%l"></input><input type="%l"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doWarp"><script><block s="doFor"><l>j</l><l>1</l><block var="h"/><script><block s="doFor"><l>i</l><l>1</l><block var="w"/><script><block s="doIf"><block s="reportEquals"><block s="reportListItem"><block var="a"/><block var="l"/></block><block var="c"/></block><script><block s="doReplaceInList"><block var="a"/><block var="l"/><custom-block s="color %n %n %n %n as rgba"><custom-block s="gradient between %n %n step %n of %n"><block s="reportListItem"><l>1</l><block var="g1"/></block><block s="reportListItem"><l>1</l><block var="g2"/></block><block var="j"/><block var="h"/></custom-block><custom-block s="gradient between %n %n step %n of %n"><block s="reportListItem"><l>2</l><block var="g1"/></block><block s="reportListItem"><l>2</l><block var="g2"/></block><block var="j"/><block var="h"/></custom-block><custom-block s="gradient between %n %n step %n of %n"><block s="reportListItem"><l>3</l><block var="g1"/></block><block s="reportListItem"><l>3</l><block var="g2"/></block><block var="j"/><block var="h"/></custom-block><custom-block s="gradient between %n %n step %n of %n"><block s="reportListItem"><l>4</l><block var="g1"/></block><block s="reportListItem"><l>4</l><block var="g2"/></block><block var="j"/><block var="h"/></custom-block></custom-block></block></script></block><block s="doChangeVar"><l>a</l><l>1</l></block></script></block></script></block></script></block></script></block-definition><block-definition s="clear image %&apos;x&apos; with color %&apos;y&apos; with dimensions %&apos;w&apos; %&apos;h&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doFor"><l>j</l><l>1</l><block var="h"/><script><block s="doFor"><l>i</l><l>1</l><block var="w"/><script><block s="doReplaceInList"><block var="a"/><block var="x"/><block var="y"/></block><block s="doChangeVar"><l>a</l><l>1</l></block></script></block></script></block></script></block></script></block-definition><block-definition s="replace pixel %&apos;x&apos; , %&apos;y&apos; of %&apos;img&apos; with color %&apos;c&apos; and dimensions %&apos;x2&apos; %&apos;y2&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%l"></input><input type="%l"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReplaceInList"><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block var="y2"/><block var="y"/></list></block><block var="x"/></list></block><block var="img"/><block var="c"/></block></script><scripts><script x="60.4208994375" y="125.00000100000005"><block s="reportVariadicProduct"><list><block var="x2"/><l>5</l></list></block></script><script x="308.5097666249999" y="118.00000100000005"><block s="reportVariadicProduct"><list><block var="x2"/><l>5</l></list></block></script><script x="194.509766625" y="144.00000100000005"><block var="x"/></script></scripts></block-definition><block-definition s="replace color %&apos;c&apos; of drawing %&apos;d&apos; with color %&apos;c2&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doFor"><l>i</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="d"/></block><script><block s="doIf"><block s="reportEquals"><block s="reportListItem"><block var="i"/><block var="d"/></block><block var="c"/></block><script><block s="doReplaceInList"><block var="i"/><block var="d"/><block var="c2"/></block></script></block></script></block></script></block></script><scripts><script x="286.000001" y="66.83333433333337"><block s="doForEach"><l>item</l><block var="d"/><script></script></block></script></scripts></block-definition><block-definition s="gradient between %&apos;x&apos; %&apos;y&apos; step %&apos;q&apos; of %&apos;z&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block s="reportQuotient"><block s="reportDifference"><block var="x"/><block var="y"/></block><block var="z"/></block><block var="q"/></list></block><block var="y"/></list></block></block></script><scripts><script x="126.6669941875" y="113.00000299999999"><block var="x"/></script></scripts></block-definition><block-definition s="fill %&apos;x&apos; inside of %&apos;l&apos; for color %&apos;c&apos; with dimensions %&apos;w&apos; %&apos;h&apos; %&apos;substitute variable&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%cs"></input><input type="%l"></input><input type="%l"></input><input type="%n"></input><input type="%n"></input><input type="%upvar"></input></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>substitute variable</l><block s="reportNewList"><list></list></block></block><custom-block s="clear image %l with color %l with dimensions %n %n"><block var="substitute variable"/><custom-block s="color %n %n %n %n as rgba"><l>0</l><l>0</l><l>0</l><l>0</l></custom-block><block var="w"/><block var="h"/></custom-block><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doSetVar"><l>a</l><l>1</l></block><block s="doRun"><block var="x"/><list></list></block><block s="doFor"><l>j</l><l>1</l><block var="h"/><script><block s="doFor"><l>i</l><l>1</l><block var="w"/><script><block s="doIf"><block s="reportAnd"><block s="reportEquals"><block s="reportListItem"><block var="a"/><block var="l"/></block><block var="c"/></block><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><block var="a"/><block var="substitute variable"/></block><custom-block s="color %n %n %n %n as rgba"><l>0</l><l>0</l><l>0</l><l>0</l></custom-block></block></block></block><script><block s="doReplaceInList"><block var="a"/><block var="l"/><block s="reportListItem"><block var="a"/><block var="substitute variable"/></block></block></script></block><block s="doChangeVar"><l>a</l><l>1</l></block></script></block></script></block></script></block></script><scripts><script x="424.2841806874999" y="225.2000019999989"><block var="l"/></script></scripts></block-definition><block-definition s="max %&apos;a&apos; and %&apos;b&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>maxNum</l></list></block><block s="doIfElse"><block s="reportGreaterThan"><block var="a"/><block var="b"/></block><script><block s="doSetVar"><l>maxNum</l><block var="a"/></block></script><script><block s="doSetVar"><l>maxNum</l><block var="b"/></block></script></block><block s="doReport"><block var="maxNum"/></block></script><scripts><script x="196" y="91.19999999999999"><block s="doIfElse"><block s="reportGreaterThan"><block var="a"/><block var="b"/></block><script><block s="doReport"><block var="a"/></block></script><script><block s="doReport"><block var="b"/></block></script></block></script></scripts></block-definition><block-definition s="max3 %&apos;A&apos; %&apos;B&apos; %&apos;C&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><custom-block s="max %n and %n"><block var="A"/><custom-block s="max %n and %n"><block var="B"/><block var="C"/></custom-block></custom-block></block></script></block-definition><block-definition s="%&apos;a&apos; + %&apos;b&apos; + %&apos;c&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="reportVariadicSum"><list><block var="a"/><block s="reportVariadicSum"><list><block var="b"/><block var="c"/></list></block></list></block></block></script></block-definition><block-definition s="convert %&apos;a&apos; degrees Celsius to Fahrenheit" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block var="a"/><l>1.8</l></list></block><l>32</l></list></block></block></script></block-definition><block-definition s="convert %&apos;a&apos; percent to P or NP" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doIfElse"><block s="reportOr"><block s="reportEquals"><block var="a"/><l>80</l></block><block s="reportGreaterThan"><block var="a"/><l>80</l></block></block><script><block s="doReport"><l>P</l></block></script><script><block s="doReport"><l>NP</l></block></script></block></script></block-definition><block-definition s="DrawSides" type="command" category="pen"><header></header><code></code><translations></translations><inputs></inputs><script><block s="down"></block><block s="doRepeat"><block var="Sides"/><script><block s="forward"><l>50</l></block><block s="turn"><block s="reportQuotient"><l>360</l><block var="Sides"/></block></block></script></block><block s="up"></block></script></block-definition><block-definition s="Sides" type="command" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="gotoXY"><l>-120</l><l>90</l></block><block s="doAsk"><l>How many sides does your polygon have?</l></block><block s="doSetVar"><l>Sides</l><block s="getLastAnswer"></block></block><custom-block s="DrawSides"></custom-block><block s="doWait"><l>1</l></block><custom-block s="Sides"></custom-block></script></block-definition><block-definition s="switch backdrop to %&apos;backdrop&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s">Empty<options>Empty&#xD;next backdrop&#xD;previous backdrop&#xD;random backdrop</options></input></inputs><script><block s="doTellTo"><l>Stage</l><block s="reifyScript"><script><block s="doSwitchToCostume"><block var="backdrop"/></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="backdrop"/><custom-block s="backdrop %s"><l></l></custom-block></block></block><script><block s="doIfElse"><block s="reportEquals"><block var="backdrop"/><l>next backdrop</l></block><script><block s="doWearNextCostume"></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="backdrop"/><l>previous backdrop</l></block><script><block s="doRun"><block s="reportJSFunction"><list></list><l>this.doWearPreviousCostume();</l></block><list></list></block></script><script><block s="doIf"><block s="reportEquals"><block var="backdrop"/><l>random backdrop</l></block><script><block s="doRun"><block s="reportJSFunction"><list></list><l>this.wearCostume(this.costumes.at(Math.floor(Math.random() * (this.costumes.length())) + 1;));</l></block><list></list></block></script></block></script></block></script></block></script></block><block s="doBroadcast"><block s="reportJoinWords"><list><l>backdrop switches to </l><custom-block s="backdrop %s"><l></l></custom-block></list></block><list></list></block></script><list></list></block><list></list></block></script></block-definition><block-definition s="backdrop %&apos;type&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">number<options>number&#xD;name</options></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="type"/><l>number</l></block><script><block s="doReport"><block s="reportAttributeOf"><l><option>costume #</option></l><l>Stage</l></block></block></script><script><block s="doReport"><block s="reportAttributeOf"><l><option>costume name</option></l><l>Stage</l></block></block></script></block></script></block-definition><block-definition s="%&apos;type&apos; passes %&apos;num&apos;" type="predicate" category="control"><comment x="0" y="0" w="121" collapsed="false">use with |when&lt;&gt;} to make scratch&apos;s&#xD;|when [timer v] &gt; (10)} block</comment><variables><list struct="atomic" id="4692">old result</list></variables><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">loudness<options>loudness&#xD;timer</options></input><input type="%n">10</input></inputs><script><block s="doDeclareVariables"><list><l>value</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="type"/><l>loudness</l></block><script><block s="doSetVar"><l>value</l><custom-block s="loudness"></custom-block></block></script><script><block s="doSetVar"><l>value</l><block s="getTimer"></block></block></script></block><block s="doIf"><block s="reportNot"><block var="old result"/></block><script><block s="doSetVar"><l>old result</l><block s="reportGreaterThan"><block var="value"/><block var="num"/></block></block><block s="doReport"><block var="old result"/></block></script></block><block s="doSetVar"><l>old result</l><block s="reportGreaterThan"><block var="value"/><block var="num"/></block></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block-definition><block-definition s="active %&apos;in1&apos; and %&apos;in2&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%b"></input><input type="%b"></input></inputs><script><block s="doReport"><block s="reportAnd"><block var="in1"/><block var="in2"/></block></block></script></block-definition><block-definition s="active %&apos;in1&apos; or %&apos;in2&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%b"></input><input type="%b"></input></inputs><script><block s="doReport"><block s="reportOr"><block var="in1"/><block var="in2"/></block></block></script></block-definition><block-definition s="string of %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>counter</l></list></block><block s="doSetVar"><l>counter</l><l>0</l></block><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><script><block s="doChangeVar"><l>counter</l><l>1</l></block><block s="doIf"><block s="reportOr"><block s="reportNot"><block s="reportEquals"><block s="reportStringSize"><block s="reportListItem"><block var="counter"/><block var="list"/></block></block><l>1</l></block></block><block s="reportEquals"><block s="evaluate"><block s="reportJSFunction"><list><l>item</l></list><l>return typeof(item);</l></block><list><block s="reportListItem"><block var="counter"/><block var="list"/></block></list></block><l>number</l></block></block><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doSetVar"><l>counter</l><l>0</l></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><script><block s="doChangeVar"><l>counter</l><l>1</l></block><block s="doAddToList"><l> </l><block var="result"/></block><block s="doAddToList"><block s="reportListItem"><block var="counter"/><block var="list"/></block><block var="result"/></block></script></block><block s="doReport"><block s="reportJoinWords"><block s="reportCDR"><block var="result"/></block></block></block></script></block></script></block><block s="doReport"><block s="reportJoinWords"><block var="list"/></block></block></script></block></script></block-definition><block-definition s="for each %&apos;variable&apos; in %&apos;bound&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"></input><input type="%s"></input><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>counter</l></list></block><block s="doSetVar"><l>counter</l><l>0</l></block><block s="doRepeat"><block var="bound"/><script><block s="doChangeVar"><l>counter</l><l>1</l></block><block s="doRun"><block s="reportJSFunction"><list><l>variable</l><l>value</l><l>proc</l></list><l>proc.context.parentContext.variables.setVar(variable, value);</l></block><list><block var="variable"/><block var="counter"/></list></block><block s="doRun"><block var="action"/><list></list></block></script></block></script></block-definition><block-definition s="while %&apos;cond&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%boolUE"></input><input type="%cs"></input></inputs><script><block s="doUntil"><block s="reportNot"><block s="evaluate"><block var="cond"/><list></list></block></block><script><block s="doRun"><block var="action"/><list></list></block></script></block></script></block-definition><block-definition s="clear counter" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>this.parentThatIsA(StageMorph).counter=0;</l></block><list></list></block></script></block-definition><block-definition s="increment counter" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>if (this.parentThatIsA(StageMorph).counter === undefined){&#xD; this.parentThatIsA(StageMorph).counter=1;&#xD;}else{&#xD; this.parentThatIsA(StageMorph).counter++;&#xD;}</l></block><list></list></block></script></block-definition><block-definition s="counter" type="reporter" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>if (this.parentThatIsA(StageMorph).counter === undefined){&#xD; this.parentThatIsA(StageMorph).counter=0;&#xD; return 0;&#xD;}else{&#xD; return this.parentThatIsA(StageMorph).counter;&#xD;}</l></block><list></list></block></block></script></block-definition><block-definition s="costume %&apos;type&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">number<options>number&#xD;name</options></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="type"/><l>number</l></block><script><block s="doReport"><block s="getCostumeIdx"></block></block></script><script><block s="doReport"><block s="reportAttributeOf"><l><option>costume name</option></l><block s="reportGet"><l><option>self</option></l></block></block></block></script></block></script></block-definition><block-definition s="%&apos;base&apos; contains %&apos;sub&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">apple</input><input type="%s">a</input></inputs><script><block s="doDeclareVariables"><list><l>counter</l><l>list</l></list></block><block s="doSetVar"><l>list</l><block s="reportTextSplit"><block var="base"/><l><option>letter</option></l></block></block><block s="doSetVar"><l>counter</l><l>1</l></block><block s="doRepeat"><block s="reportVariadicSum"><list><block s="reportDifference"><block s="reportStringSize"><block var="base"/></block><block s="reportStringSize"><block var="sub"/></block></block><l>1</l></list></block><script><block s="doIf"><block s="evaluate"><block s="reifyScript"><script><block s="doDeclareVariables"><list><l>region</l></list></block><block s="doSetVar"><l>region</l><l>0</l></block><block s="doRepeat"><block s="reportStringSize"><block var="sub"/></block><script><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block s="reportVariadicSum"><list><block var="region"/><l>1</l></list></block><block var="sub"/></block><block s="reportLetter"><block s="reportVariadicSum"><list><block var="region"/><block var="counter"/></list></block><block var="base"/></block></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doChangeVar"><l>region</l><l>1</l></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><list></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doChangeVar"><l>counter</l><l>1</l></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block-definition><block-definition s="item # of %&apos;item&apos; in %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s">thing</input><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>counter</l></list></block><block s="doSetVar"><l>counter</l><l>1</l></block><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><script><block s="doIf"><block s="reportEquals"><block s="reportListItem"><block var="counter"/><block var="list"/></block><block var="item"/></block><script><block s="doReport"><block var="counter"/></block></script></block><block s="doChangeVar"><l>counter</l><l>1</l></block></script></block><block s="doReport"><l>0</l></block></script></block-definition><block-definition s="loudness" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIf"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return typeof meter == "undefined";</l></block><list></list></block><script><block s="doRun"><block s="reportJSFunction"><list></list><l>navigator.getUserMedia = ( navigator.getUserMedia ||&#xD;                       navigator.webkitGetUserMedia ||&#xD;                       navigator.mozGetUserMedia ||&#xD;                       navigator.msGetUserMedia);&#xD;&#xD;var audioContext = new AudioContext();&#xD;&#xD;/*&#xD;The MIT License (MIT)&#xD;&#xD;Copyright (c) 2014 Chris Wilson&#xD;&#xD;Permission is hereby granted, free of charge, to any person obtaining a copy&#xD;of this software and associated documentation files (the "Software"), to deal&#xD;in the Software without restriction, including without limitation the rights&#xD;to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&#xD;copies of the Software, and to permit persons to whom the Software is&#xD;furnished to do so, subject to the following conditions:&#xD;&#xD;The above copyright notice and this permission notice shall be included in all&#xD;copies or substantial portions of the Software.&#xD;&#xD;THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&#xD;IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&#xD;FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE&#xD;AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&#xD;LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&#xD;OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE&#xD;SOFTWARE.&#xD;*/&#xD;&#xD;function createAudioMeter (audioContext,clipLevel,averaging,clipLag) {&#xD;	 var processor = audioContext.createScriptProcessor(512);&#xD;	 processor.onaudioprocess = volumeAudioProcess;&#xD;	 processor.clipping = false;&#xD;	 processor.lastClip = 0;&#xD;	 processor.volume = 0;&#xD;	 processor.clipLevel = clipLevel || 0.98;&#xD;	 processor.averaging = averaging || 0.95;&#xD;	 processor.clipLag = clipLag || 750;&#xD; 	processor.connect(audioContext.destination);&#xD; 	return processor;&#xD;};&#xD;&#xD;function volumeAudioProcess (event) {&#xD;  var buf = event.inputBuffer.getChannelData(0),&#xD;      bufLength = buf.length,&#xD; 	    sum = 0,&#xD;      x;&#xD;  for (var i=0; i&lt;bufLength; i++) {&#xD;   	x = buf[i];&#xD;   	if (Math.abs(x)&gt;=this.clipLevel) {&#xD;    		this.clipping = true;&#xD;    		this.lastClip = window.performance.now();&#xD;   	}&#xD;   	sum += x * x;&#xD;  }&#xD;  var rms =  Math.sqrt(sum / bufLength);&#xD;  this.volume = Math.max(rms, this.volume*this.averaging);&#xD;};&#xD;&#xD;function gotStream (stream) {&#xD;  mediaStreamSource = audioContext.createMediaStreamSource(stream);&#xD;  window.meter = createAudioMeter(audioContext);&#xD;  mediaStreamSource.connect(meter);&#xD;};&#xD;&#xD;navigator.getUserMedia(&#xD;  {&#xD;    "audio": {&#xD;      "mandatory": {&#xD;        "googEchoCancellation": "false",&#xD;        "googAutoGainControl": "false",&#xD;        "googNoiseSuppression": "false",&#xD;        "googHighpassFilter": "false"&#xD;      },&#xD;      "optional": []&#xD;    },&#xD;  }, gotStream, nop);</l></block><list></list></block></script></block><block s="doWaitUntil"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return typeof meter != undefined;</l></block><list></list></block></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return Math.floor(meter.volume * 100);</l></block><list></list></block></block></script></block-definition><block-definition s="do Javascript %&apos;script&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><block var="script"/></block><list></list></block></script></block-definition><block-definition s="switch costume to text %&apos;txt&apos; of color %&apos;clr&apos; size %&apos;sz&apos; and font %&apos;fnt&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%txt">Hello, world!</input><input type="%txt">#000000</input><input type="%n">20</input><input type="%txt">Arial</input></inputs><script><block s="doDeclareVariables"><list><l>errr</l></list></block><block s="doSetVar"><l>errr</l><l>InvalidStateError: Failed to execute &apos;drawImage&apos; on &apos;CanvasRenderingContext2D&apos;: The image argument is a canvas element with a width or height of 0.</l></block><custom-block s="safely try %cs then if %upvar %cs"><script><block s="doRun"><block s="reportJSFunction"><list><l>txt</l><l>s</l><l>f</l></list><l>var text = document.createElement("canvas");var ctx = text.getContext("2d");text.height = f.split("px")[0] * 3;ctx.font = f;text.width = ctx.measureText(txt).width;ctx.fillStyle = s;ctx.font = f; //Had to do this twice, or it wouldn&apos;t allow custom fontsctx.fillText(txt, 0, text.height * 0.6);this.costume = new Costume(text, txt + "TextMorph", new Point(text.width / 2, text.height / 2));this.drawNew();</l></block><list><block var="txt"/><block var="clr"/><block s="reportJoinWords"><list><block var="sz"/><l>px </l><block var="fnt"/></list></block></list></block></script><l>error</l><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var cnvs = document.createElement("canvas");cnvs.width = 1;cnvs.height = 1;this.costume = new Costume(cnvs, "Error", new Point(cnvs.width / 2, cnvs.height / 2));this.drawNew();</l></block><list></list></block></script></custom-block></script></block-definition><block-definition s="switch costume to button with text %&apos;txt&apos; status %&apos;pr&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%s" readonly="true">regular&#xD;        <options>regular=regularhighlighted=highlightedselected=selected</options></input></inputs><script><block s="doSwitchToCostume"><block s="evaluate"><block s="reportJSFunction"><list><l>txt</l><l>tc</l><l>bc</l><l>pr</l><l>rbi</l></list><l>this.class = "button";this.status = pr;var wb = new PushButtonMorph(null, null, txt);wb.fixLayout();wb.color = bc;var img;if (pr == "selected") {    img = wb.pressImage;} else if (pr == "regular") {    img = wb.image;} else {    img = wb.highlightImage;}img.getContext("2d").font = rbi + "10px sans-serif"img.getContext("2d").fillStyle = "rgb(" + tc.r + ", " + tc.g + ", " + tc.b + ")"img.getContext("2d").font = rbi + "10px sans-serif"img.getContext("2d").fillText(txt, (img.width - img.getContext("2d").measureText(txt).width) / 2, img.height * 0.60);return new Costume(img, "button", new Point(img.width / 2, img.height / 2));</l></block><list><block var="txt"/><custom-block s="color r %n g %n b %n"><l></l><l></l><l></l></custom-block><custom-block s="color r %n g %n b %n"><l></l><l></l><l></l></custom-block><block var="pr"/><l>normal</l></list></block></block></script><scripts><script x="117.45703325" y="396.6666696666668"><block var="tc"/></script><script x="145.45703325" y="404.66666966666656"><block var="bc"/></script><script x="434.45703324999977" y="383.6666696666667"><block var="rbi"/></script></scripts></block-definition><block-definition s="color r %&apos;r&apos; g %&apos;g&apos; b %&apos;b&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>r</l><l>g</l><l>b</l></list><l>return new Color(r, g, b);</l></block><list><block var="r"/><block var="g"/><block var="b"/></list></block></block></script></block-definition><block-definition s="draw checkbox checked? %&apos;c&apos; size %&apos;s&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%b">false</input><input type="%n">20</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>isChecked</l><l>size</l></list><l>var canvas = document.createElement("canvas");canvas.width = size;canvas.height = canvas.width;ctx = canvas.getContext("2d");ctx.beginPath();ctx.lineWidth = 5;ctx.strokeStyle = "black";ctx.rect(0, 0, canvas.width, canvas.height);ctx.fillStyle = "white";ctx.fillRect(ctx.lineWidth / 2, ctx.lineWidth / 2, canvas.width - ctx.lineWidth, canvas.height - ctx.lineWidth);if (isChecked) {ctx.moveTo(canvas.width * 0.2, canvas.height * 0.6);ctx.lineTo(canvas.width * 0.5, canvas.height * 0.9);ctx.moveTo(canvas.width * 0.5, canvas.height * 0.9);ctx.lineTo(canvas.width * 0.8, canvas.height * 0.1);}ctx.stroke();this.costume = new Costume(canvas, "unknown", new Point(0, 0));this.drawNew();</l></block><list><block var="c"/><block var="s"/></list></block></script></block-definition><block-definition s="sprites name" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><block s="reportGet"><l><option>name</option></l></block></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAskFor"><l></l><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>name</option></l></block></autolambda><list></list></block><list></list></block></autolambda><list></list></block><block s="reportGet"><l><option>other sprites</option></l></block></block></list></block></block></script></block></script></block-definition><block-definition s="sprites of %&apos;c&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><block s="evaluate"><block var="c"/><list></list></block></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAskFor"><l></l><block var="c"/><list></list></block></autolambda><list></list></block><block s="reportGet"><l><option>other sprites</option></l></block></block></list></block></block></script></block></script></block-definition><block-definition s="%&apos;a&apos; ↑↑ %&apos;b&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>v</l></list></block><block s="doSetVar"><l>v</l><block var="a"/></block><block s="doRepeat"><block s="reportDifference"><block var="b"/><l>1</l></block><script><block s="doSetVar"><l>v</l><block s="reportPower"><block var="a"/><block var="v"/></block></block></script></block><block s="doReport"><block var="v"/></block></script></block></script></block-definition><block-definition s="F¹( %&apos;n&apos; )" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reportVariadicProduct"><list><custom-block s="F⁰( %n )"><block s="reportDifference"><block var="n"/><l>1</l></block></custom-block><l>2</l></list></block></block></script></block></script></block-definition><block-definition s="F⁰( %&apos;n&apos; )" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reportVariadicSum"><list><block var="n"/><l>1</l></list></block></block></script></block></script></block-definition><block-definition s="F²( %&apos;n&apos; )" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reportVariadicProduct"><list><custom-block s="F¹( %n )"><block s="reportVariadicProduct"><list><custom-block s="F⁰( %n )"><block s="reportDifference"><block var="n"/><l>1</l></block></custom-block><l>2</l></list></block></custom-block><l>2</l></list></block></block></script></block></script></block-definition><block-definition s="D( %&apos;n1&apos; , %&apos;n2&apos; )" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>var</l></list></block><block s="doSetVar"><l>var</l><block s="reportPower"><block var="n1"/><block var="n2"/></block></block><block s="doRepeat"><block s="reportVariadicProduct"><list><block var="n1"/><block var="n2"/></list></block><script><block s="doSetVar"><l>var</l><block s="reportPower"><block var="var"/><block var="n1"/></block></block></script></block><block s="doReport"><block var="var"/></block></script></block-definition><block-definition s="File save prompt . name: %&apos;file name&apos; text %&apos;file text&apos; extension: %&apos;file extension&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>textContents</l><l>textName</l><l>fileExtension</l></list><l>var ide=this.parentThatIsA(IDE_Morph);&#xD;ide.saveFileAs(textContents,&apos;text/&apos; + fileExtension + &apos;;charset=utf-8&apos;, textName);</l></block><list><block var="file text"/><block var="file name"/><block var="file extension"/></list></block></script></block-definition><block-definition s="make multiline of %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>var</l><l>item</l></list></block><block s="doSetVar"><l>var</l><l></l></block><block s="doSetVar"><l>item</l><l>1</l></block><block s="doRepeat"><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>1</l></block><script><block s="doSetVar"><l>var</l><block s="reportJoinWords"><list><block var="var"/><block s="reportJoinWords"><list><block s="reportListItem"><block var="item"/><block var="list"/></block><custom-block s="multiline %mlt"><l>&#xD;</l></custom-block></list></block></list></block></block><block s="doChangeVar"><l>item</l><l>1</l></block></script></block><block s="doSetVar"><l>var</l><block s="reportJoinWords"><list><block var="var"/><block s="reportListItem"><block var="item"/><block var="list"/></block></list></block></block><block s="doReport"><block var="var"/></block></script></block></script></block-definition><block-definition s="empty list" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block-definition><block-definition s="USE BIGNUMS %&apos;bool&apos;" type="command" category="operators"><comment x="0" y="0" w="303.3333333333333" collapsed="false">call with True to turn on the entire Scheme numeric tower, including infinite-precision integers, exact rationals, and complex numbers; call with False to restore native JavaScript arithmetic.</comment><header></header><code></code><translations>pt:altera utilização de aritmética do Scheme para _&#xD;</translations><inputs><input type="%b"></input></inputs><script><block s="doDeclareVariables"><list><l>isDone</l></list></block><block s="doSetVar"><l>isDone</l><block s="evaluate"><block s="reportJSFunction"><list><l>useBigNums</l></list><l>var done = false;&#xD;&#xD;function initialize (callback) {&#xD;    var bigScript = document.createElement(&apos;script&apos;);&#xD;    bigScript.src = &apos;//snap.berkeley.edu/snap/libraries/biginteger.js&apos;;&#xD;    bigScript.onload = loadScheme;&#xD;    document.head.appendChild(bigScript);&#xD;&#xD;    function loadScheme () {&#xD;        var schemeScript = document.createElement(&apos;script&apos;);&#xD;        schemeScript.src = &apos;//snap.berkeley.edu/snap/libraries/schemeNumber.js&apos;;&#xD;        schemeScript.onload = finish;&#xD;        document.head.appendChild(schemeScript);&#xD;    }&#xD;&#xD;    function finish () {&#xD;        makeGlobalObject();&#xD;        callback();&#xD;    }&#xD;}&#xD;&#xD;function makeGlobalObject () {&#xD;    window.bigNumbers = {&#xD;        originalEvaluate: InputSlotMorph.prototype.evaluate,&#xD;        originalChangeVar: VariableFrame.prototype.changeVar,&#xD;        originalPrims: {&#xD;            reportBasicSum: Process.prototype.reportBasicSum,&#xD;            reportBasicDifference: Process.prototype.reportBasicDifference,&#xD;            reportBasicProduct: Process.prototype.reportBasicProduct,&#xD;            reportBasicQuotient: Process.prototype.reportBasicQuotient,&#xD;            reportBasicPower: Process.prototype.reportBasicPower,&#xD;            reportBasicModulus: Process.prototype.reportBasicModulus,&#xD;            reportBasicRandom: Process.prototype.reportBasicRandom,&#xD;            reportBasicLessThan: Process.prototype.reportBasicLessThan,&#xD;            reportBasicGreaterThan: Process.prototype.reportBasicGreaterThan,&#xD;            reportEquals: Process.prototype.reportEquals,&#xD;            reportIsIdentical: Process.prototype.reportIsIdentical,&#xD;            reportMonadic: Process.prototype.reportMonadic&#xD;        }&#xD;    };&#xD;}&#xD;&#xD;function loadBlocks () {&#xD;    var fn = SchemeNumber.fn;&#xD;    var originalPrims = window.bigNumbers.originalPrims;&#xD;    if (useBigNums) {&#xD;        InputSlotMorph.prototype.evaluate = function () {&#xD;            var contents = this.contents();&#xD;            if (this.constant) {&#xD;                return this.constant;&#xD;            }&#xD;            if (this.isNumeric) {&#xD;                return parseNumber(contents.text || &apos;0&apos;);&#xD;            }&#xD;            return contents.text;&#xD;        };&#xD;        VariableFrame.prototype.changeVar = function (name, delta, sender) {&#xD;            var frame = this.find(name),&#xD;                value,&#xD;                newValue;&#xD;            if (frame) {&#xD;                value = parseNumber(frame.vars[name].value);&#xD;                newValue = Number.isNaN(value) ? delta : fn[&apos;+&apos;](value, parseNumber(delta));&#xD;                if (sender instanceof SpriteMorph &amp;&amp;&#xD;                        (frame.owner instanceof SpriteMorph) &amp;&amp;&#xD;                        (sender !== frame.owner)) {&#xD;                    sender.shadowVar(name, newValue);&#xD;                } else {&#xD;                    frame.vars[name].value = newValue;&#xD;                }&#xD;&#xD;            }&#xD;        };&#xD;        Object.assign(Process.prototype, {&#xD;            reportBasicSum: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return fn[&apos;+&apos;](a, b);&#xD;            },&#xD;            reportBasicDifference: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return fn[&apos;-&apos;](a, b);&#xD;            },&#xD;            reportBasicProduct: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return fn[&apos;*&apos;](a, b);&#xD;            },&#xD;            reportBasicQuotient: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (fn[&apos;=&apos;](b, &apos;0&apos;) &amp;&amp; !fn[&apos;=&apos;](a, &apos;0&apos;)) {&#xD;                      return (fn[&apos;&lt;&apos;](a, &apos;0&apos;) ? SchemeNumber(&apos;-inf.0&apos;) : SchemeNumber(&apos;+inf.0&apos;))&#xD;                };&#xD;                if (Number.isNaN(a) || Number.isNaN(b) || fn[&apos;=&apos;](b, &apos;0&apos;)) return NaN;&#xD;                return fn[&apos;/&apos;](a, b);&#xD;            },&#xD;            reportBasicPower: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return fn[&apos;expt&apos;](a, b);&#xD;            },&#xD;            reportBasicModulus: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                var result = fn.mod(a, b);&#xD;                if (fn[&apos;&lt;&apos;](b, &apos;0&apos;) &amp;&amp; fn[&apos;&gt;&apos;](result, &apos;0&apos;)) {&#xD;                    result = fn[&apos;+&apos;](result, b);&#xD;                }&#xD;                return result;&#xD;            },&#xD;            reportBasicRandom: function (min, max) {&#xD;                var floor = parseNumber(min),&#xD;                    ceil = parseNumber(max);&#xD;                if (Number.isNaN(floor) || Number.isNaN(ceil)) return NaN;&#xD;                if (!fn[&apos;=&apos;](fn.mod(floor, &apos;1&apos;), &apos;0&apos;) || !fn[&apos;=&apos;](fn.mod(ceil, &apos;1&apos;), &apos;0&apos;)) {&#xD;                    // One of the numbers isn&apos;t whole. Include the decimal.&#xD;                    return fn[&apos;+&apos;](&#xD;                        fn[&apos;*&apos;](&#xD;                            Math.random(),&#xD;                            fn[&apos;-&apos;](ceil, floor)&#xD;                        ),&#xD;                        floor&#xD;                    );&#xD;                }&#xD;                return fn.floor(&#xD;                    fn[&apos;+&apos;](&#xD;                        fn[&apos;*&apos;](&#xD;                            Math.random(),&#xD;                            fn[&apos;+&apos;](&#xD;                                fn[&apos;-&apos;](ceil, floor),&#xD;                                &apos;1&apos;&#xD;                            )&#xD;                        ),&#xD;                        floor&#xD;                    )&#xD;                );&#xD;            },&#xD;            reportBasicLessThan: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return fn[&apos;&lt;&apos;](a, b);&#xD;            },&#xD;            reportBasicGreaterThan: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return fn[&apos;&gt;&apos;](a, b);&#xD;            },&#xD;            reportEqual: function (a, b) {&#xD;                x = parseNumber(a);&#xD;                y = parseNumber(b);&#xD;                if (Number.isNaN(x) || Number.isNaN(y)) return snapEquals(a, b);&#xD;                return fn[&apos;=&apos;](x, y);&#xD;            },&#xD;            reportIsIdentical: function (a, b) {&#xD;                x = parseNumber(a);&#xD;                y = parseNumber(b);&#xD;                if (Number.isNaN(x) || Number.isNaN(y)) return originalPrims.reportIsIdentical(a, b);&#xD;                return fn[&apos;=&apos;](x, y);&#xD;            },&#xD;            reportMonadic: function (fname, n) {&#xD;                if (this.enableHyperOps) {&#xD;                    if (n instanceof List) {&#xD;                        return n.map(each =&gt; this.reportMonadic(fname, each));&#xD;                    }&#xD;                }&#xD;&#xD;                n = parseNumber(n);&#xD;                if (Number.isNaN(n)) return NaN;&#xD;&#xD;                switch (Process.prototype.inputOption(fname)) {&#xD;                case &apos;abs&apos;:&#xD;                    return fn.abs(n);&#xD;                case &apos;neg&apos;:&#xD;                    return fn[&apos;-&apos;](n);&#xD;                case &apos;ceiling&apos;:&#xD;                    return fn.ceiling(n);&#xD;                case &apos;floor&apos;:&#xD;                    return fn.floor(n);&#xD;                case &apos;sqrt&apos;:&#xD;                    return sqrt(n);&#xD;                case &apos;sin&apos;:&#xD;                    return fn.sin(radians(n));&#xD;                case &apos;cos&apos;:&#xD;                    return fn.cos(radians(n));&#xD;                case &apos;tan&apos;:&#xD;                    return fn.tan(radians(n));&#xD;                case &apos;asin&apos;:&#xD;                    return degrees(fn.asin(n));&#xD;                case &apos;acos&apos;:&#xD;                    return degrees(fn.acos(n));&#xD;                case &apos;atan&apos;:&#xD;                    return degrees(fn.atan(n));&#xD;                case &apos;ln&apos;:&#xD;                    return fn.log(n);&#xD;                case &apos;log&apos;:&#xD;                    return fn.log(n, &apos;10&apos;);&#xD;                case &apos;lg&apos;:&#xD;                    return fn.log(n, &apos;2&apos;);&#xD;                case &apos;e^&apos;:&#xD;                    return fn.exp(n);&#xD;                case &apos;10^&apos;:&#xD;                    return fn.expt(&apos;10&apos;, n);&#xD;                case &apos;2^&apos;:&#xD;                    return fn.expt(&apos;2&apos;, n);&#xD;                default:&#xD;                    return SchemeNumber(&apos;0&apos;);&#xD;                }&#xD;            }&#xD;        });&#xD;    } else {&#xD;        InputSlotMorph.prototype.evaluate = window.bigNumbers.originalEvaluate;&#xD;        VariableFrame.prototype.changeVar = window.bigNumbers.originalChangeVar;&#xD;        Object.assign(Process.prototype, originalPrims);&#xD;    }&#xD;    done = true;&#xD;}&#xD;&#xD;function parseNumber (n) {&#xD;    var fn = SchemeNumber.fn;&#xD;    if (!fn[&apos;number?&apos;](n)) {&#xD;        n = &apos;&apos; + n;&#xD;        try {&#xD;            return parseENotation(n) || SchemeNumber(n);&#xD;        } catch (err) {&#xD;            return NaN;&#xD;        }&#xD;    }&#xD;    return n;&#xD;}&#xD;&#xD;function parseENotation (n) {&#xD;    var fn = SchemeNumber.fn;&#xD;&#xD;    var numbers = n.match(/^(-?\d+\.?\d*|-?\.\d+)e(-?\d+)$/i);&#xD;    if (!numbers) return null;&#xD;&#xD;    var coefficient = numbers[1];&#xD;    var exponent = numbers[2];&#xD;    return fn[&apos;*&apos;](&#xD;        coefficient,&#xD;        fn.expt(&apos;10&apos;, exponent)&#xD;    );&#xD;}&#xD;&#xD;function sqrt (n) {&#xD;    var fn = SchemeNumber.fn;&#xD;&#xD;    if (!fn[&apos;exact?&apos;](n) || !fn[&apos;rational?&apos;](n) || fn[&apos;&lt;&apos;](n,&apos;0&apos;)) return fn.sqrt(n);&#xD;&#xD;    var rootNumerator = fn[&apos;exact-integer-sqrt&apos;](fn.numerator(n));&#xD;    if (!fn[&apos;=&apos;](rootNumerator[1], &apos;0&apos;)) return fn.sqrt(n);&#xD;&#xD;    var rootDenominator = fn[&apos;exact-integer-sqrt&apos;](fn.denominator(n));&#xD;    if (!fn[&apos;=&apos;](rootDenominator[1], &apos;0&apos;)) return fn.sqrt(n);&#xD;&#xD;    return fn[&apos;/&apos;](rootNumerator[0], rootDenominator[0]);&#xD;}&#xD;&#xD;function isDone () {&#xD;    return done;&#xD;}&#xD;&#xD;if (window.bigNumbers) {&#xD;    loadBlocks();&#xD;} else {&#xD;    initialize(loadBlocks);&#xD;}&#xD;&#xD;return isDone;</l></block><list><block var="bool"/></list></block></block><block s="doWaitUntil"><block s="evaluate"><block var="isDone"/><list></list></block></block></script></block-definition><block-definition s="%&apos;n&apos; !" type="reporter" category="operators"><comment x="0" y="0" w="190.66666666666666" collapsed="false">The factorial function, to make very large numbers, to demo bignums.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block var="n"/><l>0</l></block><l>1</l><block s="reportVariadicProduct"><list><block var="n"/><custom-block s="%n !"><block s="reportDifference"><block var="n"/><l>1</l></block></custom-block></list></block></block></block></script></block-definition><block-definition s="Scheme number %&apos;function&apos; of %&apos;number&apos;" type="reporter" category="operators"><comment x="0" y="0" w="300" collapsed="true">Provides Scheme arithmetic functions not in JavaScript</comment><header></header><code></code><translations>pt:_ de _&#xD;</translations><inputs><input type="%s" readonly="true"><options>number?&#xD;complex?&#xD;real?&#xD;rational?&#xD;integer?&#xD;exact?&#xD;inexact?&#xD;exact&#xD;inexact&#xD;finite?&#xD;infinite?&#xD;nan?&#xD;numerator&#xD;denominator&#xD;real-part&#xD;imag-part&#xD;magnitude&#xD;angle</options></input><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>which</l><l>num</l></list><l>function parseNumber (n) {&#xD;    var fn = SchemeNumber.fn;&#xD;    if (!fn[&apos;number?&apos;](n)) {&#xD;        n = &apos;&apos; + n;&#xD;        try {&#xD;            return parseENotation(n) || SchemeNumber(n);&#xD;        } catch (err) {&#xD;            return NaN;&#xD;        }&#xD;    }&#xD;    return n;&#xD;}&#xD;&#xD;function parseENotation (n) {&#xD;    var fn = SchemeNumber.fn;&#xD;&#xD;    var numbers = n.match(/^(-?\d+\.?\d*|-?\.\d+)e(-?\d+)$/i);&#xD;    if (!numbers) return null;&#xD;&#xD;    var coefficient = numbers[1];&#xD;    var exponent = numbers[2];&#xD;    return fn[&apos;*&apos;](&#xD;        coefficient,&#xD;        fn.expt(&apos;10&apos;, exponent)&#xD;    );&#xD;}&#xD;var fn=SchemeNumber.fn,&#xD;      number=parseNumber(num);&#xD;&#xD;switch (which) {&#xD;  case &apos;number?&apos;:&#xD;  case &apos;complex?&apos;:&#xD;    return (fn[&apos;number?&apos;](number));&#xD;  case &apos;real?&apos;:&#xD;    return (fn[&apos;real?&apos;](number) || fn[&apos;real-valued?&apos;](number));&#xD;  case &apos;rational?&apos;:&#xD;    return (fn[&apos;rational?&apos;](number) || (fn[&apos;=&apos;](number, fn.rationalize(number, parseNumber(&apos;1.0e-5&apos;)))));&#xD;  case &apos;integer?&apos;:&#xD;    return (fn[&apos;integer?&apos;](number) || fn[&apos;integer-valued?&apos;](number));&#xD;  case &apos;exact?&apos;:&#xD;  case &apos;inexact?&apos;:&#xD;  case &apos;finite?&apos;:&#xD;  case &apos;infinite?&apos;:&#xD;  case &apos;nan?&apos;:&#xD;  case &apos;real-part&apos;:&#xD;  case &apos;imag-part&apos;:&#xD;    return (fn[which](number));&#xD;  case &apos;magnitude&apos;:&#xD;    return (fn.magnitude(number));&#xD;  case &apos;angle&apos;:&#xD;    return (fn.angle(number));&#xD;  case &apos;numerator&apos;:&#xD;    return (fn.numerator(number));&#xD;  case &apos;denominator&apos;:&#xD;    return (fn.denominator(number));&#xD;  case &apos;exact&apos;:&#xD;    return (fn.exact(number));&#xD;case &apos;inexact&apos;:&#xD;    return (fn.inexact(number));&#xD;}</l></block><list><block var="function"/><block var="number"/></list></block></block></script></block-definition><block-definition s="dan( %&apos;n&apos; )" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>var</l></list></block><block s="doSetVar"><l>var</l><block var="n"/></block><block s="doRepeat"><block var="n"/><script><block s="doSetVar"><l>var</l><block s="reportVariadicProduct"><list><block var="var"/><block s="reportVariadicSum"><list><block var="n"/><block var="var"/></list></block></list></block></block></script></block><block s="doReport"><block var="var"/></block></script></block></script></block-definition><block-definition s="shift %&apos;text&apos; by %&apos;n&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="reportJoinWords"><list><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportUnicodeAsLetter"><l></l></block></autolambda><list></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportVariadicSum"><list><block s="reportUnicode"><l></l></block><block var="n"/></list></block></autolambda><list></list></block><block s="reportTextSplit"><block var="text"/><l><option>letter</option></l></block></block></block></list></block></block></script></block-definition><block-definition s="number %&apos;n&apos; base %&apos;b&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>n</l><l>b</l></list><l>return Number(n).toString(b);</l></block><list><block var="n"/><block var="b"/></list></block></block></script></block-definition><block-definition s="username" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>var ide = this.parentThatIsA(IDE_Morph);&#xD;return ide.cloud.username;</l></block><list></list></block></block></script></block-definition><block-definition s="new BN %&apos;number&apos;" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportLessThan"><block var="number"/><l>0</l></block><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doSetVar"><l>a</l><custom-block s="new BN %txt"><custom-block s="all but first letter of %txt"><block var="number"/></custom-block></custom-block></block><block s="doReplaceInList"><l>1</l><block var="a"/><block s="reportVariadicProduct"><list><block s="reportListItem"><l>1</l><block var="a"/></block><l>-1</l></list></block></block><block s="doReport"><block var="a"/></block></script></block><block s="doIfElse"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block s="reportTextSplit"><block var="number"/><l>e</l></block></block><l>1</l></block><script><block s="doDeclareVariables"><list><l>m</l><l>e</l><l>a</l></list></block><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="number"/><l>e</l></block></block><l></l></block><script><block s="doSetVar"><l>m</l><l>1</l></block></script><script><block s="doSetVar"><l>m</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="number"/><l>e</l></block></block></block></script></block><block s="doIfElse"><block s="reportListContainsItem"><block s="reportNewList"><list><l></l><l>-</l></list></block><block s="reportListItem"><l>2</l><block s="reportTextSplit"><block var="number"/><l>e</l></block></block></block><script><block s="doSetVar"><l>e</l><block s="reportJoinWords"><list><block s="reportListItem"><l>2</l><block s="reportTextSplit"><block var="number"/><l>e</l></block></block><block s="reportMonadic"><l><option>10^</option></l><block s="reportListItem"><l>3</l><block s="reportTextSplit"><block var="number"/><l>e</l></block></block></block></list></block></block></script><script><block s="doSetVar"><l>e</l><block s="reportVariadicProduct"><list><block s="reportListItem"><l>2</l><block s="reportTextSplit"><block var="number"/><l>e</l></block></block><block s="reportMonadic"><l><option>10^</option></l><block s="reportListItem"><l>3</l><block s="reportTextSplit"><block var="number"/><l>e</l></block></block></block></list></block></block></script></block><block s="doReport"><custom-block s="normalise BN %l"><block s="reportNewList"><list><block var="m"/><block var="e"/></list></block></custom-block></block></script><script><block s="doIf"><block s="reportIsA"><block var="number"/><l><option>number</option></l></block><script><block s="doIfElse"><block s="reportEquals"><block var="number"/><l>0</l></block><script><block s="doReport"><block s="reportNewList"><list><l>0</l><l>0</l></list></block></block></script><script><block s="doReport"><block s="reportNewList"><list><block s="reportQuotient"><block var="number"/><block s="reportMonadic"><l><option>10^</option></l><block s="reportMonadic"><l><option>floor</option></l><block s="reportMonadic"><l><option>log</option></l><block var="number"/></block></block></block></block><block s="reportMonadic"><l><option>floor</option></l><block s="reportMonadic"><l><option>log</option></l><block var="number"/></block></block></list></block></block></script></block></script></block></script></block><block s="doReport"><l>null</l></block></script><scripts><script x="357" y="785.1666666666674"><block s="doSetVar"><l>a</l><l>0</l></block></script></scripts></block-definition><block-definition s="empty word? %&apos;word&apos;" type="predicate" category="operators"><comment x="0" y="0" w="208" collapsed="false">Takes a text string as input, and reports TRUE if the string has no characters in it of any kind, otherwise false.</comment><header></header><code></code><translations>pt:a palavra _ está vazia&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="word"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="empty word? %txt"><l></l></custom-block></autolambda><list></list></block><block var="word"/></block></block></script></block><block s="doReport"><block s="reportEquals"><block s="reportStringSize"><block var="word"/></block><l>0</l></block></block></script></block-definition><block-definition s="empty sentence? %&apos;sentence&apos;" type="predicate" category="operators"><comment x="0" y="0" w="221" collapsed="false">Takes a text string as input, and reports TRUE if the input contains no characters other than spaces (therefore, no words when the string is considered as a sentence), otherwise FALSE.</comment><header></header><code></code><translations>pt:a frase _ está vazia&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l></list></block><block s="doIf"><block s="reportIsA"><block var="sentence"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportListIsEmpty"><block var="sentence"/></block></block></script></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doReport"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></script></block-definition><block-definition s="sentence %&apos;phrase&apos;" type="reporter" category="lists"><comment x="0" y="0" w="302.6666666666667" collapsed="false">SENTENCE is the main constructor for sentences, represented&#xD;as lists of words.  It takes zero or more inputs, each of which can&#xD;be either a list or a text string.  If a list, the input is assumed to be&#xD;a list of words.  If a text string, it is converted to a list of words using&#xD;SENTENCE→LIST.  Then all the lists of words are appended to form a new list of words.&#xD;&#xD;If the inputs are lists of lists rather than lists of words, SENTENCE,&#xD;like APPEND, does only one level of flattening, reporting a list of&#xD;all the items of all the input lists.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%s"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="phrase"/></block><script><block s="doReport"><block s="reportNewList"><list></list><comment w="224.66666666666666" collapsed="true">Workaround for stupid append misfeature.</comment></block></block></script></block><block s="doReport"><block s="reportConcatenatedLists"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><l></l><l><option>list</option></l></block><l></l><custom-block s="sentence $arrowRight list %txt"><l></l></custom-block></block></autolambda><list></list></block><block var="phrase"/></block></block></block></script></block-definition><block-definition s="printable %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="188.66666666666666" collapsed="false">Takes a (possibly deep) list as input,&#xD;and reports a human-readable text form &#xD;of the list (namely, Lisp notation).</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block></block><script><block s="doReport"><block var="data"/></block></script></block><block s="doIf"><block s="reportListIsEmpty"><block var="data"/></block><script><block s="doReport"><l>()</l></block></script></block><block s="doReport"><block s="reportJoinWords"><list><l>(</l><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="printable %l"><l/></custom-block></autolambda><list></list></block><block var="data"/></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l> </l><l></l></list></block></autolambda><list></list></block></block><l>)</l></list></block></block></script></block-definition><block-definition s="normalise BN %&apos;number&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="number"/><custom-block s="new BN %txt"><l>0</l></custom-block></block><script><block s="doReport"><custom-block s="new BN %txt"><l>0</l></custom-block></block></script></block><block s="doDeclareVariables"><list><l>m</l><l>e</l></list></block><block s="doSetVar"><l>m</l><block s="reportMonadic"><l><option>abs</option></l><block s="reportListItem"><l>1</l><block var="number"/></block></block></block><block s="doSetVar"><l>e</l><block s="reportListItem"><l>2</l><block var="number"/></block></block><block s="doUntil"><block s="reportAnd"><block s="reportGreaterThan"><block var="m"/><l>0.999999999999999</l></block><block s="reportLessThan"><block var="m"/><l>10</l></block></block><script><block s="doIfElse"><block s="reportOr"><block s="reportGreaterThan"><block var="m"/><l>10</l></block><block s="reportEquals"><block var="m"/><l>10</l></block></block><script><block s="doSetVar"><l>m</l><block s="reportQuotient"><block var="m"/><l>10</l></block></block><block s="doChangeVar"><l>e</l><l>1</l></block></script><script><block s="doIf"><block s="reportLessThan"><block var="m"/><l>1</l></block><script><block s="doSetVar"><l>m</l><block s="reportVariadicProduct"><list><block var="m"/><l>10</l></list></block></block><block s="doChangeVar"><l>e</l><l>-1</l></block></script></block></script></block></script></block><block s="doReport"><block s="reportNewList"><list><block var="m"/><block var="e"/></list></block></block></script><scripts><script x="340" y="340.16666666666663"><block s="reportMonadic"><l><option>abs</option></l><l></l></block></script><script x="297.9306640625" y="278.3333333333333"><block s="reportMonadic"><l><option>abs</option></l><l></l></block></script></scripts></block-definition><block-definition s="BN %&apos;x&apos; &gt; %&apos;y&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="x"/></block><l>0</l></block><script><block s="doReplaceInList"><l>2</l><block var="x"/><l>-Infinity</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="y"/></block><l>0</l></block><script><block s="doReplaceInList"><l>2</l><block var="y"/><l>-Infinity</l></block></script></block><block s="doIfElse"><block s="reportGreaterThan"><block s="reportListItem"><l>2</l><block var="x"/></block><block s="reportListItem"><l>2</l><block var="y"/></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doIfElse"><block s="reportGreaterThan"><block s="reportListItem"><l>1</l><block var="x"/></block><block s="reportListItem"><l>1</l><block var="y"/></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block-definition><block-definition s="BN %&apos;x&apos; + %&apos;y&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doReport"><l></l></block></script></block-definition><block-definition s="BN %&apos;x&apos; x %&apos;y&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportListContainsItem"><block s="reportNewList"><list><block var="x"/><block var="y"/></list></block><custom-block s="new BN %txt"><l>0</l></custom-block></block><script><block s="doReport"><custom-block s="new BN %txt"><l>0</l></custom-block></block></script></block><block s="doDeclareVariables"><list><l>a</l><l>neg</l></list></block><block s="doSetVar"><l>neg</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doIf"><custom-block s="BN %l &lt; %l"><block var="x"/><custom-block s="new BN %txt"><l>0</l></custom-block></custom-block><script><block s="doSetVar"><l>neg</l><block s="reportNot"><block var="neg"/></block></block></script></block><block s="doIf"><custom-block s="BN %l &lt; %l"><block var="y"/><custom-block s="new BN %txt"><l>0</l></custom-block></custom-block><script><block s="doSetVar"><l>neg</l><block s="reportNot"><block var="neg"/></block></block></script></block><block s="doSetVar"><l>a</l><custom-block s="normalise BN %l"><block s="reportNewList"><list><block s="reportVariadicProduct"><list><block s="reportListItem"><l>1</l><block var="x"/></block><block s="reportListItem"><l>1</l><block var="y"/></block></list></block><block s="reportVariadicSum"><list><block s="reportListItem"><l>2</l><block var="x"/></block><block s="reportListItem"><l>2</l><block var="y"/></block></list></block></list></block></custom-block></block><block s="doIf"><block var="neg"/><script><block s="doReplaceInList"><l>1</l><block var="a"/><block s="reportVariadicProduct"><list><block s="reportListItem"><l>1</l><block var="a"/></block><l>-1</l></list></block></block></script></block><block s="doReport"><block var="a"/></block></script></block-definition><block-definition s="BN log %&apos;base&apos; ( %&apos;x&apos; )" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">10</input><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="new BN %txt"><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportListItem"><l>2</l><block var="x"/></block><block s="reportMonadic"><l><option>log</option></l><block s="reportListItem"><l>1</l><block var="x"/></block></block></list></block><block s="reportMonadic"><l><option>log</option></l><block var="base"/></block></block></custom-block></block></script></block-definition><block-definition s="BN %&apos;x&apos; to normal number" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportVariadicProduct"><list><block s="reportListItem"><l>1</l><block var="x"/></block><block s="reportMonadic"><l><option>10^</option></l><block s="reportListItem"><l>2</l><block var="x"/></block></block></list></block></block></script></block-definition><block-definition s="BN %&apos;x&apos; &lt; %&apos;y&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="x"/></block><l>0</l></block><script><block s="doReplaceInList"><l>2</l><block var="x"/><l>-Infinity</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="y"/></block><l>0</l></block><script><block s="doReplaceInList"><l>2</l><block var="y"/><l>-Infinity</l></block></script></block><block s="doIfElse"><block s="reportLessThan"><block s="reportListItem"><l>2</l><block var="x"/></block><block s="reportListItem"><l>2</l><block var="y"/></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doIfElse"><block s="reportLessThan"><block s="reportListItem"><l>1</l><block var="x"/></block><block s="reportListItem"><l>1</l><block var="y"/></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block-definition><block-definition s="BN %&apos;x&apos; / %&apos;y&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="BN %l x %l"><block var="x"/><custom-block s="BN %l ^ %l"><block var="y"/><custom-block s="new BN %txt"><l>-1</l></custom-block></custom-block></custom-block></block></script></block-definition><block-definition s="BN %&apos;x&apos; ^ %&apos;y&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="y"/><custom-block s="new BN %txt"><l>0</l></custom-block></block><script><block s="doReport"><custom-block s="new BN %txt"><l>1</l></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><block var="x"/><custom-block s="new BN %txt"><l>0</l></custom-block></block><script><block s="doReport"><custom-block s="new BN %txt"><l>0</l></custom-block></block></script></block><block s="doDeclareVariables"><list><l>a</l><l>neg</l><l>c</l></list></block><block s="doSetVar"><l>neg</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doIf"><custom-block s="BN %l &lt; %l"><block var="x"/><custom-block s="new BN %txt"><l>0</l></custom-block></custom-block><script><block s="doSetVar"><l>neg</l><block s="reportNot"><block var="neg"/></block></block></script></block><block s="doIf"><custom-block s="BN %l &lt; %l"><block var="y"/><custom-block s="new BN %txt"><l>0</l></custom-block></custom-block><script><block s="doSetVar"><l>neg</l><block s="reportNot"><block var="neg"/></block></block></script></block><block s="doSetVar"><l>a</l><custom-block s="BN %l to normal number"><custom-block s="BN %l x %l"><block var="y"/><custom-block s="BN log %n ( %l )"><l>10</l><block var="x"/></custom-block></custom-block></custom-block></block><block s="doSetVar"><l>c</l><block s="reportNewList"><list><block s="reportMonadic"><l><option>10^</option></l><block s="reportModulus"><block var="a"/><l>1</l></block></block><block s="reportMonadic"><l><option>floor</option></l><block var="a"/></block></list></block></block><block s="doReport"><block var="c"/></block></script><scripts><script x="290" y="93.19999999999999"><block s="doIf"><block s="reportListContainsItem"><block s="reportNewList"><list><block var="x"/><block var="y"/></list></block><custom-block s="new BN %txt"><l>0</l></custom-block></block><script></script></block></script><script x="310" y="195.33333333333337"><block s="doReport"><l></l></block></script><script x="263.0380859375" y="293.53333333333325"><block s="reportVariadicProduct"><list><block s="reportListItem"><l>1</l><block var="x"/></block><block s="reportListItem"><l>1</l><block var="y"/></block></list></block></script><script x="70" y="492.3666666666665"><block s="doIf"><block var="neg"/><script><block s="doReplaceInList"><l>1</l><block var="a"/><block s="reportVariadicProduct"><list><block s="reportListItem"><l>1</l><block var="a"/></block><l>-1</l></list></block></block></script></block></script><script x="152.07356770833348" y="449.3333333333333"><block var="x"/></script><script x="90.9951171875" y="462.03333333333325"><block s="reportVariadicProduct"><list><l></l><l></l></list></block></script><script x="343" y="238.53333333333325"><block s="reportMonadic"><l><option>log</option></l><l>10</l></block></script><script x="469.353515625" y="487.1666666666667"><block s="reportVariadicSum"><list><l></l><l>1</l></list></block></script><script x="518.8955078125" y="536.1666666666667"><block s="reportMonadic"><l><option>log</option></l><l>10</l></block></script><script x="91" y="576.3666666666668"><custom-block s="BN %l to normal number"><l/></custom-block></script><script x="214.46712239583326" y="458.3333333333333"><custom-block s="new BN %txt"><l>10</l></custom-block></script><script x="435.07356770833326" y="361.3333333333333"><custom-block s="new BN %txt"><l>10</l></custom-block></script><script x="322.9951171875" y="434.99999999999994"><custom-block s="normalise BN %l"><l/></custom-block></script><script x="31.467122395833485" y="476.3333333333333"><block var="y"/></script></scripts></block-definition><block-definition s="BN %&apos;root&apos; rt( %&apos;x&apos; )" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">2</input><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="BN %l ^ %l"><block var="x"/><custom-block s="new BN %txt"><block s="reportPower"><block var="root"/><l>-1</l></block></custom-block></custom-block></block></script></block-definition><block-definition s="BN %&apos;x&apos; - %&apos;y&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="BN %l + %l"><block var="x"/><custom-block s="BN %l x %l"><block var="y"/><custom-block s="new BN %txt"><l>-1</l></custom-block></custom-block></custom-block></block></script></block-definition><block-definition s="{JS} %&apos;input&apos; $≅-2 %&apos;compare&apos; (± %&apos;tolerance&apos; )" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">10</input><input type="%n"></input><input type="%n">1</input></inputs><script><block s="doDeclareVariables"><list><l>b</l><l>t</l></list></block><block s="doSetVar"><l>b</l><block s="reportDifference"><block var="compare"/><block var="tolerance"/></block></block><block s="doSetVar"><l>t</l><block s="reportVariadicSum"><list><block var="compare"/><block var="tolerance"/></list></block></block><block s="doReport"><block s="reportIfElse"><block var="JS_block_on"/><block s="evaluate"><block s="reportJSFunction"><list><l>input</l><l>compare</l><l>tolerance</l></list><l>var inp=input+0,  comp=compare+0,  tol=tolerance+0,  bottom=comp-tol,  top=comp+tol;return (inp&gt;=bottom)&amp;&amp;(inp&lt;=top);</l></block><list><block var="input"/><block var="compare"/><block var="tolerance"/></list></block><block s="reportAnd"><block s="reportOr"><block s="reportGreaterThan"><block var="input"/><block var="b"/></block><block s="reportEquals"><block var="input"/><block var="b"/></block></block><block s="reportOr"><block s="reportLessThan"><block var="input"/><block var="t"/></block><block s="reportEquals"><block var="input"/><block var="t"/></block></block></block></block></block></script></block-definition><block-definition s="%&apos;input&apos; $≅-2 %&apos;compare&apos; (± %&apos;tolerance&apos; )" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">10</input><input type="%n"></input><input type="%n">1</input></inputs><script><block s="doDeclareVariables"><list><l>b</l><l>t</l></list></block><block s="doSetVar"><l>b</l><block s="reportDifference"><block var="compare"/><block var="tolerance"/></block></block><block s="doSetVar"><l>t</l><block s="reportVariadicSum"><list><block var="compare"/><block var="tolerance"/></list></block></block><block s="doReport"><block s="reportAnd"><block s="reportOr"><block s="reportGreaterThan"><block var="input"/><block var="b"/></block><block s="reportEquals"><block var="input"/><block var="b"/></block></block><block s="reportOr"><block s="reportLessThan"><block var="input"/><block var="t"/></block><block s="reportEquals"><block var="input"/><block var="t"/></block></block></block></block></script></block-definition><block-definition s="quasi stamp %&apos;point_size&apos; transp. %&apos;transp&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%n">3.5</input><input type="%n">70</input></inputs><script><block s="doDeclareVariables"><list><l>old_size</l></list></block><block s="doSetVar"><l>old_size</l><block s="getPenAttribute"><l><option>size</option></l></block></block><block s="setPenColorDimension"><l><option>transparency</option></l><block var="transp"/></block><block s="down"></block><block s="setSize"><block var="point_size"/></block><block s="forward"><l>0</l></block><block s="up"></block><block s="setSize"><block var="old_size"/></block></script></block-definition><block-definition s="draw $circle %&apos;center x&apos; %&apos;center y&apos; d1 %&apos;radius&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input><input type="%n">100</input></inputs><script><block s="doDeclareVariables"><list><l>sine length</l><l>dots per sine</l><l>amplitude</l><l>circumference</l><l>sines per circle</l><l>dots per circle</l><l>offset</l></list></block><block s="doSetVar"><l>sine length</l><block s="reportQuotient"><block var="radius"/><l>2</l><comment w="267" collapsed="true">Adjust these 3 variables to get the look you want.</comment></block></block><block s="doSetVar"><l>dots per sine</l><l>10</l></block><block s="doSetVar"><l>amplitude</l><block s="reportVariadicProduct"><list><l>.05</l><block var="radius"/></list></block></block><block s="doSetVar"><l>circumference</l><block s="reportVariadicProduct"><list><block s="reportVariadicProduct"><list><l>2</l><l>3.1415926</l></list></block><block var="radius"/></list></block><comment w="299.33333333333337" collapsed="false">I&apos;ve been, indeed, able to remix the &apos;turtle&apos; code, &#xD;based on the approach by ttocs2112, who said:&#xD;&#xD; This is the main thing you&apos;re looking for:&#xD;&#xD;  1) Get the circumference of the circle&#xD;&#xD;  2) Divide it by the sine length&#xD;&#xD;  3) Round that to get a whole number &#xD;      for the number of sines_per_circle&#xD;&#xD;  4) Divide that by the number of &#xD;      dots_per_sine to get the number of dots_per_circle.&#xD;&#xD;&#xD;   Since the number of dots divided by the number of sines &#xD;   is always a whole number, the start and end points are the same.&#xD;&#xD;   Not sure how important &apos;turtle&apos; drawing is to you, &#xD;   rather than calculating x and y each step as I&apos;ve done &#xD;   (which avoids accumulated error), but you should be &#xD;   able to easily modify this using the approach above.&#xD;</comment></block><block s="doSetVar"><l>sines per circle</l><block s="reportRound"><block s="reportQuotient"><block var="circumference"/><block var="sine length"/></block></block></block><block s="doSetVar"><l>dots per circle</l><block s="reportVariadicProduct"><list><block var="sines per circle"/><block var="dots per sine"/></list></block></block><block s="doDeclareVariables"><list><l>n</l><l>i</l><l>transparency</l><l>pen size</l></list></block><block s="doSetVar"><l>transparency</l><block s="getPenAttribute"><l><option>transparency</option></l></block></block><block s="doSetVar"><l>n</l><block var="dots per circle"/></block><block s="doSetVar"><l>i</l><l>0</l></block><block s="doWarp"><script><block s="gotoXY"><block var="center x"/><block var="center y"/></block><block s="setHeading"><l>0</l></block><block s="doUntil"><block s="reportEquals"><block var="i"/><block var="n"/></block><script><block s="doWarp"><script><block s="doSetVar"><l>pen size</l><block s="reportIfElse"><block s="reportGreaterThan"><block var="radius"/><l>100</l></block><block s="reportQuotient"><block var="radius"/><l>33</l></block><l>3</l></block></block><block s="gotoXY"><block var="center x"/><block var="center y"/></block><block s="setColor"><color>150,0,208,1</color></block><custom-block s="quasi stamp %n transp. %n"><block var="pen size"/><block var="transparency"/><comment w="115" collapsed="false">Dot at the circle center.</comment></custom-block></script></block><block s="doChangeVar"><l>i</l><l>1</l></block><block s="turn"><block s="reportQuotient"><l>360</l><block var="n"/></block></block><block s="forward"><block var="radius"/></block><block s="doSetVar"><l>offset</l><block s="reportVariadicProduct"><list><block var="amplitude"/><block s="reportMonadic"><l><option>cos</option></l><block s="reportVariadicProduct"><list><block s="reportQuotient"><block s="reportModulus"><block var="i"/><block var="dots per sine"/></block><block var="dots per sine"/></block><l>360</l></list></block></block></list></block></block><block s="doSetVar"><l>pen size</l><block s="reportIfElse"><block s="reportGreaterThan"><block var="radius"/><l>100</l></block><block s="reportQuotient"><block var="radius"/><l>50</l></block><l>2</l></block></block><block s="setPenColorDimension"><l><option>transparency</option></l><block s="reportVariadicSum"><list><block var="transparency"/><l>10</l></list></block></block><block s="doWarp"><script><block s="down"></block><block s="setColor"><color>255,166,17,1</color></block><block s="setSize"><block var="pen size"/></block><block s="forward"><block var="offset"/></block></script></block><block s="up"></block><block s="forward"><block s="reportVariadicProduct"><list><l>-1</l><block var="offset"/></list></block></block><block s="doWarp"><script><block s="setColor"><color>99,0,187,1</color></block><custom-block s="quasi stamp %n transp. %n"><block var="pen size"/><block s="reportVariadicSum"><list><block var="transparency"/><l>10</l></list></block></custom-block></script></block><block s="forward"><block var="offset"/></block><block s="doSetVar"><l>pen size</l><block s="reportIfElse"><block s="reportGreaterThan"><block var="radius"/><l>100</l></block><block s="reportQuotient"><block var="radius"/><l>33</l></block><l>3</l></block></block><block s="doWarp"><script><block s="setColor"><color>234,117,0,1</color></block><custom-block s="quasi stamp %n transp. %n"><block var="pen size"/><block var="transparency"/></custom-block></script></block><block s="gotoXY"><block var="center x"/><block var="center y"/></block></script></block></script></block></script></block-definition><block-definition s="drag to draw a circle" type="command" category="pen"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>x</l><l>y</l><l>dx</l><l>dy</l><l>r</l><l>old_r</l></list></block><block s="doWaitUntil"><block s="reportMouseDown"></block></block><block s="doSetVar"><l>x</l><block s="reportMouseX"></block></block><block s="doSetVar"><l>y</l><block s="reportMouseY"></block></block><block s="doSetVar"><l>old_r</l><l>1</l></block><block s="doUntil"><block s="reportNot"><block s="reportMouseDown"></block></block><script><block s="doSetVar"><l>dx</l><block s="reportDifference"><block s="reportMouseX"></block><block var="x"/></block></block><block s="doSetVar"><l>dy</l><block s="reportDifference"><block s="reportMouseY"></block><block var="y"/></block></block><block s="doSetVar"><l>r</l><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block var="dx"/><block var="dx"/></list></block><block s="reportVariadicProduct"><list><block var="dy"/><block var="dy"/></list></block></list></block></block></block><block s="setPenColorDimension"><l><option>transparency</option></l><l>90</l></block><block s="doIf"><block s="reportGreaterThan"><block s="reportMonadic"><l><option>abs</option></l><block s="reportDifference"><block var="r"/><block var="old_r"/></block></block><l>3</l></block><script><custom-block s="draw $circle %n %n d1 %n"><block var="x"/><block var="y"/><block var="r"/></custom-block></script></block><block s="doWait"><l>0.01</l></block><block s="doSetVar"><l>old_r</l><block var="r"/></block></script></block><block s="doBroadcastAndWait"><l>overlay</l><list></list></block><block s="setPenColorDimension"><l><option>transparency</option></l><l>0</l></block><custom-block s="draw $circle %n %n d1 %n"><block var="x"/><block var="y"/><block var="r"/></custom-block></script></block-definition><block-definition s="return %&apos;function&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>f</l></list><l>return eval(f)</l></block><list><block var="function"/></list></block></block></script></block-definition><block-definition s="keys pressing" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>list</l><l>num</l><l>join</l></list></block><block s="doSetVar"><l>list</l><l>abcdefghijklmnopqrstuvwxyz0123456789-+&gt;&lt;%&amp;^"&apos;&#126;[]{}´`;.,:?/*_=!@#$¨()</l></block><block s="doSetVar"><l>num</l><l>1</l></block><block s="doSetVar"><l>join</l><l></l></block><block s="doRepeat"><block s="reportStringSize"><block var="list"/></block><script><block s="doIf"><block s="reportKeyPressed"><block s="reportLetter"><block var="num"/><block var="list"/></block></block><script><block s="doSetVar"><l>join</l><block s="reportJoinWords"><list><block var="join"/><block s="reportLetter"><block var="num"/><block var="list"/></block></list></block></block></script></block><block s="doChangeVar"><l>num</l><l>1</l></block></script></block><block s="doReport"><block var="join"/></block></script></block></script></block-definition><block-definition s="any key pressing?" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>list</l><l>num</l><l>join</l></list></block><block s="doSetVar"><l>list</l><l>abcdefghijklmnopqrstuvwxyz0123456789-+&gt;&lt;%&amp;^"&apos;&#126;[]{}´`;.,:?/*_=!@#$¨()</l></block><block s="doSetVar"><l>num</l><l>1</l></block><block s="doSetVar"><l>join</l><l></l></block><block s="doRepeat"><block s="reportStringSize"><block var="list"/></block><script><block s="doIf"><block s="reportKeyPressed"><block s="reportLetter"><block var="num"/><block var="list"/></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doChangeVar"><l>num</l><l>1</l></block></script></block><block s="doIf"><block s="reportKeyPressed"><l><option>space</option></l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doIf"><block s="reportKeyPressed"><l><option>up arrow</option></l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doIf"><block s="reportKeyPressed"><l><option>down arrow</option></l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doIf"><block s="reportKeyPressed"><l><option>left arrow</option></l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doIf"><block s="reportKeyPressed"><l><option>right arrow</option></l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doChangeVar"><l>num</l><l>1</l></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="delete last letter of %&apos;text&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>t</l></list></block><block s="doSetVar"><l>t</l><block s="reportTextSplit"><block var="text"/><l><option>letter</option></l></block></block><block s="doDeleteFromList"><block s="reportListAttribute"><l><option>length</option></l><block var="t"/></block><block var="t"/></block><block s="doReport"><block s="reportJoinWords"><list><block var="t"/></list></block></block></script></block></script></block-definition><block-definition s="write %&apos;t&apos; with wrapping at %&apos;x&apos; %&apos;y&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doWarp"><script><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="doDeclareVariables"><list><l>num</l></list></block><block s="doSetVar"><l>num</l><l>1</l></block><block s="doRepeat"><block s="reportStringSize"><block var="t"/></block><script><block s="write"><block s="reportLetter"><block var="num"/><block var="t"/></block><l>16</l></block><block s="doChangeVar"><l>num</l><l>1</l></block><block s="doIf"><block s="reportGreaterThan"><block s="xPosition"></block><l>180</l></block><script><block s="setXPosition"><l>-190</l></block><block s="changeYPosition"><l>-19</l></block></script></block></script></block></script></block></script></block-definition><block-definition s="safely try reporting %&apos;this&apos; then if %&apos;error&apos; report %&apos;that&apos;" type="reporter" category="control"><comment x="0" y="0" w="316.6666666666667" collapsed="false">Catch errors in a reporter.&#xD;&#xD;Evaluates its first input.  If that expression successfully reports a value, this block reports that value.  If the expression causes a Snap! error,&#xD;then the final input slot is evaluated with the text of what would have&#xD;been the error message in variable ERROR.  SAFELY TRY then reports the value of that final expression.&#xD;&#xD;Sometimes you&apos;ll want to throw an error in the final expression.  You&#xD;can put an ERROR block inside a CALL block to do that.</comment><header></header><code></code><translations></translations><inputs><input type="%anyUE"></input><input type="%upvar"></input><input type="%anyUE"></input></inputs><script><block s="doDeclareVariables"><list><l>value</l></list></block><custom-block s="safely try %cs then if %upvar %cs"><script><block s="doSetVar"><l>value</l><block s="evaluate"><block var="this"/><list></list></block></block></script><l>err</l><script><block s="doSetVar"><l>error</l><block var="err"/></block><block s="doSetVar"><l>value</l><block s="evaluate"><block var="that"/><list></list></block></block></script></custom-block><block s="doReport"><block var="value"/></block></script></block-definition><block-definition s="command" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><custom-block s="safely try %cs then if %upvar %cs"><script></script><l>error</l><script><block s="setPenColorDimension"><l><option>brightness</option></l><l>0</l></block></script></custom-block></script></block></script></block-definition><block-definition s="$brush set pen to crayon %&apos;which&apos;" type="command" category="pen"><comment x="0" y="0" w="297.3333333333333" collapsed="false">Reports one of 100 preselected colors, like a box of 100 crayons.&#xD;The colors have names that are meant to be evocative.&#xD;They are organized in families, more or less corresponding&#xD;to spectral (rainbow) colors; the input slot has a two-level menu&#xD;in which you can hover over a family name to see the colors&#xD;of that family, each including a crayon number and an RGB value. &#xD;See Appendix A of the Snap! Reference Manual for more details.</comment><header></header><code></code><translations></translations><inputs><input type="%n"><options>grays={&#xD;0 black #000000=0&#xD;1 gray7 #121212=1&#xD;2 gray14 #242424=2&#xD;3 gray21 #363636=3&#xD;4 gray28 #484848=4&#xD;5 gray36 #5c5c5c=5&#xD;6 gray43 #6d6d6d=6&#xD;7 gray50 #7f7f7f=7&#xD;8 gray57 #919191=8&#xD;9 gray64 #a3a3a3=9&#xD;10 gray71 #b5b5b5=10&#xD;11 gray78 #c8c8c8=11&#xD;12 gray85 #dadada=12&#xD;13 gray92 #ececec=13&#xD;14 white #ffffff=14&#xD;}&#xD;pinks={&#xD;15 deep pink #ff1493=15&#xD;16 hot pink #ff69b4=16&#xD;17 bright pink #ff007f=17&#xD;18 raspberry #e30b5d=18&#xD;19 amaranth #e52b50=19&#xD;}&#xD;reds={&#xD;20 red #ff0000=20&#xD;21 burgundy #900020=21&#xD;22 cherry #990000=22&#xD;23 dark candy apple red #a40000=23&#xD;24 sanguine #c00000=24&#xD;25 maroon #800000=25&#xD;26 crimson #c90016=26&#xD;27 Lists #d94d11=27&#xD;28 candy apple red #ff0800=28&#xD;29 coquelicot #ff3800=29&#xD;}&#xD;browns={&#xD;30 saddle brown #8b4513=30&#xD;31 chocolate #7b3f00=31&#xD;32 kobicha #6b4423=32&#xD;33 sepia #704214=33&#xD;34 chestnut #954535=34&#xD;35 dark brown #654321=35&#xD;36 brown #964b00=36&#xD;37 golden brown #996515=37&#xD;38 cinnamon #b87333=38&#xD;39 copper #d2691e=39&#xD;}&#xD;oranges={&#xD;40 orange #ff7f00=40&#xD;41 Pantone orange #ff5800=41&#xD;42 pumpkin #ff7518=42&#xD;43 Variables #f3761d=43&#xD;44 Spanish orange #e86100=44&#xD;45 burnt orange #cc5500=45&#xD;46 sinopia #cb410b=46&#xD;47 ochre #cc7722=47&#xD;48 carrot #ed9121=48&#xD;49 tangerine #f28500=49&#xD;}&#xD;yellows={&#xD;50 yellow #ffff00=50&#xD;51 Control #e6a822=51&#xD;52 dark goldenrod #b8860b=52&#xD;53 goldenrod #daa520=53&#xD;54 saffron #f4c430=54&#xD;55 sandstorm #ecd540=55&#xD;56 mustard #ffdb58=56&#xD;57 gold #ffd700=57&#xD;58 egg yolk #fee33e=58&#xD;59 rubber duck #fbe108=59&#xD;}&#xD;greens={&#xD;60 lime #00ff00=60&#xD;61 apple green #8db600=61&#xD;62 Operators #62c213=62&#xD;63 forest green #228b22=63&#xD;64 green #008000=64&#xD;65 dark green #006400=65&#xD;66 dark pastel green #03c03c=66&#xD;67 emerald #50c878=67&#xD;68 mint #3eb489=68&#xD;69 Pen #00a178=69&#xD;}&#xD;cyans={&#xD;70 aqua (cyan) #00ffff=70&#xD;71 dark cyan #008b8b=71&#xD;72 cerulean #007ba7=72&#xD;73 iceberg #71a6d2=73&#xD;74 Sensing #0494dc=74&#xD;75 teal #008080=75&#xD;76 light sky blue #87cefa=76&#xD;77 deep sky blue #00bfff=77&#xD;78 dodger blue #1e90ff=78&#xD;79 azure #007fff=79&#xD;}&#xD;blues={&#xD;80 blue #0000ff=80&#xD;81 midnight blue #191970=81&#xD;82 dark powder blue #003399=82&#xD;83 cobalt #0047ab=83&#xD;84 denim #1560bd=84&#xD;85 navy blue #000080=85&#xD;86 steel blue #4682b4=86&#xD;87 Motion #4a6cd4=87&#xD;88 cornflower #6495ed=88&#xD;89 slate blue #6a5acd=89&#xD;}&#xD;purples={&#xD;90 violet #8000ff=90&#xD;91 Looks #8f56e3=91&#xD;92 grape #6f2da8=92&#xD;93 indigo #4b0082=93&#xD;94 x11 purple #a020f0=94&#xD;95 magenta (fuchia) #ff00ff=95&#xD;96 dark orchid #9932cc=96&#xD;97 Sound #cf4ad9=97&#xD;98 purple #7f007f=98&#xD;99 dark magenta #8b008b=99&#xD;}</options></input></inputs><script><custom-block s="✐ initialize variables"></custom-block><block s="doSetVar"><l>✐ last crayon</l><block var="which"/></block><block s="doSetVar"><l>✐ last set as</l><l>crayon</l></block><block s="doSetVar"><l>✐ fair?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doIf"><block s="reportNot"><custom-block s="does var %s exist?"><l>✐ crayon colors</l></custom-block></block><script><custom-block s="create %s var %mult%txt"><l>global</l><list><l>✐ crayon colors</l></list></custom-block><block s="doSetVar"><l>✐ crayon colors</l><block s="reportNewList"><list><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l></list></block><block s="reportNewList"><list><l>18</l><l>18</l><l>18</l></list></block><block s="reportNewList"><list><l>36</l><l>36</l><l>36</l></list></block><block s="reportNewList"><list><l>54</l><l>54</l><l>54</l></list></block><block s="reportNewList"><list><l>72</l><l>72</l><l>72</l></list></block><block s="reportNewList"><list><l>92</l><l>92</l><l>92</l></list></block><block s="reportNewList"><list><l>109</l><l>109</l><l>109</l></list></block><block s="reportNewList"><list><l>127</l><l>127</l><l>127</l></list></block><block s="reportNewList"><list><l>145</l><l>145</l><l>145</l></list></block><block s="reportNewList"><list><l>163</l><l>163</l><l>163</l></list></block><block s="reportNewList"><list><l>181</l><l>181</l><l>181</l></list></block><block s="reportNewList"><list><l>200</l><l>200</l><l>200</l></list></block><block s="reportNewList"><list><l>218</l><l>218</l><l>218</l></list></block><block s="reportNewList"><list><l>236</l><l>236</l><l>236</l></list></block><block s="reportNewList"><list><l>255</l><l>255</l><l>255</l></list></block><block s="reportNewList"><list><l>255</l><l>20</l><l>147</l></list></block><block s="reportNewList"><list><l>255</l><l>105</l><l>180</l></list></block><block s="reportNewList"><list><l>255</l><l>0</l><l>127</l></list></block><block s="reportNewList"><list><l>227</l><l>11</l><l>93</l></list></block><block s="reportNewList"><list><l>229</l><l>43</l><l>80</l></list></block><block s="reportNewList"><list><l>255</l><l>0</l><l>0</l></list></block><block s="reportNewList"><list><l>144</l><l>0</l><l>32</l></list></block><block s="reportNewList"><list><l>153</l><l>0</l><l>0</l></list></block><block s="reportNewList"><list><l>164</l><l>0</l><l>0</l></list></block><block s="reportNewList"><list><l>192</l><l>0</l><l>0</l></list></block><block s="reportNewList"><list><l>128</l><l>0</l><l>0</l></list></block><block s="reportNewList"><list><l>201</l><l>0</l><l>22</l></list></block><block s="reportNewList"><list><l>217</l><l>77</l><l>17</l></list></block><block s="reportNewList"><list><l>255</l><l>8</l><l>0</l></list></block><block s="reportNewList"><list><l>255</l><l>56</l><l>0</l></list></block><block s="reportNewList"><list><l>139</l><l>69</l><l>19</l></list></block><block s="reportNewList"><list><l>123</l><l>63</l><l>0</l></list></block><block s="reportNewList"><list><l>107</l><l>68</l><l>35</l></list></block><block s="reportNewList"><list><l>112</l><l>66</l><l>20</l></list></block><block s="reportNewList"><list><l>149</l><l>69</l><l>53</l></list></block><block s="reportNewList"><list><l>101</l><l>67</l><l>33</l></list></block><block s="reportNewList"><list><l>150</l><l>75</l><l>0</l></list></block><block s="reportNewList"><list><l>153</l><l>101</l><l>21</l></list></block><block s="reportNewList"><list><l>184</l><l>115</l><l>51</l></list></block><block s="reportNewList"><list><l>210</l><l>105</l><l>30</l></list></block><block s="reportNewList"><list><l>255</l><l>127</l><l>0</l></list></block><block s="reportNewList"><list><l>255</l><l>88</l><l>0</l></list></block><block s="reportNewList"><list><l>255</l><l>117</l><l>24</l></list></block><block s="reportNewList"><list><l>243</l><l>118</l><l>29</l></list></block><block s="reportNewList"><list><l>232</l><l>97</l><l>0</l></list></block><block s="reportNewList"><list><l>204</l><l>85</l><l>0</l></list></block><block s="reportNewList"><list><l>203</l><l>65</l><l>11</l></list></block><block s="reportNewList"><list><l>204</l><l>119</l><l>34</l></list></block><block s="reportNewList"><list><l>237</l><l>145</l><l>33</l></list></block><block s="reportNewList"><list><l>242</l><l>133</l><l>0</l></list></block><block s="reportNewList"><list><l>255</l><l>255</l><l>0</l></list></block><block s="reportNewList"><list><l>230</l><l>168</l><l>34</l></list></block><block s="reportNewList"><list><l>184</l><l>134</l><l>11</l></list></block><block s="reportNewList"><list><l>218</l><l>165</l><l>32</l></list></block><block s="reportNewList"><list><l>244</l><l>196</l><l>48</l></list></block><block s="reportNewList"><list><l>236</l><l>213</l><l>64</l></list></block><block s="reportNewList"><list><l>255</l><l>219</l><l>88</l></list></block><block s="reportNewList"><list><l>255</l><l>215</l><l>0</l></list></block><block s="reportNewList"><list><l>254</l><l>227</l><l>62</l></list></block><block s="reportNewList"><list><l>251</l><l>225</l><l>8</l></list></block><block s="reportNewList"><list><l>0</l><l>255</l><l>0</l></list></block><block s="reportNewList"><list><l>141</l><l>182</l><l>0</l></list></block><block s="reportNewList"><list><l>98</l><l>194</l><l>19</l></list></block><block s="reportNewList"><list><l>34</l><l>139</l><l>34</l></list></block><block s="reportNewList"><list><l>0</l><l>128</l><l>0</l></list></block><block s="reportNewList"><list><l>0</l><l>100</l><l>0</l></list></block><block s="reportNewList"><list><l>3</l><l>192</l><l>60</l></list></block><block s="reportNewList"><list><l>80</l><l>200</l><l>120</l></list></block><block s="reportNewList"><list><l>62</l><l>180</l><l>137</l></list></block><block s="reportNewList"><list><l>0</l><l>161</l><l>120</l></list></block><block s="reportNewList"><list><l>0</l><l>255</l><l>255</l></list></block><block s="reportNewList"><list><l>0</l><l>139</l><l>139</l></list></block><block s="reportNewList"><list><l>0</l><l>123</l><l>167</l></list></block><block s="reportNewList"><list><l>113</l><l>166</l><l>210</l></list></block><block s="reportNewList"><list><l>4</l><l>148</l><l>220</l></list></block><block s="reportNewList"><list><l>0</l><l>128</l><l>128</l></list></block><block s="reportNewList"><list><l>135</l><l>206</l><l>250</l></list></block><block s="reportNewList"><list><l>0</l><l>191</l><l>255</l></list></block><block s="reportNewList"><list><l>30</l><l>144</l><l>255</l></list></block><block s="reportNewList"><list><l>0</l><l>127</l><l>255</l></list></block><block s="reportNewList"><list><l>0</l><l>0</l><l>255</l></list></block><block s="reportNewList"><list><l>25</l><l>25</l><l>112</l></list></block><block s="reportNewList"><list><l>0</l><l>51</l><l>153</l></list></block><block s="reportNewList"><list><l>0</l><l>71</l><l>171</l></list></block><block s="reportNewList"><list><l>21</l><l>96</l><l>189</l></list></block><block s="reportNewList"><list><l>0</l><l>0</l><l>128</l></list></block><block s="reportNewList"><list><l>70</l><l>130</l><l>180</l></list></block><block s="reportNewList"><list><l>74</l><l>108</l><l>212</l></list></block><block s="reportNewList"><list><l>100</l><l>149</l><l>237</l></list></block><block s="reportNewList"><list><l>106</l><l>90</l><l>205</l></list></block><block s="reportNewList"><list><l>128</l><l>0</l><l>255</l></list></block><block s="reportNewList"><list><l>143</l><l>86</l><l>227</l></list></block><block s="reportNewList"><list><l>111</l><l>45</l><l>168</l></list></block><block s="reportNewList"><list><l>75</l><l>0</l><l>130</l></list></block><block s="reportNewList"><list><l>160</l><l>32</l><l>240</l></list></block><block s="reportNewList"><list><l>255</l><l>0</l><l>255</l></list></block><block s="reportNewList"><list><l>153</l><l>50</l><l>204</l></list></block><block s="reportNewList"><list><l>207</l><l>74</l><l>217</l></list></block><block s="reportNewList"><list><l>127</l><l>0</l><l>127</l></list></block><block s="reportNewList"><list><l>139</l><l>0</l><l>139</l></list></block></list></block></block></script></block><block s="doDeclareVariables"><list><l>color</l></list></block><block s="doSetVar"><l>color</l><block s="reportListItem"><block s="reportVariadicSum"><list><block s="reportModulus"><block var="which"/><l>100</l></block><l>1</l></list></block><block var="✐ crayon colors"/></block></block><custom-block s="set pen color to r: %n g: %n b: %n"><block s="reportListItem"><l>1</l><block var="color"/></block><block s="reportListItem"><l>2</l><block var="color"/></block><block s="reportListItem"><l>3</l><block var="color"/></block></custom-block></script></block-definition><block-definition s="set pen color to r: %&apos;r&apos; g: %&apos;g&apos; b: %&apos;b&apos;" type="command" category="pen"><comment x="0" y="0" w="220.66666666666666" collapsed="false">Takes three inputs for red, green, and blue&#xD;values, each between 0 and 255.  0,0,0 is black; 255,255,255 is white.  255,255,0 is yellow, and so on.&#xD;&#xD;The SET PEN block in this library lets you set individual red, green, or blue without changing the others, lets you provide a list of three RGB color components, and lets you provide a six-digit hexadecimal number, the form in which RGB color values are usually found online.&#xD;&#xD;See Appendix A of the Snap! Reference Manual for details.</comment><header></header><code></code><translations>pt:altera a cor da tua caneta para vermelho _ , verde _ e azul _ (0 a 255)&#xD;</translations><inputs><input type="%n">255</input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>r</l><l>g</l><l>b</l></list><l>this.setColor(new Color(r, g, b));</l></block><list><block var="r"/><block var="g"/><block var="b"/></list></block></script></block-definition><block-definition s="set pen color to h: %&apos;h&apos; s: %&apos;s&apos; v: %&apos;v&apos;" type="command" category="pen"><comment x="0" y="0" w="283.3333333333333" collapsed="false">Takes three inputs for hue, saturation, and value (&quot;brightness&quot;)&#xD;values, each between 0 and 1.  0,0,0 is black; 0,0,1 is white.  0.15,1,1 is yellow, and so on.&#xD;&#xD;The SET PEN block in this library lets you set individual hue, saturation, or value without changing the others, lets you provide a list of three HSV color components, and lets you&#xD;use the very much superior HSL (hue, saturation, lightness)&#xD;color space.&#xD;&#xD;See Appendix A of the Snap! Reference Manual for details.</comment><header></header><code></code><translations>pt:altera a cor da caneta para matiz _ , saturação _ e brilho _ (0 a 1)&#xD;</translations><inputs><input type="%n">0.3</input><input type="%n">0.7</input><input type="%n">0.6</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>h</l><l>s</l><l>v</l></list><l>var col = new Color();&#xD;col.set_hsv(h, s, v);&#xD;this.setColor(col);</l></block><list><block var="h"/><block var="s"/><block var="v"/></list></block></script></block-definition><block-definition s="RGB color" type="reporter" category="pen"><comment x="0" y="0" w="266" collapsed="false">Reports the current pen color as a list of three RGB values in the range 0-255.  The PEN block in this library provides a large set of ways to examine the color.&#xD;&#xD;See Appendix A in the Snap! Reference Manual for details.</comment><header></header><code></code><translations>pt:a cor da caneta em RGB (vermelho, verde e azul; 0 a 255)&#xD;</translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return new List([this.color.r, this.color.g, this.color.b]);</l></block><list></list></block></block></script></block-definition><block-definition s="HSV color" type="reporter" category="pen"><comment x="0" y="0" w="312" collapsed="false">Reports the current pen color as a list of three HSV values&#xD;in the range 0-1.&#xD;&#xD;See Appendix A in the Snap! Reference Manual for details.</comment><header></header><code></code><translations>pt:a cor da caneta em HSV (matiz, saturação e brilho, 0 a 1)&#xD;</translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return new List(this.color.hsv());</l></block><list></list></block></block></script></block-definition><block-definition s="$brush set pen %&apos;dimension&apos; to %&apos;value&apos;" type="command" category="pen"><comment x="0" y="0" w="265.3333333333333" collapsed="false">This block allows you to set the pen&apos;s color, transparency (on a scale from 0=opaque to 100=invisible), or size (in pixels).  The color can be set in many ways, including RGB values, HSV values, HSL values, fair HSV or HSL (based on a modified spectrum that gives each spectral color equal space and promotes brown to a color), or X11/W3C color name.&#xD;&#xD;See Appendix A in the Snap! Reference Manual for details.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>size&#xD;color&#xD;fair hue&#xD;transparency&#xD;X11/W3C name&#xD;(3D color spaces)={&#xD;fair HSL={&#xD;fair hue&#xD;fair saturation (HSL)&#xD;fair lightness&#xD;fair HSL vector&#xD;}&#xD;fair HSV={&#xD;fair hue&#xD;fair saturation (HSV)&#xD;fair value (brightness)&#xD;fair HSV vector&#xD;}&#xD;HSL={&#xD;hue&#xD;saturation (HSL)&#xD;lightness&#xD;HSL vector&#xD;}&#xD;HSV={&#xD;hue&#xD;saturation (HSV)&#xD;value (brightness)&#xD;HSV vector&#xD;}&#xD;RGB (0-255)={&#xD;red&#xD;green&#xD;blue&#xD;RGB vector&#xD;RGB hex&#xD;}&#xD;}</options></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>colors</l><l>brights</l><l>index</l><l>scale</l><l>oldHSV</l><l>newHSV</l><l>color</l><l>pivots</l></list></block><block s="doSetVar"><l>colors</l><block s="reportNewList"><list><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l></list></block><block s="reportNewList"><list><l>128</l><l>128</l><l>128</l></list></block><block s="reportNewList"><list><l>192</l><l>192</l><l>192</l></list></block><block s="reportNewList"><list><l>255</l><l>255</l><l>255</l></list></block><block s="reportNewList"><list><l>255</l><l>0</l><l>0</l></list></block><block s="reportNewList"><list><l>85</l><l>0</l><l>0</l></list></block><block s="reportNewList"><list><l>139</l><l>69</l><l>19</l></list></block><block s="reportNewList"><list><l>70</l><l>5</l><l>0</l></list></block><block s="reportNewList"><list><l>255</l><l>127</l><l>0</l></list></block><block s="reportNewList"><list><l>140</l><l>60</l><l>0</l></list></block><block s="reportNewList"><list><l>255</l><l>255</l><l>0</l></list></block><block s="reportNewList"><list><l>114</l><l>93</l><l>0</l></list></block><block s="reportNewList"><list><l>0</l><l>255</l><l>0</l></list></block><block s="reportNewList"><list><l>0</l><l>30</l><l>0</l></list></block><block s="reportNewList"><list><l>0</l><l>255</l><l>255</l></list></block><block s="reportNewList"><list><l>0</l><l>50</l><l>50</l></list></block><block s="reportNewList"><list><l>0</l><l>0</l><l>255</l></list></block><block s="reportNewList"><list><l>0</l><l>0</l><l>64</l></list></block><block s="reportNewList"><list><l>80</l><l>0</l><l>90</l></list></block><block s="reportNewList"><list><l>255</l><l>0</l><l>255</l></list></block><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l></list></block></list></block></block><block s="doSetVar"><l>brights</l><block s="reportNewList"><list><block s="reportNewList"><list><l>255</l><l>0</l><l>0</l></list></block><block s="reportNewList"><list><l>170</l><l>20</l><l>0</l></list></block><block s="reportNewList"><list><l>139</l><l>69</l><l>19</l></list></block><block s="reportNewList"><list><l>170</l><l>90</l><l>0</l></list></block><block s="reportNewList"><list><l>255</l><l>127</l><l>0</l></list></block><block s="reportNewList"><list><l>255</l><l>160</l><l>0</l></list></block><block s="reportNewList"><list><l>255</l><l>255</l><l>0</l></list></block><block s="reportNewList"><list><l>190</l><l>255</l><l>0</l></list></block><block s="reportNewList"><list><l>0</l><l>255</l><l>0</l></list></block><block s="reportNewList"><list><l>0</l><l>240</l><l>200</l></list></block><block s="reportNewList"><list><l>0</l><l>255</l><l>255</l></list></block><block s="reportNewList"><list><l>0</l><l>127</l><l>255</l></list></block><block s="reportNewList"><list><l>0</l><l>0</l><l>255</l></list></block><block s="reportNewList"><list><l>60</l><l>0</l><l>255</l></list></block><block s="reportNewList"><list><l>128</l><l>0</l><l>255</l></list></block><block s="reportNewList"><list><l>255</l><l>0</l><l>255</l></list></block><block s="reportNewList"><list><l>255</l><l>0</l><l>64</l></list></block><block s="reportNewList"><list><l>255</l><l>0</l><l>0</l></list></block></list></block></block><block s="doSetVar"><l>pivots</l><block s="reportNewList"><list><l>0</l><l>5.8</l><l>12.5</l><l>18</l><l>25</l><l>30.5</l><l>37.5</l><l>44.5</l><l>50</l><l>59</l><l>62.5</l><l>69</l><l>75</l><l>79.25</l><l>87.5</l><l>93.75</l><l>97</l><l>100</l></list></block></block><block s="doIfElse"><block s="reportListContainsItem"><block s="reportNewList"><list><l>color</l><l>hue</l><l>fair hue</l></list></block><block var="dimension"/></block><script><block s="doSetVar"><l>value</l><block s="reportModulus"><block var="value"/><l>100</l></block></block></script><script><block s="doIfElse"><block s="reportListContainsItem"><block s="reportNewList"><list><l>red</l><l>green</l><l>blue</l></list></block><block var="dimension"/></block><script><block s="doIf"><block s="reportLessThan"><block var="value"/><l>0</l></block><script><block s="doSetVar"><l>value</l><l>0</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="value"/><l>255</l></block><script><block s="doSetVar"><l>value</l><l>255</l></block></script></block></script><script><block s="doIf"><block s="reportListContainsItem"><block s="reportNewList"><list><l>saturation (HSV)</l><l>saturation (HSL)</l><l>value (brightness)</l><l>lightness</l><l>fair saturation (HSV)</l><l>fair saturation (HSL)</l><l>fair value (brightness)</l><l>fair lightness</l><l>transparency</l></list></block><block var="dimension"/></block><script><block s="doIf"><block s="reportLessThan"><block var="value"/><l>0</l></block><script><block s="doSetVar"><l>value</l><l>0</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="value"/><l>100</l></block><script><block s="doSetVar"><l>value</l><l>100</l></block></script></block></script><comment w="164.66666666666666" collapsed="false">We have to do this last test to rule out the vector options, which aren&apos;t numbers; their code makes three recursive calls and we catch range issues then.</comment></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>size</l></block><script><block s="setSize"><block var="value"/></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>hue</l></block><script><block s="setPenColorDimension"><l><option>hue</option></l><block var="value"/></block><block s="doIf"><block s="reportEquals"><block var="✐ last set as"/><l>HSL</l></block><script><block s="doReplaceInList"><l>1</l><block var="✐ HSL"/><block var="value"/></block><custom-block s="✐ update HSV"></custom-block></script></block><block s="doIf"><block s="reportNot"><block s="reportListContainsItem"><block s="reportNewList"><list><l>HSL</l><l>HSV</l></list></block><block var="✐ last set as"/></block></block><script><block s="doSetVar"><l>✐ last set as</l><l>HSV</l></block></script></block><block s="doSetVar"><l>✐ fair?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><custom-block s="✐ make integer RGB"></custom-block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>saturation (HSV)</l></block><script><block s="setPenColorDimension"><l><option>saturation</option></l><block var="value"/></block><block s="doReplaceInList"><l>2</l><block var="✐ raw HSV"/><block var="value"/></block><block s="doSetVar"><l>✐ last set as</l><l>HSV</l></block><block s="doSetVar"><l>✐ fair?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><custom-block s="✐ make integer RGB"></custom-block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>value (brightness)</l></block><script><block s="setPenColorDimension"><l><option>brightness</option></l><block var="value"/></block><block s="doReplaceInList"><l>3</l><block var="✐ raw HSV"/><block var="value"/></block><block s="doSetVar"><l>✐ last set as</l><l>HSV</l></block><block s="doSetVar"><l>✐ fair?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><custom-block s="✐ make integer RGB"></custom-block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>transparency</l></block><script><block s="setPenColorDimension"><l><option>transparency</option></l><block var="value"/></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>red</l></block><script><block s="doRun"><block s="reifyScript"><script><custom-block s="set pen color to r: %n g: %n b: %n"><custom-block s="min %s %s"><block s="reportRound"><block s="reportListItem"><l>1</l><block s="reportNewList"><list><block var="value"/><l></l></list></block></block></block><l>255</l></custom-block><l></l><l></l></custom-block></script><list></list></block><custom-block s="RGB color"></custom-block></block><block s="doSetVar"><l>✐ last set as</l><l>RGB</l></block><block s="doSetVar"><l>✐ fair?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>green</l></block><script><block s="doRun"><block s="reifyScript"><script><custom-block s="set pen color to r: %n g: %n b: %n"><l></l><custom-block s="min %s %s"><block s="reportRound"><block s="reportListItem"><l>1</l><block s="reportNewList"><list><block var="value"/><l></l></list></block></block></block><l>255</l></custom-block><l></l></custom-block></script><list></list></block><custom-block s="RGB color"></custom-block></block><block s="doSetVar"><l>✐ last set as</l><l>RGB</l></block><block s="doSetVar"><l>✐ fair?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>blue</l></block><script><block s="doRun"><block s="reifyScript"><script><custom-block s="set pen color to r: %n g: %n b: %n"><l></l><l></l><custom-block s="min %s %s"><block s="reportRound"><block s="reportListItem"><l>1</l><block s="reportNewList"><list><block var="value"/><l></l></list></block></block></block><l>255</l></custom-block></custom-block></script><list></list></block><custom-block s="RGB color"></custom-block></block><block s="doSetVar"><l>✐ last set as</l><l>RGB</l></block><block s="doSetVar"><l>✐ fair?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>fair hue</l></block><script><block s="doSetVar"><l>oldHSV</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l>100</l><l></l></list></block></autolambda><list></list></block><custom-block s="HSV color"></custom-block></block></block><block s="doIf"><block s="reportNot"><block s="reportListContainsItem"><block s="reportNewList"><list><l>HSL</l><l>HSV</l></list></block><block var="✐ last set as"/></block></block><script><block s="doSetVar"><l>✐ raw HSV</l><block s="reportNewList"><list><l>0</l><l>100</l><l>100</l></list></block></block><block s="doSetVar"><l>oldHSV</l><block s="reportNewList"><list><l>0</l><l>100</l><l>100</l></list></block></block></script></block><block s="doSetVar"><l>value</l><block s="reportModulus"><block var="value"/><l>100</l></block></block><block s="doSetVar"><l>color</l><block s="reportVariadicProduct"><list><block var="value"/><l>3.6</l></list></block></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doUntil"><block s="reportGreaterThan"><block s="reportListItem"><block var="index"/><block var="pivots"/></block><block var="value"/></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doChangeVar"><l>index</l><l>-1</l></block><block s="doSetVar"><l>scale</l><block s="reportQuotient"><block s="reportDifference"><block var="value"/><block s="reportListItem"><block var="index"/><block var="pivots"/></block></block><block s="reportDifference"><block s="reportListItem"><block s="reportVariadicSum"><list><block var="index"/><l>1</l></list></block><block var="pivots"/></block><block s="reportListItem"><block var="index"/><block var="pivots"/></block></block></block></block><block s="doRun"><block s="reifyScript"><script><custom-block s="set pen color to r: %n g: %n b: %n"><l></l><l></l><l></l></custom-block></script><list></list></block><custom-block s="mmap %repRing over %mult%l"><block s="reifyReporter"><autolambda><custom-block s="min %s %s"><block s="reportRound"><block s="reportVariadicSum"><list><block var="from"/><block s="reportVariadicProduct"><list><block s="reportDifference"><block var="to"/><block var="from"/></block><block var="scale"/></list></block></list></block></block><l>255</l></custom-block></autolambda><list><l>from</l><l>to</l></list></block><list><block s="reportListItem"><block var="index"/><block var="brights"/></block><block s="reportListItem"><block s="reportVariadicSum"><list><block var="index"/><l>1</l></list></block><block var="brights"/></block></list></custom-block></block><block s="doSetVar"><l>newHSV</l><custom-block s="HSV color"></custom-block></block><block s="doIfElse"><block var="✐ fair?"/><script><custom-block s="set pen color to h: %n s: %n v: %n"><block s="reportListItem"><l>1</l><block var="newHSV"/></block><block s="reportQuotient"><block s="reportVariadicProduct"><list><block s="reportListItem"><l>2</l><block var="newHSV"/></block><block s="reportListItem"><l>2</l><block var="✐ raw HSV"/></block></list></block><l>100</l></block><block s="reportQuotient"><block s="reportVariadicProduct"><list><block s="reportListItem"><l>3</l><block var="newHSV"/></block><block s="reportListItem"><l>3</l><block var="✐ raw HSV"/></block></list></block><l>100</l></block></custom-block><block s="doSetVar"><l>✐ raw HSV</l><block s="reportNewList"><list><block var="value"/><block s="reportListItem"><l>2</l><block var="✐ raw HSV"/></block><block s="reportListItem"><l>3</l><block var="✐ raw HSV"/></block></list></block></block></script><script><custom-block s="set pen color to h: %n s: %n v: %n"><block s="reportListItem"><l>1</l><block var="newHSV"/></block><block s="reportQuotient"><block s="reportVariadicProduct"><list><block s="reportListItem"><l>2</l><block var="newHSV"/></block><block s="reportListItem"><l>2</l><block var="oldHSV"/></block></list></block><l>100</l></block><block s="reportQuotient"><block s="reportVariadicProduct"><list><block s="reportListItem"><l>3</l><block var="newHSV"/></block><block s="reportListItem"><l>3</l><block var="oldHSV"/></block></list></block><l>100</l></block></custom-block><block s="doSetVar"><l>✐ raw HSV</l><block s="reportNewList"><list><block var="value"/><block s="reportListItem"><l>2</l><block var="oldHSV"/></block><block s="reportListItem"><l>3</l><block var="oldHSV"/></block></list></block></block></script></block><block s="doIfElse"><block s="reportEquals"><block var="✐ last set as"/><l>HSL</l></block><script><block s="doSetVar"><l>✐ last set as</l><l>HSV</l></block><custom-block s="✐ update HSL"></custom-block><block s="doSetVar"><l>✐ last set as</l><l>HSL</l></block></script><script><block s="doSetVar"><l>✐ last set as</l><l>HSV</l></block></script></block><block s="doSetVar"><l>✐ fair?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><custom-block s="✐ make integer RGB"></custom-block><block s="doStopThis"><l><option>this block</option></l></block></script><comment w="90" collapsed="true">fair hue</comment></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>color</l><comment w="53.333333333333336" collapsed="true">Color</comment></block><script><block s="doSetVar"><l>✐ color scale</l><block var="value"/></block><block s="doSetVar"><l>color</l><block s="reportVariadicProduct"><list><block var="value"/><l>3</l></list></block></block><block s="doIfElse"><block s="reportNot"><block s="reportGreaterThan"><block var="color"/><l>42</l></block></block><script><block s="doSetVar"><l>color</l><block s="reportModulus"><block s="reportVariadicProduct"><list><block var="color"/><block s="reportQuotient"><l>15</l><l>14</l></block></list></block><l>300</l></block></block><block s="doSetVar"><l>index</l><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block var="color"/><l>15</l></block></block></block><block s="doSetVar"><l>scale</l><block s="reportDifference"><block var="color"/><block s="reportVariadicProduct"><list><block var="index"/><l>15</l></list></block></block></block></script><script><block s="doIf"><block s="reportLessThan"><block var="color"/><l>60</l><comment w="96.66666666666667" collapsed="true">spread out pink</comment></block><script><block s="doSetVar"><l>color</l><block s="reportVariadicSum"><list><l>45</l><block s="reportVariadicProduct"><list><block s="reportDifference"><block var="color"/><l>42</l></block><block s="reportQuotient"><l>15</l><l>18</l></block></list></block></list></block></block></script></block><block s="doSetVar"><l>color</l><block s="reportModulus"><block var="color"/><l>300</l></block></block><block s="doSetVar"><l>index</l><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block var="color"/><l>15</l></block></block></block><block s="doSetVar"><l>scale</l><block s="reportDifference"><block var="color"/><block s="reportVariadicProduct"><list><block var="index"/><l>15</l></list></block></block></block></script><comment w="77.33333333333333" collapsed="true">grayscale</comment></block><block s="doRun"><block s="reifyScript"><script><custom-block s="set pen color to r: %n g: %n b: %n"><l></l><l></l><l></l></custom-block></script><list></list></block><custom-block s="mmap %repRing over %mult%l"><block s="reifyReporter"><autolambda><custom-block s="min %s %s"><block s="reportRound"><block s="reportVariadicSum"><list><block var="from"/><block s="reportVariadicProduct"><list><block s="reportDifference"><block var="to"/><block var="from"/></block><block s="reportQuotient"><block var="scale"/><l>15</l></block></list></block></list></block></block><l>255</l></custom-block></autolambda><list><l>from</l><l>to</l></list></block><list><block s="reportListItem"><block s="reportVariadicSum"><list><block var="index"/><l>1</l></list></block><block var="colors"/></block><block s="reportListItem"><block s="reportVariadicSum"><list><block var="index"/><l>2</l></list></block><block var="colors"/></block></list></custom-block></block><block s="doSetVar"><l>✐ last set as</l><l>color</l></block><block s="doSetVar"><l>✐ fair?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>saturation (HSL)</l></block><script><custom-block s="✐ update HSL"></custom-block><block s="doSetVar"><l>✐ last set as</l><l>HSL</l></block><block s="doReplaceInList"><l>2</l><block var="✐ HSL"/><block var="value"/></block><custom-block s="✐ update HSV"></custom-block><block s="doSetVar"><l>✐ fair?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><custom-block s="✐ make integer RGB"></custom-block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>lightness</l></block><script><custom-block s="✐ update HSL"></custom-block><block s="doSetVar"><l>✐ last set as</l><l>HSL</l></block><block s="doReplaceInList"><l>3</l><block var="✐ HSL"/><block var="value"/></block><custom-block s="✐ update HSV"></custom-block><block s="doSetVar"><l>✐ fair?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><custom-block s="✐ make integer RGB"></custom-block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>fair saturation (HSV)</l></block><script><block s="doIf"><block s="reportEquals"><block var="✐ last set as"/><l>HSL</l></block><script><custom-block s="✐ update HSV"></custom-block></script></block><block s="setPenColorDimension"><l><option>saturation</option></l><block s="reportIfElse"><block var="✐ fair?"/><block s="reportVariadicProduct"><list><block var="value"/><block s="reportQuotient"><block s="getPenAttribute"><l><option>saturation</option></l></block><block s="reportListItem"><l>2</l><block var="✐ raw HSV"/></block></block></list></block><block var="value"/></block></block><block s="doReplaceInList"><l>2</l><block var="✐ raw HSV"/><block var="value"/></block><block s="doSetVar"><l>✐ last set as</l><l>HSV</l></block><block s="doSetVar"><l>✐ fair?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><custom-block s="✐ make integer RGB"></custom-block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>fair value (brightness)</l></block><script><block s="doIf"><block s="reportEquals"><block var="✐ last set as"/><l>HSL</l></block><script><custom-block s="✐ update HSV"></custom-block></script></block><block s="setPenColorDimension"><l><option>brightness</option></l><block s="reportIfElse"><block var="✐ fair?"/><block s="reportVariadicProduct"><list><block var="value"/><block s="reportQuotient"><block s="getPenAttribute"><l><option>brightness</option></l></block><block s="reportListItem"><l>3</l><block var="✐ raw HSV"/></block></block></list></block><block var="value"/></block></block><block s="doReplaceInList"><l>3</l><block var="✐ raw HSV"/><block var="value"/></block><block s="doSetVar"><l>✐ last set as</l><l>HSV</l></block><block s="doSetVar"><l>✐ fair?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><custom-block s="✐ make integer RGB"></custom-block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>fair saturation (HSL)</l></block><script><block s="doIfElse"><block s="reportEquals"><block var="✐ last set as"/><l>HSV</l></block><script><custom-block s="✐ update HSL"></custom-block></script><script><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="✐ last set as"/><l>HSL</l></block></block><script><block s="doReplaceInList"><l>2</l><block var="✐ HSL"/><l>100</l></block></script></block></script></block><block s="doSetVar"><l>✐ last set as</l><l>HSL</l></block><block s="doReplaceInList"><l>2</l><block var="✐ raw HSL"/><block var="value"/></block><block s="doReplaceInList"><l>2</l><block var="✐ HSL"/><block s="reportIfElse"><block var="✐ fair?"/><block s="reportVariadicProduct"><list><block var="value"/><block s="reportQuotient"><block s="reportListItem"><l>2</l><block var="✐ HSL"/></block><block s="reportListItem"><l>2</l><block var="✐ raw HSL"/></block></block></list></block><block var="value"/></block></block><block s="doSetVar"><l>✐ fair?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><custom-block s="✐ update HSV"></custom-block><custom-block s="✐ make integer RGB"></custom-block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>fair lightness</l></block><script><block s="doIfElse"><block s="reportEquals"><block var="✐ last set as"/><l>HSV</l></block><script><custom-block s="✐ update HSL"></custom-block></script><script><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="✐ last set as"/><l>HSL</l></block></block><script><block s="doReplaceInList"><l>3</l><block var="✐ HSL"/><l>50</l></block></script></block></script></block><block s="doSetVar"><l>✐ last set as</l><l>HSL</l></block><block s="doReplaceInList"><l>3</l><block var="✐ raw HSL"/><block var="value"/></block><block s="doReplaceInList"><l>3</l><block var="✐ HSL"/><block s="reportIfElse"><block var="✐ fair?"/><block s="reportVariadicProduct"><list><block var="value"/><block s="reportQuotient"><block s="reportListItem"><l>3</l><block var="✐ HSL"/></block><block s="reportListItem"><l>3</l><block var="✐ raw HSL"/></block></block></list></block><block var="value"/></block></block><block s="doSetVar"><l>✐ fair?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><custom-block s="✐ update HSV"></custom-block><custom-block s="✐ make integer RGB"></custom-block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>fair HSL vector</l></block><script><custom-block s="$brush set pen %s to %s"><l>fair saturation (HSL)</l><block s="reportListItem"><l>2</l><block var="value"/></block></custom-block><custom-block s="$brush set pen %s to %s"><l>fair lightness</l><block s="reportListItem"><l>3</l><block var="value"/></block></custom-block><custom-block s="$brush set pen %s to %s"><l>fair hue</l><block s="reportListItem"><l>1</l><block var="value"/></block></custom-block><block s="doIf"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="value"/></block><l>3</l></block><script><block s="setPenColorDimension"><l><option>transparency</option></l><block s="reportListItem"><l>4</l><block var="value"/></block></block></script></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>fair HSV vector</l></block><script><custom-block s="$brush set pen %s to %s"><l>fair saturation (HSV)</l><block s="reportListItem"><l>2</l><block var="value"/></block></custom-block><custom-block s="$brush set pen %s to %s"><l>fair value (brightness)</l><block s="reportListItem"><l>3</l><block var="value"/></block></custom-block><custom-block s="$brush set pen %s to %s"><l>fair hue</l><block s="reportListItem"><l>1</l><block var="value"/></block></custom-block><block s="doIf"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="value"/></block><l>3</l></block><script><block s="setPenColorDimension"><l><option>transparency</option></l><block s="reportListItem"><l>4</l><block var="value"/></block></block></script></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>HSL vector</l></block><script><custom-block s="$brush set pen %s to %s"><l>saturation (HSL)</l><block s="reportListItem"><l>2</l><block var="value"/></block></custom-block><custom-block s="$brush set pen %s to %s"><l>lightness</l><block s="reportListItem"><l>3</l><block var="value"/></block></custom-block><custom-block s="$brush set pen %s to %s"><l>hue</l><block s="reportListItem"><l>1</l><block var="value"/></block></custom-block><block s="doIf"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="value"/></block><l>3</l></block><script><block s="setPenColorDimension"><l><option>transparency</option></l><block s="reportListItem"><l>4</l><block var="value"/></block></block></script></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>HSV vector</l></block><script><custom-block s="$brush set pen %s to %s"><l>saturation (HSV)</l><block s="reportListItem"><l>2</l><block var="value"/></block></custom-block><custom-block s="$brush set pen %s to %s"><l>value (brightness)</l><block s="reportListItem"><l>3</l><block var="value"/></block></custom-block><custom-block s="$brush set pen %s to %s"><l>hue</l><block s="reportListItem"><l>1</l><block var="value"/></block></custom-block><block s="doIf"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="value"/></block><l>3</l></block><script><block s="setPenColorDimension"><l><option>transparency</option></l><block s="reportListItem"><l>4</l><block var="value"/></block></block></script></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>RGB vector</l></block><script><custom-block s="$brush set pen %s to %s"><l>red</l><block s="reportListItem"><l>1</l><block var="value"/></block></custom-block><custom-block s="$brush set pen %s to %s"><l>green</l><block s="reportListItem"><l>2</l><block var="value"/></block></custom-block><custom-block s="$brush set pen %s to %s"><l>blue</l><block s="reportListItem"><l>3</l><block var="value"/></block></custom-block><block s="doIf"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="value"/></block><l>3</l></block><script><block s="setPenColorDimension"><l><option>transparency</option></l><block s="reportListItem"><l>4</l><block var="value"/></block></block></script></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>RGB hex</l></block><script><block s="doSetVar"><l>value</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><l></l><l><option>number</option></l></block><l></l><block s="reportVariadicSum"><list><l>10</l><block s="reportDifference"><block s="reportUnicode"><l></l></block><block s="reportIfElse"><block s="reportLessThan"><l></l><l>a</l></block><block s="reportUnicode"><l>A</l></block><block s="reportUnicode"><l>a</l></block></block></block></list></block></block></autolambda><list></list></block><block s="reportTextSplit"><block var="value"/><l><option>letter</option></l></block></block></block><block s="doIf"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="value"/></block><l>3</l></block><script><block s="doSetVar"><l>value</l><block s="reportConcatenatedLists"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l><l></l></list></block></autolambda><list></list></block><block var="value"/></block></block></block></script></block><block s="doIf"><block s="reportIsA"><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportOr"><block s="reportLessThan"><l></l><l>0</l></block><block s="reportGreaterThan"><l></l><l>15</l></block></block></autolambda><list></list></block><block var="value"/></block><l><option>number</option></l></block><script><custom-block s="error %txt"><l>Badly formed hex color.</l></custom-block></script></block><block s="doIf"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="value"/></block><l>6</l></block><script><custom-block s="error %txt"><l>More than six hex digits.</l></custom-block></script></block><block s="doRepeat"><block s="reportDifference"><l>6</l><block s="reportListAttribute"><l><option>length</option></l><block var="value"/></block></block><script><block s="doSetVar"><l>value</l><block s="reportCONS"><l>0</l><block var="value"/></block></block></script></block><custom-block s="$brush set pen %s to %s"><l>red</l><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><l>16</l><block s="reportListItem"><l>1</l><block var="value"/></block></list></block><block s="reportListItem"><l>2</l><block var="value"/></block></list></block></custom-block><custom-block s="$brush set pen %s to %s"><l>green</l><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><l>16</l><block s="reportListItem"><l>3</l><block var="value"/></block></list></block><block s="reportListItem"><l>4</l><block var="value"/></block></list></block></custom-block><custom-block s="$brush set pen %s to %s"><l>blue</l><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><l>16</l><block s="reportListItem"><l>5</l><block var="value"/></block></list></block><block s="reportListItem"><l>6</l><block var="value"/></block></list></block></custom-block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>X11/W3C name</l><comment w="90" collapsed="true">X11/W3C name</comment></block><script><block s="doIf"><block s="reportNot"><custom-block s="does var %s exist?"><l>✐ X11</l></custom-block></block><script><custom-block s="create %s var %mult%txt"><l>global</l><list><l>✐ X11</l></list></custom-block></script></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="✐ X11"/><l><option>list</option></l></block></block><script><block s="doSetVar"><l>✐ X11</l><block s="reportNewList"><list><block s="reportNewList"><list><l>255</l><l>250</l><l>250</l><l>snow</l></list></block><block s="reportNewList"><list><l>248</l><l>248</l><l>255</l><l>ghostwhite</l></list></block><block s="reportNewList"><list><l>245</l><l>245</l><l>245</l><l>whitesmoke</l></list></block><block s="reportNewList"><list><l>220</l><l>220</l><l>220</l><l>gainsboro</l></list></block><block s="reportNewList"><list><l>255</l><l>250</l><l>240</l><l>floralwhite</l></list></block><block s="reportNewList"><list><l>253</l><l>245</l><l>230</l><l>oldlace</l></list></block><block s="reportNewList"><list><l>250</l><l>240</l><l>230</l><l>linen</l></list></block><block s="reportNewList"><list><l>250</l><l>235</l><l>215</l><l>antiquewhite</l></list></block><block s="reportNewList"><list><l>255</l><l>239</l><l>213</l><l>papayawhip</l></list></block><block s="reportNewList"><list><l>255</l><l>235</l><l>205</l><l>blanchedalmond</l></list></block><block s="reportNewList"><list><l>255</l><l>228</l><l>196</l><l>bisque</l></list></block><block s="reportNewList"><list><l>255</l><l>218</l><l>185</l><l>peachpuff</l></list></block><block s="reportNewList"><list><l>255</l><l>222</l><l>173</l><l>navajowhite</l></list></block><block s="reportNewList"><list><l>255</l><l>228</l><l>181</l><l>moccasin</l></list></block><block s="reportNewList"><list><l>255</l><l>248</l><l>220</l><l>cornsilk</l></list></block><block s="reportNewList"><list><l>255</l><l>255</l><l>240</l><l>ivory</l></list></block><block s="reportNewList"><list><l>255</l><l>250</l><l>205</l><l>lemonchiffon</l></list></block><block s="reportNewList"><list><l>255</l><l>245</l><l>238</l><l>seashell</l></list></block><block s="reportNewList"><list><l>240</l><l>255</l><l>240</l><l>honeydew</l></list></block><block s="reportNewList"><list><l>245</l><l>255</l><l>250</l><l>mintcream</l></list></block><block s="reportNewList"><list><l>240</l><l>255</l><l>255</l><l>azure</l></list></block><block s="reportNewList"><list><l>240</l><l>248</l><l>255</l><l>aliceblue</l></list></block><block s="reportNewList"><list><l>230</l><l>230</l><l>250</l><l>lavender</l></list></block><block s="reportNewList"><list><l>255</l><l>240</l><l>245</l><l>lavenderblush</l></list></block><block s="reportNewList"><list><l>255</l><l>228</l><l>225</l><l>mistyrose</l></list></block><block s="reportNewList"><list><l>255</l><l>255</l><l>255</l><l>white</l></list></block><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l><l>black</l></list></block><block s="reportNewList"><list><l>47</l><l>79</l><l>79</l><l>darkslategray</l></list></block><block s="reportNewList"><list><l>47</l><l>79</l><l>79</l><l>darkslategrey</l></list></block><block s="reportNewList"><list><l>105</l><l>105</l><l>105</l><l>dimgray</l></list></block><block s="reportNewList"><list><l>105</l><l>105</l><l>105</l><l>dimgrey</l></list></block><block s="reportNewList"><list><l>112</l><l>128</l><l>144</l><l>slategray</l></list></block><block s="reportNewList"><list><l>112</l><l>128</l><l>144</l><l>slategrey</l></list></block><block s="reportNewList"><list><l>119</l><l>136</l><l>153</l><l>lightslategray</l></list></block><block s="reportNewList"><list><l>119</l><l>136</l><l>153</l><l>lightslategrey</l></list></block><block s="reportNewList"><list><l>190</l><l>190</l><l>190</l><l>gray(X11)</l></list></block><block s="reportNewList"><list><l>190</l><l>190</l><l>190</l><l>grey(X11)</l></list></block><block s="reportNewList"><list><l>128</l><l>128</l><l>128</l><l>gray(W3C)</l></list></block><block s="reportNewList"><list><l>128</l><l>128</l><l>128</l><l>grey(W3C)</l></list></block><block s="reportNewList"><list><l>211</l><l>211</l><l>211</l><l>lightgrey</l></list></block><block s="reportNewList"><list><l>211</l><l>211</l><l>211</l><l>lightgray</l></list></block><block s="reportNewList"><list><l>25</l><l>25</l><l>112</l><l>midnightblue</l></list></block><block s="reportNewList"><list><l>0</l><l>0</l><l>128</l><l>navy</l></list></block><block s="reportNewList"><list><l>0</l><l>0</l><l>128</l><l>navyblue</l></list></block><block s="reportNewList"><list><l>100</l><l>149</l><l>237</l><l>cornflowerblue</l></list></block><block s="reportNewList"><list><l>72</l><l>61</l><l>139</l><l>darkslateblue</l></list></block><block s="reportNewList"><list><l>106</l><l>90</l><l>205</l><l>slateblue</l></list></block><block s="reportNewList"><list><l>123</l><l>104</l><l>238</l><l>mediumslateblue</l></list></block><block s="reportNewList"><list><l>132</l><l>112</l><l>255</l><l>lightslateblue</l></list></block><block s="reportNewList"><list><l>0</l><l>0</l><l>205</l><l>mediumblue</l></list></block><block s="reportNewList"><list><l>65</l><l>105</l><l>225</l><l>royalblue</l></list></block><block s="reportNewList"><list><l>0</l><l>0</l><l>255</l><l>blue</l></list></block><block s="reportNewList"><list><l>30</l><l>144</l><l>255</l><l>dodgerblue</l></list></block><block s="reportNewList"><list><l>0</l><l>191</l><l>255</l><l>deepskyblue</l></list></block><block s="reportNewList"><list><l>135</l><l>206</l><l>235</l><l>skyblue</l></list></block><block s="reportNewList"><list><l>135</l><l>206</l><l>250</l><l>lightskyblue</l></list></block><block s="reportNewList"><list><l>70</l><l>130</l><l>180</l><l>steelblue</l></list></block><block s="reportNewList"><list><l>176</l><l>196</l><l>222</l><l>lightsteelblue</l></list></block><block s="reportNewList"><list><l>173</l><l>216</l><l>230</l><l>lightblue</l></list></block><block s="reportNewList"><list><l>176</l><l>224</l><l>230</l><l>powderblue</l></list></block><block s="reportNewList"><list><l>175</l><l>238</l><l>238</l><l>paleturquoise</l></list></block><block s="reportNewList"><list><l>0</l><l>206</l><l>209</l><l>darkturquoise</l></list></block><block s="reportNewList"><list><l>72</l><l>209</l><l>204</l><l>mediumturquoise</l></list></block><block s="reportNewList"><list><l>64</l><l>224</l><l>208</l><l>turquoise</l></list></block><block s="reportNewList"><list><l>0</l><l>255</l><l>255</l><l>cyan</l></list></block><block s="reportNewList"><list><l>0</l><l>255</l><l>255</l><l>aqua</l></list></block><block s="reportNewList"><list><l>224</l><l>255</l><l>255</l><l>lightcyan</l></list></block><block s="reportNewList"><list><l>95</l><l>158</l><l>160</l><l>cadetblue</l></list></block><block s="reportNewList"><list><l>102</l><l>205</l><l>170</l><l>mediumaquamarine</l></list></block><block s="reportNewList"><list><l>127</l><l>255</l><l>212</l><l>aquamarine</l></list></block><block s="reportNewList"><list><l>0</l><l>100</l><l>0</l><l>darkgreen</l></list></block><block s="reportNewList"><list><l>85</l><l>107</l><l>47</l><l>darkolivegreen</l></list></block><block s="reportNewList"><list><l>143</l><l>188</l><l>143</l><l>darkseagreen</l></list></block><block s="reportNewList"><list><l>46</l><l>139</l><l>87</l><l>seagreen</l></list></block><block s="reportNewList"><list><l>60</l><l>179</l><l>113</l><l>mediumseagreen</l></list></block><block s="reportNewList"><list><l>32</l><l>178</l><l>170</l><l>lightseagreen</l></list></block><block s="reportNewList"><list><l>152</l><l>251</l><l>152</l><l>palegreen</l></list></block><block s="reportNewList"><list><l>0</l><l>255</l><l>127</l><l>springgreen</l></list></block><block s="reportNewList"><list><l>124</l><l>252</l><l>0</l><l>lawngreen</l></list></block><block s="reportNewList"><list><l>0</l><l>255</l><l>0</l><l>green(X11)</l></list></block><block s="reportNewList"><list><l>0</l><l>128</l><l>0</l><l>green(W3C)</l></list></block><block s="reportNewList"><list><l>0</l><l>255</l><l>0</l><l>lime</l></list></block><block s="reportNewList"><list><l>127</l><l>255</l><l>0</l><l>chartreuse</l></list></block><block s="reportNewList"><list><l>0</l><l>250</l><l>154</l><l>mediumspringgreen</l></list></block><block s="reportNewList"><list><l>173</l><l>255</l><l>47</l><l>greenyellow</l></list></block><block s="reportNewList"><list><l>50</l><l>205</l><l>50</l><l>limegreen</l></list></block><block s="reportNewList"><list><l>154</l><l>205</l><l>50</l><l>yellowgreen</l></list></block><block s="reportNewList"><list><l>34</l><l>139</l><l>34</l><l>forestgreen</l></list></block><block s="reportNewList"><list><l>107</l><l>142</l><l>35</l><l>olivedrab</l></list></block><block s="reportNewList"><list><l>189</l><l>183</l><l>107</l><l>darkkhaki</l></list></block><block s="reportNewList"><list><l>240</l><l>230</l><l>140</l><l>khaki</l></list></block><block s="reportNewList"><list><l>238</l><l>232</l><l>170</l><l>palegoldenrod</l></list></block><block s="reportNewList"><list><l>250</l><l>250</l><l>210</l><l>lightgoldenrodyellow</l></list></block><block s="reportNewList"><list><l>255</l><l>255</l><l>224</l><l>lightyellow</l></list></block><block s="reportNewList"><list><l>255</l><l>255</l><l>0</l><l>yellow</l></list></block><block s="reportNewList"><list><l>255</l><l>215</l><l>0</l><l>gold</l></list></block><block s="reportNewList"><list><l>238</l><l>221</l><l>130</l><l>lightgoldenrod</l></list></block><block s="reportNewList"><list><l>218</l><l>165</l><l>32</l><l>goldenrod</l></list></block><block s="reportNewList"><list><l>184</l><l>134</l><l>11</l><l>darkgoldenrod</l></list></block><block s="reportNewList"><list><l>188</l><l>143</l><l>143</l><l>rosybrown</l></list></block></list></block></block></script></block><block s="doSetVar"><l>value</l><custom-block s="✐ no spaces %s"><block var="value"/></custom-block></block><custom-block s="use case-independent comparisons %b"><l><bool>true</bool></l></custom-block><custom-block s="catch %upvar %cs"><l>x11w3c</l><script><block s="doIf"><custom-block s="✐ subset %predRing %l %cmdRing %upvar"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block var="value"/><block s="reportListItem"><l>4</l><l/></block></block></autolambda><list></list></block><block var="✐ X11"/><block var="x11w3c"/><l>exact matches</l></custom-block><script><custom-block s="error %txt"><block s="reportJoinWords"><list><l>?? multiple exact matches for </l><block var="value"/></list></block></custom-block></script></block><block s="doIf"><block s="reportNot"><custom-block s="✐ subset %predRing %l %cmdRing %upvar"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>4</l><l/></block><custom-block s="substring of %txt before %txt"><block s="reportListItem"><l>4</l><l/></block><block var="value"/></custom-block></block></block></autolambda><list></list></block><block var="✐ X11"/><block var="x11w3c"/><l>partial matches</l></custom-block></block><script><custom-block s="error %txt"><block s="reportJoinWords"><list><l>Color name </l><block var="value"/><l> not found.</l></list></block></custom-block></script></block><block s="doIfElse"><custom-block s="✐ subset %predRing %l %cmdRing %upvar"><block s="reifyPredicate"><autolambda><block s="reportEquals"><custom-block s="substring of %txt before %txt"><block s="reportListItem"><l>4</l><block var="match"/></block><block var="value"/></custom-block><l></l></block></autolambda><list><l>match</l></list></block><block var="partial matches"/><block var="x11w3c"/><l>head matches</l></custom-block><script><block s="doIfElse"><custom-block s="✐ subset %predRing %l %cmdRing %upvar"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportIsA"><block s="reportLetter"><l><option>last</option></l><block s="reportListItem"><l>4</l><l/></block></block><l><option>number</option></l></block></block></autolambda><list></list></block><block var="head matches"/><block var="x11w3c"/><l>non-numbered matches</l></custom-block><script><custom-block s="error %txt"><block s="reportJoinWords"><list><l>Multiple partial matches for </l><block var="value"/><l>: </l><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>4</l><l/></block></autolambda><list></list></block><block var="non-numbered matches"/></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l> , </l><l></l></list></block></autolambda><list></list></block></block></list></block></custom-block></script><script><custom-block s="error %txt"><block s="reportJoinWords"><list><l>Multiple partial matches for </l><block var="value"/><l>: </l><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>4</l><l/></block></autolambda><list></list></block><block var="head matches"/></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l> , </l><l></l></list></block></autolambda><list></list></block></block></list></block></custom-block></script></block></script><script><block s="doIfElse"><custom-block s="✐ subset %predRing %l %cmdRing %upvar"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportIsA"><block s="reportLetter"><l><option>last</option></l><block s="reportListItem"><l>4</l><l/></block></block><l><option>number</option></l></block></block></autolambda><list></list></block><block var="partial matches"/><block var="x11w3c"/><l>non-numbered matches</l></custom-block><script><custom-block s="error %txt"><block s="reportJoinWords"><list><l>Multiple partial matches for </l><block var="value"/><l>: </l><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>4</l><l/></block></autolambda><list></list></block><block var="non-numbered matches"/></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l> , </l><l></l></list></block></autolambda><list></list></block></block></list></block></custom-block></script><script><custom-block s="error %txt"><block s="reportJoinWords"><list><l>Multiple partial matches for </l><block var="value"/><l>: </l><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>4</l><l/></block></autolambda><list></list></block><block var="partial matches"/></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l> , </l><l></l></list></block></autolambda><list></list></block></block></list></block></custom-block></script></block></script></block></script><comment w="294.6666666666667" collapsed="true">SUBSET throws here if it handles a unique match</comment></custom-block></script></block><custom-block s="✐ initialize variables"></custom-block></script></block-definition><block-definition s="mmap %&apos;function&apos; over %&apos;lists&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block s="reportListItem"><l>1</l><block var="lists"/></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="function"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><block var="lists"/></block></block><custom-block s="mmap %repRing over %mult%l"><block var="function"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportCDR"><l/></block></autolambda><list></list></block><block var="lists"/></block></custom-block></block></block></script></block-definition><block-definition s="✐ update HSL" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>L</l></list></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="✐ last set as"/><l>HSL</l></block></block><script><block s="doSetVar"><l>✐ HSL</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l></l><l>100</l></list></block></autolambda><list></list></block><block s="evaluate"><block s="reifyReporter"><script><block s="doSetVar"><l>L</l><block s="reportDifference"><block var="V"/><block s="reportQuotient"><block s="reportVariadicProduct"><list><block var="V"/><block var="S"/></list></block><l>2</l></block></block></block><block s="doReport"><block s="reportNewList"><list><block var="H"/><block s="reportIfElse"><block s="reportOr"><block s="reportEquals"><block var="L"/><l>0</l></block><block s="reportEquals"><block var="L"/><l>1</l></block></block><l>0</l><block s="reportQuotient"><block s="reportDifference"><block var="V"/><block var="L"/></block><custom-block s="min %s %s"><block var="L"/><block s="reportDifference"><l>1</l><block var="L"/></block></custom-block></block></block><block var="L"/></list></block></block></script><list><l>H</l><l>S</l><l>V</l></list></block><custom-block s="HSV color"></custom-block></block></block></block><block s="doIf"><block var="✐ fair?"/><script><block s="doSetVar"><l>✐ raw HSL</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l></l><l>100</l></list></block></autolambda><list></list></block><block s="evaluate"><block s="reifyReporter"><script><block s="doSetVar"><l>L</l><block s="reportDifference"><block var="V"/><block s="reportQuotient"><block s="reportVariadicProduct"><list><block var="V"/><block var="S"/></list></block><l>2</l></block></block></block><block s="doReport"><block s="reportNewList"><list><block var="H"/><block s="reportIfElse"><block s="reportOr"><block s="reportEquals"><block var="L"/><l>0</l></block><block s="reportEquals"><block var="L"/><l>1</l></block></block><l>0</l><block s="reportQuotient"><block s="reportDifference"><block var="V"/><block var="L"/></block><custom-block s="min %s %s"><block var="L"/><block s="reportDifference"><l>1</l><block var="L"/></block></custom-block></block></block><block var="L"/></list></block></block></script><list><l>H</l><l>S</l><l>V</l></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportQuotient"><l></l><l>100</l></block></autolambda><list></list></block><block var="✐ raw HSV"/></block></block></block></block></script></block></script></block></script></block-definition><block-definition s="✐ update HSV" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>V</l><l>L</l><l>HSL 0-1</l><l>raw HSL 0-1</l></list></block><block s="doSetVar"><l>HSL 0-1</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportQuotient"><l></l><l>100</l></block></autolambda><list></list></block><block var="✐ HSL"/></block></block><block s="doSetVar"><l>L</l><block s="reportListItem"><l>3</l><block var="HSL 0-1"/></block></block><block s="doSetVar"><l>V</l><block s="reportVariadicSum"><list><block var="L"/><block s="reportVariadicProduct"><list><block s="reportListItem"><l>2</l><block var="HSL 0-1"/></block><custom-block s="min %s %s"><block var="L"/><block s="reportDifference"><l>1</l><block var="L"/></block></custom-block></list></block></list></block></block><custom-block s="set pen color to h: %n s: %n v: %n"><block s="reportListItem"><l>1</l><block var="HSL 0-1"/></block><block s="reportIfElse"><block s="reportEquals"><block var="V"/><l>0</l></block><l>0</l><block s="reportDifference"><l>2</l><block s="reportVariadicProduct"><list><l>2</l><block s="reportQuotient"><block var="L"/><block var="V"/></block></list></block></block></block><block var="V"/></custom-block><block s="doIf"><block var="✐ fair?"/><script><block s="doSetVar"><l>raw HSL 0-1</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportQuotient"><l></l><l>100</l></block></autolambda><list></list></block><block var="✐ raw HSL"/></block></block><block s="doSetVar"><l>L</l><block s="reportListItem"><l>3</l><block var="raw HSL 0-1"/></block></block><block s="doSetVar"><l>V</l><block s="reportVariadicSum"><list><block var="L"/><block s="reportVariadicProduct"><list><block s="reportListItem"><l>2</l><block var="raw HSL 0-1"/></block><custom-block s="min %s %s"><block var="L"/><block s="reportDifference"><l>1</l><block var="L"/></block></custom-block></list></block></list></block></block><block s="doSetVar"><l>✐ raw HSV</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l></l><l>100</l></list></block></autolambda><list></list></block><block s="reportNewList"><list><block s="reportListItem"><l>1</l><block var="raw HSL 0-1"/></block><block s="reportIfElse"><block s="reportEquals"><block var="V"/><l>0</l></block><l>0</l><block s="reportDifference"><l>2</l><block s="reportVariadicProduct"><list><l>2</l><block s="reportQuotient"><block var="L"/><block var="V"/></block></list></block></block></block><block var="V"/></list></block></block></block></script></block></script></block-definition><block-definition s="%&apos;x&apos;" type="reporter" category="pen"><comment x="0" y="0" w="226" collapsed="false">The identity function reports its input.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block var="x"/></block></script></block-definition><block-definition s="$brush pen %&apos;dimension&apos;" type="reporter" category="pen"><comment x="0" y="0" w="380.6666666666667" collapsed="false">This block reports the pen size, color, or transparency, in all the same ways that the SET PEN block allows you to set those pen properties. (It will also report the current crayon number, if the pen color was most recently set with SET PEN TO CRAYON.)&#xD;&#xD;See Appendix A of the Snap! Reference Manual for details. </comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>size&#xD;crayon&#xD;color&#xD;fair hue&#xD;transparency&#xD;X11/W3C name&#xD;(3D color spaces)={&#xD;fair HSL={&#xD;fair hue&#xD;fair saturation (HSL)&#xD;fair lightness&#xD;fair HSL vector&#xD;}&#xD;fair HSV={&#xD;fair hue&#xD;fair saturation (HSV)&#xD;fair value (brightness)&#xD;fair HSV vector&#xD;}&#xD;HSL={&#xD;hue&#xD;saturation (HSL)&#xD;lightness&#xD;HSL vector&#xD;}&#xD;HSV={&#xD;hue&#xD;saturation (HSV)&#xD;value (brightness)&#xD;HSV vector&#xD;}&#xD;RGB (0-255)={&#xD;red&#xD;green&#xD;blue&#xD;RGB vector&#xD;RGB hex&#xD;}&#xD;}</options></input></inputs><script><custom-block s="✐ initialize variables"></custom-block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>size</l></block><script><block s="doReport"><block s="getPenAttribute"><l><option>size</option></l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>hue</l></block><script><block s="doReport"><block s="getPenAttribute"><l><option>hue</option></l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>saturation (HSV)</l></block><script><block s="doReport"><block s="getPenAttribute"><l><option>saturation</option></l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>value (brightness)</l></block><script><block s="doReport"><block s="getPenAttribute"><l><option>brightness</option></l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>transparency</l></block><script><block s="doReport"><block s="getPenAttribute"><l><option>transparency</option></l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>RGB vector</l></block><script><block s="doReport"><custom-block s="RGB color"></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>red</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><custom-block s="RGB color"></custom-block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>green</l></block><script><block s="doReport"><block s="reportListItem"><l>2</l><custom-block s="RGB color"></custom-block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>blue</l></block><script><block s="doReport"><block s="reportListItem"><l>3</l><custom-block s="RGB color"></custom-block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>RGB hex</l></block><script><block s="doReport"><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><custom-block s="✐ hexchar %s"><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><l></l><l>16</l></block></block></custom-block><custom-block s="✐ hexchar %s"><block s="reportModulus"><l></l><l>16</l></block></custom-block></list></block></autolambda><list></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportRound"><l></l></block></autolambda><list></list></block><custom-block s="RGB color"></custom-block></block></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l></l></list></block></autolambda><list></list></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>HSV vector</l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l>100</l><l></l></list></block></autolambda><list></list></block><custom-block s="HSV color"></custom-block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>HSL vector</l></block><script><custom-block s="✐ update HSL"></custom-block><block s="doReport"><block var="✐ HSL"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>saturation (HSL)</l></block><script><custom-block s="✐ update HSL"></custom-block><block s="doReport"><block s="reportListItem"><l>2</l><block var="✐ HSL"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>lightness</l></block><script><custom-block s="✐ update HSL"></custom-block><block s="doReport"><block s="reportListItem"><l>3</l><block var="✐ HSL"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>color</l></block><script><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block var="✐ last set as"/><l>color</l></block><block var="✐ color scale"/><l>not set</l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>fair hue</l></block><script><block s="doIf"><block var="✐ fair?"/><script><block s="doIfElse"><block s="reportEquals"><block var="✐ last set as"/><l>HSL</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="✐ raw HSL"/></block></block></script><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="✐ raw HSV"/></block></block></script></block></script></block><block s="doReport"><l>not set</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>fair saturation (HSL)</l></block><script><block s="doIf"><block var="✐ fair?"/><script><custom-block s="✐ update HSL"></custom-block><block s="doReport"><block s="reportListItem"><l>2</l><block var="✐ raw HSL"/></block></block></script></block><block s="doReport"><l>not set</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>fair lightness</l></block><script><block s="doIf"><block var="✐ fair?"/><script><custom-block s="✐ update HSL"></custom-block><block s="doReport"><block s="reportListItem"><l>3</l><block var="✐ raw HSL"/></block></block></script></block><block s="doReport"><l>not set</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>fair HSL vector</l></block><script><block s="doIf"><block var="✐ fair?"/><script><custom-block s="✐ update HSL"></custom-block><block s="doReport"><block var="✐ raw HSL"/></block></script></block><block s="doReport"><l>not set</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>fair saturation (HSV)</l></block><script><block s="doIf"><block var="✐ fair?"/><script><block s="doIf"><block s="reportEquals"><block var="✐ last set as"/><l>HSL</l></block><script><custom-block s="✐ update HSV"></custom-block></script></block><block s="doReport"><block s="reportListItem"><l>2</l><block var="✐ raw HSV"/></block></block></script></block><block s="doReport"><l>not set</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>fair value (brightness)</l></block><script><block s="doIf"><block var="✐ fair?"/><script><block s="doIf"><block s="reportEquals"><block var="✐ last set as"/><l>HSL</l></block><script><custom-block s="✐ update HSV"></custom-block></script></block><block s="doReport"><block s="reportListItem"><l>3</l><block var="✐ raw HSV"/></block></block></script></block><block s="doReport"><l>not set</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>fair HSV vector</l></block><script><block s="doIf"><block var="✐ fair?"/><script><block s="doIf"><block s="reportEquals"><block var="✐ last set as"/><l>HSL</l></block><script><custom-block s="✐ update HSV"></custom-block></script></block><block s="doReport"><block var="✐ raw HSV"/></block></script></block><block s="doReport"><l>not set</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>crayon</l></block><script><block s="doIf"><block s="reportEquals"><block var="✐ last set as"/><l>crayon</l></block><script><block s="doReport"><block var="✐ last crayon"/></block></script></block><block s="doReport"><l>not set</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>X11/W3C name</l></block><script><block s="doIf"><block s="reportEquals"><block var="✐ last set as"/><l>X11</l></block><script><block s="doReport"><block var="✐ last x11"/></block></script></block><block s="doReport"><l>not set</l></block></script></block></script></block-definition><block-definition s="✐ hexchar %&apos;nybble&apos;" type="reporter" category="pen"><comment x="0" y="0" w="245.33333333333334" collapsed="false">Takes a value from 0 to 15 and reports&#xD;the corresponding hexadecimal digit.&#xD;&#xD;For internal use of the color library.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportLessThan"><block var="nybble"/><l>10</l></block><block var="nybble"/><block s="reportUnicodeAsLetter"><block s="reportVariadicSum"><list><block s="reportUnicode"><l>a</l></block><block s="reportDifference"><block var="nybble"/><l>10</l></block></list></block></block></block></block></script></block-definition><block-definition s="$brush change pen %&apos;dimension&apos; by %&apos;amount&apos;" type="command" category="pen"><comment x="0" y="0" w="334" collapsed="false">Changes any pen property by the specified amount.  Some color scales can&apos;t be adjusted this way unless the color was first SET using that scale.&#xD;Vectors (e.g., RGB color as a list of three numbers) can be incremented&#xD;by a vector as the amount. X11/W3C names can&apos;t be incremented.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>size&#xD;crayon&#xD;color&#xD;fair hue&#xD;transparency&#xD;(3D color spaces)={&#xD;fair HSL={&#xD;fair hue&#xD;fair saturation (HSL)&#xD;fair lightness&#xD;fair HSL vector&#xD;}&#xD;fair HSV={&#xD;fair hue&#xD;fair saturation (HSV)&#xD;fair value (brightness)&#xD;fair HSV vector&#xD;}&#xD;HSL={&#xD;hue&#xD;saturation (HSL)&#xD;lightness&#xD;HSL vector&#xD;}&#xD;HSV={&#xD;hue&#xD;saturation (HSV)&#xD;value (brightness)&#xD;HSV vector&#xD;}&#xD;RGB (0-255)={&#xD;red&#xD;green&#xD;blue&#xD;RGB vector&#xD;RGB hex&#xD;}&#xD;}</options></input><input type="%s"></input></inputs><script><custom-block s="✐ initialize variables"></custom-block><block s="doDeclareVariables"><list><l>old</l></list></block><block s="doSetVar"><l>old</l><custom-block s="$brush pen %s"><block var="dimension"/></custom-block></block><block s="doIf"><block s="reportEquals"><block var="old"/><l>not set</l></block><script><custom-block s="error %txt"><block s="reportJoinWords"><list><l>Dimension </l><block var="dimension"/><l> not set.</l></list></block></custom-block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>crayon</l></block><script><custom-block s="$brush set pen to crayon %n"><block s="reportVariadicSum"><list><block var="old"/><block var="amount"/></list></block></custom-block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="dimension"/><l>RGB hex</l></block><script><custom-block s="error %txt"><l>Sorry, I don&apos;t know how to add in hexadecimal.</l></custom-block></script></block><block s="doIf"><block s="reportIsA"><block var="amount"/><l><option>number</option></l></block><script><custom-block s="$brush set pen %s to %s"><block var="dimension"/><block s="reportVariadicSum"><list><block var="old"/><block var="amount"/></list></block></custom-block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportIsA"><block var="amount"/><l><option>list</option></l></block><script><custom-block s="$brush set pen %s to %s"><block var="dimension"/><custom-block s="mmap %repRing over %mult%l"><block s="reifyReporter"><autolambda><block s="reportVariadicSum"><list><l></l><l></l></list></block></autolambda><list></list></block><list><block var="old"/><block var="amount"/></list></custom-block></custom-block><block s="doStopThis"><l><option>this block</option></l></block></script></block><custom-block s="error %txt"><block s="reportJoinWords"><list><l>I don&apos;t know how to handle </l><block var="amount"/></list></block></custom-block></script></block-definition><block-definition s="error %&apos;msg&apos;" type="command" category="control"><header></header><code></code><translations>pt:lança o erro _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>msg</l></list><l>throw new Error(msg);</l></block><list><block var="msg"/></list></block></script></block-definition><block-definition s="✐ make integer RGB" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reifyScript"><script><custom-block s="set pen color to r: %n g: %n b: %n"><l></l><l></l><l></l></custom-block></script><list></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportRound"><l></l></block></autolambda><list></list></block><custom-block s="RGB color"></custom-block></block></block></script></block-definition><block-definition s="✐ subset %&apos;pred&apos; %&apos;data&apos; %&apos;catchtag&apos; %&apos;result&apos;" type="predicate" category="pen"><comment x="0" y="0" w="228" collapsed="false">Don&apos;t ask.&#xD;Only for internal use by the SET PEN block.</comment><header></header><code></code><translations></translations><inputs><input type="%predRing"></input><input type="%l"></input><input type="%cmdRing"></input><input type="%upvar"></input></inputs><script><block s="doDeclareVariables"><list><l>best match</l></list></block><block s="doSetVar"><l>result</l><block s="reportKeep"><block var="pred"/><block var="data"/></block></block><block s="doIf"><block s="reportListIsEmpty"><block var="result"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doIf"><block s="reportListIsEmpty"><block s="reportCDR"><block var="result"/></block></block><script><block s="doSetVar"><l>best match</l><block s="reportListItem"><l>1</l><block var="result"/></block></block><custom-block s="$brush set pen %s to %s"><l>red</l><block s="reportListItem"><l>1</l><block var="best match"/></block></custom-block><custom-block s="$brush set pen %s to %s"><l>green</l><block s="reportListItem"><l>2</l><block var="best match"/></block></custom-block><custom-block s="$brush set pen %s to %s"><l>blue</l><block s="reportListItem"><l>3</l><block var="best match"/></block></custom-block><block s="doSetVar"><l>✐ last X11</l><block s="reportListItem"><l>4</l><block var="best match"/></block></block><block s="doSetVar"><l>✐ last set as</l><l>X11</l></block><custom-block s="throw %s"><block var="catchtag"/></custom-block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block-definition><block-definition s="✐ no spaces %&apos;text&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportJoinWords"><block s="reportTextSplit"><block var="text"/><l> </l></block></block></block></script></block-definition><block-definition s="create %&apos;scope&apos; var %&apos;names&apos;" type="command" category="variables"><comment x="0" y="0" w="146" collapsed="false">This block creates  new variables on the selected scope: global (for all sprites), sprite (for this sprite only) or script (only for that blocks stack) with the names given (in &apos;names&apos; list).&#xD;&#xD;If there is already a variable with that name in that scope, it does nothing: no errors and no overwrites.</comment><header></header><code></code><translations>pt:cria as variáveis _ _&#xD;ca:crea les _ variables _&#xD;es:crear las _ variables _&#xD;de:erstellen _ var _&#xD;</translations><inputs><input type="%s" readonly="true">global<options>global&#xD;sprite&#xD;script</options></input><input type="%mult%txt"></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="scope"/><l>script</l></block><script><block s="doForEach"><l>each item</l><block var="names"/><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;if (!proc.homeContext.variables.vars[varName]) proc.homeContext.variables.addVar(varName);</l></block><list><block var="each item"/></list></block></script></block></script><script><block s="doDeclareVariables"><list><l>global</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="scope"/><l>sprite</l></block><script><block s="doSetVar"><l>global</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><script><block s="doSetVar"><l>global</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doForEach"><l>each item</l><block var="names"/><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>global</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;if (global &amp;&amp; !proc.homeContext.variables.parentFrame.parentFrame.vars[varName]) this.addVariable(varName, true);&#xD;if (!global &amp;&amp; !proc.homeContext.variables.parentFrame.vars[varName]) this.addVariable(varName, false);</l></block><list><block var="each item"/><block var="global"/></list></block></script></block><block s="doRun"><block s="reportJSFunction"><list></list><l>var ide = this.parentThatIsA(IDE_Morph);&#xD;ide.flushBlocksCache(&apos;variables&apos;); // b/c of inheritance&#xD;ide.refreshPalette();</l></block><list></list></block></script></block></script></block-definition><block-definition s="does var %&apos;name&apos; exist?" type="predicate" category="variables"><comment x="0" y="0" w="146" collapsed="false">This block reports &quot;true&quot; if there is a variable with this given name (input slot) in that context.&#xD;&#xD;It can be a global, sprite or script variable.&#xD;&#xD;Otherwise it reports &quot;false&quot;.</comment><header></header><code></code><translations>pt:a variável _ existe&#xD;ca:existeix la variable _ ?&#xD;es:existe la variable _ ?&#xD;de:existiert var _ ?&#xD;</translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;return proc.homeContext.variables.silentFind(varName)? true:false;</l></block><list><block var="name"/></list></block></block></script></block-definition><block-definition s="✐ initialize variables" type="command" category="pen"><comment x="0" y="0" w="180" collapsed="false">Creates a bunch of global variables.&#xD;For internal use by Color library.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIf"><custom-block s="does var %s exist?"><l>✐ last set as</l></custom-block><script><block s="doStopThis"><l><option>this block</option></l></block></script></block><custom-block s="create %s var %mult%txt"><l>global</l><list><l>✐ last set as</l><l>✐ fair?</l><l>✐ color scale</l><l>✐ HSL</l><l>✐ last crayon</l><l>✐ last X11</l><l>✐ raw HSL</l><l>✐ raw HSV</l></list></custom-block><block s="doSetVar"><l>✐ last set as</l><l>RGB</l></block><block s="doSetVar"><l>✐ fair?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSetVar"><l>✐ raw HSV</l><block s="reportNewList"><list><l>0</l><l>100</l><l>100</l></list></block></block></script></block-definition><block-definition s="pick random %&apos;1&apos; to %&apos;2&apos; with seed %&apos;seed&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">1000</input><input type="%n">1234</input></inputs><script><block s="doReport"><block s="reportModulus"><block s="reportVariadicSum"><list><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>floor</option></l><block var="seed"/></block><block s="reportMonadic"><l><option>floor</option></l><block var="seed"/></block></list></block><l>12345678901234567890</l></list></block><block s="reportVariadicProduct"><list><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>floor</option></l><block var="seed"/></block><block s="reportMonadic"><l><option>floor</option></l><block var="seed"/></block></list></block><block s="reportMonadic"><l><option>floor</option></l><block var="seed"/></block></list></block></list></block><block var="1"/></list></block><l>1</l></list></block><block s="reportVariadicSum"><list><block s="reportDifference"><block s="reportVariadicSum"><list><block var="2"/><block var="1"/></list></block><block var="1"/></block><l>1</l></list></block></block></block></script></block-definition><block-definition s="Print %&apos;txt&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%txt">testinput</input></inputs><script><block s="gotoXY"><l>-234</l><l>169</l></block><block s="clear"></block><block s="doDeclareVariables"><list><l>#</l><l>Σ</l><l>LS</l></list></block><block s="doSetVar"><l>LS</l><l>No</l></block><block s="doSetVar"><l>#</l><l>0</l></block><block s="doSetVar"><l>Σ</l><l></l></block><block s="doRepeat"><block s="reportStringSize"><block var="txt"/></block><script><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doIfElse"><block s="reportEquals"><block s="reportLetter"><block var="#"/><block var="txt"/></block><l> </l></block><script><block s="doSetVar"><l>Σ</l><l> </l></block></script><script><block s="doSetVar"><l>Σ</l><block s="reportLetter"><block var="#"/><block var="txt"/></block></block></script></block><block s="doIf"><block s="reportOr"><block s="reportAnd"><block s="reportGreaterThan"><block s="xPosition"></block><l>200</l></block><block s="reportEquals"><block var="Σ"/><l> </l></block></block><block s="reportEquals"><block s="reportLetter"><block var="#"/><block var="txt"/></block><l>@</l></block></block><script><block s="changeYPosition"><l>-15</l></block><block s="setXPosition"><l>-234</l></block><block s="doSetVar"><l>LS</l><l>Yes</l></block></script></block><block s="doIfElse"><block s="reportAnd"><block s="reportEquals"><block var="LS"/><l>Yes</l></block><block s="reportOr"><block s="reportEquals"><block var="Σ"/><l> </l></block><block s="reportListContainsItem"><block s="reportTextSplit"><block var="Σ"/><l><option>letter</option></l></block><l>@</l></block></block></block><script></script><script><block s="write"><block s="reportLetter"><block var="#"/><block var="txt"/></block><l>15</l></block><block s="forward"><l>-0.25</l></block></script></block><block s="doSetVar"><l>LS</l><l>No</l></block></script></block></script></block-definition><block-definition s="run script %&apos;This&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s">testinput</input></inputs><script><block s="doDeclareVariables"><list><l>number</l></list></block><block s="doSetVar"><l>number</l><l>0</l></block><block s="doIfElse"><block s="reportOr"><block s="reportIsA"><block var="This"/><l><option>list</option></l></block><block s="reportOr"><block s="reportIsA"><block var="This"/><l><option>Boolean</option></l></block><block s="reportOr"><block s="reportIsA"><block var="This"/><l><option>sprite</option></l></block><block s="reportOr"><block s="reportIsA"><block var="This"/><l><option>costume</option></l></block><block s="reportOr"><block s="reportIsA"><block var="This"/><l><option>sound</option></l></block><block s="reportOr"><block s="reportIsA"><block var="This"/><l><option>command</option></l></block><block s="reportOr"><block s="reportIsA"><block var="This"/><l><option>predicate</option></l></block><block s="reportIsA"><block var="This"/><l><option>reporter</option></l></block></block></block></block></block></block></block></block><script><custom-block s="Print %txt"><l>invalid data</l></custom-block><block s="doWaitUntil"><block s="reportKeyPressed"><l><option>z</option></l></block></block><block s="doWaitUntil"><block s="reportNot"><block s="reportKeyPressed"><l><option>z</option></l></block></block></block><block s="clear"></block></script><script><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block s="reportTextSplit"><block var="This"/><l>#</l></block></block><script><block s="doChangeVar"><l>number</l><l>1</l></block><custom-block s="Print %txt"><block s="reportListItem"><block var="number"/><block s="reportTextSplit"><block var="This"/><l>#</l></block></block></custom-block><block s="doWaitUntil"><block s="reportKeyPressed"><l><option>z</option></l></block></block><block s="doWaitUntil"><block s="reportNot"><block s="reportKeyPressed"><l><option>z</option></l></block></block></block></script></block><block s="clear"></block></script></block></script></block-definition><block-definition s="run random %&apos;txt&apos; %&apos;boolean&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt">test#input</input><input type="%b">false</input></inputs><script><custom-block s="Print %txt"><block s="reportListItem"><block s="reportRandom"><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block s="reportTextSplit"><block var="txt"/><l>#</l></block></block></block><block s="reportTextSplit"><block var="txt"/><l>#</l></block></block></custom-block><block s="doIf"><block var="boolean"/><script><block s="doWaitUntil"><block s="reportKeyPressed"><l><option>z</option></l></block></block><block s="doWaitUntil"><block s="reportNot"><block s="reportKeyPressed"><l><option>z</option></l></block></block></block><block s="clear"></block></script></block></script></block-definition><block-definition s="number %&apos;numbr&apos; dot cut %&apos;dc&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">123.4567890</input><input type="%n">2</input></inputs><script><block s="doDeclareVariables"><list><l>a</l><l>b</l></list></block><block s="doSetVar"><l>a</l><l>1</l></block><block s="doSetVar"><l>b</l><l></l></block><block s="doIfElse"><block s="reportEquals"><block var="dc"/><l>0</l></block><script><block s="doReport"><block var="numbr"/></block></script><script><block s="doRepeat"><block var="dc"/><script><block s="doSetVar"><l>b</l><block s="reportJoinWords"><list><block var="b"/><block s="reportLetter"><block var="a"/><block s="reportListItem"><l>2</l><block s="reportTextSplit"><block var="numbr"/><l>.</l></block></block></block></list></block></block><block s="doChangeVar"><l>a</l><l>1</l></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="numbr"/><l>.</l></block></block><block s="reportJoinWords"><list><l>.</l><block var="b"/></list></block></list></block></block></script></block></script></block-definition><block-definition s="testing" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>count</l><l>0</l></block><block s="doReport"><block s="reifyScript"><script><block s="doChangeVar"><l>count</l><l>1</l></block><block s="doReport"><block var="count"/></block></script><list></list></block></block></script><scripts><script x="171" y="59"><block s="doDeclareVariables"><list><l>count</l></list></block></script></scripts></block-definition><block-definition s="Mix %&apos;texts&apos; Division %&apos;division&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mult%txt"></input><input type="%n">2</input></inputs><script><block s="doDeclareVariables"><list><l>a</l><l>b</l><l>c</l></list></block><block s="doSetVar"><l>a</l><l>1</l></block><block s="doSetVar"><l>b</l><l></l></block><block s="doSetVar"><l>c</l><l>1</l></block><block s="doWarp"><script><block s="doRepeat"><block s="reportVariadicSum"><list><block s="reportListAttribute"><l><option>length</option></l><block var="texts"/></block><l>0</l></list></block><script><block s="doRepeat"><block s="reportVariadicSum"><list><block s="reportQuotient"><block s="reportStringSize"><block s="reportListItem"><block var="c"/><block var="texts"/></block></block><block var="division"/></block><l>1</l></list></block><script><block s="doSetVar"><l>b</l><block s="reportJoinWords"><list><block var="b"/><block s="reportLetter"><block var="a"/><block s="reportListItem"><block var="c"/><block var="texts"/></block></block></list></block></block><block s="doChangeVar"><l>a</l><l>1</l></block></script></block><block s="doChangeVar"><l>c</l><l>1</l></block><block s="doSetVar"><l>a</l><block s="reportRound"><block s="reportQuotient"><block s="reportStringSize"><block s="reportListItem"><block var="c"/><block var="texts"/></block></block><block var="division"/></block></block></block></script></block><block s="doReport"><block var="b"/></block></script></block></script><scripts><script x="725.5205108125001" y="371.0000049999995"><block var="division"/></script><script x="117.47949618749999" y="123.00000499999999"><block s="reportMonadic"><l><option>ceiling</option></l><l>10</l></block></script><script x="217.5498076875" y="386.00000300000016"><block s="reportMonadic"><l><option>ceiling</option></l><l>10</l></block></script></scripts></block-definition><block-definition s="Mix %&apos;separator&apos; %&apos;division number&apos; %&apos;h&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt">,</input><input type="%n">2</input><input type="%txt">Hello,There</input></inputs><script><block s="doDeclareVariables"><list><l>a</l><l>b</l><l>c</l><l>d</l></list></block><block s="doSetVar"><l>a</l><block s="reportTextSplit"><block var="h"/><l>,</l></block></block><block s="doSetVar"><l>b</l><l>1</l></block><block s="doSetVar"><l>c</l><l></l></block><block s="doSetVar"><l>d</l><l>1</l></block><block s="doWarp"><script><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block var="a"/></block><script><block s="doRepeat"><block s="reportVariadicSum"><list><block s="reportQuotient"><block s="reportStringSize"><block s="reportListItem"><block var="d"/><block var="a"/></block></block><block var="division number"/></block><block s="reportDifference"><block var="division number"/><l>1</l></block></list></block><script><block s="doSetVar"><l>c</l><block s="reportJoinWords"><list><block var="c"/><block s="reportLetter"><block var="b"/><block s="reportListItem"><block var="d"/><block var="a"/></block></block></list></block></block><block s="doChangeVar"><l>b</l><l>1</l></block></script></block><block s="doChangeVar"><l>d</l><l>1</l></block><block s="doSetVar"><l>b</l><block s="reportRound"><block s="reportQuotient"><block s="reportStringSize"><block s="reportListItem"><block var="d"/><block var="a"/></block></block><block var="division number"/></block></block></block></script></block><block s="doReport"><block var="c"/></block></script></block></script><scripts><script x="217.4794941875" y="106.000002"><block s="reportListAttribute"><l><option>length</option></l><l/></block></script><script x="227.4228545625" y="132.000004"><block var="a"/></script></scripts></block-definition><block-definition s="copy %&apos;list&apos; from %&apos;start&apos; to %&apos;end&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%n">1</input><input type="%n">10</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>list</l><l>start</l><l>end</l></list><l>return new List(list.asArray().slice(+start - 1, +end))</l></block><list><block var="list"/><block var="start"/><block var="end"/></list></block></block></script></block-definition><block-definition s="text %&apos;text&apos; size %&apos;size&apos; text align %&apos;textA&apos; font %&apos;textFONT&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%txt">Hello!</input><input type="%n">12</input><input type="%txt">left</input><input type="%txt">px monospace</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>text</l><l>size</l><l>textA</l><l>textFONT</l></list><l>var stage = this.parentThatIsA(StageMorph),&#xD;    context = stage.penTrails().getContext(&apos;2d&apos;),&#xD;    rotation = radians(this.direction() - 90),&#xD;    trans = new Point(&#xD;      this.center().x - stage.left(),&#xD;      this.center().y - stage.top()&#xD;    ),&#xD;    isWarped = this.Warped,&#xD;    len,&#xD;    pos;&#xD;&#xD;if (isWarped) {endWarp(); }&#xD;context.save();&#xD;context.font = size + "px " + textFONT;&#xD;context.textAlign = textA;&#xD;context.textBaseline = &apos;alphabetic&apos;;&#xD;context.fillStyle = this.color.toString();&#xD;len = context.measureText(text).width;&#xD;trans = trans.multiplyBy(1 / stage.scale);&#xD;context.translate(trans.x, trans.y);&#xD;context.rotate(rotation);&#xD;context.fillText(text, 0, 0);&#xD;context.translate(-trans.x, -trans.y);&#xD;context.restore();&#xD;pos = new Point(&#xD;  len * Math.sin(radians(this.direction())),&#xD;  len * Math.cos(radians(this.direction())));&#xD;pos = pos.add(new Point(this.xPosition(), this.yPosition()));&#xD;this.gotoXY(pos.x, pos.y, false);&#xD;this.changed();&#xD;if (isWarped) {this.startWarp(); }&#xD;stage.changed();</l></block><list><block var="text"/><block var="size"/><block var="textA"/><block var="textFONT"/></list></block></script></block-definition><block-definition s="JS map %&apos;reporter&apos; over %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>reporter</l><l>list</l><l>process</l></list><l>// process.context.inputs:&#xD;// [0] - reporter&#xD;// [1] - list (original source)&#xD;// ---------------------------------&#xD;// [2..n] - result values (target)&#xD;&#xD;if (process.context.inputs.length - 2 === list.length()) {&#xD;  process.returnValueToParentContext(&#xD;    new List(process.context.inputs.slice(2))&#xD;  );&#xD;  return;&#xD;}&#xD;var next = list.at(process.context.inputs.length - 1);&#xD;process.pushContext();&#xD;process.evaluate(reporter, new List([next]));</l></block><list><block var="reporter"/><block var="list"/></list></block></block></script></block-definition><block-definition s="speak %&apos;text&apos; at volume %&apos;v&apos; rate %&apos;r&apos; pitch %&apos;p&apos; voice type %&apos;vt&apos;" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s">Hello, World!</input><input type="%n">1</input><input type="%n">1</input><input type="%n">0.8</input><input type="%n">1</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>msg</l><l>v</l><l>r</l><l>p</l><l>vt</l></list><l>function say(m) {&#xD;  var msg = new SpeechSynthesisUtterance();&#xD;  var voices = window.speechSynthesis.getVoices();&#xD;  msg.voice = voices[vt];&#xD;  msg.voiceURI = "native";&#xD;  msg.volume = v;&#xD;  msg.rate = r;&#xD;  msg.pitch = p;&#xD;  msg.text = m;&#xD;  msg.lang = &apos;en-US&apos;;&#xD;  speechSynthesis.speak(msg); &#xD;};&#xD;say(msg)</l></block><list><block var="text"/><block var="v"/><block var="r"/><block var="p"/><block var="vt"/></list></block></script></block-definition><block-definition s="MS test %&apos;repeat&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">5000</input></inputs><script><block s="doDeclareVariables"><list><l>test</l></list></block><block s="doResetTimer"></block><block s="doWarp"><script><block s="doRepeat"><block var="repeat"/><script><block s="doSetVar"><l>test</l><l>0</l></block></script></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportVariadicProduct"><list><block s="getTimer"></block><l>1000</l></list></block><l> MS</l></list></block></block></script></block-definition><block-definition s="text %&apos;text&apos; size %&apos;size&apos; text align %&apos;textA&apos; font %&apos;textFONT&apos; at x: %&apos;x&apos; y: %&apos;y&apos; clear? %&apos;boolean&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%txt">Hello!</input><input type="%n">12</input><input type="%txt">left</input><input type="%txt">px monospace</input><input type="%n">0</input><input type="%n">0</input><input type="%b">true</input></inputs><script><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="doIf"><block var="boolean"/><script><block s="clear"></block></script></block><block s="doRun"><block s="reportJSFunction"><list><l>text</l><l>size</l><l>textA</l><l>textFONT</l></list><l>var stage = this.parentThatIsA(StageMorph),&#xD;    context = stage.penTrails().getContext(&apos;2d&apos;),&#xD;    rotation = radians(this.direction() - 90),&#xD;    trans = new Point(&#xD;      this.center().x - stage.left(),&#xD;      this.center().y - stage.top()&#xD;    ),&#xD;    isWarped = this.Warped,&#xD;    len,&#xD;    pos;&#xD;&#xD;if (isWarped) {endWarp(); }&#xD;context.save();&#xD;context.font = size + "px " + textFONT;&#xD;context.textAlign = textA;&#xD;context.textBaseline = &apos;alphabetic&apos;;&#xD;context.fillStyle = this.color.toString();&#xD;len = context.measureText(text).width;&#xD;trans = trans.multiplyBy(1 / stage.scale);&#xD;context.translate(trans.x, trans.y);&#xD;context.rotate(rotation);&#xD;context.fillText(text, 0, 0);&#xD;context.translate(-trans.x, -trans.y);&#xD;context.restore();&#xD;pos = new Point(&#xD;  len * Math.sin(radians(this.direction())),&#xD;  len * Math.cos(radians(this.direction())));&#xD;pos = pos.add(new Point(this.xPosition(), this.yPosition()));&#xD;this.gotoXY(pos.x, pos.y, false);&#xD;this.changed();&#xD;if (isWarped) {this.startWarp(); }&#xD;stage.changed();</l></block><list><block var="text"/><block var="size"/><block var="textA"/><block var="textFONT"/></list></block><block s="gotoXY"><block var="x"/><block var="y"/></block></script></block-definition><block-definition s="go to center" type="command" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="gotoXY"><l>0</l><l>0</l></block></script></block-definition><block-definition s="play frequency %&apos;freq&apos; Hz for %&apos;b&apos; beats" type="command" category="sound"><comment x="0" y="0" w="199" collapsed="false">Plays a specific note and waits for it to finish</comment><header></header><code></code><translations></translations><inputs><input type="%n">440</input><input type="%n">0.5</input></inputs><script><custom-block s="play frequency %n Hz for %n beats without waiting"><block var="freq"/><block var="b"/></custom-block><block s="doRest"><block var="b"/></block></script></block-definition><block-definition s="play frequencies %&apos;freqs&apos; Hz for %&apos;b&apos; beats" type="command" category="sound"><comment x="0" y="0" w="180" collapsed="false">Plays a chord and waits for it to finish</comment><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input><input type="%n">0.5</input></inputs><script><custom-block s="play frequencies %mult%n Hz for %n beats without waiting"><block var="freqs"/><block var="b"/></custom-block><block s="doRest"><block var="b"/></block></script></block-definition><block-definition s="frequency %&apos;note&apos;" type="reporter" category="sound"><comment x="0" y="0" w="183" collapsed="false">Returns the frequency for a piano note</comment><header></header><code></code><translations></translations><inputs><input type="%n">60&#xD;        <options>§_pianoKeyboardMenu</options></input></inputs><script><block s="doReport"><block s="reportVariadicProduct"><list><l>440</l><block s="reportPower"><l>2</l><block s="reportQuotient"><block s="reportDifference"><block var="note"/><l>69</l></block><l>12</l></block></block></list></block></block></script></block-definition><block-definition s="play arpeggio %&apos;freqs&apos; Hz for %&apos;b&apos; beats" type="command" category="sound"><comment x="0" y="0" w="257" collapsed="false">Plays all of the notes in order and waits for them to finish</comment><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input><input type="%n">0.5</input></inputs><script><block s="doForEach"><l>item</l><block var="freqs"/><script><custom-block s="play frequency %n Hz for %n beats"><block var="item"/><block var="b"/></custom-block></script></block></script></block-definition><block-definition s="play frequency %&apos;freq&apos; Hz for %&apos;b&apos; beats without waiting" type="command" category="sound"><comment x="0" y="0" w="80" collapsed="false">Plays a note</comment><header></header><code></code><translations></translations><inputs><input type="%n">440</input><input type="%n">0.5</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>freq</l><l>b</l></list><l>const stage = this.parentThatIsA(StageMorph);let context = stage.audioContext();let gain = context.createGain();gain.connect(context.destination);gain.gain.value = stage.volume/800; const oscillator = context.createOscillator();oscillator.connect(gain);let inst;switch (this.instrument) {    default:        inst = "sine";        break;    case 2:        inst = "square";        break;    case 3:        inst = "sawtooth";        break;    case 4:        inst = "triangle";        break;}oscillator.type = inst;oscillator.frequency.value = freq;oscillator.start();oscillator.stop(context.currentTime + b * 60 / stage.tempo);</l></block><list><block var="freq"/><block var="b"/></list></block></script></block-definition><block-definition s="octave %&apos;note&apos; %&apos;oct&apos;" type="reporter" category="sound"><comment x="0" y="0" w="291" collapsed="false">Outputs the note after it has been shifted by the octave</comment><header></header><code></code><translations></translations><inputs><input type="%n">60&#xD;        <options>§_pianoKeyboardMenu</options></input><input type="%n">0</input></inputs><script><block s="doReport"><block s="reportVariadicSum"><list><block var="note"/><block s="reportVariadicProduct"><list><block var="oct"/><l>12</l></list></block></list></block></block></script></block-definition><block-definition s="do %&apos;blocks&apos; in order %&apos;order&apos;" type="command" category="control"><comment x="0" y="0" w="167" collapsed="false">Do each block in the order specified</comment><header></header><code></code><translations></translations><inputs><input type="%mult%cmdRing"></input><input type="%mult%n"></input></inputs><script><block s="doForEach"><l>index</l><block var="order"/><script><block s="doRun"><block s="reportListItem"><block var="index"/><block var="blocks"/></block><list></list></block></script></block></script></block-definition><block-definition s="play frequencies %&apos;freqs&apos; Hz for %&apos;b&apos; beats without waiting" type="command" category="sound"><comment x="0" y="0" w="90" collapsed="false">Plays a chord</comment><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input><input type="%n">0.5</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>freqs</l><l>b</l></list><l>const stage = this.parentThatIsA(StageMorph);let context = stage.audioContext();let gain = context.createGain();gain.connect(context.destination);gain.gain.value = stage.volume/800;let inst;switch (this.instrument) {    default:        inst = "sine";        break;    case 2:        inst = "square";        break;    case 3:        inst = "sawtooth";        break;    case 4:        inst = "triangle";        break;} for (freq of freqs.asArray()) {  let oscillator = context.createOscillator();  oscillator.connect(gain);  oscillator.type = inst;  oscillator.frequency.value = freq;  oscillator.start(context.currentTime);  oscillator.stop(context.currentTime + b * 60 / stage.tempo);}</l></block><list><block var="freqs"/><block var="b"/></list></block></script></block-definition><block-definition s="play arpeggio %&apos;freqs&apos; Hz for %&apos;b&apos; beats without waiting" type="command" category="sound"><comment x="0" y="0" w="137" collapsed="false">Plays all of the notes in order</comment><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input><input type="%n">0.5</input></inputs><script><block s="fork"><block s="reifyScript"><script><custom-block s="play arpeggio %mult%n Hz for %n beats"><block var="freqs"/><block var="b"/></custom-block></script><list></list></block><list></list></block></script></block-definition><block-definition s="text %&apos;text&apos; find for %&apos;find&apos; replace with %&apos;replace&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt">Hello World!</input><input type="%txt">Hello</input><input type="%txt">Hi</input></inputs><script><block s="doDeclareVariables"><list><l>a</l><l>b</l><l>c</l><l>d</l></list></block><block s="doSetVar"><l>a</l><block s="reportTextSplit"><block var="text"/><l> </l></block></block><block s="doSetVar"><l>b</l><l>1</l></block><block s="doSetVar"><l>c</l><l></l></block><block s="doRepeat"><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="a"/></block><l>1</l></block><script><block s="doIf"><block s="reportEquals"><block s="reportListItem"><block var="b"/><block var="a"/></block><block var="find"/></block><script><block s="doReplaceInList"><block var="b"/><block var="a"/><block var="replace"/></block></script></block><block s="doSetVar"><l>c</l><block s="reportJoinWords"><list><block var="c"/><block s="reportJoinWords"><list><block s="reportListItem"><block var="b"/><block var="a"/></block><l> </l></list></block></list></block></block><block s="doChangeVar"><l>b</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><block var="b"/><block var="a"/></block><block var="find"/></block><script><block s="doReplaceInList"><block var="b"/><block var="a"/><block var="replace"/></block></script></block><block s="doSetVar"><l>c</l><block s="reportJoinWords"><list><block var="c"/><block s="reportListItem"><block var="b"/><block var="a"/></block></list></block></block><block s="doChangeVar"><l>b</l><l>1</l></block><block s="doReport"><block var="c"/></block></script></block-definition><block-definition s="smooth glide to x: %&apos;x&apos; y: %&apos;y&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs></block-definition><block-definition s="anywhere url %&apos;url&apos;" type="reporter" category="other"><comment x="0" y="0" w="90" collapsed="false">Get html contents from anywhere on the internet.</comment><header></header><code></code><translations></translations><inputs><input type="%s">https://en.wikipedia.org/wiki/Main_page</input></inputs><script><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>https://cors-anywhere.herokuapp.com/</l><block var="url"/></list></block></block></block></script></block-definition><block-definition s="for each %&apos;var&apos; in %&apos;number&apos; %&apos;action&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_getVarNamesDict</options></input><input type="%n">1</input><input type="%cs"></input></inputs><script><block s="doSetVar"><l>var</l><l>0</l></block><block s="doRepeat"><block var="number"/><script><block s="doWait"><l>0.1</l></block><block s="doChangeVar"><l>var</l><l>1</l></block><block s="doRun"><block var="action"/><list></list></block></script></block></script><scripts><script x="160.4794931875" y="97.000001"><block var="var"/></script></scripts></block-definition><block-definition s="if %&apos;var&apos; reached %&apos;number&apos; then do %&apos;action&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_getVarNamesDict</options></input><input type="%n">1</input><input type="%cs"></input></inputs><script><block s="doIf"><block s="reportGreaterThan"><block var="var"/><block s="reportDifference"><block var="number"/><l>1</l></block></block><script><block s="doRun"><block var="action"/><list></list></block></script></block></script></block-definition><block-definition s="// %&apos;trext&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%s">Comment</input></inputs></block-definition><block-definition s="arrow large mouse" type="command" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l></l></list><l>document.getElementsByTagName("body")[0].style.cursor = "url(&apos;http://wiki-devel.sugarlabs.org/images/e/e2/Arrow.cur&apos;), auto";</l></block><list></list></block></script></block-definition><block-definition s="default mouse" type="command" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l></l></list><l>document.getElementsByTagName("body")[0].style.cursor = "url(&apos;https://wiki-devel.sugarlabs.org/images/4/4b/default.cur&apos;), auto";</l></block><list></list></block></script></block-definition><block-definition s="run function ( %&apos;params&apos; ) { %&apos;body&apos; } with %&apos;inputs&apos;" type="command" category="control"><header></header><code></code><translations>es:ejecutar función ( _ ) { _ } con _&#xD;</translations><inputs><input type="%mult%s"></input><input type="%code"></input><input type="%mult%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><block var="params"/><block var="body"/></block><block var="inputs"/></block></script></block-definition><block-definition s="call function ( %&apos;params&apos; ) { %&apos;body&apos; } with %&apos;inputs&apos;" type="reporter" category="control"><header></header><code></code><translations>es:llamar función ( _ ) { _ } con _&#xD;</translations><inputs><input type="%mult%s"></input><input type="%code">return 0;</input><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><block var="params"/><block var="body"/></block><block var="inputs"/></block></block></script></block-definition><block-definition s="switch to dev mode" type="command" category="other"><header></header><code></code><translations>es:cambiar a modo des&#xD;</translations><inputs></inputs><script><custom-block s="run function ( %mult%s ) { %code } with %mult%s"><list><l>ide</l></list><l>ide.switchToDevMode();</l><list><custom-block s="ide"></custom-block></list></custom-block></script></block-definition><block-definition s="switch to user mode" type="command" category="other"><header></header><code></code><translations>es:cambiar a modo usuario&#xD;</translations><inputs></inputs><script><custom-block s="run function ( %mult%s ) { %code } with %mult%s"><list><l>ide</l></list><l>ide.switchToUserMode();</l><list><custom-block s="ide"></custom-block></list></custom-block></script></block-definition><block-definition s="ide" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><custom-block s="call function ( %mult%s ) { %code } with %mult%s"><list><l></l></list><l>return this.parentThatIsA(IDE_Morph);</l><list><l></l></list></custom-block></block></script></block-definition><block-definition s="in dev mode?" type="predicate" category="other"><header></header><code></code><translations>es:¿en modo des?&#xD;</translations><inputs></inputs><script><block s="doReport"><custom-block s="call function ( %mult%s ) { %code } with %mult%s"><list><l>world</l></list><l>return world.isDevMode;</l><list><custom-block s="world"></custom-block></list></custom-block></block></script></block-definition><block-definition s="inspect %&apos;obj&apos;" type="command" category="other"><header></header><code></code><translations>es:inspeccionar _&#xD;</translations><inputs><input type="%obj"></input></inputs><script><block s="doIf"><block s="reportNot"><custom-block s="in dev mode?"></custom-block></block><script><custom-block s="switch to dev mode"></custom-block></script></block><custom-block s="run function ( %mult%s ) { %code } with %mult%s"><list></list><l>this.inspect(obj);</l><list></list></custom-block></script></block-definition><block-definition s="save project" type="command" category="other"><header></header><code></code><translations>es:guadar projeto&#xD;</translations><inputs></inputs><script><custom-block s="run function ( %mult%s ) { %code } with %mult%s"><list><l>ide</l></list><l>ide.save();</l><list><custom-block s="ide"></custom-block></list></custom-block></script></block-definition><block-definition s="world" type="reporter" category="sensing"><header></header><code></code><translations>es:mundo&#xD;</translations><inputs></inputs><script><block s="doReport"><custom-block s="call function ( %mult%s ) { %code } with %mult%s"><list><l>ide</l></list><l>return ide.world();</l><list><custom-block s="ide"></custom-block></list></custom-block></block></script></block-definition><block-definition s="this process" type="reporter" category="sensing"><header></header><code></code><translations>es:este proceso&#xD;</translations><inputs></inputs><script><block s="doReport"><custom-block s="call function ( %mult%s ) { %code } with %mult%s"><list><l>proc</l></list><l>proc.toString = function() {return "a SnapProcess";};&#xD;return proc;</l><list></list></custom-block></block></script></block-definition><block-definition s="this script is clicked?" type="predicate" category="control"><header></header><code></code><translations>es:¿esta secuencia tiene clic?&#xD;</translations><inputs></inputs><script><block s="doReport"><custom-block s="call function ( %mult%s ) { %code } with %mult%s"><list><l>proc</l></list><l>return proc.isClicked;</l><list><custom-block s="this process"></custom-block></list></custom-block></block></script></block-definition><block-definition s="warped?" type="predicate" category="control"><header></header><code></code><translations>es:¿atómica?&#xD;</translations><inputs></inputs><script><block s="doReport"><custom-block s="call function ( %mult%s ) { %code } with %mult%s"><list><l>proc</l></list><l>return proc.isAtomic;</l><list><custom-block s="this process"></custom-block></list></custom-block></block></script></block-definition><block-definition s="%&apos;thing&apos; assert type(s) %&apos;typeString&apos;" type="command" category="operators"><comment x="0" y="0" w="306" collapsed="false">make sure &quot;thing&quot; is a particular type or any of a number of types&#xD;and raise an error if not&#xD;use responsibly wrt performance implications</comment><header></header><code></code><translations>es:_ aseverar tipo(s) _&#xD;</translations><inputs><input type="%s"></input><input type="%mult%txt"></input></inputs><script><custom-block s="run function ( %mult%s ) { %code } with %mult%s"><list><l>proc</l><l>thing</l><l>typeString</l></list><l>proc.assertType(thing, typeString.asArray());</l><list><custom-block s="this process"></custom-block><block var="thing"/><block var="typeString"/></list></custom-block></script></block-definition><block-definition s="WiP: create/recolor category %&apos;name&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="other"><comment x="0" y="0" w="201" collapsed="false">Blocks in custom categories are saved in their categories, but the categories themselves are not; running create category with the same name gets the block back in the palette, but it seems that blocks in the editor are obsolete.</comment><header></header><code></code><translations>es:TeP: crear/recolorear categoría _ color _ _ _&#xD;</translations><inputs><input type="%txt"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><custom-block s="run function ( %mult%s ) { %code } with %mult%s"><list><l>SpMoPr</l><l>name</l><l>r</l><l>g</l><l>b</l><l>ide</l></list><l>if(name != "") {&#xD;const cats = SpMoPr.categories;&#xD;if(!cats.includes(name)) {cats.push(name);};&#xD;SpMoPr.blockColor[name] = new Color(r, g, b, 1);&#xD;ide.createCategories();&#xD;ide.reactToWorldResize(world.bounds.copy());&#xD;ide.flushBlocksCache();&#xD;ide.refreshPalette();&#xD;}</l><list><custom-block s="SpriteMorph.prototype"></custom-block><block var="name"/><block var="r"/><block var="g"/><block var="b"/><custom-block s="ide"></custom-block></list></custom-block></script></block-definition><block-definition s="%&apos;property&apos; of %&apos;object&apos;" type="reporter" category="operators"><header></header><code></code><translations>es:_ de _&#xD;</translations><inputs><input type="%s"></input><input type="%obj"></input></inputs><script><block s="doReport"><custom-block s="call function ( %mult%s ) { %code } with %mult%s"><list><l>property</l><l>object</l></list><l>return object[property];</l><list><block var="property"/><block var="object"/></list></custom-block></block></script></block-definition><block-definition s="SpriteMorph.prototype" type="reporter" category="sensing"><header></header><code></code><translations>es:SpriteMorph.prototipo&#xD;</translations><inputs></inputs><script><block s="doReport"><custom-block s="call function ( %mult%s ) { %code } with %mult%s"><list></list><l>return SpriteMorph.prototype;</l><list></list></custom-block></block></script></block-definition><block-definition s="hello" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs></block-definition><block-definition s="that obsolete block should be this" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs></block-definition><block-definition s="test" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs></block-definition><block-definition s="testest %&apos;theInvisibleZebra&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%cs"></input></inputs></block-definition><block-definition s="compose %&apos;f&apos; %&apos;g&apos;" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%repRing"></input></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="f"/><list><block s="evaluate"><block var="g"/><list><l></l></list></block></list></block></autolambda><list></list></block></block></script></block></script></block-definition><block-definition s="id %&apos;x&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doWarp"><script><block s="doReport"><block var="x"/></block></script></block></script></block-definition><block-definition s="all but first of %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l><l>i</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>i</l><l>2</l></block><block s="doUntil"><block s="reportGreaterThan"><block var="i"/><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block></block><script><block s="doAddToList"><block s="reportListItem"><block var="i"/><block var="list"/></block><block var="result"/></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="join words %&apos;words&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mult%s"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>smaller</l></list></block><block s="doIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="words"/></block><l>0</l></block><script><block s="doReport"><l></l></block></script><script><block s="doSetVar"><l>smaller</l><block s="evaluate"><block s="reifyReporter"><autolambda><custom-block s="join words %mult%s"><list></list></custom-block></autolambda><list></list></block><custom-block s="all but first of %l"><block var="words"/></custom-block></block></block><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="words"/></block><l></l></block><script><block s="doReport"><block var="smaller"/></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="smaller"/><l></l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="words"/></block></block></script><script><block s="doReport"><block s="reportJoinWords"><list><block s="reportListItem"><l>1</l><block var="words"/></block><block s="reportJoinWords"><list><l></l><block var="smaller"/></list></block></list></block></block></script></block></script></block></script></block></script></block></script></block-definition><block-definition s="list-&gt;sentence %&apos;list&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>0</l></block><script><block s="doReport"><l></l></block></script><script><block s="doReport"><custom-block s="combine with %repRing items of %l"><block s="reifyReporter"><autolambda><custom-block s="join words %mult%s"><list><l></l><l></l></list></custom-block></autolambda><list></list></block><block var="list"/></custom-block></block></script></block></script></block></script></block-definition><block-definition s="append %&apos;lists&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l><l>i</l><l>j</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>i</l><l>0</l></block><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block var="lists"/></block><script><block s="doChangeVar"><l>i</l><l>1</l></block><block s="doSetVar"><l>j</l><l>0</l></block><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><block var="i"/><block var="lists"/></block></block><script><block s="doChangeVar"><l>j</l><l>1</l></block><block s="doAddToList"><block s="reportListItem"><block var="j"/><block s="reportListItem"><block var="i"/><block var="lists"/></block></block><block var="result"/></block></script></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="%&apos;#&apos; map %&apos;function&apos; over %&apos;lists&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>#</l><l>0</l></block><block s="doIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="lists"/></block><l>1</l></block><script><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="lists"/></block></block><script><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doAddToList"><block s="evaluate"><block var="function"/><list><block s="reportListItem"><block var="#"/><block s="reportListItem"><l>1</l><block var="lists"/></block></block></list></block><block var="result"/></block></script></block></script><script><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="lists"/></block></block><script><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doAddToList"><block s="evaluate"><block var="function"/><custom-block s="%upvar map %repRing over %mult%l"><l>i</l><block s="reifyReporter"><autolambda><block s="reportListItem"><block var="#"/><l/></block></autolambda><list></list></block><list><block var="lists"/></list></custom-block></block><block var="result"/></block></script></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="%&apos;#&apos; keep items such that %&apos;pred&apos; from %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%predRing"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>#</l><l>0</l></block><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><script><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doIf"><block s="evaluate"><block var="pred"/><list><block s="reportListItem"><block var="#"/><block var="list"/></block></list></block><script><block s="doAddToList"><block s="reportListItem"><block var="#"/><block var="list"/></block><block var="result"/></block></script></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="adjoin %&apos;item&apos; to %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list><block var="item"/></list></block></block><custom-block s="%upvar for each item of %mult%l %cs"><l>#</l><list><block var="list"/></list><script><block s="doAddToList"><l></l><block var="result"/></block></script></custom-block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="%&apos;#&apos; for each item of %&apos;lists&apos; %&apos;action&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%mult%l"></input><input type="%cs"></input></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>#</l><l>0</l></block><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="lists"/></block></block><script><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doRun"><block var="action"/><custom-block s="%upvar map %repRing over %mult%l"><l>####</l><block s="reifyReporter"><autolambda><block s="reportListItem"><block var="#"/><l/></block></autolambda><list></list></block><list><block var="lists"/></list></custom-block></block></script></block></script></block></script></block-definition><block-definition s="reverse %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><custom-block s="%upvar for each item of %mult%l %cs"><l>#</l><list><block var="list"/></list><script><block s="doInsertInList"><l></l><l>1</l><block var="result"/></block></script></custom-block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="remove duplicates from %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><custom-block s="%upvar for each item of %mult%l %cs"><l>#</l><list><block var="list"/></list><script><block s="doIf"><block s="reportNot"><block s="reportListContainsItem"><block var="result"/><l></l></block></block><script><block s="doAddToList"><l></l><block var="result"/></block></script></block></script></custom-block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="%&apos;#&apos; cascade %&apos;num&apos; times %&apos;function&apos; of %&apos;start&apos;" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%n"></input><input type="%repRing"></input><input type="%s"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doSetVar"><l>result</l><block var="start"/></block><block s="doSetVar"><l>#</l><l>0</l></block><block s="doRepeat"><block var="num"/><script><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doSetVar"><l>result</l><block s="evaluate"><block var="function"/><list><block var="result"/></list></block></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="%&apos;#&apos; cascade until %&apos;test&apos; %&apos;function&apos; of %&apos;start&apos;" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%predRing"></input><input type="%repRing"></input><input type="%s"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doSetVar"><l>result</l><block var="start"/></block><block s="doSetVar"><l>#</l><l>0</l></block><block s="doUntil"><block s="evaluate"><block var="test"/><list><block var="result"/></list></block><script><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doSetVar"><l>result</l><block s="evaluate"><block var="function"/><list><block var="result"/></list></block></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="%&apos;#&apos; repeat %&apos;num&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%n"></input><input type="%cs"></input></inputs><script><block s="doSetVar"><l>#</l><l>0</l></block><block s="doRepeat"><block var="num"/><script><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doRun"><block var="action"/><list></list></block></script></block></script></block-definition><block-definition s="for %&apos;i&apos; = %&apos;start&apos; to %&apos;end&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%n">1</input><input type="%n">10</input><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>step</l></list></block><block s="doIfElse"><block s="reportGreaterThan"><block var="start"/><block var="end"/></block><script><block s="doSetVar"><l>step</l><l>-1</l></block></script><script><block s="doSetVar"><l>step</l><l>1</l></block></script></block><custom-block s="for %upvar = %n step %n to %n %cs"><l>iii</l><block var="start"/><block var="step"/><block var="end"/><script><block s="doSetVar"><l>i</l><block var="iii"/></block><block s="doRun"><block var="action"/><list></list></block></script></custom-block></script></block-definition><block-definition s="for %&apos;i&apos; = %&apos;start&apos; step %&apos;step&apos; to %&apos;end&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%n">1</input><input type="%n">1</input><input type="%n">10</input><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>test</l></list></block><block s="doSetVar"><l>i</l><block var="start"/></block><block s="doIfElse"><block s="reportLessThan"><block var="step"/><l>0</l></block><script><block s="doSetVar"><l>test</l><block s="reifyReporter"><autolambda><block s="reportLessThan"><block var="i"/><block var="end"/></block></autolambda><list></list></block></block></script><script><block s="doSetVar"><l>test</l><block s="reifyReporter"><autolambda><block s="reportGreaterThan"><block var="i"/><block var="end"/></block></autolambda><list></list></block></block></script></block><block s="doUntil"><block s="evaluate"><block var="test"/><list></list></block><script><block s="doRun"><block var="action"/><list></list></block><block s="doChangeVar"><l>i</l><block var="step"/></block></script></block></script></block-definition><block-definition s="sentence-&gt;list %&apos;sent&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l><l>i</l><l>word</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doIf"><block s="reportEquals"><block var="sent"/><l></l></block><script><block s="doReport"><block var="result"/></block></script></block><block s="doSetVar"><l>i</l><l>1</l></block><block s="doSetVar"><l>word</l><l></l></block><block s="doUntil"><block s="reportGreaterThan"><block var="i"/><block s="reportStringSize"><block var="sent"/></block></block><script><block s="doIfElse"><block s="reportEquals"><block s="reportLetter"><block var="i"/><block var="sent"/></block><l></l></block><script><block s="doAddToList"><block var="word"/><block var="result"/></block><block s="doSetVar"><l>word</l><l></l></block></script><script><block s="doSetVar"><l>word</l><block s="reportJoinWords"><list><block var="word"/><block s="reportLetter"><block var="i"/><block var="sent"/></block></list></block></block></script></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doAddToList"><block var="word"/><block var="result"/></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="crossproduct %&apos;lists&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input></inputs><script><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="lists"/></block><l>1</l></block><script><block s="doReport"><custom-block s="%upvar map %repRing over %mult%l"><l>#</l><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l></list></block></autolambda><list></list></block><list><block s="reportListItem"><l>1</l><block var="lists"/></block></list></custom-block></block></script><script><block s="doDeclareVariables"><list><l>small</l></list></block><block s="doSetVar"><l>small</l><block s="evaluate"><block s="reifyReporter"><autolambda><custom-block s="crossproduct %mult%l"><list></list></custom-block></autolambda><list></list></block><custom-block s="all but first of %l"><block var="lists"/></custom-block></block></block><block s="doReport"><custom-block s="combine with %repRing items of %l"><block s="reifyReporter"><autolambda><custom-block s="append %mult%l"><list><l/><l/></list></custom-block></autolambda><list></list></block><custom-block s="%upvar map %repRing over %mult%l"><l>#</l><block s="reifyReporter"><autolambda><custom-block s="%upvar map %repRing over %mult%l"><l>#</l><block s="reifyReporter"><autolambda><custom-block s="adjoin %s to %l"><block var="newitem"/><l/></custom-block></autolambda><list></list></block><list><block var="small"/></list></custom-block></autolambda><list><l>newitem</l></list></block><list><block s="reportListItem"><l>1</l><block var="lists"/></block></list></custom-block></custom-block></block></script></block></script></block></script></block-definition><block-definition s="make all combinations of items of %&apos;lists&apos; combining with %&apos;combiner&apos; building up from %&apos;sofar&apos; and do %&apos;action&apos; for each combination" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input><input type="%repRing"></input><input type="%s"></input><input type="%cs"></input></inputs><script><block s="doIfElse"><custom-block s="empty? %l"><block var="lists"/></custom-block><script><block s="doRun"><block var="action"/><list><block var="sofar"/></list></block></script><script><custom-block s="%upvar for each item of %mult%l %cs"><l>#</l><list><block s="reportListItem"><l>1</l><block var="lists"/></block></list><block s="reifyScript"><script><block s="doRun"><block s="reifyScript"><script><custom-block s="make all combinations of items of %mult%l combining with %repRing building up from %s and do %cs for each combination"><list></list><block var="combiner"/><block s="evaluate"><block var="combiner"/><list><block var="sofar"/><block var="new"/></list></block><block var="action"/></custom-block></script><list></list></block><custom-block s="all but first of %l"><block var="lists"/></custom-block></block></script><list><l>new</l></list></block></custom-block></script></block></script></block-definition><block-definition s="adjoin to %&apos;list&apos; this item %&apos;new&apos; on the right" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><custom-block s="%upvar for each item of %mult%l %cs"><l>#</l><list><block var="list"/></list><script><block s="doAddToList"><l></l><block var="result"/></block></script></custom-block><block s="doAddToList"><block var="new"/><block var="result"/></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="glide %&apos;dist&apos; steps in %&apos;time&apos; secs" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">1</input></inputs><script><block s="doGlide"><block var="time"/><block s="reportVariadicSum"><list><block s="xPosition"></block><block s="reportVariadicProduct"><list><block var="dist"/><block s="reportMonadic"><l><option>cos</option></l><block s="reportDifference"><l>90</l><block s="direction"></block></block></block></list></block></list></block><block s="reportVariadicSum"><list><block s="yPosition"></block><block s="reportVariadicProduct"><list><block var="dist"/><block s="reportMonadic"><l><option>sin</option></l><block s="reportDifference"><l>90</l><block s="direction"></block></block></block></list></block></list></block></block></script></block-definition><block-definition s="go to %&apos;pos&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="gotoXY"><block s="reportListItem"><l>1</l><block var="pos"/></block><block s="reportListItem"><l>2</l><block var="pos"/></block></block></script></block-definition><block-definition s="position" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reportNewList"><list><block s="xPosition"></block><block s="yPosition"></block></list></block></block></script></block></script></block-definition><block-definition s="all but first letter of %&apos;string&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l><l>i</l></list></block><block s="doSetVar"><l>result</l><l></l></block><block s="doSetVar"><l>i</l><l>2</l></block><block s="doUntil"><block s="reportGreaterThan"><block var="i"/><block s="reportStringSize"><block var="string"/></block></block><script><block s="doSetVar"><l>result</l><block s="reportJoinWords"><list><block var="result"/><block s="reportLetter"><block var="i"/><block var="string"/></block></list></block></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="aaaaaaaaaaaa" type="reporter" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reifyScript"><script><block s="doIfElse"><block s="evaluate"><block var="test"/><list><block var="value"/></list></block><script><block s="doRun"><block var="code"/><list><block var="value"/></list></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script><list><l>value</l></list></block></block></script></block></script></block-definition><block-definition s="switch ( %&apos;input&apos; ) %&apos;cmdArr&apos; else %&apos;default&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%mult%repRing"></input><input type="%cs"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doSetVar"><l>a</l><l>0</l></block><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block var="cmdArr"/></block><script><block s="doChangeVar"><l>a</l><l>1</l></block><block s="doIf"><block s="evaluate"><block s="reportListItem"><block var="a"/><block var="cmdArr"/></block><list><block var="input"/></list></block><script><block s="doStopThis"><l><option>this block</option></l></block></script></block></script></block><block s="doRun"><block var="default"/><list><block var="input"/></list></block></script></block></script></block-definition><block-definition s="all but last letter of %&apos;word&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l><l>i</l></list></block><block s="doSetVar"><l>result</l><l></l></block><block s="doSetVar"><l>i</l><l>1</l></block><block s="doUntil"><block s="reportEquals"><block var="i"/><block s="reportStringSize"><block var="word"/></block></block><script><block s="doSetVar"><l>result</l><block s="reportJoinWords"><list><block var="result"/><block s="reportLetter"><block var="i"/><block var="word"/></block></list></block></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="all but last word of %&apos;sentence&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><l></l></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportLetter"><block s="reportStringSize"><block var="sentence"/></block><block var="sentence"/></block><l></l></block><script><block s="doReport"><custom-block s="all but last letter of %txt"><block var="sentence"/></custom-block></block></script><script><block s="doReport"><custom-block s="all but last word of %txt"><custom-block s="all but last letter of %txt"><block var="sentence"/></custom-block></custom-block></block></script></block></script></block></script></block></script></block-definition><block-definition s="last word of %&apos;sentence&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><l></l></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportLetter"><block s="reportStringSize"><block var="sentence"/></block><block var="sentence"/></block><l></l></block><script><block s="doReport"><l></l></block></script><script><block s="doReport"><block s="reportJoinWords"><list><custom-block s="last word of %txt"><custom-block s="all but last letter of %txt"><block var="sentence"/></custom-block></custom-block><block s="reportLetter"><block s="reportStringSize"><block var="sentence"/></block><block var="sentence"/></block></list></block></block></script></block></script></block></script></block></script></block-definition><block-definition s="last letter of %&apos;word&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reportLetter"><block s="reportStringSize"><block var="word"/></block><block var="word"/></block></block></script></block></script></block-definition><block-definition s="first word and butfirst of %&apos;sentence&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doWarp"><script><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportNewList"><list><l></l><l></l></list></block></block></script></block><block s="doDeclareVariables"><list><l>first</l><l>bf</l><l>index</l><l>flag</l></list></block><block s="doSetVar"><l>first</l><l></l></block><block s="doSetVar"><l>bf</l><l></l></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doSetVar"><l>flag</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doUntil"><block s="reportGreaterThan"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><script><block s="doIfElse"><block var="flag"/><script><block s="doSetVar"><l>bf</l><block s="reportJoinWords"><list><block var="bf"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l></l></block><script><block s="doSetVar"><l>flag</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doSetVar"><l>first</l><block s="reportJoinWords"><list><block var="first"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block></script></block></script></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doReport"><block s="reportNewList"><list><block var="first"/><block var="bf"/></list></block></block></script></block></script></block-definition><block-definition s="accumulate with %&apos;function&apos; words of %&apos;sentence&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%txt"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>split</l></list></block><block s="doSetVar"><l>split</l><custom-block s="first word and butfirst of %txt"><block var="sentence"/></custom-block></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>2</l><block var="split"/></block><l></l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="split"/></block></block></script></block><block s="doReport"><block s="evaluate"><block var="function"/><list><block s="reportListItem"><l>1</l><block var="split"/></block><custom-block s="accumulate with %repRing words of %txt"><block var="function"/><block s="reportListItem"><l>2</l><block var="split"/></block></custom-block></list></block></block></script></block></script></block-definition><block-definition s="all but first word of %&apos;sentence&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reportListItem"><l>2</l><custom-block s="first word and butfirst of %txt"><block var="sentence"/></custom-block></block></block></script></block></script></block-definition><block-definition s="first word of %&apos;sentence&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reportListItem"><l>1</l><custom-block s="first word and butfirst of %txt"><block var="sentence"/></custom-block></block></block></script></block></script></block-definition><block-definition s="pigl %&apos;word&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="word"/><l></l></block><script><block s="doReport"><block s="reportQuotient"><l>1</l><l>0</l></block></block></script></block><block s="doReport"><custom-block s="if %b then %anyUE else %anyUE"><block s="reportListContainsItem"><block s="reportNewList"><list><l>a</l><l>e</l><l>i</l><l>o</l><l>u</l></list></block><block s="reportLetter"><l>1</l><block var="word"/></block></block><block s="reportJoinWords"><list><block var="word"/><l>ay</l></list></block><custom-block s="pigl %txt"><block s="reportJoinWords"><list><custom-block s="all but first letter of %txt"><block var="word"/></custom-block><block s="reportLetter"><l>1</l><block var="word"/></block></list></block></custom-block></custom-block></block></script></block-definition><block-definition s="%&apos;this&apos; is one of %&apos;those&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%mult%s"></input></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reportListContainsItem"><block var="those"/><block var="this"/></block></block></script></block></script></block-definition><block-definition s="crossmap %&apos;function&apos; %&apos;lists&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doWarp"><script><block s="doReport"><custom-block s="%upvar map %repRing over %mult%l"><l>#</l><block s="reifyReporter"><autolambda><block s="evaluate"><block var="function"/><block var="#1"/></block></autolambda><list><l>#1</l></list></block><list><block s="evaluate"><block s="reifyReporter"><autolambda><custom-block s="crossproduct %mult%l"><list></list></custom-block></autolambda><list></list></block><block var="lists"/></block></list></custom-block></block></script></block></script></block-definition><block-definition s="repeat %&apos;action&apos; until %&apos;test&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%cs"></input><input type="%boolUE"></input></inputs><script><block s="doRun"><block var="action"/><list></list></block><block s="doUntil"><block s="evaluate"><block var="test"/><list></list></block><script><block s="doRun"><block var="action"/><list></list></block></script></block></script></block-definition><block-definition s="repeat %&apos;action&apos; while %&apos;test&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%cs"></input><input type="%boolUE"></input></inputs><script><block s="doRun"><block var="action"/><list></list></block><custom-block s="repeat while %boolUE %cs"><block var="test"/><block var="action"/></custom-block></script></block-definition><block-definition s="repeat while %&apos;test&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%boolUE"></input><input type="%cs"></input></inputs><script><block s="doUntil"><block s="reportNot"><block s="evaluate"><block var="test"/><list></list></block></block><script><block s="doRun"><block var="action"/><list></list></block></script></block></script></block-definition><block-definition s="shown?" type="predicate" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reportNot"><block s="errorObsolete"></block></block></block></script></block></script></block-definition><block-definition s="layer" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doReport"><block s="errorObsolete"></block></block></script></block></script></block-definition><block-definition s="savestate %&apos;attribs&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mult%repRing"></input></inputs><script><block s="doWarp"><script><block s="doReport"><custom-block s="%upvar map %repRing over %mult%l"><l>#</l><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l><block s="evaluate"><block s="reifyReporter"><script></script><list></list></block><list></list></block></list></block></autolambda><list></list></block><list><block var="attribs"/></list></custom-block></block></script></block></script></block-definition><block-definition s="restorestate %&apos;state&apos;" type="command" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><custom-block s="%upvar for each item of %mult%l %cs"><l>#</l><list><block var="state"/></list><script><block s="doSetVar"><l></l><block s="reportListItem"><l>1</l><l/></block></block></script></custom-block></script></block-definition><block-definition s="set sprites %&apos;attrib&apos; to %&apos;value&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%s"></input></inputs><script><block s="doSetVar"><l></l><block var="attrib"/></block></script></block-definition><block-definition s="tell %&apos;object&apos; to %&apos;message&apos; %&apos;args&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%obj"></input><input type="%cmdRing"></input><input type="%mult%s"></input></inputs><script><block s="fork"><block s="reportAttributeOf"><block var="message"/><block var="object"/></block><block var="args"/></block></script></block-definition><block-definition s="ask %&apos;object&apos; for %&apos;message&apos; %&apos;args&apos;" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%obj"></input><input type="%repRing"></input><input type="%mult%s"></input></inputs><script><block s="doWarp"><script><block s="doReport"><block s="evaluate"><block s="reportAttributeOf"><block var="message"/><block var="object"/></block><block var="args"/></block></block></script></block></script></block-definition><block-definition s="clone of %&apos;sprite&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%obj"></input></inputs><script><block s="doWarp"><script><block s="doReport"><block s="evaluate"><block s="reportAttributeOf"><block s="reifyReporter"><autolambda><block s="errorObsolete"></block></autolambda><list></list></block><block var="sprite"/></block><list></list></block></block></script></block></script></block-definition><block-definition s="tell %&apos;object&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%obj"></input><input type="%cs"></input></inputs><script><block s="fork"><block s="reportAttributeOf"><block var="action"/><block var="object"/></block><list></list></block></script></block-definition><block-definition s="%&apos;property&apos; of %&apos;obj&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%obj"></input></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reportAttributeOf"><block var="property"/><block var="obj"/></block></block></script></block></script></block-definition><block-definition s="cursed test %&apos;a&apos; %&apos;b&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%cs"></input><input type="%cs"></input></inputs></block-definition><block-definition s="retreive thing from clipboard" type="reporter" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>accessors</l></list></block><block s="doSetVar"><l>accessors</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var done = false, thing = nullif("clipboard" in navigator) {  navigator.clipboard.readText(thing).then(x =&gt; {thing = x; done = true})} else {alert("I can&apos;t retrieve thing from clipboard."); done = true}return new List([function() {return done}, function() {return thing}])</l></block><list></list></block></block><block s="doWaitUntil"><block s="evaluate"><block s="reportListItem"><l>1</l><block var="accessors"/></block><list></list></block></block><block s="doReport"><block s="evaluate"><block s="reportListItem"><l>2</l><block var="accessors"/></block><list></list></block></block></script></block-definition><block-definition s="is %&apos;first&apos; identical to %&apos;second&apos; (remade)" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>first thing</l><l>second thing</l><l>true/false</l><l>couter</l></list></block><block s="doSetVar"><l>first thing</l><block s="reportTextSplit"><block var="first"/><l><option>letter</option></l></block></block><block s="doSetVar"><l>second thing</l><block s="reportTextSplit"><block var="second"/><l><option>letter</option></l></block></block><block s="doSetVar"><l>couter</l><l>0</l></block><block s="doSetVar"><l>true/false</l><block s="reportNewList"><list></list></block></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="couter"/><block s="reportListAttribute"><l><option>length</option></l><block s="reportIfElse"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="first thing"/></block><block s="reportListAttribute"><l><option>length</option></l><block var="second thing"/></block></block><block var="first thing"/><block var="second thing"/></block></block></block><block s="reportListContainsItem"><block var="true/false"/><block s="reportBoolean"><l><bool>false</bool></l></block></block></block><script><block s="doChangeVar"><l>couter</l><l>1</l></block><block s="doAddToList"><block s="reportIsIdentical"><block s="reportUnicode"><block s="reportListItem"><block var="couter"/><block var="first thing"/></block></block><block s="reportUnicode"><block s="reportListItem"><block var="couter"/><block var="second thing"/></block></block></block><block var="true/false"/></block></script></block><block s="doIfElse"><block s="reportListContainsItem"><block var="true/false"/><block s="reportBoolean"><l><bool>false</bool></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script><scripts><script x="555.734377" y="328.00000700000004"><block s="reportAnd"><l/><l/></block></script><script x="209.000001" y="143.83333833333342"><block s="reportListAttribute"><l><option>length</option></l><block var="true/false"/></block></script><script x="38.000001999999995" y="547.6666686666663"><block s="reportNewList"><list><block var="first"/><block var="second"/><block var="first thing"/><block var="second thing"/><block var="true/false"/><l></l></list></block></script><script x="49.995119187499995" y="510.8333353333331"><block s="reportNewList"><list><block var="first"/><block var="second"/><block var="first thing"/><block var="second thing"/><block var="true/false"/><l></l></list></block></script></scripts></block-definition><block-definition s="random stuff" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportUnicodeAsLetter"><block s="reportRandom"><l>0</l><l>1114112</l></block></block></block></script></block-definition><block-definition s="retreive image from clipboard" type="reporter" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>accessors</l></list></block><block s="doSetVar"><l>accessors</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var done = false&#xD;,thing = new Costume( newCanvas(new Point( 1, 1), true), "empty")&#xD;,item = null&#xD;&#xD;const error = (function Error( txt){ done = true;throw txt;})&#xD;&#xD;if( "clipboard" in navigator) {&#xD;  navigator.clipboard.read()&#xD;  .then( clipData =&gt; {&#xD;    item = clipData.find( v =&gt; v.types.includes("image/png") );&#xD;    if( !item)&#xD;         error( "No image data")&#xD;     item.getType("image/png")&#xD;     .then( blob =&gt; {&#xD;          var url = (window.URL || window.webkitURL).createObjectURL( blob);&#xD;          var img = new Image();&#xD;          img.onload = function () {&#xD;             canvas = newCanvas(new Point(img.width, img.height), true);&#xD;             canvas.getContext(&apos;2d&apos;).drawImage(img, 0, 0);&#xD;             thing = new Costume( canvas, "Clipboard")&#xD;             done = true;&#xD;          };&#xD;          img.src = url;&#xD;          return;&#xD;     })&#xD;     .catch(err =&gt; error("No PNG data: "+err));&#xD; })&#xD; .catch(err =&gt; error( "I can&apos;t retrieve thing from clipboard: "+err));&#xD;} &#xD;else {alert("I can&apos;t retrieve thing from clipboard."); done = true}&#xD;&#xD;return new List([ function(){return done}, function(){return thing}])</l></block><list></list></block></block><block s="doWaitUntil"><block s="evaluate"><block s="reportListItem"><l>1</l><block var="accessors"/></block><list></list></block></block><block s="doReport"><block s="evaluate"><block s="reportListItem"><l>2</l><block var="accessors"/></block><list></list></block></block></script></block-definition><block-definition s="scroll text %&apos;txt&apos; $nl setter %&apos;set&apos; $nl limit number of characters %&apos;lim&apos; $nl scroll speed %&apos;spd&apos; characters per second $nl delay %&apos;dly&apos; seconds $nl" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt">A really long text string to scroll in a variable, object property, or whatever thing can be assigned a text string.</input><input type="%cmdRing"></input><input type="%n">8</input><input type="%n">5</input><input type="%n">3</input></inputs><script><block s="fork"><block s="reifyScript"><script><block s="doDeclareVariables"><list><l>characters</l></list></block><block s="doSetVar"><l>characters</l><block s="reportTextSplit"><block var="txt"/><l><option>letter</option></l></block></block><block s="doForever"><script><block s="doRun"><block var="set"/><list><block s="reportJoinWords"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l></l><block var="characters"/></block></autolambda><list></list></block><block s="reportNumbers"><l>1</l><block var="lim"/></block></block></block></list></block><block s="doWait"><block var="dly"/></block><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block var="characters"/></block><script><block s="doWarp"><script><block s="doAddToList"><block s="reportListItem"><l>1</l><block var="characters"/></block><block var="characters"/></block><block s="doDeleteFromList"><l>1</l><block var="characters"/></block></script></block><block s="doRun"><block var="set"/><list><block s="reportJoinWords"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l></l><block var="characters"/></block></autolambda><list></list></block><block s="reportNumbers"><l>1</l><block var="lim"/></block></block></block></list></block><block s="doWait"><block s="reportQuotient"><l>1</l><block var="spd"/></block></block></script></block></script></block></script><list></list></block><list></list></block></script></block-definition><block-definition s="move with speed %&apos;distance&apos; with ease “out”" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">10</input></inputs><script><block s="doDeclareVariables"><list><l>a</l><l>b</l></list></block><block s="doSetVar"><l>a</l><block var="distance"/></block><block s="doSetVar"><l>b</l><block s="reportNewList"><list></list></block></block><block s="doWarp"><script><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="a"/><l>0</l></block><block s="reportLessThan"><block var="a"/><l>0</l></block></block><script><block s="doChangeVar"><l>a</l><l>-1</l></block><block s="doAddToList"><block var="a"/><block var="b"/></block></script></block></script></block><block s="doForEach"><l>number of steps</l><block var="b"/><script><block s="forward"><block var="number of steps"/></block><block s="bounceOffEdge"></block></script></block></script></block-definition><block-definition s="move with speed %&apos;speed&apos; with ease “in”" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">10</input></inputs><script><block s="doDeclareVariables"><list><l>a</l><l>b</l></list></block><block s="doSetVar"><l>a</l><l>0</l></block><block s="doSetVar"><l>b</l><block s="reportNewList"><list></list></block></block><block s="doWarp"><script><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="a"/><block var="speed"/></block><block s="reportGreaterThan"><block var="a"/><block var="speed"/></block></block><script><block s="doChangeVar"><l>a</l><l>1</l></block><block s="doAddToList"><block var="a"/><block var="b"/></block></script></block></script></block><block s="doForEach"><l>number of steps</l><block var="b"/><script><block s="forward"><block var="number of steps"/></block><block s="bounceOffEdge"></block></script></block></script></block-definition><block-definition s="move with speed %&apos;speed&apos; with ease “in-out”" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">10</input></inputs><script><custom-block s="move with speed %n with ease “in”"><block s="reportQuotient"><block var="speed"/><l>1.5</l></block></custom-block><custom-block s="move with speed %n with ease “out”"><block s="reportQuotient"><block var="speed"/><l>1.5</l></block></custom-block></script></block-definition><block-definition s="move with speed %&apos;speed&apos; with ease “out-in”" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">10</input></inputs><script><custom-block s="move with speed %n with ease “out”"><block s="reportQuotient"><block var="speed"/><l>1.5</l></block></custom-block><custom-block s="move with speed %n with ease “in”"><block s="reportQuotient"><block var="speed"/><l>1.5</l></block></custom-block></script></block-definition><block-definition s="setup %&apos;parameterSet&apos;" type="command" category="other"><comment x="0" y="0" w="333" collapsed="false">parameters are in order&#xD;gridWidth (number of squares in the width of the grid)&#xD;gridHeight (numer of squares in the height of the grid)&#xD;patchSize( is the measure in inches of a patch - or gird cell)&#xD;patchScale( used for display - not relevant to calculating material)&#xD;&#xD;screenWidth and screenHeight are self explanatory.&#xD;Change the screen size under the gear heading (preferences)&#xD;&#xD;sqSize is the size of a grid square&#xD;columnStart and rowStart offset the grid from the upper left corner</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doSetVar"><l>screenWidth</l><block s="reportAskFor"><l>Stage</l><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>width</option></l></block></autolambda><list></list></block><list></list></block></block><block s="doSetVar"><l>screenHeight</l><block s="reportAskFor"><l>Stage</l><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>height</option></l></block></autolambda><list></list></block><list></list></block></block><block s="doSetVar"><l>gridWidth</l><block s="reportListItem"><l>1</l><block var="parameterSet"/></block></block><block s="doSetVar"><l>gridHeight</l><block s="reportListItem"><l>2</l><block var="parameterSet"/></block></block><block s="doSetVar"><l>patchSize</l><block s="reportListItem"><l>3</l><block var="parameterSet"/></block></block><block s="doSetVar"><l>patchScale</l><block s="reportListItem"><l>4</l><block var="parameterSet"/></block></block><block s="doSetVar"><l>sqSize</l><block s="reportVariadicProduct"><list><block var="patchSize"/><block var="patchScale"/></list></block></block><block s="doSetVar"><l>columnstart</l><l>10</l></block><block s="doSetVar"><l>rowstart</l><l>10</l></block><block s="clear"></block><block s="up"></block><block s="gotoXY"><l>0</l><l>0</l></block><block s="setHeading"><l>90</l></block><block s="down"></block><block s="setColor"><color>26,5,0,1</color></block><block s="hide"></block></script></block-definition><block-definition s="placePatchFill %&apos;xPos&apos; %&apos;yPos&apos; %&apos;size&apos; %&apos;color&apos;" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">Place a patch using cartesian coordinates of size, with set pen color.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%cmdRing"></input></inputs><script><block s="setColor"><color>31,51,0,1</color></block><custom-block s="placePatch %s %s"><block var="xPos"/><block var="yPos"/></custom-block><block s="up"></block><block s="turn"><l>45</l></block><block s="forward"><block s="reportQuotient"><block var="size"/><l>2</l></block></block><block s="doRun"><block var="color"/><list></list></block><block s="floodFill"></block><block s="gotoXY"><block var="xPos"/><block var="yPos"/></block><block s="setHeading"><l>90</l></block><block s="down"></block><block s="setColor"><color>31,51,0,1</color></block></script></block-definition><block-definition s="placePatch %&apos;xPos&apos; %&apos;yPos&apos;" type="command" category="other"><comment x="0" y="0" w="375" collapsed="false">place patch using graphics coorinates. No fill</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="up"></block><custom-block s="grGotoXY %s %s"><block s="reportVariadicSum"><list><block var="columnstart"/><block s="reportVariadicProduct"><list><block var="xPos"/><block var="sqSize"/></list></block></list></block><block s="reportVariadicSum"><list><block var="rowstart"/><block s="reportVariadicProduct"><list><block var="yPos"/><block var="sqSize"/></list></block></list></block></custom-block><block s="setHeading"><l>90</l></block><block s="down"></block><block s="doRepeat"><l>4</l><script><block s="forward"><block var="sqSize"/></block><block s="turn"><l>90</l></block></script></block></script></block-definition><block-definition s="graphicXpos %&apos;gXcor&apos;" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">Set column (x) position to graphics coordinate x.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="setXPosition"><block s="reportVariadicSum"><list><block var="gXcor"/><block s="reportDifference"><l>0</l><block s="reportQuotient"><block s="reportAskFor"><l>Stage</l><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>width</option></l></block></autolambda><list></list></block><list></list></block><l>2</l></block></block></list></block></block></script></block-definition><block-definition s="graphicYpos %&apos;gYcor&apos;" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">Set y position to graphics coordinate y.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="setYPosition"><block s="reportVariadicProduct"><list><l>-1</l><block s="reportVariadicSum"><list><block var="gYcor"/><block s="reportDifference"><l>0</l><block s="reportQuotient"><block s="reportAskFor"><l>Stage</l><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>height</option></l></block></autolambda><list></list></block><list></list></block><l>2</l></block></block></list></block></list></block></block></script></block-definition><block-definition s="grGotoXY %&apos;gx&apos; %&apos;gy&apos;" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">Place sprite at graphics coordinate gx and gy.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="gotoXY"><block s="reportVariadicSum"><list><block var="gx"/><block s="reportDifference"><l>0</l><block s="reportQuotient"><block var="screenWidth"/><l>2</l></block></block></list></block><block s="reportDifference"><block s="reportQuotient"><block var="screenHeight"/><l>2</l></block><block var="gy"/></block></block></script><scripts><script x="102.000001" y="137.00000100000005"><block s="reportVariadicProduct"><list><l>-1</l><block s="reportVariadicSum"><list><l></l><l></l></list></block></list></block></script></scripts></block-definition><block-definition s="grX" type="reporter" category="other"><comment x="0" y="0" w="90" collapsed="false">return the graphics x coordinate.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportVariadicSum"><list><block s="xPosition"></block><block s="reportQuotient"><block var="screenWidth"/><l>2</l></block></list></block></block></script></block-definition><block-definition s="grY" type="reporter" category="other"><comment x="0" y="0" w="90" collapsed="false">return the graphics y coorindate.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportDifference"><block s="reportQuotient"><block var="screenHeight"/><l>2</l></block><block s="yPosition"></block></block></block></script></block-definition><block-definition s="gird %&apos;numbers&apos;" type="command" category="other"><comment x="0" y="0" w="371" collapsed="false">Create a grid based on the startup values. Show text if true.</comment><header></header><code></code><translations></translations><inputs><input type="%b"></input></inputs><script><block s="up"></block><custom-block s="grGotoXY %s %s"><block var="columnstart"/><block var="rowstart"/></custom-block><block s="doFor"><l>row</l><l>0</l><block s="reportDifference"><block var="gridHeight"/><l>1</l></block><script><block s="doFor"><l>column</l><l>0</l><block s="reportDifference"><block var="gridWidth"/><l>1</l></block><script><custom-block s="placePatch %s %s"><block var="column"/><block var="row"/></custom-block><block s="doIf"><block var="numbers"/><script><block s="write"><block s="reportJoinWords"><list><block var="column"/><l>,</l><block var="row"/></list></block><l>10</l></block><block s="up"></block><block s="turn"><l>80</l></block><block s="forward"><block s="reportQuotient"><block var="sqSize"/><l>2</l></block></block><block s="turnLeft"><l>80</l></block></script></block></script></block></script></block></script><scripts><script x="31.000001999999995" y="333.00000199999994"><block s="write"><custom-block s="crPosition %s %s"><block var="column"/><block var="row"/></custom-block><l>14</l></block></script></scripts></block-definition><block-definition s="crPosition %&apos;column&apos; %&apos;row&apos;" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">calculate the ordinal position from the graphcs row and column.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportVariadicSum"><list><block var="column"/><block s="reportVariadicProduct"><list><block var="row"/><block var="gridWidth"/></list></block></list></block></block></script></block-definition><block-definition s="crVector %&apos;number&apos;" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">Calculate the graphics x and (column, row) from the ordinal position.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reportModulus"><block var="number"/><block var="gridWidth"/></block><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block var="number"/><block var="gridWidth"/></block></block></list></block></block></script></block-definition><block-definition s="colorPatchNumber %&apos;number&apos; %&apos;colorCommand&apos;" type="command" category="other"><comment x="0" y="0" w="304" collapsed="false">Place a patch at the ordinal position of the graphics coordinate</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%cmdRing"></input></inputs><script><custom-block s="placePatchFill %s %s %s %cmdRing"><block s="reportListItem"><l>1</l><custom-block s="crVector %s"><block var="number"/></custom-block></block><block s="reportListItem"><l>2</l><custom-block s="crVector %s"><block var="number"/></custom-block></block><l>50</l><block var="colorCommand"/></custom-block></script></block-definition><block-definition s="NinePatchOneColor %&apos;colStart&apos; %&apos;row start&apos; %&apos;color&apos;" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">Define a ninepatch with a single color.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%cmdRing"></input></inputs><script><block s="doFor"><l>row</l><block var="row start"/><block s="reportVariadicSum"><list><block var="row start"/><l>2</l></list></block><script><block s="doFor"><l>col</l><block var="colStart"/><block s="reportVariadicSum"><list><block var="colStart"/><l>2</l></list></block><script><custom-block s="placePatchFill %s %s %s %cmdRing"><block var="col"/><block var="row"/><block var="sqSize"/><block var="color"/></custom-block></script></block></script></block></script></block-definition><block-definition s="AlternateSolidBlocks %&apos;startColumn&apos; %&apos;startRow&apos; %&apos;spacing&apos;" type="command" category="other"><comment x="0" y="0" w="243" collapsed="false">Place solid blocks spacing blocks apart starting at startColumn and startRow..</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>c</l><l>r</l></list></block><block s="doSetVar"><l>r</l><block var="startRow"/></block><block s="doUntil"><block s="reportGreaterThan"><block var="r"/><block s="reportDifference"><block var="gridHeight"/><l>1</l></block></block><script><block s="doSetVar"><l>c</l><block var="startColumn"/></block><block s="doUntil"><block s="reportGreaterThan"><block var="c"/><block s="reportDifference"><block var="gridWidth"/><l>1</l></block></block><script><custom-block s="NinePatchOneColor %s %s %cmdRing"><block var="c"/><block var="r"/><block s="reifyScript"><script><block s="setColor"><color>29,107,0,1</color></block></script><list></list></block></custom-block><block s="doChangeVar"><l>c</l><l>6</l></block></script></block><block s="doChangeVar"><l>r</l><l>6</l></block></script></block></script></block-definition><block-definition s="NinePatchAlternate %&apos;colStart&apos; %&apos;row start&apos; %&apos;color&apos; %&apos;colorB&apos;" type="command" category="other"><comment x="0" y="0" w="357" collapsed="false">Create a classic 9 square patch at the position specified using the specified colors..</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%cmdRing"></input><input type="%cmdRing"></input></inputs><script><block s="doDeclareVariables"><list><l>toggle</l></list></block><block s="doSetVar"><l>toggle</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doFor"><l>row</l><block var="row start"/><block s="reportVariadicSum"><list><block var="row start"/><l>2</l></list></block><script><block s="doFor"><l>col</l><block var="colStart"/><block s="reportVariadicSum"><list><block var="colStart"/><l>2</l></list></block><script><custom-block s="placePatchFill %s %s %s %cmdRing"><block var="col"/><block var="row"/><block var="sqSize"/><block s="reportIfElse"><block var="toggle"/><block var="color"/><block var="colorB"/></block></custom-block><block s="doSetVar"><l>toggle</l><block s="reportNot"><block var="toggle"/></block></block></script></block></script></block></script></block-definition><block-definition s="BruteForceAlternate" type="command" category="other"><comment x="0" y="0" w="513" collapsed="false">A brute force renidtion of 9 square that illustrates how it alternates.  Alternate9Blocks is the abstract.</comment><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="placePatchFill %s %s %s %cmdRing"><l>3</l><l>0</l><block var="sqSize"/><block s="reifyScript"><script><block s="setColor"><color>230,255,56,1</color></block></script><list></list></block></custom-block><custom-block s="placePatchFill %s %s %s %cmdRing"><l>4</l><l>0</l><block var="sqSize"/><block s="reifyScript"><script><block s="setColor"><color>42,153,0,1</color></block></script><list></list></block></custom-block><custom-block s="placePatchFill %s %s %s %cmdRing"><l>5</l><l>0</l><block var="sqSize"/><block s="reifyScript"><script><block s="setColor"><color>230,255,56,1</color></block></script><list></list></block></custom-block><custom-block s="placePatchFill %s %s %s %cmdRing"><l>3</l><l>1</l><block var="sqSize"/><block s="reifyScript"><script><block s="setColor"><color>42,153,0,1</color></block></script><list></list></block></custom-block><custom-block s="placePatchFill %s %s %s %cmdRing"><l>4</l><l>1</l><block var="sqSize"/><block s="reifyScript"><script><block s="setColor"><color>230,255,56,1</color></block></script><list></list></block></custom-block><custom-block s="placePatchFill %s %s %s %cmdRing"><l>5</l><l>1</l><block var="sqSize"/><block s="reifyScript"><script><block s="setColor"><color>42,153,0,1</color></block></script><list></list></block></custom-block><custom-block s="placePatchFill %s %s %s %cmdRing"><l>3</l><l>2</l><block var="sqSize"/><block s="reifyScript"><script><block s="setColor"><color>230,255,56,1</color></block></script><list></list></block></custom-block><custom-block s="placePatchFill %s %s %s %cmdRing"><l>4</l><l>2</l><block var="sqSize"/><block s="reifyScript"><script><block s="setColor"><color>42,153,0,1</color></block></script><list></list></block></custom-block><custom-block s="placePatchFill %s %s %s %cmdRing"><l>5</l><l>2</l><block var="sqSize"/><block s="reifyScript"><script><block s="setColor"><color>230,255,56,1</color></block></script><list></list></block></custom-block></script></block-definition><block-definition s="Alternate9Blocks %&apos;startCol&apos; %&apos;startRow&apos; %&apos;spacing&apos;" type="command" category="other"><comment x="0" y="0" w="442" collapsed="false">Place 9 square blocks spacing blocks apart starting at startColumn and startRow..</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>c</l><l>r</l></list></block><block s="doSetVar"><l>r</l><block var="startRow"/></block><block s="doUntil"><block s="reportGreaterThan"><block var="r"/><block s="reportDifference"><block var="gridHeight"/><l>1</l></block></block><script><block s="doSetVar"><l>c</l><block var="startCol"/></block><block s="doUntil"><block s="reportGreaterThan"><block var="c"/><block s="reportDifference"><block var="gridWidth"/><l>1</l></block></block><script><custom-block s="NinePatchAlternate %s %s %cmdRing %cmdRing"><block var="c"/><block var="r"/><block s="reifyScript"><script><block s="setColor"><color>36,255,247,1</color></block></script><list></list></block><block s="reifyScript"><script><block s="setColor"><color>0,85,179,1</color></block></script><list></list></block></custom-block><block s="doChangeVar"><l>c</l><l>6</l></block></script></block><block s="doChangeVar"><l>r</l><l>6</l></block></script></block></script></block-definition><block-definition s="# %&apos;comment&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%code">your comment here</input></inputs></block-definition><block-definition s="Root" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>members</l><l>primitives</l><l>self</l></list></block><block s="doSetVar"><l>members</l><block s="reportNewList"><list></list></block></block><custom-block s="# %code"><l>primitives:&#xD;_add    : add member&#xD;_search : search member&#xD;_remove : remove member&#xD;_list   : list members&#xD;_nil    : nil object</l></custom-block><block s="doDeclareVariables"><list><l>_add</l><l>_remove</l><l>_search</l><l>_list</l><l>_nil</l></list></block><block s="doSetVar"><l>_remove</l><block s="reifyScript"><script><block s="doSetVar"><l>members</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><block var="member"/></block></block></autolambda><list></list></block><block var="members"/></block></block></script><list><l>member</l></list></block></block><block s="doSetVar"><l>_add</l><block s="reifyScript"><script><block s="doRun"><block var="_remove"/><list><block var="member"/></list></block><block s="doAddToList"><block s="reportNewList"><list><block var="member"/><block var="value"/></list></block><block var="members"/></block></script><list><l>member</l><l>value</l></list></block></block><block s="doSetVar"><l>_search</l><block s="reifyScript"><script><block s="doDeclareVariables"><list><l>filter</l></list></block><block s="doSetVar"><l>filter</l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><block var="member"/></block></autolambda><list></list></block><block var="members"/></block></block><block s="doIfElse"><block s="reportNot"><block var="filter"/></block><script><block s="doReport"><block s="reportNewList"><list><l>_nil</l><l>nil</l></list></block></block></script><script><block s="doReport"><block var="filter"/></block></script></block></script><list><l>member</l></list></block></block><block s="doSetVar"><l>_list</l><block var="members"/></block><block s="doSetVar"><l>_nil</l><l>nil</l></block><block s="doSetVar"><l>primitives</l><block s="reportNewList"><list><block s="reportNewList"><list><l>_add</l><block var="_add"/></list></block><block s="reportNewList"><list><l>_search</l><block var="_search"/></list></block><block s="reportNewList"><list><l>_remove</l><block var="_remove"/></list></block><block s="reportNewList"><list><l>_list</l><block var="_list"/></list></block><block s="reportNewList"><list><l>_nil</l><block var="_nil"/></list></block></list></block></block><custom-block s="# %code"><l>publish all primitives</l></custom-block><custom-block s="# %code"><l>my self</l></custom-block><block s="doSetVar"><l>self</l><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><block var="message"/></block></autolambda><list></list></block><block var="primitives"/></block></block></autolambda><list><l>message</l></list></block></block><block s="doReport"><block var="self"/></block></script></block-definition><block-definition s="Class %&apos;name&apos; extends %&apos;parents&apos; implements %&apos;interfaces&apos; %&apos;definition&apos; %&apos;root&apos; %&apos;this&apos; %&apos;super&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%mult%s"></input><input type="%mult%s"></input><input type="%cs"></input><input type="%upvar"></input><input type="%upvar"></input><input type="%upvar"></input></inputs><script><block s="doSetVar"><l>root</l><block s="reportIfElse"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="parents"/></block><l>0</l></block><block s="evaluate"><block s="reportListItem"><l>1</l><block var="parents"/></block><list><l>root</l></list></block><custom-block s="Root"></custom-block></block></block><custom-block s="# %code"><l>parents list&#xD;(hidden)</l></custom-block><block s="doForEach"><l>parent</l><block var="parents"/><script><block s="doForEach"><l>item</l><block s="evaluate"><block s="evaluate"><block var="parent"/><list><l>root</l></list></block><list><l>_list</l></list></block><script><block s="doRun"><block s="evaluate"><block var="root"/><list><l>_add</l></list></block><list><block s="reportListItem"><l>1</l><block var="item"/></block><block s="reportListItem"><l>2</l><block var="item"/></block></list></block></script></block></script></block><block s="doSetVar"><l>this</l><block s="reifyScript"><script><block s="doReport"><block s="reportListItem"><l>2</l><block s="evaluate"><block s="evaluate"><block var="root"/><list><l>_search</l></list></block><list><block var="message"/></list></block></block></block></script><list><l>message</l></list></block></block><block s="doSetVar"><l>super</l><block var="parents"/></block><custom-block s="# %code"><l>define this</l></custom-block><block s="doRun"><block s="evaluate"><block var="root"/><list><l>_add</l></list></block><list><l>this</l><block var="this"/></list></block><custom-block s="# %code"><l>define super (get parents)</l></custom-block><block s="doRun"><block s="evaluate"><block var="root"/><list><l>_add</l></list></block><list><l>super</l><block var="super"/></list></block><custom-block s="# %code"><l>define root</l></custom-block><block s="doRun"><block s="evaluate"><block var="root"/><list><l>_add</l></list></block><list><l>root</l><block var="root"/></list></block><custom-block s="# %code"><l>implement class definition</l></custom-block><block s="doRun"><block var="definition"/><list></list></block><custom-block s="# %code"><l>define class&#xD;!!! IMPORTANT !!!&#xD;the following block should come after class &#xD;implementation</l></custom-block><block s="doRun"><block s="evaluate"><block var="root"/><list><l>_add</l></list></block><list><l>class</l><block var="name"/></list></block><block s="doDeclareVariables"><list><l>missing</l></list></block><block s="doSetVar"><l>missing</l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportNot"><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="evaluate"><block var="this"/><list><block var="#i"/></list></block><l>nil</l></block></autolambda><list><l>#i</l></list></block><block var="#1"/></block></block></block></autolambda><list><l>#1</l></list></block><block var="interfaces"/></block></block><block s="doIfElse"><block s="reportNot"><block var="missing"/></block><script><block s="doReport"><block var="this"/></block></script><script><block s="doReport"><block s="reportNewList"><list><l>This interface is not implemented</l><block var="missing"/></list></block></block></script></block></script></block-definition><block-definition s="%&apos;object&apos; . %&apos;member&apos; = %&apos;value&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>root</l><l>has_setter</l><l>is_member</l><l>class</l></list></block><block s="doSetVar"><l>root</l><block s="evaluate"><block var="object"/><list><l>root</l></list></block></block><block s="doSetVar"><l>class</l><block s="evaluate"><block var="object"/><list><l>class</l></list></block></block><block s="doSetVar"><l>has_setter</l><block s="reportNot"><block s="reportEquals"><block s="evaluate"><block var="object"/><list><block s="reportJoinWords"><list><l>set</l><block var="member"/></list></block></list></block><l>nil</l></block></block></block><block s="doSetVar"><l>is_member</l><block s="reportNot"><block s="reportEquals"><block s="evaluate"><block var="object"/><list><block var="member"/></list></block><l>nil</l></block></block></block><block s="doIfElse"><block s="reportOr"><block s="reportEquals"><block var="class"/><l>nil</l></block><block var="is_member"/></block><script><block s="doRun"><block s="evaluate"><block var="root"/><list><l>_remove</l></list></block><list><block var="member"/></list></block><block s="doRun"><block s="evaluate"><block var="root"/><list><l>_add</l></list></block><list><block var="member"/><block var="value"/></list></block></script><script><block s="doIf"><block var="has_setter"/><script><block s="doRun"><block s="evaluate"><block var="object"/><list><block s="reportJoinWords"><list><l>set</l><block var="member"/></list></block></list></block><list><block var="value"/></list></block></script></block></script></block></script></block-definition><block-definition s="%&apos;object&apos; . %&apos;member&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>root</l><l>has_getter</l><l>is_member</l></list></block><block s="doSetVar"><l>root</l><block s="evaluate"><block var="object"/><list><l>root</l></list></block></block><block s="doSetVar"><l>has_getter</l><block s="reportNot"><block s="reportEquals"><block s="evaluate"><block var="object"/><list><block s="reportJoinWords"><list><l>get</l><block var="member"/></list></block></list></block><l>nil</l></block></block></block><block s="doSetVar"><l>is_member</l><block s="reportNot"><block s="reportEquals"><block s="evaluate"><block var="object"/><list><block var="member"/></list></block><l>nil</l></block></block></block><block s="doIfElse"><block var="is_member"/><script><block s="doReport"><block s="reportListItem"><l>2</l><block s="evaluate"><block s="evaluate"><block var="root"/><list><l>_search</l></list></block><list><block var="member"/></list></block></block></block></script><script><block s="doIf"><block var="has_getter"/><script><block s="doRun"><block s="evaluate"><block var="object"/><list><block s="reportJoinWords"><list><l>get</l><block var="member"/></list></block></list></block><list></list></block></script></block></script></block></script></block-definition><block-definition s="%&apos;object&apos; . %&apos;member&apos; ( %&apos;params&apos; )" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%mult%s"></input></inputs><script><block s="doRun"><custom-block s="%s . %s"><block var="object"/><block var="member"/></custom-block><block var="params"/></block></script></block-definition><block-definition s="Object" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><custom-block s="Class %s extends %mult%s implements %mult%s %cs %upvar %upvar %upvar"><l>Object</l><list></list><list><l>init</l></list><script><custom-block s="# %code"><l>set a member&#xD;It is recommended to use a Setter block instead "set"</l></custom-block><block s="doRun"><block s="evaluate"><block var="root"/><list><l>_add</l></list></block><list><l>set</l><block s="reifyScript"><script><block s="doRun"><block s="evaluate"><block var="root"/><list><l>_remove</l></list></block><list><block var="member"/></list></block><block s="doRun"><block s="evaluate"><block var="root"/><list><l>_add</l></list></block><list><block var="member"/><block var="value"/></list></block></script><list><l>member</l><l>value</l></list></block></list></block><custom-block s="# %code"><l>get a member&#xD;It is recommended to use a Getter block instead "get"</l></custom-block><block s="doRun"><block s="evaluate"><block var="root"/><list><l>_add</l></list></block><list><l>get</l><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><block s="evaluate"><block s="evaluate"><block var="root"/><list><l>_search</l></list></block><list><block var="member"/></list></block></block></autolambda><list><l>member</l></list></block></list></block><custom-block s="# %code"><l>default constructor</l></custom-block><block s="doRun"><block s="evaluate"><block var="root"/><list><l>_add</l></list></block><list><block s="evaluate"><block var="this"/><list><l>class</l></list></block><block var="this"/></list></block><block s="doReport"><block var="this"/></block></script><l>root</l><l>this</l><l>super</l></custom-block></block></script></block-definition><block-definition s="Interface %&apos;attributes&apos; %&apos;methods&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%mult%s"></input><input type="%mult%s"></input></inputs><script><block s="doDeclareVariables"><list><l>i</l></list></block><block s="doSetVar"><l>i</l><block s="reportNewList"><list></list></block></block><block s="doForEach"><l>item</l><block var="attributes"/><script><block s="doAddToList"><block var="item"/><block var="i"/></block></script></block><block s="doForEach"><l>item</l><block var="methods"/><script><block s="doAddToList"><block var="item"/><block var="i"/></block></script></block><block s="doReport"><block var="i"/></block></script></block-definition><block-definition s="Point" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><custom-block s="Class %s extends %mult%s implements %mult%s %cs %upvar %upvar %upvar"><l>Point</l><list><custom-block s="Object"></custom-block></list><list></list><script><block s="doDeclareVariables"><list><l>_x</l><l>_y</l><l>_translate</l><l>_dot</l><l>_line_to</l><l>_draw_line_to</l><l>_r</l><l>_angle</l><l>_radial</l><l>_clone</l><l>_to_cartesian</l><l>_to_radial</l></list></block><custom-block s="# %code"><l>private members</l></custom-block><block s="doSetVar"><l>_x</l><l>0</l></block><block s="doSetVar"><l>_y</l><l>0</l></block><block s="doSetVar"><l>_r</l><l>0</l></block><block s="doSetVar"><l>_radial</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><custom-block s="# %code"><l>0 to the east&#xD;90 to the north</l></custom-block><block s="doSetVar"><l>_angle</l><l>0</l></block><custom-block s="# %code"><l>private methods</l></custom-block><block s="doSetVar"><l>_translate</l><block s="reifyScript"><script><block s="doIfElse"><block var="radial"/><script><block s="doSetVar"><l>_radial</l><block var="radial"/></block><block s="doSetVar"><l>_r</l><block var="x"/></block><block s="doSetVar"><l>_angle</l><block var="y"/></block><block s="doRun"><block var="_to_cartesian"/><list></list></block></script><script><block s="doSetVar"><l>_x</l><block var="x"/></block><block s="doSetVar"><l>_y</l><block var="y"/></block><block s="doRun"><block var="_to_radial"/><list></list></block></script></block></script><list><l>x</l><l>y</l><l>radial</l></list></block></block><block s="doSetVar"><l>_dot</l><block s="reifyScript"><script><block s="gotoXY"><block var="_x"/><block var="_y"/></block><block s="down"></block><block s="forward"><l>0</l></block><block s="up"></block></script><list></list></block></block><block s="doSetVar"><l>_line_to</l><block s="reifyScript"><script><block s="doReport"><custom-block s="new %s ( %mult%s )"><custom-block s="Line"></custom-block><list><block var="this"/><block var="aPoint"/></list></custom-block></block></script><list><l>aPoint</l></list></block></block><block s="doSetVar"><l>_draw_line_to</l><block s="reifyScript"><script><custom-block s="%s . %s ( %mult%s )"><block var="this"/><l>dot</l><list></list></custom-block><block s="down"></block><custom-block s="%s . %s ( %mult%s )"><block var="aPoint"/><l>dot</l><list></list></custom-block><block s="up"></block></script><list><l>aPoint</l></list></block></block><block s="doSetVar"><l>_clone</l><block s="reifyScript"><script><block s="doReport"><custom-block s="new %s ( %mult%s )"><custom-block s="Point"></custom-block><list><custom-block s="%s . %s"><block var="this"/><l>x</l></custom-block><custom-block s="%s . %s"><block var="this"/><l>y</l></custom-block></list></custom-block></block></script><list></list></block></block><block s="doSetVar"><l>_to_cartesian</l><block s="reifyScript"><script><block s="doSetVar"><l>_x</l><block s="reportVariadicProduct"><list><block var="_r"/><block s="reportMonadic"><l><option>cos</option></l><block var="_angle"/></block></list></block></block><block s="doSetVar"><l>_y</l><block s="reportVariadicProduct"><list><block var="_r"/><block s="reportMonadic"><l><option>sin</option></l><block var="_angle"/></block></list></block></block></script><list></list></block></block><block s="doSetVar"><l>_to_radial</l><block s="reifyScript"><script><block s="doSetVar"><l>_r</l><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportVariadicSum"><list><block s="reportPower"><block var="_x"/><l>2</l></block><block s="reportPower"><block var="_y"/><l>2</l></block></list></block></block></block><block s="doSetVar"><l>_angle</l><block s="reportIfElse"><block s="reportGreaterThan"><block var="_x"/><l>0</l></block><block s="reportMonadic"><l><option>atan</option></l><block s="reportQuotient"><block var="_y"/><block var="_x"/></block></block><block s="reportIfElse"><block s="reportLessThan"><block var="_x"/><l>0</l></block><block s="reportVariadicSum"><list><block s="reportMonadic"><l><option>atan</option></l><block s="reportQuotient"><block var="_y"/><block var="_x"/></block></block><custom-block s="PI"></custom-block></list></block><block s="reportIfElse"><block s="reportLessThan"><block var="_y"/><l>0</l></block><l>-90</l><l>90</l></block></block></block></block></script><list></list></block></block><custom-block s="# %code"><l>public members</l></custom-block><custom-block s="%s setter %cmdRing for property %s"><block var="this"/><block s="reifyScript"><script><block s="doSetVar"><l>_x</l><block var="x"/></block></script><list><l>x</l></list></block><l>x</l></custom-block><custom-block s="%s getter %cmdRing for property %s"><block var="this"/><block s="reifyScript"><script><block s="doReport"><block var="_x"/></block></script><list></list></block><l>x</l></custom-block><custom-block s="%s setter %cmdRing for property %s"><block var="this"/><block s="reifyScript"><script><block s="doSetVar"><l>_y</l><block var="y"/></block></script><list><l>y</l></list></block><l>y</l></custom-block><custom-block s="%s getter %cmdRing for property %s"><block var="this"/><block s="reifyScript"><script><block s="doReport"><block var="_y"/></block></script><list></list></block><l>y</l></custom-block><custom-block s="# %code"><l>read only public member</l></custom-block><custom-block s="%s getter %cmdRing for property %s"><block var="this"/><block s="reifyScript"><script><block s="doReport"><block var="_radial"/></block></script><list></list></block><l>radial</l></custom-block><custom-block s="# %code"><l>constructor</l></custom-block><custom-block s="%s . %s = %s"><block var="this"/><l>Point</l><block var="_translate"/></custom-block><custom-block s="# %code"><l>public methods</l></custom-block><custom-block s="%s . %s = %s"><block var="this"/><l>translateTo</l><block var="_translate"/></custom-block><custom-block s="%s . %s = %s"><block var="this"/><l>dot</l><block var="_dot"/></custom-block><custom-block s="%s . %s = %s"><block var="this"/><l>drawLineTo</l><block var="_draw_line_to"/></custom-block><custom-block s="%s . %s = %s"><block var="this"/><l>clone</l><block var="_clone"/></custom-block></script><l>root</l><l>this</l><l>super</l></custom-block></block></script><scripts><script x="514.000004" y="129.66667166666684"><block var="_r"/></script><script x="516.000004" y="152.66667166666684"><block var="_angle"/></script><script x="588.3505869375001" y="173.20000400000004"><block var="_x"/></script><script x="515.000004" y="227.66667166666684"><block var="_radial"/></script></scripts></block-definition><block-definition s="Rectangle" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>_class</l></list></block><block s="doSetVar"><l>_class</l><l>0</l></block><block s="doReport"><custom-block s="Class %s extends %mult%s implements %mult%s %cs %upvar %upvar %upvar"><l>Rectangle</l><list><custom-block s="Object"></custom-block></list><list></list><script><block s="doDeclareVariables"><list><l>left-top</l><l>right_bottom</l></list></block><block s="doSetVar"><l>left-top</l><custom-block s="Point"></custom-block></block><block s="doSetVar"><l>right_bottom</l><l>0</l></block><custom-block s="%s . %s = %s"><block var="this"/><l>init</l><block s="reifyScript"><script></script><list><l>l</l><l>t</l><l>b</l><l>#4</l></list></block></custom-block></script><l>root</l><l>this</l><l>super</l></custom-block></block></script></block-definition><block-definition s="new %&apos;class&apos; ( %&apos;args&apos; )" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%mult%s"></input></inputs><script><block s="doDeclareVariables"><list><l>_instance</l></list></block><block s="doSetVar"><l>_instance</l><block var="class"/></block><block s="doRun"><custom-block s="%s . %s"><block var="_instance"/><block s="evaluate"><block var="class"/><list><l>class</l></list></block></custom-block><block var="args"/></block><block s="doReport"><block var="_instance"/></block></script></block-definition><block-definition s="%&apos;object&apos; setter %&apos;setter&apos; for property %&apos;member&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%cmdRing"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>root</l><l>class</l><l>is_member</l><l>set_member</l><l>get_member</l></list></block><block s="doSetVar"><l>root</l><block s="evaluate"><block var="object"/><list><l>root</l></list></block></block><block s="doSetVar"><l>class</l><block s="evaluate"><block var="object"/><list><l>class</l></list></block></block><block s="doSetVar"><l>set_member</l><block s="reportJoinWords"><list><l>set</l><block var="member"/></list></block></block><block s="doSetVar"><l>is_member</l><block s="reportNot"><block s="reportEquals"><block s="evaluate"><block var="object"/><list><block var="set_member"/></list></block><l>nil</l></block></block></block><block s="doIf"><block s="reportOr"><block s="reportEquals"><block var="class"/><l>nil</l></block><block var="is_member"/></block><script><block s="doRun"><block s="evaluate"><block var="root"/><list><l>_remove</l></list></block><list><block var="set_member"/></list></block><block s="doRun"><block s="evaluate"><block var="root"/><list><l>_add</l></list></block><list><block var="set_member"/><block var="setter"/></list></block></script></block></script></block-definition><block-definition s="%&apos;object&apos; getter %&apos;getter&apos; for property %&apos;member&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%cmdRing"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>root</l><l>class</l><l>is_member</l><l>set_member</l><l>get_member</l></list></block><block s="doSetVar"><l>root</l><block s="evaluate"><block var="object"/><list><l>root</l></list></block></block><block s="doSetVar"><l>class</l><block s="evaluate"><block var="object"/><list><l>class</l></list></block></block><block s="doSetVar"><l>get_member</l><block s="reportJoinWords"><list><l>get</l><block var="member"/></list></block></block><block s="doSetVar"><l>is_member</l><block s="reportNot"><block s="reportEquals"><block s="evaluate"><block var="object"/><list><block var="get_member"/></list></block><l>nil</l></block></block></block><block s="doIf"><block s="reportOr"><block s="reportEquals"><block var="class"/><l>nil</l></block><block var="is_member"/></block><script><block s="doRun"><block s="evaluate"><block var="root"/><list><l>_remove</l></list></block><list><block var="get_member"/></list></block><block s="doRun"><block s="evaluate"><block var="root"/><list><l>_add</l></list></block><list><block var="get_member"/><block var="getter"/></list></block></script></block></script></block-definition><block-definition s="Line" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><custom-block s="Class %s extends %mult%s implements %mult%s %cs %upvar %upvar %upvar"><l>Line</l><list><custom-block s="Object"></custom-block></list><list></list><script><block s="doDeclareVariables"><list><l>_start</l><l>_stop</l><l>_draw</l><l>_init</l></list></block><custom-block s="# %code"><l>private members</l></custom-block><block s="doSetVar"><l>_start</l><custom-block s="new %s ( %mult%s )"><custom-block s="Point"></custom-block><list><l></l></list></custom-block></block><block s="doSetVar"><l>_stop</l><custom-block s="new %s ( %mult%s )"><custom-block s="Point"></custom-block><list><l></l></list></custom-block></block><custom-block s="# %code"><l>private methods</l></custom-block><block s="doSetVar"><l>_init</l><block s="reifyScript"><script><block s="doSetVar"><l>_start</l><block var="pt1"/></block><block s="doSetVar"><l>_stop</l><block var="pt2"/></block></script><list><l>pt1</l><l>pt2</l></list></block></block><block s="doSetVar"><l>_draw</l><block s="reifyScript"><script><custom-block s="%s . %s ( %mult%s )"><block var="_start"/><l>dot</l><list></list></custom-block><block s="down"></block><custom-block s="%s . %s ( %mult%s )"><block var="_stop"/><l>dot</l><list></list></custom-block><block s="up"></block></script><list></list></block></block><custom-block s="# %code"><l>public members</l></custom-block><custom-block s="%s setter %cmdRing for property %s"><block var="this"/><block s="reifyScript"><script><block s="doSetVar"><l>_start</l><block var="x"/></block></script><list><l>start</l></list></block><l>start</l></custom-block><custom-block s="%s getter %cmdRing for property %s"><block var="this"/><block s="reifyScript"><script><block s="doReport"><block var="_start"/></block></script><list></list></block><l>start</l></custom-block><custom-block s="%s setter %cmdRing for property %s"><block var="this"/><block s="reifyScript"><script><block s="doSetVar"><l>_stop</l><block var="y"/></block></script><list><l>stop</l></list></block><l>stop</l></custom-block><custom-block s="%s getter %cmdRing for property %s"><block var="this"/><block s="reifyScript"><script><block s="doReport"><block var="_stop"/></block></script><list></list></block><l>stop</l></custom-block><custom-block s="# %code"><l>constructor</l></custom-block><custom-block s="%s . %s = %s"><block var="this"/><l>Line</l><block var="_init"/></custom-block><custom-block s="# %code"><l>public methods</l></custom-block><custom-block s="%s . %s = %s"><block var="this"/><l>draw</l><block var="_draw"/></custom-block></script><l>root</l><l>this</l><l>super</l></custom-block></block></script><scripts><script x="17.62402743749999" y="842.8333403333338"><block s="gotoXY"><custom-block s="%s . %s"><block var="_start"/><l>x</l></custom-block><custom-block s="%s . %s"><block var="_start"/><l>y</l></custom-block></block><block s="down"></block><block s="gotoXY"><custom-block s="%s . %s"><block var="_stop"/><l>x</l></custom-block><custom-block s="%s . %s"><block var="_stop"/><l>y</l></custom-block></block><block s="up"></block></script></scripts></block-definition><block-definition s="report %&apos;object&apos; . %&apos;member&apos; ( %&apos;params&apos; )" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="%s . %s"><block var="object"/><block var="member"/></custom-block><block var="params"/></block></block></script></block-definition><block-definition s="PI" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l>3.14159265359</l></block></script></block-definition><block-definition s="findmax %&apos;value 1&apos; %&apos;value 2&apos;" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doIfElse"><block s="reportLessThan"><block var="value 2"/><block var="value 1"/></block><script><block s="doSetVar"><l>answer</l><block var="value 1"/></block></script><script><block s="doSetVar"><l>answer</l><block var="value 2"/></block></script></block><block s="doReport"><block var="answer"/></block></script></block-definition><block-definition s="FindMaxNumber %&apos;list&apos;" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doSetVar"><l>index</l><l>1</l></block><block s="doSetVar"><l>answer</l><block s="reportListItem"><block var="index"/><block var="list"/></block></block><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><script><block s="doChangeVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportGreaterThan"><block s="reportListItem"><block var="index"/><block var="list"/></block><block var="answer"/></block><script><block s="doSetVar"><l>answer</l><block s="reportListItem"><block var="index"/><block var="list"/></block></block></script></block></script></block><block s="doReport"><block var="answer"/></block></script></block-definition><block-definition s="Addition %&apos;list&apos;" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doSetVar"><l>index</l><l>1</l></block><block s="doSetVar"><l>answer</l><l>0</l></block><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><script><block s="doChangeVar"><l>answer</l><block s="reportListItem"><block var="index"/><block var="list"/></block></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doReport"><block var="answer"/></block></script></block-definition><block-definition s="label %&apos;text&apos; of size %&apos;size&apos;" type="command" category="pen"><comment x="0" y="0" w="90" collapsed="false">LABEL will stamp text on the stage at the given font size. The direction of the text is the direction the sprite is facing, and color will match the pen color.</comment><header></header><code></code><translations></translations><inputs><input type="%txt">Hello!</input><input type="%n">12</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>text</l><l>size</l></list><l>var stage = this.parentThatIsA(StageMorph),&#xD;    context = stage.penTrails().getContext(&apos;2d&apos;),&#xD;    rotation = radians(this.direction() - 90),&#xD;    trans = new Point(&#xD;      this.center().x - stage.left(),&#xD;      this.center().y - stage.top()&#xD;    ),&#xD;    isWarped = this.Warped,&#xD;    len,&#xD;    pos;&#xD;&#xD;if (isWarped) {endWarp(); }&#xD;context.save();&#xD;context.font = size + &apos;px monospace&apos;;&#xD;context.textAlign = &apos;left&apos;;&#xD;context.textBaseline = &apos;alphabetic&apos;;&#xD;context.fillStyle = this.color.toString();&#xD;len = context.measureText(text).width;&#xD;trans = trans.multiplyBy(1 / stage.scale);&#xD;context.translate(trans.x, trans.y);&#xD;context.rotate(rotation);&#xD;context.fillText(text, 0, 0);&#xD;context.translate(-trans.x, -trans.y);&#xD;context.restore();&#xD;pos = new Point(&#xD;  len * Math.sin(radians(this.direction())),&#xD;  len * Math.cos(radians(this.direction())));&#xD;pos = pos.add(new Point(this.xPosition(), this.yPosition()));&#xD;this.gotoXY(pos.x, pos.y, false);&#xD;this.changed();&#xD;if (isWarped) {this.startWarp(); }&#xD;stage.changed();</l></block><list><block var="text"/><block var="size"/></list></block></script></block-definition><block-definition s="map %&apos;function&apos; over %&apos;lists&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>mapone</l><l>mapmany</l></list></block><block s="doSetVar"><l>mapone</l><block s="reifyScript"><script><block s="doIf"><custom-block s="empty? %l"><block var="data"/></custom-block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="function"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><block s="evaluate"><block var="mapone"/><list><block s="reportCDR"><block var="data"/></block></list></block></block></block></script><list><l>data</l></list></block></block><block s="doSetVar"><l>mapmany</l><block s="reifyScript"><script><block s="doIf"><custom-block s="empty? %l"><block s="reportListItem"><l>1</l><block var="data lists"/></block></custom-block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="function"/><custom-block s="map %repRing over %mult%l"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><list><block var="data lists"/></list></custom-block></block><block s="evaluate"><block var="mapmany"/><list><custom-block s="map %repRing over %mult%l"><block s="reifyReporter"><autolambda><block s="reportCDR"><l/></block></autolambda><list></list></block><list><block var="data lists"/></list></custom-block></list></block></block></block></script><list><l>data lists</l></list></block></block><block s="doIfElse"><custom-block s="empty? %l"><block s="reportCDR"><block var="lists"/></block></custom-block><script><block s="doReport"><block s="evaluate"><block var="mapone"/><list><block s="reportListItem"><l>1</l><block var="lists"/></block></list></block></block></script><script><block s="doReport"><block s="evaluate"><block var="mapmany"/><list><block var="lists"/></list></block></block></script></block></script></block></script></block-definition><block-definition s="empty? %&apos;data&apos;" type="predicate" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportEquals"><block var="data"/><block s="reportNewList"><list></list></block></block></block></script></block-definition><block-definition s="keep items such that %&apos;pred&apos; from %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%predRing"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doIf"><custom-block s="empty? %l"><block var="data"/></custom-block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIfElse"><block s="evaluate"><block var="pred"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="data"/></block><custom-block s="keep items such that %predRing from %l"><block var="pred"/><block s="reportCDR"><block var="data"/></block></custom-block></block></block></script><script><block s="doReport"><custom-block s="keep items such that %predRing from %l"><block var="pred"/><block s="reportCDR"><block var="data"/></block></custom-block></block></script></block></script></block></script></block-definition><block-definition s="combine with %&apos;function&apos; items of %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doIf"><custom-block s="empty? %l"><block s="reportCDR"><block var="data"/></block></custom-block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="data"/></block></block></script></block><block s="doReport"><block s="evaluate"><block var="function"/><list><block s="reportListItem"><l>1</l><block var="data"/></block><custom-block s="combine with %repRing items of %l"><block var="function"/><block s="reportCDR"><block var="data"/></block></custom-block></list></block></block></script></block></script></block-definition><block-definition s="if %&apos;test&apos; then %&apos;true&apos; else %&apos;false&apos;" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%b"></input><input type="%anyUE"></input><input type="%anyUE"></input></inputs><script><block s="doIfElse"><block var="test"/><script><block s="doReport"><block s="evaluate"><block var="true"/><list></list></block></block></script><script><block s="doReport"><block s="evaluate"><block var="false"/><list></list></block></block></script></block></script></block-definition><block-definition s="for %&apos;i&apos; = %&apos;start&apos; to %&apos;end&apos; with %&apos;step&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%n">1</input><input type="%n">10</input><input type="%s"></input><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>next</l><l>tester</l></list></block><block s="doIfElse"><block s="reportGreaterThan"><block var="start"/><block var="end"/></block><script><block s="doSetVar"><l>next</l><block s="reportDifference"><l></l><custom-block s="if %b then %anyUE else %anyUE"><block s="reportGreaterThan"><block var="step"/><l>0</l></block><block var="step"/><l>1</l></custom-block></block></block><block s="doSetVar"><l>tester</l><block s="reifyReporter"><autolambda><block s="reportLessThan"><block var="i"/><block var="end"/></block></autolambda><list></list></block></block></script><script><block s="doSetVar"><l>next</l><custom-block s="if %b then %anyUE else %anyUE"><block s="reportGreaterThan"><block var="step"/><l>0</l></block><block var="step"/><l>1</l></custom-block></block><block s="doSetVar"><l>tester</l><block s="reifyReporter"><autolambda><block s="reportGreaterThan"><block var="i"/><block var="end"/></block></autolambda><list></list></block></block></script></block><block s="doSetVar"><l>i</l><block var="start"/></block><block s="doUntil"><block s="evaluate"><block var="tester"/><list></list></block><script><block s="doRun"><block var="action"/><list></list></block><block s="doChangeVar"><l>i</l><block var="next"/></block></script></block></script></block-definition><block-definition s="join words %&apos;words&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mult%txt"></input></inputs><script><block s="doWarp"><script><block s="doIf"><custom-block s="empty? %l"><block s="reportCDR"><block var="words"/></block></custom-block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="words"/></block></block></script></block><block s="doIf"><block s="reportEquals"><l></l><block s="reportListItem"><l>1</l><block var="words"/></block></block><script><block s="doReport"><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><l></l><block s="reportListItem"><l>2</l><block var="words"/></block></block><script><block s="doReport"><custom-block s="join words %mult%txt"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="words"/></block><block s="reportCDR"><block s="reportCDR"><block var="words"/></block></block></block></custom-block></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportListItem"><l>1</l><block var="words"/></block><l> </l><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></list></block></block></script></block></script><scripts><script x="229.000003" y="196.77778077777774"><block s="reportJoinWords"><list><l></l><l></l></list></block></script></scripts></block-definition><block-definition s="list $arrowRight sentence %&apos;data&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doReport"><custom-block s="join words %mult%txt"><block var="data"/></custom-block></block></script></block></script></block-definition><block-definition s="sentence $arrowRight list %&apos;text&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reportTextSplit"><block var="text"/><l><option>whitespace</option></l></block></block></script></block></script></block-definition><block-definition s="catch %&apos;tag&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%cs"></input></inputs><script><block s="doCallCC"><block s="reifyScript"><script><block s="doSetVar"><l>tag</l><block var="cont"/></block><block s="doRun"><block var="action"/><list></list></block></script><list><l>cont</l></list></block></block></script></block-definition><block-definition s="throw %&apos;cont&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%s">catchtag</input></inputs><script><block s="doRun"><block var="cont"/><list></list></block></script></block-definition><block-definition s="catch %&apos;tag&apos; %&apos;value&apos;" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%anyUE"></input></inputs><script><block s="doCallCC"><block s="reifyScript"><script><block s="doSetVar"><l>tag</l><block var="cont"/></block><block s="doReport"><block s="evaluate"><block var="value"/><list></list></block></block></script><list><l>cont</l></list></block></block></script></block-definition><block-definition s="for each %&apos;item&apos; of %&apos;data&apos; %&apos;action&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%l"></input><input type="%cs"></input></inputs><script><block s="doUntil"><custom-block s="empty? %l"><block var="data"/></custom-block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><l>1</l><block var="data"/></block></block><block s="doRun"><block var="action"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><block s="doSetVar"><l>data</l><block s="reportCDR"><block var="data"/></block></block></script></block></script></block-definition><block-definition s="if %&apos;test&apos; do %&apos;action&apos; and pause all $pause-1-255-220-0" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%boolUE"></input><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>breakpoint</l></list></block><block s="doIf"><block s="evaluate"><block var="test"/><list></list></block><script><block s="doSetVar"><l>breakpoint</l><block var="test"/></block><block s="doShowVar"><l>breakpoint</l></block><block s="doRun"><block var="action"/><list></list></block><block s="doPauseAll"></block><block s="doHideVar"><l></l></block></script></block></script></block-definition><block-definition s="word $arrowRight list %&apos;word&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reportTextSplit"><block var="word"/><l><option>letter</option></l></block></block></script></block></script></block-definition><block-definition s="tell %&apos;sprite&apos; to %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%s">Sprite</input><input type="%cs"></input></inputs><script><block s="doRun"><block s="reportAttributeOf"><block var="action"/><block var="sprite"/></block><list></list></block></script></block-definition><block-definition s="ask %&apos;sprite&apos; for %&apos;expression&apos;" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%s">Sprite</input><input type="%repRing"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportAttributeOf"><block var="expression"/><block var="sprite"/></block><list></list></block></block></script></block-definition><block-definition s="list $arrowRight word %&apos;list&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doReport"><block s="reportJoinWords"><block var="list"/></block></block></script></block></script></block-definition><block-definition s="dessine diam %&apos;petit&apos; / %&apos;grand&apos; %&apos;nb&apos; tours" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>tours</l></list></block><block s="doSetVar"><l>tours</l><custom-block s="if %b then %anyUE else %anyUE"><block s="reportEquals"><block var="nb"/><l>0</l></block><block s="reportQuotient"><block var="petit"/><custom-block s="PGCD de %s et %s"><block var="grand"/><block var="petit"/></custom-block></block><block var="nb"/></custom-block></block><custom-block s="for %upvar = %n to %n with %s %cs"><l>i</l><l>0</l><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block var="tours"/><l>360</l></list></block><l>0</l></list></block><block var="step"/><script><block s="turn"><block var="step"/></block><custom-block s="tell %s to %cs"><l>Pt Roue</l><script><block s="turnLeft"><block s="reportVariadicProduct"><list><block s="reportQuotient"><block s="reportAttributeOf"><l><option>size</option></l><l>Gd Roue</l></block><block s="reportAttributeOf"><l><option>size</option></l><l>Pt Roue</l></block></block><block var="step"/></list></block></block></script></custom-block><custom-block s="tell %s to %cs"><l>Stylo</l><script><block s="doStamp"></block></script></custom-block></script></custom-block></script></block-definition><block-definition s="PGCD de %&apos;a&apos; et %&apos;b&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block s="reportModulus"><block var="a"/><block var="b"/></block><l>0</l></block><script><block s="doReport"><block var="b"/></block></script><script><block s="doReport"><custom-block s="PGCD de %s et %s"><block var="b"/><block s="reportModulus"><block var="a"/><block var="b"/></block></custom-block></block></script></block></script></block-definition><block-definition s="PPCM de %&apos;a&apos; et %&apos;b&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportQuotient"><block s="reportMonadic"><l><option>abs</option></l><block s="reportVariadicProduct"><list><block var="a"/><block var="b"/></list></block></block><custom-block s="PGCD de %s et %s"><block var="a"/><block var="b"/></custom-block></block></block></script></block-definition><block-definition s="spiro_init petit %&apos;petit&apos; / grand %&apos;grand&apos; position %&apos;pos&apos; direction %&apos;dir&apos; couleur %&apos;couleur&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><custom-block s="tell %s to %cs"><l>Pt Roue</l><script><block s="doSetVar"><l>Size</l><block s="reportVariadicProduct"><list><block s="reportAttributeOf"><l><option>size</option></l><l>Gd Roue</l></block><block s="reportQuotient"><block var="petit"/><block var="grand"/></block></list></block></block><block s="setScale"><block var="Size"/></block><block s="doSetVar"><l>Direction</l><block s="reportVariadicProduct"><list><block var="dir"/><block s="reportQuotient"><l>360</l><block var="petit"/></block></list></block></block><block s="gotoXY"><block s="reportVariadicProduct"><list><block s="reportDifference"><block s="reportAttributeOf"><l><option>size</option></l><l>Gd Roue</l></block><block s="getScale"></block></block><l>1.65</l></list></block><l>0</l></block><block s="setHeading"><l>90</l></block></script></custom-block><custom-block s="tell %s to %cs"><l>Stylo</l><script><block s="setScale"><l>30</l></block><block s="setEffect"><l><option>color</option></l><block var="couleur"/></block><block s="gotoXY"><block s="reportDifference"><block s="reportVariadicProduct"><list><block s="reportAttributeOf"><l><option>size</option></l><l>Gd Roue</l></block><l>1.65</l></list></block><block s="reportVariadicProduct"><list><block var="pos"/><l>2</l></list></block></block><l>0</l></block></script></custom-block><custom-block s="tell %s to %cs"><l>Pt Roue</l><script><block s="turn"><block var="Direction"/></block></script></custom-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;</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="reportEquals"><block var="index"/><l>0</l></block><block var="string"/><block s="reportIfElse"><block s="reportEquals"><block var="index"/><l>1</l></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;</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="reportStringSize"><block var="marker"/></block></list></block></block><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block var="index"/><l>0</l></block><l></l><block s="reportIfElse"><block s="reportGreaterThan"><block var="end"/><block s="reportStringSize"><block var="string"/></block></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;</translations><inputs><input type="%s"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportIfElse"><custom-block s="use case-independent comparison"></custom-block><block s="reportApplyExtension"><l>txt_indexof(sub, txt)</l><list><custom-block s="to lower case %txt"><block var="small"/></custom-block><custom-block s="to lower case %txt"><block var="large"/></custom-block></list></block><block s="reportApplyExtension"><l>txt_indexof(sub, txt)</l><list><block var="small"/><block var="large"/></list></block></block></block></script></block-definition><block-definition s="use case-independent comparisons %&apos;tf&apos;" type="command" category="operators"><comment x="0" y="0" w="225.33333333333334" collapsed="false">If input is TRUE, comparisons made by functions in the string library will be case-independent (so &quot;FOO&quot; = &quot;foo&quot;).  This is the default.&#xD;If input is FALSE, comparisons will be exact.</comment><header></header><code></code><translations>pt:altera comparações ignorando distinção minúsculas/maiúsculas para _&#xD;ca:ignora la diferenciació de majúscules _&#xD;</translations><inputs><input type="%b"></input></inputs><script><block s="doIfElse"><block s="reportNot"><block var="tf"/></block><script><block s="doApplyExtension"><l>var_declare(scope, name)</l><list><l>global</l><l>_case indepent</l></list></block><block s="doApplyExtension"><l>var_set(name, val)</l><list><l>_case indepent</l><block s="reportBoolean"><l><bool>false</bool></l></block></list></block></script><script><block s="doApplyExtension"><l>var_delete(name)</l><list><l>_case indepent</l></list></block></script></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;</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="reportLessThan"><block var="start"/><l>0</l></block><block s="reportVariadicSum"><list><block s="reportVariadicSum"><list><block var="start"/><l>1</l></list></block><block s="reportStringSize"><block var="str"/></block></list></block><block var="start"/></block><block s="reportIfElse"><block s="reportEquals"><block var="end"/><l>0</l></block><block s="reportStringSize"><block var="str"/></block><block s="reportIfElse"><block s="reportLessThan"><block var="end"/><l>0</l></block><block s="reportVariadicSum"><list><block s="reportVariadicSum"><list><block var="end"/><l>1</l></list></block><block s="reportStringSize"><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;</translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportGreaterThan"><custom-block s="position of %s in %txt"><block var="marker"/><block var="string"/></custom-block><l>0</l></block></block></script></block-definition><block-definition s="to lower case %&apos;text&apos;" type="reporter" category="operators"><comment x="0" y="0" w="275.3333333333333" collapsed="false">Reports the input text with lower case letters instead of capital letters in the input.  Uses the user&apos;s locale&apos;s rules for case conversion.</comment><header></header><code></code><translations>pt:em minúsculas _&#xD;ca:_ a minúscules&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>txt_lowercase(txt)</l><list><block s="reportJoinWords"><list><block var="text"/></list></block></list></block></block></script></block-definition><block-definition s="use case-independent comparison" type="predicate" category="sensing"><header></header><code></code><translations>ca:comparacions ignorant majúscules?&#xD;</translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doSetVar"><l>result</l><block s="reportApplyExtension"><l>var_get(name)</l><list><l>_case indepent</l></list></block></block></script><list></list></block><block s="reifyScript"><script><block s="doSetVar"><l>result</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><l></l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="multi-line popup %&apos;text&apos;" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">Creates a new window with text in.</comment><header></header><code></code><translations></translations><inputs><input type="%mlt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>javaText</l></list><l>let newWindow = window.open("about:blank", "", "_blank"); let textBlock = javaTextif (newWindow) {	newWindow.document.write(textBlock);}</l></block><list><block var="text"/></list></block></script></block-definition><block-definition s="secure pick random %&apos;number1&apos; to %&apos;number2&apos;" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">For cryptography.</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">10</input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportAnd"><block s="reportIsA"><block var="number1"/><l><option>list</option></l></block><block s="reportIsA"><block var="number2"/><l><option>list</option></l></block></block><block s="reportIfElse"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="number1"/></block><block s="reportListAttribute"><l><option>length</option></l><block var="number2"/></block></block><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="secure pick random %n to %n"><block s="reportListItem"><block var="index"/><block var="number1"/></block><block var="value"/></custom-block></autolambda><list><l>value</l><l>index</l></list></block><block var="number2"/></block><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="secure pick random %n to %n"><block var="value"/><block s="reportListItem"><block var="index"/><block var="number2"/></block></custom-block></autolambda><list><l>value</l><l>index</l></list></block><block var="number1"/></block></block><block s="reportIfElse"><block s="reportIsA"><block var="number1"/><l><option>list</option></l></block><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="secure pick random %n to %n"><l></l><block var="number2"/></custom-block></autolambda><list></list></block><block var="number1"/></block><block s="reportIfElse"><block s="reportIsA"><block var="number2"/><l><option>list</option></l></block><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="secure pick random %n to %n"><block var="number1"/><l></l></custom-block></autolambda><list></list></block><block var="number2"/></block><block s="reportIfElse"><block s="reportEquals"><block var="number1"/><block var="number2"/></block><block var="number1"/><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportAnd"><block s="reportEquals"><block s="reportModulus"><block var="number1"/><l>1</l></block><l>0</l></block><block s="reportEquals"><block s="reportModulus"><block var="number2"/><l>1</l></block><l>0</l></block></block><block s="reportRound"><block var="number"/></block><block var="number"/></block></autolambda><list><l>number</l></list></block><list><block s="reportVariadicSum"><list><block s="reportVariadicMin"><list><block var="number1"/><block var="number2"/></list></block><block s="reportModulus"><block s="reportVariadicProduct"><list><block s="reportModulus"><block s="reportVariadicProduct"><list><block s="reportVariadicProduct"><list><block s="reportVariadicSum"><list><block s="reportMouseX"></block><l>0.8397844</l></list></block><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportMouseY"></block><l>1.2987</l></list></block><l>0.526</l></block></list></block><block s="reportVariadicProduct"><list><block s="reportQuotient"><block s="reportDate"><l><option>time in milliseconds</option></l></block><l>324895.219831</l></block><block s="reportVariadicProduct"><list><block s="getTimer"></block><l>1.3728646</l></list></block></list></block></list></block><block s="reportMonadic"><l><option>abs</option></l><block s="reportDifference"><block var="number2"/><block var="number1"/></block></block></block><block s="reportRandom"><block var="number1"/><block var="number2"/></block></list></block><block s="reportMonadic"><l><option>abs</option></l><block s="reportDifference"><block var="number2"/><block var="number1"/></block></block></block></list></block></list></block></block></block></block></block></block></script></block-definition><block-definition s="for each %&apos;item&apos; %&apos;index&apos; in %&apos;list&apos; %&apos;command&apos;" type="command" category="lists"><comment x="0" y="0" w="90" collapsed="false">Same as for each item but with a index upvar.</comment><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%upvar"></input><input type="%l"></input><input type="%ca"></input></inputs><script><block s="doFor"><l>i</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><script><block s="doChangeVar"><l>index</l><l>1</l></block><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="index"/><block var="list"/></block></block><block s="doRun"><block var="command"/><list></list></block></script></block></script></block-definition><block-definition s="for each %&apos;item&apos; %&apos;index&apos; %&apos;list&apos; in %&apos;data&apos; %&apos;command&apos;" type="command" category="lists"><comment x="0" y="0" w="90" collapsed="false">Same as for each item but with a index and a list upvar.</comment><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%upvar"></input><input type="%upvar"></input><input type="%l"></input><input type="%ca"></input></inputs><script><block s="doSetVar"><l>list</l><block var="data"/></block><block s="doFor"><l>i</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block><script><block s="doChangeVar"><l>index</l><l>1</l></block><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="index"/><block var="data"/></block></block><block s="doRun"><block var="command"/><list></list></block></script></block></script></block-definition><block-definition s="hypervized pen %&apos;which&apos;" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>size&#xD;hue&#xD;saturation&#xD;brightness&#xD;transparency</options></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportIsA"><block var="which"/><l><option>list</option></l></block><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="hypervized pen %s"><l></l></custom-block></autolambda><list></list></block><block var="which"/></block><block s="evaluate"><block s="reifyReporter"><autolambda><block s="getPenAttribute"><l></l></block></autolambda><list></list></block><list><block var="which"/></list></block></block></block></script></block-definition><block-definition s="hypervized microphone %&apos;which&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">volume<options>volume&#xD;note&#xD;frequency&#xD;samples&#xD;sample rate&#xD;spectrum&#xD;resolution</options></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportIsA"><block var="which"/><l><option>list</option></l></block><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="hypervized microphone %s"><l></l></custom-block></autolambda><list></list></block><block var="which"/></block><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportAudio"><l></l></block></autolambda><list></list></block><list><block var="which"/></list></block></block></block></script></block-definition><block-definition s="hypervized current %&apos;which&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">date<options>year&#xD;month&#xD;date&#xD;day of week&#xD;hour&#xD;minute&#xD;second&#xD;time in milliseconds</options></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportIsA"><block var="which"/><l><option>list</option></l></block><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="hypervized current %s"><l></l></custom-block></autolambda><list></list></block><block var="which"/></block><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportDate"><l></l></block></autolambda><list></list></block><list><block var="which"/></list></block></block></block></script></block-definition><block-definition s="reverse channels in sound %&apos;which sound?&apos;" type="reporter" category="sound"><comment x="0" y="0" w="127" collapsed="false">Reverses channels, making channel 1 will be in what the channel 2 will be and vice versa.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_soundsMenu</options></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block s="reportGetSoundAttribute"><l><option>samples</option></l><block var="which sound?"/></block></block><l>1</l></block><block var="which sound?"/><block s="reportNewSoundFromSamples"><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportGetSoundAttribute"><l><option>samples</option></l><block var="which sound?"/></block></block><block s="reportGetSoundAttribute"><l><option>sample rate</option></l><block var="which sound?"/></block></block></block></block></script></block-definition><block-definition s="days since 2000" type="reporter" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Reports the number of days since 2000.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportDifference"><block s="reportQuotient"><block s="reportDate"><l><option>time in milliseconds</option></l></block><l>86400000</l></block><l>10957.2</l></block></block></script></block-definition><block-definition s="Scratch days" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportDifference"><block s="reportQuotient"><block s="reportDate"><l><option>time in milliseconds</option></l></block><l>86400000</l></block><l>13648.88</l></block></block></script></block-definition><block-definition s="point away from edge" type="command" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doFaceTowards"><l><option>center</option></l></block></script></block-definition><block-definition s="mouse up?" type="predicate" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Checks if the mouse is up.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNot"><block s="reportMouseDown"></block></block></block></script></block-definition><block-definition s="hypervized my %&apos;which&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">neighbors<options>neighbors&#xD;self&#xD;other sprites&#xD;clones&#xD;other clones&#xD;parts&#xD;anchor&#xD;stage&#xD;children&#xD;parent&#xD;temporary?&#xD;name&#xD;costume&#xD;costumes&#xD;sounds&#xD;dangling?&#xD;draggable?&#xD;width&#xD;height&#xD;left&#xD;right&#xD;top&#xD;bottom&#xD;rotation style&#xD;rotation x&#xD;rotation y&#xD;center x&#xD;center y</options></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportIsA"><block var="which"/><l><option>list</option></l></block><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="hypervized my %s"><l></l></custom-block></autolambda><list></list></block><block var="which"/></block><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportGet"><l></l></block></autolambda><list></list></block><list><block var="which"/></list></block></block></block></script></block-definition><block-definition s="stretch costume %&apos;costume&apos; to width: %&apos;width&apos; height: %&apos;height&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_costumesMenu</options></input><input type="%n">50</input><input type="%n">70</input></inputs><script><block s="doReport"><block s="reportNewCostumeStretched"><block var="costume"/><block s="reportVariadicProduct"><list><l>100</l><block s="reportQuotient"><block var="width"/><block s="reportGetImageAttribute"><l><option>width</option></l><block var="costume"/></block></block></list></block><block s="reportVariadicProduct"><list><l>100</l><block s="reportQuotient"><block var="height"/><block s="reportGetImageAttribute"><l><option>height</option></l><block var="costume"/></block></block></list></block></block></block></script></block-definition><block-definition s="hypervized ask %&apos;which sprite&apos; for %&apos;reporter&apos;" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_objectsMenu</options></input><input type="%repRing"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportIsA"><block var="which sprite"/><l><option>list</option></l></block><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="hypervized ask %s for %repRing"><l></l><block var="reporter"/></custom-block></autolambda><list></list></block><block var="which sprite"/></block><block s="reportAskFor"><block var="which sprite"/><block var="reporter"/><list></list></block></block></block></script></block-definition><block-definition s="is %&apos;number&apos; prime?" type="predicate" category="operators"><comment x="0" y="0" w="90" collapsed="false">Check if a number is prime.</comment><header></header><code></code><translations></translations><inputs><input type="%n">11</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>number</l></list><l>function isPrime(num) {&#xD;    if(num instanceof List){&#xD;        return new List(num.asArray().map(isPrime));&#xD;    }&#xD;    if ((num === 2)) {&#xD;        return true;&#xD;    }&#xD;    if ((num &lt; 2 || num % 2 === 0)) {&#xD;        return false;&#xD;    }&#xD;    for (var i = 3; i &lt;= (Math.sqrt(num)); i += 2) {&#xD;        if (((num % i) === 0)) {&#xD;            return false;&#xD;        }&#xD;    }&#xD;    return true;&#xD;}&#xD;return isPrime(number);</l></block><list><block var="number"/></list></block></block></script></block-definition><block-definition s="generate primes with numbers from %&apos;start number&apos; to %&apos;end number&apos;" type="reporter" category="lists"><comment x="0" y="0" w="165" collapsed="false">Generates a list with prime numbers from the start number to the end number.</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">10</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>startNumber</l><l>endNumber</l></list><l>function isprime(num){&#xD;    if ((num === 2)) {&#xD;        return true;&#xD;    }&#xD;    if ((num &lt; 2 || num % 2 === 0)) {&#xD;        return false;&#xD;    }&#xD;    for (var i = 3; i &lt;= (Math.sqrt(num)); i += 2) {&#xD;        if (((num % i) === 0)) {&#xD;            return false;&#xD;        }&#xD;    }&#xD;    return true;&#xD;}&#xD;&#xD;function getListOfPrimes(startnum,endnum) {&#xD;    if(startnum instanceof List &amp;&amp; endnum instanceof List) {&#xD;        startnum = startnum.asArray();&#xD;        endnum = endnum.asArray();&#xD;        if(startnum.length &gt; endnum.length) {&#xD;            return new List(endnum.map((value, index) =&gt; getListOfPrimes(startnum[index],value)));&#xD;        } else {&#xD;            return new List(startnum.map((value, index) =&gt; getListOfPrimes(value,endnum[index])));&#xD;        }&#xD;    }&#xD;    if(startnum instanceof List) {&#xD;        return new List(startnum.asArray().map((value) =&gt; getListOfPrimes(value,endnum)));&#xD;    }&#xD;    if(endnum instanceof List) {&#xD;        return new List(endnum.asArray().map((value) =&gt; getListOfPrimes(startnum,value)));&#xD;    }&#xD;    var primes = [];&#xD;    if (startnum &gt; endnum) {&#xD;        for (var number = endnum; number &gt;= startnum; number--) {&#xD;            if ((isprime(number))) {&#xD;                primes.push(number);&#xD;            }&#xD;        }&#xD;    }&#xD;    else {&#xD;        for (var number = startnum; number &lt;= endnum; number++) {&#xD;            if ((isprime(number))) {&#xD;                primes.push(number);&#xD;            }&#xD;        }&#xD;    }&#xD;    return new List(primes);&#xD;}&#xD;&#xD;return getListOfPrimes(startNumber,endNumber);</l></block><list><block var="start number"/><block var="end number"/></list></block></block></script></block-definition><block-definition s="hypervized %&apos;which effect&apos; effect" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">ghost<options>color&#xD;saturation&#xD;brightness&#xD;ghost&#xD;fisheye&#xD;whirl&#xD;pixelate&#xD;mosaic&#xD;negative</options></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportIsA"><block var="which effect"/><l><option>list</option></l></block><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="hypervized %s effect"><l></l></custom-block></autolambda><list></list></block><block var="which effect"/></block><block s="evaluate"><block s="reifyReporter"><autolambda><block s="getEffect"><l></l></block></autolambda><list></list></block><list><block var="which effect"/></list></block></block></block></script></block-definition><block-definition s="%&apos;data&apos; .asArray()" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>list</l></list><l>return list.asArray()</l></block><list><block var="data"/></list></block></block></script></block-definition><block-definition s="Javascript shuffle %&apos;old list&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Javascript version.&#xD;Creates a list with out of order items.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>oldarray</l></list><l>var newarray = [];&#xD;var oldarray = oldarray.asArray(); &#xD;var item,index;&#xD;while((oldarray.length) !== 0) {&#xD;    index = Math.floor(Math.random() * oldarray.length);&#xD;    item = oldarray[index]&#xD;    newarray.push(item);&#xD;    oldarray.splice(index, 1)&#xD;}&#xD;return new List(newarray);</l></block><list><block var="old list"/></list></block></block></script></block-definition><block-definition s="compress %&apos;uncompressed list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>old item</l><l>index</l><l>new list</l><l>index zipped</l></list></block><block s="doSetVar"><l>new list</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doSetVar"><l>index zipped</l><l>0</l></block><block s="doForEach"><l>item</l><block var="uncompressed list"/><script><block s="doIfElse"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportNotEquals"><block var="item"/><block var="old item"/></block></block><script><block s="doAddToList"><block s="reportNewList"><list><block var="item"/><l>1</l></list></block><block var="new list"/></block><block s="doChangeVar"><l>index zipped</l><l>1</l></block></script><script><block s="doReplaceInList"><l>2</l><block s="reportListItem"><block var="index zipped"/><block var="new list"/></block><block s="reportVariadicSum"><list><block s="reportListItem"><l>2</l><block s="reportListItem"><block var="index zipped"/><block var="new list"/></block></block><l>1</l></list></block></block></script></block><block s="doSetVar"><l>old item</l><block var="item"/></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doReport"><block var="new list"/></block></script></block></script></block-definition><block-definition s="decompress %&apos;compressed list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportConcatenatedLists"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><block var="value"/></block></autolambda><list></list></block><block s="reportNumbers"><l>1</l><block s="reportListItem"><l>2</l><block var="value"/></block></block></block></autolambda><list><l>value</l></list></block><block var="compressed list"/></block></block></block></script></block-definition><block-definition s="deep %&apos;data&apos; .asArray()" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>list</l></list><l>function deepAsArray(array){&#xD;    if(array instanceof List){&#xD;        return array.asArray().map(deepAsArray);&#xD;    }&#xD;    return array;&#xD;}&#xD;&#xD;&#xD;return deepAsArray(list)</l></block><list><block var="data"/></list></block></block></script></block-definition><block-definition s="freeze for %&apos;seconds&apos; seconds" type="command" category="control"><comment x="0" y="0" w="90" collapsed="false">Freezes Snap! for the specified amount of seconds.</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>milliseconds</l></list><l>var timeToEnd = Date.now() + milliseconds;&#xD;while(Date.now() &lt; timeToEnd) {&#xD;}</l></block><list><block s="reportVariadicProduct"><list><block var="seconds"/><l>1000</l></list></block></list></block></script></block-definition><block-definition s="get prime tree of %&apos;number&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">20</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>number</l></list><l>function primeTree(num){&#xD;    if(num instanceof List){&#xD;        return new List(num.asArray().map(primeTree))&#xD;    }&#xD;    if(num &lt;= 3){&#xD;        return num&#xD;    }&#xD;    &#xD;    if(num % 2 === 0){&#xD;        return "2*" + primeTree(num / 2)&#xD;    }&#xD;&#xD;    for(i = 3; i &lt; num; i += 2){&#xD;        if(num % i === 0){&#xD;            return i + "*" + primeTree(num / i)&#xD;        }&#xD;    }&#xD;    return num&#xD;}&#xD;return primeTree(number)</l></block><list><block var="number"/></list></block></block></script></block-definition><block-definition s="throw new %&apos;error&apos; ( %&apos;input text&apos; )" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">Error<options>Error&#xD;TypeError&#xD;RangeError&#xD;ReferenceError&#xD;SyntaxError&#xD;EvalError&#xD;URIError</options></input><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><block s="reportJoinWords"><list><l>throw new </l><block var="error"/><l>("</l><block var="input text"/><l>")</l></list></block></block><list></list></block></script></block-definition><block-definition s="pause all sounds" type="command" category="sound"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>stage</l></list><l>stage.pauseAllActiveSounds()</l></block><list><block s="reportGet"><l><option>stage</option></l></block></list></block></script></block-definition><block-definition s="resume all sounds" type="command" category="sound"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>stage</l></list><l>stage.resumeAllActiveSounds()</l></block><list><block s="reportGet"><l><option>stage</option></l></block></list></block></script></block-definition><block-definition s="%&apos;percentage&apos; % of %&apos;number&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">50</input><input type="%n">20</input></inputs><script><block s="doReport"><block s="reportVariadicProduct"><list><block var="number"/><block s="reportQuotient"><block var="percentage"/><l>100</l></block></list></block></block></script></block-definition><block-definition s="cube root of %&apos;number&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">10</input></inputs><script><block s="doReport"><block s="reportPower"><block var="number"/><l>0.3333333333333333</l></block></block></script></block-definition><block-definition s="is %&apos;number&apos; a perfect square?" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">9</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>number</l></list><l>function hyperIsPerfectSquare(num){&#xD;    if(num instanceof List){&#xD;        return new List(num.asArray().map(hyperIsPerfectSquare));&#xD;    }&#xD;    return Math.sqrt(num) % 1 === 0;&#xD;}&#xD;return hyperIsPerfectSquare(number);</l></block><list><block var="number"/></list></block></block></script><scripts><script x="10" y="210.49999999999994"><block s="reportIfElse"><block s="reportIsA"><block var="number"/><l><option>list</option></l></block><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="is %n a perfect square?"><l></l></custom-block></autolambda><list></list></block><block var="number"/></block><block s="reportEquals"><block s="reportModulus"><block s="reportMonadic"><l><option>sqrt</option></l><block var="number"/></block><l>1</l></block><l>0</l></block></block></script></scripts></block-definition><block-definition s="mean of %&apos;numbers&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input></inputs><script><block s="doReport"><block s="reportQuotient"><block s="reportCombine"><block var="numbers"/><block s="reifyReporter"><autolambda><block s="reportVariadicSum"><list><l></l><l></l></list></block></autolambda><list></list></block></block><block s="reportListAttribute"><l><option>length</option></l><block var="numbers"/></block></block></block></script></block-definition><block-definition s="median of %&apos;numbers&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block s="reportModulus"><block s="reportListAttribute"><l><option>length</option></l><block var="numbers"/></block><l>2</l></block><l>0</l></block><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportListItem"><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="numbers"/></block><l>2</l></block><block var="numbers"/></block><block s="reportListItem"><block s="reportVariadicSum"><list><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="numbers"/></block><l>2</l></block><l>1</l></list></block><block var="numbers"/></block></list></block><l>2</l></block><block s="reportListItem"><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="numbers"/></block><l>2</l></block><block var="numbers"/></block></block></block></script></block-definition><block-definition s="ratio percentages of %&apos;numbers&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input></inputs><script><block s="doReport"><block s="reportVariadicProduct"><list><block s="reportQuotient"><block var="numbers"/><block s="reportCombine"><block var="numbers"/><block s="reifyReporter"><autolambda><block s="reportVariadicSum"><list><l></l><l></l></list></block></autolambda><list></list></block></block></block><l>100</l></list></block></block></script></block-definition><block-definition s="console. %&apos;console function&apos; ( %&apos;message input&apos; )" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">log<options>log&#xD;warn&#xD;error&#xD;debug&#xD;info</options></input><input type="%s">hello world</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><block s="reportJoinWords"><list><l>console.</l><block var="console function"/><l>("</l><block var="message input"/><l>")</l></list></block></block><list></list></block></script></block-definition><block-definition s="am a clone?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNotEquals"><block s="reportGet"><l><option>parent</option></l></block><l></l></block></block></script><scripts><script x="22" y="213.16666666666686"><block s="reportIfElse"><l/><l></l><l></l></block></script></scripts></block-definition><block-definition s="Change item %&apos;item number&apos; of %&apos;input list&apos; by %&apos;what number&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%n">1<options>1&#xD;last&#xD;random</options></input><input type="%l"></input><input type="%n">1</input></inputs><script><block s="doReplaceInList"><block var="item number"/><block var="input list"/><block s="reportVariadicSum"><list><block s="reportListItem"><block var="item number"/><block var="input list"/></block><block var="what number"/></list></block></block></script></block-definition><block-definition s="filled costume %&apos;width&apos; × %&apos;height&apos; colored %&apos;color&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">80</input><input type="%n">100</input><input type="%clr"></input></inputs><script><block s="doReport"><block s="reportNewCostumeStretched"><block s="reportNewCostume"><block s="reportNewList"><list><block s="evaluate"><block s="reportJSFunction"><list><l>color</l></list><l>return new List([&#xD; color.r,&#xD; color.g,&#xD; color.b,&#xD;     255]);</l></block><list><block var="color"/></list></block></list></block><l>1</l><l>1</l></block><block s="reportVariadicProduct"><list><block var="width"/><l>100</l></list></block><block s="reportVariadicProduct"><list><block var="height"/><l>100</l></list></block></block></block></script></block-definition><block-definition s="alter speed of sound %&apos;sound&apos; by %&apos;percent&apos; %" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_soundsMenu</options></input><input type="%n">50</input></inputs><script><custom-block s="let %upvar be %s"><l>result</l><block s="reportNewSoundFromSamples"><block s="reportGetSoundAttribute"><l><option>samples</option></l><block var="sound"/></block><block s="reportVariadicProduct"><list><block s="reportGetSoundAttribute"><l><option>sample rate</option></l><block var="sound"/></block><block s="reportQuotient"><block s="reportRound"><block s="reportVariadicProduct"><list><block s="reportDifference"><block s="reportQuotient"><block s="reportVariadicSum"><list><block var="percent"/><l>100</l></list></block><l>100</l></block><l>1</l></block><block s="reportPower"><l>10</l><l>15</l></block></list></block></block><block s="reportPower"><l>10</l><l>15</l></block></block></list></block></block></custom-block><block s="doRun"><block s="reportJSFunction"><list><l>snd</l><l>name</l></list><l>snd.name = name;</l></block><list><block var="result"/><block s="reportGetSoundAttribute"><l><option>name</option></l><block var="sound"/></block></list></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="current os" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>var userAgent = navigator.userAgent,&#xD;      platform = navigator.platform,&#xD;      macosPlatforms = [&apos;Macintosh&apos;, &apos;MacIntel&apos;, &apos;MacPPC&apos;, &apos;Mac68K&apos;],&#xD;      windowsPlatforms = [&apos;Win32&apos;, &apos;Win64&apos;, &apos;Windows&apos;, &apos;WinCE&apos;],&#xD;      iosPlatforms = [&apos;iPhone&apos;, &apos;iPad&apos;, &apos;iPod&apos;],&#xD;      os = null;&#xD;&#xD;  if (macosPlatforms.indexOf(platform) !== -1) {&#xD;    os = &apos;Mac OS&apos;;&#xD;  } else if (iosPlatforms.indexOf(platform) !== -1) {&#xD;    os = &apos;iOS&apos;;&#xD;  } else if (windowsPlatforms.indexOf(platform) !== -1) {&#xD;    os = &apos;Windows&apos;;&#xD;  } else if (/Android/.test(userAgent)) {&#xD;    os = &apos;Android&apos;;&#xD;  } else if (!os &amp;&amp; /Linux/.test(platform)) {&#xD;    os = &apos;Linux&apos;;&#xD;  }&#xD;&#xD;  return os;</l></block><list></list></block></block></script></block-definition><block-definition s="right mouse down?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportEquals"><custom-block s="mouse button"></custom-block><l>2</l><comment w="90" collapsed="false">You can modify this script to 1, 3, or 4 to detect different buttons.</comment></block></block></script></block-definition><block-definition s="mouse button" type="reporter" category="sensing"><comment x="0" y="0" w="274" collapsed="false">Reports the currently pressed mouse button&apos;s ID (i.e. middle click is 1, right-click is 2). If no buttons are currently being pressed, it will report -1. If multiple are pressed at once, it will report the ID of the button most recently pressed. This doesn&apos;t work for left clicks, however. For that you need to use &apos;mouse down?&apos;.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>if (!window.buttonClicked){&#xD;window.buttonClicked = -1;&#xD;window.onmousedown = e =&gt; buttonClicked = e.button;&#xD;window.onmouseup = e =&gt; buttonClicked = -1;&#xD;}&#xD;return buttonClicked || -1;</l></block><list></list></block></block></script></block-definition><block-definition s="export costume %&apos;costume&apos; named %&apos;name&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_costumesMenu</options></input><input type="%s">costume</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l></list><l>if (costume instanceof List) throw new Error(`Costume exporting does&#xD;not currently support lists`);&#xD;if (costume == &apos;&apos; || (!(costume instanceof Costume) &amp;&amp; !(this.costumes&#xD;.itemsArray().map(e =&gt; e.name).includes(costume)))) throw new Error("Not a Costume");</l></block><list><block var="costume"/></list></block><block s="doSetVar"><l>costume</l><block s="reportNewCostumeStretched"><block var="costume"/><l>100</l><l>100</l></block></block><block s="doRun"><block s="reportJSFunction"><list><l>costume, name</l></list><l>if (!(costume instanceof Costume)) throw new Error("Not a Costume");&#xD;&#xD;var data = costume.contents.toDataURL(),&#xD;    lnk = document.createElement("a");&#xD;lnk.download = name;&#xD;lnk.href = data;&#xD;lnk.click();</l></block><list><block var="costume"/><block var="name"/></list></block></script></block-definition><block-definition s="export sound %&apos;sound&apos; named %&apos;name&apos;" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_soundsMenu</options></input><input type="%s">sound</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>sound, name</l></list><l>var lnk = document.createElement("a");&#xD;lnk.href = sound.audio.src;&#xD;lnk.download = name;&#xD;lnk.click();</l></block><list><block s="reportIfElse"><block s="reportIsA"><block var="sound"/><l><option>sound</option></l></block><block var="sound"/><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportGetSoundAttribute"><l><option>name</option></l><l></l></block><block var="sound"/></block></autolambda><list></list></block><block s="reportGet"><l><option>sounds</option></l></block></block></block><block var="name"/></list></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.66666666666663" collapsed="false">Allows changing global settings programmatically.&#xD;This block is for Boolean settings; use &apos;set value&apos; for non-Boolean values.</comment><header></header><code></code><translations>pt:altera o valor da configuração _ para _&#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.66666666666663" collapsed="false">Allows changing global settings programmatically.&#xD;This block is for numeric or text settings; use&#xD;&apos;set flag&apos; for Boolean values.</comment><header></header><code></code><translations>pt:altera o valor da configuração _ para _&#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.split(&apos;&apos;)[0].toLocaleUpperCase()+which.slice(1)) {&#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="my scripts" type="reporter" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Reports all the current sprite&apos;s scripts in a list.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return new List(this.scripts.children.map(&#xD;function (e) {if (e instanceof RingMorph){&#xD;return new Context(null,[e]);&#xD;} else {&#xD;return new Context(null,e.fullCopy());}&#xD;}).filter(function (e) {&#xD;return !(e.expression instanceof CommentMorph);}));</l></block><list></list></block></block></script></block-definition><block-definition s="$flag-1.3-0-200-15 restart all" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doStopThis"><l><option>all but this script</option></l></block><block s="doBroadcast"><l><option>__shout__go__</option></l><list></list></block><block s="doStopThis"><l><option>this script</option></l></block></script></block-definition><block-definition s="alter costume %&apos;costume&apos; r: %&apos;r&apos; g: %&apos;g&apos; b: %&apos;b&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_costumesMenu</options></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>c</l></list></block><block s="doSetVar"><l>c</l><block s="reportIfElse"><block s="reportIsA"><block var="costume"/><l><option>list</option></l></block><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportGetImageAttribute"><l><option>pixels</option></l><l></l></block><block var="costume"/></block></autolambda><list></list></block><block s="reportGet"><l><option>costumes</option></l></block></block><block var="costume"/></block></block><block s="doReport"><block s="reportNewCostume"><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l></l><block s="reportQuotient"><block s="reportNewList"><list><block var="r"/><block var="g"/><block var="b"/><l>100</l></list></block><l>100</l></block></list></block></autolambda><list></list></block><list><block s="reportIfElse"><block s="reportIsA"><block var="costume"/><l><option>list</option></l></block><block var="costume"/><block s="reportGetImageAttribute"><l><option>pixels</option></l><block var="costume"/></block></block></list></block><block s="reportGetImageAttribute"><l><option>width</option></l><block var="c"/></block><block s="reportGetImageAttribute"><l><option>height</option></l><block var="c"/></block></block></block></script></block-definition><block-definition s="file save prompt name: %&apos;filename&apos; $nl contents: %&apos;body&apos; extension: %&apos;extension&apos;" type="command" category="other"><comment x="0" y="0" w="260.350692471591" collapsed="false">Downloads a file onto the user&apos;s computer.&#xD;URLs are supported, and required for PNG images and possibly other extensions.&#xD;&#xD;Update: Now supports backslashing of URLs to instead get a file with the URL as its binary contents. Not sure why you&apos;d want that though.</comment><header></header><code></code><translations></translations><inputs><input type="%s">filename</input><input type="%mlt">body</input><input type="%s">.txt<options>.txt&#xD;.xml&#xD;.html</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>contents</l><l>filename</l><l>ext</l></list><l>var pattern = new RegExp(&apos;^(https?:\\/\\/)?&apos;+ // protocol&#xD;    &apos;((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|&apos;+ // domain name&#xD;    &apos;((\\d{1,3}\\.){3}\\d{1,3}))&apos;+ // OR ip (v4) address&#xD;    &apos;(\\:\\d+)?(\\/[-a-z\\d%_.&#126;+]*)*&apos;+ // port and path&#xD;    &apos;(\\?[;&amp;a-z\\d%_.&#126;+=-]*)?&apos;+ // query string&#xD;    &apos;(\\#[-a-z\\d_]*)?$&apos;,&apos;i&apos;); // fragment locator&#xD;if (ext[0] != &apos;.&apos;)&#xD;ext = &apos;.&apos;+ext;&#xD;var lnk = document.createElement(&apos;a&apos;),&#xD;    blob = new Blob([contents]);&#xD;if (pattern.test(contents) || (pattern.test(contents.slice(1)) &amp;&amp;&#xD;pattern[0] == &apos;\\&apos;)){&#xD;lnk.href = contents;&#xD;} else {&#xD;lnk.href = (window.URL||window.webkitURL).createObjectURL(blob);}&#xD;lnk.download = filename + ext;&#xD;lnk.click();</l></block><list><block var="body"/><block var="filename"/><block var="extension"/></list></block></script></block-definition><block-definition s="%&apos;w&apos; flip costume %&apos;cos&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">horizontal<options>horizontal&#xD;vertical</options></input><input type="%s" readonly="true">current<options>§_costumesMenu</options></input></inputs><script><block s="doDeclareVariables"><list><l>costume</l></list></block><block s="doSetVar"><l>costume</l><l></l></block><block s="doIf"><block s="reportEquals"><block var="w"/><l>horizontal</l></block><script><block s="doSetVar"><l>costume</l><block s="reportNewCostumeStretched"><block var="cos"/><l>-100</l><l>100</l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="w"/><l>vertical</l></block><script><block s="doSetVar"><l>costume</l><block s="reportNewCostumeStretched"><block var="cos"/><l>100</l><l>-100</l></block></block></script></block><block s="doRun"><block s="reportJSFunction"><list><l>cst</l><l>n</l></list><l>cst.name = n;</l></block><list><block var="costume"/><block s="reportGetImageAttribute"><l><option>name</option></l><block var="cos"/></block></list></block><block s="doReport"><block var="costume"/></block></script></block-definition><block-definition s="speech bubble contents" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>if(this instanceof StageMorph){&#xD;throw new TypeError("Cannot read property \&#xD;&apos;apply&apos; of undefined");}&#xD;var contents = this.talkBubble();&#xD;if (!contents) return &apos;&apos;;&#xD;contents = contents.contentsMorph;&#xD;if (!(contents instanceof TextMorph))&#xD;return contents;&#xD;return contents.text;</l></block><list></list></block></block></script></block-definition><block-definition s="send notification $nl $- title: %&apos;title&apos; $nl $- text: %&apos;text&apos; $nl $- icon: %&apos;costume&apos; $nl $- image: %&apos;img&apos; $nl $- onclick: %&apos;code&apos;" type="command" category="sensing"><comment x="0" y="0" w="198" collapsed="false">Sends a notification to the user&apos;s device.&#xD;The icon/image parameters take a costume as input and the onclick parameter takes a JavaScript or Snap! function.</comment><header></header><code></code><translations></translations><inputs><input type="%s">Hi there!</input><input type="%txt">How are you today?</input><input type="%s" readonly="true">current<options>§_costumesMenu</options></input><input type="%s" readonly="true"><options>§_costumesMenu</options></input><input type="%cmdRing">this.close();</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>title</l><l>body</l><l>icon</l><l>img</l><l>onclick</l></list><l>if (!("Notification" in window)) console.error("\&#xD;Error", "The notification API is not supported on\n\&#xD;your browser!");&#xD;icon = icon.contents.toDataURL();&#xD;img = img.contents.toDataURL();&#xD;var noti = new Notification(title || "Hi there!",&#xD;{body: body || "How are you today?",&#xD;icon: icon || null,&#xD;image: img || null});&#xD;if (onclick instanceof Function){&#xD;noti.onclick = onclick;&#xD;} else {&#xD;noti.onclick = function () {&#xD;invoke(onclick, new List);&#xD;}}</l></block><list><block var="title"/><block var="text"/><block s="reportNewCostumeStretched"><block var="costume"/><l>100</l><l>100</l></block><block s="reportNewCostumeStretched"><block var="img"/><l>100</l><l>100</l></block><block var="code"/></list></block></script></block-definition><block-definition s="set cursor %&apos;which&apos;" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">Update: Now accepts URLs!</comment><header></header><code></code><translations></translations><inputs><input type="%s">pointer<options>auto&#xD;cell&#xD;copy&#xD;crosshair&#xD;default&#xD;grab&#xD;grabbing&#xD;help&#xD;move&#xD;not-allowed&#xD;pointer&#xD;progress&#xD;text&#xD;wait&#xD;n-resize&#xD;s-resize&#xD;e-resize&#xD;w-resize&#xD;ne-resize&#xD;se-resize&#xD;nw-resize&#xD;sw-resize</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>cur</l><l>proc</l></list><l>function setTo(val){&#xD;document.body.style.cursor = val;&#xD;top.window.document.body.style.cursor = val;&#xD;}&#xD;if (cur instanceof Costume || this.costumes.asArray().map(e=&gt;e.name).includes(cur) || cur===&apos;current&apos;){&#xD;alert("Sorry, costumes don&apos;t work very well for custom cursors at the moment.");&#xD;return;&#xD;let c = newCanvas(),ctx=c.getContext(&apos;2d&apos;);&#xD;cur=proc.reportNewCostumeStretched(cur, 100, 100);&#xD;c.width = cur.width();&#xD;c.height = cur.height();&#xD;ctx.drawImage(cur.contents, 0, 0);&#xD;setTo(&apos;url("&apos;+c.toDataURL()+&apos;"), auto&apos;);&#xD;} else if (`auto&#xD;cell&#xD;copy&#xD;crosshair&#xD;default&#xD;grab&#xD;grabbing&#xD;help&#xD;move&#xD;not-allowed&#xD;pointer&#xD;progress&#xD;text&#xD;wait&#xD;n-resize&#xD;s-resize&#xD;e-resize&#xD;w-resize&#xD;ne-resize&#xD;se-resize&#xD;nw-resize&#xD;sw-resize`.split(&apos;\n&apos;).includes(cur)){&#xD;setTo(cur);&#xD;}else{&#xD;setTo(&apos;url("&apos;+cur+&apos;"),auto&apos;);&#xD;}</l></block><list><block var="which"/></list></block></script></block-definition><block-definition s="# %&apos;comment&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%mlt">comment...</input></inputs></block-definition><block-definition s="notifications allowed?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return [&apos;granted&apos;,&apos;prompt&apos;]&#xD;.includes(Notification.permission);</l></block><list></list></block></block></script></block-definition><block-definition s="root object" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportNot"><custom-block s="am I a clone?"></custom-block></block><block s="reportObject"><l><option>myself</option></l></block><block s="reportAskFor"><block s="reportGet"><l><option>parent</option></l></block><block s="reifyReporter"><autolambda><custom-block s="root object"></custom-block></autolambda><list></list></block><list></list></block></block></block></script></block-definition><block-definition s="costume from url %&apos;url&apos;" type="reporter" category="looks"><comment x="0" y="0" w="96.36363636363625" collapsed="false">Credit to @programmer_user and @jens</comment><header></header><code></code><translations></translations><inputs><input type="%s">Costumes/alonzo.png<options>function () {&#xD;var obj = {};&#xD;world.children[0].getMediaList(&apos;Costumes&apos;).forEach(image =&gt; {&#xD;obj[image.name] = &apos;Costumes/&apos; + image.fileName;&#xD;})&#xD;return obj;&#xD;}</options></input></inputs><script><custom-block s="let %upvar be %s"><l>costume</l><block s="evaluate"><block s="reportJSFunction"><list><l>url</l></list><l>var img = new Image(),&#xD;    cst = null,&#xD;    canvas;&#xD;img.onload = function() {&#xD;    canvas = document.createElement(&apos;canvas&apos;);&#xD;    canvas.width = img.width;&#xD;    canvas.height = img.height;&#xD;    canvas.getContext(&apos;2d&apos;).drawImage(img, 0, 0);&#xD;    cst = new Costume(canvas);&#xD;}&#xD;img.crossOrigin = &apos;anonymous&apos;;&#xD;img.src = url;&#xD;return () =&gt; cst;</l></block><list><block var="url"/></list></block></custom-block><block s="doWaitUntil"><block s="evaluate"><block var="costume"/><list></list></block></block><block s="doReport"><block s="evaluate"><block var="costume"/><list></list></block></block></script></block-definition><block-definition s="window %&apos;which&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">title<options>url=href&#xD;hash&#xD;title&#xD;origin</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>which</l></list><l>if (which == &apos;title&apos;)&#xD;return document.title;&#xD;return location[which] || &apos;&apos;;</l></block><list><block var="which"/></list></block></block></script></block-definition><block-definition s="set window %&apos;which&apos; to %&apos;data&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">title<options>title&#xD;location</options></input><input type="%s">Snap!</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>which</l><l>data</l></list><l>switch (which) {&#xD;case &apos;title&apos;:&#xD;document.title = data;&#xD;break;&#xD;case &apos;location&apos;:&#xD;location.href = data;&#xD;break;&#xD;}</l></block><list><block var="which"/><block var="data"/></list></block></script></block-definition><block-definition s="safely try %&apos;action&apos; then if %&apos;error&apos; %&apos;handler&apos;" type="command" category="control"><comment x="0" y="0" w="276" collapsed="false">Catch errors.&#xD;&#xD;Runs the first script.  If it succeeds, nothing else happens.&#xD;But if it has an error (something that would otherwise result&#xD;in a red halo around the block), then the second script is run,&#xD;with the text of the error message that would have been shown in the variable ERROR.</comment><header></header><code></code><translations>pt:tenta executar _ e, em caso de erro _ , executa _&#xD;</translations><inputs><input type="%cs"></input><input type="%upvar"></input><input type="%cs"></input></inputs><script><custom-block s="let %upvar be %s"><l>reset</l><block s="evaluate"><block s="reportJSFunction"><list><l>proc</l></list><l>var oldHandleError = proc.handleError,&#xD;    oldCatchingErrors = proc.isCatchingErrors;&#xD;&#xD;return function(){&#xD; proc.handleError = oldHandleError;&#xD; proc.isCatchingErrors = oldCatchingErrors;&#xD;}</l></block><list></list></block></custom-block><block s="doCallCC"><block s="reifyScript"><script><block s="doRun"><block s="reportJSFunction"><list><l>reset</l><l>action</l><l>handler</l><l>proc</l></list><l>proc.isCatchingErrors = true;&#xD;proc.handleError = function(error, element){&#xD; reset();&#xD; proc.context = handler;&#xD; proc.context.variables.setVar("error", &#xD; String(error));&#xD;}&#xD;&#xD;try{&#xD; proc.evaluate(action, new List(), true);&#xD;}&#xD;catch(e){&#xD; proc.handleError(e, null);&#xD;} </l></block><list><block var="reset"/><block var="action"/><block s="reifyScript"><script><block s="doRun"><block s="reifyScript"><script><block s="doRun"><block var="handler"/><list></list></block><block s="doRun"><block var="return"/><list></list></block></script><list></list></block><list></list></block></script><list></list></block></list></block></script><list><l>return</l></list></block></block><block s="doRun"><block var="reset"/><list></list></block></script></block-definition><block-definition s="inform %&apos;body&apos; titled %&apos;title&apos;" type="command" category="sensing"><comment x="0" y="0" w="90" collapsed="false">These blocks are obsolete, use the CUSTOM DIALOG block instead.</comment><header></header><code></code><translations></translations><inputs><input type="%s">This is some content!</input><input type="%s">!</input></inputs><script><custom-block s="let %upvar be %s"><l>test</l><block s="evaluate"><block s="reportJSFunction"><list><l>body</l><l>title</l></list><l>var dialog = new DialogBoxMorph(),&#xD;    isDone = false;&#xD;dialog.destroy = function() {&#xD;    isDone = true;&#xD;    var world = this.world();&#xD;    world.keyboardFocus = null;&#xD;    world.hand.destroyTemporaries();&#xD;    DialogBoxMorph.uber.destroy.call(this);&#xD;}&#xD;dialog.inform(title, body, this.world());&#xD;return () =&gt; (isDone);</l></block><list><block var="body"/><block var="title"/></list></block></custom-block><block s="doWaitUntil"><block s="evaluate"><block var="test"/><list></list></block></block></script></block-definition><block-definition s="send %&apos;data&apos; to clipboard" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>textInput</l></list><l>navigator.clipboard.writeText(textInput);</l></block><list><block var="data"/></list></block></script></block-definition><block-definition s="confirm %&apos;body&apos; titled %&apos;title&apos;" type="predicate" category="sensing"><comment x="0" y="0" w="90" collapsed="false">These blocks are obsolete, use the CUSTOM DIALOG block instead.</comment><header></header><code></code><translations></translations><inputs><input type="%s">Are you sure?</input><input type="%s">?</input></inputs><script><custom-block s="let %upvar be %s"><l>accessors</l><block s="evaluate"><block s="reportJSFunction"><list><l>body</l><l>title</l></list><l>var dialog = new DialogBoxMorph(),&#xD;    isDone = false,&#xD;    result = false;&#xD;dialog.destroy = function() {&#xD;    isDone = true;&#xD;    result = this.buttons.children[0].userState &#xD;    != &apos;normal&apos;;&#xD;    var world = this.world();&#xD;    world.keyboardFocus = null;&#xD;    world.hand.destroyTemporaries();&#xD;    DialogBoxMorph.uber.destroy.call(this);&#xD;}&#xD;dialog.askYesNo(title, body, this.world());&#xD;return new List([() =&gt; isDone, () =&gt; result]);</l></block><list><block var="body"/><block var="title"/></list></block></custom-block><block s="doWaitUntil"><block s="evaluate"><block s="reportListItem"><l>1</l><block var="accessors"/></block><list></list></block></block><block s="doReport"><block s="evaluate"><block s="reportListItem"><l>2</l><block var="accessors"/></block><list></list></block></block></script></block-definition><block-definition s="prompt %&apos;title&apos; default %&apos;default&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="90" collapsed="false">These blocks are obsolete, use the EDIT BOX block instead.</comment><header></header><code></code><translations></translations><inputs><input type="%s">What&apos;s your name?</input><input type="%s">John Doe</input></inputs><script><custom-block s="let %upvar be %s"><l>accessors</l><block s="evaluate"><block s="reportJSFunction"><list><l>origin</l><l>title</l></list><l>var dialog = new DialogBoxMorph(),&#xD;    isDone = false,&#xD;    result = false;&#xD;dialog.destroy = function () {&#xD;    isDone = true;&#xD;    result = this.buttons.children[1].userState&#xD;    == &apos;highlight&apos;? false:this.getInput();&#xD;    var world = this.world();&#xD;    world.keyboardFocus = null;&#xD;    world.hand.destroyTemporaries();&#xD;    DialogBoxMorph.uber.destroy.call(this);&#xD;}&#xD;dialog.prompt(title, origin, this.world());&#xD;return new List([() =&gt; isDone, () =&gt; result]);</l></block><list><block var="default"/><block var="title"/></list></block></custom-block><block s="doWaitUntil"><block s="evaluate"><block s="reportListItem"><l>1</l><block var="accessors"/></block><list></list></block></block><block s="doReport"><block s="evaluate"><block s="reportListItem"><l>2</l><block var="accessors"/></block><list></list></block></block></script></block-definition><block-definition s="multiline %&apos;s&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mlt">Hello!&#xD;How are you?&#xD;Are you okay?</input></inputs><script><block s="doReport"><block var="s"/></block></script></block-definition><block-definition s="%&apos;which&apos; string %&apos;data&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">uppercase<options>uppercase&#xD;lowercase&#xD;capitalize&#xD;line capitalize&#xD;full capitalize</options></input><input type="%s">Pink girl</input></inputs><script><block s="doIf"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="%s string %s"><block var="which"/><l></l></custom-block></autolambda><list></list></block><block var="data"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="which"/><l>uppercase</l></block><script><custom-block s="let %upvar be %s"><l>upper</l><block s="reportUnicodeAsLetter"><block s="reportDifference"><block s="reportUnicode"><custom-block s="constant %s"><l>latin alphabet</l></custom-block></block><l>32</l></block></block></custom-block><block s="doReport"><block s="reportJoinWords"><list><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportNot"><block s="reportListContainsItem"><custom-block s="constant %s"><l>latin alphabet</l></custom-block><l></l></block></block><l></l><block s="reportListItem"><block s="reportListIndex"><l></l><block var="upper"/></block><block var="upper"/></block></block></autolambda><list></list></block><block s="reportTextSplit"><block var="data"/><l><option>letter</option></l></block></block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="which"/><l>lowercase</l></block><script><block s="doReport"><block s="reportJoinWords"><list><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportNot"><block s="reportListContainsItem"><custom-block s="constant %s"><l>latin alphabet</l></custom-block><l></l></block></block><l></l><block s="reportListItem"><block s="reportListIndex"><l></l><custom-block s="constant %s"><l>latin alphabet</l></custom-block></block><custom-block s="constant %s"><l>latin alphabet</l></custom-block></block></block></autolambda><list></list></block><block s="reportTextSplit"><block var="data"/><l><option>letter</option></l></block></block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="which"/><l>capitalize</l></block><script><block s="doReport"><block s="reportJoinWords"><list><custom-block s="%s string %s"><l>uppercase</l><block s="reportLetter"><l>1</l><block var="data"/></block></custom-block><custom-block s="all but %s %s of %s"><l>first</l><l>letter</l><block var="data"/></custom-block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="which"/><l>line capitalize</l></block><script><block s="doReport"><custom-block s="combine %l with delimiter %s"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="%s string %s"><l>capitalize</l><l></l></custom-block></autolambda><list></list></block><block s="reportTextSplit"><block var="data"/><l><option>line</option></l></block></block><block s="reportUnicodeAsLetter"><l>10</l></block></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><block var="which"/><l>full capitalize</l></block><script><block s="doReport"><custom-block s="%s string %s"><l>line capitalize</l><custom-block s="combine %l with delimiter %s"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="%s string %s"><l>capitalize</l><l></l></custom-block></autolambda><list></list></block><block s="reportTextSplit"><block var="data"/><l> </l></block></block><l> </l></custom-block></custom-block></block></script></block><block s="doReport"><block var="data"/></block></script></block-definition><block-definition s="all but %&apos;fl&apos; %&apos;which&apos; of %&apos;data&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">first<options>first&#xD;last</options></input><input type="%s" readonly="true">letter<options>letter&#xD;word</options></input><input type="%s">world</input></inputs><script><block s="doIf"><block s="reportEquals"><block var="fl"/><l>first</l></block><script><block s="doIf"><block s="reportEquals"><block var="which"/><l>word</l></block><script><block s="doReport"><custom-block s="combine %l with delimiter %s"><block s="reportCDR"><block s="reportTextSplit"><block var="data"/><block var="which"/></block></block><l> </l></custom-block></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportCDR"><block s="reportTextSplit"><block var="data"/><block var="which"/></block></block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="fl"/><l>last</l></block><script><block s="doDeclareVariables"><list><l>res</l></list></block><block s="doSetVar"><l>res</l><custom-block s="copy of %l"><block s="reportTextSplit"><block var="data"/><block var="which"/></block></custom-block></block><block s="doDeleteFromList"><l><option>last</option></l><block var="res"/></block><block s="doIf"><block s="reportEquals"><block var="which"/><l>word</l></block><script><block s="doReport"><custom-block s="combine %l with delimiter %s"><block var="res"/><l> </l></custom-block></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block var="res"/></list></block></block></script></block><block s="doReport"><block var="data"/></block></script></block-definition><block-definition s="combine %&apos;data&apos; with delimiter %&apos;delim&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s">,</input></inputs><script><block s="doReport"><block s="reportCombine"><block var="data"/><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><block var="delim"/><l></l></list></block></autolambda><list></list></block></block></block></script></block-definition><block-definition s="is %&apos;string&apos; %&apos;which&apos; ?" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">PINK GIRL</input><input type="%s" readonly="true">uppercased<options>uppercased&#xD;lowercased&#xD;capitalized&#xD;line capitalized&#xD;full capitalized</options></input></inputs><script><block s="doReport"><block s="reportIsIdentical"><block var="string"/><custom-block s="%s string %s"><custom-block s="all but %s %s of %s"><l>last</l><l>letter</l><block var="which"/></custom-block><block var="string"/></custom-block></block></block></script></block-definition><block-definition s="copy of %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><l></l><l><option>list</option></l></block><custom-block s="copy of %l"><l/></custom-block><l></l></block></autolambda><list></list></block><block var="data"/></block></block></script></block-definition><block-definition s="latin %&apos;latin&apos; as number" type="reporter" category="operators"><comment x="0" y="0" w="211" collapsed="false">Returns the roman number as actual number&#xD;e.g.&#xD;IV = 4&#xD;XL = 40&#xD;CD = 400&#xD;CLM = 1050&#xD;MMMM = 4000</comment><header></header><code></code><translations>el:λατίνα _ ως νούμερο&#xD;de:Latein _ als zahl&#xD;</translations><inputs><input type="%s">MDCLXVI</input></inputs><script><block s="doIf"><block s="reportAnd"><custom-block s="setting %s"><l>hyper blocks support</l></custom-block><block s="reportIsA"><block var="latin"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="latin %s as number"><l></l></custom-block></autolambda><list></list></block><block var="latin"/></block></block></script></block><block s="doIf"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportListContainsItem"><block s="reportNewList"><list><l>I</l><l>V</l><l>X</l><l>L</l><l>C</l><l>D</l><l>M</l></list></block><l></l></block></block></autolambda><list></list></block><block s="reportTextSplit"><block var="latin"/><l><option>letter</option></l></block></block><block s="reportBoolean"><l><bool>true</bool></l></block></block><script><custom-block s="throw %s %s"><l>Error</l><block s="reportJoinWords"><list><l>Invalid latin symbol </l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportListContainsItem"><block s="reportNewList"><list><l>I</l><l>V</l><l>X</l><l>L</l><l>C</l><l>D</l><l>M</l></list></block><l></l></block></block></autolambda><list></list></block><block s="reportTextSplit"><block var="latin"/><l><option>letter</option></l></block></block></list></block></custom-block></script></block><block s="doReport"><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><block s="reportCDR"><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="each pair"/></block><block var="each letter"/></block></autolambda><list><l>each pair</l></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>I</l><l>1</l></list></block><block s="reportNewList"><list><l>V</l><l>5</l></list></block><block s="reportNewList"><list><l>X</l><l>10</l></list></block><block s="reportNewList"><list><l>L</l><l>50</l></list></block><block s="reportNewList"><list><l>C</l><l>100</l></list></block><block s="reportNewList"><list><l>D</l><l>500</l></list></block><block s="reportNewList"><list><l>M</l><l>1000</l></list></block></list></block></block></block></block></autolambda><list><l>each letter</l></list></block><block s="reportTextSplit"><block var="latin"/><l><option>letter</option></l></block></block><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportLessThan"><block var="#1"/><block s="reportListItem"><block s="reportVariadicSum"><list><block var="index"/><l>1</l></list></block><block var="list"/></block></block><block s="reportVariadicSum"><list><block s="reportDifference"><block s="reportListItem"><block s="reportVariadicSum"><list><block var="index"/><l>1</l></list></block><block var="list"/></block><block var="#1"/></block><block s="reportDifference"><block var="#2"/><block s="reportListItem"><block s="reportVariadicSum"><list><block var="index"/><l>1</l></list></block><block var="list"/></block></block></list></block><block s="reportVariadicSum"><list><block var="#1"/><block var="#2"/></list></block></block></autolambda><list><l>#1</l><l>#2</l><l>index</l><l>list</l></list></block></block></block></script></block-definition><block-definition s="number %&apos;number&apos; as latin" type="reporter" category="operators"><comment x="0" y="0" w="318" collapsed="false">Returns the actual number as roman number, Can be slow for large operations.&#xD;e.g.&#xD;4 = IV&#xD;40 = XL&#xD;400 = CD&#xD;1050 = CLM&#xD;4000 = MMMM</comment><header></header><code></code><translations>el:νούμερο _ ως λατίνα&#xD;de:Zahl _ als Latein&#xD;</translations><inputs><input type="%n">1666</input></inputs><script><block s="doWarp"><script><block s="doIf"><block s="reportAnd"><custom-block s="setting %s"><l>hyper blocks support</l></custom-block><block s="reportIsA"><block var="number"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="number %n as latin"><l></l></custom-block></autolambda><list></list></block><block var="number"/></block></block></script></block><block s="doIf"><block s="reportLessThan"><block var="number"/><l>0</l></block><script><custom-block s="throw %s %s"><l>Error</l><l>Cannot get latin for negative numbers</l></custom-block></script></block><block s="doDeclareVariables"><list><l>symbols</l><l>output</l></list></block><block s="doSetVar"><l>symbols</l><block s="reportNewList"><list><block s="reportNewList"><list><l>I</l><l>1</l></list></block><block s="reportNewList"><list><l>V</l><l>5</l></list></block><block s="reportNewList"><list><l>X</l><l>10</l></list></block><block s="reportNewList"><list><l>L</l><l>50</l></list></block><block s="reportNewList"><list><l>C</l><l>100</l></list></block><block s="reportNewList"><list><l>D</l><l>500</l></list></block><block s="reportNewList"><list><l>M</l><l>1000</l></list></block><block s="reportNewList"><list><l>M̅</l><l>1000000</l></list></block></list></block></block><block s="doSetVar"><l>output</l><l></l></block><block s="doUntil"><block s="reportEquals"><block var="number"/><l>0</l></block><script><block s="doDeclareVariables"><list><l>symbol</l><l>higher</l></list></block><block s="doSetVar"><l>symbol</l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportListAttribute"><l><option>length</option></l><block var="symbols"/></block></block><block s="reportAnd"><block s="reportLessThanOrEquals"><block s="reportListItem"><l>2</l><block var="value"/></block><block var="number"/></block><block s="reportGreaterThan"><block s="reportListItem"><l>2</l><block s="reportListItem"><block s="reportVariadicSum"><list><block var="index"/><l>1</l></list></block><block var="symbols"/></block></block><block var="number"/></block></block></block></autolambda><list><l>value</l><l>index</l></list></block><block var="symbols"/></block></block><block s="doSetVar"><l>higher</l><block s="reportListItem"><block s="reportVariadicSum"><list><block s="reportListIndex"><block var="symbol"/><block var="symbols"/></block><l>1</l></list></block><block var="symbols"/></block></block><block s="doIf"><block var="higher"/><script><block s="doFor"><l>i</l><l>1</l><block s="reportListIndex"><block var="symbol"/><block var="symbols"/></block><script><block s="doIf"><block var="higher"/><script><block s="doDeclareVariables"><list><l>sn</l><l>hn</l></list></block><block s="doSetVar"><l>sn</l><block s="reportListItem"><l>2</l><block s="reportListItem"><block var="i"/><block var="symbols"/></block></block></block><block s="doSetVar"><l>hn</l><block s="reportListItem"><l>2</l><block var="higher"/></block></block><block s="doIf"><block s="reportAnd"><block s="reportNotEquals"><block s="reportDifference"><block var="hn"/><block var="sn"/></block><block var="sn"/></block><block s="reportEquals"><block s="reportDifference"><block var="hn"/><block var="sn"/></block><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block var="number"/><block var="sn"/></block></block><block var="sn"/></list></block></block></block><script><block s="doSetVar"><l>output</l><block s="reportJoinWords"><list><block var="output"/><block s="reportListItem"><l>1</l><block s="reportListItem"><block var="i"/><block var="symbols"/></block></block><block s="reportListItem"><l>1</l><block var="higher"/></block></list></block></block><block s="doChangeVar"><l>number</l><block s="reportDifference"><l></l><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block var="number"/><block var="sn"/></block></block><block var="sn"/></list></block></block></block><block s="doSetVar"><l>higher</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSetVar"><l>i</l><block s="reportVariadicSum"><list><block s="reportListAttribute"><l><option>length</option></l><block var="symbols"/></block><l>1</l></list></block></block></script></block></script></block></script></block></script></block><block s="doIf"><block s="reportNotEquals"><block var="higher"/><block s="reportBoolean"><l><bool>false</bool></l></block></block><script><block s="doSetVar"><l>output</l><block s="reportJoinWords"><list><block var="output"/><block s="reportListItem"><l>1</l><block var="symbol"/></block></list></block></block><block s="doChangeVar"><l>number</l><block s="reportDifference"><l></l><block s="reportListItem"><l>2</l><block var="symbol"/></block></block></block></script></block></script></block><block s="doReport"><block var="output"/></block></script></block></script></block-definition><block-definition s="throw %&apos;err&apos; %&apos;msg&apos;" type="command" category="control"><comment x="0" y="0" w="268.6666666666667" collapsed="false">Throw an error.&#xD;&#xD;Makes a red halo appear around the script that runs it,&#xD;with the input text shown in a speech balloon next to&#xD;the script, just like any Snap! error.&#xD;&#xD;This is useful to put in the second script of SAFELY TRY&#xD;after some other instructions to undo the partial work of&#xD;the first script.</comment><header></header><code></code><translations>pt:lança o erro _&#xD;el:σφάλμα _&#xD;de:Error _&#xD;</translations><inputs><input type="%s">Error</input><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>msg</l><l>n</l></list><l>throw {name: n, message: msg};</l></block><list><block var="msg"/><block var="err"/></list></block></script></block-definition><block-definition s="%&apos;first&apos; $- %&apos;option&apos; $- %&apos;second&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">raincoat</input><input type="%s" readonly="true">contains<options>contains&#xD;starts with&#xD;ends with</options></input><input type="%s">coat</input></inputs><script><block s="doIf"><block s="reportEquals"><block var="option"/><l>contains</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>a</l><l>b</l></list><l>return a.includes(b);</l></block><list><block var="first"/><block var="second"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="option"/><l>starts with</l></block><script><block s="doReport"><block s="reportEquals"><custom-block s="letters %n - %n of %txt"><l>1</l><block s="reportStringSize"><block var="second"/></block><block var="first"/></custom-block><block var="second"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="option"/><l>ends with</l></block><script><block s="doReport"><block s="reportEquals"><custom-block s="reverse string %s"><custom-block s="letters %n - %n of %txt"><block s="reportStringSize"><block var="first"/></block><block s="reportVariadicSum"><list><block s="reportDifference"><block s="reportStringSize"><block var="first"/></block><block s="reportStringSize"><block var="second"/></block></block><l>1</l></list></block><block var="first"/></custom-block></custom-block><block var="second"/></block></block></script></block><block s="doReport"><l></l></block></script><scripts><script x="85.46191406250003" y="72.66666666666666"><block var="which"/></script><script x="134.2822265625" y="166.16666666666669"><block var="which"/></script></scripts></block-definition><block-definition s="letters %&apos;a&apos; - %&apos;b&apos; of %&apos;text&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">3</input><input type="%txt">world</input></inputs><script><block s="doIf"><block s="reportAnd"><block s="reportIsA"><block var="text"/><l><option>list</option></l></block><custom-block s="setting %s"><l>hyper blocks support</l></custom-block></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="letters %n - %n of %txt"><block var="a"/><block var="b"/><l></l></custom-block></autolambda><list></list></block><block var="text"/></block></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportLetter"><block s="reportNumbers"><block var="a"/><block var="b"/></block><block var="text"/></block></list></block></block></script></block-definition><block-definition s="reverse string %&apos;string&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">world</input></inputs><script><block s="doReport"><block s="reportJoinWords"><list><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportTextSplit"><block var="string"/><l><option>letter</option></l></block></block></list></block></block></script></block-definition><block-definition s="scramble string %&apos;str&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">world</input></inputs><script><block s="doReport"><block s="reportCombine"><block s="reportTextSplit"><block var="str"/><l><option>letter</option></l></block><block s="reifyReporter"><autolambda><block s="reportIfElse"><custom-block s="%n % chance true"><l>50</l></custom-block><block s="reportJoinWords"><list><block var="#2"/><block var="#1"/></list></block><block s="reportJoinWords"><list><block var="#1"/><block var="#2"/></list></block></block></autolambda><list><l>#1</l><l>#2</l></list></block></block></block></script></block-definition><block-definition s="%&apos;c&apos; % chance true" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">50</input></inputs><script><block s="doReport"><block s="reportLessThanOrEquals"><block s="reportRandom"><l>1</l><l>100</l></block><block var="c"/></block></block></script></block-definition><block-definition s="shuffle %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doSetVar"><l>data</l><custom-block s="copy of %l"><block var="data"/></custom-block></block><block s="doWarp"><script><custom-block s="for %upvar %upvar in %l %ca"><l>index</l><l>value</l><block var="data"/><script><block s="doIf"><block s="reportAnd"><custom-block s="%n % chance true"><l>50</l></custom-block><block s="reportNot"><block s="reportEquals"><block var="index"/><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block></block></block></block><script><block s="doRun"><block s="reifyScript"><script><block s="doReplaceInList"><block var="index"/><block var="data"/><block s="reportListItem"><block s="reportVariadicSum"><list><block var="index"/><l>1</l></list></block><block var="data"/></block></block><block s="doReplaceInList"><block s="reportVariadicSum"><list><block var="index"/><l>1</l></list></block><block var="data"/><block var="x"/></block></script><list><l>x</l></list></block><list><block var="value"/></list></block></script></block></script></custom-block></script></block><block s="doReport"><block var="data"/></block></script></block-definition><block-definition s="write %&apos;txt&apos; size %&apos;size&apos; with wrapping" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%mlt">Hello!&#xD;How are you?&#xD;Are you okay?</input><input type="%n">12</input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>origin</l><l>newline</l><l>sbl</l><l>offset</l><l>prev</l></list></block><block s="doSetVar"><l>origin</l><block s="reportNewList"><list><block s="reportNewList"><list><block s="xPosition"></block><block s="yPosition"></block></list></block><block s="direction"></block></list></block></block><block s="doSetVar"><l>newline</l><block s="reifyScript"><script><block s="doSetVar"><l>prev</l><block s="getPenDown"></block></block><block s="up"></block><block s="doGotoObject"><block s="reportListItem"><l>1</l><block var="origin"/></block></block><block s="turn"><l>90</l></block><block s="forward"><block s="reportVariadicProduct"><list><block var="x"/><block var="size"/></list></block></block><block s="turnLeft"><l>90</l></block><block s="doIfElse"><block var="prev"/><script><block s="down"></block></script><script><block s="up"></block></script></block></script><list><l>x</l></list></block></block><block s="doSetVar"><l>sbl</l><block s="reportTextSplit"><block var="txt"/><l><option>line</option></l></block></block><custom-block s="for %upvar %upvar in %l %ca"><l>index</l><l>line</l><block var="sbl"/><script><custom-block s="for %upvar %upvar in %l %ca"><l>idx</l><l>word</l><block s="reportTextSplit"><block var="line"/><l> </l></block><script><block s="doIf"><block s="reportGreaterThan"><block s="reportVariadicSum"><list><block s="xPosition"></block><block s="reportVariadicProduct"><list><block s="reportVariadicProduct"><list><block s="reportQuotient"><l>7</l><l>12</l></block><block var="size"/></list></block><block s="reportStringSize"><block var="word"/></block></list></block></list></block><block s="reportAttributeOf"><l><option>right</option></l><l>Stage</l></block></block><script><block s="doRun"><block var="newline"/><list><block s="reportVariadicSum"><list><block var="index"/><block var="offset"/></list></block></list></block><block s="doChangeVar"><l>offset</l><l>1</l></block></script></block><block s="write"><block var="word"/><block var="size"/></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="idx"/><block s="reportListAttribute"><l><option>length</option></l><block s="reportTextSplit"><block var="line"/><l> </l></block></block></block></block><script><block s="write"><l> </l><block var="size"/></block></script></block></script></custom-block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="index"/><block s="reportListAttribute"><l><option>length</option></l><block var="sbl"/></block></block></block><script><block s="doRun"><block var="newline"/><list><block s="reportVariadicSum"><list><block var="index"/><block var="offset"/></list></block></list></block></script></block></script></custom-block><block s="setHeading"><block s="reportListItem"><l>2</l><block var="origin"/></block></block></script></block></script></block-definition><block-definition s="for %&apos;index&apos; %&apos;value&apos; in %&apos;data&apos; %&apos;function&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%upvar"></input><input type="%l"></input><input type="%ca"></input></inputs><script><block s="doForEach"><l>item</l><block var="data"/><script><block s="doSetVar"><l>value</l><block var="item"/></block><block s="doChangeVar"><l>index</l><l>1</l></block><block s="doRun"><block var="function"/><list></list></block></script></block></script></block-definition><block-definition s="all %&apos;which&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="227.9876302083336" collapsed="false">Sprites: All the sprites (not including the stage).&#xD;Clones: Every clone from every sprite.&#xD;Objects: Both sprites and clones.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">sprites<options>sprites&#xD;clones&#xD;objects</options></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="which"/><l>sprites</l></block><script><block s="doIf"><block s="reportEquals"><block s="reportObject"><l><option>myself</option></l></block><block s="reportGet"><l><option>stage</option></l></block></block><script><block s="doReport"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportAskFor"><l></l><block s="reifyReporter"><autolambda><custom-block s="am I a clone?"></custom-block></autolambda><list></list></block><list></list></block></block></autolambda><list></list></block><block s="reportGet"><l><option>other sprites</option></l></block></block></block></script></block><block s="doReport"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportAskFor"><l></l><block s="reifyReporter"><autolambda><custom-block s="am I a clone?"></custom-block></autolambda><list></list></block><list></list></block></block></autolambda><list></list></block><block s="reportCONS"><block s="reportObject"><l><option>myself</option></l></block><block s="reportGet"><l><option>other sprites</option></l></block></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="which"/><l>clones</l></block><script><block s="doReport"><block s="reportConcatenatedLists"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAskFor"><l></l><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>clones</option></l></block></autolambda><list></list></block><list></list></block></autolambda><list></list></block><custom-block s="all %s"><l>sprites</l></custom-block></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="which"/><l>objects</l></block><script><block s="doReport"><block s="reportConcatenatedLists"><list><custom-block s="all %s"><l>sprites</l></custom-block><custom-block s="all %s"><l>clones</l></custom-block></list></block></block></script></block><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block-definition><block-definition s="am I a clone?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportIsA"><block s="reportGet"><l><option>parent</option></l></block><l><option>sprite</option></l></block></block></script></block-definition><block-definition s="pos %&apos;n&apos; in %&apos;small&apos; - %&apos;large&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">11</input><input type="%n">1</input><input type="%n">10</input></inputs><script><block s="doReport"><custom-block s="%s %s %s"><block var="small"/><l>max</l><custom-block s="%s %s %s"><block var="n"/><l>min</l><block var="large"/></custom-block></custom-block></block></script></block-definition><block-definition s="%&apos;a&apos; %&apos;which&apos; %&apos;b&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s" readonly="true">min<options>min&#xD;max</options></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block var="which"/><l>max</l></block><block s="reportIfElse"><block s="reportGreaterThan"><block var="a"/><block var="b"/></block><block var="a"/><block var="b"/></block><block s="reportIfElse"><block s="reportLessThan"><block var="a"/><block var="b"/></block><block var="a"/><block var="b"/></block></block></block></script></block-definition><block-definition s="indices of %&apos;small&apos; in text %&apos;large&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">o</input><input type="%txt">hello world</input></inputs><script><block s="doDeclareVariables"><list><l>total</l></list></block><block s="doReport"><custom-block s="all but %n of %l"><l>last</l><block s="reportMap"><block s="reifyScript"><script><block s="doChangeVar"><l>total</l><block s="reportVariadicSum"><list><block s="reportStringSize"><block var="x"/></block><l>1</l></list></block></block><block s="doReport"><block var="total"/></block></script><list><l>x</l></list></block><block s="reportTextSplit"><block var="large"/><block var="small"/></block></block></custom-block></block></script></block-definition><block-definition s="all but %&apos;n&apos; of %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%n">1<options>1&#xD;last&#xD;random</options></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="n"/><l>random</l></block><script><block s="doSetVar"><l>n</l><block s="reportRandom"><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block></block></block></script></block><block s="doSetVar"><l>data</l><custom-block s="copy of %l"><block var="data"/></custom-block></block><block s="doDeleteFromList"><block var="n"/><block var="data"/></block><block s="doReport"><block var="data"/></block></script></block-definition><block-definition s="stage image" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return new Costume(world.children[0].stage.fullImage(), &apos;snapshot&apos;);</l></block><list></list></block></block></script></block-definition><block-definition s="pause %&apos;which&apos; $pause-1-255-220-0" type="command" category="control"><comment x="0" y="0" w="98" collapsed="false">Pause a selected range of processes.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">all<options>all&#xD;this script&#xD;all but this script</options></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="which"/><l>this script</l></block><script><block s="doRun"><block s="reportJSFunction"><list><l>proc</l></list><l>proc.isPaused = true;</l></block><list></list></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="which"/><l>all but this script</l></block><script><block s="doRun"><block s="reportJSFunction"><list><l>x</l></list><l>var procs = world.children[0].stage.threads.processes;&#xD;if (procs.length &lt; 1) return;&#xD;x.pauseShieldFlag = null;&#xD;procs.forEach(&#xD;function (proc) {&#xD;if (!("pauseShieldFlag" in proc)){&#xD;proc.pause();&#xD;}})&#xD;delete x.pauseShieldFlag;</l></block><list></list></block></script><script><block s="doPauseAll"></block></script></block></script></block></script></block-definition><block-definition s="unpause all $pointRight-1.1-255-220-0" type="command" category="control"><comment x="0" y="0" w="90" collapsed="false">Unpause each paused process.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>world.children[0].stage.threads.processes.forEach(&#xD;function (proc) {&#xD;proc.isPaused = false;&#xD;})</l></block><list></list></block></script></block-definition><block-definition s="$flash indices of %&apos;item&apos; in %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s">thing</input><input type="%l"></input></inputs><script><block s="doReport"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportEquals"><l></l><block s="reportMonadic"><l><option>sqrt</option></l><l>577</l></block></block></block></autolambda><list></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportEquals"><block var="x"/><block var="item"/></block><block var="y"/><block s="reportMonadic"><l><option>sqrt</option></l><l>577</l></block></block></autolambda><list><l>x</l><l>y</l></list></block><block var="data"/></block></block></block></script></block-definition><block-definition s="my resolution" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>function fix(n) {&#xD;return (Math.round((n * (10 ^ 15)))) / (10 ^ 15);&#xD;}&#xD;return new List([&#xD;      fix(this.bounds.width()),&#xD;           fix(this.bounds.height())&#xD;]);</l></block><list></list></block></block></script></block-definition><block-definition s="index of %&apos;small&apos; in text %&apos;large&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">a</input><input type="%s">cat</input></inputs><script><block s="doReport"><block s="reportVariadicSum"><list><block s="reportStringSize"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="large"/><block var="small"/></block></block></block><l>1</l></list></block></block></script></block-definition><block-definition s="directory item %&apos;indices&apos; of %&apos;array&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="indices"/></block><l>1</l></block><script><block s="doReport"><block s="reportListItem"><block s="reportListItem"><l>1</l><block var="indices"/></block><block var="array"/></block></block></script><script><block s="doReport"><custom-block s="directory item %l of %l"><block s="reportCDR"><block var="indices"/></block><block s="reportListItem"><block s="reportListItem"><l>1</l><block var="indices"/></block><block var="array"/></block></custom-block></block></script></block></script></block-definition><block-definition s="constant %&apos;which&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">pi<options>e&#xD;pi&#xD;phi&#xD;weekdays&#xD;months&#xD;latin alphabet</options></input></inputs><script><block s="doReport"><block s="reportListItem"><block s="reportListIndex"><block var="which"/><block s="reportNewList"><list><l>pi</l><l>phi</l><l>e</l><l>weekdays</l><l>months</l><l>latin alphabet</l></list></block></block><block s="reportNewList"><list><l>3.14159265358</l><l>1.61803398875</l><l>2.71828182845</l><block s="reportNewList"><list><l>Sunday</l><l>Monday</l><l>Tuesday</l><l>Wednesday</l><l>Thursday</l><l>Friday</l><l>Saturday</l></list></block><block s="reportNewList"><list><l>January</l><l>February</l><l>March</l><l>April</l><l>May</l><l>June</l><l>July</l><l>August</l><l>September</l><l>October</l><l>November</l><l>December</l></list></block><block s="reportTextSplit"><l>abcdefghijklmnopqrstuvwxyz</l><l><option>letter</option></l></block></list></block></block></block></script></block-definition><block-definition s="$circleSolid-1-255-0-0 record" type="reporter" category="sensing"><comment x="0" y="0" w="192" collapsed="false">records an audio snippet and reports it as a new sound, or zero if the user cancels</comment><header></header><code></code><translations>pt:$circleSolid-1-255-0-0 uma nova gravação&#xD;</translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>accessors</l></list></block><block s="doSetVar"><l>accessors</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var soundRecorder,&#xD;    result = false;&#xD;&#xD;soundRecorder = new SoundRecorderDialogMorph(&#xD;    function (audio) {&#xD;        if (audio) {&#xD;            result = new Sound(audio, &apos;recording&apos;);&#xD;        } else {&#xD;            result = null;&#xD;            this.destroy();&#xD;        }&#xD;    }&#xD;);&#xD;&#xD;soundRecorder.cancel = function () {&#xD;    result = null;&#xD;    this.destroy();&#xD;};&#xD;&#xD;soundRecorder.key = &apos;microphone&apos;;&#xD;soundRecorder.popUp(this.world());&#xD;return new List([() =&gt; (!(result == false)), () =&gt; (result||0)]);</l></block><list></list></block></block><block s="doWaitUntil"><block s="evaluate"><block s="reportListItem"><l>1</l><block var="accessors"/></block><list></list></block></block><block s="doReport"><block s="evaluate"><block s="reportListItem"><l>2</l><block var="accessors"/></block><list></list></block></block></script></block-definition><block-definition s="set pen to r: %&apos;r&apos; g: %&apos;g&apos; b: %&apos;b&apos; a: %&apos;a&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%n">255</input><input type="%n">220</input><input type="%n">0</input><input type="%n">255</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>r,g,b,a</l></list><l>this.color = new Color(&#xD;r, g, b, a);</l></block><list><block var="r"/><block var="g"/><block var="b"/><block var="a"/></list></block></script></block-definition><block-definition s="deep map %&apos;function&apos; over %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><l></l><l><option>list</option></l></block><custom-block s="deep map %repRing over %l"><block var="function"/><l/></custom-block><block s="evaluate"><block var="function"/><list><l></l></list></block></block></autolambda><list></list></block><block var="data"/></block></block></script></block-definition><block-definition s="glide %&apos;n&apos; secs to %&apos;object&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%s" readonly="true">mouse-pointer<options>function () {&#xD;var object = {&#xD;&quot;random position&quot; : &quot;random position&quot;,&#xD;&quot;mouse-pointer&quot; : &quot;mouse-pointer&quot;,&#xD;&quot;center&quot; : &quot;center&quot;,&#xD;&quot;&#126;&quot;: &quot;&#126;&quot;,&#xD;};&#xD;var spritesObj = {},&#xD;homeSprite = world.children[0].currentSprite || {name:null};&#xD;world.children[0].sprites.itemsArray().map(e=&gt;e.name).forEach(&#xD;function (spriteName){&#xD;if (spriteName != homeSprite.name){&#xD;spritesObj[spriteName] = spriteName;&#xD;}})&#xD;if (Object.keys(spritesObj).length &lt; 1){&#xD;delete object[&quot;&#126;&quot;];&#xD;}&#xD;return Object.assign(object, spritesObj);&#xD;}</options></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="object"/><l>mouse-pointer</l></block><script><block s="doSetVar"><l>object</l><block s="reportNewList"><list><block s="reportMouseX"></block><block s="reportMouseY"></block></list></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="object"/><l>random position</l></block><script><block s="doSetVar"><l>object</l><block s="reportNewList"><list><block s="reportRandom"><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><block s="reportAttributeOf"><l><option>right</option></l><l>Stage</l></block></block><block s="reportRandom"><block s="reportAttributeOf"><l><option>bottom</option></l><l>Stage</l></block><block s="reportAttributeOf"><l><option>top</option></l><l>Stage</l></block></block></list></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="object"/><l>center</l></block><script><block s="doSetVar"><l>object</l><block s="reportNewList"><list><l>0</l><l>0</l></list></block></block></script><script><block s="doIfElse"><block s="reportNot"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAskFor"><l></l><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>name</option></l></block></autolambda><list></list></block><list></list></block></autolambda><list></list></block><block s="reportCONS"><block s="reportObject"><l><option>myself</option></l></block><block s="reportGet"><l><option>other sprites</option></l></block></block></block><block var="object"/></block></block><script><block s="doSetVar"><l>object</l><custom-block s="my coordinates"></custom-block></block></script><script><block s="doSetVar"><l>object</l><block s="evaluate"><block s="reportAttributeOf"><block s="reifyReporter"><autolambda><custom-block s="my coordinates"></custom-block></autolambda><list></list></block><block var="object"/></block><list></list></block></block></script></block></script></block></script></block></script></block><block s="doGlide"><block var="n"/><block s="reportListItem"><l>1</l><block var="object"/></block><block s="reportListItem"><l>2</l><block var="object"/></block></block></script></block-definition><block-definition s="my coordinates" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="xPosition"></block><block s="yPosition"></block></list></block></block></script></block-definition><block-definition s="replace %&apos;find&apos; in %&apos;text&apos; with %&apos;replace&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">apples</input><input type="%txt">I like apples</input><input type="%s">bananas</input></inputs><script><block s="doReport"><custom-block s="combine %l with delimiter %s"><block s="reportTextSplit"><block var="text"/><block var="find"/></block><block var="replace"/></custom-block></block></script></block-definition><block-definition s="remove all %&apos;thing&apos; in %&apos;text&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">a</input><input type="%s">steam</input></inputs><script><block s="doReport"><custom-block s="replace %s in %txt with %s"><block var="thing"/><block var="text"/><l></l></custom-block></block></script></block-definition><block-definition s="reverse sound %&apos;snd&apos;" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_soundsMenu</options></input></inputs><script><block s="doReport"><block s="reportNewSoundFromSamples"><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="s"/></block><l><option>list</option></l></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListAttribute"><l><option>reverse</option></l><l/></block></autolambda><list></list></block><block var="s"/></block><block s="reportListAttribute"><l><option>reverse</option></l><block var="s"/></block></block></autolambda><list><l>s</l></list></block><list><block s="reportGetSoundAttribute"><l><option>samples</option></l><block var="snd"/></block></list></block><block s="reportGetSoundAttribute"><l><option>sample rate</option></l><block var="snd"/></block></block></block></script></block-definition><block-definition s="gradient costume %&apos;width&apos; × %&apos;height&apos; $nl with colors %&apos;colors&apos; meeting %&apos;which&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">256</input><input type="%n">256</input><input type="%mult%clr"></input><input type="%s" readonly="true">horizontally<options>horizontally&#xD;vertically</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>w</l><l>h</l><l>c</l><l>v</l></list><l>var canvas = document.createElement(&apos;canvas&apos;),&#xD;    ctx = canvas.getContext(&apos;2d&apos;),&#xD;    grd = ctx.createLinearGradient(0, 0, v?0:w, v?h:0);&#xD;canvas.width = w;&#xD;canvas.height = h;&#xD;c = c.itemsArray();&#xD;if (c.length &gt; 0){&#xD;grd.addColorStop(0, c[0]);&#xD;c.shift();&#xD;c.forEach(function (clr, idx) {&#xD; grd.addColorStop((1/c.length*(idx+1)), clr);&#xD;})}&#xD;ctx.fillStyle = grd;&#xD;ctx.fillRect(0, 0, w, h);&#xD;return new Costume(canvas);</l></block><list><block var="width"/><block var="height"/><block var="colors"/><block s="reportEquals"><block var="which"/><l>vertically</l></block></list></block></block></script><scripts><script x="300.0076171874998" y="559.2"><block var="which"/></script><script x="249.0720703124998" y="559.2"><block var="colors"/></script><script x="196.21757812499976" y="591.1999999999999"><block var="height"/></script><script x="147.33281249999982" y="559.2"><block var="width"/></script></scripts></block-definition><block-definition s="sound from url %&apos;url&apos;" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s">Sounds/Chord.wav<options>function () {&#xD;var obj = {};&#xD;world.children[0].getMediaList(&apos;Sounds&apos;).forEach(audio =&gt; {&#xD;obj[audio.name] = &apos;Sounds/&apos; + audio.fileName;&#xD;})&#xD;return obj;&#xD;}</options></input></inputs><script><custom-block s="let %upvar be %s"><l>sound</l><block s="evaluate"><block s="reportJSFunction"><list><l>src</l></list><l>var audio = new Audio(src),&#xD;    sound = null;&#xD;audio.addEventListener(&apos;loadeddata&apos;, () =&gt; {&#xD; sound = new Sound(audio);&#xD;})&#xD;return () =&gt; sound;</l></block><list><block var="url"/></list></block></custom-block><block s="doWaitUntil"><block s="evaluate"><block var="sound"/><list></list></block></block><block s="doReport"><block s="evaluate"><block var="sound"/><list></list></block></block></script></block-definition><block-definition s="let %&apos;var&apos; be %&apos;val&apos;" type="command" category="other"><comment x="0" y="0" w="183.33333333333334" collapsed="false">LET (FOO) BE (5)&#xD;is equivalent to&#xD;SCRIPT VARIABLES (FOO)&#xD;SET (FOO) TO (5)</comment><header></header><code></code><translations>pt:cria a variável de guião _ com valor _&#xD;</translations><inputs><input type="%upvar"></input><input type="%s"></input></inputs><script><block s="doSetVar"><l>var</l><block var="val"/></block></script></block-definition><block-definition s="point resize costume %&apos;costume&apos; by factor %&apos;factor&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">current<options>§_costumesMenu</options></input><input type="%n">2</input></inputs><script><block s="doIf"><block s="reportOr"><block s="reportNot"><block s="reportEquals"><block s="reportMonadic"><l><option>floor</option></l><block var="factor"/></block><block var="factor"/></block></block><block s="reportOr"><block s="reportNot"><block s="reportEquals"><block s="reportMonadic"><l><option>abs</option></l><block var="factor"/></block><block var="factor"/></block></block><block s="reportEquals"><block var="factor"/><block s="reportQuotient"><l>1</l><l></l></block></block></block></block><script><custom-block s="throw %s %s"><l>Error</l><l>Expecting a finite number but getting Infinity or NaN</l></custom-block></script></block><block s="doDeclareVariables"><list><l>height</l><l>width</l><l>old pixels</l></list></block><block s="doSetVar"><l>height</l><block s="reportGetImageAttribute"><l><option>height</option></l><block var="costume"/></block></block><block s="doSetVar"><l>width</l><block s="reportGetImageAttribute"><l><option>width</option></l><block var="costume"/></block></block><block s="doSetVar"><l>old pixels</l><block s="reportGetImageAttribute"><l><option>pixels</option></l><block var="costume"/></block></block><block s="doSetVar"><l>factor</l><block var="factor"/></block><block s="doReport"><block s="reportNewCostume"><block s="reportReshape"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportReshape"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportReshape"><block s="reportListItem"><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block var="h"/><block var="width"/></list></block><block var="w"/></list></block><block var="old pixels"/></block><list><block var="factor"/><l>4</l></list></block></autolambda><list><l>w</l></list></block><block s="reportNumbers"><l>1</l><block var="width"/></block></block><list><block s="reportVariadicProduct"><list><block s="reportVariadicProduct"><list><block var="width"/><block var="factor"/></list></block><block var="factor"/></list></block><l>4</l></list></block></autolambda><list><l>h</l></list></block><block s="reportNumbers"><l>0</l><block s="reportDifference"><block var="height"/><l>1</l></block></block></block><list><block s="reportVariadicProduct"><list><block s="reportVariadicProduct"><list><block var="height"/><block var="width"/></list></block><block s="reportVariadicProduct"><list><block var="factor"/><block var="factor"/></list></block></list></block><l>4</l></list></block><block s="reportVariadicProduct"><list><block var="factor"/><block var="width"/></list></block><block s="reportVariadicProduct"><list><block var="factor"/><block var="height"/></list></block></block></block></script></block-definition><block-definition s="matrix %&apos;rows&apos; × %&apos;cols&apos; with: %&apos;fill&apos;" type="reporter" category="lists"><comment x="0" y="0" w="178.10225497159078" collapsed="false">Improved block from @wunder_wulfe using reshape and with italic dropdown option</comment><header></header><code></code><translations></translations><inputs><input type="%n">4</input><input type="%n">3</input><input type="%n">0<options>function() {&#xD;return {&#xD;&quot;identity&quot;: [&quot;identity&quot;]&#xD;};&#xD;}</options></input></inputs><script><block s="doIf"><block s="reportEquals"><block s="reportJoinWords"><block var="fill"/></block><l>identity</l></block><script><block s="doReport"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportMap"><block s="reifyPredicate"><autolambda><block s="reportDifference"><block s="reportEquals"><block var="x"/><block var="y"/></block><l>0</l></block></autolambda><list><l>x</l></list></block><block s="reportNumbers"><l>1</l><block var="cols"/></block></block></autolambda><list><l>y</l></list></block><block s="reportNumbers"><l>1</l><block var="rows"/></block></block></block></script></block><block s="doReport"><block s="reportReshape"><block var="fill"/><list><block var="rows"/><block var="cols"/></list></block></block></script></block-definition><block-definition s="set font to %&apos;name&apos; $nl bold? %&apos;bold&apos; italic? %&apos;italic&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%s">monospace<options>arial&#xD;cursive&#xD;monospace</options></input><input type="%b">false</input><input type="%b">false</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>name</l><l>bold</l><l>italic</l></list><l>if (!this.loadedFontsAPI){&#xD; this.loadedFontsAPI = true;&#xD; this.font = &apos;monospace&apos;;&#xD; this.bold = "";&#xD; this.italic = "";&#xD; SpriteMorph.prototype.write = function (text, size) {&#xD;    // thanks to Michael Ball for contributing this code!&#xD;    if (typeof text !== &apos;string&apos; &amp;&amp; typeof text !== &apos;number&apos;) {&#xD;        throw new Error(&#xD;            &apos;LABEL can only draw text or numbers, not a &apos; +&#xD;            typeof text&#xD;        );&#xD;    }&#xD;&#xD;    var stage = this.parentThatIsA(StageMorph),&#xD;        context = stage.penTrails().getContext(&apos;2d&apos;),&#xD;        rotation = radians(this.direction() - 90),&#xD;        trans = new Point(&#xD;            this.rotationCenter().x - stage.left(),&#xD;            this.rotationCenter().y - stage.top()&#xD;        ),&#xD;        len,&#xD;        pos;&#xD;&#xD;    context.save();&#xD;    context.font = this.italic + "normal " + this.bold + size + &apos;px &apos; + this.font;&#xD;    context.textAlign = &apos;left&apos;;&#xD;    context.textBaseline = &apos;alphabetic&apos;;&#xD;    context.fillStyle = this.color.toString();&#xD;    len = context.measureText(text).width;&#xD;    trans = trans.multiplyBy(1 / stage.scale);&#xD;    context.translate(trans.x, trans.y);&#xD;    context.rotate(rotation);&#xD;    context.fillText(text, 0, 0);&#xD;    context.translate(-trans.x, -trans.y);&#xD;    context.restore();&#xD;    pos = new Point(&#xD;        len * Math.sin(radians(this.direction())),&#xD;        len * Math.cos(radians(this.direction()))&#xD;    );&#xD;    pos = pos.add(new Point(this.xPosition(), this.yPosition()));&#xD;    this.gotoXY(pos.x, pos.y, false);&#xD;    this.changed();&#xD;    stage.changed();&#xD;}}&#xD;this.font = name;&#xD;this.bold = bold? "bold ":"normal "&#xD;this.italic = italic? "italic ":"normal ";</l></block><list><block var="name"/><block var="bold"/><block var="italic"/></list></block></script></block-definition><block-definition s="font %&apos;which&apos;" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">name<options>name&#xD;bold?&#xD;italic?</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>which</l></list><l>if (!this.loadedFontsAPI){&#xD; this.font = &apos;monospace&apos;;&#xD; this.loadedFontsAPI = true;&#xD; SpriteMorph.prototype.write = function (text, size) {&#xD;    // thanks to Michael Ball for contributing this code!&#xD;    if (typeof text !== &apos;string&apos; &amp;&amp; typeof text !== &apos;number&apos;) {&#xD;        throw new Error(&#xD;            &apos;LABEL can only draw text or numbers, not a &apos; +&#xD;            typeof text&#xD;        );&#xD;    }&#xD;&#xD;    var stage = this.parentThatIsA(StageMorph),&#xD;        context = stage.penTrails().getContext(&apos;2d&apos;),&#xD;        rotation = radians(this.direction() - 90),&#xD;        trans = new Point(&#xD;            this.rotationCenter().x - stage.left(),&#xD;            this.rotationCenter().y - stage.top()&#xD;        ),&#xD;        len,&#xD;        pos;&#xD;&#xD;    context.save();&#xD;    context.font = this.bold + this.italic + size + &apos;px &apos; + this.font;&#xD;    context.textAlign = &apos;left&apos;;&#xD;    context.textBaseline = &apos;alphabetic&apos;;&#xD;    context.fillStyle = this.color.toString();&#xD;    len = context.measureText(text).width;&#xD;    trans = trans.multiplyBy(1 / stage.scale);&#xD;    context.translate(trans.x, trans.y);&#xD;    context.rotate(rotation);&#xD;    context.fillText(text, 0, 0);&#xD;    context.translate(-trans.x, -trans.y);&#xD;    context.restore();&#xD;    pos = new Point(&#xD;        len * Math.sin(radians(this.direction())),&#xD;        len * Math.cos(radians(this.direction()))&#xD;    );&#xD;    pos = pos.add(new Point(this.xPosition(), this.yPosition()));&#xD;    this.gotoXY(pos.x, pos.y, false);&#xD;    this.changed();&#xD;    stage.changed();&#xD;}}&#xD;switch (which){&#xD; case "bold?":&#xD;  return this.bold === &apos;bold &apos;;&#xD; case "italic?":&#xD;  return this.italic === &apos;italic &apos;;&#xD; default:&#xD;  return this.font;&#xD;}</l></block><list><block var="which"/></list></block></block></script></block-definition><block-definition s="clipboard %&apos;which&apos;" type="reporter" category="control"><comment x="0" y="0" w="117.27272727272727" collapsed="false">Fetch clipboard contents as costume or plaintext.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">text<options>text&#xD;image</options></input></inputs><script><block s="doDeclareVariables"><list><l>clip</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="which"/><l>image</l></block><script><block s="doSetVar"><l>clip</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var item = null,&#xD;    thing = null;&#xD;&#xD;function error(txt){done = true; console.error(txt);}&#xD;&#xD;function loadImage(url){&#xD;  return new Promise((resolve, reject) =&gt; {&#xD;    var img = new Image();&#xD;    img.onload = () =&gt; resolve( img);&#xD;    img.onerror = reject;&#xD;    img.src = url;&#xD;  })&#xD;}&#xD;&#xD;(async () =&gt; {&#xD;  if("clipboard" in navigator) {&#xD;	try{	&#xD;        var clipData = await navigator.clipboard.read();&#xD;        console.log(clipData);&#xD;	&#xD;&#xD;		const item = clipData.find(v =&gt; v.types.includes("image/png"));&#xD;		if(!item)&#xD;   thing = "";&#xD;			error("No image data");&#xD;&#xD;		blob = await item.getType("image/png");&#xD;		var url = (window.URL || window.webkitURL).createObjectURL(blob);&#xD;		var img = await loadImage(url);&#xD;		canvas = newCanvas(new Point(img.width, img.height), true);&#xD;		canvas.getContext(&apos;2d&apos;).drawImage(img, 0, 0);&#xD;		thing = new Costume(canvas, "clipboard");&#xD;    }&#xD;    catch(err){thing="";error("Can&apos;t get PNG data: "+err.message)};&#xD;  }&#xD; else {thing="";error("Cannot access clipboard")}&#xD;})();&#xD;return () =&gt; thing;</l></block><list></list></block></block></script><script><block s="doSetVar"><l>clip</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var result = null;&#xD;navigator.clipboard.readText().then(&#xD;e=&gt;result=e,e=&gt;result=&apos;&apos;);&#xD;return () =&gt; result;</l></block><list></list></block></block></script></block><block s="doWaitUntil"><block s="reportOr"><block s="evaluate"><block var="clip"/><list></list></block><block s="reportEquals"><block s="evaluate"><block var="clip"/><list></list></block><l></l></block></block></block><block s="doReport"><block s="evaluate"><block var="clip"/><list></list></block></block></script></block-definition><block-definition s="custom dialog, title %&apos;title&apos; costume %&apos;cst&apos; body %&apos;body&apos; $nl button names %&apos;variadic&apos; on button clicks %&apos;cvariadic&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s" readonly="true"><options>§_costumesMenu</options></input><input type="%mlt"></input><input type="%mult%txt"></input><input type="%mult%cmdRing"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>title,body,names,actions,cst,proc</l></list><l>let _txt;&#xD;&#xD; function autoscroll(textString) {&#xD;   _txt = new TextMorph(&#xD;           textString&#xD;           ,box.fontSize&#xD;           ,box.fontStyle&#xD;           ,true&#xD;           ,false&#xD;           ,&apos;center&apos;&#xD;           ,null&#xD;           ,null&#xD;           ,MorphicPreferences.isFlat ? null : new Point(1, 1)&#xD;           ,WHITE&#xD;     )&#xD;     let maxHeight, scroller;&#xD;      &#xD;     maxHeight = Math.min( world.height() - box.titleFontSize * 30, _txt.height());&#xD;     _txt.enableLinks = true;&#xD;       &#xD;     scroller = new ScrollFrameMorph();&#xD;     scroller.acceptsDrops = false;&#xD;     scroller.contents.acceptsDrops = false;&#xD;     scroller.bounds.setWidth(_txt.width());&#xD;     scroller.bounds.setHeight(maxHeight);&#xD;     scroller.addContents( _txt);&#xD;     scroller.color = new Color(0, 0, 0, 0);&#xD;     return scroller;&#xD;    }&#xD;&#xD;names = names.asArray();&#xD;let scs = actions.asArray();&#xD;actions = actions.asArray().map(_=&gt;function doAction(){if(doAction.e==&apos;close&apos;){this.destroy();}else{invoke(doAction.e,new List());this.destroy()}});&#xD;actions.forEach((e,f)=&gt;{e.e=scs[f];e.f=proc})&#xD;var box = new DialogBoxMorph();&#xD;box.labelString = title;&#xD;box.createLabel();&#xD;box.label.isBold = true;&#xD;if(cst !== ""){&#xD;  box.setPicture(proc.reportNewCostumeStretched(cst,100,100).contents);&#xD;};&#xD;box.addBody(autoscroll( body));&#xD;box.body.fixLayout();&#xD;names.forEach((e, f) =&gt; {&#xD;box.addButton(actions[f], e);&#xD;})&#xD;box.fixLayout();&#xD;box.popUp(this.world());</l></block><list><block var="title"/><block var="body"/><block var="variadic"/><block var="cvariadic"/><block var="cst"/></list></block></script></block-definition><block-definition s="edit box title %&apos;title&apos; pic %&apos;cst&apos; $nl body %&apos;body&apos; desc %&apos;desc&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s" readonly="true"><options>§_costumesMenu</options></input><input type="%mlt"></input><input type="%mlt"></input></inputs><script><block s="doDeclareVariables"><list><l>res</l><l>result</l></list></block><block s="doSetVar"><l>res</l><block s="evaluate"><block s="reportJSFunction"><list><l>title,cst,body,desc,proc</l></list><l>let res = false,&#xD;    cancel = false;&#xD;&#xD;var box = new DialogBoxMorph();&#xD;box.ok = body=&gt;{res = box.getInput(); box.destroy()};&#xD;box.cancel = body=&gt;{cancel = true; res = true; box.destroy()};&#xD;box.destroy = body=&gt;{if (!cancel) {res = box.getInput();}else{res=true;}&#xD;    (function() {&#xD;    var world = this.world();&#xD;    world.keyboardFocus = null;&#xD;    world.hand.destroyTemporaries();&#xD;    DialogBoxMorph.uber.destroy.call(this);&#xD;    }).call(box);}&#xD;box.promptCode(&#xD;    title,&#xD;    body,&#xD;    this.world(),&#xD;    (cst !== "")?&#xD;    proc.reportNewCostumeStretched(cst, 100, 100).contents&#xD;    :undefined,&#xD;    desc&#xD;);&#xD;&#xD;return () =&gt; res;</l></block><list><block var="title"/><block var="cst"/><block var="body"/><block var="desc"/></list></block></block><block s="doUntil"><block s="reportOr"><block var="result"/><block s="reportEquals"><block var="result"/><l></l></block></block><script><block s="doSetVar"><l>result</l><block s="evaluate"><block var="res"/><list></list></block></block></script></block><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block var="result"/><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="reportBoolean"><l><bool>false</bool></l></block><block var="result"/></block></block></script></block-definition><block-definition s="%&apos;prop&apos; of %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">length<options>length&#xD;rank&#xD;shape&#xD;size&#xD;&#126;1&#xD;flatten&#xD;transpose&#xD;reverse&#xD;shuffle&#xD;&#126;2&#xD;lines&#xD;csv&#xD;json</options></input><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>prop</l><l>list</l><l>proc</l></list><l>if (!(list instanceof List)){&#xD; throw new Error("expecting list but getting " +&#xD; ((list === 0)? "nothing":proc.reportTypeOf(list)));&#xD;}&#xD;switch (prop) {&#xD; case "reverse":&#xD;  return new List(list.itemsArray().reverse());&#xD; case "shuffle":&#xD;  return new List(list.itemsArray().sort((a, b) =&gt; (0.5 - Math.random())));&#xD; case "lines":&#xD;  if (list.rank() &lt; 2){&#xD;   return list.itemsArray().join(&apos;\n&apos;);&#xD;  } else {&#xD;   throw new Error("Unable to convert to lines");&#xD;  }&#xD; case "csv":&#xD;  if (list.canBeCSV()){&#xD;   return list.asCSV();&#xD;  } else {&#xD;   throw new Error("Unable to convert to CSV");&#xD;  }&#xD; case "json":&#xD;  if (list.canBeJSON()){&#xD;   return list.asJSON();&#xD;  } else {&#xD;   throw new Error("Unable to convert to JSON");&#xD;  }&#xD; default:&#xD;  return (list[prop] || (() =&gt; 0)).call(list);&#xD;}</l></block><list><block var="prop"/><block var="list"/></list></block></block></script></block-definition><block-definition s="is %&apos;list&apos; %&apos;which&apos; ?" type="predicate" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s" readonly="true">empty<options>circular&#xD;scalar&#xD;empty&#xD;flat</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>prop</l><l>list</l><l>proc</l></list><l>if (!(list instanceof List)){&#xD; throw new Error("expecting list but getting " +&#xD; ((list === 0)? "nothing":proc.reportTypeOf(list)));&#xD;}&#xD;switch (prop) {&#xD; case "empty":&#xD;  return list.isEmpty();&#xD; case "flat":&#xD;  try {&#xD;   return list.rank() &lt; 2;&#xD;  } catch (e) {&#xD;   return false;&#xD;  }&#xD; case "circular":&#xD;  return list.itemsArray().some(i =&gt; list === i);&#xD; case "scalar":&#xD;  const isScalar = function(x) {&#xD;                    if (!(x instanceof List)){&#xD;                     return true;&#xD;                    } else {&#xD;                     return x.length() == 1&#xD;                     &amp;&amp; isScalar(x.at(1));&#xD;                    }}&#xD;  return isScalar(list);&#xD; default:&#xD;  return "";&#xD;}</l></block><list><block var="which"/><block var="list"/></list></block></block></script></block-definition><block-definition s="pen %&apos;which&apos;" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">hue<options>size&#xD;&#126;1&#xD;hue&#xD;saturation&#xD;brightness&#xD;transparency&#xD;&#126;2&#xD;red&#xD;green&#xD;blue&#xD;&#126;3&#xD;rgb&#xD;hsv&#xD;&#126;4&#xD;down?</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>which</l></list><l>switch (which) {&#xD; case "size":&#xD;  return this.penSize();&#xD; case "hue":&#xD;  return this.color.hsv()[0];&#xD; case "saturation":&#xD;  return this.color.hsv()[1];&#xD; case "brightness":&#xD;  return this.color.hsv()[2];&#xD; case "red":&#xD;  return this.color.r;&#xD; case "green":&#xD;  return this.color.g;&#xD; case "blue":&#xD;  return this.color.b;&#xD; case "down?":&#xD;  return this.isDown;&#xD; case "hsv":&#xD;  return new List(this.color.hsv());&#xD; case "rgb":&#xD;  return new List([this.color.r, this.color.g, this.color.b]);&#xD; default:&#xD;  return "";&#xD;}</l></block><list><block var="which"/></list></block></block></script></block-definition><block-definition s="is %&apos;txt&apos; valid JSON?" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mlt">{"foo":"bar"}</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>txt</l></list><l>try {&#xD; let tmp = JSON.parse(txt);&#xD; return true;&#xD;} catch (e) {&#xD; return false;&#xD;}</l></block><list><block var="txt"/></list></block></block></script></block-definition><block-definition s="costume %&apos;cst&apos; made %&apos;p&apos; % as opaque" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">current<options>§_costumesMenu</options></input><input type="%n">50</input></inputs><script><block s="doReport"><block s="reportNewCostume"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportConcatenatedLists"><list><block s="reportListItem"><block s="reportNewList"><list><l>1</l><l>2</l><l>3</l></list></block><l/></block><block s="reportNewList"><list><block s="reportVariadicProduct"><list><block s="reportListItem"><l>4</l><l/></block><block s="reportQuotient"><block var="p"/><l>100</l></block></list></block></list></block></list></block></autolambda><list></list></block><block s="reportGetImageAttribute"><l><option>pixels</option></l><l><option>current</option></l></block></block><block s="reportGetImageAttribute"><l><option>width</option></l><l><option>current</option></l></block><block s="reportGetImageAttribute"><l><option>height</option></l><l><option>current</option></l></block></block></block></script></block-definition><block-definition s="symbol %&apos;type&apos; at size %&apos;size&apos; color %&apos;color&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">Notes<options>function() {&#xD;var obj = {};&#xD;Object.keys(SymbolMorph.prototype)&#xD;.filter(e =&gt; e.includes(&quot;renderSymbol&quot;))&#xD;.map(e =&gt; e.replace(&quot;renderSymbol&quot;, &quot;&quot;))&#xD;.filter(e =&gt; e !== &quot;ClosedBrushPath&quot; &amp;&amp; e !== &quot;Stop&quot;)&#xD;.sort()&#xD;.forEach(e =&gt; obj[e] = e);&#xD;return obj;&#xD;}</options></input><input type="%n">50</input><input type="%clr">rgba(0,0,0,255)</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>type</l><l>size</l><l>color</l></list><l>if ("renderSymbol" + type in SymbolMorph.prototype){&#xD; return new Costume((new SymbolMorph(type.charAt(0).toLowerCase() +&#xD;                                     type.slice(1), size, color)).fullImage(), type);&#xD;} else {return false;}</l></block><list><block var="type"/><block var="size"/><block var="color"/></list></block></block></script></block-definition><block-definition s="clamp %&apos;num&apos; between %&apos;low&apos; and %&apos;high&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">-1</input><input type="%n">1</input></inputs><script><block s="doIf"><block s="reportIsA"><block var="num"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="clamp %n between %n and %n"><l></l><block var="low"/><block var="high"/></custom-block></autolambda><list></list></block><block var="num"/></block></block></script></block><block s="doReport"><block s="reportVariadicMax"><list><block var="low"/><block s="reportVariadicMin"><list><block var="num"/><block var="high"/></list></block></list></block></block></script></block-definition><block-definition s="lerp from: %&apos;from&apos; to: %&apos;to&apos; by %&apos;percent&apos; %" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">10</input><input type="%n">75</input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="hyperize function %repRing"><block s="reifyReporter"><autolambda><block s="reportVariadicSum"><list><block var="from"/><block s="reportVariadicProduct"><list><block s="reportDifference"><block var="to"/><block var="from"/></block><block s="reportQuotient"><block var="percent"/><l>100</l></block></list></block></list></block></autolambda><list><l>from</l><l>to</l></list></block></custom-block><list><block var="from"/><block var="to"/></list></block></block></script></block-definition><block-definition s="hyperize function %&apos;func&apos;" type="reporter" category="control"><comment x="0" y="0" w="218" collapsed="false">Takes a dyadic scalar function as input, and&#xD;hyperizes it, so that it can take lists as inputs.&#xD;&#xD;Don&apos;t use on slow functions (this has compiled map calls).  Meant for use on primitives.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input></inputs><script><block s="doDeclareVariables"><list><l>hyper func</l><l>scalarized</l><l>scalar?</l><l>scalar-value</l></list></block><block s="doSetVar"><l>scalar?</l><block s="reifyScript"><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="x"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doReport"><block s="reportEquals"><block s="reportCombine"><block s="reportListAttribute"><l><option>dimensions</option></l><block var="x"/></block><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l></l><l></l></list></block></autolambda><list></list></block></block><l>1</l></block></block></script><list><l>x</l></list></block></block><block s="doSetVar"><l>scalar-value</l><block s="reifyScript"><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="x"/><l><option>list</option></l></block></block><script><block s="doReport"><block var="x"/></block></script></block><block s="doReport"><block s="evaluate"><block var="scalar-value"/><list><block s="reportListItem"><l>1</l><block var="x"/></block></list></block></block></script><list><l>x</l></list></block></block><block s="doSetVar"><l>hyper func</l><block s="reifyScript"><script><block s="doWarp"><script><block s="doIfElse"><block s="evaluate"><block var="scalar?"/><list><block var="a"/></list></block><script><block s="doIfElse"><block s="evaluate"><block var="scalar?"/><list><block var="b"/></list></block><script><block s="doReport"><block s="evaluate"><block var="func"/><list><block s="evaluate"><block var="scalar-value"/><list><block var="a"/></list></block><block s="evaluate"><block var="scalar-value"/><list><block var="b"/></list></block></list></block></block></script><script><block s="doSetVar"><l>scalarized</l><block s="evaluate"><block var="scalar-value"/><list><block var="a"/></list></block></block><block s="doIf"><block s="reportEquals"><l></l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>list</option></l></block></autolambda><list></list></block><block var="b"/></block></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="func"/><list><block var="scalarized"/><l></l></list></block></autolambda><list></list></block><block var="b"/></block></block></script></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="hyper func"/><list><block var="scalarized"/><l></l></list></block></autolambda><list></list></block><block var="b"/></block></block></script></block></script><script><block s="doIfElse"><block s="evaluate"><block var="scalar?"/><list><block var="b"/></list></block><script><block s="doSetVar"><l>scalarized</l><block s="evaluate"><block var="scalar-value"/><list><block var="b"/></list></block></block><block s="doIf"><block s="reportEquals"><l></l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>list</option></l></block></autolambda><list></list></block><block var="a"/></block></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="func"/><list><l></l><block var="scalarized"/></list></block></autolambda><list></list></block><block var="a"/></block></block></script></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="hyper func"/><list><l></l><block var="scalarized"/></list></block></autolambda><list></list></block><block var="a"/></block></block></script><script><block s="doIf"><block s="reportAnd"><block s="reportEquals"><l></l><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>list</option></l></block></autolambda><list></list></block><block var="a"/></block></block><block s="reportEquals"><l></l><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>list</option></l></block></autolambda><list></list></block><block var="b"/></block></block></block><script><block s="doReport"><custom-block s="multimap %repRing over %mult%l"><block var="func"/><list><block var="a"/><block var="b"/></list></custom-block></block></script></block><block s="doReport"><custom-block s="multimap %repRing over %mult%l"><block var="hyper func"/><list><block var="a"/><block var="b"/></list></custom-block></block></script></block></script></block></script></block></script><list><l>a</l><l>b</l></list></block></block><block s="doReport"><block var="hyper func"/></block></script></block-definition><block-definition s="multimap %&apos;function&apos; over %&apos;lists&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block s="reportListItem"><l>1</l><block var="lists"/></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="function"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><block var="lists"/></block></block><custom-block s="multimap %repRing over %mult%l"><block var="function"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportCDR"><l/></block></autolambda><list></list></block><block var="lists"/></block></custom-block></block></block></script></block-definition><block-definition s="sound %&apos;sound&apos; exists?" type="predicate" category="sound"><header></header><code></code><translations>el:υπάρχει ο ήχος _ ;&#xD;de:existiert Klang _ ?&#xD;</translations><inputs><input type="%s">pop<options>§_soundsMenu</options></input></inputs><script><block s="doIf"><block s="reportAnd"><custom-block s="setting %s"><l>Hyper blocks support</l></custom-block><block s="reportIsA"><block var="sound"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportMap"><block s="reifyPredicate"><autolambda><custom-block s="sound %s exists?"><l></l></custom-block></autolambda><list></list></block><block var="sound"/></block></block></script></block><block s="doReport"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportGetSoundAttribute"><l><option>name</option></l><l></l></block></autolambda><list></list></block><block s="reportGet"><l><option>sounds</option></l></block></block><block var="sound"/></block></block></script></block-definition><block-definition s="setting %&apos;which&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="254.66666666666663" 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;el:ρύθμιση _&#xD;de:Einstellung _&#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([StageMorph.prototype.dimensions.x,&#xD;                                   StageMorph.prototype.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="glide %&apos;x&apos; secs to random position" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doGlide"><block var="x"/><block s="reportRandom"><l>-240</l><l>240</l></block><block s="reportRandom"><l>-180</l><l>180</l></block></block></script></block-definition><block-definition s="bounce %&apos;x&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="setHeading"><block s="reportDifference"><block s="direction"></block><block var="x"/></block></block></script></block-definition><block-definition s="previous costume" type="command" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSwitchToCostume"><block s="reportDifference"><block s="getCostumeIdx"></block><l>1</l></block></block><block s="doIf"><block s="reportEquals"><l>0</l><block s="getCostumeIdx"></block></block><script><block s="doSwitchToCostume"><block s="reportListAttribute"><l><option>length</option></l><block s="reportGet"><l><option>costumes</option></l></block></block></block></script></block></script></block-definition><block-definition s="%&apos;x&apos; ^^ %&apos;y&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doIfElse"><custom-block s="is %s a positive integer?"><block var="y"/></custom-block><script><block s="doIfElse"><block s="reportGreaterThan"><block var="y"/><l>0</l></block><script><block s="doSetVar"><l>a</l><block s="reportPower"><block var="x"/><block var="x"/></block></block></script><script><block s="doSetVar"><l>a</l><block var="x"/></block><block s="doReport"><block var="a"/></block></script></block><block s="doRepeat"><block s="reportDifference"><block var="y"/><l>1</l></block><script><block s="doSetVar"><l>a</l><block s="reportPower"><block var="x"/><block var="a"/></block></block></script></block><block s="doReport"><block var="a"/></block></script><script><block s="doReport"><l>Error: Can only tetrate positive integers at the moment. Please deal with it and add the functionality if possible.</l></block></script></block></script></block-definition><block-definition s="is %&apos;num&apos; a positive integer?" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportAnd"><block s="reportAnd"><block s="reportEquals"><block var="num"/><block s="reportRound"><block var="num"/></block></block><block s="reportGreaterThanOrEquals"><block var="num"/><l>0</l></block></block><block s="reportIsA"><block var="num"/><l><option>number</option></l></block></block></block></script></block-definition><block-definition s="-Infinity" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportDifference"><l>0</l><custom-block s="%s ^^ %s"><l>10</l><l>3</l></custom-block></block></block></script></block-definition><block-definition s="play frequency %&apos;frequency&apos; for %&apos;time&apos; secs" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="fork"><block s="reifyScript"><script><block s="doWait"><block var="time"/></block><block s="stopFreq"></block></script><list></list></block><list></list></block><block s="playFreq"><block var="frequency"/></block></script></block-definition><block-definition s="%&apos;x&apos; !" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doIfElse"><custom-block s="is %s a positive integer?"><block var="x"/></custom-block><script><block s="doSetVar"><l>a</l><l>1</l></block><block s="doFor"><l>i</l><l>1</l><block var="x"/><script><block s="doSetVar"><l>a</l><block s="reportVariadicProduct"><list><block var="a"/><block var="i"/></list></block></block></script></block><block s="doReport"><block var="a"/></block></script><script><block s="doReport"><l>Error: You can only find the factorial of positive integers</l></block></script></block></script></block></script></block-definition><block-definition s="enter key pressed?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportKeyPressed"><block s="reportJoinWords"><list><l></l><l>enter</l></list></block></block></block></script></block-definition><block-definition s="true" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportEquals"><l>1</l><l>1</l></block></block></script></block-definition><block-definition s="false" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportEquals"><l>1</l><l>2</l></block></block></script></block-definition><block-definition s="sign of %&apos;x&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doIfElse"><block s="reportNot"><block s="reportEquals"><block var="x"/><l>0</l></block></block><script><block s="doReport"><block s="reportQuotient"><block var="x"/><block s="reportMonadic"><l><option>abs</option></l><block var="x"/></block></block></block></script><script><block s="doReport"><l>0</l></block></script></block></script></block-definition><block-definition s="glide %&apos;time&apos; secs to mouse pointer" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doGlide"><block var="time"/><block s="reportMouseX"></block><block s="reportMouseY"></block></block></script></block-definition><block-definition s="set pitch effect to %&apos;x&apos;" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doSetVar"><l>pitch</l><block s="reportVariadicProduct"><list><block s="reportVariadicSum"><list><l>100</l><custom-block s="max %s %s"><l>-93.75</l><custom-block s="min %s %s"><l>700</l><block var="x"/></custom-block></custom-block></list></block><l>480</l></list></block></block></script></block-definition><block-definition s="min %&apos;x&apos; %&apos;y&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doIfElse"><block s="reportLessThan"><block var="x"/><block var="y"/></block><script><block s="doReport"><block var="x"/></block></script><script><block s="doReport"><block var="y"/></block></script></block></script></block-definition><block-definition s="max %&apos;x&apos; %&apos;y&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doIfElse"><block s="reportLessThan"><block var="x"/><block var="y"/></block><script><block s="doReport"><block var="y"/></block></script><script><block s="doReport"><block var="x"/></block></script></block></script></block-definition><block-definition s="change pitch effect by %&apos;x&apos;" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doSetVar"><l>pitch</l><block s="reportVariadicSum"><list><block var="pitch"/><block s="reportVariadicProduct"><list><l>480</l><block var="x"/></list></block></list></block></block></script></block-definition><block-definition s="$camera snap" type="reporter" category="sensing"><comment x="0" y="0" w="216" collapsed="false">takes a snapshot with the webcam and reports it as a new costume, or zero if the user cancels</comment><header></header><code></code><translations>pt:$camera a imagem actual do vídeo&#xD;</translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>test</l><l>pic</l></list></block><block s="doSetVar"><l>test</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var camDialog,&#xD;    result = false;&#xD;&#xD;camDialog = new CamSnapshotDialogMorph(&#xD;    this.parentThatIsA(IDE_Morph),&#xD;    this,&#xD;    function () {result = null; },&#xD;    function (costume) {&#xD;        result = costume;&#xD;        this.close();&#xD;    }&#xD;);&#xD;&#xD;camDialog.key = &apos;camera&apos;;&#xD;camDialog.popUp(this.world());&#xD;return function () {return result; };</l></block><list></list></block></block><block s="doWaitUntil"><block s="evaluate"><block s="reifyScript"><script><block s="doSetVar"><l>pic</l><block s="evaluate"><block var="test"/><list></list></block></block><block s="doReport"><block s="reportNot"><block s="reportEquals"><block var="pic"/><block s="reportBoolean"><l><bool>false</bool></l></block></block></block></block></script><list></list></block><list></list></block></block><block s="doReport"><block var="pic"/></block></script></block-definition><block-definition s="set drag mode %&apos;option&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">draggable<options>draggable&#xD;not draggable</options></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="option"/><l>not draggable</l></block><script><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block></script></block><block s="doIf"><block s="reportEquals"><block var="option"/><l>draggable</l></block><script><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block></script></block></script></block-definition><block-definition s="set rotation style %&apos;option&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">can rotate<options>can rotate&#xD;only face left/right&#xD;don&apos;t rotate</options></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="option"/><l>can rotate</l></block><script><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><l>1</l></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>rotation style</option></l></block></autolambda><list></list></block></list></block></script></block><block s="doIf"><block s="reportEquals"><block var="option"/><l>only face left/right</l></block><script><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><l>2</l></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>rotation style</option></l></block></autolambda><list></list></block></list></block></script></block><block s="doIf"><block s="reportEquals"><block var="option"/><l>don&apos;t rotate</l></block><script><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><l>0</l></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>rotation style</option></l></block></autolambda><list></list></block></list></block></script></block></script></block-definition><block-definition s="change center x by %&apos;x&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block var="x"/></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>rotation x</option></l></block></autolambda><list></list></block></list></block></script></block-definition><block-definition s="change center y by %&apos;y&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block var="y"/></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>rotation y</option></l></block></autolambda><list></list></block></list></block></script></block-definition><block-definition s="tell parent to %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%cmdRing"></input></inputs><script><block s="doTellTo"><block s="reportGet"><l><option>parent</option></l></block><block var="action"/><list></list></block></script></block-definition><block-definition s="%&apos;input&apos; %&apos;letter&apos; combo pressed?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">ctrl<options>ctrl&#xD;alt&#xD;shift&#xD;backspace</options></input><input type="%txt"></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="input"/><l>ctrl</l></block><script><block s="doReport"><block s="reportKeyPressed"><block s="reportJoinWords"><list><block var="input"/><l> </l><block var="letter"/></list></block></block></block></script><script><block s="doReport"><block s="reportAnd"><block s="reportKeyPressed"><block var="input"/></block><block s="reportKeyPressed"><block var="letter"/></block></block></block></script></block></script></block-definition><block-definition s="key %&apos;key&apos; pressed?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%txt">shift</input></inputs><script><block s="doReport"><block s="reportKeyPressed"><block var="key"/></block></block></script></block-definition><block-definition s="html %&apos;url&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s">snap.berkeley.edu</input></inputs><script><block s="doIf"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block s="reportTextSplit"><block var="url"/><l>https://</l></block></block><l>2</l></block><script><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>https://api.allorigins.win/raw?url=</l><block var="url"/></list></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block s="reportTextSplit"><block var="url"/><l>https://</l></block></block><l>1</l></block><script><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>https://api.allorigins.win/raw?url=</l><block s="reportJoinWords"><list><l>https://</l><block var="url"/></list></block></list></block></block></block></script></block><block s="doIf"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block s="reportTextSplit"><block var="url"/><l>https://</l></block></block><l>2</l></block><script><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>https://api.allorigins.win/raw?url=</l><block s="reportJoinWords"><list><l>https://</l><block var="url"/></list></block></list></block></block></block></script></block></script></block-definition><block-definition s="all but %&apos;letter&apos; in text %&apos;text&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt">b</input><input type="%txt">bapple</input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l><l>list</l></list></block><block s="doSetVar"><l>list</l><block s="reportTextSplit"><block var="text"/><l><option>letter</option></l></block></block><block s="doUntil"><block s="reportNot"><block s="reportListContainsItem"><block var="list"/><block var="letter"/></block></block><script><block s="doForEach"><l>item</l><block var="list"/><script><block s="doIf"><block s="reportEquals"><block var="item"/><block var="letter"/></block><script><block s="doDeleteFromList"><block s="reportListIndex"><block var="item"/><block var="list"/></block><block var="list"/></block></script></block></script></block></script></block><block s="doSetVar"><l>result</l><l></l></block><block s="doForEach"><l>item</l><block var="list"/><script><block s="doSetVar"><l>result</l><block s="reportJoinWords"><list><block var="result"/><block var="item"/></list></block></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="play sounds %&apos;sounds&apos; in parallel" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%mult%txt" readonly="true"><options>§_soundsMenu</options></input></inputs><script><block s="doWarp"><script><block s="doForEach"><l>item</l><block var="sounds"/><script><block s="playSound"><block var="item"/></block></script></block></script></block></script></block-definition><block-definition s="go to layer %&apos;#&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="goToLayer"><l><option>front</option></l></block><block s="goBack"><block s="reportDifference"><block var="#"/><l>1</l></block></block></script></block-definition><block-definition s="delete all empty items in %&apos;list&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doIf"><block s="reportListContainsItem"><block var="list"/><l></l></block><script><block s="doUntil"><block s="reportNot"><block s="reportListContainsItem"><block var="list"/><l></l></block></block><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doSetVar"><l>a</l><l>1</l></block><block s="doForEach"><l>item</l><block var="list"/><script><block s="doIf"><block s="reportEquals"><block var="item"/><l></l></block><script><block s="doDeleteFromList"><block var="a"/><block var="list"/></block></script></block><block s="doChangeVar"><l>a</l><l>1</l></block></script></block></script></block></script></block></script></block></script></block-definition><block-definition s="play windows vista/7 &quot;mystify&quot; screen $nl saver for %&apos;#&apos; seconds" type="command" category="Project"><variables><list struct="atomic" id="24752">seconds played,flat line ends?,shown?,pos,sdir</list></variables><header></header><code></code><translations></translations><inputs><input type="%n">60</input></inputs><script><block s="doSetVar"><l>pos</l><block s="reportNewList"><list><block s="xPosition"></block><block s="yPosition"></block></list></block></block><block s="doSetVar"><l>shown?</l><block s="reportShown"></block></block><block s="doSetVar"><l>sdir</l><block s="direction"></block></block><block s="hide"></block><block s="doSetVar"><l>flat line ends?</l><block s="reportGlobalFlag"><l><option>flat line ends</option></l></block></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><l><bool>true</bool></l></block><block s="setColor"><color>0,5,0,1</color></block><block s="gotoXY"><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><l>0</l></block><block s="setSize"><block s="reportAttributeOf"><l><option>height</option></l><l>Stage</l></block></block><block s="down"></block><block s="changeXPosition"><block s="reportAttributeOf"><l><option>width</option></l><l>Stage</l></block></block><block s="up"></block><block s="doSetVar"><l>seconds played</l><l>0</l></block><block s="setPenColorDimension"><l><option>hue</option></l><l>1</l></block><block s="setPenColorDimension"><l><option>saturation</option></l><l>100</l></block><block s="setPenColorDimension"><l><option>brightness</option></l><l>100</l></block><block s="fork"><block s="reifyScript"><script><block s="doRepeat"><block var="#"/><script><block s="doWait"><l>1</l></block><block s="doChangeVar"><l>seconds played</l><l>1</l></block></script></block></script><list></list></block><list></list></block><block s="doDeclareVariables"><list><l>speed</l><l>dir</l><l>repeat</l><l>type</l></list></block><block s="setSize"><l>1</l></block><block s="doUntil"><block s="reportEquals"><block var="seconds played"/><block var="#"/></block><script><block s="doSetVar"><l>type</l><block s="reportRandom"><l>1</l><l>2</l></block></block><block s="doIfElse"><block s="reportEquals"><block var="type"/><l>1</l></block><script><block s="setHeading"><l>90</l></block><block s="gotoXY"><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><block s="reportRandom"><block s="reportAttributeOf"><l><option>bottom</option></l><l>Stage</l></block><block s="reportAttributeOf"><l><option>top</option></l><l>Stage</l></block></block></block></script><script><block s="setHeading"><l>180</l></block><block s="gotoXY"><block s="reportAttributeOf"><l><option>right</option></l><l>Stage</l></block><block s="reportRandom"><block s="reportAttributeOf"><l><option>bottom</option></l><l>Stage</l></block><block s="reportAttributeOf"><l><option>top</option></l><l>Stage</l></block></block></block></script></block><block s="setPenColorDimension"><l><option>hue</option></l><block s="reportRandom"><l>1</l><l>100</l></block></block><block s="setPenColorDimension"><l><option>transparency</option></l><l>0</l></block><block s="setPenColorDimension"><l><option>brightness</option></l><l>100</l></block><block s="doSetVar"><l>speed</l><block s="reportRandom"><l>100</l><l>400</l></block></block><block s="down"></block><block s="doSetVar"><l>repeat</l><block s="reportRandom"><l>0</l><l>360</l></block></block><block s="doRepeat"><block var="repeat"/><script><block s="doIf"><block s="reportEquals"><block var="seconds played"/><block var="#"/></block><script><block s="doIfElse"><block var="shown?"/><script><block s="show"></block></script><script><block s="hide"></block></script></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><block var="flat line ends?"/></block><block s="clear"></block><block s="doGotoObject"><block var="pos"/></block><block s="setHeading"><block var="sdir"/></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="forward"><block var="speed"/></block><block s="forward"><block s="reportDifference"><l>0</l><block var="speed"/></block></block><block s="turn"><l>1</l></block><block s="changePenColorDimension"><l><option>hue</option></l><l>.1</l></block><block s="changePenColorDimension"><l><option>transparency</option></l><l>1</l></block></script></block><block s="up"></block><block s="doIfElse"><block s="reportEquals"><block var="type"/><l>1</l></block><script><block s="setHeading"><l>90</l></block></script><script><block s="setHeading"><l>180</l></block></script></block><block s="setPenColorDimension"><l><option>brightness</option></l><l>0</l></block><block s="setPenColorDimension"><l><option>transparency</option></l><l>0</l></block><block s="down"></block><block s="doRepeat"><block var="repeat"/><script><block s="doIf"><block s="reportEquals"><block var="seconds played"/><block var="#"/></block><script><block s="doIfElse"><block var="shown?"/><script><block s="show"></block></script><script><block s="hide"></block></script></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><block var="flat line ends?"/></block><block s="clear"></block><block s="doGotoObject"><block var="pos"/></block><block s="setHeading"><block var="sdir"/></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="forward"><block var="speed"/></block><block s="forward"><block s="reportDifference"><l>0</l><block var="speed"/></block></block><block s="turn"><l>1</l></block><block s="changePenColorDimension"><l><option>hue</option></l><l>.1</l></block><block s="changePenColorDimension"><l><option>transparency</option></l><l>1</l></block></script></block><block s="up"></block><block s="doWarp"><script><block s="doIf"><block s="reportEquals"><block var="seconds played"/><block var="#"/></block><script><block s="doIfElse"><block var="shown?"/><script><block s="show"></block></script><script><block s="hide"></block></script></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><block var="flat line ends?"/></block><block s="clear"></block><block s="doGotoObject"><block var="pos"/></block><block s="setHeading"><block var="sdir"/></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="up"></block><block s="doIfElse"><block s="reportEquals"><block var="type"/><l>1</l></block><script><block s="setHeading"><l>90</l></block></script><script><block s="setHeading"><l>180</l></block></script></block><block s="setPenColorDimension"><l><option>brightness</option></l><l>0</l></block><block s="setPenColorDimension"><l><option>transparency</option></l><l>0</l></block><block s="down"></block><block s="doRepeat"><block var="repeat"/><script><block s="forward"><block var="speed"/></block><block s="forward"><block s="reportDifference"><l>0</l><block var="speed"/></block></block><block s="turn"><l>1</l></block><block s="changePenColorDimension"><l><option>hue</option></l><l>.1</l></block><block s="changePenColorDimension"><l><option>transparency</option></l><l>1</l></block></script></block><block s="up"></block></script></block></script></block><block s="doIfElse"><block var="shown?"/><script><block s="show"></block></script><script><block s="hide"></block></script></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><block var="flat line ends?"/></block><block s="doGotoObject"><block var="pos"/></block><block s="setHeading"><block var="sdir"/></block><block s="clear"></block></script></block-definition><block-definition s="delete all clones" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doForEach"><l>item</l><block s="reportGet"><l><option>clones</option></l></block><script><block s="doTellTo"><block var="item"/><block s="reifyScript"><script><block s="removeClone"></block></script><list></list></block><list></list></block></script></block></script></block></script></block-definition><block-definition s="ask %&apos;prompt&apos; and report with default %&apos;default&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>promptStr</l><l>defaultStr</l></list><l>return(prompt(promptStr, defaultStr));</l></block><list><block var="prompt"/><block var="default"/></list></block></block></script></block-definition><block-definition s="alert %&apos;text&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>text</l></list><l>alert(text)</l></block><list><block var="text"/></list></block></script></block-definition><block-definition s="Notification (title,text,icon link,image link) %&apos;Title&apos; %&apos;text&apos; %&apos;icon link&apos; %&apos;image link&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%txt"></input><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>title</l><l>text</l><l>icon</l><l>image</l></list><l>if (!("Notification" in window)) {}&#xD;  else if (Notification.permission === "granted") {&#xD;    var notification = new Notification(title, {body:text, icon:icon, image:image});&#xD;  }&#xD;  else if (Notification.permission !== "denied") {&#xD;    Notification.requestPermission().then(function (permission) {&#xD;    if (permission === "granted") {&#xD;        var notification = new Notification(text);&#xD;      }&#xD;    });&#xD;  }</l></block><list><block var="Title"/><block var="text"/><block var="icon link"/><block var="image link"/></list></block></script></block-definition><block-definition s="setCookie (name, value, expiry date) %&apos;name&apos; %&apos;value&apos; %&apos;expiration_date&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>cname</l><l>cvalue</l><l>exdays</l></list><l>const d = new Date();&#xD;  d.setTime(d.getTime() + (exdays*24*60*60*1000));&#xD;  let expires = "expires=" + d.toGMTString();&#xD;  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";</l></block><list><block var="name"/><block var="value"/><block var="expiration_date"/></list></block></script></block-definition><block-definition s="getCookie (name) %&apos;name&apos;" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>cname</l></list><l>let name = cname + "=";&#xD;  let decodedCookie = decodeURIComponent(document.cookie);&#xD;  let ca = decodedCookie.split(&apos;;&apos;);&#xD;  for(let i = 0; i &lt; ca.length; i++) {&#xD;    let c = ca[i];&#xD;    while (c.charAt(0) == &apos; &apos;) {&#xD;      c = c.substring(1);&#xD;    }&#xD;    if (c.indexOf(name) == 0) {&#xD;      return c.substring(name.length, c.length);&#xD;    }&#xD;  }&#xD;  return "";</l></block><list><block var="name"/></list></block></block></script></block-definition><block-definition s="setData" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>name</l><custom-block s="ask %txt and report with default %txt"><l>Name?</l><l></l></custom-block></block><custom-block s="setCookie (name, value, expiry date) %txt %txt %txt"><l>username</l><block var="name"/><l>365</l></custom-block><block s="doSetVar"><l>tab_name</l><custom-block s="ask %txt and report with default %txt"><l>Tab name?</l><l>JavaScript Blocks</l></custom-block></block><custom-block s="setCookie (name, value, expiry date) %txt %txt %txt"><l>tab_name</l><block var="tab_name"/><l>365</l></custom-block><custom-block s="Change Tab Name %txt"><block var="tab_name"/></custom-block><custom-block s="Notification (title,text,icon link,image link) %txt %txt %txt %txt"><block s="reportJoinWords"><list><l>Hello </l><block var="name"/><l>!</l></list></block><block s="reportJoinWords"><list><l>Thank you for looking at my project, </l><block var="name"/><l>! It&apos;s cool that you named it "</l><block var="tab_name"/><l>"!</l></list></block><l></l><l></l></custom-block></script></block-definition><block-definition s="Change Tab Name %&apos;Name&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%txt">JavaScript Blocks</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>tab_name</l></list><l>document.title = tab_name</l></block><list><block var="Name"/></list></block></script></block-definition><block-definition s="Forward $arrowRight" type="command" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>window.history.forward();</l></block><list></list></block></script></block-definition><block-definition s="$arrowLeft Back" type="command" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>window.history.back();</l></block><list></list></block></script></block-definition><block-definition s="Stringify %&apos;text&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doIfElse"><custom-block s="%txt contains %s ?"><block var="text"/><l>"</l></custom-block><script><block s="doReport"><block s="reportJoinWords"><list><l>&apos;</l><block var="text"/><l>&apos;</l></list></block></block></script><script><block s="doReport"><block s="reportJoinWords"><list><l>"</l><block var="text"/><l>"</l></list></block></block></script></block></script></block-definition><block-definition s="%&apos;text&apos; contains %&apos;text2&apos; ?" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block s="reportTextSplit"><block var="text"/><block var="text2"/></block></block><l>1</l></block></block></script><scripts><script x="125.3115234375" y="139.83333333333331"><custom-block s="Stringify %txt"><custom-block s="Stringify %txt"><l></l></custom-block></custom-block></script></scripts></block-definition><block-definition s="Set Cursor %&apos;cursor&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">default<options>alias&#xD;all-scroll&#xD;auto&#xD;cell&#xD;context-menu&#xD;col-resize&#xD;copy&#xD;crosshair&#xD;default&#xD;e-resize&#xD;ew-resize&#xD;grab&#xD;grabbing&#xD;help&#xD;move&#xD;n-resize&#xD;ne-resize&#xD;nesw-resize&#xD;ns-resize&#xD;nw-resize&#xD;nwse-resize&#xD;no-drop&#xD;none&#xD;not-allowed&#xD;pointer&#xD;progress&#xD;row-resize&#xD;s-resize&#xD;se-resize&#xD;sw-resize&#xD;text&#xD;url(myBall.cur),auto&#xD;vertical-text&#xD;w-resize&#xD;wait&#xD;zoom-in&#xD;zoom-out&#xD;initial</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>name</l></list><l>document.body.style.cursor = name;</l></block><list><block var="cursor"/></list></block></script></block-definition><block-definition s="Save File (file name, contents, ext.) %&apos;name&apos; %&apos;contents&apos; %&apos;ext.&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%txt"></input><input type="%txt" readonly="true">txt<options>txt&#xD;py&#xD;js&#xD;rtf&#xD;xml&#xD;html&#xD;sb2&#xD;plain&#xD;png</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>file_name</l><l>file_contents</l><l>file_ext</l></list><l>var ide=this.parentThatIsA(IDE_Morph);&#xD;ide.saveFileAs(file_contents, &apos;text/&apos; + file_ext + &apos;;charset=utf-8&apos;, file_name);</l></block><list><block var="name"/><block var="contents"/><block var="ext."/></list></block></script><scripts><script x="182.1640625" y="191.49999999999994"><custom-block s="Stringify %txt"><l></l></custom-block></script></scripts></block-definition><block-definition s="Popup Website %&apos;http&apos; %&apos;URL&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">https://<options>https://&#xD;http://</options></input><input type="%txt">google.com</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>url</l><l>http</l></list><l>let n = window.open(http + url, "", "_blank");</l></block><list><block var="URL"/><block var="http"/></list></block></script></block-definition><block-definition s="URL %&apos;url&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%txt">snap.berkeley.edu</input></inputs><script><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>https://cors-anywhere.herokuapp.com/</l><block var="url"/></list></block></block></block></script></block-definition><block-definition s="Cloud ID %&apos;id&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>id</l></list><l>cloudid = id</l></block><list><block var="id"/></list></block></script></block-definition><block-definition s="Set %&apos;cloud var&apos; to %&apos;val&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><custom-block s="ignore %s"><custom-block s="URL %txt"><block s="reportJoinWords"><list><l>snapextensions.uni-goettingen.de/handleTextfile.php?type=write&amp;content=</l><block var="val"/><l>&amp;filename=./textfiles/</l><block var="cloud var"/><l>_id_</l><custom-block s="Cloud ID"></custom-block><l>.txt</l></list></block></custom-block></custom-block></script></block-definition><block-definition s="ignore %&apos;a&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs></block-definition><block-definition s="Cloud ID" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return cloudid;</l></block><list></list></block></block></script></block-definition><block-definition s="Get Cloud Var %&apos;var&apos;" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><custom-block s="substr %txt"><custom-block s="URL %txt"><block s="reportJoinWords"><list><l>snapextensions.uni-goettingen.de/handleTextfile.php?type=read&amp;filename=./textfiles/</l><block var="var"/><l>_id_</l><custom-block s="Cloud ID"></custom-block><l>.txt</l></list></block></custom-block></custom-block></block></script></block-definition><block-definition s="substr %&apos;text&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>text</l></list><l>return text.substring(0, text.length - 1);</l></block><list><block var="text"/></list></block></block></script></block-definition><block-definition s="hidden?" type="predicate" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNot"><block s="reportShown"></block></block></block></script></block-definition><block-definition s="right of center?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportGreaterThan"><block s="xPosition"></block><l>0</l></block></block></script></block-definition><block-definition s="left of center?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportLessThan"><block s="xPosition"></block><l>0</l></block></block></script></block-definition><block-definition s="up of center?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportGreaterThan"><block s="yPosition"></block><l>0</l></block></block></script></block-definition><block-definition s="down of center?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportLessThan"><block s="yPosition"></block><l>0</l></block></block></script></block-definition><block-definition s="make a square with size of %&apos;size&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doRepeat"><l>4</l><script><block s="forward"><block var="size"/></block><block s="turn"><l>90</l></block></script></block></script></block-definition><block-definition s="new counter" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>count</l></list></block><block s="doSetVar"><l>count</l><l>0</l></block><block s="doReport"><block s="reifyScript"><script><block s="doChangeVar"><l>count</l><l>1</l></block><block s="doReport"><block var="count"/></block></script><list></list></block></block></script></block-definition><block-definition s="pen up?" type="predicate" category="pen"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNot"><block s="getPenDown"></block></block></block></script></block-definition><block-definition s="make a circle with size of %&apos;size&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doRepeat"><l>24</l><script><block s="forward"><block var="size"/></block><block s="turn"><l>15</l></block></script></block></script></block-definition><block-definition s="%&apos;a&apos; &lt;= %&apos;b&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doIfElse"><block s="reportOr"><block s="reportGreaterThan"><block var="b"/><block var="a"/></block><block s="reportEquals"><block var="a"/><block var="b"/></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="%&apos;a&apos; &gt;= %&apos;b&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doIfElse"><block s="reportOr"><block s="reportLessThan"><block var="b"/><block var="a"/></block><block s="reportEquals"><block var="a"/><block var="b"/></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="move %&apos;a&apos; steps %&apos;b&apos; times" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doRepeat"><block var="b"/><script><block s="forward"><block var="a"/></block></script></block></script></block-definition><block-definition s="turn $turnLeft %&apos;a&apos; degrees %&apos;b&apos; times" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doRepeat"><block var="b"/><script><block s="turnLeft"><block var="a"/></block></script></block></script></block-definition><block-definition s="turn $turnRight %&apos;a&apos; degrees %&apos;b&apos; times" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doRepeat"><block var="b"/><script><block s="turn"><block var="a"/></block></script></block></script></block-definition><block-definition s="loud?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportOr"><block s="reportEquals"><block s="reportAudio"><l><option>volume</option></l></block><l>30</l></block><block s="reportGreaterThan"><block s="reportAudio"><l><option>volume</option></l></block><l>30</l></block></block></block></script></block-definition><block-definition s="start counter %&apos;counter&apos;" type="command" category="Project"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input></inputs></block-definition></blocks><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="flat" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="25642"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAAE0RJREFUeF7t21+IpXUdx/Hf7xlW9qYQysgCbxK70iUICoow71bYOc/BMqyELWQjpQLJJClyoz/amqUGYYnSH7yx9nnOrkRUhPbHIiPaKJCIpMxIxZzFKGLz/OLIGZlEqYvxfJrh5Z1J8znn9XzhvWd2phb/ECBAgAABAisXqCtfNEiAAAECBAgUAXYEBAgQIEAgICDAAXSTBAgQIEBAgN0AAQIECBAICAhwAN0kAQIECBAQYDdAgAABAgQCAgIcQDdJgAABAgQE2A0QIECAAIGAgAAH0E0SIECAAAEBdgMECBAgQCAgIMABdJMECBAgQECA3QABAgQIEAgICHAA3SQBAgQIEBBgN0CAAAECBAICAhxAN0mAAAECBATYDRAgQIAAgYCAAAfQTRIgQIAAAQF2AwQIECBAICAgwAF0kwQIECBAQIDdAAECBAgQCAgIcADdJAECBAgQEGA3QIAAAQIEAgICHEA3SYAAAQIEBNgNECBAgACBgIAAB9BNEiBAgAABAXYDBAgQIEAgICDAAXSTBAgQIEBAgN0AAQIECBAICAhwAN0kAQIECBAQYDdAgAABAgQCAgIcQDdJgAABAgQE2A0QIECAAIGAgAAH0E0SIECAAAEBdgMECBAgQCAgIMABdJMECBAgQECA3QABAgQIEAgICHAA3SQBAgQIEBBgN0CAAAECBAICAhxAN0mAAAECBATYDRAgQIAAgYCAAAfQTRIgQIAAAQF2AwQIECBAICAgwAF0kwQIECBAQIDdAAECBAgQCAgIcADdJAECBAgQEGA3QIAAAQIEAgICHEA3SYAAAQIEBNgNECBAgACBgIAAB9BNEiBAgAABAXYDBAgQIEAgICDAAXSTBAgQIEBAgN0AAQIECBAICAhwAN0kAQIECBAQYDdAgAABAgQCAgIcQDdJgAABAgQE2A0QIECAAIGAgAAH0E0SIECAAAEBdgMECBAgQCAgIMABdJMECBAgQECA3QABAgQIEAgICHAA3SQBAgQIEBBgN0CAAAECBAICAhxAN0mAAAECBATYDRAgQIAAgYCAAAfQTRIgQIAAAQF2AwQIECBAICAgwAF0kwQIECBAQIDdAAECBAgQCAgIcADdJAECBAgQEGA3QIAAAQIEAgICHEA3SYAAAQIEBNgNECBAgACBgIAAB9BNEiBAgAABAXYDBAgQIEAgICDAAXSTBAgQIEBAgN0AAQIECBAICAhwAN0kAQIECBAQYDdAgAABAgQCAgIcQDdJgAABAgQE2A0QIECAAIGAgAAH0E0SIECAAAEBdgMECBAgQCAgIMABdJMECBAgQECA3QABAgQIEAgICHAA3SQBAgQIEBBgN0CAAAECBAICAhxAN0mAAAECBATYDRAgQIAAgYCAAAfQTRIgQIAAAQF2AwQIECBAICAgwAF0kwQIECBAQIDdAAECBAgQCAgIcADdJAECBAgQEGA3QIAAAQIEAgICHEA3SYAAAQIEBNgNECBAgACBgIAAB9BNEiBAgAABAXYDBAgQIEAgICDAAXSTBAgQIEBAgN0AAQIECBAICAhwAN0kAQIECBAQYDdAgAABAgQCAgIcQDdJgAABAgQE2A0QIECAAIGAgAAH0E0SIECAAAEBdgMECBAgQCAgIMABdJMECBAgQECA3QABAgQIEAgICHAA3SQBAgQIEBBgN0CAAAECBAICAhxAN0mAAAECBATYDRAgQIAAgYCAAAfQTRIgQIAAAQF2AwQIECBAICAgwAF0kwQIECBAQIDdAAECBAgQCAgIcADdJAECBAgQEGA3QIAAAQIEAgICHEA3SYAAAQIEBNgNECBAgACBgIAAB9BNEiBAgAABAXYDBAgQIEAgICDAAXSTBAgQIEBAgN0AAQIECBAICAhwAN0kAQIECBAQYDdAgAABAgQCAgIcQDdJgAABAgQE2A0QIECAAIGAgAAH0E0SIECAAAEBdgMECBAgQCAgIMABdJMECBAgQECA3QABAgQIEAgICHAA3SQBAgQIEBBgN0CAAAECBAICAhxAN0mAAAECBATYDRAgQIAAgYCAAAfQTRIgQIAAAQF2AwQIECBAICAgwAF0kwQIECBAQIDdAAECBAgQCAgIcADdJAECBAgQEGA3QIAAAQIEAgICHEA3SYAAAQIEBNgNECBAgACBgIAAB9BNEiBAgAABAXYDBAgQIEAgICDAAXSTBAgQIEBAgN0AAQIECBAICAhwAN0kAQIECBAQYDdAgAABAgQCAgIcQDdJgAABAgQE2A0QIECAAIGAgAAH0E0SIECAAAEBdgMECBAgQCAgIMABdJMECBAgQECA3QABAgQIEAgICHAA3SQBAgQIEBBgN0CAAAECBAICAhxAN0mAAAECBATYDRAgQIAAgYCAAAfQTRIgQIAAAQF2AwQIECBAICAgwAF0kwQIECBAQIDdAAECBAgQCAgIcADdJAECBAgQEGA3QIAAAQIEAgICHEA3SYAAAQIEBNgNECBAgACBgIAAB9BNEiBAgAABAXYDBAgQIEAgICDAAXSTBAgQIEBAgN0AAQIECBAICAhwAN0kAQIECBAQYDdAgAABAgQCAgIcQDdJgAABAgQE2A0QIECAAIGAgAAH0E0SIECAAAEBdgMECBAgQCAgIMABdJMECBAgQECA3QABAgQIEAgICHAA3SQBAgQIEBBgN0CAAAECBAICAhxAN0mAAAECBATYDRAgQIAAgYCAAAfQTRIgQIAAAQF2AwQIECBAICAgwAF0kwQIECBAQIDdAAECBAgQCAgIcADdJAECBAgQEGA3QIAAAQIEAgICHEA3SYAAAQIEBNgNECBAgACBgIAAB9BNEiBAgAABAXYDBAgQIEAgICDAAXSTBAgQIEBAgN0AAQIECBAICAhwAN0kAQIECBAQYDdAgAABAgQCAgIcQDdJgAABAgQE2A0QIECAAIGAgAAH0E0SIECAAAEBdgMECBAgQCAgIMABdJMECBAgQECA3QABAgQIEAgICHAA3SQBAgQIEBBgN0CAAAECBAICAhxAN0mAAAECBATYDRAgQIAAgYCAAAfQTRIgQIAAAQF2AwQIECBAICAgwAF0kwQIECBAQIDdAAECBAgQCAgIcADdJAECBAgQEGA3QIAAAQIEAgICHEA3SYAAAQIEBNgNECBAgACBgIAAB9BNEiBAgAABAXYDBAgQIEAgICDAAXSTBAgQIEBAgN0AAQIECBAICAhwAN0kAQIECBAQYDdAgAABAgQCAgIcQDdJgAABAgQE2A0QIECAAIGAgAAH0E0SIECAAAEBdgMECBAgQCAgIMABdJMECBAgQECA3QABAgQIEAgICHAA3SQBAgQIEBBgN0CAAAECBAICAhxAN0mAAAECBATYDRAgQIAAgYCAAAfQTRIgQIAAAQF2AwQIECBAICAgwAF0kwQIECBAQIDdAAECBAgQCAgIcADdJAECBAgQEGA3QIAAAQIEAgICHEA3SYAAAQIEBNgNECBAgACBgIAAB9BNEiBAgAABAXYDBAgQIEAgICDAAXSTBAgQIEBAgN0AAQIECBAICAhwAN0kAQIECBAQYDdAgAABAgQCAgIcQDdJgAABAgQE2A0QIECAAIGAgAAH0E0SIECAAAEBdgMECBAgQCAgIMABdJMECBAgQECA3QABAgQIEAgICHAA3SQBAgQIEBBgN0CAAAECBAICAhxAN0mAAAECBATYDRAgQIAAgYCAAAfQTRIgQIAAAQF2AwQIECBAICAgwAF0kwQIECBAQIDdAAECBAgQCAgIcADdJAECBAgQEGA3QIAAAQIEAgICHEA3SYAAAQIEBNgNECBAgACBgIAAB9BNEiBAgAABAXYDBAgQIEAgICDAAXSTBAgQIEBAgN0AAQIECBAICAhwAN0kAQIECBAQYDdAgAABAgQCAgIcQDdJgAABAgQE2A0QIECAAIGAgAAH0E0SIECAAAEBdgMECBAgQCAgIMABdJMECBAgQECA3QABAgQIEAgICHAA3SQBAgQIEBBgN0CAAAECBAICAhxAN0mAAAECBATYDRAgQIAAgYCAAAfQTRIgQIAAAQF2AwQIECBAICAgwAF0kwQIECBAQIDdAAECBAgQCAgIcADdJAECBAgQEGA3QIAAAQIEAgICHEA3SYAAAQIEBNgNECBAgACBgIAAB9BNEiBAgAABAXYDBAgQIEAgICDAAXSTBAgQIEBAgN0AAQIECBAICAhwAN0kAQIECBAQYDdAgAABAgQCAgIcQDdJgAABAgQE2A0QIECAAIGAgAAH0E0SIECAAAEBdgMECBAgQCAgIMABdJMECBAgQECA3QABAgQIEAgICHAA3SQBAgQIEBBgN0CAAAECBAICAhxAN0mAAAECBATYDRAgQIAAgYCAAAfQTRIgQIAAAQF2AwQIECBAICAgwAF0kwQIECBAQIDdAAECBAgQCAgIcADdJAECBAgQEGA3QIAAAQIEAgICHEA3SYAAAQIEBNgNECBAgACBgIAAB9BNEiBAgAABAXYDBAgQIEAgICDAAXSTBAgQIEBAgN0AAQIECBAICAhwAN0kAQIECBAQYDdAgAABAgQCAgIcQDdJgAABAgQE2A0QIECAAIGAgAAH0E0SIECAAAEBdgMECBAgQCAgIMABdJMECBAgQECA3QABAgQIEAgICHAA3SQBAgQIEBBgN0CAAAECBAICAhxAN0mAAAECBATYDRAgQIAAgYCAAAfQTRIgQIAAAQF2AwQIECBAICAgwAF0kwQIECBAQIDdAAECBAgQCAgIcADdJAECBAgQEGA3QIAAAQIEAgICHEA3SYAAAQIEBNgNECBAgACBgMBKAzydTo+01q6otV45DMOtpZS29T2vr6+/ouu699Za33Tq1Km333333Q9v/vfpdHpda+38cRxfH3B6erLv+/NLKZ8rpTxSa716GIYTk8nkLaWUW2qt3+q67mOttZtba78vpfy9lHJlKeUbpZTHW2uv67ruC621q2utZ5x33nlnHT58eL75XtbX18/uuu63pZQ7Fl9nPp+fvdx6tLV2ZDabfS/1vu0SIECAwPYLrDTABw8e3LuxsfH4fD7fd+zYsd8t3s50On1ra+3kOI7fWUbuklrrP4dhOPqsOL92EbBkgBevZzKZfL3W+sA4jp/YfH193/+ylHLtOI7jdDpd/OHixuV7+UvXdf3Ro0d/ugh1rfXnpZSPlFLeWGt93zAM393yNT5eSjlYSnn/4us839b2n4CvSIAAAQIJgZUGeBmloZTy/XEcb1n++zdLKU+M43jZMjpfPO2006666667/vYcAb5pHMc3JKA2N/9bgLe+tr7vnwnwltDeVkr5QynlnHEcL13874cOHdrz2GOPXd9au2Az5AKcfMq2CRAg8MILJAK8+JR38TiOF+7fv//Fe/fu/Uxr7aKNjY0z77nnnn9Np9MvD8NwqO/7G1pr/6i1nt1a+2pr7dGu6+5srS2CfW4p5aHZbHb5s7+N/UKTbUeAu6771Hw+P7Fnz54zF3/Q6Pv+4vl8voj1zQL8Qj9BX58AAQL/HwIrD/CBAwdeura29uDpp59+xsmTJ982n8/vr7Xe1lo73HXdH+fz+Zu7rlv8HerFwzC8ezKZnFtr/dp8Pr9s67egJ5PJj7quOzIMw2yVlMsAn1VrvW9zt7X2rlLKeza/dbzl0+5zfgJefNrv+/6+WuutwzB8pe/7W8ZxfN/Wb2X7BLzKp2qLAAECqxdYeYCX33b+Ya31k/P5/ILZbPahvu8/sPhUW2v91alTp8a1tbV3llIurLVu/uDRk/P5/N6tAe77/rOllCfHcbx2lWzb8Ql4EeDJZHJ5rfWixXegSykHxnH8vACv8knaIkCAQFYgEuDpdHpVa+01rbVfzGazG5Y//XyilHL7OI5XTyaTa2qtrxzH8YpNnvX19f/4IazJZHJTKeXPs9ns+lUSbleAp9PpS1prD9da7yylXDUMw+MCvMonaYsAAQJZgVSAz2mtPfDUU0+96vjx4w8uPxX/oJRy7ziOH+37fn8p5YaNjY19i78XXvz3Zwe47/sf11o/OAzDT1ZJuF0BXr7nY8tP8e9Y/vszP039fN+C7vv+w+M4fnqV79kWAQIECGy/QCTAy9jcMY7j4u9On/5nOp1e0Vq7fxzHn5VS6mQyWfxu7atLKb9urX17bW3tgeXv2C5+lefltdaHhmG4bvtJnv8r/i+/B3z06NE/ra+vv6jWemmtdfGTzbfP5/MvHT9+/DfL//+RxSf9ffv23XrixInFryY9MgzDvX3fX9Jau3Hz94k3fw+41vpEa23xh5Ou1vqy1tpfx3G8ZpXv2xYBAgQIbL9ALMDb/1Z8RQIECBAgsHMEBHjnPCuvlAABAgR2kYAA76KH6a0QIECAwM4REOCd86y8UgIECBDYRQICvIseprdCgAABAjtHQIB3zrPySgkQIEBgFwkI8C56mN4KAQIECOwcAQHeOc/KKyVAgACBXSQgwLvoYXorBAgQILBzBAR45zwrr5QAAQIEdpGAAO+ih+mtECBAgMDOERDgnfOsvFICBAgQ2EUCAryLHqa3QoAAAQI7R0CAd86z8koJECBAYBcJ/BtSyW6Hol5HggAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="25643"></list></costumes><sounds><list struct="atomic" id="25644"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="2"><sprite name="PenDraw" idx="3" x="-213" y="-165.99999999999983" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="false" hidden="true" costume="0" color="80,80,80,1" pen="tip" id="25649"><costumes><list struct="atomic" id="25650"></list></costumes><sounds><list struct="atomic" id="25651"></list></sounds><blocks></blocks><variables></variables><scripts><script x="156.66666666666669" y="214.16666666666663"><block s="receiveGo"></block><block s="hide"></block><block s="setColor"><color>80,80,80,1</color></block><custom-block s="text %txt size %n text align %txt font %txt at x: %n y: %n clear? %b"><l>Web         HTML</l><l>12</l><l>left</l><l>px monospace</l><l>-213</l><l>-166</l><l><bool>true</bool></l></custom-block></script></scripts></sprite><sprite name="Web" idx="1" x="-187.48681397006476" y="-137.7754507098872" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="false" costume="0" color="80,80,80,1" pen="tip" id="25667"><costumes><list struct="atomic" id="25668"></list></costumes><sounds><list struct="atomic" id="25669"></list></sounds><blocks></blocks><variables></variables><scripts><script x="127.33333333333337" y="119.33333333333334"><block s="receiveInteraction"><l><option>clicked</option></l></block><block s="doSetVar"><l>search?q=</l><l>MW&gt;392ox,o3oa&gt;snap(param1201!)</l></block><block s="doSetVar"><l>search?q=</l><custom-block s="Prompt %s default %s"><l>Search Term:</l><l>Hi</l></custom-block></block><block s="doIfElse"><block s="reportEquals"><block var="web"/><block s="reportBoolean"><l><bool>true</bool></l></block></block><script><block s="doIf"><custom-block s="Confirm popup %s"><block s="reportJoinWords"><list><l>Go to website </l><l>https://www.google.com/search?q=</l><block var="search?q="/></list></block></custom-block><script><custom-block s="Notification title %s text %txt icon link %s image link %s"><l>MW Web</l><block s="reportJoinWords"><list><l>Website </l><l>https://www.google.com/search?q=</l><block var="search?q="/><l> Was Opened.</l></list></block><l></l><l></l></custom-block><block s="doRun"><block s="reportJSFunction"><list><l></l></list><block s="reportJoinWords"><list><l>open(&apos;https://www.google.com/search?q=</l><block var="search?q="/><l>&apos;, &apos;MW Web&apos;, &apos;width=1500,height=600&apos;);</l></list></block></block><list></list></block></script></block></script><script><block s="doIf"><custom-block s="Confirm popup %s"><l>Cookies are disabled. Enable?</l></custom-block><script><custom-block s="Notification title %s text %txt icon link %s image link %s"><l>MW Web</l><l>Cookies are enabled.</l><l></l><l></l></custom-block><block s="doSetVar"><l>web</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block></script></scripts></sprite><sprite name="HTML" idx="2" x="-135" y="-137.99999999999983" heading="100" scale="1" volume="100" pan="0" rotation="0" draggable="false" costume="0" color="255,139.22999999999993,0,0.8899999999999999" pen="tip" id="25750"><costumes><list struct="atomic" id="25751"></list></costumes><sounds><list struct="atomic" id="25752"></list></sounds><blocks></blocks><variables></variables><scripts><script x="66.33333333333331" y="149.00000000000068"><block s="receiveInteraction"><l><option>clicked</option></l></block><block s="doIf"><custom-block s="Confirm popup %s"><l>Use HTML edit?</l></custom-block><script><custom-block s="popup %s"><custom-block s="edit box title %s pic %s %br body %mlt desc %mlt"><l>Edit HTML</l><l></l><l>&lt;!DOCTYPE html&gt;&#xD;&lt;html&gt;&#xD;&lt;body&gt;&#xD;&lt;title&gt;HTML&lt;/title&gt;&#xD;&lt;h2&gt;HTML Website&lt;/h2&gt;&#xD;&lt;p&gt;Simple HTML Website&lt;/p&gt;&#xD;&#xD;&lt;a href="https://snap.berkeley.edu/snap/snap.html#present:Username=randyruby&amp;ProjectName=MW%20web"&gt;See Code&lt;/a&gt;&#xD;&lt;a href="https://snap.berkeley.edu/project?user=randyruby&amp;project=MW%20web"&gt;Go Back&lt;/a&gt;&#xD;&#xD;&lt;/body&gt;&#xD;&lt;/html&gt;</l><l>html</l></custom-block></custom-block></script></block></script></scripts></sprite><watcher var="search?q=" style="normal" x="7.195246527777726" y="7.195246527777783" color="243,118,29" hidden="true"/><watcher var="web" style="normal" x="8.79166666666697" y="8.791666666666671" color="243,118,29" hidden="true"/><watcher scope="PenDraw" s="xPosition" style="normal" x="8.79166666666697" y="27.25416842499999" color="74,108,212" hidden="true"/><watcher scope="PenDraw" s="yPosition" style="normal" x="8.79166666666697" y="45.71667018333332" color="74,108,212" hidden="true"/><watcher scope="PenDraw" s="direction" style="normal" x="8.79166666666697" y="64.17917194166662" color="74,108,212" hidden="true"/></sprites></stage><variables><variable name="search?q="><l>www</l></variable><variable name="web"><bool>true</bool></variable></variables></scene></scenes></project><media name="MW web" app="Snap! 7, https://snap.berkeley.edu" version="2"></media></snapdata>