<snapdata remixID="7431739"><project name="scratch blocks not in snap" app="Snap! 4.2, http://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAABnklEQVR4nO3Vsa3CUBAFUbqBwFRiB3abDigKCnk/QiIxhCP5nyNtfoOR9jIgdKkH8L8JkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQAD9xut7Hvez3j9AT4xbZtY13Xsa7rmKZpPJ/PetLpCPCHd4Cft23bWJalnnYKAvzhKMB5nutppyDALz5f8P1+H6/Xq550OgI8cL1ex+PxqGecngBJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEn9AXE1r8uAI+NYAAAAAElFTkSuQmCC</thumbnail><stage name="Stage" width="480" height="360" costume="0" tempo="60" threadsafe="false" lines="round" ternary="true" codify="false" inheritance="false" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAACtUlEQVR4nO3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Bo3+AAF/RMkcAAAAAElFTkSuQmCC</pentrails><costumes><list id="2"><item><costume name="Untitled" center-x="268" center-y="201.5" image="data:image/png;base64,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" id="3"/></item></list></costumes><sounds><list id="4"></list></sounds><variables></variables><blocks><block-definition s="switch backdrop to %&apos;backdrop&apos; and wait" 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="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="doBroadcastAndWait"><block s="reportJoinWords"><list><l>backdrop switches to </l><custom-block s="backdrop %s"><l></l></custom-block></list></block></block></script></block-definition></blocks><scripts></scripts><sprites><sprite name="Sprite" idx="1" x="0" y="0" heading="90" scale="1" rotation="0" draggable="true" costume="0" color="80,80,80" pen="tip" id="75"><costumes><list id="76"></list></costumes><sounds><list id="77"></list></sounds><blocks><block-definition s="go to %&apos;location&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">front<options>front&#xD;back</options></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="location"/><l>front</l></block><script><block s="comeToFront"></block></script><script><block s="goBack"><block s="reportQuotient"><l>1</l><l>0</l></block></block></script></block></script></block-definition><block-definition s="go %&apos;direction&apos; %&apos;layers&apos; layers" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">forward<options>forward&#xD;back</options></input><input type="%n">1</input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="direction"/><l>forward</l></block><script><block s="goBack"><block s="reportDifference"><l></l><block var="layers"/></block></block></script><script><block s="goBack"><block var="layers"/></block></script></block></script></block-definition><block-definition s="set drag mode %&apos;mode&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="doRun"><block s="reportJSFunction"><list><l>draggable</l></list><l>this.isDraggable = draggable;</l></block><list><block s="reportEquals"><block var="mode"/><l>draggable</l></block></list></block></script></block-definition></blocks><variables></variables><scripts></scripts></sprite><watcher scope="Stage" s="getTimer" style="normal" x="5" y="5" color="4,148,220" hidden="true"/></sprites></stage><hidden> comeToFront goBack getCostumeIdx</hidden><headers></headers><code></code><blocks><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></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 w="121" collapsed="false">use with |when&lt;&gt;} to make scratch&apos;s&#xD;|when [timer v] &gt; (10)} block</comment><variables><list id="231"><item><l>old result</l></item></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="set rotation style %&apos;style&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">left-right<options>left-right&#xD;don&apos;t rotate&#xD;all around</options></input></inputs><script><block s="doDeclareVariables"><list><l>#</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="style"/><l>left-right</l></block><script><block s="doSetVar"><l>#</l><l>2</l></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="style"/><l>don&apos;t rotate</l></block><script><block s="doSetVar"><l>#</l><l>0</l></block></script><script><block s="doSetVar"><l>#</l><l>1</l></block></script></block></script></block><block s="doRun"><block s="reportJSFunction"><list><l>x</l></list><l>this.rotationStyle = Number(x);&#xD;this.changed();&#xD;this.drawNew();&#xD;this.changed();</l></block><list><block var="#"/></list></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="reportListLength"><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="reportListLength"><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="username" 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>this.parentThatIsA(IDE_Morph).cloud.username;</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="reportSum"><block s="reportDifference"><block s="reportStringSize"><block var="base"/></block><block s="reportStringSize"><block var="sub"/></block></block><l>1</l></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="reportSum"><block var="region"/><l>1</l></block><block var="sub"/></block><block s="reportLetter"><block s="reportSum"><block var="region"/><block var="counter"/></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="reportListLength"><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></blocks><variables></variables></project><media name="scratch blocks not in snap" app="Snap! 4.2, http://snap.berkeley.edu" version="1"></media></snapdata>