diff --git a/Costumes/alonzo.gif b/Costumes/alonzo.gif
deleted file mode 100644
index ce53a4f9..00000000
Binary files a/Costumes/alonzo.gif and /dev/null differ
diff --git a/Costumes/alonzo.png b/Costumes/alonzo.png
new file mode 100644
index 00000000..04cc5337
Binary files /dev/null and b/Costumes/alonzo.png differ
diff --git a/Examples/Codification.xml b/Examples/Codification.xml
new file mode 100644
index 00000000..110a73c3
--- /dev/null
+++ b/Examples/Codification.xml
@@ -0,0 +1 @@
+This project features a FizzBuzz script and a recursive factorial block that you can run and debug inside Snap! and also compile into various text-based programming languages:
* JavaScript
* Smalltalk
* Python
* C
Enjoy!
-Jensdata:image/png;base64,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data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC
drag any example script into this ring:
FizzBuzz scripts for any language mapping:
a FizzBuzz version that compiles to any mappings in this project: JavaScript, Python, Smalltalk and C
i1another, slightly different variant of FizzBuzz, which also compiles to any language mapping in this projectrecursive factorial script with function header for any language mapping:
other example scripts for any language except C:
nested FOR block example. Try this one for any language mapping except Ctry the current script by executing it:convert to various textual languages. Use the watcher's context menu to export: forward turn turnLeft setHeading doFaceTowards gotoXY doGotoObject doGlide changeXPosition setXPosition changeYPosition setYPosition bounceOffEdge xPosition yPosition direction doSwitchToCostume doWearNextCostume getCostumeIdx doThinkFor doThink changeEffect setEffect clearEffects changeScale setScale getScale show hide comeToFront goBack playSound doPlaySoundUntilDone doStopAllSounds doRest doPlayNote doChangeTempo doSetTempo getTempo clear down up setColor changeHue setHue changeBrightness setBrightness changeSize setSize doStamp reportTouchingObject reportTouchingColor reportColorIsTouchingColor colorFiltered reportStackSize reportFrameCount doAsk reportLastAnswer getLastAnswer reportMouseX reportMouseY reportMouseDown reportKeyPressed reportDistanceTo doResetTimer reportTimer getTimer reportAttributeOf reportURL reportIsFastTracking doSetFastTracking reportCONS reportCDR reportListContainsItem doDeleteFromList doInsertInList doReplaceInList reifyScript reifyReporter reifyPredicate reportRound reportMonadic reportRandom reportLetter reportStringSize reportUnicode reportIsA reportIsIdentical reportJoinWords receiveGo receiveKey receiveClick receiveMessage doBroadcast doBroadcastAndWait getLastMessage doWarp doWait doWaitUntil doForever doRepeat doUntil doStopBlock doStop doStopAll fork evaluate doCallCC reportCallCC receiveOnClone createClone removeClone"<#1>",,print <#1>print <#1>if <#1>:
<#2>if <#1>:
<#2>
else:
<#3>(<#1> + <#2>)(<#1> - <#2>)(<#1> * <#2>)(<#1> / <#2>)(<#1> % <#2>)(<#1> < <#2>)(<#1> == <#2>)(<#1> > <#2>)(<#1> & <#2>)(<#1> | <#2>)(!<#1>)TrueFalse(<#1>, <#2>)(<#1>.length)<#1> = <#2><#1> += 1print <#1>#variables <#1>[<#1>]len(<#1>)<#2>[<#1> - 1]<#2>.append(<#1>)return <#1>
while <#1>:
<#2>
[]
isinstance(<#1>, (int, long, float, complex))
5<#1>
str(<#1>)
5for <#1> in range(<#2>, <#3>):
<#4>
15
console.log(<#1>);
console.log(<#1>);
<#1>
if (<#1>) {
<#2>
}
if (<#1>) {
<#2>
} else {
<#3>
}
return <#1>;
while (<#1>) {
<#2>
}
for (var <#1> = <#2>; <#1> <= <#3>; <#1> += 1) {
<#4>
}
(<#1> + <#2>)
(<#1> - <#2>)
(<#1> * <#2>)
(<#1> / <#2>)
(<#1> % <#2>)
(<#1> < <#2>)
(<#1> === <#2>)
(<#1> > <#2>)
(<#1> && <#2>)
(<#1> || <#2>)
(!<#1>)
true
falsehelloWorld
(<#1> + <#2>)world
(<#1>.length)5
(typeof <#1> === 'number')5
(<#1>.toString())5
function fact(n) {
<body>
}5
fact(<#1>)7
function fib(n) {
<body>
}7
fib(<#1>)
<#1> = <#2>;
<#1> += 1;
console.log(<#1>);
var <#1>;
[<#1>]
[]
(<#1>.length)1
<#2>[<#1> - 1]
<#2>.push(<#1>);
Transcript
show: <#1>;
cr.
Transcript
show: <#1>;
cr.
<#1>
<#1> ifTrue: [
<#2>].
<#1>
ifTrue: [
<#2>]
ifFalse: [
<#3>].
<#1>
[<#1>] whileTrue: [
<#2>].
(<#2> to: <#3>) do: [:<#1> |
<#4>].
(<#1> + <#2>)
(<#1> - <#2>)
(<#1> * <#2>)
(<#1> / <#2>)
(<#1> \\ <#2>)
(<#1> < <#2>)
(<#1> = <#2>)
(<#1> > <#2>)
(<#1> and: [<#2>])
(<#1> or: [<#2>])
(<#1> not)
true
falsehelloWorld
(<#1>, <#2>)world
(<#1> size)5
(<#1> isNumber)5
(<#1> printString)5
| fact |
fact := [:n| <body>].5
(fact value: <#1>)7
| fib |
fib := [:n | <body>].7
(fib value: <#1>)
<#1> := <#2>.
<#1> := <#1> + 1.
Transcript
show: <#1>;
cr.
| <#1> |
#(<#1>)
(OrderedCollection new)
(<#1> size)1
(<#2> at: <#1>)
<#2> add: <#1>.
print <#1>
print <#1>
<#1>
if <#1>:
<#2>
if <#1>:
<#2>
else:
<#3>
return <#1>
while <#1>:
<#2>
for <#1> in range(<#2>, <#3>):
<#4>
(<#1> + <#2>)
(<#1> - <#2>)
(<#1> * <#2>)
(<#1> / <#2>)
(<#1> % <#2>)
(<#1> < <#2>)
(<#1> == <#2>)
(<#1> > <#2>)
(<#1> & <#2>)
(<#1> | <#2>)
(!<#1>)
True
FalsehelloWorld
(<#1> + <#2>)world
(<#1>.length)5
isinstance(<#1>, (int, long, float, complex))5
str(<#1>)5
def fact(n):
<body>5
fact(<#1>)7
def fib(n):
<body>7
fib(<#1>)
<#1> = <#2>
<#1> += 1
print <#1>
#variables <#1>
[<#1>]
[]
len(<#1>)1
<#2>[<#1> - 1]
<#2>.append(<#1>)
printf(<#1>);
printf("\n");
printf(<#1>);
printf("\n");
#include <stdio.h>
int main()
{
<#1>
return(0);
}
if <#1>
{
<#2>
}
if <#1>
{
<#2>
}
else
{
<#3>
}
return <#1>;
while <#1>
{
<#2>
}
int <#1>; for (<#1> = <#2>; <#1> <= <#3>; <#1>++)
{
<#4>
}
(<#1> + <#2>)
(<#1> - <#2>)
(<#1> * <#2>)
(<#1> / <#2>)
(<#1> % <#2>)
(<#1> < <#2>)
(<#1> == <#2>)
(<#1> > <#2>)
(<#1> && <#2>)
(<#1> || <#2>)
(!<#1>)5
"%d", <#1>5
int fact(int n)
{
<body>
}5
fact(<#1>)7
int fib(int n)
{
<body>
}7
fib(<#1>)
<#1> = <#2>;
<#1>++;
int <#1>;(<#1> + <#2>)
helloWorldfact(<#1>)
5fib(<#1>)
7#variables i
i = 1
while (i < 100):
if ((i % 3) == 0):
if ((i % 5) == 0):
print "FizzBuzz"
else:
print "Fizz"
else:
if ((i % 5) == 0):
print "Buzz"
else:
print str(i)
i += 1
i1another, slightly different variant of FizzBuzz, which also compiles to any language mapping in this project
\ No newline at end of file
diff --git a/Examples/JSfunctions.xml b/Examples/JSfunctions.xml
new file mode 100644
index 00000000..edba0d74
--- /dev/null
+++ b/Examples/JSfunctions.xml
@@ -0,0 +1 @@
+data:image/png;base64,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data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAAHUpJREFUeAHt3QuQXXV9B/ANhIAQCCFCAuERFGx9BOwICNKGBLJMgPDMQH20NTNSdazaotaxWkt0WpzqaMVWnUlnKoK1WiRACJCSQCJPNToUfFRLEYQYSBRT8uKRV7//m3vWzebu7t2bLdm9+zkzN+fcc/7/c/7nszC/+/uf/zmno8NEgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIENjDAnvv4eM7/AgQuPTSSycdf/zxs/bbb79Rq1ev/tUIOGWnSIAAgX4FRvVbQgECuylw0UUXfTO7uKy+m6e2b9++dNSoUUv22Wefxddff72AvJu+qhMgMDwF9hqezdbq4SSwadOmn6S92+ptPjzB94+zfO3mzZufmj179tXD6Vy0lQABAoMlIAMeLEn76VPg4osv/v1kvvf0LLRt27bvL1y48OSyfsaMGZeNGzduTtb95+jRo5ftvffeK5Ihb+1Zx3cCBAi0g8DodjgJ5zD0BbZu3Tplr726Olw+kSz4P9auXXv0QQcd9IOq9Vn+6yxPTbnLEoQ78nn2wgsvXJbAfce+++57TYLxc1VZcwIECAx3AQF4uP8Fh0n7k812JpDWWpsAe+uCBQtW5MsD3Zuf9R9N0L0qwXlqff24LF9UPumunpF11XXk7tUsEyBAYFgKdKUkw7L1Gj1sBJIBzyyNTSBde8IJJ3Rlvd1P4MYbb1x08803n5BA/d5qfcpvKcsvvPDCY9U6cwIECLSDgAy4Hf6KQ/wc0o38mmSxR5Rm5truXfPmzasGZDVsebLg30vGXG07I4O4Hsq14eerFeYECBBoBwEBuB3+ikP8HJL9dibw1lqZ4Lqkv+YmA+4sZZL9rtu4ceP3li9fXsuC+6tnOwECBIaTgAA8nP5aw7StCb4zq6aX0c3VcqP5nDlzjk/APrpsy33CywTfRkrWESDQDgICcDv8FYfwObzzne/cZ82aNdOrJiYD/m5uSVqWIFsexLH0hhtueKTaVuYvvvhiZ9X9nLJLu297qZcvuOCCzrRz4+TJk1fMnz9/80t9fMcjQKC9BdwH3N5/3z1+dr3d/9utYb/I9eEluSVp6YEHHnhnMuT56YK+uGx//vnnf3fx4sU/61b2JVvM07vm5GDfqh9wQ+bLt2zZsjQ/DpZkoFh5sIiJAAECuyUgA94tPpX7E9iwYUPnAQccUCuWQHtVFsYks52ZYHZiMuDyA/CYBNzLDz744MtzzTeL22sDtDJ/spngmydplf3Mzv5mZ18vTwBflax1Vfb1xKpVq6596KGHflw7+AD/SVtXpw3lvuOX5TM2n9nZdzlGR35U/PK55557T9q3sHw3ESBAoBUBAbgVNXWaFth///2r67/bEsA+m4dp/KZUzgsaDl2/fv3MvKBhZgJdZwLeUfWAXBv+nHuC++x+LvXTXX1T6r0p9TuqbussH5e6HXlwR8eRRx75l1OmTLk93z+dW5y+3XSjUzDl7z3vvPMmp83n5xizsuqsfA4r+8gxJudHxClZFIALiIkAgZYEdEG3xKZSMwLnnHPOQQl+zySwlh96P7jppptO6q1esspXJbB9NttrWWaC69tuu+22rzcqn7KvTsZ7a4LusWV7yZxzjJ8mUH4n2e+WHPOYrH5jPuPK9vr0rhx/fvWlhfmodEt/IfXeW+rmmGfeeuutfQ4oa+EYqhAgMIIEZMAj6I/9Up9qstsZCaq1/8YSMPu8/SgZ538nsB6U8rWAmvINM+Dzzz//5ck+70/wPbh+Po+MGTPmT3tmuMmQx6ab+B0pc1Wy2P0z/3K6qzcuWrToX1t0SNO2n5gg35G2bSptaHE/qhEgQKAmIAD7D+H/TSABa2a182S0fQbgs88++4CUP62UTzb7cLLLNVXd7vMEvvd3C74/T9mT0639bPcyZTnrysCpq9ON/HAC5qIShLP/axLkV5Rg37N8f99LQE/We2opl+Pfk0D+Qn91em6fPn366DxQ5Bs5h0lp03354bBk/Pjx915zzTUeMtITy3cCI0DAoyhHwB95T51iAk3tgRo5/nMJWvf11Y4EozOyfZ9SJt3IDbPfEgSzudYFXMplmtco+O7YtOPf0k2c4Pu58q10hWffl3ff3uxy6nW1L1lwnz8metvnhAkTjk7dObE4PdeoP1z2k1u01uZ2pyXp3v7wJZdccmRvda0nQKD9BATg9vub7tEzKl3EyTI/19nZ+Ylci/2demPuuf322/vMGBMcu7LlZJoNA1xuS3pbyo3vdoLX5lgrE7yuSRD7owToSd22dS2mHV8q14nLiiy/vdyb3LWxyYVuPyZKF3TDHwj97Sr3PD+WLLz8gFhRtSc/PPZLm8q5/32OcXN/+7CdAIH2ERjdPqfiTIaCQLLNyxNkrqhuPaq36YgEynfnsZLX3XHHHRsbtTN1atlyAtMLCbL3NCqTwPeKZI+1TSm3pWS0qTc5K95eAmvWdeS50z/M8tKUXZIXONxdjpc3Lz117rnnlh8A++Vz2NNPP31M5v+TT9NTstUyWrtk56vT/fxw0xV3Lrg99xB/Mau+mC73w7K/mTmHS0pWXC/m/uKdvXwj0NYCMuC2/vPukZO7OYHl/irDq7fgdVn35WR7j8+dO7cEwZ2meub6urIyZe6/5ZZbNu1UoP4l3bYTq/UJXG9OoD0tWfHHE8DuzvrNZVuWp+ZYVyRQ35ZboH6T7Hh5gv/Hst9aBlzKpM66Mm92SjZ/RPb52lI+x7wzs659NbuPnuXyw2BNGeWd9i6qtuUYDTP/ars5AQLtJSADbq+/5x4/mwxw+q804vTSFf3ss8+emQdsdKZrdWYCzZTMtyQLrv03l6B4YQLO1Sn7ZAZorcv2Wtvz4I5eu3eTfU6sMuDUfTaZ7XdSqXz+tgziSpA9I/spj7IsXboloI/J54yUPSPzrinbdxm01bWxwUK3e5nL1l7b16Bqv6vStnIPdK1c3vo0qPvu9+AKECCwRwUE4D3K374HTxb765zdv9c/HQnI+yfQ7FsfnVxOvATFY8qnCkBlZbquZ6cb+Xvpqt0lGCX7fCRFZpVyCVw7Xe+td23flk3l05EBTYfXA//MBO6ZqVt7HWLqLe/venSp32MqAb02lUdmVsuDMB+VNp5VflRk/pMlS5asGoR92gUBAsNEQAAeJn+o4d7MerdyV9dyRv9eeeihhz6R87oon3L7UclWy3Rart/elPnY2rdu/yR4fjPB+n1lVeZzM/taWW40leu+WX9d/dORh4K8MvVfm2D8/Ubl+1qXY9UCcILkz+6+++4n+yo7kG0ZODY1Pwxq3erZ92AG9oE0Q1kCBPaQgAC8h+BH+mHvu+++9TH4fPmU7uNc351Wuo4TJE8u14Eb+SxcuPD+ZMdPJiAelSB9Zrqx354u7682KttzXbLeR7OufAY0nXjiieXa7+GlUoLloF6jrZ9vrT25pj2o+67t1D8ECAxpAQF4SP95Rkbj6t3Ht+dsy6evaXsyxXclcN2cgLVPrh1/JYOsJmbxH9O1/VxfFVvdduyxx9ZGZ5f6CfyDmqXmR0T16sXN6RH4dqttVI8AgeEpsGP0x/Bsu1aPUIFkvpcmU/5GTr8axf+bdC1/JYH5gdx69PMEyi35vDwjsSfmmvIrs61ca/7fZNmf7HYNuim9dBMvSuZ7XrntKcF/QjLpAY2g7u0gGfk9Jo/KXFt/TOa9eU71H/RW1noCBNpTQAbcnn/Xtj6rdDtfnyCcuLr1qgTH8rCPQxJ8P1hOOkG269yTGZfBWqXruLYuGeeKLFzfVaCfhfLAjmSmtRHUCZRlYNigBN9y2AT0N9WDb4fRz/38IWwm0KYCVQbRpqfntNpVIEF4Qa4JvzqZbnld4LKc59Y+znVrstdbcwtUbYR0H+V22vT444+XwWG1wWCDHSSzv9rArnLA/FBw/XcneV8IjAwBGfDI+Du361luTyAuD7JYVLLVZ555ZkquCx+XzPKYZL4b88CNNXkj0+oEuCfS9Vx7D/FAIFKvK0iOHTt2UINk7i2unvy1Lj8MvjeQdlVly7Oxc76dyfDPzflOy/r1+THyy/QMrEqPwIq8+OHrXvRQaZkTGHoCrgEPvb+JFr2EArk/+egEq88kgP06gezOBLRleYHD2tKEbHsg205N9rx+0qRJE+bPn795MJqWNzSNT3Av90nvlYC5MD8iLhzofsuzr9Ol/s8ZMb5fH3XXJNP+UgLxl/ID5Fd9lOt3Uwn2+UGzOBavyTG/nPuhr1y+fPmWfisqQIBArwK6oHulsWEkCCRbfmvO87IEwvckCN9QAmNGVn837w7+VILvycUggfnbgxV8y/4SwGaU3ZblZKsDzaxHpX3l2vd1PYLvD7K7r+Zze87lx2XfmQ5Lpj0v15t/moB9wo5Vrf2bYP/JeJwen/Fx+miC+hta25NaBAhUArqgKwnzESmQ4HRdAsvrE7TOC0C53lsC4ykJzKdUIMn6XpFBXx9IsFya684/zPrt1bZW5tlP6TauVU1AG9CtTQm+V6biX1XHLT8a0tYP501LP6/WlXnae1oJlFmcnc8hOd6SWbNmTVu8ePHPyvaBTtnXBd3rZAT3Ad2/WyZAYOACuqAHbqZGGwqUa8iPPvroqblm3JmgWK79lgC849VL3c43wXN1gtmd+dyRwPdv6dp9sdvmphbTtf1Igv5xKbwytx8d1VSlFMrTvA7KKO8nsjiu1ElW+oWTTjrpinnz5m0r3xtNyeSvTjvfX7blR8Yvs/zatHlAz8JOMJ+QAFy6zKvpxdzudehg3ZJV7dScwEgTkAGPtL+4820oUO9ivicby+dvcs1zXLLjGcl+y3Oky4CpV5WKCZzl0ZFvTUB6a64Xn5PlN5f1zU7JYKekbAm+5RapAWW/+WHwZ6lWC75p10/yWsS/yKfPbLwE6AcffPC4BN8yUGtyzukPs4/55fjNTgn0p+S8u4rn2EsE3y4OCwRaFhCAW6ZTsZ0F6llieSZ1+ZQBWUcneywvdijdx2dl1aGZ9/ryhPrgrr2S4T5e6ldT6s+sglmC4YCu/+Z4l1f7yT4+neU+g28pW7LjXP/9fAnA5XuO/yeZDSgAJ9s9JdeSS/XalHZ8q1o2J0CgdQEBuHU7NUeQQF4mUbp+/6X+GZVu2UPyMomGD+YoL35IlvjjBMl9k/GuLJluCbYJ4KXrurr9aHv5PkDC2jOpS53UvaHZuuvWrVuW10I+k/IT0qbTp02bdtRAXiqR4PvG6lg5jy35vrD6bk6AQOsCAnDrdmqOXIFy/3EJaA2nZJnbEmhfyMbyWK4jk33OzYjluQle27O+dr02AfQXCdLlhRRNTcmoSwr6slI4XcKbkllvaKpiCpXbhfJDoFz3nVDq5Dr3QP+/7xqQlm7wu9I7MOB7qstxTQQI7CywYyjmzut8I0BgNwTyconHkmm+KoH43cl+b0jgrd1XnOBVBj3WLqYmKE9JmbV5u9Oyzs7Oj2aw1CnpLu71/8fsZ3zVpNRtOnBXdTI/rFrOcXv98VCVqeYlm89yLXDX1zWdeVf7MCdAoLGAUdCNXawlMGgCJbA+/PDDb1i/fn1nnqhVXrl4enZevf+46zglUCdIfzHZ7ce7Vv52odz/+1i+HlNW5QEbUxPof/Tbzb0v1Qd+lbpl2pz973LsHZt2/Te3Lr0lGfPX61u2pn2HJwPerYd67HoUawiMTIGBdkWNTCVnTWA3BMpAqFRfUf9cVbqTk8VOSyCema7ozoymnlqy43zGp3v5AynXKABvT9D9Wq6/fqw0JW95ektmteXyvZ/pg9X2HPfearmZedrU1f2c9t4j+DajpgyB5gQE4OaclCIwaAIZ0LUpO1tc/3RklPLEBOGz0jV8cgLyQ70dKEH32gTBWtDN/EOl+zpvaOrzVqZksOVtUe+o9pl6f1ctNzNPm7oGYKW80c/NoClDoEkBXdBNQilGYCgIJHv+UILiZ0pbyiCuLM/NgLAb83WXW5IS2E/PoK8yYvmQevnv5klep5blZqbycJKVK1euK4+8LAPI8hCQyQsWLHiqmbrKECDQv4AA3L+REgSGlMDZZ599Zbqi51WNSrf1TxOI56d7+bF8VicwH5/AOyfZ7qyUqV3vTYb9dL6fmwdoPFjV628+ffr00bl9aWPZR/a7LHH+zP7q2E6AQPMCAnDzVkoSGDICGTX95wm0H0l2Oqm/RqXcg+naviDZ68r+yvbcnuOcm+A+K89+/ocyurvndt8JEGhdQABu3U5NAntUII/LHJPM9m1pxBXJUKf2aEzi7rYVCZ635H3Dn0/wLJmsiQCBISQgAA+hP4amEGhVIMH4ZRs2bDgi9x5PTvfzwQceeOADrY5YLo/RzD7+KUH92ATxH2W/H7nrrrt+0Wrb1CNAoLGAANzYxVoCI1Kg3CKV4Htfgu/ruwGUp269J/cPX9dtnUUCBHZToNcn7+zmflUnQGAYCqTL+rIewbecxdiMgr46Wfbew/CUNJnAkBUQgIfsn0bDCLz0AhkpXZ4ZvcuUB3IckC7t2nOsd9loBQECLQkIwC2xqUSgPQUmTpy4KEG4evRk10lmXXlC1y73GncVsECAwIAFXAMeMJkKBNpfIE/QuiC3OL0v14MPykCsm/IAj0+1/1k7QwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBFgf8D0VWcikIKmX8AAAAASUVORK5CYII=
110
Hello!12
Hello, World!
\ No newline at end of file
diff --git a/Examples/animal-game.xml b/Examples/animal-game.xml
new file mode 100644
index 00000000..f27d81cd
--- /dev/null
+++ b/Examples/animal-game.xml
@@ -0,0 +1 @@
+Be sure to save the projet after playing so that it will remember the animals you teach it!data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAACT0lEQVR4nO3bQYrqQBRA0d5WT3vYS+hF9zZchn/QICGmKlEjd/DPgSAYBAeXZyVWPq4Q+qi/AP83AZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAU78fH9dr7+ff6+8hQAHfr6/bsf19/Pv4HQCHFhOPZPwfQR4wHIKivBcAtyxnH4m4fkEOLEOziQ8nwAnblNv9Z4IzyPAHbMAtyK8necQAe7ZCG0WoXXiYwS4YyuodYBb60QBHiPAHVvTbivAUZDMCXBg85+QBw4BHiPAgWfDE+FjBDjxaoQC3CfACQG+nwB3iPC9BLjnxXWgm9JzApw440LEFJwT4MRZAZqCYwIcODU+AQ4JcGC9D/AuyOt1eKP6crncnfMzvE2AA5sbDnYi2zp3uVxEOCHALVsXEYPIloHNPmOb1jYBruxNPlfE5xLgwrvisxYcE+DCXShPRibA4wS4sH4I/ewdMeK7J8CVvWdAHglPcPsEeMBoV/T0fQ4R4BGT9ZxnQF4jwAPuIlutE93je54AD1j/rA4fWOdhAiQlQFICJCVAUgIkJUBSAiQlQFICJCVAUgIkJUBSAiQlQFICJCVAUgIkJUBSAiQlQFICJCVAUgIkJUBSAiQlQFICJCVAUgIkJUBSAiQlQFICJCVAUgIkJUBSAiQlQFICJCVAUgIkJUBSAiQlQFL/ANRdqvbhGkj8AAAAAElFTkSuQmCCdata:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAACtUlEQVR4nO3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Bo3+AAF/RMkcAAAAAElFTkSuQmCC
1N1
- leaf
- rabbit
\ No newline at end of file
diff --git a/Examples/copter.xml b/Examples/copter.xml
new file mode 100644
index 00000000..e804bebb
--- /dev/null
+++ b/Examples/copter.xml
@@ -0,0 +1 @@
+data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAOZ0lEQVR4Xu2deVCUyRXAH95iXPCOBwl4l9dCWVHBbGRL0XhsxMqmvJX1CBov8KAsyws1GkUiup5/REGxPKICbsQDFayUoK5RJB7RIgHFi0QFL7xYCa/NN5kZmJnv7O5vprtqS3a+/rpfv/f73uvX3fONF/x2UAWIIjTASANeAkBGmhfdEg0IAAUITDXANYDDewTD8l+NhUC/9kyVZN154dNiiNq/HdLycriRycyCcAegf5MWULA6ycw61Sx71p08SMhI8QjI6QJY9g7Au261BqrpVQPKt6drNp47NhCRGA9JORnuODQnc8DS1/Dls7qQ6fsGprUMgh1556B7DR+48cNz2DglGg78KQn+6lUCIT9uC9mfvYXJP+kJ/6z3AQq2HYafjRwG5SUvoaiVN/g9LCP/VmTmwcDgL+AP//lbFUV+NyMWhvXobQoFX79+HSIjIyE7O5vI6+/vD6tXr4bRo0dXkf/FixcQHh4OmZmZlmutWrWCmzdvgo+Pj+rx5hblQ9Cqmarv5+lGxx6w8N8AL8rAq8lnUFHTC6Z2/wUk38yB5SOnQMKWb2Fw/zBIv5oDL/x8oez9O5jQMxSmfzEEzh/PgOcVH+CrwUMhq+AGhAZ0Jf82evUDFN74B/y++Hub8Qe2DoCrS7fxpBOHsgwaNAhOnToFKSkp5L+kpCTIy8uDoKAg6Ny5M9y4ccNy74MHD6BNmzaQkJAAc+bMsXweFxcHMTExgNcRRq0FQ3X0oR1am2F2v9MQ3Mj7R1BS9gpaNPSF4u+vA3RuQwRtUKcu1KlVm1yzL+Xb0qHW9CGyBlSx44SsejxUio6OJl7v4sWLRBwvLy+oqPj/EurYsWMhNzeXQPju3TuoV68euY71ysrKoH79+jbDwM/RQzZs2FCX4eG88cv4GF3aotkI3Tng/0ZmJvAkY9gDh/+flZUF/fr1s9hLqjNgwACYNGkSjBkzBhBc9IISrNeuXYPAwEAYOHAgPHr0iHhQPYvZQKQGoJmzWwy1x44dg4MHDxJWCgoKoG3bttCnTx9Ys2YN7NjxKQTi502bNiV1L1y4AM2bN4eAgADiBRcsWAAYfrGcPn0a+vfvX8WL6gnil3ExkJWvL9x6ymd5sGnshJjR41krGwFEb7dr1y4SgtGj7d+/38Yec+fOhcaNG5OE48yZMwRALAcOHIANGzaQv1u3bg3379+v4jGNMKzUJu9zREM9oJm9njUUiYmJcO7cOZK9Xrp0yYaX2bNnk1CLBT3flStXLB5w4cKFBNwGDRrA69evYdasWbBp0yaqAEqdLf8uGWL/kmwk66raNgxAM2W3rjRXUlJCvJvk1aT6GIKxzJgxA8aPH0+WYqKiomDJkiXQtWtXyMnJIR4RE5AjR47AunXrLHPBhw8fQqdOneDly5euutf1ulfkL3VtT2tjhgDoTvBJCsasdtGiRYBLMVJZv349vHnzhng8XNd7/vw5ueTr6wulpaUQGxtrUx/XBKdMmQIrV64k87/Lly9Dz549tdpQ8f08QWgIgGaf89lb9Pbt2wQo9HiTJ0+GqVOnkirl5eUkuUDPh6G4uoJwNmnShFzCf3HN8NWrV7Bnzx4YN26cYnj0uoGXJEV3AN0NPjS4tPaHfy9btgxOnjxJOKhduzZ8+PABOnbsCPn5+fDx40cbPo4ePUogw/U+qWBmjElKt27d9GJJdTulleu4jaK/Vn2/HjfqCqA7wodKxrW7t2/fEn2jJ8S1vVu3bln036xZM1i8eLHNjgdePH78OEREREBxcTGpW6tWLbL+h16Rp8IyJOsGoLvCJ0GHYbiwsBBGjRpFkoyhQ4daGNq9ezds3brVhinJO+7duxfmz59Ptu5w7bBly5ZQs2ZNslvCU2EFoS4AujN8EiS4DBMaGkoyYZwL4vIKJiZSkTJiDK/79u2DtLQ0CAsLI14Qs2i8r3fvTwcu8DNMSASEOpyI9gT4EBpMHjCcImiYxUq7HXhNgg8BxYVmnA9KSzabN2+G5ORkcgBh7dq1FmDtt/Z48IYs5oSaPGDJhkPgW3lgwRMKAnPnzh149uwZGS5CN2HCBMDwi2Xnzp3QpUsX8jmGWQy59t7x/fv30KtXL/Ix/o2HFHD7jrdCMxyrBnD54FGwLDyCN90ZJo/ksTAZwex25MiRpC+cz50/f94GNmsA8ewgJjHWBU/N4J4xwlpUVGSYzFoabjQrHErff0q8jCyqAfSU0CspXwJw8ODBcOLECQLQkydPyM6HtNeLdbEeHlL19vYmW3fWxfr41t27d8mckkcPKMn8TVI8JGYbexJbFYCeBh8aBJdaOnToQLbSzp49S7bXtmzZAjNnzrRsr2GmHBwcTJIOa9gkMHEJRlpDxIMJeLgVt+x4LkYvWAsAZVoft9lwi80eLDz1PG3aNLIOiN4P1wf79u1Lwqv1eh9m0ZjEoMfDc4B4Gtq+LZmiUK8WtGI65D4wZq6qGEBPSjzsLY1ZLJ5wuXfvHvj5+Vku4z4w7nakp6cDhmjJ4+Gyi/UBBpwb4qGEkJAQso2H80ezFKMSE8UAemL4tYYEl1nwRPPTp08tH+OcDw+ZtmvXzoYnXO8bMuTT1xNwFwSha9GiBTx+/Ngs3NnIaQSEigBMnbYUhgeFmFJ5rIXGfeIaNWqwFkNT/0ZkxooA9HTvp8l6bnKz3l5QNoBmmPulXc2G8O0rdDd1REgY7Jo4T/d2zdggMwB59n401qtowJIYMQ8mBofR6EpTH3pCKMsD8gbf8zevwT9mLJWVek2W0ngzb3qXhuNxABq5DqWREcNvL004DD71Gxjej5IO8D01+L4aPYpLD8j6KdTzadNDYSza4HHfXS+7OAWQ9cD1GiQLaIzoM2tOHPTr0t2IphW3qdfRLacAsvR+Rqw5KdYypzfw8n1rPSDkEkDh+eSRz9JBSBJuPJ0CUX9W/3YuhwDiW0rxSaNdjFrLoz0OWv3xAKEWh+EQQFYD0zIYWkbnrR9WtrLWg1q7cQXguZt/h9CNC3izrynkMSuEXAGo9ikyBSEGC+lbpx6UfJtqcC/Om1eTlHADYGxqIiw/bvvKM6baNGnnrD2hUjtyA6DwfvoRzxpCJbbkAsC7lT/+4r9oon4W8PCWWAOI6pcLIRcAyhXWw7mSPXweAAyodCj4q1KuSrUA0n6/nwDQlZmUX+cBQjl2rRZA2sLLEVS5CTz7Dto2rE7bcuzKHECx9mfcg8IaQjkZcRUAaYff6IPbIeEM2/Ur4xBg2zIPa4OuvGAVAGkfwXIlIFsTmr/3wso9/Z8y2NOXNOfKvlUApH3mzJWA5keA/QhYhmJXp2WqAEhbWAEgHUBp21XuQQWmALp6OuiYxjN6YTkfdOZkmAIoTj3ThZ+VF+QWQBF+6QKIvbGAUABI385c90gbQmfvGGQagoUHZMMp7fmgs7m+AJANA1z0SssT4qEEPJxQ7Xad/e8F0xIKhREekC2HPNhaeEC2DDDtXQDI2W/XMqWBQecCQAEgA+w+dUn7fY+OplsiBDNDgF3HtA+cOJvvCwDZccCsZ5qhFwfp7MynAJAZBvQ7pn3WUxqhWIimb2vuemT5nmuxFccdDnQFYuX5pFEKAOnam6veri7eDIF+7ZnKJABkqn52ndNONqobqasznyIJYceHYT2zDrnWA3O13SoANAwDNg3zEHIFgGxsz7RX2kes5AxWzjt/hAeUo0nO6/Dm9eRkv5Y64jgW53S5EI+HRMORiK7mf3if8IAm5Y+nRKM6FTrb/bCZIwoPaD4CN3wdCVFhI7gWXI73Y+4B5by8hmstMxCO55CrZO7HxRwQhcgtyoegVTMZmNJcXfIeciVtKv2ud5U5YO7irfC5X1uq1lHzdnWqAjLujNcs114tcsOu0zkgi8OKkkAjtsVCam4OY3Pz1b0ZQi6Zy6k83V7FA4a27wGZC9Yxs4Lwhp9Ubxavh7K62u91BhPzN6Q6Ek7tE8XsydGxY7N4PRwy/nq9b9SvVY+eWwC1uHXV2mB847Jh42D5V+MYS6Gse62OgmsAPQlCM3k9CVGt8BH72i9E44ep05bC8KAQZY+CgbWVpvYGiqJr02b0eKgAPV8sz8UP1ai1akJGCkQfUv9jyY76xd9J3hUxD0I79lArmtvepyXhqE4ppgbQekCpuedhxLaVNmPs16GrLBDCP/8591tbsgZicCW94XMYgvEC67erG6xL0bxCDRg1DXLoAVE+M06MFepVVJehAT2SDUfdCABlGMBTq3yTFA+J2RmGDt8pgMILGqp7rhs30utZD1wAyDUG9IXTurOhVGKXAAovqFSl5q1PI+Taa0cWgCyOaJnXjOaUnFbIVQWg8ILmhEqO1LRDrmoABYRyzGmuOkat7SnRgqwQbN1gacJh8KnfQEkfoi6HGmAVcjV5QOnmhN9EwpwBfH8ri0ObcyFS2tVsCN++ggtZUAjFHtBacrFTwo0dZQnCi9ezFlYTgNiQWb6tJctCblqJdaLhTK2aAZQaDw8MhpTpy9zUhOYdFou1PSXa0g1AqVMRlpWo39i6PIZcXZIQV2oTELrSkLHXrxX9CwJX/c7YTnRqXXcPiHLx+K46nfTFfTNm8Hq6JiGOLCIgpM+q2eDTvAwjR8UiHMvRkrY6vK3tKRmNISHYXoDEyi/4TAwOUyKXqCtTA2b0elRCcHX6E95QJlUyqvG+vCJjCKQKFQ9oLQzLlx/JVQrP9ZJyMiAiMZ5nERXJRh1ASbqsOXHQr0t3RcJ6amV3g45ZCHYEEG9vYuAF9OiD2yHhTCov4hgiBzMP6Go0uMcc3qN35dsJenqMpzTii9+u9Mz6OrcA2iuGxaEH/KGViJ3xkJWfx9pObtu/aQC0tgAucmfF/FHRq4Tl/myA21qa04GZEkBOdSnEUqEBAaAKpYlb9NOAAFA/XYqWVGhAAKhCaeIW/TQgANRPl6IlFRr4L01TWHMPfW6sAAAAAElFTkSuQmCCdata:image/png;base64,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EBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgQE2A4QIECAAIFAQIADdCMJECBAgIAA2wECBAgQIBAICHCAbiQBAgQIEBBgO0CAAAECBAIBAQ7QjSRAgAABAgJsBwgQIECAQCAgwAG6kQQIECBAQIDtAAECBAgQCAQEOEA3kgABAgQICLAdIECAAAECgYAAB+hGEiBAgAABAbYDBAgQIEAgEBDgAN1IAgQIECAgwHaAAAECBAgEAgIcoBtJgAABAgT+C9/nPXgguEvXAAAAAElFTkSuQmCC
5
40
40
40
40
\ No newline at end of file
diff --git a/Examples/count-change.xml b/Examples/count-change.xml
new file mode 100644
index 00000000..5c42c84c
--- /dev/null
+++ b/Examples/count-change.xml
@@ -0,0 +1 @@
+data:image/png;base64,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data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC
011
spaced-2001503090slots1782150spacedslots-2spacedslots0position1
52115
i
1
71015
7
\ No newline at end of file
diff --git a/Examples/icecream-visual.xml b/Examples/icecream-visual.xml
new file mode 100644
index 00000000..0a7575ec
--- /dev/null
+++ b/Examples/icecream-visual.xml
@@ -0,0 +1 @@
+Lists of lists of functions!
Green flag to display every possible ice cream serving; space to display every possible pizza serving.
Each of the grey ("other") reporters such as SMALL and VANILLA takes a Boolean input. If the input is TRUE, it reports its name as a text string; if the input is FALSE it reports a command script that can be RUN to draw its part of the picture.
CROSSPRODUCT takes a list of lists, each of which is a mutually exclusive option, e.g., [small medium large]. It reports a list of lists in which each sublist contains one item from each of the original option lists:
CROSSPRODUCT [[A B C] [X Y]]
==> [[A X] [A Y] [B X] [B Y] [C X] [C Y]]
It's called "crossproduct" because if the input is viewed as a list of sets, it reports the Cartesian cross product of those sets.
The cool thing is that there can be any number of sets, each with any number of items, because crossproduct is written as a tree recursion rather than as a nested loop.data:image/png;base64,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:image/png;base64,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
1
data
mapmany1
data lists
1
1
110i
1
cont
catchtag
cont
catchtag
Take any number of input lists, and create a new list containing the items of the input lists. So
APPEND [A B] [C D]
where the [,,,] are lists reports the list
[A B C D]
not [[A B] [C D]].
11
111Reports a new list containing the items of the input list, but in the opposite order.
1
inputresult
Reports a new list whose items are the same as in the input list, except that if two or more equal items appear in the input list, only the last one is kept in the result.
1Reports 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 < as the comparison function will sort from low to high; using > will sort from high to low.
1
even items
merge
11
#1#2
menu item
-1
new first
rest1
22
\ No newline at end of file
diff --git a/Examples/live-tree.xml b/Examples/live-tree.xml
new file mode 100644
index 00000000..a7cb2933
--- /dev/null
+++ b/Examples/live-tree.xml
@@ -0,0 +1 @@
+data:image/png;base64,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:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAgAElEQVR4Xu2dCdxXU/7HL5MiDGIso8Y+TRj70thJhmyJUSJlzVaSneIhZlDILkIJKUu2GkXWDDNGKfuSjAYzQvZB4f/+Pv0e/6enZ7m/3z333nPv/ZyX6+n5/c79nu95n/Oczz3nnmWxQEEEREAEREAERCBxAoslnqISFAEREAEREAERCCTAqgQiIAIiIAIikAIBCXAK0JWkCIiACIiACEiAVQdEQAREQAREIAUCEuAUoCtJERABERABEZAAqw6IgAiIgAiIQAoEJMApQFeSIiACIiACIiABVh0QAREQAREQgRQISIBTgK4kRUAEREAEREACrDogAiIgAiIgAikQkACnAF1JioAIiIAIiIAEWHVABERABERABFIgIAFOAbqSFAEREAEREAEJsOqACIiACIiACKRAQAKcAnQlKQIiIAIiIAISYNUBERABERABEUiBgAQ4BehKUgREQAREQAQkwKoDIiACIiACIpACAQlwCtCVpAiIgAiIgAhIgFUHREAEREAERCAFAhLgFKArSREQAREQARGQAKsOiIAIiIAIiEAKBCTAKUBXkiIgAiIgAiIgAVYdEAEREAEREIEUCEiAU4CuJEVABERABERAAqw6IAIiIAIiIAIpEJAApwBdSYqACIiACIiABFh1QAREQAREQARSICABTgG6khQBERABERABCbDqgAiIgAiIgAikQEACnAJ0JSkCIiACIiACEmDVAREQAREQARFIgYAEOAXoSlIEREAEREAEJMCqAyIgAiIgAiKQAgEJcArQlaQIiIAIiIAISIBVB0RABERABEQgBQIS4BSgK0kRyAKBC4Ngw8WD4KXvgmCFqiD4LAs+y0cRyBIBCXCWSku+ioADAn8JgulnBsHGTZn6cxDcQ5yNzwqCdZuKq+9FQATKJyABLp+Z7hCBzBIYGwTNZwYB/wWLtQqC3/YOgm8aygxC/QU94MGnB8GgzGZYjouAxwQkwB4XjlwTgbgIIK4vYnvtn4Lgj/Rwn62bzsVB0OXHIBhLT7lZXD7IrggUnYAEuOg1QPkvLAGGmB+mAegAgN4I7c21QSDQU/huiTOCYOvCAlLGRSBmAhLgmAHLvAi4IIAgdkUkx7iwVUdob+T3I2kILkJsSWJBIL3v+exwPrvNdZqyJwIi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JiABznb5yfsCE5AAF7jwlfVcEJAA56IYlYkiEpAAF7HUlec8EZAA56k0lZdCEZAAF6q4ldkcEpAA57BQlaViEJAAF6Oclcv8EpAA57dslbOcE5AA57yAlb3cE5AA576IlcG8EpAA57Vkla+iEJAAF6Wklc/cEZAA565IlaGCEZAAF6zAld38EJAA56cslZNiEpAAF7PclescEJAA56AQlYVCE5AAF7r4lfksE5AAZ7n05LsIBIEEWLVABDJKQAKc0YKT2yJQIiABVlUQgYwSkABntODktghIgFUHRCDbBCTA2S4/eS8C6gGrDohARglIgDNacHJbBNQDVh0QgWwTkABnu/zkvQioB6w6IAIZJSABzmjByW0RUA9YdUAEsk1AApzt8pP3IqAesOqACGSUgAQ4owUnt0VAPWDVARHINgEJcLbLT96LgHrAqgMikFECEuCMFpzcFgH1gFUHRCDbBCTA2S4/eS8C6gGrDohARglIgDNacHJbBNQDVh0QAREQAREQgfQIqAecHnulLAIiIAIiUGACEuACF76yLgIiIAIikB4BCXB67JWyCIiACIhAgQlIgAtc+Mq6CIiACIhAegQkwOmxV8oiIAIiIAIFJiABLnDhK+siIAIiIALpEZAAp8deKYuACIiACBSYgAS4wIWvrIuACIiACKRHQAKcHnulLAIiIAIiUGACEuACF76yLgIiIAIikB4BCXB67JWyCIiACIhAgQlIgAtc+Mq6CIiACIhAegQkwOmxV8oiIAIiIAIFJiABLnDhK+siIAIiIALpEZAAp8deKYuACIiACBSYgAS4wIWvrIuACIiACKRHQAKcHnulLAIiIAIiUGACEuACF76yLgIiIAIikB4BCXB67JWyCIiACIhAgQlIgAtc+Mq6CIiACIhAegQkwOmxV8oiIAIiIAIFJiABLnDhK+siIAIiIALpEZAAp8deKYuACIiACBSYgAS4wIWvrIuACIiACKRHQAKcHnulLAIiIAIiUGACEuACF76yLgIiIAIikB4BCXB67JWyCIiACIhAgQlIgAtc+Mq6CIiACIhAegQkwOmxV8oiIAIiIAIFJvB/+JwVOxTgAy8AAAAASUVORK5CYII=
\ No newline at end of file
diff --git a/Examples/swimmer.xml b/Examples/swimmer.xml
new file mode 100644
index 00000000..61292adc
--- /dev/null
+++ b/Examples/swimmer.xml
@@ -0,0 +1 @@
+data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAD2UlEQVR4Xu3YsUviYRzH8a+h6GKD0iYotDVILoI4t7U6OAnhHk6G0OwYNLX5F4gRuDo5pJv+Aw5u4lRLkGT3e+CO6zi6IOPzdM/b7Tr9fX6/9/PCjottf7yMFwVEBWIAFJVn1hUAIBCkBQAozc84ADEgLQBAaX7GAYgBaQEASvMzDkAMSAsAUJqfcQBiQFoAgNL8jAMQA9ICAJTmZxyAGJAWAKA0P+MAxIC0AACl+RkHIAakBQAozc84ADEgLQBAaX7GAYgBaQEASvMzDkAMSAsAUJqfcQBiQFoAgNL8jAMQA9ICAJTmZxyAGJAWAKA0P+MAxIC0AACl+RkHIAakBQAozc84ADEgLQBAaX7GAYgBaQEASvMzDkAMSAsAUJqfcQBiQFoAgNL8jAMQA9ICAJTmZxyAGJAWAKA0P+MAxIC0AACl+RkHIAakBQAozc84ADEgLQBAaX7GAYgBaQEASvMzDkAMSAsAUJqfcQBiQFoAgNL8jAMQA9ICAJTmZxyAGJAWAKA0P+MAxIC0AACl+RkHIAakBQAozc84ADEgLQBAaX7GAYgBaQEASvMzDkAMSAsAUJqfcQBiQFoAgNL8jAMQA9ICAJTmZxyAGJAWAKA0P+MAxIC0AACl+RkHIAakBQAozc84ADEgLQBAaX7GAYgBaQEASvMzDkAMSAsAUJqfcQBiQFoAgNL8jAPwDwOxWMxyuZwtl8tffzOdTq1cLrs/Pz09WSqVQs6OCgDwt5D39/dWqVQsnU7b0dGRTSYTi8fjdnJyYu122zKZjBWLRfeJ9Xpt2Wx2R8cQ7mUA+M7ZDwYDq9VqNp/PHcjotbe3Z9G35MvLi/s2TCaT4erZwZMD8B8RHx4e7ODgwG5ubuzu7s5ub2/dJxKJhD0/P//109H7V6vVDo7n/78EAD94xp1Ox7rd7rvv3m63dn19befn53Z4eGgXFxfWbDY/uBDm2wD4yXM/PT214XD45ioRxOg1m83s+PjY/doulUrW7/ffvC+fz39y/ft/HIA7PMP9/X17fHx0V7y6urJWq+W+CRuNhl1eXrqfn52dWa/Xs0KhYIvFYofr3/NSAPzic4tAjkYj9+/Fer1um83GLY7HY6tWq1+87v/lASg4o+i/eX5+UwrmvZoEoFfHEd7NADC8M/fqiQHo1XGEdzMADO/MvXpiAHp1HOHdDADDO3OvnhiAXh1HeDcDwPDO3KsnBqBXxxHezQAwvDP36okB6NVxhHczAAzvzL16YgB6dRzh3QwAwztzr54YgF4dR3g3A8DwztyrJwagV8cR3s0AMLwz9+qJAejVcYR3M6+obUe3SLkjfQAAAABJRU5ErkJggg==data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC
10
10
5
5
5
\ No newline at end of file
diff --git a/Examples/tree.xml b/Examples/tree.xml
new file mode 100644
index 00000000..937c198b
--- /dev/null
+++ b/Examples/tree.xml
@@ -0,0 +1 @@
+data:image/png;base64,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data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAgAElEQVR4nOydeZwcZZ3/P1V9z9k9fd8zuclJDpJMJpPJZCbH5JyZ3CcIgrjLDwVXRRAUBVRAFlhBAgsCcoYkZDLTVYOr63qs6yri6uquouCqKN7KGZLM1Pf3R3XV1NU9PckEPL7v1+t5KZmup56qrq7P832e7wEwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwDMMwf7UcQL0g44uCjBch45G3ejhjpoC9kPEhHED0rR4KwzAMw1SMIOHbogzSGiQ89FaPqVIEGV/Txi1IOI4jyL7VY2IYhmGYihBkvGEUYEHCa2/1mCpiACFBhmKaPBQw8FYPi2EYhmEqQpDxolHEikK24K0e16gcQMAqwIKEl9/qYTEMwzBMZUi43ybAMh59q4dVCYKM35kEWIaCI5j+Vo+LYRiG+VtjABshoV+Q8FVIuBv9yI16TAGzRLsl+dtxHVcBs4RB/EqQoQgyXkMBl5UY/3xIaMHT8FTUr4QDtsmDhPvGc+joQy0kPCzI+BYk3I4DcI1r/wzDMMxfMAcQECT8j01IZQxDwsdHO1yQ8YrNkjyE5LiMrQ9xQcJxW/99WKN/RsJ+QcYJwwRgGBK+gNvhK9v3AJZYBViQ8ctxGTegeYj/wdL//45b/wzDMMxfNoKE71qFyCR2Et5ZtgMJTzksQ3/ytAdWwBRBxq+dxgUJnwMAQca/lRn7LwAIo1z767brHUDotMeO0vcVA+gdj/4ZhmGYv2QktFmdkRyE7Dj6UFuyjwFstB0j4bnTHZrV8rV5LA9is9VqdxDqJ0Y5x5ccjvnI6Q5dkPFqmTFdc5r9MwzDMH/xyPhsOQEzCOqXynVjXALWl69H24s9gAAk7IeEPgxgvulvA2gvNTEoWqnzBQnfGHXcxc+WHIOE3Q7HVLZM3I80+hC3/XsB68uOp4ApFfXPMAzD/BUjob8iAVaXortKdSPI+JbDMvSl5U4tyPiFad+2H9MAaCFCr5QaC2TcUTz+hQrH/kK5YQgShiyfH8LoS9ffLDqFKZBwVP/DAbis+76Wsf/lZQtjGIZhzgAyPlSJiBVF8o8oJUwFXOYgfE+XPG8fJjkszWr7uv9ZRkx/pHVRdByraOzllpUFGd9zEMoLSo5dwvkOVnZr8W+fKzP2X4zybTAMwzB/MxxAQBg0Lx+PImTOYTq3wyfIGLYIzomS5+1DrS0RhoxXIOH9Yuml5+OmJV8J11Y8eZBxsmS+ZwlXO3z+30uO3eHzkHAU/biwzLL5SQxgQoXfCsMwDPM3gYwbxmAFD5fawxRkPO8gTBtKnVaQ8RvL5xVBNi8Hm6xMCbsd+vjTGETY2SJ3ngwcK3O/Gh0+/1KpiYwgQxltOR6jLHkzDMMwbx4CJNwuyHgaEq464ycz7MdWIMLOHs4ybnFYypVLnlTGI2OwvPsc+xjAxtG8uE1COIhtJa7/5w7nbCtzv6zxvSXHIMj4t5L3YBD7BBknirHLJScrDMMwzJuFBMkiZLec0fP1Y2GlQlYcz+UOfaQdLMPS+ZUHML9CwT8JJwvxdvis1ZgqEOFXHLNRSdhvu8ZBPFly7DIOV3i+N0p6gxdwl/F+sYMWwzDMnwGCjNdswnGmkXFoDFawY2ywIOO3DlbnjFKnLBcvW9bi7sMkQcbvxyK+BsvWHhus9medPPyh5L2S0FbhROWI7din4RFkPG2bqHA5RIZhmLcehwxQCgqYdUZP+jQ8gmQW/lGE0R4bXMDjDiL0mZLnlPHlUv3P3FyvrJgQp4WtDScBePVjBrHZlHpS3R/+zhisYAV9mAsAkPBxQcYxQcaQdf+5uHfbWGrogmQuxWhsVfeLlPlAgLyP4KDpoAFMsBWBkPBs2UQnpRhAJyR8ATI+Dwkrxnw8wzAM44CMRx0st/vH/TwSugUJPxQk/AoSDmIA545pT9UaGyxhsfVznoPCax2IrnE6vTDovPe8JpakXmT11oPMyWL/NxvHJ0gY1hycnJzAyoz9Bci4YbRr1WKOHccuOVvvKybGqQcZpRdZ6hEySjdSn9DvtX3icLBU/yVRva2Pme6DOkHbO+a+GIZhGAv9WOggGi+O6zkk7HaoifucU1KNMlbwH63digXVMgx91EOTO2tpamsttXij1IH4L5ajbpLh/LeX6lcTsJGWUQQZX7Hcj9cgYbHe3xFMt4ZCjSLCZT/rfgIUuEdUViHxYgfiO0wXWSZ+uhdZ69iHi5a2eeJQqqpTOdTCGY7jFmT8fsz9MQzD/FUzgBAkXAMJD0HCdY7pCx1w2AdWcBjhcRlTH+KC7JxrGRI2CDJOVipkxtjgdiRmRK/wKAsiDdSCqK0tR+yNTqAeA2gtZ31aBbgHGetE4f8ciyY41CeutPkfFMl1BMrU1lpqdkf0MS9BhFoRVVYifj0AoB9zSomg+zAs4qtawaJZfF+HhJZT+t4cJmaG56N03DXDMMzfHOoyp3VvcRgy7hntUEHGFx3E7vrxGJYg4bkygnr+qcYGr0Lie82uiKP4aq1VCD9TLtWkKIN6BJsAG5dtpXKXJsh46VQEeGk8Sgvrw+XGrsyvrp5Vzvmr5p/dZBXgDf608bv/WcmEIJVQxvtakPDsKffLMAzzV4WEK8tZeRjEnWWPl7HD4SX7w9Me1yDuLCumB1APjDk2+McAsBTR4XLi24IoNbsjo+4x2yxgIaPVJ7561OsbQ2yw1qruE2kpospoY5+2sPb1cv1Eb/LaBLgrlNImDk85jreAvYKME5Dw8Cjf27aSmbbUSdD4Oun1oRYFLAAnCWEY5i+NcuX0dGtulJemdSm4KJD2ONZKKVNlqGj93qx/doyxwd6H8cHRBKy4pKv4HhxVgG3LuBhA5xju/VfHIsDpd/hHFd8WRKnZU37yMOHiapsAr6tNKZDxIRQwy/TdHUEWg3hSq0ksyDheslLSAUTLlmcch/KPJmR8RvvuBRknUMCuce2fYRjmjCFhVUWWo4yflevGqag7ZFx0SmMapcqQIOF/bMeMMTa4pQIrsgVRyu4J2CYjupA/AZuI9SCjjOlaBxCylkgs1+puFF+qcPJAYsE+kdL+/+z1QdvY26ZEhwUZx4qfPQkJ3UWr15Z2U5AxjALe5fAcPDvKc/Sq7R6oTnavCjJ+N6Zlb4ftB0HGkLYywjAM8+dNARdX+vIvu6wq4UoHofuPUxnSKFWG3nB08BpjbPASIVKRAE+fX2e9B5/XhKzuLvs+ai8ywxVd5CEk9fq/Mq6odNyex1DRuFsQpdBHPNbv41fa/5+2p8429tp7XOYiFQX8oZQTlyboJictCbdW9BwZ6x7LuMOUZUvC+yu6fxLuLeUdjn5cWFEfDMMwbyn9mFOx5SjjREnv5qdQ7ZCh6Y0xj6d8lSEFT+GjZY61hSuVagsiDRUJ2YJwg/H8v4PqPPUHUQZFP2bfR+3V4oBHQZDwelHA2gBAkPGTiicPqGzyMHFNjVF8X0Y/5mj3Z3Z3vW3sgYdFW4KPCp6JXxfvfUul9x4yHilOmL5h6evlirznJcwt9YwUBb69ku+AYRjmLcea8ajsC1fC18v08zPby3AsmY8K2FmqypDe3ygOYYKMZyq5jgnrqiuyIpeIEe26R5yHisvd2fcHHAQ4exwAcAAuSLgWMm5xEhXNetMtvgIWVSpg59Q7h05Z29mNIZulqnleL+hosI09+RHfqOk2SwjqbYKMl8t8xjox+71DKtAfmbJsqZOpHwgynrH5H1iE29TPIH5a8fPGMAzzljOA3jFllRpAr2M/Dl7LkHC0ojFIKIxSqUcp9vdA2X4OIVlJbHD9Te6KRKwFUfI+CkWQ8DoGsbl4v1pFGTTx4honC/g1ADAu9woSXsdTqDYOU5DUiQYkXFf8b9seeqk2raWuonEv9kY0gRwpkFEsnrF4cdg29qXzIiVDvkZ7Jsr87aR1P9+WGUvGYcuzsNjymWN6oQgZF5X0sJZxslxKToZhmD9LBAn/UfELV8LLcAr5UPMHm62dQXsGKhsHEB3lJT6kvcQrSolYYWzwEpSPA9YF+HFB87L9in6/ZBw7a7d9H3Uzsn/CADptExGL5a45XkHGLZBw3VgEL/4uX2XWOyLkeRw/snxH60QZ1Do76mS9f1VzwhqvVhTYfy3xHA1Dwj/Yvr8C7rLdvwIuQz9ypSZXRU/9vx/12WAYhvmz4zDCY/HGLVWSTnCoP4s+THL6rI7qCFZ637eAy7SkEqMktzCO45ejXcNin5rM4qxFdeQ6AhIlkP9+kRbWmJNc+O8XNQH+lt6/hK/O2WD3JO5F9ldO5QsFGT+3jO9Y8XoOl3N0cmrug5VPHhb5Gr7scG+Ot0+OOY29b6xhUaM0pf4Oz4+m7g486Ci+A2gt8Tz8vcP9+5bTFofh7/9ayXPBMAzz54mEq8Zk2TjFBg/iSQfr5a6S5xwlblSzOrUl3YpetAcQQAG7RltWXxBS91Ldh8z/HvqoxyRiVfe4NAH+vn6OAs47p92+j7oZ2eeL433Ddr8Me5yaRS/IpSsVlWtLhMoEuAURW3lIQcI3V2YTTsvn+1HAeeMlvpPPrVHWCSla0NxAomT7XodL1h9WyyCaPbLLe2P/qWRfBxDAIJ6EhKMlP8MwDPPngCDhpxWLsJPDywDarZ/zHBRebkfMMaewMFg6blSQ8QZuhw8YcfAaNbRpAOs0QUcZi0mUQWfNV/dSrfGyriMwiVjNnUUBLmbR0oa+dE7Enk8Zmf8ujvffbRMRCVcZrvuPpcY14W1V5BooP3lY7C2bilJvSxEdst0jCZd0hZMOApy+EqqX95i9oa3iu2BRA61HWm8197hsn4OES8o8hxXtRwsyhtGPhY6d9GOa8T5Dxo1lnx2GYZi3lAJmjeWFaxQVDbGgCmDtrW5q2lhNk1bV0FJPlDqQ/HmlVYaKL9cXtI8KEn5cFMFvlxy7hOsszjs/KhcbXH2nSC2Iku8hwfa3WWfV6yJW949urT9TMpKuSHLYKmJrQ0k105OMC2zXI+G/9etxSDRSe6dItfvdFL7RS1O2VZe977Mn1VdoAUftiUGehmeTN+0weUjtAABhEP/jJKqVim/0Oq8uvKtqEzS9t46m99bZPivIeLrMd3lzRc+fYV/ehIwdxv1iQYaiO9ExDMP82SLh4UoF2Bob3I7EjPCH3cq8hHOoTBuiJzoQi49WZagoWPoypSCpoiAMOmTBAgTI+Lxo9Zztx8JiJqeS51kiRCj+br/t3yNXevUx13/CrY3nV8aTrqtLvWEUsG53mmrvdv22mEXqAZslKUG1Ro8gax3TxLfV0MrauPrfEsj3mH1SYGyhj3gqFWBqQci219rtspZRzFIX6icWv/9rbZOV+10V71P7HxWptSlKDTd7SJRArn7Qirq4TcQFGcdLPoOqN/uoom9KSaqhhkUZn4UhFHBxRc++lSPInlZRCoZhmDEiCFLZuE6rCA9poS6dSP7QWGVo5qx6qr3NbbIolwnhZ8ulmrS8YC8BgOBtnh9P31FHqQ/6/2AaqepB/XPLeF4wllIsFxs8P95AczMh2x6l54Cgj7ehmFGqmIhDpxeZH2ritTqeJN/jgnEMxwQZP3C4nt3CIH466cIaapkfobN21VJbLkbrkaa17qQuwPoxUol7U6jcEWsZop+zfsGbPOkhhxSaQvGe1lvFb96K4LB1qb5sk0CewwI1XVxNa9xJWo80+R4Xbc8UBrCu5ENYYvUidZWPOvJxZX1titonx44Zxu2yevMLMl4tFmoYG2oZzF+IMhRBhiIM4n94D5lhmDeHMcQGF190iu9BrLVW6qm+U937q/mUS/+3ZnH0KkN6vxK+2Yv0g1rVIfV/My8CACS0WcJmFEj4AqwhUmVig7WYWo/FEUuUQPMjIWpBlCJXebVrfMnY7WZkfrrRnabmRRFy9ZvvBSTsh4SPOFzPi10N9v3X9UjT5H01NvGt3i+WvDdWb+3S+8CR31u/3s3InrCMwbRULVgqTC2fEqMJf19+Wdw6QVgRidN6pGkdUjS9t3ZYkOz73sGb3S+vQvwC2/PXh7mlHK+sFah6kfltMUTpN5Z7/dwp5oUWrH0VJ09fOIW+GIZhxs5YYoNVqxHftL78a+5QBThwr2j69+B1bkcRd0hnebwXGeteq+Kw36vYahBr2aj6Ma1UbHD83WpMbcO1HtvfYpepy9Cx9/qo+n6RXE/idWP381aGXhElm5U6EtuqFlqwXo9t6bcXGYp8zGvqZ+WMOHXMi1MXEuR+0vl+z5pe2T6wkyOW/Z5mzJ+RcK/xXBsCaepFlnwHyi+NG1vdp920JpCkyA2GeyuB/PeJNKWtlubmQnR2Y5BaEaUViL/QgVhc+96s4WxaCzwoUi+y1hKQiiCPeNIXn4W+U37wJfQ5TgadCkkwDMOcEcYYGyzKOGl9+dfeqgqt/wGzAE9trbUdDwkHnXIi2y2erGITXxkfs42/mJlLkPELABAkvGjtW4upnb7A7iQkyqDQ9R5aW5ukKefXUA8yymZkn+8CfMsRfSbwoGC25CVQ9mL/r5qBgDYEp3PaShgiY/q7/1GR9qCR9qKJ2udET5RaicjvqDolR6wOJD7Zi6yiWafdSFMvsspyREaWavsxzXjeTR5VgJfOiZReFrc307hndtRTU3d1yaXzVn/0JGR8BjK+WarPhls9tgnMRl/a+CwMV1zQwYky4WuCjN+ccr8MwzBjRsLVYxBgZfaketMSdP2NqgD7HhZML9u5uaD55TZYdHByqKjTI5gFeF0g5fRy/J5t7DIeKf5NjYUtUTdYS8hhXEbWLa6HRZrbFSLPk4Iu/m21kV9ZPac9D6kCvNDbQB2IP2cYw2dGE+BuMaMLuCiB2ppjtBdNtAeNivcJKIKMPwgyfm3tR/PirqS1InwJAHQi8ZUliFCzpbUiSu2IDK9AZIM2dKGYN1qUQetqU/p449f7KraChUGcECR813UQx5Yhqoy2bx273L4SYWzJD/lty/erY0ntGTjmWIihH2kU8Dj6MLfss67u+5aKSVcg4/JT+QkxDMOcMmOJDY5c4TUJcOij6gvV+7hZgBcFwkbxHNILvDt4CFst4B4hY3/Rqx7G5r1fGffoL+aRfztsPfbsRnWvt/p2+36r73GBkh/2U/BTHv38ky607IX2g7LbAuR5AtSMCC1BhFYg9g/F65lusgSP2msIb/KkSZRAk8+tIVc/lJ3uPO1FE+3w5xUMYhuAknWDl4gRmh8JUfgaL01YV1NGgKPPtCN+pVV4rW05oseAorORhIKTAG/0p8l1tOJJGaGAgYUTwh+vZKIwNx0q29fEd1Tb7t+qREJd5TA43pmQ8FTxOfiR49+151zGj0pOJGT85yn9eBiGYU6LMcQGe54wC234atWByXPQnNxiCSIk9un7daZ8wIKlOpODACuCZN8jRAF7TeMuWtOCjBP6vznUDZ7UpQqX/377/mbmQz6q3S/S5ItGCi9Eb/COWKwyqOGTbtrhy9PGTJqaEaH5wQaKfNj7uijj2Nmd9S95Do8sVdfeJdoF2J2hBYsalA1IveJ9XHxdW37eg/x/m67HoW7w5BU1I2IogRaEQ6UE+NUliJxIvd1P/gdFmpMPlhThTiQ+BACzV9d+TzvPBn/aNOY564MVL0ULMpTG3YGhSgR4iRAp29eiZnv2sa66xDBkPCrI+AkkPATLREwo5qLWV1mcKBOTLsh4FQdGthV0bocPEvajgMsq/SkxDMOMnUpjgyVzEovoe9XlSveTsL1sI1d4SZDxNYdzHdD767NbjD3IKJDwQwcr+EuWfq4zWMcjWGKDtdSTU5aZvZBD/yjSXjTSTn+e2hvj+vnr9rvJ1Q9KXaDGD6+Ypy8Zq3veEkgcgJK4xndyrTtJsY+OLNmGb/I4Xs96JB8AgPmbQye15eetyNhyaNv2yI0iWAAtqirpGa00I6K4D6ufjb7HV1KAlyH6/Aakf7AeaX1ZfpMnYxt37d327FalWuQDlcUtL0HElhrU2OattOffTnzEZ/Jwh4R+y3NQKAqpzRu8+Pe2Mvu+imNJzQKmGBzFnD/DMMzfEGoCgu9Dwv4z0LsglK/5ahKFyZuqqRtpmtqtLte6+uwCPGN2/bCWatLEAJZofVXfb7cYiwK8yuZhLJm9lCHh/cWX6LDtYow5mA0xtb7PGK6jH7QXjbSvKK7a+avuFWhuNEhTF6mOZLtF1WLdlEiT+5AqzIvcDYqWDWrBoga9z9Q19j3MHmROauPaVpNT9qKJdvryw0UL62rT0uogZljzJGv3d+bsepqyvIbch9Vrqr/JTc1QBbkZEaUZEfIcLFrt13hLCvBSRPWxh25VtxC6RbsAr0wkFFGqcGXkMdASRJRKRDj27pEJiy0eeXXINg7vQcGcN9q44qE+B08U/90URgYAuB2+cjHpjnnMB7HNlmWrVDpMhmH+BpDwQFkrYDwYxOZKlqKrPivSFjFL25CjrcjSvHVBEvvtAtwsRmzCqCFIeF2UQeFbvLYXrhYyIzhUPIKEVYZ78k79BWnlqNnqmbxcXYZOnx8w9df0nmrai0bai0baXvRYXiQ2UDMiNH1GHdXd59Y9llc3JkxCZsyFrFmSjZfa9zB7kT0GAM1AYA8alb1oop5w+neQcLQ4sfiuPm418cirxjH6HhLonKAqtKLFkSx9fkATYGpGhLzFZCHB6zzlBFgf98z19STKjp7bSg8yStMlVRVbwc1iZYlDpi21e8hrbVGLvY5x9QOizXHKVLNawv3F5+A1h+esZKidIOE56+ch4VaTB76EYS6DyDB/49iSEMg4OfpRp3AeCV8f7UW7pDlM25DT21ZkqWNqbNTwGMt5vlTKYuxFVrVwJNxne2mqDl27NiI1F4/qlX2czyPh40arPXy1l+YHQ7ZkGIvXhGkfmmi3S7WCNaGa3RSk5lVh2osm2osmi4iZBTh4u2pJTnlbjelapu+oo/AnvSch4f27kb9qZPk5nBZk/FvxJa8mHhlAqzYxMbaF3gZaVBWmyD/YPYh9DwkmAfY9rApw3U3ukgLchpg+7rXuJImFkgJMPchUHBs8N+O8P21t8+MNJftYOjdiex6aLq2yT8SMeaZHwtHesHz//1By6VnCSRxCUv+sGptsKrAhyHiVLV+GYRwT6EPGjnE/kRobXNYKTr/fT1uRNYmwKsQ5mwAvQs10x/NI2F3KYtyE9DEMIIQjmO40ls5JcWUrsspWZJUZu9T4XlNGpANw6fetGKerOTLN2lpPW1052lSXJnexRnD2fVW0NZilfWiizQ0jAjw3GqStdTl9/9fsTRwzCfCMTaolOXNzvX4dje82W48T/l/V8FZkaTfyvwYAyJCLL/rfQcblxsxQje8JKN31aWW7K0ezttWpFZ3sSUFIlNR9YW1c/vtVT++a20oLcCfiprHX3+ayxS13GwS4pcLY4EmrS3tpm/aBxdKOWMun2esYr4mlvuCQ8GRkGVrGjbZJqRrnPFTqPKZVE9Uz/9eWvz+PAYTG74fFMMxbxwHUQ8Z7da9KJ6/Lcki43uElcmaKlDuU2rO2KW+vcRThbchRu+FluxTRQyXOIggShqaeV2t62S6fEtNK9anxsZZawrGPeRWr9b2ovYEgoxEDCAmD+GMx49ZvMYg70a/uJQfuBMWu9tI25Gg78rQdeer1Z6nmXlV8lk+N0B5RXYpegyQ1I0It3gZ9+bkXGZOIrUTCJGJrPckfiDKGjXuYvifMlqO7T7U0i3mZARmHNDERZCiJ633UfnaMdiCn7ESetLbVl6XqO1004+w6qr/ZnmEstzugjyvwz6oAV9/pKinAa5GkNe4khW7xkPsIKP5hrzVvtKk13OKtSIAbrq24gIRS9wl7SJggQ+nIx20CvLg5/HuH8ynox5zib+OaolWrb3kIg2p96TIC/FLx2C7jM1Z0yhr/7R2GYd4iZNzoWDlHxocq7sPBMnXa8xovnBJDWFvwDndJEV6DhCbAJUNDBBnfm9Vbb3rZxm8onwSi6m7QVmQV6/k2uzMnNa9o60td21NtRYNJgLcjT9uEHPWqmaJoO3K0C3m9z25kHK1fTcRU8U0NbUT6akCtcWvcw6x+wO5FvHRWpChsyVswiMc0Yd7qy5JRdE0C7Mnq4jW5s8Z+T/aPiK2Wm7vqHtE03pnT6mnqklrVek/HyGuYHLiP4JVl06M0Z1M9ratJ2QTYr1VuGq1YwxgKSMzLBG3HCzLeWB2359Gesc05ixlkfBYAUMBlJqvWIRbc2PyPisOd4fjQ9G01J0RzxrVhyLjiTP2mGIZ5s1Et19IhEGP4wQuyPe1hRXtUBTwuSPgxJNxdMpmBlX7MqcOCLigAACAASURBVMQhy/8wqDuQdhThjUg7F4wfuTdXz19l9no9a4/zy9bY5q0PnnQS4RVnRYdK3WtNIFY2JewiXLSkex0mE7uRpx3I2wR4PdK0AennNiCUM1zPzcY9zKb/Zy9ukLrarwqbJ/mbiZdWK5oAW0V3B3JKb3VGWbiygcQjoPAHPBS5wkvT5tXYhbAAWgTVcazmtmJq0PvNAuw6ChIlUNPqahIHzM+g94DwM83CdfWDOrIxkwAHHhYVUQZ5DuFXZe+vrJZ/rESAm71h03GChJ9DxuGukF2Amy6tsnlLi/JI3O/S2eH/XVufoq5wUlmViv97medWCd/sUbTJ0zoxRYmrfdr53+BQI4b5a+JpeEpV6TG8eIZMziDlKHp7WqyAR0c5xlSxp2gRPg8JV45afq2Y6nHUJoHaZ8Uc9oSztDGQLumIhT7ULl4UtuX+nXxhzW8FCb8tNwGI3+BztITbp8eUwCPCs+Xu+/Rz62wirDb7JGI7crQOKasAKxuQvN52PYeQXNEU169nVTJhW7r1PSFQDzLKTuRp2oW1uugVhVfZidzQDuSf2YrMJPRhkiDjv0z3oaBavNZrmtRZTc2IUN3NbnL1qc5ZxjEbRNfm4StaqhKFb/GaBLj6AZdS/Pw3BYcSjMZWJk7Z1gzP5En0IwcJbRu9aZsAh2/0DKGAi63e4YIMpasueqsxkUsPMkr2vfb6z6IMpep+l2nbYD3StMaXpMAj4nDFv0GGYf5CKOheumWbIOO/KuxvltUCEST8tuwxDp7EhvMOCRK+qadDtKJ6hpaODe5X41O1/567MWhbkl4+K0bZKwPDnsPY53SK1cmEtRISratJPqddLyT0lSpb1/CPbtriclwCVzYjdTcKuEyQ8KyTkJ91bq2jCDtZ8m32fdSS4VXralNGMSDvQYsHsQRaHU/QTuRppmbtS1B2Ivc/WxG2r2ZYwmJEGeRyqJ5Ud7ObWhChdbUp6kGWul0ZWlvcy14kNtisZkHGCUhYDADWWF/XUZgEuOoB8bXis/ZdDGBCqe9DlEGT26vHJMCCDCV8o/cTPcgc2uRKPtEt2ApzUM3Hsax4L75gPV9XJPm69fOts81OXudsaKCd3jytmaTu27dMi1DoVg95nhRoLZK0EakTtvvOMMxfOBKurVCAFQw6C5QVa1IBQYZSdvbeh1phED8dbTlZkHEMBQxgAPNNxxdjgx2zF0lq6MnUpbVUe5ubxAKo6bJq2iqoorgmk7CG/ByHDBmH1Bc/AKwNJk9aX6BdDYlvWO7jJaXG7e4Drc4lnKxvZQsy3wYADCAECbeLA/iDcQJTd7ebeqqyNgHeEExS64IobREzuiVvFuCwOSGIgQ3VqWGjACc/bLfGJv19tbIL+T9OO7/2ef07NKKWWfyCNSuW6yhIfHLk3pv+1mcPJepFluY1BMn7qGEScAhUe59bMcbReg8ItklW87yw7jAmSPhuUYCfLT4Td5b6PgJ3CDR9QZ2eIKRcS73DT+2J2Mn1SCvrkKL2VJy6XfZwKMOzuM16vs5cfMh6zXPW1ps+s8Ov5t7e6c5T1f0uEiWQ55BAU3bX0np1/9+cEpRhmL8CJHRXIsDFl/Broy4JA4CMQeuxkPHJUY8bwHxIKAjmAveOkwFBxu8gYX/4IkzbgNS31iChrESC2v0xOmdqiAL3j3iwxt/tH9nXc4cpv62KEh/00RYxS3M32B1tNPHwHhSU+NW+X6yOxp63vkB7kDrfNHY1v7M1G5KpZGFzS9jJIUzZWJ8+buxqTlNQCV/t1Wvweg6B1iZTugCf3T0SJ+w+Clo5IU7bkKNOxHUBnjOh7vuCjFcFCd+03uYeIf0boydxy9lhp3twAhKumremfnBFU5yWT4kpPchcanhu3mk7poA3FtaEdeGyJuQQZWcBrrvD7G2805dX9qBR2Y3Gp9CHSZDxL07ZrhIf9mvX8AtBUssHChL+TxuiIMPJM1lvNf/kGlWA2xBTrEvCtnhkIWNabbBuLbRPitm3MN6uOqp5nhCo5j6X7sk+rydEVQ+4aE5nUD/fyvr4cO0/4nxYC30wDPOXjyCbCwOUaxUVGR/ARptoOmX0KYeaau/pcnGSxabMnx2ilUiYWifitHBqA1XvF/VEEDYnm9owrW1IkvfQqEkclOr7XTR9Zx1tdKv7f5uR2mAdsiDhOdv96sc+yLhD2y8+a19dCa/s7E87EaoHgFZEf6CNcU5XPYVv8ZJrALRsQZS2IUeeJ83jDd7p0fvRBDh5qfffi/fdthS9Gdk/WEN5HCsLDeD4JjGluPtAXaEk9SCjbEDinGJYjF4VqTjROAkJlywRRlI9xt9lt6yt1mMvsiN5lyVQ9YMiaZm4WlZEXi32fSzyMe8LVovae1Ddq+5GeKEg48vFsfzS8Bx2lltVsVbHcmrGjFxac0jKYppACRK+YzyPsYqT1nLvCVDu0ipKv89Pi1Y36J7srRNHkqesQ4qW5WPG39CwIOHnkPCkION5QcYvbatBDMP8hVHAuyoV4EpzzgqWsnWCjOGKrGcrT8MDCVcWXzi2l2nqcr9NfK1C3NoQpWXe0suNG8UUzd4SpOr7XKPHkhZAoX/yUPw67wcBYC2SF69H6qerkTzekoicmLjDHIIDCZ8z3OdZkNCXvtp/XFsCt7RjG5D86Rokj69GgjoQpy6oHrfdYppm9dbT4mVhclvFsgDaAnUpegPUakj1N7tv1r8vC5uRedUqwA3/aM9g5RqAck57A7kNxShWNMV+Y0qDqHrJf1iQoeAA6lsRfVG7r3MzIdv9dFi+Vc/Vp1qDXZOTeh1i92H8VvPA34zsl2zZriRQZyZ+rLgcrpX7M/kblJzADYCmz6uraB/YFEsNuwd0L7JqdisJVwkyvoICPjnapKNlZpjWI025S6uoJzoSSqadp8uToviHR695LMh4AxIOFJfry1vIA9iIAWwd9XMMw7y5CIN4tmIR1tISlutPxrds1mAB7zqtQfYhDgn7BRm/10Rg0aRwWQE2CvFKJGg5HNNRUg8y1IkEtdZFKXNJQM1XPIoYu/oxNHFPlaL1rZ9LiNP0zjpyq6UOX3G6lBm91Z/Y7MmYPKR7kaGVSFCHoa1Ewvbyrt1vT3SxsLPBaAUrGMQ+zXq3nrsX2ePWONrcZQH7NUpQ0lcFqG6/e2S/dlXI6mA33H5O9AfT3llzEgCWIfpUsztM6QsCNHtKvV54QWs9yNA5bQ3UmYmPOIE9LND8UIh8Dwq0rUbN6rXLkzdZ7t1Iv5y+ym5RBx4WfiXIGK7/lGtozsYgTbikymqN2tJmijIodpm3YkesNcWsXGuQpBWIGp4hNWXmWqSUxY3hlwz35IfGScomt91q3lAU2knnVevLzzuRp3VIKStrEyeFPnxDkPFKJWF2JgtZxguQ8LApQ1Y/0sbleEHGa+jHtNP6LTIMM44UMKWc56hNTCV8YpT+bFa1YMyNe7oMYH74k57ftCQiFQmwta1A3PSS7ULSJHwdSNDCpgaKfsinpoN0uAeeJ0Adrnhp0RfjNH92SEnuQI/TJawCqrcj++w25GgzMrbzG5tx3zF1uV2Iojd7RxJ+qJWa9L199KHWeN5eZIasAjzlvGoSLS/7NdOSyrqmJDVdMpKKc8oFqoWvZXGKf8Kn7EGjsgeNytz26g7PY/iVOKBap02bqqnhw2bLeuksNWWk73GBepGlzBUBqr9eTUlZf+tIUYm9yH/FOOYeZJTWGc7pIc/aVWvdl31De0ZKCZj34coTcnQgTmuRpJYSWbuaEaEliNC8s0Pab6MgSPipdq4NAbsA6yFGExJG61dZj6TZV6IfaUi4RpDxuzGJ8SB+qnXhFJsvyPjFeP0UGYYZDyTcPYbZdvnYYLXEWvkSbafJOiR7VxWdr061dRaF2Gp5WtusJfVUf6vbFCozubem0nMonYi/vhLBNqfr2ILsC6sdJgBWS1gTmSnra2zWubsPJseuyRcE3qcLcD9yxvNNuqha8RwSaEF7yCTC3gOCablWq8DU3TAiIPnLqxRBxhdxAPWiDFo1PaFoS8a6QAxAOac2TPU3umlSpznRx6LmsD7eXmTJ/6hI6bf51bSayyL68vPcIPIYxD4cgGsTUku0wgvuPvuz6LDEqzReELjVuPw89aIapbUtSlX3jjh8NfZU65WaRnHEomWIlhRfgwgr1Z9y/QRHkPUcwGd0C9ghblgT4G1+1eLf6c0rS+GQ1/kpVFtzrAsSXhcK+HY5C1nPOV0sg+hkLY/nb5FhmHFAGCnwPboIjxIbLMh43sFyNjsvybhAkPCcMIg/ChJeFGT8ryDjK5BwEDJuQwGXYQAbUcAUYwEDjS4kv3I6AmxsHUgo5USwAwlqF2M0aWsNVX/GpZx9TnCs51BWIfHqSkTPM17DeqSeGu28RhFuR5w8B+zfR/uMkUQjnRPj+tKrno9YxTWru07RiibErvfRJneKepBRqj4jmiZgS9sitA9NtNdQh3jWpjrdq1qUoewWVIu1fV5MgaQuc7oGoMw6q57Eglr+UXPw8j8qUutsNbbW1Q/qRppECTQnG6RmRPRQnB2+vKIJByQ81IvM16secNH8zhDVf9q+/L7JbY/Ljd3gNQnTbpfq2LWlPjtyrAQKfnz03NBLEVW0WsajtenL6yj3ripleTymaJOkbleGupHWHfiMArwXTUpLZ4Q8h4XXIeMC08Ot1l1+yfabux0+DGACJDylTTIEGScECcc0z3tIOFCudKcg49XK3woMw7w59GFNpUtdggylbB1SGbfYBFjGoOHvt41pWU19uQwJEl4vLsk9L8h4uun8qp93CvHTsoQNAjyqCHcgQZ1IUIc3dqrnVFYhcXwlYh8BgHVIXlfJObXztiFG8UvtDjq+xwXq9arOWGvjKf2+QoJuea9HON2DDC2bHtETcHgPCbR0duSYUy7vtVOSxTKIeepFljYhoceCB+9yKxuTKcpfWUWb0skvoli+USxASf6dn3yfVb2Ma29VRbP+Dje1T4jr4tc8P0y+x9RsWC2I0B6hkXojWdqYSH0HMv6lKNRfW1eVHBYl0ORzqx335Tf40zYBrv6MqFt6kU96dM/qmeeOpBHNbamqaAm6UvFtRoSWuUactrRc1pMurNErRYX+yaOKMdKKZtUH7/Qoxef7f/XfxiD2CZIqrt5DoLa5UWWbNzu8Azlliz+r+A4ISvH38APTpPYwwjiCbPG7fKPUbwkSrh6vVwbDMOOIIONfxySKgyNpI7uQmL4eqa+tQfLVTk/8jWldtYrRWhNkvAxAK9xQ8Z5zJS1/QRW11UUrFsL2QIyyfxeg0M0eilznpdTlfmraU03TO+uUBWc1UGttrKwYrj59q1tZhcTQKsQf7kRiuFIR7kCCzk4HHcUocrOHegJp2iJkqPozajrIs9bXPDUbqAaAHqS+qi05bxJTFP+oj0RVdBX04962udFjk94xsmwceEigXd487UMTbUqlaRPis7TnZOnyqDLhvdUjS54yjooyaOa5dcrcjUEKX6M6OoWuVQU4eoOHFp9TjDk+CtojNNJuQS0iUfWgSL6HQKIMxXMI/wxJ7atuv/ulOevrSdtXdvreu112C7joAPc9QcJzG3JpfWnbdWRkghG5srQjVuOWaprYVTNmAW41eE0nP+jXJxvG8U56R7Uuvj3IUOg2jzZZ+D8AQAF3ufugTH9bHa1LpWyVp3YiT3O2BH+PI3Auownn0qCG3+AzZ/QFwjDMadCHWmuJvYqahOGGG91Kuz9m22c9Z2oD+R8QSVQzas1AARePp/gaW+waL63wxMjqnWxsi5saTCkqy1wTufrVrET+h0Wq2e+i0E0ein/AR7mLAjR/VpA68eZZ341vq6LaO9yUfUeAxIP2sfb4M/oy9BYxS9GbvXTWijpaicTxutvcVzfc6jk55W01tME/UlFoQVtIEWS8sTad1DNtLZ+lxp+2TYrSnC1B2otGWr4kqvgPCF/HYYQBYIcvr2z356nhU55h0ZB0ZC8alb1opOBtbqq7xU3z64IkFkC+xwRaPkHtN/4xH7UsD9PiVWGquqd4nw+Dcu8NDC1DdG7kGu8rogyq3u+iwAPq9XkPgiI3e6nqIdFkpdsSYyCjaFWIBBnf31at7rPuRl5ZdHZ4RBD77I5YiwJhCmj7xBJoSntNRcKrtTaDADfPiJDo8Iz5HxUV49575CavJoy/nLW97vdd+STtEHIlK09tF3PKknT12SV/vxJuLiO+r1md8gAAT6EaBQxAxmGnrR6GYd5MiuXTxtoWN5UOC+pEnJpzYUpe5vtqpTmoT0uIr/JSazjiKMT+h+21Xk+1eR4HzZ0bog7x9IS4Y0SIHcV3+gpz+kIni9Ba/GErsrR8coQWJcMkGpeXJVD9XW6auzpI3Uh9GQMIbUNOMaa8XBdPUeuMqCpstRlqep9q7br6MRz8tPs92rLulmDqm5BxueZF3xvNKPvQpCc4cR0FuR8Bpa710+ZwliKf9NDSjgjtrM3R+nyKAg+JNPHd1bTHn6fZa+uUad01w9F3q6K0YEOI9qCRNoeytA0Z9ZotXumOAlwkcqv3ec2zOvhpN9Xe7aLIx7z6scbCDHMmBMl92Hx/J68YmwB3FkOWtFazX3T6npS1tQldgOPXqdsJ/sdFm6VrrDzVHUoPZz8Q0JarT0DCzbbfrYTFpVaWinvDXbZj+jFHkEbyqY+pBCnDMGeGscQGizLI+6hQ1uo0CLHS7o0Oi4XxXYIu1aruE2n+7BB1CurY2mpjFRVvH3MrgCZvrtHPcxoi7Gz9nlc16hg2VdvLLm5FltrOipY8RpBxQpDxr9uE3LC18MNWMacL2w7klImX6B7YSvJjftruzSkXoZhgpYC3a/dhhz+vbAllqe5ety5mHXNitA9NtEdspCXtDXSup4nWxxOUvsJP54lNtGJhlBovraK5nfWUeb8al7ylPqvGBbsayXUUFLrTTeunpEzfn0N6SwUANiJ9w6qzdC9t/ZjOYFyvvDRncpBaEKVJqy0lFCVQ8hK/tgRdcRupway2pourFP+j9sne1HNrdQFOXqMuVfsOClbhVXYg99oO5P9Z/1H2Ya4xDl6Q8DL6cSEArbLZS6W+Z0i4z/YjL+A8o7d4SZFmGOZNZiyxwf2gyLXeMYnN1A21ijgGJ6zTbd7HQLNb6mlJ0jH38bi2mW111OE+NSEuJcBt3hj5H3S0qEytZZFjzmnKXBUoW7DefRi0PpJW7CUQ87RF7U9RaxrHdAcjz5PCEAbQDgCQ0Kb1Fb3Nq2hhTI2XVOlj3iM00j400T400dswgXYjT1sSGdoTyOuCtAUZmnGumshEs16XrIhQ4BGRznU30sYJKRILxeemAFuITy+yygakn1uPNO3wqZ7V2wN5fQztkRj5HlUTrTR1V1P8Mp/5ng6olq9mGc9uClL9jW5Kn+cfVYCN4rsB6RMtc8I/zL3XPnGqvcelX2/2fepkw3NYoB3IKVsCmaGdyB8ELJnjVIHVE9wYf5uCjJ8Jkj35jf53Q1ywjoS7TVnNJAyhgPPehDcLwzAVMYbY4JW+mC0r1Ght4eQGCl/vpaoHRMVzSDghyDhWzOhzxoTZ3QdTwfcz2eJX+mhpzHkZ/FQt4XkzQtTwMS+5HIodaG1he4OjCPe6MzRpbw1VPegiscQ97konTWUQN9Wmaf7aEK0Pp5SR/eUMpa71kyhDmb+2QSmKszLxEnWZOrfT/7nm1WHV4nU10pymIHkPChS6w0N7BVWY92FEjLdgZE96J/I0Z1s9zXxbnZ6koseXodVnJ+hcdyMtQpiiH/Y+L8qgqs+K1Fu08LtHwnyUogDqAt4jpvXJx9LGCLmOgrwPYaRyU7F5DoHOzoeoBVGaurRW3Q8uhmzF3+UbLQ5YF9/2TFwJPCA+syoUvq59Qtw+aSqANonqNTe9q0oRZZBrACe7AJ/+2xvARki4HYCAAUywFpcQZPykmP7yWPG/nUOOBnECR5DV+1Vj9J8xfUbCyyhglsMbgGGYN40CzoMECTJkSLgPEq4VBs3lBUu1iRdW08rTTIyxEgllNZLPYDaq0Y9pGMBGyLgcMm6DjEOChK8KMn4gyHixmIjgxJkU6/FqoZs8tDgfNglx+HqvWnbusEDxK33UnIlULMJai7+ndL7g5Id9JWoRqykgVydiP4SE+4VB/NEqxvO7QmpWLX/WmPxCqX7QpczYXUe9btXZa1F7w6vbhJG9423I0awd9ZS+yPfuZjFMW4NZ2ocm2oYcrQzGKPOBAM3fElKFWRfgRoP1m6WdyNO8jUHamNW9l2kT0nQuGmmNP0ELEaYFk0JfF2Qogc8K5H9MFUktY1ePkKGWdIQ2F/Nj70ae1iKlT1g2xFLUNTlJtbcaloaPghIf9dF25GjpvAh5tLzTA6DQtR6aGw2Oav22IELrkTo5a239M9qy7oxdda/2Ikuew/aCH3O7gtSDjOI6gjuKAmpKVKMJKyTc75Bb/ec4gCgAYBCTtJAlm/iq3u0X6p32YZKDkP8AT6le8gzDvDUIgozvna7QxK/wKOMRk7tSDdH5yTIYZu7lOIAoJLRBxgWQcD0kPAAJnxNk/Jcg4aeCjD+4+qFo8Zi2sZ+JPWGHVrNfpAXTG9RlcOs5JZDvEZHyF1ZRW1WsIhFuF2P2ZWVDvzX3uai7xL7w+lDiW/r9k9ACCZ8zer9nPhig1vkl9o4LoNCnPLRwhWr9WusV99RkjrUgOtyKCO20nLv9nBhtq83p1u8+NOkC3IsMrUKCJqyopj3FJB+7kac9aKQ9aKSFCNO8QIjCH/H8WJt4uY+Amv5ftW4BW9Ns9iCjCnAfyP3kyLJ2x5wYufpB4U95qfoBF83ZGtQcnsj7KCh1sZ8WuRsq3v9tQWR4FRrU57UPccgYXLIw8g01MYh9otRwi5d6kHoREq4L3eqhmntdQ6YfpKx+F5YJpgIZn4ehoIIg4xelnjdIeKpoVbuKiTlMVaxQwOPj8O5gGOa0KOCu8RSaaetqacWpJ6owCfFKJH7bhobm073EpYh+WasJfHZjiKYuraX81ipK/r2fwtd4qeZWkWJXemjaulplwt5qJXW5n8LXeanuU24K3C+S94Cghi6VEvExNO/Do/QhgWrudtHUDbXUjvLxyNX3umzHB29yk+egus/pfhK0JpN0EmGlF6l7HJ6F8/yPiK+IBVDtflG1MMtcS+YKv2K0gg1CrDQjYjvvbuRph5Cj3e68SYA3IUULEaaFCNPqdFy3frW2G3laOyVJKxbFlQ0TUsouf17ZFsxR46VVlLjOR4uWNJQU4G5kyP0kqLkzrPdbe59IwU+7aZ+3kVacE6Xk9X5aPi9GO4ScMQlHxW0xwj+z3srNyH6mF1lauLTBdt9c/VDWIdS63p9S1DGmlR5kjhUPFayVnIoOUteZTiDj0VLfS/gTnlfWI/XGeqSV2WvqTf4WgoRhyLjUOl6GYd4CBBm/ORMWX+o9flrhKx+TW0nrRFxp98VOtKH+wtGvxpk2xK6ptALOckTesQrJbzstqXcgQe3uGC3Kh2nWknqatKWGsn8XoNjVPgre4qHqe1zke0RUQ1rUvebSS+RSBWI+AAre7KGz5wVtqSnXIEFNb7M7+YQ+5qF2xGnujBCFPuYhVz+oZXHEti9cDFv63DrElqxD6iNdSLyzGQisFxMf2uhN07S9tVR3l4tmba2n+v3ukmOtelCkLS67CG9Hnrbayy7SDuRpG7K6AO9CjpYWxXchwrQF2aLwjli/e9FI52ECnYsmve0K5Gnu6hC1zopSt5h2FF891/UhQU93ucudp0XtDdSTTdPOuhwtXN1AHWfFaE02TomP+ij+Lj81i+ExCfAShG63PnNbkD2sTQpcDn4HG/ypV6zjXFedlK0FFPIf8A8FPiuaq5BJuK/U9suCxQ3KOqQUY23hGZvqNSF/DQNYcqq/I4Zhxply4Qvj0fJvD1C7f3yEeIU/fqwDyTVjvcalqJ1SqQC3IXo7AKxBsHE1kv+yConhse7PGltLQ/gYjmIFZFwEGTdAxmch4/OChO8IMl4QCjjuOjr6Xrb7sEDxD/ioLR01ZOKKU6cQp0WTGsj7WPFzT4LaETe1aatraeEyZ+esbqSVzhFhH+5C6utGz+LV0SRtiKaGe/0ZZdr5dVT1kN0b23UI1F2TsQmwQ91j2lIUpb2GfeCFBgE2Wr570EibkaZWRGkhQqRWJ0rRimCMvAcFyr2nylRf2KltQ4YCD4v6svYeNNLGTIrOE5uUHcgp65CieckQ1dxhqAldAOW3VlUswAvhm2J95nqR+YI2huCn7DWXN/hSw9axLp0VMUUetC2ODu1Bo7LTnVPwFKqLJTkdyyw23OSm1QFzKJRRhOvudClaIhWGYf5MECR8/UwKsNZqP+WmhVMbTluI1T3i5AtrkDjPeB3TUDtlNoJ9cxD842wEh2cjqBT/9zezEHxoKaInKhHgVkS/Zex3KRBajcTjKxE/caoivBKJ54BRsgxJaKu90/Wia6C8GM9aVl9qgkLzZ4Wo6p9FWjApZBPhdsRptRCnLeKICK91rsSkrLYUn9+M7OB25D6xvRiOtDaRpNwVAT3hhtaal4VNXtSlRFgTHK3ggya+K5Ewie9WZPW/NSNMa5HS26LFIaq+30UdjfGyArwTeZq9u15PSam185B7aj3C6aWIKmedU0dVd7tsqxLexwSa2lw7mgDb6i4DwGZkv6GNYebmOtv3uLYmqVjHenaXOeHKdn9OKS7BK4biCyetfTVPD9M6pBzFV2sbkVZg2D8GANwOH2Q0jv2twTDM+FDAFKcf9Zlq/gdEmjcvdFpJK7S2Cok/rEb8ytkIPTIbQWUOQjQVtZRDFWUtLYcqZSpqRhXgpYi+7HSbugDfaiQ+tRKJ18+YCBeJfcBzZ83drhNWS9P/oDjqBKYTcVpeFaMOBwFuR5w6EaetyFL3KHWIuwwivBnZAwCwFZld25EbMopp25woxW7yNY8ClAAAIABJREFUKmLRyWfa+XUmEXYSYE2EdyFH25GjHqRpIcK02yC+u5A3WcarkDAJ8JpwgtaEk7T07EhJ8d2qelYrW4JZZS+aaBfyysi+cvY/IeO9NXe7htLX+mnKxTUUu9JLE1dXU/QffCOZsSRQ6Bo3neMt6ZTlKMC9yPxSG8cGb8q2arC+KmUT4Kn7arTCI69UPSTS7uJ412dTiiDjfyHhoGlSe5ebOoOJssKrtW5kzPvUA9goSDguqM5dt43tpcEwzPgxiBmChP/WfpBvhhC7D4JmLq8vW9h+LK0ZDTbRLdWmo66cCCvNQKDc7VqN2NWrkPzjmRThVkRvWOxvoMbzqshfXPZt2ld9Kkv3NhFepU5eRh1vF1JFAc7crY1rM1JztyP3moNj12so4GJBxvdTH/UrW8XyIqwKZE5vm5ExWb9G8W1BxCS+a5GibkMWrBICrOxC/uouwLdbaNSE1/i/yrloovMwQW8bJqYpfI2XsrsCtAgNFL7Sowtn1V0uZwF2RRRBwn9Dxi0YxAztPhmLLvQgQ9X3mx3mugX7vvWEi6uGIGOHIOMnc7cE9XvRHUl+Ef1YaEw1Ob2njtYJI1bvqpok1dyjWvGpD/hN4tsZTCi+R3G3XsRBxg2WRBzfObUXB8Mw488BRDGA1mJoz3V6aI+Eb1s9NE+79YOmdtfSCt+pC3EbYo5Wb7mWRxXNR8hRhJchsquS27QK8QtWIvH7cnmcnUR4IuomzUT9VbNQf2Am6g/ORP2NM1DbYux7KSL9xkQPS+LhksvPlbURAR6LBd+FJG1G5uPGsa1DLrQV2ZMWUVU2ITEdABZVhX40cXMVbXFnSwrwVoemCc4qxE0CvMZi/a5FSulBZqjc0nMP0i8AwF7kLrKK77lo/MmWaObVLbHMq3uR//k2ZGluT5CS7/bqHtD53ipTmFfVPaLz/m+t2ctZkPGG/yHxf6wCPPHiarMAwy7AK+PxowAgyPhBd1xNJrJgU0iBjLsEGX8SZVDgQVBH1Jx3umVKhNxPjmwHeA4L+t7vkunm7G/FuGGj+L6OPswdnxcHwzBnljHWDRZk/EmQ8aog4+RoxzW+rYqW18TGJCydiFMjqsckvsY2ETW0CGHLPnDskbHckpWI3joWEW4JRpSzAnU0C0FTm4ngSzNQ9xEAWIrI960v+3Eog0grkSguRY/Fco//zuGyBS1Fpda2I/d/XYhvWILIn7Qxb4azCJcS4NVIOFm/yjqkXlmP1H+sQ/rq1YgkNyPznXLW76piHPkeNH7bYFkru5DrN17EbKC6BVHlnDq1GlLyEj+FP+g1LRn7HhRofp3zEvTZE4O253hhW4NtTKsjCVM4kJMAb0LyHQDgO4DvaTHQRp+AxAd95D4Ck/jOXFdvy2U9ZVctrfElKXyTt5Lf6Bu6BS/jXMi4/BTfDAzDvBkIMr5YqYUrSHgNTxty2/YjDanoFSzh45DwECR8QZDwXUHGz4RB/DF5uf9kuz+mVFLubybqT1l8je0s1FJzUYhbEX12rPekHbE5HYgPlROypt3V5DpqflmKR0GugyD3Z0GeTwsU+LhIdVeLr6Qu8r8+YV01nTWvjuZFgnrGpfEQ4FPYw1Y6EP+u9Zq3I73PKMLdxWQaKxFXViJOzYjQGiRoq4MIOwlwLzIm8V2IsLIWyY92IBa3nrsX2R+XCT16SfucwfKlPcj/0um7W4roKy2I0vxwiFyWqkjB6z262M6cXE+pt5vzQk/cUH3C+sxv8jiFRaVfN2aichbgaCsALF7V8LI2ZnFAXXaesyJIiWt8VH+nWxffzHsDpomCawA0b1lIWeNPvo5+3CtI+PFY/TsEGYog4bsYQOtYfwMMw7wZjLFuMAbx5Kmcps1b/74VntjLnWXSXI516blcy6GK5iBISxF941TG247YnE4kjjuJ2KQtNaeXxEMCiQNqmNH0lbXUKZ7+3vmIuFYmwiuR+JL1mrci9+teZGiFw15zB+K60GxxCIGyCvAGQ0KOhQjTIoRfdLrPANCL7C9KWb/dSJ8HALuR/6VBfIdK9dWK2H85lSTM7AlQMyI0ub2G/Per+/CeA4JJgOejah4GsAQS9gsSnp389pqhEuPqhYQnyglwJ1APANuqsrr3s6tYfGL+0gYKPCRS08XVtMabpNr9btPz4X1CoOXpmLIOifegHzlIKGirTsaVJ+8hKK2LI7Sgy265WybOx0/lN8AwzJvBGOoGF/PSLjzVU3UiPms1El9baRHiJQiPm/haPaYnwHvFqYy1lAh7DtpzAp9uy10coLba6Fsqwl1IvObkba21dUjqAtOLTFkBtljA9rAZA73I/q7E3u/QZmQu3Ybc13Yb9n03IzGjVF/ZcwNf1JZxw7e6qfWcCO0Q8tRbmyXfQ6oY+x4UaMLqarsHdHHJdjmiF6xA7Ds9SNvie3uQ+SMAQEKLKIN8j4mOEwf1fsK3S1S9n7fUZhUtl/Sic8J01oV1dHZbvXmiIIOaLq1SNgmJP+EwVhT9NJRie1WQobj7QLO219E2d1bZgZyi1RnOXhkoXchBRtn7zzDMW4wg40djEGHH5b+xsALh9CokClpyjNnjtPxcoik5VB2LAMmxjtNJhM9kzuncRQHqcMVPOcZ6rMvRmgh3IpRzsnytzSg03UiXFOAthrjfxQh/vtw97kX2uJMAdyN9orso9juQo91oVLYju6lkRxLuCzwsKuesb6DNNWpBiF1o1Nu89UGaMb2uZBywqw+0KBg+abHcqRVR2jBS6elG7XSChNfr73Q7CvBWZN+5FZmhHcX98C3I6uUfd7nVTF6bkumRFREJVH+XSynWD1Zm7qlTBAnDgoT/EAr42dSLa2htLkk7hJy13jDtRJ5WTY4/BwBFC/5uYRDPFoucDHOuaIb5c2csdYNlECR8fPROR2c2AouWIUrTUXcmBVgX4gmo+vexjlEVYXVPeBbqSew7M+JrbKGbPbS4MXxKQnwqItyBxPTRxLcdcaMQ0SqontWl9oEN1m9ZrF7GqvhmlG71f/W2DRnHpedmn29Sy9LI692RjE10tbYTeVpuENumDdUmK3iJEBlaGAgPW/atbR7c7cXsagAgyPhy7HpfiaVz8/h7kCHfYwKFb3frhSTm7AiSqx+0qTGlbGxK0uyd9dQxK0Y7kae1meRQ+/SGwoZoSiklujuL+bjXp5PDOIIrx/pcMwzzZ8As1HXNRfCamhvFksXAHazgkzg0dovSidkIDjedhvfzKbThiQjcOPrIRpiL4PMdSFAaAaq6onxhg/Fs1XeLtGDm2LOOnYoItyOujCbAHQYrWBOmrciWFOAlCD9U7r52I9FoFWCr8BqaLubNQGAX8lfvQv7HO5FXSonuluosTXlHDYkFkOsAKHidm1zF+sGBe0fCkRYjcqyc+GqtDeGh2SiW/Stgb/Z9AQfL3T556EaG/A+JtDEzUp4xcrOX5m0L0nlCEzW9u4qmn19Ha9MJ2ubJKktaw0OlRHcn8spO5I515RNfFyT83PCb/B0GsRkAMIB2QcavBRknBQkvQkLb2H+ZDMOcESYA9XMRkuchdGI66qgJ1dSIasqjSm85bxWlmvzUsMlDVR8SbZafIOOZ8RjLHASfnYzaN1OAKYsqJY+qYzn4VlYyxpkIvjIFNZRCgBLwke+TwptW/lCUQd5HBZrTHByTw9ZYRbgdsROVWsHrDE5W/7+9O4+Pqr73Bv452SazJZnMvk8CBBQ3CELYBAIkYCAkQEgCIbbea69t7XL72Opjb9t7+2iv16f69LGbvRarj7a2qWiR5By63Ff32r7aqt3cqlWvWqlYdxBIcn7PHzMTJpPZc2ZOEj/v1+v3kheYyVky+cxvOd9fK1wpe8Gb4E67WCpuJ/z35xi+YjeCb/UjeKwfoRPREEodTnsRHu9CYCJcFy+yiopvS5PqQ7vfbxArcOZxpOWwq7kE8HLYxXo4Px47fGn+e8xT5om74E8ZwJbby0WvMRTdnrEsIrY7vOLdUoPYHzv2bktAOG4487hRxX0Q6y50xrdXVPsRfrsfoSEkz+cexmWSjDdi70lVkvFM8miWpOD0xN7DRO94Mq6UFPxZkvGiJOMJScYDOIL7oOCLkHEVjmAXRnDupMd+NHIearYsge3U+aidCN5cWjyU/R6jcF1oEHX9laptV/lXpns8i1EzeA5q1BIH8EQQR2B+HoA10zGeg9qTQZiED8aJ5owYhHWwQpg+Wiaq/71MVH1JEhX/TxLl90CU3Y/cdknKs1XcB3F2u1VsrMgtiPMJ4VgPOKde8OpoaE20nQhMCeBuBJ7LcuvLdyJwOpfw7UIg7TBsurYHIdFbGxI99pDos4bFoNQgLpEaxLnvqhVlMoTxq2Xx8M2rbYDrYPwElq23ncjlA0Q3AsJznWFi+Dm+Q9QgIqIzoTDJ2dtrROXBSR/uVMvt5SdMX86hwIaMzybuFTxl2kjBZ3J6QxLNaTK+l8cv3fhijJOSglckGc9KMh6CjO/FqlpdF6tytS6XT7jnwbZ2CWzj56M25+DNIZjVCMxqA8ynFsD61HyY72gAzs/nkpwH2yNhfQJ4IogbYPpuuuM7F3Vv+RPCN9fmqTIIR6NB2NZVipreCmG+olwY/7VMGD4nicoDkqj8phQdEh2Z/IhJ1jYCMb/PIjYYsxc7KSCEs/aCk0NpNZwphqGDpzPd8y74P51r+O4pIID3IywGyxrEQFVE7C9rEPvLI2K3IygWb7eK8qHoEPSKPMM3FsATw+obQ85XcwngXgTFpvOn7o/cj5Boq/KI8PtMExWwyu+HCF1pHC8/hNvjz/7G9hEeyvpGUvB9BjBROnlUnyqkxR5ZOC0peFNS8KKk4FFJxs+g4CAU/F//7uqTjSvMIlJh0iyA0zQ11sYaYXl9ASwPzoPp00jT01wIWBfD+ncdAzjexhphvCr5+M5F7eOFBHC2FoE5XpjjKADgMEI4hC0Ywfsh47NQcLek4IeSgj+WH8ZLlQcltfzw5J518H1Gsd6cOYjzCOCCQ3j3lLngYMYFWN0IHMshfNU+hJ/pR+iJPoT+Hl0lHFb7ERqLtfF+hMajfzcxLK32IaSmWunsv6RaVN0tiSXuuoJ6v8thF5vg+PA2eG+8GL5T26QzGzFk/gAREv1V8X2Rz+yPvMcUFL21CT10NIjtjT5hOVD+miTjxxhCLWTIsff1KSj4giTjcQxj05QLKuPSDI8ijXIImkjGUKnmDdM188fKix2+WYO5EebT82A5ugDm789H1QAAhABbEyz/PQNCWA3D9GYYWBq/beei5qZAEQLYB6NYAItYDUdO8+kb4Vy7Ce7RDXCLtUanWNpkE2dvqBENe81i8fqajPs15xnCeQfwJriSAzjtHHA3vFu60yxWSgzfTjgvzeftNYiG3w2iQfQbwuoF4dqUjxsF+43C+T8MBfV+oxW9zgwZ70gowpHuPLbF5syT90ceQCTaO6+MiIHKiLgEDWK3LaCuW+l8e8p+v4exQFLw2ESgyngu6d/96YafJQUqRvDP+VxHorlJwd16B7DfY9QzgLMF89sNML8ehEmvOeFJQdwIyxMAKgEYG2AeK0YA+2AUTbAczfVHaCOca1vhHksXjK0ZVkxrGcAb4JoUTi2wix6E1IQQVuMVoZLtRODhbOG7A74PFvAOK+8zhdRBNIieuqCouaFCNNtsU0L47PNrCur9roVzyk5O2Xq/F8MnehCcFLz7EJ70OttiYb7hbJeo/pak+j9e9cDEGR3GIukIXk0aTj6YeNKSgqczjIr9JOWVGoYNRzBYjHUmRDOTjNZSbROYroWlog8/T7slhuBMCOIGmL+1GLX/UawA9sGoBlGV8xzdRjjX5jJU3AaPGi92UowQTjEMrU5eiBW8MvnY2+HwpntUJyF8/73Qt9hFdaYl+yrC6iAaRMd8nygbgXB8rEqsqJi06rmglmorxUwBvAN+cfHU3q+6Fd63OuD9aQ+Ch5I3wti4wC1qv1Ih1ixzjEsj+GviiubYnr93Jv1OOZA2fGW8gZthmHKRZGyXlGgJWknGHwq91kSzj4xDZTqFcMVd0D1c82la1oeebgvBNBqA8WQxQzhx2DubDbAfyCWEN8F9Wzs8BzfDPZprCOcawOsn94LV3Qid2oWA6IBXbIVXdMCrboH3j6sT5v53wPezTOHbjcCB6b7F2uH+835ExCAaxA5ftOJU+f1nakIXEr6tcE8J4GzDz9HtFn3jiVso9iLYl3ise+Db1IvQ64khvMXvEU2XT645LilQpSM4Chn/iWGswjB2Sgqey1iCUsbqKRdHxnWT9hBW8LfpXm+i2UXBeyQZf5BkHJMUHJcUjJWiZ1z15dkVwDMtiAMwqr5oK1YIjwMw5vpjtAGut7OFZCvcJ4BobeI2uG/ZDM/bWoZwPKA2w3NycyyUk9sWeJ8HgE2obczQ+1W74T+c+Yxzswb2X3XAK/YjIvYjIlo21U+EWeW3JTFvnSWv8G1J0fuNB3D6DxP+421AcACR0+m2UExQ3mX2PdKDoLq7LCAcN03efrAiTfW1TL8zoOCmpO8hQcZ/lU0O37cxjFVaXHOi2U7CMBohYytkXAEFN2IE35Jk/FhS8CdJwQuSgtclBacKDuvDEGHM/CHomRzE8d5qsUI4AOOJXH9gNsK1L5eQ3AjXJxN/ztrh+bc2eF7TIoDXwilaYFc3wKWmCt94a4Pryi74RzOE7wNpTzRPq+F4fCUcYkV7vdiPiFjRXi8aLzaKynti7wMZYqnFlsfK56m931gAp/wwsQMBtRP+Z3cieHJvrB70AMJpd4SKW3uO4+7qb5VNvLcbP2wSFwe8og8h0WMIitovV+T0PpdkPDvphQ/BLSl4ISm8n+PKaKJCRR9RaMERDELBpyDjABQokoLfSAqelhS8LMk4kdy7DplmbwDPsBAuWgvB9Jdcfww2wv1y9l6wa3wRal5YhJoHmmC5ArFqSu3wXr4J7tGNaXZRyn1BlvuVTOG7Hi6xGe6xDOH7qJZvjdVwvBrfYGHhSquouaFCmG4pFxdW2IRv0CjqP15ZaO9X7YDvpW3wyx3w/cNOBN5KEb5iB/zqjok/B8RehN7IetDD6JAUnKr/fKVYu9IheiqDU6p9rV3hFE2XWnIL4WjvtiNWlvLthH9ToeAH4A5JRCUyhPLwauNHG1eY1UBgRq6CzrvpHcLFeC44cT44BFNOw7Gb4PpoLiHZjHpxFmpjrebUQtRce+Y13M+mCuEcw1fdAOexbAG8Hq50Q7U59/hztQqOsZVwiDIZotlmEytQL+quqxSBfmPejx1thuu1WOBeuhWTFzR1IzA+NXxTNrUDIVu64w1cU33nqvV2dZc5KPqQevOFPoREh90j3NcZRK5rSCQFL0tK0iIuGZ/W+noTUQ6Wov4xLatgzYQ2h3vCagjGnPYy3gj3W1PnZutFBGbhQbVwwSCcseaCQQRgFE2wiLNQ8ydEH7NCG7w3JYdwHo8kjRUWwP7sPcM8LQfsK+FQL/DXiTIZEyufV8AuGjaZ8wzg+tF032crYEicz84QvmIHAmI3fP+4E/5AD5yebvjtO1B/dj/Ct/VUndnbN0XoqnsqQuo5/TVq+SFkLW9q+qokNjvdYmuNV9ij88iJ872nMIwOra83EeWoEahdCttrZ6FG9+CcK0Fc7BAOonpttvu6Ga4b42G4Cg7hh3EicDO1IExiEWqeAoDzAPN6uMYK6QWvzzL/myqAuxF4uBg/46th37kSDrHUbpu05WAhRTcuRO3GdN9nJ/yfzTV8dyEg+hDOsYXigfzi1gXeP6682P726s0Odac7qPbYgmLBB1IMQY9ArJ3nGNsGv7oNftEBn1iyvi6xJ/wSDiNUjOtNRHmIhfAji2BV9Q5NrZse88NFHooWvujK6LpM93QhrLdtgFsshS2n4E1sHlSLRai5axXs9yyHXayDq5AAzqklhO9TKNIc5Bo4r08uvFFI1asVqD+W6ft0I/BqLuHblVf4nmn7EBHvQuNEuwQN6iVSg1i73jEpfGu+WC7ajV51G/wiuUUuNwvz7WXPYwjlxbjWRFSgC1Dbcw6sTzZEq1DpHp6zOYiLHcIBGE+mu49hwLsINeMXoC7v8E0I4fHlOLMhfb4hnE8AdyPwYvJcqpbWwDmcHMCF9H7PAeal+x5dCOzKJXy7CwzfaAAHH+7wuf5tV7lrl7cbZyXO5Sa2ynulKcEbb5vqPaIbgYPpzoOI9HIY50PGNZBxuOybeNbWVTnqXVCtBmxGEaoyzerHlfQI4mKHcAimv6a6jQthPdAES8HhG28LMPnZ2MQQ1qoXvAO+19KVp9TKGjgemW7vtwWOv2T6Ht0IPpJL+O5DeKJlDtuw2Bv7b3TuN6zuQ2iiiIak4C+Tnuf/piTajW4R/oBJLOqxpg3gbdFa1ZdNOvgRfEhS8DKO4L4i3QIimnAI7tiWhXdICh6ObWuY8tN08ryS8foyYdtTKdznG0TAZhRhzL5gLmUIF3s+OAzjfyXf3rNQc9SH6mkHsBOGKUGUTwjnEsCtsN9W7B/31XD8/Uz4Ftb7XZhhf+gueCI7EFBzCOAn1wMVPQgYO+Gw9iBQ3wnXeb3wtfUh0N2LwL4+hC7rQ+CD/QhdfQkij+6PVe/ah9DNE99QxlcS35fntdeJhf2WjKEbnwfebHO9NOngZdwTfyRRUqBiqLgfhojeOW6GAcPogIKbJAU/kRT8NbZDirYVtoYgbDsrhHeBQfjtRhEyGWdFfelSBXHxQ7j6usTbfhZqTmsRvk4YxEJY04awNsPQjh8W+22wCo7R6dR8Xgn7bzO9fhf8h7OHrz/v8o77UF/TMc87NogGMYgGsXy7/esYxqZ4YNZ8sUJsrvNkDd54+C5bZZtY/SzJeCx5QwdJwQuFX2Wid7JDWAIZ12AEw5KMp2LlLHXd5KHqqxA176kQztUG4Q8YRah6ZvaWSxHExQ7hAAxb4z8K82FWtQpgT4pecK4hnEsAb4Dz18V8WywErCvhUAsdel4Ou4rMi8Mqu+Afz7Lo6vUsr5FW6xL7/+o3RDeS2C9FxMLLreNlCsTi7bWiA76cwnez1SNqP5+5Ypak4ARG8GUMo7mgC030jnAQXhzGZVBwpyTjd5KMV9MtxpiRLXEY+wKDCDiMIlwxM4K5mEFcgpXRqgPwAkAIpnGtAtgJg1iG1CUa18EVK7oxnSFo1zPFfLusgq1jer3f+iMZXl7qhP/hLMPOJ+ZPc4HZPkSuHiiLqPsRUfdLEdH0AYuouaVCrAs6s/V61VVn20fT7QucIYxPSQoexRF8CQoi0zl2otlKwjA6IONzkoKfSjJeLMrw8Uxp90CYryoXji1VwrugWgSt+gxjz+YQDsB4GgD8MGo2BO2EQTQh/UYFG+B6IV0I59YDdr1azDfRWjg+PY3e73im1+6E/8YsPd/T3YBdi/O4eIH3wW0RnzqIBrGtwRd9z8gQzuuqRJvFmyKAfeMdcH5g4gVGsAxH8Ei+o2KSgnHIaNXiHIhmvkNYElsYNaZ7KM6AVnlbbBh7TVVJh7GLFcTFDuEgTMeCML6oZQB7UZ02oFpQF2mF87FpBPDbxXw7rYHjvkJ7vy2ovw1A+UVw7L0Izs9dBPf1q1HfAgCd8P9LlvAd2w53gxbncMEq0/vazR7V+I0ysfECp6i/uVJUf0M6UwFrGKLV6Y6Hr7odvqcnvcDNMEgKHo6/p6y3VYjw1aaxrWHv6D5E1JYt9oy/ayDjHi3Og2hmk3G93vO2s6KNQFTfUCZsfbFh7Lpob7kYwVyMIC52zWg/ql/QMoCdMIilKYahV8Ihx390U/WCcwzgsWK+pdbA+fvCim7Yxy6C89p1cJ9aD7dIaGobPG9kCd/xTjiXaHH8HfB+pQM+dRv8ouIQxIo19WJTjVtYDpSLee82i9ovVojKeyWx0e4W2+Eb3wbP+ye9wAiaJAWvmO8sF4sus4q2Js+kWtJ9CInlbfXxVdCjkoJXJAWn4u+1WK3oLi3OhWjmUvAZhm9+TVKgSgqOSzKehIzDFV/A9b5w9V3zYf7lPFgemwfLSw0wj83EIC72fLATBs0WYjlhEI0wTwmoc4GJzQQ2wvWRAotxqMV8W62G81ghC69Ww/50UvCK9XCLzfCITvgzbrLQBXfacpW52g5baDv8f04cVi6Tz/R02yxe0fBP5sRe79EO+Cbt4zvviupPLHifZXzjOe60Gzr0Iyx2G4MqFEyuMR5d1PlJyGiZ7rkQzWxHsJjhm7GpkoLTsceofgIFN0HGVvwmumlANk2oblwAywebYBlaAMsj82B5I1JAta/ZFMJaB7A7aTX0KjjuSr7OrUkbQMyEAG6BfbSA3u/4erjFGjjFCtjFhagXy1AvVqBebIY7Y/h2wv8v0z3m7fB/fBt8Y4nh22b1iLqbKyY9VtQR2w4x1sS26AeDt3sR/nz7PM+b6TZ0SN7codPpe0iLa000K0kKHpwBITcjmiRjPFYY5CHIuB0yLi3SJuHSQlhXL4Tl2gWwfG8+LM82wnwyl2DWKoj9RQxht8ZD0E4YxPmoiwfUqVQrezfBdcNMCuD5gGE57Gq+vd+1seBdFgve5NYCu9gOX/LmCm90I3jOdI63HQ7vdvgfSfccb8eZPYhTtg74RC+CYi8iYk9FMEPwhsZ6y0MnVq12nKq+uyw+kvRnjGCZVteeaLaQ3okLriQFqiTjuKTgz5BxPxRcjcM4X++b4QbMC2HpWQjLlxbA+stMw9haBHEx54O1DuAQTLG5X/vn0ly+8la4T+VbD3oJivIBCy2ovz3/4ed6sTxN8Ca2FbAnhG/wxC4EVkznWDvh/8g2+EbzCdx0rRepwjc01gP/9yx3lD1apmAMMu4HAMj4j/icbyyIf4qD0cfZiOa+YTTrHYZFbvHh4xckGT+GghvzGT6eKSKojjTBckUTLN+aD8uf5sHyery3PFND2KVxADthECtgP44MRSU2wXNHvr3gjai7pBj3bHlHuRjvAAATYklEQVTCZhLZWnyY+cIcwjfe1sMldiKg7oa/4DnfrfA4t8P/+w741EIDN7l1IzAxvNyH0E/6EXxf4L04T5JxdOID8BGcnjiIIRgh4554OVpJxjgU3KnJTSCa0RT0zYCQ1KZXmzh8rOBrGMG7ijR8PGPEhrE/PQ+WnwZhGg/CpM6UEPYUIYDnwZSxctVqwNoK91ieK6G/qPV9WQVbXy7Dz/kEbnJbjnrRDs+LhRzfFjgWdsD7Ynz+VsvWCb+6B8HP7oQ/AACQ0SYpOJk4+gQZU+bw8R0EJRm/jK9HgYzVU/4fojllGGv1Ds68gzbaq31LOoInIOMQZFyFEZyr96WcCQKo6g7BdGKmhLDWAeyEYTTbNdgEz0ie1bB+oPV9aIEj6+rn6YTvmV6w89ZcjqcTgfldCPxDFwJ3diPwnNahm9i2wfv9iW8s4xOJCzxjhTU+kfFgh7EKMq6d3h0gmg2GUJ7TTkT6Be0pScELkoIfQcZncQhbuJl3dvNguSIM03G9V0YXYTGWCmSePmiF3R9/LjjHetCPanntV6L+Q6UI32WoV5vTbKXYicD8HQj8YzcCd3Uj8HwXAqIzNr9bzPDtgE/tQVC9oKvuFSh4Lil8T0JG25SDHcYGLa8/0awiyXhc97CNDh//XVLwIGTchiMYxL3alNF7BytvhPnOUHRoWpcQLsYwtA/V38t24hvh/kUePeC8dwrKpAX2N0sQvmIZ6tUuBA52wv/lTviUHfA/0IXgb7oQOFaqwE1cAd0Jv+hBUHRafcJ8e/nk97iMUdvnyuWJspJDMGIEt0gKjpcpEDiELVreA6LZQ0ZrqZ4Dnhg+lvEEjuA+KPgojmCx3pdgLvPBGGyE+Te5zg9rPRStdQC7chqGtp27AW41xzngt7S61i2wX1+i8BXLUC+iQRsNwK3wiovhFVtjrXiB6z12MbwHt8L3gS74P9yD4PE9CIk9CInWs1yi4jvR93rlfZIIXWMSzTtsoj9WiGPxoDX+YTte/eo1KPioVtefaHZS8I0iDR8/Lyn4IRTcABltHD7Wz3yY2xpg/lupQ7gYw9BWYFG2890E9yM5Pop0Ottr5aiyBY6TpQjeZagX6+AQHfCKLXm0rSlatsDdCu9LW+G9Zyt8V7TBfQ6SVqGvBIy9CP/wgh21asV3IAKfMopV6x2ipyo4pezkku66VL8rxiQFT0PGHRjGJo3uBdEso+BgIT3hhOHj33L4eOabD9M1YZhOljKEte4Fe1H9SLbzbIW9dT1cufSCNSnGsQr2A6UK32XRFdB5hW++Ib0NPrEDvrFO+C/PdN49QPnSHXXPt7Ta1V2mTAU4wmK7y5fLh/cxScFfoKBPi/tCNHsMo0eScTRVECcMHz8OBfdCxpX4Ds7W+5CpIIZGWO4NZpkf1iqEizAMPZ7LSbbC/VYpAnghYF2RouxkscJ3E9xFCd/kth1+0QX/eBfqIkmnLPUjtGYfGr6w3enLWnKyH2HRK4XE+vMdYmOTa6z6m2VZP+hLCsYxlHqRGdHcNoxGjOBDsbrH12AYmzh8PPc0wtDUCMsfM80PaxHARSjKofpQ1Zvt/DbAOVSKAF4F+32lCN8LEa0HXczQ7YA3VuoyWlRjN4JiD4I/G0Don/YifHAfIo/uQ8Ob+xARe2PDyxlqPYtd1QER+YhpIliNXy8Ta5bb3wx+zHS7pOBBScaJsjQf+KEgMt17Q0Q0ozXCsisC8yvFDGGte8EeVB/Ndl4rYHbnGMBpq2tl0wyTN7nqVTHCdznqRVuRhp3TtS74xQAiEy0aqulbQviqfQh+oRehF/cgpO5BSFzQVScq75tYFS0M35DGcDg2lz+MxtiObL+VFByXouUqRwq9J0REs848mG8Iw3S6GEPRWgewM/pMcFa5zQPXzC/0mq2E40fFDt8WHcI33vYgGOvpZg7e5BAeQOQnANCL0A1dZr+6ByGxclW9qPq2JMrkSb3cg4VeeyKiOcUBWBth/m7ysPR0Q7gYzwT7Ybgx2/msh+t09keRHB2FXKsVsJydWHKyWOFbrAVXuc0D+zKGb5qm7kP4+Xej4al3IfLqjgb/6d7akBgsaxAbl7lF1ZAkKg9OrCuZ1ggEEdGcE0blkkZYnkwM4umGsNYB7IYh6zO8G+B6M/uGDM4PFnKNVsLxUJGHnZ/fAs/t7fB+vx2eR7bA8/osCWDRj7C6v6JB3WsMq321ITFQEVH7TSGx8QLX+OZGl+r/n4bTE4s7ZTyEQyh4FIKIaE6aB/O7wjC9qUUIF6k05ZS9gRNtgOvFbAG8Co7fADDmc11aYFsd7/1qHb7NsI0vg+0rqb5vG9zmjXA0tcHduhnegXZ4rtoCz83t8Bxsh+eXW+B9rh2eUS3Ctx0etQuBP/Qi/EAfQr/uRfjhPoT+2IvwY30IPdWL8LN9CL3ci5Dah/BE60VI3YPAwI6I/7W+2tBYjzP05JZzPeO+a6uFpOBtKOjDEMoh44AkR7dDlRSoGMEwDsGaz30gIprrpHmw3BKCaWw6i7KKU5rS9N1MB74erpezBfBK2EUTLKebYL4+1wuyEo6ntO/12kabUXfreYB5mverrB0Obxu8zVvg7myD573tcF/bDs/X2uH93hZ4/tQOz2s5BLCS6zccQMOe/YioA2URseUsz+hehBoT/11S8HKZAgEZD0kyzjzHfS/sUPCDhOpYo5Bx1TTPn4hobpkPOBujWx+qM2UY2gVDukpW5Qtg/dUaOLJWw1oNh2iCVTTBKhbA+isg8yN3K1HXdSHqVY17vceaUbNC+7uWXjNg2gzngi74v7YDAbEtWmpSXAyv2AG/uhPe/fm8XmfQ/9tBNIiBsohwX28Yq74FF8X/TZLxh1jhnqcgo2XKFx/BYknBn2Lzwi9ocHpERHPPPFhXh2B6fqYMQ6cqTbkA1l81wSpWwp41gC+CcyKAE0I4rRY4jmkcvk+fB+vC4t2x7HoQenA3QiKpqT0Ifi2f1+mtCb0yiAbRZwqLqoNQJRk/w0F4IeNQLIDfyPgCh7Ech+Gf1skQEc11YRhv8sGYd29Y615wcmnKJpivj4fpctSLi+AQC2ARLhiEDVWTmgsGMR8WMQ+mSSGcbji6BXW3ahy+v2uGyVuaO5ZeJ2DdjZCaIoRFD4Iv9cDbnMvrvAeo3I+GY4NoEHurwqJsJFquFjL+GC9dW+xzISJ6RwihcjDfENa6MlZSaUpjdD43GqRBmKaEbrrmhiEhgC2nkbQw60JYdi7TcOi5GbYfNsM2Y8ot7kTg1gwhPL4HwVtyeZ1+uNwDUkQdRIPY6fKPJZe2ZQ+XiEgjEZjem08IF2ExlupDVR8AzIf1xiZYxTyYRH2OwZvY6lE10RueD+vEc8Zr4Vqt5bxvM+qH5mdZwa2H3Qg+kSqAoyEcEj0I/W0nHEuzvU7wmuof70dE7fL5x6FgQFLwTLzkJGTkvNiNiIiyiMD0FT2HoeOlKZtgfboJ1oLCNzGEYz3hpwHgIrg718J5QqvwXQrb5wGU6XrDMtiF4GiGABa7EVRXtdhPQcYByFiX6jUkGb/GCIYh47PSERzFYSyCgn+VFDzKZ36JiDQWhunneg1DO2OlKZtgGXWnmOvNt0WHoy2j6+C+bD1cYy2waxW+1+h9n7Lpgn15+qHoM63D7hM1/1khJAWjsdXNt8UDWVLwHBRERxBkXCvJeEDXkyIimuOkEEwv6PVMsB+G/9MIozrd8I2381GjrodbrIFTg/C1jS5F3bv1vkG52o3gHbmE8G4pKM7bXZu8k9FobOHVTzGMDQCAIxjU+ZSIiOY2D+AMwHhcj2FoNwxvadH7jbcQTGK1BuHbjPrjzbAVVG9aTz0IHpsawEG1JymEexASF7t8wnJbebq9fUclBX+BjNsho1Xv8yIimrOCqFzmh3FMj2eCtQrf+FywBj3fl5eiZmrhidmhcheCKXrBqUN4N4Ji7VJHyhCeFMgyxmKBfADDsOl9kkREc0oDzFkfTyrGMLSWAWybZgA3w/aM3gU2pqsb3n9OMRSt7kbgzR6EUgbxtnqfarqjLGsQx3rHr+h9jkREc04E5qyFOuZqADfD9rslMPn0vgfTtQ/Btj0pH0sK/G0PAv+7J31vWD23p+aoJOON5OeAkxvuhV3v8yQimnPCMP6glMPQMyOAbT+aSQU2pmMAkVsGEJlSorIfoT8BwBrA1oPg8VTD0rvKgioAYAhOKLhaUvDz5ECWZBzT9QSJiOayMExPl6oXrHcAN6P+2zOxwEaheizBsQFERC9C6i4EX+1BcLwfYXU/IurF8zw/iv9/5+ypObarPDgpgLuMAVVS8Ispla+G4ISMKyHjWm4/SERURDagNgDjm6V4JljfALZ9ATO4wEYh9paF1QFERG91SI3/3SAartuPiLofETVytekojmAxFHyt8iDEVrdX3Y2gulsKqo1XmNWJ+s8yhnDz3PlgQkQ0azSi6lw/jKPFXoylXwDbPq73NdbauwHnPkQDuHWZa9ImCjvdgbfjWw/W3VKhQsFjE3O6h7ATAHAYfknBLyb2+pVxCgo+o8vJEBG9kzXA2JNuUdbsDWDb6BLUXar3tS2GvQjdOoCIGEBELLzcoib3YPdLkeODaBD7KsKq5fYzq56n1Ho+jOWSjKfitaAlBa/hELaU9GSIiN7pwjBdmyqEtRqGLmUAN6P++FLYtul9TYtlPyL/PYCI2IewqP5mmZioanVG5SAi44NoEP2GsJrQ0x2DjKumvOAI9koKXomF8MOlOQsiIpoQhmm4WMPQpQvgWV1gIyd9VSF1ABGxVwrHdzGaUsd6TaBmxYAUnQ/2Xlt1KukZ35+nfGEZl+I7CBb9BIiIaKoQzE8UYxi6FAHcDNszzbAu0vsaFo2MLknB3/dKYTGAiOg1hKIBPIJvTfl/h7HJfFv56XUrHbKkYCwWvG9JCl6Ggnt1OHoiIsrEDZiDML2q9TPBxQ7gZth+PxcKbKQ0jEZJxu8lBar11vLTA4hEF2A1u07HgvW3U75GxlWSgr8DgCTj6Xjt55IfOxER5c4PQ1MAxtNaDkMXN4DnToGNKWQMSQrGJQUqRjB81lkI7y0Pq/sQViNXVj8Zm9s9muLrbpdkPB77812xAFb5fC8R0QzXCFNH4qKsGRzA98ylAhuTDKNTUqBKMh7HESyO/7V0P56ouhtfh4wDsWA9OeVrZXwCCq6O/fnKhJXQW0t3AkREVJAwTNfEQ3i6w9DFCOBm2L6IOVZgY4qD8Cb/laTgFci4EiN4/0TPdgjlaV9jBOfGV0JDRldRj5eIiLQRgXlIi16w1gHcjLp/0fva6EVScBoyWnEY50/0bA9jecYvGsGHoOBTJTpEIiLSQhjmP0z3mWCtA1jva6IjSZJxAkMwAoCk4HVJwWkMwan3gRERkfYMQZhens5iLAYwERFRAXwwhgIwnmIAExERlVgY1a0uGFQGMBERUYmFYPycs4AQZgATERFNkxOGcQYwERFRiXlRfScDmIiIqPQM+Q5DM4CJiIg04IPxIQYwERFRiflRvZ8BTEREpAMPDCcZwERERCXmg+m7DGAiIqIS86FiVa6LsRjAREREGvLC+AoDmIiIqMT8qL6NAUxERFRiAcCfyzA0A5iIiEhjPlQ/ywAmIiIqsQCqP8UAJiIiKj2DK8sGDQxgIiKiIshWmpIBTEREVAQBVO9jABMREekgU2lKBjAREVGR+GA6wgAmIiIqMT8qW9I9E8wAJiIiKqJ0pSkZwEREREWUrjQlA5iIiKiI0pWmZAATEREVWarSlAxgIiKiIvOh+pMMYCIiotKbUpqSAUxERFQCPhgfZAATERGVWHJpSgYwERFRiSSWpmQAExERlUhiaUoGMBERUYkklqZkABMREZVQvDQlA5iIiKiEAqg+wAAmIiIqsXhpSgYwERFRiXlR/QwDmIiIqMR8qP4kA5iIiKj0DAxgIiIiHTCAiYiIdMAAJiIi0gEDmIiISAcMYCIiIh0wgImIiHTAACYiItIBA5iIiEgHDGAiIiIdMICJiIh0wAAmIiLSAQOYiIhIBwxgIiIiHTCAiYiIdMAAJiIi0gEDmIiISAcMYCIiIh0wgImIiHTAACYiItIBA5iIiEgHDGAiIiIdMICJiIh0wAAmIiLSAQOYiIhIBwxgIiIiHTCAiYiIdMAAJiIi0gEDmIiISAcMYCIiIh0wgImIiHTAACYiItIBA5iIiEgHDGAiIiIdMICJiIh0wAAmIiLSAQOYiIhIBwxgIiIiHTCAiYiIdMAAJiIi0gEDmIiISAcMYCIiIh0wgImIiHTAACYiItIBA5iIiEgHDGAiIiId2FClahjAqt7nQ0RENCvUo+p1rQK4HlWv630+REREs4INlXdr1wOuvFvv8yEiIpoValHVo1UA16KqR+/zISIimi0q61D15HTDtw5VTwKo1PtkiIiIZo06lHdPP4DLu/U+DyIiolnHhqobphHAN+h9/ERERLNVWYEhfAOAMr0PnoiIaFarQ3l3LnPCdah6ksPORERE2qqMro6u/Hodqp6pQ+WpaKt6xobKr8dWO3PBFRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERHRrPL/AZmlY8H9gByUAAAAAElFTkSuQmCC
abs10-47
1009height103566- 43
- 340
- 0.95
- 84
- 48
- 0.587962583843564
- 98
- 355
- 0.45177427992306074
\ No newline at end of file
diff --git a/Examples/vee.xml b/Examples/vee.xml
new file mode 100644
index 00000000..cb181316
--- /dev/null
+++ b/Examples/vee.xml
@@ -0,0 +1 @@
+This is the project which started it all. After an example by E. Paul Goldenberg. Featuring recursion without the need for a base case and first class custom blocks it was Brian's demo at the 2008 Scratch conference, why Scratch needed custom procedures.To this day, Vee is the first project we test whenever we change anything or add new features to Snap.data:image/png;base64,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:image/png;base64,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
\ No newline at end of file
diff --git a/README.md b/README.md
index 2c7cc081..ba5f5d74 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@ visual, blocks based programming language inspired by Scratch
written by Jens Mönig and Brian Harvey
-Copyright (C) 2014 by Jens Mönig and Brian Harvey
+Copyright (C) 2015 by Jens Mönig and Brian Harvey
This is free software: you can redistribute it and/or modify
diff --git a/blocks.js b/blocks.js
index 73ef8842..e56d0edc 100644
--- a/blocks.js
+++ b/blocks.js
@@ -155,7 +155,7 @@ DialogBoxMorph, BlockInputFragmentMorph, PrototypeHatBlockMorph, Costume*/
// Global stuff ////////////////////////////////////////////////////////
-modules.blocks = '2014-October-01';
+modules.blocks = '2014-November-21';
var SyntaxElementMorph;
@@ -394,10 +394,10 @@ SyntaxElementMorph.prototype.allInputs = function () {
};
SyntaxElementMorph.prototype.allEmptySlots = function () {
-/*
- answer empty input slots of all children excluding myself,
- but omit those in nested rings (lambdas) and JS-Function primitives
-*/
+ // answer empty input slots of all children excluding myself,
+ // but omit those in nested rings (lambdas) and JS-Function primitives.
+ // Used by the evaluator when binding implicit formal parameters
+ // to empty input slots
var empty = [];
if (!(this instanceof RingMorph) &&
(this.selector !== 'reportJSFunction')) {
@@ -412,6 +412,26 @@ SyntaxElementMorph.prototype.allEmptySlots = function () {
return empty;
};
+SyntaxElementMorph.prototype.tagExitBlocks = function (stopTag, isCommand) {
+ // tag 'report' and 'stop this block' blocks of all children including
+ // myself, with either a stopTag (for "stop" blocks) or an indicator of
+ // being inside a command block definition, but omit those in nested
+ // rings (lambdas. Used by the evaluator when entering a procedure
+ if (this.selector === 'doReport') {
+ this.partOfCustomCommand = isCommand;
+ } else if (this.selector === 'doStopThis') {
+ this.exitTag = stopTag;
+ } else {
+ if (!(this instanceof RingMorph)) {
+ this.children.forEach(function (morph) {
+ if (morph.tagExitBlocks) {
+ morph.tagExitBlocks(stopTag, isCommand);
+ }
+ });
+ }
+ }
+};
+
SyntaxElementMorph.prototype.replaceInput = function (oldArg, newArg) {
var scripts = this.parentThatIsA(ScriptsMorph),
replacement = newArg,
@@ -3169,9 +3189,14 @@ BlockMorph.prototype.snap = function () {
I inherit from BlockMorph adding the following most important
public accessors:
- nextBlock() - set / get the block attached to my bottom
- bottomBlock() - answer the bottom block of my stack
- blockSequence() - answer an array of blocks starting with myself
+ nextBlock() - set / get the block attached to my bottom
+ bottomBlock() - answer the bottom block of my stack
+ blockSequence() - answer an array of blocks starting with myself
+
+ and the following "lexical awareness" indicators:
+
+ partOfCustomCommand - temporary bool set by the evaluator
+ exitTag - temporary string or number set by the evaluator
*/
// CommandBlockMorph inherits from BlockMorph:
@@ -3189,6 +3214,8 @@ function CommandBlockMorph() {
CommandBlockMorph.prototype.init = function () {
CommandBlockMorph.uber.init.call(this);
this.setExtent(new Point(200, 100));
+ this.partOfCustomCommand = false;
+ this.exitTag = null;
};
// CommandBlockMorph enumerating:
diff --git a/byob.js b/byob.js
index 1277bb6b..ec714f11 100644
--- a/byob.js
+++ b/byob.js
@@ -9,7 +9,7 @@
written by Jens Mönig
jens@moenig.org
- Copyright (C) 2014 by Jens Mönig
+ Copyright (C) 2015 by Jens Mönig
This file is part of Snap!.
@@ -106,7 +106,7 @@ SymbolMorph, isNil*/
// Global stuff ////////////////////////////////////////////////////////
-modules.byob = '2014-September-30';
+modules.byob = '2015-January-21';
// Declarations
@@ -209,12 +209,14 @@ CustomBlockDefinition.prototype.copyAndBindTo = function (sprite) {
c.receiver = sprite; // only for (kludgy) serialization
c.declarations = copy(this.declarations); // might have to go deeper
- c.body = Process.prototype.reify.call(
- null,
- this.body.expression,
- new List(this.inputNames())
- );
- c.body.outerContext = null;
+ if (c.body) {
+ c.body = Process.prototype.reify.call(
+ null,
+ this.body.expression,
+ new List(this.inputNames())
+ );
+ c.body.outerContext = null;
+ }
return c;
};
@@ -688,7 +690,8 @@ CustomCommandBlockMorph.prototype.labelPart = function (spec) {
return CustomCommandBlockMorph.uber.labelPart.call(this, spec);
}
if ((spec[0] === '%') && (spec.length > 1)) {
- part = new BlockInputFragmentMorph(spec.slice(1));
+ // part = new BlockInputFragmentMorph(spec.slice(1));
+ part = new BlockInputFragmentMorph(spec.replace(/%/g, ''));
} else {
part = new BlockLabelFragmentMorph(spec);
part.fontSize = this.fontSize;
@@ -1648,7 +1651,7 @@ BlockEditorMorph.prototype.init = function (definition, target) {
scripts = new ScriptsMorph(target);
scripts.isDraggable = false;
scripts.color = IDE_Morph.prototype.groupColor;
- scripts.texture = IDE_Morph.prototype.scriptsPaneTexture;
+ scripts.cachedTexture = IDE_Morph.prototype.scriptsPaneTexture;
scripts.cleanUpMargin = 10;
proto = new PrototypeHatBlockMorph(this.definition);
diff --git a/cloud.js b/cloud.js
index 54189d85..ed7233f9 100644
--- a/cloud.js
+++ b/cloud.js
@@ -1,639 +1,642 @@
-/*
-
- cloud.js
-
- a backend API for SNAP!
-
- written by Jens Mönig
-
- Copyright (C) 2014 by Jens Mönig
-
- This file is part of Snap!.
-
- Snap! is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of
- the License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see .
-
-*/
-
-// Global settings /////////////////////////////////////////////////////
-
-/*global modules, IDE_Morph, SnapSerializer, hex_sha512, alert, nop,
-localize*/
-
-modules.cloud = '2014-May-26';
-
-// Global stuff
-
-var Cloud;
-
-var SnapCloud = new Cloud(
- 'https://snapcloud.miosoft.com/miocon/app/login?_app=SnapCloud'
-);
-
-// Cloud /////////////////////////////////////////////////////////////
-
-function Cloud(url) {
- this.username = null;
- this.password = null; // hex_sha512 hashed
- this.url = url;
- this.session = null;
- this.api = {};
-}
-
-Cloud.prototype.clear = function () {
- this.username = null;
- this.password = null;
- this.session = null;
- this.api = {};
-};
-
-Cloud.prototype.hasProtocol = function () {
- return this.url.toLowerCase().indexOf('http') === 0;
-};
-
-// Cloud: Snap! API
-
-Cloud.prototype.signup = function (
- username,
- email,
- callBack,
- errorCall
-) {
- // both callBack and errorCall are two-argument functions
- var request = new XMLHttpRequest(),
- myself = this;
- try {
- request.open(
- "GET",
- (this.hasProtocol() ? '' : 'http://')
- + this.url + 'SignUp'
- + '&Username='
- + encodeURIComponent(username)
- + '&Email='
- + encodeURIComponent(email),
- true
- );
- request.setRequestHeader(
- "Content-Type",
- "application/x-www-form-urlencoded"
- );
- request.withCredentials = true;
- request.onreadystatechange = function () {
- if (request.readyState === 4) {
- if (request.responseText) {
- if (request.responseText.indexOf('ERROR') === 0) {
- errorCall.call(
- this,
- request.responseText,
- 'Signup'
- );
- } else {
- callBack.call(
- null,
- request.responseText,
- 'Signup'
- );
- }
- } else {
- errorCall.call(
- null,
- myself.url + 'SignUp',
- localize('could not connect to:')
- );
- }
- }
- };
- request.send(null);
- } catch (err) {
- errorCall.call(this, err.toString(), 'Snap!Cloud');
- }
-};
-
-Cloud.prototype.getPublicProject = function (
- id,
- callBack,
- errorCall
-) {
- // id is Username=username&projectName=projectname,
- // where the values are url-component encoded
- // callBack is a single argument function, errorCall take two args
- var request = new XMLHttpRequest(),
- responseList,
- myself = this;
- try {
- request.open(
- "GET",
- (this.hasProtocol() ? '' : 'http://')
- + this.url + 'Public'
- + '&'
- + id,
- true
- );
- request.setRequestHeader(
- "Content-Type",
- "application/x-www-form-urlencoded"
- );
- request.withCredentials = true;
- request.onreadystatechange = function () {
- if (request.readyState === 4) {
- if (request.responseText) {
- if (request.responseText.indexOf('ERROR') === 0) {
- errorCall.call(
- this,
- request.responseText
- );
- } else {
- responseList = myself.parseResponse(
- request.responseText
- );
- callBack.call(
- null,
- responseList[0].SourceCode
- );
- }
- } else {
- errorCall.call(
- null,
- myself.url + 'Public',
- localize('could not connect to:')
- );
- }
- }
- };
- request.send(null);
- } catch (err) {
- errorCall.call(this, err.toString(), 'Snap!Cloud');
- }
-};
-
-Cloud.prototype.resetPassword = function (
- username,
- callBack,
- errorCall
-) {
- // both callBack and errorCall are two-argument functions
- var request = new XMLHttpRequest(),
- myself = this;
- try {
- request.open(
- "GET",
- (this.hasProtocol() ? '' : 'http://')
- + this.url + 'ResetPW'
- + '&Username='
- + encodeURIComponent(username),
- true
- );
- request.setRequestHeader(
- "Content-Type",
- "application/x-www-form-urlencoded"
- );
- request.withCredentials = true;
- request.onreadystatechange = function () {
- if (request.readyState === 4) {
- if (request.responseText) {
- if (request.responseText.indexOf('ERROR') === 0) {
- errorCall.call(
- this,
- request.responseText,
- 'Reset Password'
- );
- } else {
- callBack.call(
- null,
- request.responseText,
- 'Reset Password'
- );
- }
- } else {
- errorCall.call(
- null,
- myself.url + 'ResetPW',
- localize('could not connect to:')
- );
- }
- }
- };
- request.send(null);
- } catch (err) {
- errorCall.call(this, err.toString(), 'Snap!Cloud');
- }
-};
-
-Cloud.prototype.connect = function (
- callBack,
- errorCall
-) {
- // both callBack and errorCall are two-argument functions
- var request = new XMLHttpRequest(),
- myself = this;
- try {
- request.open(
- "GET",
- (this.hasProtocol() ? '' : 'http://') + this.url,
- true
- );
- request.setRequestHeader(
- "Content-Type",
- "application/x-www-form-urlencoded"
- );
- request.withCredentials = true;
- request.onreadystatechange = function () {
- if (request.readyState === 4) {
- if (request.responseText) {
- myself.api = myself.parseAPI(request.responseText);
- myself.session = request.getResponseHeader('MioCracker')
- .split(';')[0];
- if (myself.api.login) {
- callBack.call(null, myself.api, 'Snap!Cloud');
- } else {
- errorCall.call(
- null,
- 'connection failed'
- );
- }
- } else {
- errorCall.call(
- null,
- myself.url,
- localize('could not connect to:')
- );
- }
- }
- };
- request.send(null);
- } catch (err) {
- errorCall.call(this, err.toString(), 'Snap!Cloud');
- }
-};
-
-
-Cloud.prototype.login = function (
- username,
- password,
- callBack,
- errorCall
-) {
- var myself = this;
- this.connect(
- function () {
- myself.rawLogin(username, password, callBack, errorCall);
- myself.disconnect();
- },
- errorCall
- );
-};
-
-Cloud.prototype.rawLogin = function (
- username,
- password,
- callBack,
- errorCall
-) {
- // both callBack and errorCall are two-argument functions
- var myself = this,
- pwHash = hex_sha512("miosoft%20miocon,"
- + this.session.split('=')[1] + ","
- + encodeURIComponent(username.toLowerCase()) + ","
- + password // alreadey hex_sha512 hashed
- );
- this.callService(
- 'login',
- function (response, url) {
- if (myself.api.logout) {
- myself.username = username;
- myself.password = password;
- callBack.call(null, response, url);
- } else {
- errorCall.call(
- null,
- 'Service catalog is not available,\nplease retry',
- 'Connection Error:'
- );
- }
- },
- errorCall,
- [username, pwHash]
- );
-};
-
-Cloud.prototype.reconnect = function (
- callBack,
- errorCall
-) {
- if (!(this.username && this.password)) {
- this.message('You are not logged in');
- return;
- }
- this.login(
- this.username,
- this.password,
- callBack,
- errorCall
- );
-};
-
-Cloud.prototype.saveProject = function (ide, callBack, errorCall) {
- var myself = this,
- pdata,
- media;
-
- ide.serializer.isCollectingMedia = true;
- pdata = ide.serializer.serialize(ide.stage);
- media = ide.hasChangedMedia ?
- ide.serializer.mediaXML(ide.projectName) : null;
- ide.serializer.isCollectingMedia = false;
- ide.serializer.flushMedia();
-
- // check if serialized data can be parsed back again
- try {
- ide.serializer.parse(pdata);
- } catch (err) {
- ide.showMessage('Serialization of program data failed:\n' + err);
- throw new Error('Serialization of program data failed:\n' + err);
- }
- if (media !== null) {
- try {
- ide.serializer.parse(media);
- } catch (err) {
- ide.showMessage('Serialization of media failed:\n' + err);
- throw new Error('Serialization of media failed:\n' + err);
- }
- }
- ide.serializer.isCollectingMedia = false;
- ide.serializer.flushMedia();
-
- myself.reconnect(
- function () {
- myself.callService(
- 'saveProject',
- function (response, url) {
- callBack.call(null, response, url);
- myself.disconnect();
- ide.hasChangedMedia = false;
- },
- errorCall,
- [
- ide.projectName,
- pdata,
- media,
- pdata.length,
- media ? media.length : 0
- ]
- );
- },
- errorCall
- );
-};
-
-Cloud.prototype.getProjectList = function (callBack, errorCall) {
- var myself = this;
- this.reconnect(
- function () {
- myself.callService(
- 'getProjectList',
- function (response, url) {
- callBack.call(null, response, url);
- myself.disconnect();
- },
- errorCall
- );
- },
- errorCall
- );
-};
-
-Cloud.prototype.changePassword = function (
- oldPW,
- newPW,
- callBack,
- errorCall
-) {
- var myself = this;
- this.reconnect(
- function () {
- myself.callService(
- 'changePassword',
- function (response, url) {
- callBack.call(null, response, url);
- myself.disconnect();
- },
- errorCall,
- [oldPW, newPW]
- );
- },
- errorCall
- );
-};
-
-Cloud.prototype.logout = function (callBack, errorCall) {
- this.clear();
- this.callService(
- 'logout',
- callBack,
- errorCall
- );
-};
-
-Cloud.prototype.disconnect = function () {
- this.callService(
- 'logout',
- nop,
- nop
- );
-};
-
-// Cloud: backend communication
-
-Cloud.prototype.callURL = function (url, callBack, errorCall) {
- // both callBack and errorCall are optional two-argument functions
- var request = new XMLHttpRequest(),
- myself = this;
- try {
- request.open('GET', url, true);
- request.withCredentials = true;
- request.setRequestHeader(
- "Content-Type",
- "application/x-www-form-urlencoded"
- );
- request.setRequestHeader('MioCracker', this.session);
- request.onreadystatechange = function () {
- if (request.readyState === 4) {
- if (request.responseText) {
- var responseList = myself.parseResponse(
- request.responseText
- );
- callBack.call(null, responseList, url);
- } else {
- errorCall.call(
- null,
- url,
- 'no response from:'
- );
- }
- }
- };
- request.send(null);
- } catch (err) {
- errorCall.call(this, err.toString(), url);
- }
-};
-
-Cloud.prototype.callService = function (
- serviceName,
- callBack,
- errorCall,
- args
-) {
- // both callBack and errorCall are optional two-argument functions
- var request = new XMLHttpRequest(),
- service = this.api[serviceName],
- myself = this,
- postDict;
-
- if (!this.session) {
- errorCall.call(null, 'You are not connected', 'Cloud');
- return;
- }
- if (!service) {
- errorCall.call(
- null,
- 'service ' + serviceName + ' is not available',
- 'API'
- );
- return;
- }
- if (args && args.length > 0) {
- postDict = {};
- service.parameters.forEach(function (parm, idx) {
- postDict[parm] = args[idx];
- });
- }
- try {
- request.open(service.method, service.url, true);
- request.withCredentials = true;
- request.setRequestHeader(
- "Content-Type",
- "application/x-www-form-urlencoded"
- );
- request.setRequestHeader('MioCracker', this.session);
- request.onreadystatechange = function () {
- if (request.readyState === 4) {
- var responseList = [];
- if (request.responseText &&
- request.responseText.indexOf('ERROR') === 0) {
- errorCall.call(
- this,
- request.responseText,
- localize('Service:') + ' ' + localize(serviceName)
- );
- return;
- }
- if (serviceName === 'login') {
- myself.api = myself.parseAPI(request.responseText);
- }
- responseList = myself.parseResponse(
- request.responseText
- );
- callBack.call(null, responseList, service.url);
- }
- };
- request.send(this.encodeDict(postDict));
- } catch (err) {
- errorCall.call(this, err.toString(), service.url);
- }
-};
-
-// Cloud: payload transformation
-
-Cloud.prototype.parseAPI = function (src) {
- var api = {},
- services;
- services = src.split(" ");
- services.forEach(function (service) {
- var entries = service.split("&"),
- serviceDescription = {},
- parms;
- entries.forEach(function (entry) {
- var pair = entry.split("="),
- key = decodeURIComponent(pair[0]).toLowerCase(),
- val = decodeURIComponent(pair[1]);
- if (key === "service") {
- api[val] = serviceDescription;
- } else if (key === "parameters") {
- parms = val.split(",");
- if (!(parms.length === 1 && !parms[0])) {
- serviceDescription.parameters = parms;
- }
- } else {
- serviceDescription[key] = val;
- }
- });
- });
- return api;
-};
-
-Cloud.prototype.parseResponse = function (src) {
- var ans = [],
- lines;
- if (!src) {return ans; }
- lines = src.split(" ");
- lines.forEach(function (service) {
- var entries = service.split("&"),
- dict = {};
- entries.forEach(function (entry) {
- var pair = entry.split("="),
- key = decodeURIComponent(pair[0]),
- val = decodeURIComponent(pair[1]);
- dict[key] = val;
- });
- ans.push(dict);
- });
- return ans;
-};
-
-Cloud.prototype.parseDict = function (src) {
- var dict = {};
- if (!src) {return dict; }
- src.split("&").forEach(function (entry) {
- var pair = entry.split("="),
- key = decodeURIComponent(pair[0]),
- val = decodeURIComponent(pair[1]);
- dict[key] = val;
- });
- return dict;
-};
-
-Cloud.prototype.encodeDict = function (dict) {
- var str = '',
- pair,
- key;
- if (!dict) {return null; }
- for (key in dict) {
- if (dict.hasOwnProperty(key)) {
- pair = encodeURIComponent(key)
- + '='
- + encodeURIComponent(dict[key]);
- if (str.length > 0) {
- str += '&';
- }
- str += pair;
- }
- }
- return str;
-};
-
-// Cloud: user messages (to be overridden)
-
-Cloud.prototype.message = function (string) {
- alert(string);
-};
+/*
+
+ cloud.js
+
+ a backend API for SNAP!
+
+ written by Jens Mönig
+
+ Copyright (C) 2015 by Jens Mönig
+
+ This file is part of Snap!.
+
+ Snap! is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of
+ the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+
+*/
+
+// Global settings /////////////////////////////////////////////////////
+
+/*global modules, IDE_Morph, SnapSerializer, hex_sha512, alert, nop,
+localize*/
+
+modules.cloud = '2015-January-12';
+
+// Global stuff
+
+var Cloud;
+var SnapCloud = new Cloud(
+ 'https://snap.apps.miosoft.com/SnapCloud'
+);
+
+// Cloud /////////////////////////////////////////////////////////////
+
+function Cloud(url) {
+ this.username = null;
+ this.password = null; // hex_sha512 hashed
+ this.url = url;
+ this.session = null;
+ this.limo = null;
+ this.route = null;
+ this.api = {};
+}
+
+Cloud.prototype.clear = function () {
+ this.username = null;
+ this.password = null;
+ this.session = null;
+ this.limo = null;
+ this.route = null;
+ this.api = {};
+};
+
+Cloud.prototype.hasProtocol = function () {
+ return this.url.toLowerCase().indexOf('http') === 0;
+};
+
+Cloud.prototype.setRoute = function (username) {
+ var routes = 10,
+ userNum = 0,
+ i;
+
+ for (i = 0; i < username.length; i += 1) {
+ userNum += username.charCodeAt(i);
+ }
+ userNum = userNum % routes + 1;
+ this.route = '.sc1m' +
+ (userNum < 10 ? '0' : '') +
+ userNum;
+};
+
+// Cloud: Snap! API
+
+Cloud.prototype.signup = function (
+ username,
+ email,
+ callBack,
+ errorCall
+) {
+ // both callBack and errorCall are two-argument functions
+ var request = new XMLHttpRequest(),
+ myself = this;
+ try {
+ request.open(
+ "GET",
+ (this.hasProtocol() ? '' : 'http://')
+ + this.url + 'SignUp'
+ + '?Username='
+ + encodeURIComponent(username)
+ + '&Email='
+ + encodeURIComponent(email),
+ true
+ );
+ request.setRequestHeader(
+ "Content-Type",
+ "application/x-www-form-urlencoded"
+ );
+ request.withCredentials = true;
+ request.onreadystatechange = function () {
+ if (request.readyState === 4) {
+ if (request.responseText) {
+ if (request.responseText.indexOf('ERROR') === 0) {
+ errorCall.call(
+ this,
+ request.responseText,
+ 'Signup'
+ );
+ } else {
+ callBack.call(
+ null,
+ request.responseText,
+ 'Signup'
+ );
+ }
+ } else {
+ errorCall.call(
+ null,
+ myself.url + 'SignUp',
+ localize('could not connect to:')
+ );
+ }
+ }
+ };
+ request.send(null);
+ } catch (err) {
+ errorCall.call(this, err.toString(), 'Snap!Cloud');
+ }
+};
+
+Cloud.prototype.getPublicProject = function (
+ id,
+ callBack,
+ errorCall
+) {
+ // id is Username=username&projectName=projectname,
+ // where the values are url-component encoded
+ // callBack is a single argument function, errorCall take two args
+ var request = new XMLHttpRequest(),
+ responseList,
+ myself = this;
+ try {
+ request.open(
+ "GET",
+ (this.hasProtocol() ? '' : 'http://')
+ + this.url + 'Public'
+ + '?'
+ + id,
+ true
+ );
+ request.setRequestHeader(
+ "Content-Type",
+ "application/x-www-form-urlencoded"
+ );
+ request.withCredentials = true;
+ request.onreadystatechange = function () {
+ if (request.readyState === 4) {
+ if (request.responseText) {
+ if (request.responseText.indexOf('ERROR') === 0) {
+ errorCall.call(
+ this,
+ request.responseText
+ );
+ } else {
+ responseList = myself.parseResponse(
+ request.responseText
+ );
+ callBack.call(
+ null,
+ responseList[0].SourceCode
+ );
+ }
+ } else {
+ errorCall.call(
+ null,
+ myself.url + 'Public',
+ localize('could not connect to:')
+ );
+ }
+ }
+ };
+ request.send(null);
+ } catch (err) {
+ errorCall.call(this, err.toString(), 'Snap!Cloud');
+ }
+};
+
+Cloud.prototype.resetPassword = function (
+ username,
+ callBack,
+ errorCall
+) {
+ // both callBack and errorCall are two-argument functions
+ var request = new XMLHttpRequest(),
+ myself = this;
+ try {
+ request.open(
+ "GET",
+ (this.hasProtocol() ? '' : 'http://')
+ + this.url + 'ResetPW'
+ + '?Username='
+ + encodeURIComponent(username),
+ true
+ );
+ request.setRequestHeader(
+ "Content-Type",
+ "application/x-www-form-urlencoded"
+ );
+ request.withCredentials = true;
+ request.onreadystatechange = function () {
+ if (request.readyState === 4) {
+ if (request.responseText) {
+ if (request.responseText.indexOf('ERROR') === 0) {
+ errorCall.call(
+ this,
+ request.responseText,
+ 'Reset Password'
+ );
+ } else {
+ callBack.call(
+ null,
+ request.responseText,
+ 'Reset Password'
+ );
+ }
+ } else {
+ errorCall.call(
+ null,
+ myself.url + 'ResetPW',
+ localize('could not connect to:')
+ );
+ }
+ }
+ };
+ request.send(null);
+ } catch (err) {
+ errorCall.call(this, err.toString(), 'Snap!Cloud');
+ }
+};
+
+Cloud.prototype.login = function (
+ username,
+ password,
+ callBack,
+ errorCall
+) {
+ // both callBack and errorCall are two-argument functions
+ var request = new XMLHttpRequest(),
+ usr = JSON.stringify({'__h': password, '__u': username}),
+ myself = this;
+ this.setRoute(username);
+ try {
+ request.open(
+ "POST",
+ (this.hasProtocol() ? '' : 'http://') +
+ this.url +
+ '?SESSIONGLUE=' +
+ this.route,
+ true
+ );
+ request.setRequestHeader(
+ "Content-Type",
+ "application/json; charset=utf-8"
+ );
+ // glue this session to a route:
+ request.setRequestHeader('SESSIONGLUE', this.route);
+ request.withCredentials = true;
+ request.onreadystatechange = function () {
+ if (request.readyState === 4) {
+ if (request.responseText) {
+ myself.api = myself.parseAPI(request.responseText);
+ myself.session = request.getResponseHeader('MioCracker')
+ .split(';')[0];
+ // set the cookie identifier:
+ myself.limo = this.getResponseHeader("miocracker")
+ .substring(
+ 9,
+ this.getResponseHeader("miocracker").indexOf("=")
+ );
+ if (myself.api.logout) {
+ myself.username = username;
+ myself.password = password;
+ callBack.call(null, myself.api, 'Snap!Cloud');
+ } else {
+ errorCall.call(
+ null,
+ request.responseText,
+ 'connection failed'
+ );
+ }
+ } else {
+ errorCall.call(
+ null,
+ myself.url,
+ localize('could not connect to:')
+ );
+ }
+ }
+ };
+ request.send(usr);
+ } catch (err) {
+ errorCall.call(this, err.toString(), 'Snap!Cloud');
+ }
+};
+
+Cloud.prototype.reconnect = function (
+ callBack,
+ errorCall
+) {
+ if (!(this.username && this.password)) {
+ this.message('You are not logged in');
+ return;
+ }
+ this.login(
+ this.username,
+ this.password,
+ callBack,
+ errorCall
+ );
+};
+
+Cloud.prototype.saveProject = function (ide, callBack, errorCall) {
+ var myself = this,
+ pdata,
+ media;
+
+ ide.serializer.isCollectingMedia = true;
+ pdata = ide.serializer.serialize(ide.stage);
+ media = ide.hasChangedMedia ?
+ ide.serializer.mediaXML(ide.projectName) : null;
+ ide.serializer.isCollectingMedia = false;
+ ide.serializer.flushMedia();
+
+ // check if serialized data can be parsed back again
+ try {
+ ide.serializer.parse(pdata);
+ } catch (err) {
+ ide.showMessage('Serialization of program data failed:\n' + err);
+ throw new Error('Serialization of program data failed:\n' + err);
+ }
+ if (media !== null) {
+ try {
+ ide.serializer.parse(media);
+ } catch (err) {
+ ide.showMessage('Serialization of media failed:\n' + err);
+ throw new Error('Serialization of media failed:\n' + err);
+ }
+ }
+ ide.serializer.isCollectingMedia = false;
+ ide.serializer.flushMedia();
+
+ myself.reconnect(
+ function () {
+ myself.callService(
+ 'saveProject',
+ function (response, url) {
+ callBack.call(null, response, url);
+ myself.disconnect();
+ ide.hasChangedMedia = false;
+ },
+ errorCall,
+ [
+ ide.projectName,
+ pdata,
+ media,
+ pdata.length,
+ media ? media.length : 0
+ ]
+ );
+ },
+ errorCall
+ );
+};
+
+Cloud.prototype.getProjectList = function (callBack, errorCall) {
+ var myself = this;
+ this.reconnect(
+ function () {
+ myself.callService(
+ 'getProjectList',
+ function (response, url) {
+ callBack.call(null, response, url);
+ myself.disconnect();
+ },
+ errorCall
+ );
+ },
+ errorCall
+ );
+};
+
+Cloud.prototype.changePassword = function (
+ oldPW,
+ newPW,
+ callBack,
+ errorCall
+) {
+ var myself = this;
+ this.reconnect(
+ function () {
+ myself.callService(
+ 'changePassword',
+ function (response, url) {
+ callBack.call(null, response, url);
+ myself.disconnect();
+ },
+ errorCall,
+ [hex_sha512(oldPW), hex_sha512(newPW)]
+ );
+ },
+ errorCall
+ );
+};
+
+Cloud.prototype.logout = function (callBack, errorCall) {
+ this.clear();
+ this.callService(
+ 'logout',
+ callBack,
+ errorCall
+ );
+};
+
+Cloud.prototype.disconnect = function () {
+ this.callService(
+ 'logout',
+ nop,
+ nop
+ );
+};
+
+// Cloud: backend communication
+
+Cloud.prototype.callURL = function (url, callBack, errorCall) {
+ // both callBack and errorCall are optional two-argument functions
+ var request = new XMLHttpRequest(),
+ stickyUrl,
+ myself = this;
+ try {
+ // set the Limo. Also set the glue as a query paramter for backup.
+ stickyUrl = url +
+ '&SESSIONGLUE=' +
+ this.route +
+ '&_Limo=' +
+ this.limo;
+ request.open('GET', stickyUrl, true);
+ request.withCredentials = true;
+ request.setRequestHeader(
+ "Content-Type",
+ "application/x-www-form-urlencoded"
+ );
+ request.setRequestHeader('MioCracker', this.session);
+ // Set the glue as a request header.
+ request.setRequestHeader('SESSIONGLUE', this.route);
+ request.onreadystatechange = function () {
+ if (request.readyState === 4) {
+ if (request.responseText) {
+ var responseList = myself.parseResponse(
+ request.responseText
+ );
+ callBack.call(null, responseList, url);
+ } else {
+ errorCall.call(
+ null,
+ url,
+ 'no response from:'
+ );
+ }
+ }
+ };
+ request.send(null);
+ } catch (err) {
+ errorCall.call(this, err.toString(), url);
+ }
+};
+
+Cloud.prototype.callService = function (
+ serviceName,
+ callBack,
+ errorCall,
+ args
+) {
+ // both callBack and errorCall are optional two-argument functions
+ var request = new XMLHttpRequest(),
+ service = this.api[serviceName],
+ myself = this,
+ stickyUrl,
+ postDict;
+
+ if (!this.session) {
+ errorCall.call(null, 'You are not connected', 'Cloud');
+ return;
+ }
+ if (!service) {
+ errorCall.call(
+ null,
+ 'service ' + serviceName + ' is not available',
+ 'API'
+ );
+ return;
+ }
+ if (args && args.length > 0) {
+ postDict = {};
+ service.parameters.forEach(function (parm, idx) {
+ postDict[parm] = args[idx];
+ });
+ }
+ try {
+ stickyUrl = this.url +
+ '/' +
+ service.url +
+ '&SESSIONGLUE=' +
+ this.route +
+ '&_Limo=' +
+ this.limo;
+ request.open(service.method, stickyUrl, true);
+ request.withCredentials = true;
+ request.setRequestHeader(
+ "Content-Type",
+ "application/x-www-form-urlencoded"
+ );
+ request.setRequestHeader('MioCracker', this.session);
+ request.setRequestHeader('SESSIONGLUE', this.route);
+ request.onreadystatechange = function () {
+ if (request.readyState === 4) {
+ var responseList = [];
+ if (request.responseText &&
+ request.responseText.indexOf('ERROR') === 0) {
+ errorCall.call(
+ this,
+ request.responseText,
+ localize('Service:') + ' ' + localize(serviceName)
+ );
+ return;
+ }
+ if (serviceName === 'login') {
+ myself.api = myself.parseAPI(request.responseText);
+ }
+ responseList = myself.parseResponse(
+ request.responseText
+ );
+ callBack.call(null, responseList, service.url);
+ }
+ };
+ request.send(this.encodeDict(postDict));
+ } catch (err) {
+ errorCall.call(this, err.toString(), service.url);
+ }
+};
+
+// Cloud: payload transformation
+
+Cloud.prototype.parseAPI = function (src) {
+ var api = {},
+ services;
+ services = src.split(" ");
+ services.forEach(function (service) {
+ var entries = service.split("&"),
+ serviceDescription = {},
+ parms;
+ entries.forEach(function (entry) {
+ var pair = entry.split("="),
+ key = decodeURIComponent(pair[0]).toLowerCase(),
+ val = decodeURIComponent(pair[1]);
+ if (key === "service") {
+ api[val] = serviceDescription;
+ } else if (key === "parameters") {
+ parms = val.split(",");
+ if (!(parms.length === 1 && !parms[0])) {
+ serviceDescription.parameters = parms;
+ }
+ } else {
+ serviceDescription[key] = val;
+ }
+ });
+ });
+ return api;
+};
+
+Cloud.prototype.parseResponse = function (src) {
+ var ans = [],
+ lines;
+ if (!src) {return ans; }
+ lines = src.split(" ");
+ lines.forEach(function (service) {
+ var entries = service.split("&"),
+ dict = {};
+ entries.forEach(function (entry) {
+ var pair = entry.split("="),
+ key = decodeURIComponent(pair[0]),
+ val = decodeURIComponent(pair[1]);
+ dict[key] = val;
+ });
+ ans.push(dict);
+ });
+ return ans;
+};
+
+Cloud.prototype.parseDict = function (src) {
+ var dict = {};
+ if (!src) {return dict; }
+ src.split("&").forEach(function (entry) {
+ var pair = entry.split("="),
+ key = decodeURIComponent(pair[0]),
+ val = decodeURIComponent(pair[1]);
+ dict[key] = val;
+ });
+ return dict;
+};
+
+Cloud.prototype.encodeDict = function (dict) {
+ var str = '',
+ pair,
+ key;
+ if (!dict) {return null; }
+ for (key in dict) {
+ if (dict.hasOwnProperty(key)) {
+ pair = encodeURIComponent(key)
+ + '='
+ + encodeURIComponent(dict[key]);
+ if (str.length > 0) {
+ str += '&';
+ }
+ str += pair;
+ }
+ }
+ return str;
+};
+
+// Cloud: user messages (to be overridden)
+
+Cloud.prototype.message = function (string) {
+ alert(string);
+};
diff --git a/favicon.ico b/favicon.ico
new file mode 100644
index 00000000..b2b1e60e
Binary files /dev/null and b/favicon.ico differ
diff --git a/gui.js b/gui.js
index 04481cc7..b30b6deb 100644
--- a/gui.js
+++ b/gui.js
@@ -9,7 +9,7 @@
written by Jens Mönig
jens@moenig.org
- Copyright (C) 2014 by Jens Mönig
+ Copyright (C) 2015 by Jens Mönig
This file is part of Snap!.
@@ -69,7 +69,7 @@ SpeechBubbleMorph*/
// Global stuff ////////////////////////////////////////////////////////
-modules.gui = '2014-October-06';
+modules.gui = '2015-February-06';
// Declarations
@@ -119,7 +119,7 @@ IDE_Morph.prototype.setDefaultDesign = function () {
];
IDE_Morph.prototype.rotationStyleColors = IDE_Morph.prototype.tabColors;
IDE_Morph.prototype.appModeColor = new Color();
- IDE_Morph.prototype.scriptsPaneTexture = 'scriptsPaneTexture.gif';
+ IDE_Morph.prototype.scriptsPaneTexture = this.scriptsTexture();
IDE_Morph.prototype.padding = 5;
SpriteIconMorph.prototype.labelColor
@@ -172,6 +172,22 @@ IDE_Morph.prototype.setFlatDesign = function () {
= IDE_Morph.prototype.buttonLabelColor;
};
+IDE_Morph.prototype.scriptsTexture = function () {
+ var pic = newCanvas(new Point(100, 100)), // bigger scales faster
+ ctx = pic.getContext('2d'),
+ i;
+ for (i = 0; i < 100; i += 4) {
+ ctx.fillStyle = this.frameColor.toString();
+ ctx.fillRect(i, 0, 1, 100);
+ ctx.fillStyle = this.groupColor.lighter(6).toString();
+ ctx.fillRect(i + 1, 0, 1, 100);
+ ctx.fillRect(i + 3, 0, 1, 100);
+ ctx.fillStyle = this.groupColor.toString();
+ ctx.fillRect(i + 2, 0, 1, 100);
+ }
+ return pic;
+};
+
IDE_Morph.prototype.setDefaultDesign();
// IDE_Morph instance creation:
@@ -233,10 +249,6 @@ IDE_Morph.prototype.init = function (isAutoFill) {
IDE_Morph.prototype.openIn = function (world) {
var hash, usr, myself = this, urlLanguage = null;
- this.buildPanes();
- world.add(this);
- world.userMenu = this.userMenu;
-
// get persistent user data, if any
if (localStorage) {
usr = localStorage['-snap-user'];
@@ -245,10 +257,17 @@ IDE_Morph.prototype.openIn = function (world) {
if (usr) {
SnapCloud.username = usr.username || null;
SnapCloud.password = usr.password || null;
+ if (SnapCloud.username) {
+ this.source = 'cloud';
+ }
}
}
}
+ this.buildPanes();
+ world.add(this);
+ world.userMenu = this.userMenu;
+
// override SnapCloud's user message with Morphic
SnapCloud.message = function (string) {
var m = new MenuMorph(null, string),
@@ -297,7 +316,6 @@ IDE_Morph.prototype.openIn = function (world) {
this.inform('Snap!', motd);
}
*/
-
function interpretUrlAnchors() {
var dict;
if (location.hash.substr(0, 6) === '#open:') {
@@ -350,6 +368,7 @@ IDE_Morph.prototype.openIn = function (world) {
function () {
msg = myself.showMessage('Opening project...');
},
+ function () {nop(); }, // yield (bug in Chrome)
function () {
if (projectData.indexOf('.
+
+
+
+ Note to Translators:
+ --------------------
+ At this stage of development, Snap! can be translated to any LTR language
+ maintaining the current order of inputs (formal parameters in blocks).
+
+ Translating Snap! is easy:
+
+
+ 1. Download
+
+ Download the sources and extract them into a local folder on your
+ computer:
+
+
+
+ Use the German translation file (named 'lang-de.js') as template for your
+ own translations. Start with editing the original file, because that way
+ you will be able to immediately check the results in your browsers while
+ you're working on your translation (keep the local copy of snap.html open
+ in your web browser, and refresh it as you progress with your
+ translation).
+
+
+ 2. Edit
+
+ Edit the translation file with a regular text editor, or with your
+ favorite JavaScript editor.
+
+ In the first non-commented line (the one right below this
+ note) replace "de" with the two-letter ISO 639-1 code for your language,
+ e.g.
+
+ fr - French => SnapTranslator.dict.fr = {
+ it - Italian => SnapTranslator.dict.it = {
+ pl - Polish => SnapTranslator.dict.pl = {
+ pt - Portuguese => SnapTranslator.dict.pt = {
+ es - Spanish => SnapTranslator.dict.es = {
+ el - Greek => => SnapTranslator.dict.el = {
+
+ etc. (see )
+
+
+ 3. Translate
+
+ Then work through the dictionary, replacing the German strings against
+ your translations. The dictionary is a straight-forward JavaScript ad-hoc
+ object, for review purposes it should be formatted as follows:
+
+ {
+ 'English string':
+ 'Translation string',
+ 'last key':
+ } 'last value'
+
+ and you only edit the indented value strings. Note that each key-value
+ pair needs to be delimited by a comma, but that there shouldn't be a comma
+ after the last pair (again, just overwrite the template file and you'll be
+ fine).
+
+ If something doesn't work, or if you're unsure about the formalities you
+ should check your file with
+
+
+
+ This will inform you about any missed commas etc.
+
+
+ 4. Accented characters
+
+ Depending on which text editor and which file encoding you use you can
+ directly enter special characters (e.g. Umlaut, accented characters) on
+ your keyboard. However, I've noticed that some browsers may not display
+ special characters correctly, even if other browsers do. So it's best to
+ check your results in several browsers. If you want to be on the safe
+ side, it's even better to escape these characters using Unicode.
+
+ see:
+
+
+ 5. Block specs:
+
+ At this time your translation of block specs will only work
+ correctly, if the order of formal parameters and their types
+ are unchanged. Placeholders for inputs (formal parameters) are
+ indicated by a preceding % prefix and followed by a type
+ abbreviation.
+
+ For example:
+
+ 'say %s for %n secs'
+
+ can currently not be changed into
+
+ 'say %n secs long %s'
+
+ and still work as intended.
+
+ Similarly
+
+ 'point towards %dst'
+
+ cannot be changed into
+
+ 'point towards %cst'
+
+ without breaking its functionality.
+
+
+ 6. Submit
+
+ When you're done, rename the edited file by replacing the "de" part of the
+ filename with the two-letter ISO 639-1 code for your language, e.g.
+
+ fr - French => lang-fr.js
+ it - Italian => lang-it.js
+ pl - Polish => lang-pl.js
+ pt - Portuguese => lang-pt.js
+ es - Spanish => lang-es.js
+ el - Greek => => lang-el.js
+
+ and send it to me for inclusion in the official Snap! distribution.
+ Once your translation has been included, Your name will the shown in the
+ "Translators" tab in the "About Snap!" dialog box, and you will be able to
+ directly launch a translated version of Snap! in your browser by appending
+
+ lang:xx
+
+ to the URL, xx representing your translations two-letter code.
+
+
+ 7. Known issues
+
+ In some browsers accents or ornaments located in typographic ascenders
+ above the cap height are currently (partially) cut-off.
+
+ Enjoy!
+ -Jens
+*/
+
+/*global SnapTranslator*/
+
+SnapTranslator.dict.kn = {
+
+
+ // translations meta information
+ 'language_name':
+ '\u0C95\u0CA8\u0CCD\u0CA8\u0CA1', // the name as it should appear in the language menu
+ 'language_translator':
+ 'Vinayakumar R', // your name for the Translators tab
+ 'translator_e-mail':
+ 'vnkmr7620@gmail.com', // optional
+ 'last_changed':
+ '2014-25-11', // this, too, will appear in the Translators tab
+
+ // GUI
+ // control bar:
+ 'untitled':
+ 'Unbenannt',
+ 'development mode':
+ 'Hackermodus',
+
+ // categories:
+ 'Motion':
+ '\u0C9A\u0CB2\u0CA8\u0CC6',
+ 'Looks':
+ '\u0C95\u0CBE\u0CA3\u0CC1\u0CB5\u0CC1\u0CA6\u0CC1',
+ 'Sound':
+ '\u0CB6\u0CAC\u0CCD\u0CA6',
+ 'Pen':
+ '\u0CB2\u0CC7\u0C96\u0CA8\u0CBF',
+ 'Control':
+ '\u0CB9\u0CBF\u0CA1\u0CBF\u0CA4',
+ 'Sensing':
+ '\u0C97\u0CCD\u0CB0\u0CB9\u0CBF\u0CB8\u0CC1\u0CB5\u0CC1\u0CA6\u0CC1',
+ 'Operators':
+ '\u0C9A\u0CBF\u0CB9\u0CCD\u0CA8\u0CCD\u0CB9\u0CC6\u0C97\u0CB3\u0CC1',
+ 'Variables':
+ '\u0CAA\u0CB0\u0CBF\u0CB5\u0CB0\u0CCD\u0CA4\u0CA8\u0CC6\u0C97\u0CB3\u0CC1',
+ 'Lists':
+ '\u0CAA\u0C9F\u0CCD\u0C9F\u0CBF\u0C97\u0CB3\u0CC1',
+ 'Other':
+ '\u0C87\u0CA4\u0CB0\u0CC6',
+
+ // editor:
+ 'draggable':
+ '\u0C8E\u0CB3\u0CC6\u0CAF\u0CAC\u0CB9\u0CC1\u0CA6\u0CBE\u0CA6',
+
+ // tabs:
+ 'Scripts':
+ '\u0C86\u0C9C\u0CCD\u0C9E\u0CCD\u0CB9\u0CC6\u0C97\u0CB3\u0CC1',
+ 'Costumes':
+ '\u0C89\u0CA1\u0CC1\u0CAA\u0CC1\u0C97\u0CB3\u0CC1',
+ 'Sounds':
+ '\u0CB6\u0CAC\u0CCD\u0CA6\u0C97\u0CB3\u0CC1',
+
+ // names:
+ 'Sprite':
+ '\u0CAF\u0C95\u0CCD\u0CB7\u0CBF\u0CA3\u0CBF',
+ 'Stage':
+ '\u0CB5\u0CC7\u0CA6\u0CBF\u0C95\u0CC6',
+
+ // rotation styles:
+ 'don\'t rotate':
+ '\u0CA4\u0CBF\u0CB0\u0CC1\u0C97\u0CAC\u0CC7\u0CA1',
+ 'can rotate':
+ '\u0CA4\u0CBF\u0CB0\u0CC1\u0C97\u0CBF\u0CB8\u0CAC\u0CB9\u0CC1\u0CA6\u0CC1',
+ 'only face left/right':
+ '\u0CAE\u0CC1\u0C96\u0020\u0CAC\u0CB2\u0C97\u0CA1\u0CC6\u002F\u0C8E\u0CA1\u0C97\u0CA1\u0CC6',
+
+ // new sprite button:
+ 'add a new sprite':
+ '\u0CB9\u0CCA\u0CB8\u0020\u0CAF\u0C95\u0CCD\u0CB7\u0CBF\u0CA3\u0CBF\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C95\u0CC2\u0CA1\u0CBF\u0CB8\u0CC1',
+
+ // tab help
+ 'costumes tab help':
+ '\u0C87\u0CA8\u0CCD\u0CA8\u0CBF\u0CA4\u0CB0\u0020\u0C9C\u0CBE\u0CB2\u0CA4\u0CBE\u0CA3\u0020\u0C85\u0CA5\u0CB5\u0CBE\u0020\u0CA8\u0CBF\u0CAE\u0CCD\u0CAE\u0020\u0C97\u0CA3\u0C95\u0CAF\u0C82\u0CA4\u0CCD\u0CB0\u0CA6\u0CBF\u0C82\u0CA6\u0020\u0C9A\u0CBF\u0CA4\u0CCD\u0CB0\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C87\u0CB2\u0CCD\u0CB2\u0CBF\u0C97\u0CC6\u0020\u0C8E\u0CB3\u0CC6\u0CAF\u0CC1\u0CB5\u0CC1\u0CA6\u0CB0\u0CBF\u0C82\u0CA6\u0020\u0C86\u0CAE\u0CA6\u0CC1\u0020\u0CAE\u0CBE\u0CA1\u0CBF\u0C95\u0CCA\u0CB3\u0CCD\u0CB3\u0CAC\u0CB9\u0CC1\u0CA6\u0CC1\u0020'
+ ,
+ 'import a sound from your computer\nby dragging it into here':
+ '\u0CB6\u0CAC\u0CCD\u0CA6\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CA8\u0CBF\u0CAE\u0CCD\u0CAE\u0020\u0C97\u0CA3\u0C95\u0CAF\u0C82\u0CA4\u0CCD\u0CB0\u0CA6\u0CBF\u0C82\u0CA6\u0020\u0C87\u0CB2\u0CCD\u0CB2\u0CBF\u0C97\u0CC6\u0020\u0C8E\u0CB3\u0CC6\u0CAF\u0CC1\u0CB5\u0CC1\u0CA6\u0CB0\u0CBF\u0C82\u0CA6\u0020\u0C86\u0CAE\u0CA6\u0CC1\u0020\u0CAE\u0CBE\u0CA1\u0CBF\u0C95\u0CCA\u0CB3\u0CCD\u0CB3\u0CAC\u0CB9\u0CC1\u0CA6\u0CC1',
+
+ // primitive blocks:
+
+ /*
+ Attention Translators:
+ ----------------------
+ At this time your translation of block specs will only work
+ correctly, if the order of formal parameters and their types
+ are unchanged. Placeholders for inputs (formal parameters) are
+ indicated by a preceding % prefix and followed by a type
+ abbreviation.
+
+ For example:
+
+ 'say %s for %n secs'
+
+ can currently not be changed into
+
+ 'say %n secs long %s'
+
+ and still work as intended.
+
+ Similarly
+
+ 'point towards %dst'
+
+ cannot be changed into
+
+ 'point towards %cst'
+
+ without breaking its functionality.
+ */
+
+ // motion:
+ 'Stage selected:\nno motion primitives':
+ 'B\u00fchne ausgew\u00e4hlt:\nkeine Standardbewegungsbl\u00f6cke\n'
+ + 'vorhanden',
+
+ 'move %n steps':
+ '\u0C9A\u0CB2\u0CBF\u0CB8\u0CC1 %n \u0CB9\u0CC6\u0C9C\u0CCD\u0C9C\u0CC6\u0C97\u0CB3\u0CC1',
+ 'turn %clockwise %n degrees':
+ '\u0CA4\u0CBF\u0CB0\u0CC1\u0C97\u0CC1 %clockwise %n \u0C95\u0CCB\u0CA8\u0CA6\u0CB2\u0CCD\u0CB2\u0CBF',
+ 'turn %counterclockwise %n degrees':
+ '\u0CA4\u0CBF\u0CB0\u0CC1\u0C97\u0CC1 %counterclockwise %n \u0C95\u0CCB\u0CA8\u0CA6\u0CB2\u0CCD\u0CB2\u0CBF',
+ 'point in direction %dir':
+ '\u0CAC\u0CBF\u0C82\u0CA6\u0CC1\u0CB5\u0CBF\u0CA8\u0020\u0CA6\u0CBF\u0C95\u0CCD\u0C95\u0CBF\u0CA8\u0020\u0C95\u0CA1\u0CC7 %dir',
+ 'point towards %dst':
+ '\u0CA6\u0CBF\u0C95\u0CCD\u0C95\u0CBF\u0CA8\u0020\u0C95\u0CA1\u0CC7\u0C97\u0CC6 %dst',
+ 'go to x: %n y: %n':
+ '\u0CB9\u0CCB\u0C97\u0CC1 x: %n y: %n',
+ 'go to %dst':
+ '\u0CB9\u0CCB\u0C97\u0CC1 %dst',
+ 'glide %n secs to x: %n y: %n':
+ '\u0CB8\u0CB0\u0CBF %n \u0CB8\u0CC6\u0C95\u0CC6\u0C82\u0CA1\u0CBF\u0CA8\u0CB2\u0CCD\u0CB2\u0CBF,\u0CAC\u0CBF\u0C82\u0CA6\u0CC1\u0CB5\u0CBF\u0C97\u0CC6 x: %n y: %n',
+ 'change x by %n':
+ '\u0CAC\u0CA6\u0CB2\u0CBE\u0CB9\u0CBF\u0CB8\u0CC1 x \u0C85\u0CA8\u0CCD\u0CA8\u0CC1 %n',
+ 'set x to %n':
+ '\u0CB9\u0CCA\u0C82\u0CA6\u0CBF\u0CB8\u0CC1 x \u0C85\u0CA8\u0CCD\u0CA8\u0CC1 %n',
+ 'change y by %n':
+ '\u0CAC\u0CA6\u0CB2\u0CBE\u0CB9\u0CBF\u0CB8\u0CC1 y \u0C85\u0CA8\u0CCD\u0CA8\u0CC1 %n',
+ 'set y to %n':
+ '\u0CB9\u0CCA\u0C82\u0CA6\u0CBF\u0CB8\u0CC1 y \u0C85\u0CA8\u0CCD\u0CA8\u0CC1 %n',
+ 'if on edge, bounce':
+ '\u0C92\u0C82\u0CA6\u0CC1\u0020\u0CB5\u0CC7\u0CB3\u0CC6\u0020\u0C95\u0CCA\u0CA8\u0CC6\u0C97\u0CC6\u0020\u0CB9\u0CCB\u0CA6\u0CBE\u0C97\u0020\u0C9C\u0CBF\u0C97\u0CBF',
+ 'x position':
+ 'x-\u0CB8\u0CCD\u0CA5\u0CBE\u0CA8',
+ 'y position':
+ 'y-\u0CB8\u0CCD\u0CA5\u0CBE\u0CA8',
+ 'direction':
+ '\u0CA6\u0CBF\u0C95\u0CCD\u0C95\u0CC1',
+
+ // looks:
+ 'switch to costume %cst':
+ '\u0C89\u0CA1\u0CC1\u0CAA\u0CA8\u0CCD\u0CA8\u0CC1 %cst \u0C97\u0CC6\u0020\u0CAC\u0CA6\u0CB2\u0CBE\u0CB9\u0CBF\u0CB8\u0CC1',
+ 'next costume':
+ '\u0CAE\u0CC1\u0C82\u0CA6\u0CBF\u0CA8\u0020\u0C89\u0CA1\u0CC1\u0CAA\u0CC1',
+ 'costume #':
+ '\u0C89\u0CA1\u0CC1\u0CAA\u0CC1',
+ 'say %s for %n secs':
+ '\u0CB9\u0CC7\u0CB3\u0CC1 %s \u0C85\u0C82\u0CA4 %n \u0CB8\u0CC6\u0C95\u0CC6\u0C82\u0CA1\u0CBF\u0CA8\u0CB2\u0CCD\u0CB2\u0CBF',
+ 'say %s':
+ '\u0CB9\u0CC7\u0CB3\u0CC1 %s',
+ 'think %s for %n secs':
+ '\u0CAF\u0CCB\u0C9A\u0CBF\u0CB8\u0CC1 %s \u0C85\u0C82\u0CA4 %n \u0CB8\u0CC6\u0C95\u0CC6\u0C82\u0CA1\u0CC1\u0C97\u0CB3\u0CB5\u0CB0\u0C97\u0CC6',
+ 'think %s':
+ '\u0CAF\u0CCB\u0C9A\u0CBF\u0CB8\u0CC1 %s',
+ 'Hello!':
+ '\u0CA8\u0CAE\u0CB8\u0CCD\u0C95\u0CBE\u0CB0!',
+ 'Hmm...':
+ '\u0C85\u0CB9\u0C83...',
+ 'change %eff effect by %n':
+ '\u0CAA\u0CB0\u0CBF\u0CA3\u0CBE\u0CAE\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1 %eff \u0C97\u0CC6\u0020\u0CAC\u0CA6\u0CB2\u0CBE\u0CB9\u0CBF\u0CB8\u0CC1 %n',
+ 'set %eff effect to %n':
+ '\u0CAA\u0CB0\u0CBF\u0CA3\u0CBE\u0CAE\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1 %eff \u0C97\u0CC6\u0020\u0CB9\u0CCA\u0C82\u0CA6\u0CBF\u0CB8\u0CC1 %n',
+ 'clear graphic effects':
+ '\u0C8E\u0CB2\u0CCD\u0CB2\u0CBE\u0020\u0CAA\u0CB0\u0CBF\u0CA3\u0CBE\u0CAE\u0C97\u0CB3\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C85\u0CB3\u0CBF\u0CB8\u0CC1',
+ 'change size by %n':
+ '\u0CB0\u0CB7\u0CCD\u0C9F\u0CC1\u0020\u0C97\u0CBE\u0CA4\u0CCD\u0CB0\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CAC\u0CA6\u0CB2\u0CBE\u0CB9\u0CBF\u0CB8\u0CC1 %n',
+ 'set size to %n %':
+ '\u0CB0\u0CB7\u0CCD\u0C9F\u0CC1\u0020\u0C97\u0CBE\u0CA4\u0CCD\u0CB0\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB9\u0CCA\u0C82\u0CA6\u0CBF\u0CB8\u0CC1 %n %',
+ 'size':
+ '\u0C97\u0CBE\u0CA4\u0CCD\u0CB0',
+ 'show':
+ '\u0CA4\u0CCB\u0CB0\u0CBF\u0CB8\u0CC1',
+ 'hide':
+ '\u0CAC\u0C9A\u0CCD\u0C9A\u0CBF\u0CA1\u0CC1',
+ 'go to front':
+ '\u0CAE\u0CC1\u0C82\u0CA6\u0C95\u0CCD\u0C95\u0CC6\u0020\u0CB9\u0CCB\u0C97\u0CC1',
+ 'go back %n layers':
+ '\u0CAA\u0CA6\u0CB0\u0C97\u0CB3\u0CC1 %n \u0CB0\u0CB7\u0CCD\u0C9F\u0CC1\u0020\u0CB9\u0CBF\u0C82\u0CA6\u0C95\u0CCD\u0C95\u0CC6\u0020\u0CB9\u0CCB\u0C97\u0CC1',
+
+ 'development mode \ndebugging primitives:':
+ '\u0CAC\u0CC6\u0CB3\u0CB5\u0CA3\u0CBF\u0C97\u0CC6\u0CAF\u0020\u0C95\u0CCD\u0CB0\u0CAE \n\u0CA6\u0CCB\u0CB7\u0020\u0CA8\u0CBF\u0CA6\u0CBE\u0CA8\u0020\u0CAE\u0CC1\u0CB2\u0CBE\u0C97\u0CB3\u0CC1',
+ 'console log %mult%s':
+ '\u0CAE\u0CC1\u0C96\u0CCD\u0CAF\u0020\u0C9F\u0CB0\u0CCD\u0CAE\u0CBF\u0CA8\u0CB2\u0CCD\u0020\u0C95\u0CA1\u0CA4: %mult%s',
+ 'alert %mult%s':
+ '\u0C8E\u0C9A\u0CCD\u0C9A\u0CB0\u0CBF\u0C95\u0CC6 %mult%s',
+
+ // sound:
+ 'play sound %snd':
+ '\u0CB6\u0CAC\u0CCD\u0CA6\u0020\u0C95\u0CC7\u0CB3\u0CBF\u0CB8\u0CC1 %snd',
+ 'play sound %snd until done':
+ '\u0C86\u0C97\u0CC1\u0CB5\u0CB5\u0CB0\u0C97\u0CC6\u0020 %snd \u0CB6\u0CAC\u0CCD\u0CA6\u0020\u0C95\u0CC7\u0CB3\u0CBF\u0CB8\u0CC1',
+ 'stop all sounds':
+ '\u0C8E\u0CB2\u0CCD\u0CB2\u0CBE\u0020\u0CB6\u0CAC\u0CCD\u0CA6\u0C97\u0CB3\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CA8\u0CBF\u0CB2\u0CCD\u0CB2\u0CBF\u0CB8\u0CC1',
+ 'rest for %n beats':
+ '\u0CB2\u0CAF\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1 %n \u0CB0\u0CB7\u0CCD\u0C9F\u0CC1\u0020\u0CA8\u0CBF\u0CB2\u0CCD\u0CB2\u0CBF\u0CB8\u0CBF',
+ 'play note %n for %n beats':
+ '\u0CB8\u0C82\u0C97\u0CC0\u0CA4\u0CB8\u0CCD\u0CB5\u0CB0 %n \u0C85\u0CA8\u0CCD\u0CA8\u0CC1 %n \u0CB2\u0CAF\u0CA6\u0CB2\u0CCD\u0CB2\u0CBF\u0020\u0C95\u0CC7\u0CB3\u0CBF\u0CB8\u0CBF',
+ 'change tempo by %n':
+ '\u0CB0\u0CB7\u0CCD\u0C9F\u0CC1\u0020\u0CA4\u0CBE\u0CB3\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CAC\u0CA6\u0CB2\u0CBE\u0CB9\u0CBF\u0CB8\u0CC1 %n',
+ 'set tempo to %n bpm':
+ '\u0CA4\u0CBE\u0CB3\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1 %n \u0C97\u0CC6\u0020\u0CB9\u0CCA\u0C82\u0CA6\u0CBF\u0CB8\u0CC1',
+ 'tempo':
+ '\u0CA4\u0CBE\u0CB3',
+
+ // pen:
+ 'clear':
+ '\u0C85\u0CB3\u0CBF\u0CB8\u0CC1',
+ 'pen down':
+ '\u0CB2\u0CC7\u0C96\u0CA8\u0CBF\u0CAF\u0CC1\u0C95\u0CCD\u0CA4',
+ 'pen up':
+ '\u0CB2\u0CC7\u0C96\u0CA8\u0CBF\u0CAE\u0CC1\u0C95\u0CCD\u0CA4',
+ 'set pen color to %clr':
+ '\u0C97\u0CC6\u0020\u0CB2\u0CC7\u0C96\u0CA8\u0CBF\u0020\u0CAC\u0CA3\u0CCD\u0CA3\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB9\u0CCA\u0C82\u0CA6\u0CBF\u0CB8\u0CC1 %clr',
+ 'change pen color by %n':
+ '\u0C97\u0CC6\u0020\u0CB2\u0CC7\u0C96\u0CA8\u0CBF\u0020\u0CAC\u0CA3\u0CCD\u0CA3\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CAC\u0CA6\u0CB2\u0CBE\u0CB9\u0CBF\u0CB8\u0CC1 %n',
+ 'set pen color to %n':
+ '\u0C97\u0CC6\u0020\u0CB2\u0CC7\u0C96\u0CA8\u0CBF\u0020\u0CAC\u0CA3\u0CCD\u0CA3\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB9\u0CCA\u0C82\u0CA6\u0CBF\u0CB8\u0CC1 %n',
+ 'change pen shade by %n':
+ '\u0CB0\u0CB7\u0CCD\u0C9F\u0CC1\u0020\u0CB2\u0CC7\u0C96\u0CA8\u0CBF\u0020\u0CA8\u0CC6\u0CB0\u0CB3\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CAC\u0CA6\u0CB2\u0CBE\u0CB9\u0CBF\u0CB8\u0CC1 %n',
+ 'set pen shade to %n':
+ '\u0CB0\u0CB7\u0CCD\u0C9F\u0CC1\u0020\u0CB2\u0CC7\u0C96\u0CA8\u0CBF\u0020\u0CA8\u0CC6\u0CB0\u0CB3\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB9\u0CCA\u0C82\u0CA6\u0CBF\u0CB8\u0CC1 %n',
+ 'change pen size by %n':
+ '\u0CB0\u0CB7\u0CCD\u0C9F\u0CC1\u0020\u0CB2\u0CC7\u0C96\u0CA8\u0CBF\u0020\u0C97\u0CBE\u0CA4\u0CCD\u0CB0\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CAC\u0CA6\u0CB2\u0CBE\u0CB9\u0CBF\u0CB8\u0CC1 %n',
+ 'set pen size to %n':
+ '\u0CB0\u0CB7\u0CCD\u0C9F\u0CC1\u0020\u0CB2\u0CC7\u0C96\u0CA8\u0CBF\u0020\u0C97\u0CBE\u0CA4\u0CCD\u0CB0\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB9\u0CCA\u0C82\u0CA6\u0CBF\u0CB8\u0CC1 %n',
+ 'stamp':
+ '\u0CAE\u0CC1\u0CA6\u0CCD\u0CB0\u0CBF\u0CB8\u0CC1',
+
+ // control:
+ 'when %greenflag clicked':
+ '\u0CAF\u0CBE\u0CB5\u0CBE\u0C97\u0CB2\u0CBE\u0CA6\u0CB0\u0CC2 %greenflag \u0C92\u0CA4\u0CCD\u0CA4\u0CBF\u0CA6\u0CBE\u0C97',
+ 'when %keyHat key pressed':
+ '\u0CAF\u0CBE\u0CB5\u0CBE\u0C97\u0CB2\u0CBE\u0CA6\u0CB0\u0CC2 %keyHat \u0C95\u0CC0\u0020\u0C92\u0CA4\u0CCD\u0CA4\u0CBF\u0CA6\u0CBE\u0C97',
+ 'when I am clicked':
+ '\u0CAF\u0CBE\u0CB5\u0CBE\u0C97\u0CB2\u0CBE\u0CA6\u0CB0\u0CC2\u0020\u0CA8\u0CBE\u0CA8\u0CC1\u0020\u0C92\u0CA4\u0CCD\u0CA4\u0CBF\u0CA6\u0CBE\u0C97',
+ 'when I receive %msgHat':
+ '\u0CAF\u0CBE\u0CB5\u0CBE\u0C97\u0CB2\u0CBE\u0CA6\u0CB0\u0CC1 %msgHat \u0CB8\u0CCD\u0CB5\u0CC0\u0C95\u0CB0\u0CBF\u0CB8\u0CBF\u0CA6\u0CBE\u0C97',
+ 'broadcast %msg':
+ '\u0CAA\u0CCD\u0CB0\u0CB8\u0CB0\u0CBF\u0CB8\u0CC1 %msg',
+ 'broadcast %msg and wait':
+ '\u0CAA\u0CCD\u0CB0\u0CB8\u0CB0\u0CBF\u0CB8\u0CC1 %msg \u0CAE\u0CA4\u0CCD\u0CA4\u0CC1\u0020\u0C95\u0CBE\u0CAF\u0CAC\u0CC7\u0C95\u0CC1',
+ 'Message name':
+ '\u0CAE\u0CBE\u0CB9\u0CBF\u0CA4\u0CBF\u0CAF\u0020\u0CB9\u0CC6\u0CB8\u0CB0\u0CC1',
+ 'message':
+ '\u0CAE\u0CBE\u0CB9\u0CBF\u0CA4\u0CBF',
+ 'any message':
+ '\u0CAF\u0CBE\u0CB5\u0CC1\u0CA6\u0CBE\u0CA6\u0CB0\u0CC1\u0020\u0CAE\u0CBE\u0CB9\u0CBF\u0CA4\u0CBF',
+ 'wait %n secs':
+ '\u0CA8\u0CBF\u0CA7\u0CBE\u0CA8\u0CBF\u0CB8\u0CC1 %n \u0CB8\u0CC6\u0C95\u0CC6\u0C82\u0CA1\u0CBF\u0CA8\u0CB7\u0CCD\u0C9F\u0CC1',
+ 'wait until %b':
+ '\u0CB5\u0CB0\u0C97\u0CC2\u0020\u0C95\u0CBE\u0CAF\u0CAC\u0CC7\u0C95\u0CC1 %b',
+ 'forever %c':
+ '\u0CAF\u0CBE\u0CB5\u0CBE\u0C97\u0CB2\u0CC1 %c',
+ 'repeat %n %c':
+ '\u0CAE\u0CB0\u0CC1\u0C95\u0CB3\u0CBF\u0CB8\u0CC1 %n mal %c',
+ 'repeat until %b %c':
+ '\u0CB5\u0CB0\u0CC6\u0C97\u0CC2\u0020\u0CAE\u0CB0\u0CC1\u0C95\u0CB3\u0CBF\u0CB8\u0CC1 %b %c',
+ 'if %b %c':
+ '\u0C92\u0C82\u0CA6\u0CC1\u0CB5\u0CC7\u0CB3\u0CC6 %b %c',
+ 'if %b %c else %c':
+ '\u0C92\u0C82\u0CA6\u0CC1\u0CB5\u0CC7\u0CB3\u0CC6 %b %c \u0C87\u0CB2\u0CCD\u0CB2\u0CA6\u0CBF\u0CA6\u0CCD\u0CA6\u0CB0\u0CC6 %c',
+ 'report %s':
+ '\u0CA8\u0CBF\u0CB0\u0CC2\u0CAA\u0CBF\u0CB8\u0CC1 %s',
+ 'stop %stopChoices':
+ '\u0CA8\u0CBF\u0CB2\u0CCD\u0CB2\u0CBF\u0CB8\u0CC1 %stopChoices',
+ 'all':
+ '\u0C8E\u0CB2\u0CCD\u0CB2\u0CBE',
+ 'this script':
+ '\u0C87\u0020\u0C86\u0C9C\u0CCD\u0C9E\u0CCD\u0CB9\u0CC6',
+ 'this block':
+ '\u0C87\u0020\u0CB5\u0CBF\u0CAD\u0CBE\u0C97',
+ 'stop %stopOthersChoices':
+ '\u0CA8\u0CBF\u0CB2\u0CCD\u0CB2\u0CBF\u0CB8\u0CC1 %stopOthersChoices',
+ 'all but this script':
+ '\u0C87\u0020\u0C86\u0C9C\u0CCD\u0C9E\u0CCD\u0CB9\u0CC6\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CAC\u0CBF\u0C9F\u0CCD\u0C9F\u0CC1\u0020\u0CAE\u0CA4\u0CCD\u0CA4\u0CA6\u0CCD\u0CA6\u0CC6\u0CB2\u0CCD\u0CB2',
+ 'other scripts in sprite':
+ '\u0C87\u0020\u0CAF\u0C95\u0CCD\u0CB7\u0CBF\u0CA3\u0CBF\u0CAF\u0CB2\u0CCD\u0CB2\u0CBF\u0020\u0C87\u0CA8\u0CCD\u0CA8\u0CBF\u0CA4\u0CB0\u0020\u0C86\u0C9C\u0CCD\u0C9E\u0CCD\u0CB9\u0CC6\u0C97\u0CB3\u0CC1',
+ 'pause all %pause':
+ '\u0C8E\u0CB2\u0CCD\u0CB2\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CA8\u0CBF\u0CB2\u0CCD\u0CB2\u0CBF\u0CB8\u0CC1 %pause',
+ 'run %cmdRing %inputs':
+ '\u0C93\u0CA1\u0CBF\u0CB8\u0CC1 %cmdRing %inputs',
+ 'launch %cmdRing %inputs':
+ '\u0C89\u0CA1\u0CBE\u0CAF\u0CBF\u0CB8\u0CC1 %cmdRing %inputs',
+ 'call %repRing %inputs':
+ '\u0C95\u0CB0\u0CC6 %repRing %inputs',
+ 'run %cmdRing w/continuation':
+ '\u0C93\u0CA1\u0CBF\u0CB8\u0CC1 %cmdRing \u0C85\u0CA5\u0CB5\u0CBE\u0020\u0CAE\u0CC1\u0C82\u0CA6\u0CC1\u0CB5\u0CB0\u0CBF\u0C95\u0CC6',
+ 'call %cmdRing w/continuation':
+ '\u0C95\u0CB0\u0CC6 %cmdRing \u0C85\u0CA5\u0CB5\u0CBE\u0020\u0CAE\u0CC1\u0C82\u0CA6\u0CC1\u0CB5\u0CB0\u0CBF\u0C95\u0CC6',
+ 'warp %c':
+ '\u0CB8\u0CC1\u0CA4\u0CCD\u0CA4\u0CBF\u0CB9\u0CBE\u0C95\u0CC1 %c',
+ 'when I start as a clone':
+ '\u0CAF\u0CBE\u0CB5\u0CBE\u0C97\u0CB2\u0CBE\u0CA6\u0CB0\u0CC1\u0020\u0CA4\u0CA6\u0CCD\u0CB0\u0CC2\u0CAA\u0CC1\u0020\u0CA4\u0CB0\u0CB9\u0020\u0CAA\u0CCD\u0CB0\u0CBE\u0CB0\u0C82\u0CAD\u0CBF\u0CB8\u0CBF\u0CA6\u0CBE\u0C97',
+ 'create a clone of %cln':
+ '\u0CA8\u0C82\u0CA4\u0CC6\u0020\u0CA4\u0CA6\u0CCD\u0CB0\u0CC2\u0CAA\u0CC1\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB0\u0C9A\u0CBF\u0CB8\u0CBF\u000A %cln',
+ 'myself':
+ '\u0CB8\u0CCD\u0CB5\u0CA4\u0C83\u0020\u0CA8\u0CBE\u0CA8\u0CC1',
+ 'delete this clone':
+ '\u0CA4\u0CA6\u0CCD\u0CB0\u0CC2\u0CAA\u0CC1\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C85\u0CB3\u0CBF\u0CB8\u0CC1',
+
+ // sensing:
+ 'touching %col ?':
+ '\u0CAE\u0CC1\u0C9F\u0CCD\u0C9F\u0CBF\u0CA6\u0CB0\u0CC6 %col ?',
+ 'touching %clr ?':
+ '\u0CAE\u0CC1\u0C9F\u0CCD\u0C9F\u0CBF\u0CA6\u0CBE\u0C97 %clr ?',
+ 'color %clr is touching %clr ?':
+ '\u0CAC\u0CA3\u0CCD\u0CA3 %clr \u0C85\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CAE\u0CC1\u0C9F\u0CCD\u0C9F\u0CBF\u0CA6\u0CBE\u0C97\u0020 %clr ?',
+ 'ask %s and wait':
+ '\u0C95\u0CC7\u0CB3\u0CC1 %s \u0CAE\u0CA4\u0CCD\u0CA4\u0CC1\u0020\u0CA8\u0CBF\u0CA7\u0CBE\u0CA8\u0CBF\u0CB8\u0CC1',
+ 'what\'s your name?':
+ '\u0CA8\u0CBF\u0CAE\u0CCD\u0CAE\u0020\u0CB9\u0CC6\u0CB8\u0CB0\u0CC7\u0CA8\u0CC1\u003F',
+ 'answer':
+ '\u0C89\u0CA4\u0CCD\u0CA4\u0CB0',
+ 'mouse x':
+ '\u0CAE\u0CCC\u0CB8\u0CCD\u0020\u0078',
+ 'mouse y':
+ '\u0CAE\u0CCC\u0CB8\u0CCD\u0020\u0079',
+ 'mouse down?':
+ '\u0CAE\u0CCC\u0CB8\u0CCD\u0020\u0CAE\u0CC1\u0C95\u0CCD\u0CA4?',
+ 'key %key pressed?':
+ '\u0C95\u0CC0 %key \u0C92\u0CA4\u0CCD\u0CA4\u0CBF\u0CA6\u0CBE\u0C97?',
+ 'distance to %dst':
+ '\u0C95\u0CCD\u0C95\u0CC6\u0020\u0CA6\u0CC2\u0CB0 %dst',
+ 'reset timer':
+ '\u0CB8\u0CAE\u0CAF\u0CB8\u0CC2\u0C9A\u0C95\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CAE\u0CB0\u0CC1\u0CB9\u0CCA\u0C82\u0CA6\u0CBF\u0CB8\u0CC1',
+ 'timer':
+ '\u0CB8\u0CAE\u0CAF\u0CB8\u0CC2\u0C9A\u0C95',
+ '%att of %spr':
+ '%att \u0C87\u0CA6\u0CB0\u0CA6\u0CCD\u0CA6\u0CC1 %spr',
+ 'http:// %s':
+ 'http:// %s',
+ 'turbo mode?':
+ '\u0C97\u0CBE\u0CB3\u0CBF\u0020\u0CB5\u0CBF\u0CA7\u0CBE\u0CA8?',
+ 'set turbo mode to %b':
+ '\u0C97\u0CC6\u0020\u0C97\u0CBE\u0CB3\u0CBF\u0020\u0CB5\u0CBF\u0CA7\u0CBE\u0CA8\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB9\u0CCA\u0C82\u0CA6\u0CBF\u0CB8\u0CC1 %b',
+
+ 'filtered for %clr':
+ '\u0C87\u0CA6\u0C95\u0CCD\u0C95\u0CC6\u0020\u0CB6\u0CCB\u0CA7\u0CBF\u0CB8\u0CB2\u0CBE\u0C97\u0CBF\u0CA6\u0CC6 %clr',
+ 'stack size':
+ '\u0CAE\u0CC6\u0CA6\u0CC6\u0CAF\u0020\u0C97\u0CBE\u0CA4\u0CCD\u0CB0',
+ 'frames':
+ '\u0C9A\u0CCC\u0C95\u0C9F\u0CCD\u0C9F\u0CC1\u0C97\u0CB3\u0CC1',
+
+ // operators:
+ '%n mod %n':
+ '%n \u0CB6\u0CC7\u0CB7 %n',
+ 'round %n':
+ '\u0CB8\u0CB0\u0CBF\u0CAE\u0CBE\u0CA1\u0CC1 %n',
+ '%fun of %n':
+ '%fun \u0CB0\u0CA6\u0CCD\u0CA6\u0CC1 %n',
+ 'pick random %n to %n':
+ '\u0C8E\u0CB7\u0CCD\u0C9F\u0CA8\u0CBE\u0CA6\u0CB0\u0CC1\u0020\u0CAF\u0CBE\u0CA6\u0CC3\u0C9A\u0CBF\u0C95\u0CB5\u0CBE\u0C97\u0CBF\u0020\u0C86\u0CAF\u0CCD\u0CA6\u0CC1\u0C95\u0CCB %n \u0CB0\u0CBF\u0C82\u0CA6 %n',
+ '%b and %b':
+ '%b \u0CAE\u0CA4\u0CCD\u0CA4\u0CC1 %b',
+ '%b or %b':
+ '%b \u0C85\u0CA5\u0CB5\u0CBE %b',
+ 'not %b':
+ '\u0C87\u0CB2\u0CCD\u0CB2 %b',
+ '\u0CB8\u0CB0\u0CBF':
+ 'wahr',
+ 'false':
+ '\u0CA4\u0CAA\u0CCD\u0CAA\u0CC1',
+ 'join %words':
+ '\u0C95\u0CC2\u0CA1\u0CBF\u0CB8\u0CC1 %words',
+ 'split %s by %delim':
+ '\u0CAC\u0CC7\u0CB0\u0CC6\u0CAE\u0CBE\u0CA1\u0CC1 %s \u0C85\u0CA8\u0CCD\u0CA8\u0CC1 %delim',
+ 'hello':
+ '\u0CA8\u0CAE\u0CB8\u0CCD\u0C95\u0CBE\u0CB0',
+ 'world':
+ '\u0CAA\u0CCD\u0CB0\u0CAA\u0C82\u0C9A',
+ 'letter %n of %s':
+ '\u0C85\u0C95\u0CCD\u0CB7\u0CB0 %n \u0CB0\u0CB2\u0CCD\u0CB2\u0CBF %s',
+ 'length of %s':
+ '\u0CA8\u0020\u0C89\u0CA6\u0CCD\u0CA6 %s',
+ 'unicode of %s':
+ '\u0CB0\u0020\u0CAF\u0CC2\u0CA8\u0CBF\u0C95\u0CCB\u0CA1\u0CCD %s',
+ 'unicode %n as letter':
+ '\u0CAF\u0CC2\u0CA8\u0CBF\u0C95\u0CCB\u0CA1\u0CCD %n \u0CA8\u0020\u0C85\u0C95\u0CCD\u0CB7\u0CB0\u0020',
+ 'is %s a %typ ?':
+ '\u0C87\u0CA6\u0CC1 %s \u0C87\u0CA6\u0CB0\u0CA6\u0CC7 %typ ?',
+ 'is %s identical to %s ?':
+ '\u0C87\u0CA6\u0CC1 %s \u0C92\u0C82\u0CA6\u0CC7\u0020\u0CB0\u0CC0\u0CA4\u0CBF\u0CAF\u0CBE\u0C97\u0CBF\u0CA6\u0CC6 %s ?',
+
+ 'type of %s':
+ '\u0CAC\u0C97\u0CC6\u0020 %s',
+
+ // variables:
+ 'Make a variable':
+ '\u0CAA\u0CB0\u0CBF\u0CB5\u0CB0\u0CCD\u0CA4\u0CA8\u0CC6\u0020\u0CAE\u0CBE\u0CA1\u0CC1',
+ 'Variable name':
+ '\u0CAA\u0CB0\u0CBF\u0CB5\u0CB0\u0CCD\u0CA4\u0CA8\u0CC6\u0CAF\u0020\u0CB9\u0CC6\u0CB8\u0CB0\u0CC1',
+ 'Script variable name':
+ '\u0C86\u0C9C\u0CCD\u0C9E\u0CCD\u0CB9\u0CC6\u0020\u0CAA\u0CB0\u0CBF\u0CB5\u0CB0\u0CCD\u0CA4\u0CA8\u0CC6\u0CAF\u0020\u0CB9\u0CC6\u0CB8\u0CB0\u0CC1',
+ 'Delete a variable':
+ '\u0CAA\u0CB0\u0CBF\u0CB5\u0CB0\u0CCD\u0CA4\u0CA8\u0CC6\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C85\u0CB3\u0CBF\u0CB8\u0CC1',
+
+ 'set %var to %s':
+ '\u0C97\u0CC6\u0020\u0C95\u0CC2\u0CA1\u0CBF\u0CB8\u0CC1 %var \u0C85\u0CA8\u0CCD\u0CA8\u0CC1 %s',
+ 'change %var by %n':
+ '\u0CAC\u0CA6\u0CB2\u0CBE\u0CB9\u0CBF\u0CB8\u0CC1 %var \u0CB0\u0CB7\u0CCD\u0C9F\u0CC1 %n',
+ 'show variable %var':
+ '\u0CAA\u0CB0\u0CBF\u0CB5\u0CB0\u0CCD\u0CA4\u0CA8\u0CC6\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CA4\u0CCB\u0CB0\u0CBF\u0CB8\u0CC1 %var',
+ 'hide variable %var':
+ '\u0CAA\u0CB0\u0CBF\u0CB5\u0CB0\u0CCD\u0CA4\u0CA8\u0CC6\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CAC\u0C9A\u0CCD\u0C9A\u0CBF\u0CA1\u0CC1 %var',
+ 'script variables %scriptVars':
+ '\u0C86\u0C9C\u0CCD\u0C9E\u0CCD\u0CB9\u0CC6\u0C97\u0CB3\u0020\u0CAA\u0CB0\u0CBF\u0CB5\u0CB0\u0CCD\u0CA4\u0C95\u0C97\u0CB3\u0CC1 %scriptVars',
+
+ // lists:
+ 'list %exp':
+ '\u0CAA\u0C9F\u0CCD\u0C9F\u0CBF %exp',
+ '%s in front of %l':
+ '%s \u0CAE\u0CC1\u0C82\u0CA6\u0CC6 %l',
+ 'item %idx of %l':
+ '\u0C85\u0C82\u0CB6 %idx \u0CB0 %l',
+ 'all but first of %l':
+ '\u0C8E\u0CB2\u0CCD\u0CB2\u0CBE\u0020\u0C86\u0CA6\u0CB0\u0CC6\u0020\u0CAE\u0CCA\u0CA6\u0CB2\u0CA8\u0CC6\u0CAF\u0CA6\u0CC1 %l',
+ 'length of %l':
+ '\u0CA8\u0020\u0C89\u0CA6\u0CCD\u0CA6 %l',
+ '%l contains %s':
+ '%l \u0CB9\u0CCA\u0C82\u0CA6\u0CBF\u0CA6\u0CC6 %s',
+ 'thing':
+ '\u0C85\u0C82\u0CB6',
+ 'add %s to %l':
+ '\u0C95\u0CC2\u0CA1\u0CBF\u0CB8\u0CC1 %s \u0C97\u0CC6 %l',
+ 'delete %ida of %l':
+ '\u0C85\u0CB3\u0CBF\u0CB8\u0CC1 %ida \u0CA8 %l',
+ 'insert %s at %idx of %l':
+ '\u0C95\u0CC2\u0CA1\u0CBF\u0CB8\u0CC1 %s \u0CB0\u0CB2\u0CCD\u0CB2\u0CBF %idx \u0CA8 %l',
+ 'replace item %idx of %l with %s':
+ '\u0C85\u0C82\u0CB6\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CAC\u0CA6\u0CB2\u0CBE\u0CB9\u0CBF\u0CB8\u0CC1 %idx \u0CB0 %l \u0C9C\u0CCA\u0CA4\u0CC6 %s',
+
+ // other
+ 'Make a block':
+ '\u0CB9\u0CCA\u0CB8\u0CA6\u0CBE\u0CA6\u0020\u0CB5\u0CBF\u0CAD\u0CBE\u0C97',
+
+ // menus
+ // snap menu
+ 'About...':
+ '\u0CB8\u0CC1\u0CA4\u0CCD\u0CA4\u0CAE\u0CC1\u0CA4\u0CCD\u0CA4\u0020!...',
+ 'Reference manual':
+ '\u0C89\u0CB2\u0CCD\u0CB2\u0CC7\u0C96\u0020\u0C95\u0CC8\u0CAA\u0CBF\u0CA1\u0CBF',
+ 'Snap! website':
+ 'Snap! \u0C9C\u0CBE\u0CB2\u0CA4\u0CBE\u0CA3',
+ 'Download source':
+ '\u0C86\u0CA7\u0CBE\u0CB0\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C87\u0CB3\u0CBF\u0CB8\u0CC1',
+ 'Switch back to user mode':
+ '\u0CAC\u0CB3\u0C95\u0CC6\u0CA6\u0CBE\u0CB0\u0CB0\u0020\u0CA6\u0CBF\u0CB6\u0CC6\u0C97\u0CC6\u0020\u0CAE\u0CB0\u0CC1\u0C95\u0CB0\u0CB3\u0CBF\u0CB8\u0CBF',
+ 'disable deep-Morphic\ncontext menus\nand show user-friendly ones':
+ 'verl\u00e4sst Morphic',
+ 'Switch to dev mode':
+ '\u0CAC\u0CC6\u0CB3\u0CB5\u0CA3\u0CBF\u0C97\u0CC6\u0CAF\u0020\u0CA6\u0CBF\u0CB6\u0CC6\u0C97\u0CC6\u0020\u0CAE\u0CB0\u0CC1\u0C95\u0CB0\u0CB3\u0CBF\u0CB8\u0CBF',
+ 'enable Morphic\ncontext menus\nand inspectors,\nnot user-friendly!':
+ 'erm\u00f6glicht Morphic Funktionen',
+
+ // project menu
+ 'Project notes...':
+ '\u0CAA\u0CCD\u0CB0\u0CBE\u0CAF\u0CCB\u0C9C\u0CA8\u0CC6\u0020\u0C9F\u0CBF\u0CAA\u0CCD\u0CAA\u0CA3\u0CBF\u0C97\u0CB3\u0CC1...',
+ 'New':
+ '\u0CB9\u0CCA\u0CB8',
+ 'Open...':
+ '\u0CA4\u0CC6\u0CB0\u0CC6...',
+ 'Save':
+ '\u0C89\u0CB3\u0CBF\u0CB8\u0CC1',
+ 'Save As...':
+ '\u0C8E\u0C82\u0CA6\u0CC1\u0020\u0C89\u0CB3\u0CBF\u0CB8\u0CC1...',
+ 'Import...':
+ '\u0C86\u0CAE\u0CA6\u0CC1...',
+ 'file menu import hint':
+ '\u0C95\u0CA1\u0CA4\u0CA6\u0020\u0CAA\u0CB0\u0CBF\u0CB5\u0CBF\u0CA1\u0CBF\u0020\u0CB8\u0CC2\u0C9A\u0CA8\u0CC6\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C86\u0CAE\u0CA6\u0CC1\u0020\u0CAE\u0CBE\u0CA1\u0CBF\u0C95\u0CCA\u0CB3\u0CCD\u0CB3\u0CBF'
+ ,
+ 'Export project as plain text...':
+ '\u0CAA\u0CCD\u0CB0\u0CBE\u0CAF\u0CCB\u0C9C\u0CA8\u0CC6\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB8\u0CCD\u0CAA\u0CB7\u0CCD\u0C9F\u0020\u0C85\u0C95\u0CCD\u0CB7\u0CB0\u0CA6\u0C82\u0CA4\u0CC6\u0020\u0CB0\u0CAA\u0CCD\u0CA4\u0CC1\u0020\u0CAE\u0CBE\u0CA1\u0CBF\u0CB0\u0CBF...',
+ 'Export project...':
+ '\u0CAA\u0CCD\u0CB0\u0CBE\u0CAF\u0CCB\u0C9C\u0CA8\u0CC6\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB0\u0CAA\u0CCD\u0CA4\u0CC1\u0020\u0CAE\u0CBE\u0CA1\u0CBF\u0CB0\u0CBF...',
+ 'show project data as XML\nin a new browser window':
+ '\u0CB9\u0CCA\u0CB8\u0020\u0CB5\u0CC0\u0C95\u0CCD\u0CB7\u0C95\u0020\u0CA4\u0C82\u0CA4\u0CCD\u0CB0\u0CBE\u0C82\u0CB6\u0CA6\u0CB2\u0CCD\u0CB2\u0CBF\u005C\u006E\u0020\u0CAA\u0CCD\u0CB0\u0CBE\u0CAF\u0CCB\u0C9C\u0CA8\u0CC6\u0CAF\u0020\u0CA6\u0CA4\u0CCD\u0CA4\u0CBE\u0C82\u0CB6\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0058\u004D\u004C\u0020\u0CA8\u0C82\u0CA4\u0CC6\u0020\u0CA4\u0CCB\u0CB0\u0CBF\u0CB8\u0CBF\u0CB0\u0CBF\u0020',
+ 'Export blocks...':
+ '\u0CB5\u0CBF\u0CAD\u0CBE\u0C97\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB0\u0CAA\u0CCD\u0CA4\u0CC1\u0020\u0CAE\u0CBE\u0CA1\u0CBF\u0CB0\u0CBF...',
+ 'show global custom block definitions as XML\nin a new browser window':
+ '\u0CB9\u0CCA\u0CB8\u0020\u0CB5\u0CC0\u0C95\u0CCD\u0CB7\u0C95\u0020\u0CA4\u0C82\u0CA4\u0CCD\u0CB0\u0CBE\u0C82\u0CB6\u0CA6\u0CB2\u0CCD\u0CB2\u0CBF\u005C\u006E\u0020\u0C9C\u0CBE\u0C97\u0CA4\u0CBF\u0C95\u0CB5\u0CBE\u0CA6\u0020\u0C97\u0CCD\u0CB0\u0CBE\u0CB9\u0C95\u0CC0\u0C95\u0CC3\u0CA4\u0020\u0CB5\u0CBF\u0CAD\u0CBE\u0C97\u0C97\u0CB3\u0020\u0CB5\u0CCD\u0CAF\u0CBE\u0C96\u0CCD\u0CAF\u0CC6\u0C97\u0CB3\u0CA8\u0CCD\u0CA8\u0CC2\u0020\u0CA4\u0CCB\u0CB0\u0CBF\u0CB8\u0CBF\u0CB0\u0CBF\u0020',
+ 'Import tools':
+ '\u0C89\u0CAA\u0C95\u0CB0\u0CA3\u0C97\u0CB3\u0CA8\u0CCD\u0CA8\u0CC2\u0020\u0C86\u0CAE\u0CA6\u0CC1\u0020\u0CAE\u0CBE\u0CA1\u0CBF\u0C95\u0CCA\u0CB3\u0CCD\u0CB3\u0CBF\u0CB0\u0CBF',
+ 'load the official library of\npowerful blocks':
+ '\u0CB6\u0C95\u0CCD\u0CA4\u0CBF\u0CAF\u0CC1\u0CA4\u0CB5\u0CBE\u0CA6\u0020\u0CB5\u0CBF\u0CAD\u0CBE\u0C97\u0C97\u0CB3\u005C\u006E\u0020\u0C85\u0CA7\u0CBF\u0C95\u0CC3\u0CA4\u0020\u0CAD\u0C82\u0CA1\u0CBE\u0CB0\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CA4\u0CC1\u0C82\u0CAC\u0CBF\u0CB8\u0CBF\u0CB0\u0CBF',
+ 'Libraries...':
+ '\u0CAD\u0C82\u0CA1\u0CBE\u0CB0...',
+ 'Import library':
+ '\u0CAD\u0C82\u0CA1\u0CBE\u0CB0\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C86\u0CAE\u0CA6\u0CC1\u0020\u0CAE\u0CBE\u0CA1\u0CBF\u0C95\u0CCA\u0CB3\u0CCD\u0CB3\u0CBF',
+
+ // cloud menu
+ 'Login...':
+ '\u0CAA\u0CCD\u0CB0\u0CB5\u0CC7\u0CB6\u0CBF\u0CB8\u0CC1...',
+ 'Signup...':
+ '\u0CB0\u0CC1\u0C9C\u0CC1\u0020\u0CAE\u0CBE\u0CA1\u0CC1...',
+
+ // settings menu
+ 'Language...':
+ '\u0CAD\u0CBE\u0CB7\u0CC6...',
+ 'Zoom blocks...':
+ '\u0CB5\u0CBF\u0CAD\u0CBE\u0C97\u0C97\u0CB3\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB9\u0CBF\u0C97\u0CCD\u0C97\u0CBF\u0CB8\u0CC1...',
+ 'Stage size...':
+ '\u0CB5\u0CC7\u0CA6\u0CBF\u0C95\u0CC6\u0CAF\u0020\u0C97\u0CBE\u0CA4\u0CCD\u0CB0...',
+ 'Stage size':
+ '\u0CB5\u0CC7\u0CA6\u0CBF\u0C95\u0CC6\u0CAF\u0020\u0C97\u0CBE\u0CA4\u0CCD\u0CB0',
+ 'Stage width':
+ '\u0CB5\u0CC7\u0CA6\u0CBF\u0C95\u0CC6\u0CAF\u0020\u0C85\u0C97\u0CB2\u0020',
+ 'Stage height':
+ '\u0CB5\u0CC7\u0CA6\u0CBF\u0C95\u0CC6\u0CAF\u0020\u0C89\u0CA6\u0CCD\u0CA6',
+ 'Default':
+ '\u0C97\u0CC8\u0CB0\u0CC1\u0CB9\u0CBE\u0C9C\u0CB0\u0CBF',
+ 'Blurred shadows':
+ '\u0C85\u0CB8\u0CCD\u0CAA\u0CB7\u0CCD\u0C9F\u0020\u0CA8\u0CC6\u0CB0\u0CB3\u0CC1',
+ 'uncheck to use solid drop\nshadows and highlights':
+ '\u0CA6\u0CC3\u0CA2\u0020\u0C87\u0CB3\u0CBF\u0CA4\u0020\u0C89\u0CAA\u0CAF\u0CCB\u0C97\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CA8\u0CBF\u0CB7\u0CCD\u0C95\u0CCD\u0CB0\u0CBF\u0CAF\u0CC6\u0C97\u0CCA\u0CB3\u0CBF\u0CB8\u0CBF\n\u0CA8\u0CC6\u0CB0\u0CB3\u0CC1\u0020\u0CAE\u0CA4\u0CCD\u0CA4\u0CC1\u0020\u0CB8\u0CC1\u0CAA\u0CCD\u0CB0\u0C95\u0CBE\u0CB6\u0C95',
+ 'check to use blurred drop\nshadows and highlights':
+ 'einschalten f\u00fcr harte Schatten\nund Beleuchtung',
+ 'Zebra coloring':
+ '\u0CAA\u0C9F\u0CCD\u0C9F\u0CC6\u0C95\u0CC1\u0CA6\u0CC1\u0CB0\u0CC6\u0020\u0CAC\u0CA3\u0CCD\u0CA3\u0020\u0CB9\u0C9A\u0CCD\u0C9A\u0CC1\u0CB5\u0CBF\u0C95\u0CC6',
+ 'check to enable alternating\ncolors for nested blocks':
+ 'einschalten \u00fcr abwechselnde Farbnuancen\nin Bl\u00f6cken',
+ 'uncheck to disable alternating\ncolors for nested block':
+ 'ausschalten verhindert abwechselnde\nFarbnuancen in Bl\u00f6cken',
+ 'Dynamic input labels':
+ 'Eingabenbeschriftung',
+ 'uncheck to disable dynamic\nlabels for variadic inputs':
+ 'ausschalten verhindert Beschriftung\nvon Mehrfacheingaben',
+ 'check to enable dynamic\nlabels for variadic inputs':
+ 'einschalten um Mehrfacheingabefelder\nautomatisch zu beschriften',
+ 'Prefer empty slot drops':
+ 'Leere Platzhalter bevorzugen',
+ 'settings menu prefer empty slots hint':
+ 'einschalten um leere Platzhalter\nbeim Platzieren von Bl\u00f6cken'
+ + 'zu bevorzugen',
+ 'uncheck to allow dropped\nreporters to kick out others':
+ 'ausschalten um das "Rauskicken"\nvon platzierten Bl\u00f6cken\n'
+ + 'zu erm\u00f6glichen',
+ 'Long form input dialog':
+ 'Ausf\u00fchrlicher Input-Dialog',
+ 'Plain prototype labels':
+ 'Einfache Prototyp-Beschriftung',
+ 'uncheck to always show (+) symbols\nin block prototype labels':
+ 'ausschalten, um (+) Zeichen\nim Blockeditor zu verbergen',
+ 'check to hide (+) symbols\nin block prototype labels':
+ 'einschalten, um (+) Zeichen\nim Blockeditor immer anzuzeigen',
+ 'check to always show slot\ntypes in the input dialog':
+ 'einschalten, um immer die Datentypen\nim Input-Dialog zu sehen',
+ 'uncheck to use the input\ndialog in short form':
+ 'ausschalten f\u00fcr kurzen\nInput-Dialog',
+ 'Virtual keyboard':
+ 'Virtuelle Tastatur',
+ 'uncheck to disable\nvirtual keyboard support\nfor mobile devices':
+ 'ausschalten um die virtuelle\nTastatur auf mobilen Ger\u00e4ten\n'
+ + 'zu sperren',
+ 'check to enable\nvirtual keyboard support\nfor mobile devices':
+ 'einschalten um die virtuelle\nTastatur auf mobilen Ger\u00e4ten\n'
+ + 'zu erm\u00f6glichen',
+ 'Input sliders':
+ 'Eingabeschieber',
+ 'uncheck to disable\ninput sliders for\nentry fields':
+ 'ausschalten um Schieber\nin Eingabefeldern zu verhindern',
+ 'check to enable\ninput sliders for\nentry fields':
+ 'einschalten um Schieber\nin Eingabefeldern zu aktivieren',
+ 'Clicking sound':
+ 'Akustisches Klicken',
+ 'uncheck to turn\nblock clicking\nsound off':
+ 'ausschalten um akustisches\nKlicken zu deaktivieren',
+ 'check to turn\nblock clicking\nsound on':
+ 'einschalten um akustisches\nKlicken zu aktivieren',
+ 'Animations':
+ 'Animationen',
+ 'uncheck to disable\nIDE animations':
+ 'ausschalten um IDE-\nAnimationen zu verhindern',
+ 'Turbo mode':
+ 'Turbomodus',
+ 'check to prioritize\nscript execution':
+ 'einschalten, um Skripte\nzu priorisieren',
+ 'uncheck to run scripts\nat normal speed':
+ 'ausschalten, um Skripte\nnormal auszuf\u00fchren',
+ 'check to enable\nIDE animations':
+ 'einschalten um IDE-\nAnimationen zu erlauben',
+ 'Thread safe scripts':
+ 'Threadsicherheit',
+ 'uncheck to allow\nscript reentrance':
+ 'verhindert, dass unvollendete\nSkripte erneut gestartet werden',
+ 'check to disallow\nscript reentrance':
+ 'verhindert, dass unvollendete\nSkripte erneut gestartet werden',
+ 'Prefer smooth animations':
+ 'Fixe Framerate',
+ 'uncheck for greater speed\nat variable frame rates':
+ 'ausschalten, um Animationen \ndynamischer auszuf\u00fchren',
+ 'check for smooth, predictable\nanimations across computers':
+ 'einschalten, damit Animationen\n\u00fcberall gleich laufen',
+ 'Flat line ends':
+ 'Flache Pinselstriche',
+ 'check for flat ends of lines':
+ 'einschalten f\u00fcr flache\nPinselstrichenden',
+ 'uncheck for round ends of lines':
+ 'auschalten f\u00fcr runde\nPinselstrichenden',
+
+ // inputs
+ 'with inputs':
+ '\u0C8A\u0CA1\u0CBF\u0C95\u0CC6\u0CAF\u0020\u0C9C\u0CCA\u0CA4\u0CC6',
+ 'input names:':
+ '\u0C8A\u0CA1\u0CBF\u0C95\u0CC6\u0CAF\u0020\u0CB9\u0CC6\u0CB8\u0CB0\u0CC1\u0C97\u0CB3\u0CC1:',
+ 'Input Names:':
+ '\u0C8A\u0CA1\u0CBF\u0C95\u0CC6\u0CAF\u0020\u0CB9\u0CC6\u0CB8\u0CB0\u0CC1\u0C97\u0CB3\u0CC1:',
+ 'input list:':
+ '\u0C8A\u0CA1\u0CBF\u0C95\u0CC6\u0CAF\u0020\u0CAA\u0C9F\u0CCD\u0C9F\u0CBF:',
+
+ // context menus:
+ 'help':
+ '\u0CB8\u0CB9\u0CBE\u0CAF',
+
+ // palette:
+ 'hide primitives':
+ 'Basisbl\u00f6cke ausblenden',
+ 'show primitives':
+ '\u0CAE\u0CC2\u0CB2\u0C97\u0CB3\u0CA8\u0CCD\u0CA8\u0CC2\u0020\u0CAC\u0C9A\u0CCD\u0C9A\u0CBF\u0CA1\u0CBF',
+
+ // blocks:
+ 'help...':
+ '\u0CB8\u0CB9\u0CBE\u0CAF...',
+ 'relabel...':
+ '\u0CAE\u0CA4\u0CCD\u0CA4\u0CC6\u0020\u0CAC\u0CB0\u0CC6...',
+ 'duplicate':
+ '\u0CA8\u0C95\u0CB2\u0CC1',
+ 'make a copy\nand pick it up':
+ '\u0CA8\u0C95\u0CB2\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CAE\u0CBE\u0CA1\u0CBF\u0020\u005C\u006E\u0CAE\u0CA4\u0CCD\u0CA4\u0CC1\u0020\u0CA4\u0CC6\u0C97\u0CC6\u0CA6\u0CC1\u0C95\u0CCA\u0CB3\u0CCD\u0CB3\u0CBF',
+ 'only duplicate this block':
+ '\u0C88\u0020\u0CB5\u0CBF\u0CAD\u0CBE\u0C97\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CAE\u0CBE\u0CA4\u0CCD\u0CB0\u0020\u0CA8\u0C95\u0CB2\u0CC1\u0020\u0CAE\u0CBE\u0CA1\u0CBF',
+ 'delete':
+ '\u0C85\u0CB3\u0CBF\u0CB8\u0CC1',
+ 'script pic...':
+ '\u0C86\u0C97\u0CCD\u0CA8\u0CCD\u0CB9\u0CC6\u0CAF\u0020\u0C9A\u0CBF\u0CA4\u0CCD\u0CB0...',
+ 'open a new window\nwith a picture of this script':
+ '\u0C88\u0020\u0C86\u0C9C\u0CCD\u0C9E\u0CCD\u0CB9\u0CC6\u0CAF\u0020\u0C9A\u0CBF\u0CA4\u0CCD\u0CB0\u0CA6\u0020\u0C9C\u0CCA\u0CA4\u0CC6\u0020\u005C\u006E\u0CB9\u0CCA\u0CB8\u0020\u0C95\u0CBF\u0C9F\u0C95\u0CBF\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CA4\u0CC6\u0CB0\u0CC6',
+ 'ringify':
+ 'Umringen',
+ 'unringify':
+ 'Entringen',
+
+ // custom blocks:
+ 'delete block definition...':
+ '\u0CB5\u0CBF\u0CAD\u0CBE\u0C97\u0CA6\u0020\u0CB5\u0CCD\u0CAF\u0CBE\u0C96\u0CCD\u0CAF\u0CC6\u0C97\u0CB3\u0CA8\u0CCD\u0CA8\u0CC2\u0020\u0C85\u0CB3\u0CBF\u0CB8\u0CBF',
+ 'edit...':
+ '\u0C9A\u0CBF\u0CA4\u0CCD\u0CB0\u0020\u0CB8\u0C82\u0C95\u0CB2\u0CA8...',
+
+ // sprites:
+ 'edit':
+ '\u0C9A\u0CBF\u0CA4\u0CCD\u0CB0\u0020\u0CB8\u0C82\u0C95\u0CB2\u0CA8',
+ 'move':
+ '\u0C9A\u0CB2\u0CBF\u0CB8\u0CC1',
+ 'detach from':
+ '\u0C87\u0CA6\u0CB0\u0CBF\u0C82\u0CA6\u0020\u0C85\u0C97\u0CC1\u0CB2\u0CBF\u0CB8\u0CC1',
+ 'detach all parts':
+ '\u0C8E\u0CB2\u0CCD\u0CB2\u0CBE\u0020\u0CAD\u0CBE\u0C97\u0C97\u0CB3\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C85\u0C97\u0CC1\u0CB2\u0CBF\u0CB8\u0CC1\u0020',
+ 'export...':
+ '\u0CB0\u0CAB\u0CCD\u0CA4\u0CC1\u0CAE\u0CBE\u0CA1\u0CC1...',
+
+ // stage:
+ 'show all':
+ '\u0C8E\u0CB2\u0CCD\u0CB2\u0CBE\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CA4\u0CCB\u0CB0\u0CBF\u0CB8\u0CC1',
+ 'pic...':
+ '\u0C9A\u0CBF\u0CA4\u0CCD\u0CB0...',
+ 'open a new window\nwith a picture of the stage':
+ '\u0C88\u0020\u0CB5\u0CC7\u0CA6\u0CBF\u0C95\u0CC6\u0CAF\u0020\u0C9A\u0CBF\u0CA4\u0CCD\u0CB0\u0CA6\u0020\u0C9C\u0CCA\u0CA4\u0CC6\u005C\u006E\u0020\u0CB9\u0CCA\u0CB8\u0020\u0C95\u0CBF\u0C9F\u0C95\u0CBF\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CA4\u0CC6\u0CB0\u0CC6',
+
+ // scripting area
+ 'clean up':
+ '\u0C8E\u0CB2\u0CCD\u0CB2\u0CBE\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C85\u0CB3\u0CBF\u0CB8\u0CC1\u0020',
+ 'arrange scripts\nvertically':
+ '\u0CB2\u0C82\u0CAC\u0CB5\u0CBE\u0C97\u0CBF\u0020\u0C86\u0C9C\u0CCD\u0C9E\u0CCD\u0CB9\u0CC6\u0C97\u0CB3\u0CA8\u0CCD\u0CA8\u0CC2\u005C\u006E\u0020\u0020\u0CB9\u0CCA\u0C82\u0CA6\u0CBF\u0CB8\u0CBF\u0CB0\u0CBF\u0020',
+ 'add comment':
+ '\u0C9F\u0CC0\u0C95\u0CC6\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C95\u0CC2\u0CA1\u0CBF\u0CB8\u0CBF\u0020',
+ 'undrop':
+ '\u0C85\u0CB5\u0CA8\u0CA4\u0CBF\u0020\u0CAE\u0CBE\u0CA1\u0CA6\u0020',
+ 'undo the last\nblock drop\nin this pane':
+ '\u0C88\u0020\u0CAB\u0CB2\u0C95\u0CA6\u0CB2\u0CCD\u0CB2\u0CBF\u005C\u006E\u0020\u0C95\u0CCA\u0CA8\u0CC6\u0CAF\u0020\u0CB5\u0CBF\u0CAD\u0CBE\u0C97\u0CA6\u005C\u006E\u0020\u0C85\u0CB5\u0CA8\u0CA4\u0CBF\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB0\u0CA6\u0CCD\u0CA6\u0CC1\u0020\u0CAE\u0CBE\u0CA1\u0CC1',
+ 'scripts pic...':
+ '\u0C86\u0C9C\u0CCD\u0C9E\u0CCD\u0CB9\u0CC6\u0CAF\u0020\u0C9A\u0CBF\u0CA4\u0CCD\u0CB0\u0020...',
+ 'open a new window\nwith a picture of all scripts':
+ '\u0C8E\u0CB2\u0CCD\u0CB2\u0CBE\u0020\u0C86\u0C9C\u0CCD\u0C9E\u0CCD\u0CB9\u0CC6\u0C97\u0CB3\u0020\u0C9A\u0CBF\u0CA4\u0CCD\u0CB0\u0CA6\u0020\u0C9C\u0CCA\u0CA4\u0CC6\u005C\u006E\u0020\u0CB9\u0CCA\u0CB8\u0020\u0C95\u0CBF\u0C9F\u0C95\u0CBF\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CA4\u0CC6\u0CB0\u0CC6\u0020',
+ 'make a block...':
+ '\u0CB9\u0CCA\u0CB8\u0020\u0CB5\u0CBF\u0CAD\u0CBE\u0C97\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CAE\u0CBE\u0CA1\u0CBF\u0020...',
+
+ // costumes
+ 'rename':
+ '\u0CAA\u0CC1\u0CA8\u0CB0\u0CCD\u0CA8\u0CBE\u0CAE\u0C95\u0CB0\u0CA3',
+ 'export':
+ '\u0CB0\u0CAA\u0CCD\u0CA4\u0CC1\u0020\u0CAE\u0CBE\u0CA1\u0CC1\u0020',
+ 'rename costume':
+ '\u0C89\u0CA1\u0CC1\u0CAA\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CAA\u0CC1\u0CA8\u0CB0\u0CCD\u0CA8\u0CBE\u0CAE\u0C95\u0CB0\u0CA3\u0020\u0CAE\u0CBE\u0CA1\u0CC1\u0020',
+
+ // sounds
+ 'Play sound':
+ '\u0CB6\u0CAC\u0CCD\u0CA6\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C95\u0CC7\u0CB3\u0CBF\u0CB8\u0CC1\u0020',
+ 'Stop sound':
+ '\u0CB6\u0CAC\u0CCD\u0CA6\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CA8\u0CBF\u0CB2\u0CCD\u0CB2\u0CBF\u0CB8\u0CC1\u0020',
+ 'Stop':
+ '\u0CA8\u0CBF\u0CB2\u0CCD\u0CB2\u0CBF\u0CB8\u0CC1\u0020',
+ 'Play':
+ '\u0C95\u0CC7\u0CB3\u0CBF\u0CB8\u0CC1\u0020',
+ 'rename sound':
+ '\u0CB6\u0CAC\u0CCD\u0CA6\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CAA\u0CC1\u0CA8\u0CB0\u0CCD\u0CA8\u0CBE\u0CAE\u0C95\u0CB0\u0CA3\u0020\u0CAE\u0CBE\u0CA1\u0CC1\u0020',
+
+ // dialogs
+ // buttons
+ 'OK':
+ '\u0CB8\u0CB0\u0CBF',
+ 'Ok':
+ '\u0CB8\u0CB0\u0CBF',
+ 'Cancel':
+ '\u0CB0\u0CA6\u0CCD\u0CA6\u0CC1\u0CAE\u0CBE\u0CA1\u0CC1',
+ 'Yes':
+ '\u0CB9\u0CCC\u0CA6\u0CC1',
+ 'No':
+ '\u0C87\u0CB2\u0CCD\u0CB2',
+
+ // help
+ 'Help':
+ '\u0CB8\u0CB9\u0CBE\u0CAF',
+
+ // zoom blocks
+ 'Zoom blocks':
+ '\u0CB5\u0CBF\u0CAD\u0CBE\u0C97\u0C97\u0CB3\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB9\u0CBF\u0C97\u0CCD\u0C97\u0CBF\u0CB8\u0CC1',
+ 'build':
+ '\u0CA8\u0CBF\u0CB0\u0CCD\u0CAE\u0CBF\u0CB8\u0CC1',
+ 'your own':
+ '\u0CA8\u0CBF\u0CAE\u0CCD\u0CAE\u0020\u0CB8\u0CCD\u0CB5\u0C82\u0CA4\u0CBF\u0C95\u0CC6',
+ 'blocks':
+ '\u0CB5\u0CBF\u0CAD\u0CBE\u0C97\u0C97\u0CB3\u0CC1',
+ 'normal (1x)':
+ '\u0CB8\u0CBE\u0CAE\u0CBE\u0CA8\u0CCD\u0CAF (1x)',
+ 'demo (1.2x)':
+ '\u0CAA\u0CCD\u0CB0\u0CBE\u0CA4\u0CCD\u0CAF\u0C95\u0CCD\u0CB7\u0CBF\u0C95\u0CC6 (1.2x)',
+ 'presentation (1.4x)':
+ '\u0CAA\u0CCD\u0CB0\u0CA6\u0CB0\u0CCD\u0CB6\u0CA8 (1.4x)',
+ 'big (2x)':
+ '\u0CA6\u0CCA\u0CA1\u0CCD\u0CA1\u0CA6\u0CC1 (2x)',
+ 'huge (4x)':
+ '\u0C85\u0CA7\u0CBF\u0C95 (4x)',
+ 'giant (8x)':
+ '\u0020\u0CA6\u0CC8\u0CA4\u0CCD\u0CAF (8x)',
+ 'monstrous (10x)':
+ '\u0C98\u0CCB\u0CB0\u0CBE\u0C95\u0CBE\u0CB0\u0CA6 (10x)',
+
+ // Project Manager
+ 'Untitled':
+ '\u0CB9\u0CC6\u0CB8\u0CB0\u0CBF\u0CA1\u0CA6\u0020',
+ 'Open Project':
+ '\u0CAA\u0CCD\u0CB0\u0CBE\u0CAF\u0CCB\u0C9C\u0CA8\u0CC6\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CA4\u0CC6\u0CB0\u0CC6\u0020',
+ '(empty)':
+ '(\u0C96\u0CBE\u0CB2\u0CBF)',
+ 'Saved!':
+ '\u0C89\u0CB3\u0CBF\u0CB8\u0CB2\u0CBE\u0C97\u0CBF\u0CA6\u0CC6!',
+ 'Delete Project':
+ '\u0CAA\u0CCD\u0CB0\u0CBE\u0CAF\u0CCB\u0C9C\u0CA8\u0CC6\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C85\u0CB3\u0CBF\u0CB8\u0CC1',
+ 'Are you sure you want to delete':
+ '\u0CA8\u0CC0\u0CB5\u0CC1\u0020\u0C85\u0CB3\u0CBF\u0CB8\u0CB2\u0CC1\u0020\u0CB8\u0CBF\u0CA6\u0CCD\u0CA7\u0CB5\u0CBE\u0C97\u0CBF\u0CA6\u0CCD\u0CA6\u0CBF\u0CB0\u0CBE?',
+ 'rename...':
+ '\u0CAA\u0CC1\u0CA8\u0CB0\u0CCD\u0CA8\u0CBE\u0CAE\u0C95\u0CB0\u0CA3...',
+
+ // costume editor
+ 'Costume Editor':
+ '\u0C89\u0CA1\u0CC1\u0CAA\u0CBF\u0CA8\u0020\u0CB8\u0C82\u0CAA\u0CBE\u0CA6\u0C95',
+ 'click or drag crosshairs to move the rotation center':
+ 'Fadenkreuz anklicken oder bewegen um den Drehpunkt zu setzen',
+
+ // project notes
+ 'Project Notes':
+ '\u0CAA\u0CCD\u0CB0\u0CBE\u0CAF\u0CCB\u0C9C\u0CA8\u0CC6\u0CAF\u0020\u0C9F\u0CBF\u0CAA\u0CCD\u0CAA\u0CA3\u0CBF\u0C97\u0CB3\u0CC1',
+
+ // new project
+ 'New Project':
+ '\u0CB9\u0CCA\u0CB8\u0020\u0CAA\u0CCD\u0CB0\u0CBE\u0CAF\u0CCB\u0C9C\u0CA8\u0CC6',
+ 'Replace the current project with a new one?':
+ '\u0CB9\u0CC0\u0C97\u0CBF\u0CA8\u0020\u0CAA\u0CCD\u0CB0\u0CBE\u0CAF\u0CCB\u0C9C\u0CA8\u0CC6\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB9\u0CCA\u0CB8\u0CA6\u0CB0\u0020\u0C9C\u0CCA\u0CA4\u0CC6\u0020\u0CAC\u0CA6\u0CB2\u0CBE\u0CAF\u0CBF\u0CB8\u0CBF\u0020?',
+
+ // save project
+ 'Save Project As...':
+ '\u0020\u0CAA\u0CCD\u0CB0\u0CBE\u0CAF\u0CCB\u0C9C\u0CA8\u0CC6\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C8E\u0C82\u0CA6\u0CC1\u0020\u0C89\u0CB3\u0CBF\u0CB8\u0CBF\u0020...',
+
+ // export blocks
+ 'Export blocks':
+ '\u0CB5\u0CBF\u0CAD\u0CBE\u0C97\u0C97\u0CB3\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB0\u0CAA\u0CCD\u0CA4\u0CC1\u0020\u0CAE\u0CBE\u0CA1\u0CBF\u0CB0\u0CBF\u0020',
+ 'Import blocks':
+ '\u0CB5\u0CBF\u0CAD\u0CBE\u0C97\u0C97\u0CB3\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C86\u0CAE\u0CA6\u0CC1\u0020\u0CAE\u0CBE\u0CA1\u0CBF\u0CB0\u0CBF\u0020',
+ 'this project doesn\'t have any\ncustom global blocks yet':
+ 'in diesem Projekt gibt es noch keine\nglobalen Bl\u00f6cke',
+ 'select':
+ '\u0C86\u0CAF\u0CCD\u0C95\u0CC6\u0020',
+ 'none':
+ '\u0CAF\u0CBE\u0CB5\u0CC1\u0CA6\u0CC2\u0020\u0C87\u0CB2\u0CCD\u0CB2',
+
+ // variable dialog
+ 'for all sprites':
+ '\u0C8E\u0CB2\u0CCD\u0CB2\u0CBE\u0020\u0CAF\u0C95\u0CCD\u0CB7\u0CBF\u0CA3\u0CBF\u0C97\u0CB3\u0CBF\u0C97\u0CC6',
+ 'for this sprite only':
+ '\u0C88\u0020\u0CAF\u0C95\u0CCD\u0CB7\u0CBF\u0CA3\u0CBF\u0C97\u0CC6\u0020\u0CAE\u0CBE\u0CA4\u0CCD\u0CB0\u0020',
+
+ // block dialog
+ 'Change block':
+ '\u0CB5\u0CBF\u0CAD\u0CBE\u0C97\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CAC\u0CA6\u0CB2\u0CBE\u0CAF\u0CBF\u0CB8\u0CBF\u0020',
+ 'Command':
+ '\u0C86\u0CA6\u0CC7\u0CB6',
+ 'Reporter':
+ '\u0CB5\u0CB0\u0CA6\u0CBF\u0C97\u0CBE\u0CB0',
+ 'Predicate':
+ '\u0CB5\u0CBF\u0C9C\u0CCD\u0C9D\u0CCD\u0CA8\u0CCD\u0CAF\u0CBE\u0CAA\u0CBF\u0CB8\u0CC1',
+
+ // block editor
+ 'Block Editor':
+ '\u0CB5\u0CBF\u0CAD\u0CBE\u0C97\u0C97\u0CB3\u0020\u0CB8\u0C82\u0CAA\u0CBE\u0CA6\u0C95',
+ 'Apply':
+ '\u0C85\u0CA8\u0CCD\u0CB5\u0CAF\u0CBF\u0CB8\u0CC1',
+
+ // block deletion dialog
+ 'Delete Custom Block':
+ '\u0CB8\u0CCD\u0CB5\u0CAF\u0C82\u0020\u0CA8\u0CBF\u0CB0\u0CCD\u0CAE\u0CBF\u0CA4\u0020\u0CB5\u0CBF\u0CAD\u0CBE\u0C97\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C85\u0CB3\u0CBF\u0CB8\u0CBF',
+ 'block deletion dialog text':
+ '\u0CB5\u0CBF\u0CAD\u0CBE\u0C97\u0020\u0C85\u0CB3\u0CBF\u0CB8\u0CAC\u0CC7\u0C95\u0CBE\u0CA6\u0020\u0CB8\u0C82\u0CAD\u0CBE\u0CB7\u0CA3\u0CBE\u0020\u0CAA\u0CA0\u0CCD\u0CAF',
+
+ // input dialog
+ 'Create input name':
+ '\u0C8A\u0CA1\u0CBF\u0C95\u0CC6\u0CAF\u0020\u0CB9\u0CC6\u0CB8\u0CB0\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB0\u0C9A\u0CBF\u0CB8\u0CBF',
+ 'Edit input name':
+ '\u0C8A\u0CA1\u0CBF\u0C95\u0CC6\u0CAF\u0020\u0CB9\u0CC6\u0CB8\u0CB0\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB8\u0C82\u0CAA\u0CBE\u0CA6\u0CBF\u0CB8\u0CC1',
+ 'Edit label fragment':
+ '\u0CA4\u0CB2\u0CC6\u0C9A\u0CC0\u0C9F\u0CBF\u0CAF\u0020\u0C9A\u0CC2\u0CB0\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB8\u0C82\u0CAA\u0CBE\u0CA6\u0CBF\u0CB8\u0CC1',
+ 'Title text':
+ '\u0CB6\u0CC0\u0CB0\u0CCD\u0CB7\u0CBF\u0C95\u0CC6\u0CAF\u0020\u0C85\u0C95\u0CCD\u0CB7\u0CB0\u0020',
+ 'Input name':
+ '\u0C8A\u0CA1\u0CBF\u0C95\u0CC6\u0CAF\u0020\u0CB9\u0CC6\u0CB8\u0CB0\u0CC1',
+ 'Delete':
+ '\u0C85\u0CB3\u0CBF\u0CB8\u0CC1',
+ 'Object':
+ '\u0CB5\u0CB8\u0CCD\u0CA4\u0CC1',
+ 'Number':
+ '\u0C85\u0C82\u0C95\u0CBF',
+ 'Text':
+ '\u0CAA\u0CA0\u0CCD\u0CAF',
+ 'List':
+ '\u0CAA\u0C9F\u0CCD\u0C9F\u0CBF',
+ 'Any type':
+ '\u0CAF\u0CBE\u0CB5\u0CC1\u0CA6\u0CBE\u0CA6\u0CB0\u0CC1\u0020\u0CAE\u0CBE\u0CA6\u0CB0\u0CBF',
+ 'Boolean (T/F)':
+ '\u0CAC\u0CC2\u0CB2\u0CBF\u0CAF\u0CA8\u0CCD (\u0CB8\u0CB0\u0CBF\u002F\u0CA4\u0CAA\u0CCD\u0CAA\u0CC1)',
+ 'Command\n(inline)':
+ '\u0C86\u0CA6\u0CC7\u0CB6\n(\u0CAE\u0CA7\u0CCD\u0CAF\u0CB8\u0CCD\u0CA5\u0020)',
+ 'Command\n(C-shape)':
+ '\u0C86\u0CA6\u0CC7\u0CB6\n(\u0CB8\u0CBF-\u0C86\u0C95\u0CC3\u0CA4\u0CBF)',
+ 'Any\n(unevaluated)':
+ '\u0CAF\u0CBE\u0CB5\u0CC1\u0CA6\u0CBE\u0CA6\u0CB0\u0CC1\u0020\n(\u0CAE\u0CCC\u0CB2\u0CCD\u0CAF\u0CC0\u0C95\u0CB0\u0CBF\u0CB8\u0CA6)',
+ 'Boolean\n(unevaluated)':
+ '\u0CAC\u0CC2\u0CB2\u0CBF\u0CAF\u0CA8\u0CCD\n(\u0CAE\u0CCC\u0CB2\u0CCD\u0CAF\u0CC0\u0C95\u0CB0\u0CBF\u0CB8\u0CA6)',
+ 'Single input.':
+ '\u0C92\u0C82\u0CA6\u0CC7\u0020\u0C92\u0C82\u0CA6\u0CC1\u0020\u0C8A\u0CA1\u0CBF\u0C95\u0CC6\u0020.',
+ 'Default Value:':
+ '\u0C97\u0CC8\u0CB0\u0CC1\u0CB9\u0CBE\u0C9C\u0CB0\u0CBF\u0020\u0CAE\u0CCC\u0CB2\u0CCD\u0CAF:',
+ 'Multiple inputs (value is list of inputs)':
+ '\u0CAC\u0CB9\u0CC1\u0CB0\u0CC0\u0CA4\u0CBF\u0CAF\u0020\u0C8A\u0CA1\u0CBF\u0C95\u0CC6 (\u0CAE\u0CCC\u0CB2\u0CCD\u0CAF\u0CB5\u0CC1\u0020\u0C92\u0C82\u0CA6\u0C95\u0CBF\u0C82\u0CA4\u0020\u0CB9\u0CC6\u0C9A\u0CCD\u0C9A\u0CBE\u0C97\u0CBF\u0CA6\u0CC6)',
+ 'Upvar - make internal variable visible to caller':
+ '\u0CB9\u0CCA\u0CB0\u0C97\u0CA1\u0CC6\u0020\u0CAA\u0CB0\u0CBF\u0CB5\u0CB0\u0CCD\u0CA4\u0C95\u0CB5\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0CB0\u0C9A\u0CBF\u0CB8\u0CC1\u0CB5\u0CC1\u0CA6\u0CB0\u0CBF\u0C82\u0CA6\u0020\u0CAC\u0CC7\u0C9F\u0CBF\u0C97\u0CBE\u0CB0\u0CB0\u0CBF\u0C97\u0CC6\u0020\u0C95\u0CBE\u0CA3\u0CAC\u0CB9\u0CC1\u0CA6\u0CC1\u0020',
+
+ // About Snap
+ 'About Snap':
+ '\u0CB8\u0CCD\u0CA8\u0CCD\u0CAF\u0CBE\u0CAA\u0CCD\u0020\u0020\u0CA8\u0020\u0CAC\u0C97\u0CCD\u0C97\u0CC6\u0020',
+ 'Back...':
+ '\u0CB9\u0CBF\u0C82\u0CA6\u0CC6...',
+ 'License...':
+ '\u0C85\u0CA8\u0CC1\u0CAE\u0CA4\u0CBF...',
+ 'Modules...':
+ '\u0C85\u0CA7\u0CCD\u0CAF\u0CBE\u0CAF\u0C97\u0CB3\u0CC1...',
+ 'Credits...':
+ '\u0CAA\u0CCD\u0CB0\u0CA4\u0CCD\u0CAF\u0CAF\u0C97\u0CB3\u0CC1...',
+ 'Translators...':
+ '\u0CAD\u0CBE\u0CB7\u0CBE\u0C82\u0CA4\u0CB0\u0C95\u0CBE\u0CB0...',
+ 'License':
+ '\u0C85\u0CA8\u0CC1\u0CAE\u0CA4\u0CBF',
+ 'current module versions:':
+ '\u0CB9\u0CC0\u0C97\u0CBF\u0CA8\u0020\u0C85\u0CA7\u0CCD\u0CAF\u0CBE\u0CAF\u0CA6\u0020\u0C86\u0CB5\u0CC3\u0CA4\u0CCD\u0CA4\u0CBF',
+ 'Contributors':
+ '\u0CB8\u0CB9\u0CBE\u0CAF\u0C95',
+ 'Translations':
+ '\u0CAD\u0CBE\u0CB7\u0CBE\u0C82\u0CA4\u0CB0\u0C95\u0CBE\u0CB0',
+
+ // variable watchers
+ 'normal':
+ '\u0CB8\u0CBE\u0CAE\u0CBE\u0CA8\u0CCD\u0CAF',
+ 'large':
+ '\u0CA6\u0CCA\u0CA1\u0CCD\u0CA1\u0CA6\u0CC1',
+ 'slider':
+ '\u0C9C\u0CBE\u0CB0\u0CC1\u0020\u0CA8\u0CBF\u0CAF\u0C82\u0CA4\u0CCD\u0CB0\u0C95',
+ 'slider min...':
+ '\u0C95\u0CA1\u0CBF\u0CAE\u0CC6\u0020\u0C9C\u0CBE\u0CB0\u0CC1\u0020\u0CA8\u0CBF\u0CAF\u0C82\u0CA4\u0CCD\u0CB0\u0C95...',
+ 'slider max...':
+ '\u0C85\u0CA7\u0CBF\u0C95\u0020\u0C9C\u0CBE\u0CB0\u0CC1\u0020\u0CA8\u0CBF\u0CAF\u0C82\u0CA4\u0CCD\u0CB0\u0C95...',
+ 'import...':
+ '\u0C86\u0CAE\u0CA6\u0CC1...',
+ 'Slider minimum value':
+ '\u0C9C\u0CBE\u0CB0\u0CC1\u0020\u0CA8\u0CBF\u0CAF\u0C82\u0CA4\u0CCD\u0CB0\u0C95\u0CA6\u0020\u0C95\u0CA1\u0CBF\u0CAE\u0CC6\u0020\u0CAE\u0CCC\u0CB2\u0CCD\u0CAF',
+ 'Slider maximum value':
+ '\u0C9C\u0CBE\u0CB0\u0CC1\u0020\u0CA8\u0CBF\u0CAF\u0C82\u0CA4\u0CCD\u0CB0\u0C95\u0CA6\u0020\u0C85\u0CA7\u0CBF\u0C95\u0020\u0CAE\u0CCC\u0CB2\u0CCD\u0CAF',
+
+ // list watchers
+ 'length: ':
+ '\u0C89\u0CA6\u0CCD\u0CA6: ',
+
+ // coments
+ 'add comment here...':
+ '\u0C9F\u0CC0\u0C95\u0CC6\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1\u0020\u0C87\u0CB2\u0CCD\u0CB2\u0CBF\u0020\u0C95\u0CC2\u0CA1\u0CBF\u0CB8\u0CBF\u0020',
+
+ // drow downs
+ // directions
+ '(90) right':
+ '(90) \u0CAC\u0CB2\u0020\u0CAD\u0CBE\u0C97\u0020',
+ '(-90) left':
+ '(-90) \u0C8E\u0CA1\u0020\u0CAD\u0CBE\u0C97',
+ '(0) up':
+ '(0) \u0CAE\u0CC7\u0CB2\u0CC6',
+ '(180) down':
+ '(180) \u0C95\u0CC6\u0CB3\u0C97\u0CA1\u0CC6',
+
+ // collision detection
+ 'mouse-pointer':
+ '\u0CB8\u0CC2\u0C9A\u0C95\u0CB8\u0CBE\u0CA7\u0CA8\u0020\u0CAE\u0CCC\u0CB8\u0CCD',
+ 'edge':
+ '\u0C85\u0C82\u0C9A\u0CC1',
+ 'pen trails':
+ '\u0CB2\u0CC7\u0C96\u0CA8\u0CBF\u0CAF\u0020\u0CAA\u0CB0\u0CC0\u0C95\u0CCD\u0CB7\u0CA3\u0CC6',
+
+ // costumes
+ 'Turtle':
+ '\u0C86\u0CAE\u0CC6',
+ 'Empty':
+ '\u0C96\u0CBE\u0CB2\u0CBF',
+
+ // graphical effects
+ 'brightness':
+ '\u0CAA\u0CCD\u0CB0\u0C95\u0CBE\u0CB6\u0CAE\u0CBE\u0CA8',
+ 'ghost':
+ '\u0CA6\u0CC6\u0CB5\u0CCD\u0CB5',
+ 'negative':
+ '\u0CA8\u0C95\u0CBE\u0CB0\u0CBE\u0CA4\u0CCD\u0CAE\u0C95',
+ 'comic':
+ '\u0CB9\u0CBE\u0CB8\u0CCD\u0CAF',
+ 'confetti':
+ 'Farbverschiebung',
+
+ // keys
+ 'space':
+ '\u0C9C\u0CBE\u0C97\u0020',
+ 'up arrow':
+ '\u0CAE\u0CC7\u0CB2\u0CBF\u0CA8\u0CAC\u0CBE\u0CA3',
+ 'down arrow':
+ '\u0C95\u0CC6\u0CB3\u0CAE\u0CC1\u0C96\u0020\u0CAC\u0CBE\u0CA3',
+ 'right arrow':
+ '\u0CAC\u0CB2\u0020\u0CAC\u0CBE\u0CA3',
+ 'left arrow':
+ '\u0C8E\u0CA1\u0020\u0CAC\u0CBE\u0CA3',
+ 'a':
+ 'a',
+ 'b':
+ 'b',
+ 'c':
+ 'c',
+ 'd':
+ 'd',
+ 'e':
+ 'e',
+ 'f':
+ 'f',
+ 'g':
+ 'g',
+ 'h':
+ 'h',
+ 'i':
+ 'i',
+ 'j':
+ 'j',
+ 'k':
+ 'k',
+ 'l':
+ 'l',
+ 'm':
+ 'm',
+ 'n':
+ 'n',
+ 'o':
+ 'o',
+ 'p':
+ 'p',
+ 'q':
+ 'q',
+ 'r':
+ 'r',
+ 's':
+ 's',
+ 't':
+ 't',
+ 'u':
+ 'u',
+ 'v':
+ 'v',
+ 'w':
+ 'w',
+ 'x':
+ 'x',
+ 'y':
+ 'y',
+ 'z':
+ 'z',
+ '0':
+ '0',
+ '1':
+ '1',
+ '2':
+ '2',
+ '3':
+ '3',
+ '4':
+ '4',
+ '5':
+ '5',
+ '6':
+ '6',
+ '7':
+ '7',
+ '8':
+ '8',
+ '9':
+ '9',
+
+ // messages
+ 'new...':
+ '\u0CB9\u0CCA\u0CB8...',
+
+ // math functions
+ 'abs':
+ 'Betrag',
+ 'floor':
+ 'Abgerundet',
+ 'sqrt':
+ 'Wurzel',
+ 'sin':
+ 'sin',
+ 'cos':
+ 'cos',
+ 'tan':
+ 'tan',
+ 'asin':
+ 'asin',
+ 'acos':
+ 'acos',
+ 'atan':
+ 'atan',
+ 'ln':
+ 'ln',
+ 'e^':
+ 'e^',
+
+ // delimiters
+ 'letter':
+ '\u0C85\u0C95\u0CCD\u0CB7\u0CB0',
+ 'whitespace':
+ '\u0C96\u0CBE\u0CB2\u0CBF\u0C9C\u0CBE\u0C97',
+ 'line':
+ '\u0CB8\u0CBE\u0CB2\u0CC1',
+ 'tab':
+ '\u0020\u0C95\u0CC0\u0CB2\u0CBF',
+ 'cr':
+ '\u0CB8\u0CBF\u0C85\u0CB0\u0CCD',
+
+ // data types
+ 'number':
+ '\u0C85\u0C82\u0C95\u0CBF:',
+ 'text':
+ '\u0CAA\u0CA0\u0CCD\u0CAF',
+ 'Boolean':
+ '\u0CAC\u0CC2\u0CB2\u0CBF\u0CAF\u0CA8\u0CCD',
+ 'list':
+ '\u0CAA\u0C9F\u0CCD\u0C9F\u0CBF',
+ 'command':
+ '\u0C86\u0CA6\u0CC7\u0CB6\u0020',
+ 'reporter':
+ '\u0CB5\u0CB0\u0CA6\u0CBF\u0C97\u0CBE\u0CB0',
+ 'predicate':
+ '\u0CB5\u0CBF\u0C9C\u0CCD\u0C9D\u0CCD\u0CA8\u0CCD\u0CAF\u0CBE\u0CAA\u0CBF\u0CB8\u0CC1',
+
+ // list indices
+ 'last':
+ '\u0C95\u0CCA\u0CA8\u0CC6',
+ 'any':
+ '\u0CAF\u0CBE\u0CB5\u0CC1\u0CA6\u0CBE\u0CA6\u0CB0\u0CC1\u0020'
+};
diff --git a/lang-ko.js b/lang-ko.js
old mode 100644
new mode 100755
index a1e50ebe..8cedf44c
--- a/lang-ko.js
+++ b/lang-ko.js
@@ -179,13 +179,13 @@ SnapTranslator.dict.ko = {
// translations meta information
'language_name':
- 'Korean', // the name as it should appear in the language menu
+ '한국어', // the name as it should appear in the language menu
'language_translator':
'Yunjae Jang', // your name for the Translators tab
'translator_e-mail':
- 'yunjae.jang@inc.korea.ac.kr', // optional
+ 'janggoons@gmail.com', // optional
'last_changed':
- '2012-11-18', // this, too, will appear in the Translators tab
+ '2015-01-21', // this, too, will appear in the Translators tab
// GUI
// control bar:
@@ -218,7 +218,7 @@ SnapTranslator.dict.ko = {
// editor:
'draggable':
- '드래그 가능?',
+ '마우스로 직접 움직이기',
// tabs:
'Scripts':
@@ -243,8 +243,16 @@ SnapTranslator.dict.ko = {
'왼쪽에서 오른쪽으로만',
// new sprite button:
- 'add a new sprite':
- '새로운 스프라이트 추가',
+ 'add a new Turtle sprite':
+ '새로운 스프라이트 추가하기',
+
+ // new paint sprite button:
+ 'paint a new sprite':
+ '새로운 스프라이트 그리기',
+
+ // new paint costume button:
+ 'Paint a new costume':
+ '새로운 모양 그리기',
// tab help
'costumes tab help':
@@ -300,19 +308,19 @@ SnapTranslator.dict.ko = {
'point towards %dst':
'%dst 쪽 보기',
'go to x: %n y: %n':
- 'x: %n 、y: %n 쪽으로 가기',
+ 'x: %n 、y: %n 쪽으로 이동하기',
'go to %dst':
- '%dst 위치로 가기',
+ '%dst 위치로 이동하기',
'glide %n secs to x: %n y: %n':
- '%n 초 동안 x: %n 、y: %n 쪽으로 움직이기',
+ '%n 초 동안 x: %n 、y: %n 쪽으로 이동하기',
'change x by %n':
'x좌표 %n 만큼 바꾸기',
'set x to %n':
- 'x좌표 %n 로 정하기',
+ 'x좌표 %n (으)로 정하기',
'change y by %n':
'y좌표 %n 만큼 바꾸기',
'set y to %n':
- 'y좌표 %n 로 정하기',
+ 'y좌표 %n (으)로 정하기',
'if on edge, bounce':
'벽에 닿으면 튕기기',
'x position':
@@ -328,13 +336,13 @@ SnapTranslator.dict.ko = {
'next costume':
'다음 모양',
'costume #':
- '모양 #',
+ '모양 번호',
'say %s for %n secs':
- '%s %n 초 동안 말하기',
+ '%s 을(를) %n 초 동안 말하기',
'say %s':
'%s 말하기',
'think %s for %n secs':
- '%s %n 초간 생각하기',
+ '%s 을(를) %n 초 동안 생각하기',
'think %s':
'%s 생각하기',
'Hello!':
@@ -342,15 +350,15 @@ SnapTranslator.dict.ko = {
'Hmm...':
'흠…',
'change %eff effect by %n':
- '%eff 효과 %n 만큼 바꾸기',
+ '%eff 효과를 %n 만큼 바꾸기',
'set %eff effect to %n':
- '%eff 효과 %n 만큼 주기',
+ '%eff 효과를 %n 만큼 정하기',
'clear graphic effects':
'그래픽 효과 지우기',
'change size by %n':
- '크기 %n 만큼 바꾸기',
+ '크기를 %n 만큼 바꾸기',
'set size to %n %':
- '크기 %n % 로 정하기',
+ '크기를 %n % 로 정하기',
'size':
'크기',
'show':
@@ -373,82 +381,96 @@ SnapTranslator.dict.ko = {
'play sound %snd':
'%snd 소리내기',
'play sound %snd until done':
- '끝날때까지 %snd 소리내기',
+ '%snd 을(를) 끝까지 소리내기',
'stop all sounds':
'모든 소리 끄기',
'rest for %n beats':
- '%n 비트 동안 쉬기',
+ '%n 박자 동안 쉬기',
'play note %n for %n beats':
- '%n 음을 %n 비트로 연주하기',
+ '%n 음을 %n 박자로 연주하기',
'change tempo by %n':
- '템포를 %n 만큼 바꾸기',
+ '빠르기를 %n 만큼 바꾸기',
'set tempo to %n bpm':
- '템포를 %n bpm으로 맞추기',
+ '빠르기를 %n bpm으로 정하기',
'tempo':
- '템포',
+ '빠르기',
// pen:
'clear':
- '지우기',
+ '펜 자국 지우기',
'pen down':
'펜 내리기',
'pen up':
'펜 올리기',
'set pen color to %clr':
- '펜의 색 %clr 으로 정하기',
+ '펜 색깔을 %clr 으로 정하기',
'change pen color by %n':
- '펜의 색 %n 만큼 바꾸기',
+ '펜 색깔을 %n 만큼 바꾸기',
'set pen color to %n':
- '펜의 색 %n 으로 정하기',
+ '펜 색깔을 %n (으)로 정하기',
'change pen shade by %n':
- '펜의 그림자 %n 만큼 바꾸기',
+ '펜 음영을 %n 만큼 바꾸기',
'set pen shade to %n':
- '펜의 그림자 %n 으로 정하기',
+ '펜 음영을 %n 으로 정하기',
'change pen size by %n':
- '펜의 크기 %n 만큼 바꾸기',
+ '펜 굵기를 %n 만큼 바꾸기',
'set pen size to %n':
- '펜의 크기 %n 으로 정하기',
+ '펜 굵기를 %n (으)로 정하기',
'stamp':
- '스탬프',
+ '도장찍기',
// control:
'when %greenflag clicked':
- '%greenflag 클릭되었을 때',
+ '%greenflag 클릭했을 때',
'when %keyHat key pressed':
- '%keyHat 키 눌렀을 때',
+ '%keyHat 키를 눌렀을 때',
'when I am clicked':
- '자신이 클릭되었을 때',
+ '이 스프라이트를 클릭했을 때',
'when I receive %msgHat':
- '%msgHat 받을 때',
+ '%msgHat 을(를) 받았을 때',
'broadcast %msg':
'%msg 방송하기',
'broadcast %msg and wait':
'%msg 방송하고 기다리기',
'Message name':
- '메세지 이름',
+ '메시지 이름',
+ 'message':
+ '메시지',
+ 'any message':
+ '어떤 메시지',
'wait %n secs':
'%n 초 기다리기',
'wait until %b':
'%b 까지 기다리기',
'forever %c':
- '무한반복 %c',
+ '무한 반복하기 %c',
'repeat %n %c':
- '반복 %n 회 %c',
+ '%n 번 반복하기 %c',
'repeat until %b %c':
- '반복 %b 계속 확인 %c',
+ '%b 까지 반복하기 %c',
'if %b %c':
'만약 %b 라면 %c',
'if %b %c else %c':
'만약 %b 라면 %c 아니면 %c',
'report %s':
'%s 출력하기',
- 'stop block':
- '블록 멈추기',
- 'stop script':
- '스크립트 멈추기',
- 'stop all %stop':
- '모두 멈추기 %stop',
+ 'stop %stopChoices':
+ '%stopChoices 멈추기',
+ 'all':
+ '모두',
+ 'this script':
+ '이 스크립트',
+ 'this block':
+ '이 블록',
+ 'stop %stopOthersChoices':
+ '%stopOthersChoices 멈추기',
+ 'all but this script':
+ '이 스크립트를 제외한 모두',
+ 'other scripts in sprite':
+ '이 스프라이트에 있는 다른 스크립트',
+ 'pause all %pause':
+ '모두 잠시 멈추기 %pause',
'run %cmdRing %inputs':
'%cmdRing 을(를) %inputs 으로 실행하기',
'launch %cmdRing %inputs':
@@ -461,14 +483,23 @@ SnapTranslator.dict.ko = {
'반복해서 %cmdRing 을(를) 호출하기',
'warp %c':
'워프 %c',
+ 'when I start as a clone':
+ '복제되었을 때',
+ 'create a clone of %cln':
+ '%cln 을(를) 복제하기',
+ 'myself':
+ '나 자신',
+ 'delete this clone':
+ '이 복제본 삭제하기',
+
// sensing:
'touching %col ?':
- '%col 에 닿기?',
+ '%col 에 닿았는가?',
'touching %clr ?':
- '%clr 색에 닿기?',
+ '%clr 색에 닿았는가?',
'color %clr is touching %clr ?':
- '%clr 색이 %clr 색에 닿기?',
+ '%clr 색이 %clr 색에 닿았는가?',
'ask %s and wait':
'%s 을(를) 묻고 기다리기',
'what\'s your name?':
@@ -476,36 +507,59 @@ SnapTranslator.dict.ko = {
'answer':
'대답',
'mouse x':
- '마우스 x좌표',
+ '마우스의 x좌표',
'mouse y':
- '마우스 y좌표',
+ '마우스의 y좌표',
'mouse down?':
- '마우스 클릭하기?',
+ '마우스를 클릭했는가?',
'key %key pressed?':
- '%key 키 클릭하기?',
+ '%key 키를 눌렀는가?',
'distance to %dst':
'%dst 까지 거리',
'reset timer':
'타이머 초기화',
'timer':
'타이머',
+ '%att of %spr':
+ '%att ( %spr 에 대한)',
'http:// %s':
'http:// %s',
-
+ 'turbo mode?':
+ '터보 모드인가?',
+ 'set turbo mode to %b':
+ '터보 모드 %b 으로 설정하기',
'filtered for %clr':
'%clr 색 추출하기',
'stack size':
'스택 크기',
'frames':
'프레임',
+ 'current %dates':
+ '현재 %dates',
+ 'year':
+ '연도',
+ 'month':
+ '월',
+ 'date':
+ '일',
+ 'day of week':
+ '요일(1~7)',
+ 'hour':
+ '시간',
+ 'minute':
+ '분',
+ 'second':
+ '초',
+ 'time in milliseconds':
+ '밀리세컨드초',
// operators:
'%n mod %n':
- '%n 나누기 %n 의 나머지',
+ '( %n / %n ) 의 나머지',
'round %n':
'%n 반올림',
'%fun of %n':
- '%n 의 %fun',
+ '%fun ( %n 에 대한)',
'pick random %n to %n':
'%n 부터 %n 사이의 난수',
'%b and %b':
@@ -520,12 +574,14 @@ SnapTranslator.dict.ko = {
'거짓',
'join %words':
'%words 결합하기',
+ 'split %s by %delim':
+ '%s 를 %delim 기준으로 나누기',
'hello':
'안녕',
'world':
- '세계',
+ '세상',
'letter %n of %s':
- '%n 의 %s 번째 글자',
+ '%n 번째 글자 ( %s 에 대한)',
'length of %s':
'%s 의 길이',
'unicode of %s':
@@ -533,9 +589,11 @@ SnapTranslator.dict.ko = {
'unicode %n as letter':
'유니코드 %n 에 대한 문자',
'is %s a %typ ?':
- '%s 이(가) %typ 인가요?',
+ '%s 이(가) %typ 인가?',
+ 'is %s identical to %s ?':
+ '%s 와(과) %s 가 동일한가?',
'type of %s':
- '%s 타입',
+ '%s 의 타입',
// variables:
'Make a variable':
@@ -543,12 +601,12 @@ SnapTranslator.dict.ko = {
'Variable name':
'변수 이름',
'Delete a variable':
- '변수 삭제',
+ '변수 삭제하기',
'set %var to %s':
- '%var 을(를) %s 로 저장',
+ '변수 %var 에 %s 저장하기',
'change %var by %n':
- '%var 에 %n 씩 누적하기',
+ '변수 %var 을(를) %n 만큼 바꾸기',
'show variable %var':
'변수 %var 보이기',
'hide variable %var':
@@ -560,38 +618,78 @@ SnapTranslator.dict.ko = {
'list %exp':
'리스트 %exp',
'%s in front of %l':
- '%s 을(를) %l 처음에 추가하기 ',
+ '%s 을(를) 리스트 %l 의 맨 앞에 추가하기 ',
'item %idx of %l':
- '%idx 항목 %l',
+ '%idx 번째 항목 (리스트 %l 에 대한)',
'all but first of %l':
- '%l 첫번째 아이템 제외한 모든 아이템',
+ '리스트 %l 에서 첫 번째 항목 제외하기',
'length of %l':
- '%l 의 크기',
+ '리스트 %l 의 항목 갯수',
'%l contains %s':
- '%l 에 %s 포함?',
+ '리스트 %l 에 %s 포함되었는가?',
'thing':
- '아이템',
+ '어떤 것',
'add %s to %l':
- '%s 을(를) %l 마지막에 추가하기 ',
+ '%s 을(를) 리스트 %l 의 마지막에 추가하기 ',
'delete %ida of %l':
- '%ida 을(를) %l 에서 삭제하기 ',
+ '%ida 번째 항목 삭제하기 (리스트 %l 에 대한)',
'insert %s at %idx of %l':
- '%s 을(를) %idx 위치에 추가하기 %l',
+ '%s 을(를) %idx 위치에 추가하기 (리스트 %l 에 대한)',
'replace item %idx of %l with %s':
- '%idx 항목 %l 에 %s 로 교체하기',
+ '%idx 번째 (리스트 %l 에 대한) 를 %s (으)로 바꾸기',
// other
'Make a block':
'블록 만들기',
+ // Paint Editor
+ 'Paint Editor':
+ '그림 편집기',
+ 'undo':
+ '되돌리기',
+ 'grow':
+ '확대',
+ 'shrink':
+ '축소',
+ 'flip ↔':
+ '↔ 반전',
+ 'flip ↕':
+ '↕ 반전',
+ 'Brush size':
+ '펜 크기',
+ 'Constrain proportions of shapes?\n(you can also hold shift)':
+ '도형 크기 비율을 고정하는가?\n(shift 키를 눌러서 사용할 수 있습니다.)',
+ 'Paintbrush tool\n(free draw)':
+ '붓 도구',
+ 'Stroked Rectangle\n(shift: square)':
+ '사각형 그리기 도구\n(shift: 정사각형)',
+ 'Stroked Ellipse\n(shift: circle)':
+ '타원 그리기 도구\n(shift: 원)',
+ 'Eraser tool':
+ '지우개 도구',
+ 'Set the rotation center':
+ '회전축 설정하기',
+ 'Line tool\n(shift: vertical/horizontal)':
+ '선 그리기 도구\n(shift: 수평/수직)',
+ 'Filled Rectangle\n(shift: square)':
+ '채워진 사각형 그리기 도구\n(shift: 정사각형)',
+ 'Filled Ellipse\n(shift: circle)':
+ '채워진 타원 그리기 도구\n(shift: 원)',
+ 'Fill a region':
+ '색 채우기',
+ 'Pipette tool\n(pick a color anywhere)':
+ '스포이드 도구\n(원하는 색 선택하기)',
+
// menus
// snap menu
'About...':
'Snap! 에 대해서...',
+ 'Reference manual':
+ '참고자료 다운로드',
'Snap! website':
'Snap! 웹사이트',
'Download source':
- '소스 다운로드',
+ '소스코드 다운로드',
'Switch back to user mode':
'사용자 모드로 전환',
'disable deep-Morphic\ncontext menus\nand show user-friendly ones':
@@ -609,15 +707,18 @@ SnapTranslator.dict.ko = {
'Open...':
'열기...',
'Save':
- '저장',
+ '저장하기',
+ 'Save to disk':
+ '내 컴퓨터에 저장하기',
+ 'experimental - store this project\nin your downloads folder':
+ '실험적 - 이 프로젝트를\n 다운로드 폴더에 저장합니다.',
'Save As...':
- '다른 이름으로 저장...',
+ '다른 이름으로 저장하기...',
'Import...':
'가져오기...',
'file menu import hint':
'내보낸 프로젝트 파일, 블록 라이브러리\n'
- + '스프라이트 모양 또는 소리를 가져옵니다.\n\n'
- + '일부 웹브라우저에서는 지원되지 않습니다.',
+ + '스프라이트 모양 또는 소리를 가져옵니다.',
'Export project as plain text...':
'프로젝트를 텍스트 파일로 내보내기...',
'Export project...':
@@ -628,58 +729,171 @@ SnapTranslator.dict.ko = {
'블록 내보내기...',
'show global custom block definitions as XML\nin a new browser window':
'새롭게 정의한 전역 블록 데이터를\n새로운 윈도우에 XML 형태로 보여주기',
+ 'Export all scripts as pic...':
+ '모든 스크립트를 그림파일로 내보내기',
+ 'show a picture of all scripts\nand block definitions':
+ '모든 스크립트와 정의된 블록을 그림파일로 보여줍니다.',
+ 'Import tools':
+ '추가 도구 가져오기',
+ 'load the official library of\npowerful blocks':
+ '강력한 기능을 제공하는\n 블록들을 가져옵니다.',
+ 'Libraries...':
+ '라이브러리...',
+ 'Select categories of additional blocks to add to this project.':
+ '추가적인 블록을 선택해서\n 사용할 수 있습니다.',
+ 'Import library':
+ '라이브러리 가져오기',
+
+ // cloud menu
+ 'Login...':
+ '로그인...',
+ 'Signup...':
+ '계정만들기...',
+ 'Reset Password...':
+ '비밀번호 재설정...',
+ 'url...':
+ 'url...',
+ 'export project media only...':
+ 'export project media only...',
+ 'export project without media...':
+ 'export project without media...',
+ 'export project as cloud data...':
+ 'export project as cloud data...',
+ 'open shared project from cloud...':
+ 'open shared project from cloud...',
// settings menu
'Language...':
'언어선택...',
+ 'Zoom blocks...':
+ '블록 크기 설정...',
+ 'Stage size...':
+ '무대 크기 설정...',
+ 'Stage size':
+ '무대 크기',
+ 'Stage width':
+ '가로(너비)',
+ 'Stage height':
+ '세로(높이)',
+ 'Default':
+ '기본설정',
+
'Blurred shadows':
'반투명 그림자',
'uncheck to use solid drop\nshadows and highlights':
'체크해제하면, 그림자와 하이라이트가\n불투명 상태로 됩니다.',
'check to use blurred drop\nshadows and highlights':
'체크하면, 그림자와 하이라이트가\n반투명 상태로 됩니다.',
+
'Zebra coloring':
'중첩 블록 구분하기',
'check to enable alternating\ncolors for nested blocks':
'체크하면, 중첩된 블록을\n다른 색으로 구분할 수 있습니다.',
'uncheck to disable alternating\ncolors for nested block':
'체크해제하면, 중첩된 블록을\n다른 색으로 구분할 수 없습니다.',
+
+ 'Dynamic input labels':
+ 'Dynamic input labels',
+ 'uncheck to disable dynamic\nlabels for variadic inputs':
+ 'uncheck to disable dynamic\nlabels for variadic inputs',
+ 'check to enable dynamic\nlabels for variadic inputs':
+ 'check to enable dynamic\nlabels for variadic inputs',
+
'Prefer empty slot drops':
'빈 슬롯에 입력 가능',
'settings menu prefer empty slots hint':
'설정 메뉴에 빈 슬롯의\n힌트를 사용할 수 있습니다.',
'uncheck to allow dropped\nreporters to kick out others':
'체크해제하면, 기존 리포터 블록에\n새로운 리포터 블록으로 대체할 수 있습니다.',
+
'Long form input dialog':
'긴 형태의 입력 대화창',
'check to always show slot\ntypes in the input dialog':
'체크하면, 입력 대화창에\n항상 슬롯의 형태를 보여줍니다.',
'uncheck to use the input\ndialog in short form':
'체크해제하면, 입력 대화창을\n짧은 형태로 사용합니다.',
+
+ 'Plain prototype labels':
+ '새로 만든 블록 인수 설정',
+ 'uncheck to always show (+) symbols\nin block prototype labels':
+ '체크해제하면, 블록 편집기에서\n 블록 인수 추가 버튼(+)을\n 보입니다.',
+ 'check to hide (+) symbols\nin block prototype labels':
+ '체크하면, 블록 편집기에서\n 블록 인수 추가 버튼(+)을\n 숨깁니다.',
+
'Virtual keyboard':
'가상 키보드',
'uncheck to disable\nvirtual keyboard support\nfor mobile devices':
'체크해제하면, 모바일 기기에서\n가상 키보드를 사용할 수 없습니다.',
'check to enable\nvirtual keyboard support\nfor mobile devices':
'체크하면, 모바일 기기에서\n가상 키보드를 사용할 수 있습니다.',
+
'Input sliders':
'입력창에서 슬라이더 사용',
'uncheck to disable\ninput sliders for\nentry fields':
'체크해제하면, 입력창에서\n슬라이더를 사용할 수 없습니다.',
'check to enable\ninput sliders for\nentry fields':
'체크하면, 입력창에서\n슬라이더를 사용할 수 있습니다.',
+
'Clicking sound':
'블록 클릭시 소리',
'uncheck to turn\nblock clicking\nsound off':
'체크해제하면, 블록 클릭시\n소리가 꺼집니다.',
'check to turn\nblock clicking\nsound on':
'체크하면, 블록 클릭시\n소리가 켜집니다.',
+
+ 'Animations':
+ '애니메이션',
+ 'uncheck to disable\nIDE animations':
+ '체크해제하면, IDE 애니메이션을\n 사용할 수 없습니다.',
+
+ 'Turbo mode':
+ '터보 모드',
+ 'check to prioritize\nscript execution':
+ '체크하면, 스크립트를\n 빠르게 실행합니다.',
+ 'uncheck to run scripts\nat normal speed':
+ '체크해제하면, 스크립트 실행 속도를\n 보통으로 합니다.',
+
+ 'Flat design':
+ '플랫(Flat) 디자인',
+ 'uncheck for default\nGUI design':
+ '체크해제하면,\n 기본 GUI 디자인으로\n 변경합니다.',
+ 'check for alternative\nGUI design':
+ '체크하면, 플랫(Flat)\n 디자인으로 변경합니다.',
+
+ 'Sprite Nesting':
+ 'Sprite Nesting',
+ 'uncheck to disable\nsprite composition':
+ 'uncheck to disable\nsprite composition',
+ 'check to enable\nsprite composition':
+ 'check to enable\nsprite composition',
+
'Thread safe scripts':
'스레드 안전 스크립트',
- 'uncheck to allow\nscript reentrancy':
+ 'uncheck to allow\nscript reentrance':
'체크해제하면, 스크립트\n재진입성을 허락합니다.',
- 'check to disallow\nscript reentrancy':
+ 'check to disallow\nscript reentrance':
'체크하면, 스크립트\n재진입성을 허락하지 않습니다.',
+
+ 'Prefer smooth animations':
+ '자연스러운 애니메이션',
+ 'uncheck for greater speed\nat variable frame rates':
+ '체크해제하면, 프레임\n 전환 비율이 빨라집니다.',
+ 'check for smooth, predictable\nanimations across computers':
+ '체크하면, 애니메이션이\n 자연스러워 집니다.',
+
+ 'Flat line ends':
+ '선 끝을 평평하게 만들기',
+ 'check for flat ends of lines':
+ '체크하면, 선 끝을\n 평평하게 만듭니다.',
+ 'uncheck for round ends of lines':
+ '체크해제하면, 선 끝을\n 둥글게 만듭니다.',
+
+ 'Codification support':
+ '체계화 지원',
+ 'uncheck to disable\nblock to text mapping features':
+ 'uncheck to disable\nblock to text mapping features',
+ 'check for block\nto text mapping features':
+ '체크하면, check for block\nto text mapping features',
// inputs
'with inputs':
@@ -692,35 +906,55 @@ SnapTranslator.dict.ko = {
// context menus:
'help':
'도움말',
+
+ // palette:
+ 'find blocks...':
+ '블록 찾기...',
+ 'hide primitives':
+ '기본 블록 숨기기',
+ 'show primitives':
+ '기본 블록 보이기',
// blocks:
'help...':
'블록 도움말...',
+ 'relabel...':
+ '블록 바꾸기...',
'duplicate':
- '복사',
+ '복사하기',
'make a copy\nand pick it up':
- '복사해서\n그 블록을 들고 있습니다.',
+ '복사해서\n들고 있습니다.',
'delete':
- '삭제',
+ '삭제하기',
'script pic...':
- '스크립트 그림...',
+ '이 스크립트를 그림파일로 내보내기...',
'open a new window\nwith a picture of this script':
'이 스크립트 그림을\n새로운 윈도우에서 엽니다.',
'ringify':
- '형태변환',
+ '블록형태 변환하기',
+ 'unringify':
+ 'unringify',
// custom blocks:
'delete block definition...':
- '블록 삭제',
+ '블록 삭제하기',
'edit...':
'편집…',
// sprites:
'edit':
- '편집',
+ '스크립트 편집하기',
'export...':
'내보내기...',
+ // stage:
+ 'show all':
+ '모든 스프라이트 나타내기',
+ 'pic...':
+ '그림파일로 내보내기...',
+ 'open a new window\nwith a picture of the stage':
+ '새로운 창을 열고\n무대의 화면을\n그림파일로 저장한다.',
+
// scripting area
'clean up':
'스크립트 정리하기',
@@ -728,12 +962,20 @@ SnapTranslator.dict.ko = {
'스크립트를\n수직으로 정렬한다.',
'add comment':
'주석 추가하기',
+ 'undrop':
+ '마지막으로 가져온 블록',
+ 'undo the last\nblock drop\nin this pane':
+ '마지막으로\n 가져온 블록을\n 확인한다.',
+ 'scripts pic...':
+ '모든 스크립트를 그림파일로 내보내기...',
+ 'open a new window\nwith a picture of all scripts':
+ '새로운 창을 열어서\n 모든 스크립트를\n 그림으로 저장한다.',
'make a block...':
'블록 만들기...',
// costumes
'rename':
- '이름수정',
+ '이름 수정하기',
'export':
'내보내기',
@@ -750,7 +992,9 @@ SnapTranslator.dict.ko = {
// dialogs
// buttons
'OK':
- 'OK',
+ '확인',
+ 'Ok':
+ '확인',
'Cancel':
'취소',
'Yes':
@@ -762,6 +1006,31 @@ SnapTranslator.dict.ko = {
'Help':
'도움말',
+ // zoom blocks
+ 'Zoom blocks':
+ '블록 크기 설정',
+ 'build':
+ '만들기',
+ 'your own':
+ '나만의',
+ 'blocks':
+ '블록',
+ 'normal (1x)':
+ '기본 크기 (1x)',
+ 'demo (1.2x)':
+ '데모 크기 (1.2x)',
+ 'presentation (1.4x)':
+ '발표용 크기 (1.4x)',
+ 'big (2x)':
+ '큰 크기 (2x)',
+ 'huge (4x)':
+ '매우 큰 크기(4x)',
+ 'giant (8x)':
+ '정말 큰 크기 (8x)',
+ 'monstrous (10x)':
+ '믿을 수 없는 크기 (10x)',
+
+
// costume editor
'Costume Editor':
'모양 편집기',
@@ -822,7 +1091,7 @@ SnapTranslator.dict.ko = {
// block deletion dialog
'Delete Custom Block':
- '블록 삭제',
+ '블록 삭제하기',
'block deletion dialog text':
'이 블록과 모든 인스턴스를\n 삭제해도 괜찮습니까?',
@@ -911,6 +1180,8 @@ SnapTranslator.dict.ko = {
// coments
'add comment here...':
'여기에 주석 추가…',
+ 'comment pic...':
+ '주석을 그림파일로 내보내기...',
// drow downs
// directions
@@ -933,11 +1204,22 @@ SnapTranslator.dict.ko = {
// costumes
'Turtle':
- '터틀',
+ '화살표',
+ 'Empty':
+ 'Leer',
- // graphical effects
+ // graphical effects
+ 'brightness':
+ '밝기',
'ghost':
'유령',
+ 'negative':
+ '반전',
+ 'comic':
+ '코믹',
+ 'confetti':
+ '색종이',
+
// keys
'space':
@@ -1029,9 +1311,11 @@ SnapTranslator.dict.ko = {
// math functions
'abs':
- '절대값',
+ '절대값(abs)',
'sqrt':
- '제곱근',
+ '제곱근(sqrt)',
+ 'floor':
+ '바닥(floor)',
'sin':
'sin',
'cos':
@@ -1049,11 +1333,23 @@ SnapTranslator.dict.ko = {
'e^':
'e^',
+ // delimiters
+ 'letter':
+ '글자',
+ 'whitespace':
+ '빈칸',
+ 'line':
+ '줄',
+ 'tab':
+ '탭',
+ 'cr':
+ '새줄(cr)',
+
// data types
'number':
'숫자',
'text':
- '텍스트',
+ '문자',
'Boolean':
'불리언',
'list':
@@ -1087,12 +1383,12 @@ SnapTranslator.dict.ko = {
'Are you sure you want to delete':
'정말로 삭제합니까?',
'unringify':
- '형태변환취소',
+ '블록형태변환 취소하기',
'rename...':
'이름수정...',
'(180) down':
'(180) 아래',
'Ok':
- 'OK'
+ '확인'
};
diff --git a/lang-pt.js b/lang-pt.js
index cd3b5fed..2d3804ab 100755
--- a/lang-pt.js
+++ b/lang-pt.js
@@ -650,11 +650,12 @@ SnapTranslator.dict.pt = {
'Save As...':
'Guardar este projecto como…',
'Import...':
- 'Importar para este projecto…',
+ 'Importar…',
'file menu import hint':
- 'Importar para este projecto\num projecto exportado,\n'
- + 'uma biblioteca de blocos,\n'
- + 'um traje ou um som.',
+ 'Abrir um projecto exportado,\n'
+ + 'substitundo o projecto corrente, ou\n'
+ + 'importar uma biblioteca de blocos, um\n'
+ + 'traje ou um som para o projecto corrente.',
'Export project as plain text...':
'Exportar este projecto como texto simples…',
'Export project...':
@@ -1616,7 +1617,7 @@ SnapTranslator.dict.pt = {
'unshared.':
'deixado de partilhar.',
'Unshare':
- 'Deixar de Partilhar',
+ 'Não Partilhar',
'password has been changed.':
'a sua palavra-passe foi alterada.',
'SVG costumes are\nnot yet fully supported\nin every browser':
@@ -1641,6 +1642,18 @@ SnapTranslator.dict.pt = {
'Seleccionar um traje da biblioteca de média.',
'edit rotation point only...':
'editar apenas ponto de rotação…',
+ 'Export Project As...':
+ 'Exportar Projecto Como…',
+ 'a variable of name \'':
+ 'não existe uma variável «',
+ '\'\ndoes not exist in this context':
+ '»\nneste contexto',
+ '(temporary)':
+ '(temporária)',
+ 'expecting':
+ 'esperavam-se',
+ 'input(s), but getting':
+ 'argumento(s), mas foram passados',
// produção de código
'map %cmdRing to %codeKind %code':
diff --git a/lang-sv.js b/lang-sv.js
new file mode 100644
index 00000000..382f2bd4
--- /dev/null
+++ b/lang-sv.js
@@ -0,0 +1,1359 @@
+/*
+
+ lang-sv.js
+
+ Swedish translation for SNAP!
+
+ written by Erik A Olsson
+
+ Copyright (C) 2014 by Jens Mönig
+
+ This file is part of Snap!.
+
+ Snap! is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of
+ the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+
+
+
+ Note to Translators:
+ --------------------
+ At this stage of development, Snap! can be translated to any LTR language
+ maintaining the current order of inputs (formal parameters in blocks).
+
+ Translating Snap! is easy:
+
+
+ 1. Download
+
+ Download the sources and extract them into a local folder on your
+ computer:
+
+
+
+ Use the German translation file (named 'lang-de.js') as template for your
+ own translations. Start with editing the original file, because that way
+ you will be able to immediately check the results in your browsers while
+ you're working on your translation (keep the local copy of snap.html open
+ in your web browser, and refresh it as you progress with your
+ translation).
+
+
+ 2. Edit
+
+ Edit the translation file with a regular text editor, or with your
+ favorite JavaScript editor.
+
+ In the first non-commented line (the one right below this
+ note) replace "de" with the two-letter ISO 639-1 code for your language,
+ e.g.
+
+ fr - French => SnapTranslator.dict.fr = {
+ it - Italian => SnapTranslator.dict.it = {
+ pl - Polish => SnapTranslator.dict.pl = {
+ pt - Portuguese => SnapTranslator.dict.pt = {
+ es - Spanish => SnapTranslator.dict.es = {
+ el - Greek => => SnapTranslator.dict.el = {
+
+ etc. (see )
+
+
+ 3. Translate
+
+ Then work through the dictionary, replacing the German strings against
+ your translations. The dictionary is a straight-forward JavaScript ad-hoc
+ object, for review purposes it should be formatted as follows:
+
+ {
+ 'English string':
+ 'Translation string',
+ 'last key':
+ } 'last value'
+
+ and you only edit the indented value strings. Note that each key-value
+ pair needs to be delimited by a comma, but that there shouldn't be a comma
+ after the last pair (again, just overwrite the template file and you'll be
+ fine).
+
+ If something doesn't work, or if you're unsure about the formalities you
+ should check your file with
+
+
+
+ This will inform you about any missed commas etc.
+
+
+ 4. Accented characters
+
+ Depending on which text editor and which file encoding you use you can
+ directly enter special characters (e.g. Umlaut, accented characters) on
+ your keyboard. However, I've noticed that some browsers may not display
+ special characters correctly, even if other browsers do. So it's best to
+ check your results in several browsers. If you want to be on the safe
+ side, it's even better to escape these characters using Unicode.
+
+ see:
+
+
+ 5. Block specs:
+
+ At this time your translation of block specs will only work
+ correctly, if the order of formal parameters and their types
+ are unchanged. Placeholders for inputs (formal parameters) are
+ indicated by a preceding % prefix and followed by a type
+ abbreviation.
+
+ For example:
+
+ 'say %s for %n secs'
+
+ can currently not be changed into
+
+ 'say %n secs long %s'
+
+ and still work as intended.
+
+ Similarly
+
+ 'point towards %dst'
+
+ cannot be changed into
+
+ 'point towards %cst'
+
+ without breaking its functionality.
+
+
+ 6. Submit
+
+ When you're done, rename the edited file by replacing the "de" part of the
+ filename with the two-letter ISO 639-1 code for your language, e.g.
+
+ fr - French => lang-fr.js
+ it - Italian => lang-it.js
+ pl - Polish => lang-pl.js
+ pt - Portuguese => lang-pt.js
+ es - Spanish => lang-es.js
+ el - Greek => => lang-el.js
+
+ and send it to me for inclusion in the official Snap! distribution.
+ Once your translation has been included, Your name will the shown in the
+ "Translators" tab in the "About Snap!" dialog box, and you will be able to
+ directly launch a translated version of Snap! in your browser by appending
+
+ lang:xx
+
+ to the URL, xx representing your translations two-letter code.
+
+
+ 7. Known issues
+
+ In some browsers accents or ornaments located in typographic ascenders
+ above the cap height are currently (partially) cut-off.
+
+ Enjoy!
+ -Jens
+*/
+
+/*global SnapTranslator*/
+
+SnapTranslator.dict.sv = {
+
+/*
+ Special characters: (see )
+
+ å , \u00E5
+ ä , \u00E4
+ ö , \u00F6
+ Å , \u00C5
+ Ä ; \u00C4
+ Ö , \u00D6
+*/
+
+ // translations meta information
+ 'language_name':
+ 'svenska', // the name as it should appear in the language menu
+ 'language_translator':
+ 'Erik A Olsson', // your name for the Translators tab
+ 'translator_e-mail':
+ 'eolsson@gmail.com', // optional
+ 'last_changed':
+ '2014-11-01', // this, too, will appear in the Translators tab
+
+ // GUI
+ // control bar:
+ 'untitled':
+ 'namnl\u00F6s',
+ 'development mode':
+ 'utvecklarel\u00E4ge',
+
+ // categories:
+ 'Motion':
+ 'R\u00F6relse',
+ 'Looks':
+ 'Utseende',
+ 'Sound':
+ 'Ljud',
+ 'Pen':
+ 'Penna',
+ 'Control':
+ 'Kontroll',
+ 'Sensing':
+ 'K\u00E4nna av',
+ 'Operators':
+ 'Operatorer',
+ 'Variables':
+ 'Variabler',
+ 'Lists':
+ 'Listor',
+ 'Other':
+ 'Annat',
+
+ // editor:
+ 'draggable':
+ 'flyttbar',
+
+ // tabs:
+ 'Scripts':
+ 'Skript',
+ 'Costumes':
+ 'Kostymer',
+ 'Sounds':
+ 'Ljud',
+
+ // names:
+ 'Sprite':
+ 'Sprite',
+ 'Stage':
+ 'Scen',
+
+ // rotation styles:
+ 'don\'t rotate':
+ 'rotera inte',
+ 'can rotate':
+ 'rotera',
+ 'only face left/right':
+ 'peka bara h\u00F6ger/v\u00E4nster',
+
+ // new sprite button:
+ 'add a new Sprite':
+ 'l\u00E4gg till ny Sprite',
+
+ // tab help
+ 'costumes tab help':
+ 'importera en bild fr\u00E5n en annan webbsida eller fr\u00E5n\nen fil på din dator genom att dra den hit',
+
+ 'import a sound from your computer\nby dragging it into here':
+ 'importera en ljudfil fr\u00E5n din dator\ngenom att dra den hit',
+
+// primitive blocks:
+
+ /*
+ Attention Translators:
+ ----------------------
+ At this time your translation of block specs will only work
+ correctly, if the order of formal parameters and their types
+ are unchanged. Placeholders for inputs (formal parameters) are
+ indicated by a preceding % prefix and followed by a type
+ abbreviation.
+
+ For example:
+
+ 'say %s for %n secs'
+
+ can currently not be changed into
+
+ 'say %n secs long %s'
+
+ and still work as intended.
+
+ Similarly
+
+ 'point towards %dst'
+
+ cannot be changed into
+
+ 'point towards %cst'
+
+ without breaking its functionality.
+ */
+
+ // motion:
+ 'Stage selected:\nno motion primitives':
+ 'Scen vald:\ninga standard r\u00F6relser'
+ + 'finns',
+ 'move %n steps':
+ 'g\u00E5 %n steg',
+ 'turn %clockwise %n degrees':
+ 'v\u00E4nd %clockwise %n grader',
+ 'turn %counterclockwise %n degrees':
+ 'v\u00E4nd %counterclockwise %n grader',
+ 'point in direction %dir':
+ 'peka mot riktning %dir',
+ 'point towards %dst':
+ 'peka mot %dst',
+ 'go to x: %n y: %n':
+ 'g\u00E5 till x: %n y: %n',
+ 'go to %dst':
+ 'g\u00E5 till %dst',
+ 'glide %n secs to x: %n y: %n':
+ 'glid %n sek till x: %n y: %n',
+ 'change x by %n':
+ '\u00E4ndra x med %n',
+ 'set x to %n':
+ 's\u00E4tt x till %n',
+ 'change y by %n':
+ '\u00E4ndra y med %n',
+ 'set y to %n':
+ 's\u00E4tt y till %n',
+ 'if on edge, bounce':
+ 'studsa om vid kanten',
+ 'x position':
+ 'x-position',
+ 'y position':
+ 'y-position',
+ 'direction':
+ 'riktning',
+
+ // looks:
+ 'switch to costume %cst':
+ 'byt till kostym %cst',
+ 'next costume':
+ 'n\u00E4sta kostym',
+ 'costume #':
+ 'kostym nr.',
+ 'say %s for %n secs':
+ 's\u00E4g %s i %n sek',
+ 'say %s':
+ 's\u00E4g %s',
+ 'think %s for %n secs':
+ 't\u00E4nk %s i %n sek',
+ 'think %s':
+ 't\u00E4nk %s',
+ 'Hello!':
+ 'Hej!',
+ 'Hmm...':
+ 'Hmm...',
+ 'change %eff effect by %n':
+ '\u00E4ndra %eff -effekt med %n',
+ 'set %eff effect to %n':
+ 's\u00E4tt %eff -effekt til %n',
+ 'clear graphic effects':
+ 'nollst\u00E4ll grafiska effekter',
+ 'change size by %n':
+ '\u00E4ndra storlek med %n',
+ 'set size to %n %':
+ 's\u00E4tt storlek till %n %',
+ 'size':
+ 'storlek',
+ 'show':
+ 'visa',
+ 'hide':
+ 'g\u00F6m',
+ 'go to front':
+ 'l\u00E4gg \u00F6verst',
+ 'go back %n layers':
+ 'flytta %n lager bak\u00E5t',
+
+ 'development mode \ndebugging primitives:':
+ 'utvecklarl\u00E4ge \nDebugging av block',
+ 'console log %mult%s':
+ 'skriv till konsoll: %mult%s',
+ 'alert %mult%s':
+ 'Pop-up: %mult%s',
+
+ // sound:
+ 'play sound %snd':
+ 'spela ljud %snd',
+ 'play sound %snd until done':
+ 'spela ljud %snd tills f\u00E4rdig',
+ 'stop all sounds':
+ 'stoppa alla ljud',
+ 'rest for %n beats':
+ 'pausa %n slag',
+ 'play note %n for %n beats':
+ 'spela ton %n i %n slag',
+ 'change tempo by %n':
+ '\u00E4ndra tempo med %n',
+ 'set tempo to %n bpm':
+ 's\u00E4tt tempo till %n bpm',
+ 'tempo':
+ 'tempo',
+
+ // pen:
+ 'clear':
+ 'rensa',
+ 'pen down':
+ 'penna ned',
+ 'pen up':
+ 'penna upp',
+ 'set pen color to %clr':
+ 's\u00E4tt pennf\u00E4rg till %clr',
+ 'change pen color by %n':
+ '\u00E4ndra pennf\u00E4rg till %n',
+ 'set pen color to %n':
+ 's\u00E4tt penf\u00E4rg till %n',
+ 'change pen shade by %n':
+ '\u00E4ndra pennstyrka med %n',
+ 'set pen shade to %n':
+ 's\u00E4tt pennstyrka till %n',
+ 'change pen size by %n':
+ '\u00E4ndra penntjocklek med %n',
+ 'set pen size to %n':
+ 's\u00E4tt penntjocklek til %n',
+ 'stamp':
+ 'st\u00E4mpla',
+
+ // control:
+ 'when %greenflag clicked':
+ 'n\u00E4r %greenflag klickas p\u00E5',
+ 'when %key key pressed':
+ 'n\u00E4r tangent %key trycks ned',
+ 'when I am clicked':
+ 'n\u00E4r jag klickas p\u00E5',
+ 'when I receive %msg':
+ 'n\u00E4r jag tar emot meddelande %msg',
+ 'broadcast %msg':
+ 'skicka meddelande %msg',
+ 'broadcast %msg and wait':
+ 'skicka meddelande %msg och v\u00E4nta',
+ 'Message name':
+ 'Meddelandets namn',
+ 'wait %n secs':
+ 'v\u00E4nta %n sek',
+ 'wait until %b':
+ 'v\u00E4nta tills %b',
+ 'forever %c':
+ 'f\u00F6r alltid %c',
+ 'repeat %n %c':
+ 'upprepa %n g\u00E5nger %c',
+ 'repeat until %b %c':
+ 'upprepa tills %b %c',
+ 'if %b %c':
+ 'om %b %c',
+ 'if %b %c else %c':
+ 'om %b %c d\u00E5 %c',
+ 'report %s':
+ 'returnera %s',
+ 'stop block':
+ 'stoppa block',
+ 'stop script':
+ 'stoppa skript',
+ 'stop all %stop':
+ 'stoppa alla %stop',
+ 'pause all %pause':
+ 'pausa alla %pause',
+
+ 'run %cmdRing %inputs':
+ 'k\u00F6r %cmdRing med %inputs',
+ 'launch %cmdRing %inputs':
+ 'starta %cmdRing med %inputs',
+ 'call %repRing %inputs':
+ 'anropa %repRing med %inputs',
+ 'run %cmdRing w/continuation':
+ 'k\u00F6r %cmdRing och forts\u00E4tt',
+ 'call %cmdRing w/continuation':
+ 'anropa %cmdRing och forts\u00E4tt',
+ 'when I start as a clone':
+ 'n\u00E4r jag startar som klon',
+ 'create a clone of %cln':
+ 'skapa klon av %cln',
+ 'myself':
+ 'mig sj\u00E4lv',
+ 'delete this clone':
+ 'radera klon',
+
+
+ 'warp %c':
+ 'warp %c',
+
+ // sensing:
+ 'touching %col ?':
+ 'r\u00F6r %col ?',
+ 'touching %clr ?':
+ 'r\u00F6r %clr ?',
+ 'color %clr is touching %clr ?':
+ 'f\u00E4rgen %clr r\u00F6r %clr ?',
+ 'ask %s and wait':
+ 'fr\u00E5ga %s och v\u00E4nta',
+ 'what\'s your name?':
+ 'vad heter du?',
+ 'answer':
+ 'svar',
+ 'mouse x':
+ 'mus x-pos',
+ 'mouse y':
+ 'mus y-pos',
+ 'mouse down?':
+ 'musknapp nedtryckt?',
+ 'key %key pressed?':
+ 'tangent %key nedtryckt?',
+ 'distance to %dst':
+ 'avst\u00E5nd till %dst',
+ 'reset timer':
+ 'nollst\u00E4ll stoppur',
+ 'timer':
+ 'stoppur',
+ 'http:// %s':
+ 'http:// %s',
+
+ 'turbo mode?':
+ 'turbol\u00E4ge?',
+ 'set turbo mode to %b':
+ 's\u00E4tt turbol\u00E4ge till %b',
+
+
+ 'filtered for %clr':
+ 'filtrera p\u00E5 %clr',
+ 'stack size':
+ 'stack-storlek',
+ 'frames':
+ 'ramar',
+
+ // operators:
+ '%n mod %n':
+ '%n mod %n',
+ 'round %n':
+ 'avrunda %n',
+ '%fun av %n':
+ '%fun von %n',
+ 'pick random %n to %n':
+ 'slumptal fr\u00E5n %n till %n',
+ '%b and %b':
+ '%b och %b',
+ '%b or %b':
+ '%b eller %b',
+ 'not %b':
+ 'inte %b',
+ 'true':
+ 'sant',
+ 'false':
+ 'falskt',
+ 'join %words':
+ 'sl\u00E5 ihop %words',
+ 'hello':
+ 'hej',
+ 'world':
+ 'v\u00E4rlden',
+ 'letter %n of %s':
+ 'bokstav %n av %s',
+ 'length of %s':
+ 'l\u00E4ngden av %s',
+ 'unicode of %s':
+ 'unicode av %s',
+ 'unicode %n as letter':
+ 'unicode %n som bokstav',
+ 'is %s a %typ ?':
+ '%s \u00E4r %typ ?',
+ 'is %s identical to %s ?':
+ '%s identisk med %s ?',
+
+ 'type of %s':
+ 'type %s',
+
+ // variables:
+ 'Make a variable':
+ 'Ny variabel',
+ 'Variable name':
+ 'Variabelnamn',
+ 'Delete a variable':
+ 'Radera variabel',
+
+ 'set %var to %s':
+ 's\u00E4tt %var till %s',
+ 'change %var by %n':
+ '\u00E4ndra %var med %n',
+ 'show variable %var':
+ 'visa variabel %var',
+ 'hide variable %var':
+ 'g\u00F6m variabel %var',
+ 'script variables %scriptVars':
+ 'skriptvariabel %scriptVars',
+
+ // lists:
+ 'list %exp':
+ 'lista %exp',
+ '%s in front of %l':
+ '%s fr\u00E4mst i %l',
+ 'item %idx of %l':
+ 'element %idx i %l',
+ 'all but first of %l':
+ 'allt utom f\u00F6rsta i %l',
+ 'length of %l':
+ 'l\u00E4ngd av %l',
+ '%l contains %s':
+ '%l inneh\u00E5ller %s',
+ 'thing':
+ 'sak',
+ 'add %s to %l':
+ 'l\u00E4gg %s till %l',
+ 'delete %ida of %l':
+ 'radera %ida fr\u00E5n %l',
+ 'insert %s at %idx of %l':
+ 'l\u00E4gg in %s p\u00E5 plats %idx i lista %l',
+ 'replace item %idx of %l with %s':
+ 'ers\u00E4tt element %idx i %l med %s',
+
+ // other
+ 'Make a block':
+ 'Skapa nytt block',
+
+ // menus
+ // snap menu
+ 'About...':
+ 'Om Snap!...',
+ 'Snap! website':
+ 'Snap! webbsida',
+ 'Download source':
+ 'Ladda ner k\u00E4llkoden',
+ 'Switch back to user mode':
+ 'Tillbaka till anv\u00E4ndarl\u00E4ge',
+ 'disable deep-Morphic\ncontext menus\nand show user-friendly ones':
+ 'st\u00E4ng av Morphic\nmenyeroch visa \nanv\u00E4ndarv\u00E4nliga ist\u00E4llet',
+ 'Switch to dev mode':
+ 'Byt till utvecklarl\u00E4ge',
+ 'enable Morphic\ncontext menus\nand inspectors,\nnot user-friendly!':
+ 'aktivera Morphic menyer\noch inspektorer,\ninte anv\u00E4ndarv\u00E4nligt!',
+
+ // project menu
+ 'Project notes...':
+ 'Annoteringar...',
+ 'New':
+ 'Ny',
+ 'Open...':
+ '\u00D6ppna...',
+ 'Save':
+ 'Spara',
+ 'Save As...':
+ 'Spara som...',
+ 'Import...':
+ 'Importera...',
+ 'file menu import hint':
+ 'l\u00E4ser in ett exporterat projekt,\nett bibliotek med block,\nen kostym, eller ett ljud',
+ 'Export project as plain text ...':
+ 'Exportera projektet som vanlig text...',
+ 'Export project...':
+ 'Exportera projekt...',
+ 'show project data as XML\nin a new browser window':
+ 'visa projektdata som XML\ni ett ny f\u00F6nster',
+ 'Export blocks...':
+ 'Exportera block...',
+ 'show global custom block definitions as XML\nin a new browser window':
+ 'visa globala anpassade blockdefinitioner som XML\ni ett nytt f\u00F6nster',
+ 'Import tools...':
+ 'Importverktyg...',
+ 'load the official library of\npowerful blocks':
+ 'ladda ner det officiella\nsuperblock biblioteket ',
+ 'Libraries...':
+ 'Bibliotek...',
+ 'Import library':
+ 'Importera bibliotek',
+
+ // cloud menu
+ 'Login...':
+ 'Logga in...',
+ 'Registrer deg...':
+ 'Registrera dig...',
+
+ // settings menu
+ 'Language...':
+ 'Spr\u00E5k...',
+ 'Zoom blocks...':
+ 'F\u00F6rstora blocken...',
+ 'Blurred shadows':
+ 'Suddade skuggor',
+ 'uncheck to use solid drop\nshadows and highlights':
+ 'avmarkera f\u00F6r att anv\u00E4nda\nifyllda skuggor och belysningar',
+ 'check to use blurred drop\nshadows and highlights':
+ 'kryssa f\u00F6r att anv\u00E4nda\nsuddiga skuggor och belysningar',
+ 'Zebra coloring':
+ 'Zebraf\u00E4rg',
+ 'check to enable alternating\ncolors for nested blocks':
+ 'kryssa f\u00F6r att v\u00E4xla blockf\u00E4rger\ni nestlade block',
+ 'uncheck to disable alternating\ncolors for nested block':
+ 'avmarkera f\u00F6r att inaktivera v\u00E4xlade\nf\u00E4rger i nestlade block',
+ 'Dynamic input labels':
+ 'Dynamiska namn f\u00F6r indata',
+ 'uncheck to disable dynamic\nlabels for variadic inputs':
+ 'avmarkera f\u00F6r att inaktivera \ndynamiska namn f\u00F6r indata \nmed flera variabelf\u00E4lt',
+ 'check to enable dynamic\nlabels for variadic inputs':
+ 'kryssa f\u00F6r att aktivera \ndynamiska namn f\u00F6r indata \nmed flera variabelf\u00E4lt',
+ 'Prefer empty slot drops':
+ 'F\u00F6redra sl\u00E4pp p\u00E5 tomma utrymmen',
+ 'settings menu prefer empty slots hint':
+ 'Inst\u00E4llningar\nf\u00F6redra sl\u00E4pp p\u00E5 tomma utrymmen',
+ 'uncheck to allow dropped\nreporters to kick out others':
+ 'avmarkera f\u00F6r att till\u00E5ta placerade\n rappporterare att flytta ut andra',
+ 'Long form input dialog':
+ 'Komplett inmatningsf\u00F6nster',
+ 'check to always show slot\ntypes in the input dialog':
+ 'kryssa f\u00F6r att alltid visa\n alla typer i inmatningsf\u00F6nstret',
+ 'uncheck to use the input\ndialog in short form':
+ 'avmarkera f\u00F6r att visa lilla inmatningsf\u00F6nstret',
+ 'Virtual keyboard':
+ 'Virtuellt tangentbord',
+ 'uncheck to disable\nvirtual keyboard support\nfor mobile devices':
+ 'avmarkera f\u00F6r att inaktivera\nst\u00F6d f\u00F6r virtuellt \ntangentbord p\u00E5 mobila enheter',
+ 'check to enable\nvirtual keyboard support\nfor mobile devices':
+ 'kryssa f\u00F6r att aktivera\nst\u00F6d f\u00F6r virtuellt \ntangentbord p\u00E5 mobila enheter',
+ 'Input sliders':
+ 'Volymkontroller',
+ 'uncheck to disable\ninput sliders for\nentry fields':
+ 'avmarkera f\u00F6r att inaktivera \nvolymkontroller f\u00F6r inmatningsf\u00E4lt',
+ 'check to enable\ninput sliders for\nentry fields':
+ 'kryssa f\u00F6r att aktivera \nvolymkontroller f\u00F6r inmatningsf\u00E4lt',
+ 'Clicking sound':
+ 'Klickljud',
+ 'uncheck to turn\nblock clicking\nsound off':
+ 'avmarkera f\u00F6r att\n inaktivera klickljud',
+ 'check to turn\nblock clicking\nsound on':
+ 'kryssa f\u00F6r att aktivera klickljud',
+ 'Animations':
+ 'Animationer',
+ 'uncheck to disable\nIDE animations':
+ 'avmarkera f\u00F6r att st\u00E4nga\n av IDE-animationer',
+ 'Turbo mode':
+ 'Turbol\u00E4ge',
+ 'check to enable\nIDE animations':
+ 'kryssa f\u00F6r att aktivera\n IDE-animationer',
+ 'Thread safe scripts':
+ 'Tr\u00E5ds\u00E4kra skript',
+ 'uncheck to allow\nscript reentrancy':
+ 'avmarkera f\u00F6r att till\u00E5ta \nskript att \u00E5terintr\u00E4da',
+ 'check to disallow\nscript reentrancy':
+ 'kryssa f\u00F6r att f\u00F6rbjuda \nskript att \u00E5terintr\u00E4da',
+ 'Prefer smooth animations':
+ 'J\u00E4mna animeringar',
+ 'uncheck for greater speed\nat variable frame rates':
+ 'avmarkera f\u00F6r h\u00F6gre fart \nvid variabel frame rate',
+ 'check for smooth, predictable\nanimations across computers':
+ 'kryssa f\u00F6r j\u00E4mna animeringar\n p\u00E5 alla plattformar',
+// inputs
+ 'with inputs':
+ 'med indata',
+ 'input names:':
+ 'indatanamn:',
+ 'Input Names:':
+ 'Indatanamn:',
+ 'input list:':
+ 'indata lista:',
+
+ // context menus:
+ 'help':
+ 'hj\u00E4lp',
+
+ // blocks:
+ 'hjelp...':
+ 'hj\u00E4lp...',
+ 'relabel...':
+ 'd\u00F6p om...',
+ 'duplicate':
+ 'duplicera',
+ 'make a copy\nand pick it up':
+ 'g\u00F6r en kopia\noch plocka upp den',
+ 'only duplicate this block':
+ 'duplicera endast detta block',
+ 'delete':
+ 'radera',
+ 'script pic...':
+ 'skript bild...',
+ 'open a new window\nwith a picture of this script':
+ '\u00F6ppna ett nytt f\u00F6nster\nmed en bild av detta skript',
+ 'ringify':
+ 'ring runt',
+ 'unringify':
+ 'radera ringen runt',
+
+ // custom blocks:
+ 'delete block definition...':
+ 'radera blockdefinition...',
+ 'edit...':
+ 'redigera...',
+
+ // sprites:
+ 'edit':
+ 'redigera',
+ 'export...':
+ 'exportera...',
+
+ // stage:
+ 'show all':
+ 'visa allt',
+
+ // scripting area
+ 'clean up':
+ 'st\u00E4da',
+ 'arrange scripts\nvertically':
+ 'organisera skript\nvertikalt',
+ 'add comment':
+ 'l\u00E4gg till kommentar',
+ 'make a block...':
+ 'skapa nytt block...',
+
+ // costumes
+ 'rename':
+ 'd\u00F6p om',
+ 'export':
+ 'exportera',
+ 'rename costume':
+ 'd\u00F6p om kostymen',
+
+ // sounds
+ 'Play sound':
+ 'Spela ljud',
+ 'Stop sound':
+ 'Stoppa ljud',
+ 'Stop':
+ 'Stoppa',
+ 'Play':
+ 'Starta',
+ 'rename sound':
+ 'd\u00F6p om ljud',
+
+ // dialogs
+ // buttons
+ 'OK':
+ 'OK',
+ 'Ok':
+ 'OK',
+ 'Cancel':
+ 'Avbryt',
+ 'Yes':
+ 'Ja',
+ 'No':
+ 'Nej',
+
+ // help
+ 'Help':
+ 'Hj\u00E4lp',
+
+ // Project Manager
+ 'Untitled':
+ 'Namnl\u00F6s',
+ 'Open Project':
+ '\u00D6ppna projekt',
+ '(empty)':
+ '(tomt)',
+ 'Saved!':
+ 'Sparat!',
+ 'Delete Project':
+ 'Radera projekt',
+ 'Are you sure you want to delete':
+ '\u00C4r du s\u00E4ker p\u00E5 att du vill radera',
+ 'rename...':
+ 'd\u00F6p om...',
+
+ // costume editor
+ 'Costume Editor':
+ 'Kostymredigerare',
+ 'click or drag crosshairs to move the rotation center':
+ 'Klicka eller dra krysset f\u00F6r att markera mitten',
+
+ // project notes
+ 'Project Notes':
+ 'Annoteringar',
+
+ // new project
+ 'New Project':
+ 'Nytt projekt',
+ 'Replace the current project with a new one?':
+ 'Ers\u00E4tt aktuella projektet med ett nytt?',
+
+ // save project
+ 'Save Project As...':
+ 'Spara projekt som...',
+
+ // export blocks
+ 'Export blocks':
+ 'Exportera block',
+ 'Import blocks':
+ 'Importera block',
+ 'this project doesn\'t have any\ncustom global blocks yet':
+ 'Detta projekt saknar\negna globala block',
+ 'select':
+ 'v\u00E4lj',
+ 'all':
+ 'allt',
+ 'none':
+ 'ingenting',
+
+ // variable dialog
+ 'for all sprites':
+ 'f\u00F6r alla sprites',
+ 'for this sprite only':
+ 'bara f\u00F6r denna sprite',
+
+ // block dialog
+ 'Change block':
+ '\u00C4ndra block',
+ 'Command':
+ 'Kommando',
+ 'Reporter':
+ 'Funktion',
+ 'Predicate':
+ 'Predikat',
+
+ // block editor
+ 'Block Editor':
+ 'Blockredigerare',
+ 'Apply':
+ 'Verkst\u00E4ll',
+
+ // block deletion dialog
+ 'Delete Custom Block':
+ 'Radera custom blokk',
+ 'block deletion dialog text':
+ 'Skal denne blokken med alle dens instanser\n' +
+ 'bli slettet?',
+
+ // input dialog
+ 'Create input name':
+ 'Skapa indata-namn',
+ 'Edit input name':
+ 'Redigera indata-namn',
+ 'Edit label fragment':
+ 'Redigera etikettdel',
+ 'Title text':
+ 'Titel',
+ 'Input name':
+ 'Indata-namn',
+ 'Delete':
+ 'Radera',
+ 'Object':
+ 'Objekt',
+ 'Number':
+ 'Nummer',
+ 'Text':
+ 'Text',
+ 'List':
+ 'Lista',
+ 'Any type':
+ 'Valfri typ',
+ 'Boolean (T/F)':
+ 'Boolean (S/F)',
+ 'Command\n(inline)':
+ 'Kommando\n(inline)',
+ 'Command\n(C-shape)':
+ 'Kommando\n(C-Form)',
+ 'Any\n(unevaluated)':
+ 'Vilken som helst\n(oevaluerad)',
+ 'Boolean\n(unevaluated)':
+ 'Boolean\n(oevaluerad)',
+ 'Single input.':
+ 'Enkel indata.',
+ 'Default Value:':
+ 'Standardv\u00E4rde:',
+ 'Multiple inputs (value is list of inputs)':
+ 'Flera indata (v\u00E4rdet \u00E4r en lista av indata)',
+ 'Upvar - make internal variable visible to caller':
+ 'Upvar - g\u00F6r internal variabel synlig f\u00F6r anroparen',
+
+ // About Snap
+ 'About Snap':
+ 'Om Snap',
+ 'Back...':
+ 'Tillbaka...',
+ 'License...':
+ 'Licens...',
+ 'Modules...':
+ 'Moduler...',
+ 'Credits...':
+ 'Tack till...',
+ 'Translators...':
+ '\u00D6vers\u00E4ttare',
+ 'License':
+ 'Licens',
+ 'current module versions:':
+ 'Modulversioner',
+ 'Contributors':
+ 'Bidragsgivare',
+ 'Translations':
+ '\u00D6vers\u00E4ttningar',
+
+ // variable watchers
+ 'normal':
+ 'normal',
+ 'large':
+ 'stor',
+ 'slider':
+ 'volymkontroll',
+ 'slider min...':
+ 'volymkontroll min...',
+ 'slider max...':
+ 'volymkontroll max...',
+ 'import...':
+ 'importera...',
+ 'Slider minimum value':
+ 'Volymkontroll - minsta v\u00E4rde',
+ 'Slider maximum value':
+ 'volymkontroll - h\u00F6gsta v\u00E4rde',
+
+ // list watchers
+ 'length: ':
+ 'l\u00E4ngd: ',
+
+ // coments
+ 'add comment here...':
+ 'l\u00E4gg till kommentar h\u00E4r...',
+
+ // drow downs
+ // directions
+ '(90) right':
+ '(90) h\u00F6ger',
+ '(-90) left':
+ '(-90) v\u00E4nster',
+ '(0) up':
+ '(0) upp',
+ '(180) down':
+ '(180) ned',
+
+ // collision detection
+ 'mouse-pointer':
+ 'muspekare',
+ 'edge':
+ 'kant',
+ 'pen trails':
+ 'pennsp\u00E5r',
+
+ // costumes
+ 'Turtle':
+ 'Sk\u00F6ldpadda',
+
+ // graphical effects
+ 'ghost':
+ 'sp\u00F6k',
+
+ // keys
+ 'space':
+ 'mellanslag',
+ 'up arrow':
+ 'pil upp',
+ 'down arrow':
+ 'pil ned',
+ 'right arrow':
+ 'pil h\u00F6ger',
+ 'left arrow':
+ 'pil v\u00E4nster',
+ 'a':
+ 'a',
+ 'b':
+ 'b',
+ 'c':
+ 'c',
+ 'd':
+ 'd',
+ 'e':
+ 'e',
+ 'f':
+ 'f',
+ 'g':
+ 'g',
+ 'h':
+ 'h',
+ 'i':
+ 'i',
+ 'j':
+ 'j',
+ 'k':
+ 'k',
+ 'l':
+ 'l',
+ 'm':
+ 'm',
+ 'n':
+ 'n',
+ 'o':
+ 'o',
+ 'p':
+ 'p',
+ 'q':
+ 'q',
+ 'r':
+ 'r',
+ 's':
+ 's',
+ 't':
+ 't',
+ 'u':
+ 'u',
+ 'v':
+ 'v',
+ 'w':
+ 'w',
+ 'x':
+ 'x',
+ 'y':
+ 'y',
+ 'z':
+ 'z',
+ '0':
+ '0',
+ '1':
+ '1',
+ '2':
+ '2',
+ '3':
+ '3',
+ '4':
+ '4',
+ '5':
+ '5',
+ '6':
+ '6',
+ '7':
+ '7',
+ '8':
+ '8',
+ '9':
+ '9',
+
+ // messages
+ 'new...':
+ 'ny...',
+
+ // math functions
+ 'abs':
+ 'abs',
+ 'sqrt':
+ 'kvadratrot',
+ 'sin':
+ 'sin',
+ 'cos':
+ 'cos',
+ 'tan':
+ 'tan',
+ 'asin':
+ 'arc-1',
+ 'acos':
+ 'cos-1',
+ 'atan':
+ 'tan-1',
+ 'ln':
+ 'ln',
+ 'e^':
+ 'e^',
+
+ // data types
+ 'number':
+ 'nummer',
+ 'text':
+ 'text',
+ 'Boolean':
+ 'boolean',
+ 'list':
+ 'lista',
+ 'command':
+ 'kommando',
+ 'reporter':
+ 'funktionsblock',
+ 'predicate':
+ 'predikat',
+
+ // list indices
+ 'last':
+ 'sista',
+ 'any':
+ 'vilken som helst',
+
+ // missing labels from initial translation added below
+ 'add a new sprite':
+ 'ny sprite',
+ 'when %keyHat key pressed':
+ 'n\u00E4r tangent %keyHat trycks ned',
+ 'when I receive %msgHat':
+ 'n\u00E4r jag tar emot %msgHat',
+ 'message':
+ 'meddelande',
+ 'any message':
+ 'n\u00E5got meddelande',
+ 'stop %stopChoices':
+ 'stoppa %stopChoices',
+ 'this script':
+ 'detta skript',
+ 'this block':
+ 'detta block',
+ 'stop %stopOthersChoices':
+ 'stoppa %stopOthersChoices',
+ 'all but this script':
+ 'alla f\u00F6rutom detta skript',
+ 'other scripts in sprite':
+ 'andra skript i denna sprite',
+ '%att of %spr':
+ '%att av %spr',
+ '%fun of %n':
+ '%fun av %n',
+ 'split %s by %delim':
+ 'dela %s med tecken %delim',
+ 'Script variable name':
+ 'Skriptvariabelnamn',
+ 'Reference manual':
+ 'Referensbok',
+ 'Export project as plain text...':
+ 'Exportera projektet som vanlig text...',
+ 'Import tools':
+ 'Importverktyg',
+ 'Signup...':
+ 'Registrera...',
+ 'Stage size...':
+ 'Scenstorlek...',
+ 'Stage size':
+ 'Scenstorlek',
+ 'Stage width':
+ 'Scenbredd',
+ 'Stage height':
+ 'Scenh\u00F6jd',
+ 'Default':
+ 'Standard',
+ 'Plain prototype labels':
+ 'Vanliga prototypetiketter',
+ 'uncheck to always show (+) symbols\nin block prototype labels':
+ 'avmarkera f\u00F6r att visa (+) symboler \n i blockprototypetiketter',
+ 'check to hide (+) symbols\nin block prototype labels':
+ 'kryssa f\u00F6r att visa (+) symboler \n i blockprototypetiketter',
+ 'check to prioritize\nscript execution':
+ 'kryssa f\u00F6r att prioritera \nskriptexekvering',
+ 'uncheck to run scripts\nat normal speed':
+ 'avmarkera f\u00F6r att k\u00F6ra \nskript vid normal hastighet',
+ 'uncheck to allow\nscript reentrance':
+ 'avmarkera f\u00F6r att till\u00E5ta \nskript att \u00E5tertilltr\u00E4da',
+ 'check to disallow\nscript reentrance':
+ 'kryssa f\u00F6r att f\u00F6rbjuda \nskript att \u00E5tertilltr\u00E4da',
+ 'Flat line ends':
+ 'Platta streckslut',
+ 'check for flat ends of lines':
+ 'kryssa f\u00F6r platta streckslut',
+ 'uncheck for round ends of lines':
+ 'avmarkera f\u00F6r avrundade streckslut',
+ 'hide primitives':
+ 'g\u00F6m primitiva',
+ 'show primitives':
+ 'visa primitiva',
+ 'help...':
+ 'hj\u00E4lp...',
+ 'move':
+ 'flytta',
+ 'detach from':
+ 'koppla bort',
+ 'detach all parts':
+ 'koppla bort alla delar',
+ 'pic...':
+ 'bild...',
+ 'open a new window\nwith a picture of the stage':
+ '\u00F6ppna ett nytt f\u00F6nster\nmed en bild av scenen',
+ 'undrop':
+ '\u00E5ngra sl\u00E4pp',
+ 'undo the last\nblock drop\nin this pane':
+ '\u00E5ngra sista \nblocksl\u00E4ppet i\ndetta omr\u00E5de',
+ 'scripts pic...':
+ 'skriptbild...',
+ 'open a new window\nwith a picture of all scripts':
+ '\u00F6ppna ett nytt f\u00F6nster\nmed en bild p\u00E5 alla skript',
+ 'Zoom blocks':
+ 'F\u00F6rstora blocken',
+ 'build':
+ 'bygg',
+ 'your own':
+ 'dina egna',
+ 'blocks':
+ 'block',
+ 'normal (1x)':
+ 'normal (1x)',
+ 'demo (1.2x)':
+ 'demo (1.2x)',
+ 'presentation (1.4x)':
+ 'presentation (1.4x)',
+ 'big (2x)':
+ 'stor (2x)',
+ 'huge (4x)':
+ 'j\u00E4ttestor (4x)',
+ 'giant (8x)':
+ 'enorm (8x)',
+ 'monstrous (10x)':
+ 'gigantisk (10x)',
+ 'Empty':
+ 'Tom',
+ 'brightness':
+ 'ljusstyrke',
+ 'negative':
+ 'negativ',
+ 'comic':
+ 'komisk',
+ 'confetti':
+ 'konfetti',
+ 'floor':
+ 'golv',
+ 'letter':
+ 'bokstav',
+ 'whitespace':
+ 'mellanslag',
+ 'line':
+ 'rad',
+ 'tab':
+ 'tab',
+ 'cr':
+ 'retur',
+ 'warp %c':
+ 'snabbspola %c',
+ 'Reset Password...':
+ 'Nollst\u00E4ll l\u00F6senord...',
+ 'Codification support':
+ 'St\u00F6d f\u00F6r textprogrammering',
+ 'Flat design':
+ 'Platt utseende',
+ 'check for block\nto text mapping features':
+ 'kryssa f\u00F6r att aktivera\nblock-till-text funktioner',
+ 'uncheck to disable\nblock to text mapping features':
+ 'avmarkera f\u00F6r att inaktivera\nblock-till-text funktioner',
+ 'check for alternative\nGUI design':
+ 'kryssa f\u00F6r att aktivera ett\nalternativt utseende',
+ 'uncheck for default\nGUI design':
+ 'avmarkera f\u00F6r att byta\ntill standardutseendet',
+ 'Select categories of additional blocks to add to this project.':
+ 'v\u00E4lj grupper av extrablock att l\u00E4gga till i projektet',
+ 'Select a costume from the media library':
+ 'v\u00E4lj en kostym fr\u00E5n mediabiblioteket',
+ 'Select a sound from the media library':
+ 'v\u00E4lj ett ljud fr\u00E5n mediabiblioteket',
+ 'Iteration, composition':
+ 'Upprepning, komposition',
+ 'List utilities':
+ 'Listverktyg',
+ 'Streams (lazy lists)':
+ 'Str\u00F6mmar (lata listor)',
+ 'Variadic reporters':
+ 'Variabla rapporterare',
+ 'Words, sentences':
+ 'Ord, meningar',
+ 'Paint a new costume':
+ 'Rita en ny kostym',
+ 'add a new Turtle sprite':
+ 'l\u00E4gg till en ny Sk\u00F6ldpadda-sprite',
+ 'paint a new sprite':
+ 'rita en ny sprite',
+ 'Paint Editor':
+ 'Rita',
+ 'undo':
+ '\u00E5ngra',
+ 'grow':
+ 'st\u00F6rre',
+ 'shrink':
+ 'mindre',
+ 'flip ↔':
+ 'v\u00E4nd ↔',
+ 'flip ↕':
+ 'v\u00E4nd ↕',
+ 'Brush size':
+ 'Pennstorlek',
+ 'Constrain proportions of shapes?\n(you can also hold shift)':
+ 'Beh\u00E5ll figurernas proportioner?\n(du kan ocks\u00E5 h\u00E5lla skift nedtryckt)'
+
+};
diff --git a/lists.js b/lists.js
index a4aff6c8..bd856fe4 100644
--- a/lists.js
+++ b/lists.js
@@ -61,7 +61,7 @@ PushButtonMorph, SyntaxElementMorph, Color, Point, WatcherMorph,
StringMorph, SpriteMorph, ScrollFrameMorph, CellMorph, ArrowMorph,
MenuMorph, snapEquals, Morph, isNil, localize, MorphicPreferences*/
-modules.lists = '2014-July-28';
+modules.lists = '2014-November-20';
var List;
var ListWatcherMorph;
@@ -125,6 +125,9 @@ List.prototype.changed = function () {
List.prototype.cons = function (car, cdr) {
var answer = new List();
+ if (!(cdr instanceof List || isNil(cdr))) {
+ throw new Error("cdr isn't a list: " + cdr);
+ }
answer.first = isNil(car) ? null : car;
answer.rest = cdr || null;
answer.isLinked = true;
diff --git a/locale.js b/locale.js
index 2db2e1f3..5ec6013e 100644
--- a/locale.js
+++ b/locale.js
@@ -6,7 +6,7 @@
written by Jens Mönig
- Copyright (C) 2014 by Jens Mönig
+ Copyright (C) 2015 by Jens Mönig
This file is part of Snap!.
@@ -42,7 +42,7 @@
/*global modules, contains*/
-modules.locale = '2014-October-01';
+modules.locale = '2015-January-21';
// Global stuff
@@ -157,11 +157,11 @@ SnapTranslator.dict.it = {
'language_name':
'Italiano',
'language_translator':
- 'Stefano Federici',
+ 'Stefano Federici, Alberto Firpo',
'translator_e-mail':
- 's_federici@yahoo.com',
+ 's_federici@yahoo.com, albertofirpo12@gmail.com',
'last_changed':
- '2013-04-08'
+ '2015-01-12'
};
SnapTranslator.dict.ja = {
@@ -195,9 +195,9 @@ SnapTranslator.dict.ko = {
'language_translator':
'Yunjae Jang',
'translator_e-mail':
- 'yunjae.jang@inc.korea.ac.kr',
+ 'janggoons@gmail.com',
'last_changed':
- '2012-11-18'
+ '2015-01-21'
};
SnapTranslator.dict.pt = {
@@ -375,9 +375,9 @@ SnapTranslator.dict.ca = {
'language_translator':
'Bernat Romagosa Carrasquer',
'translator_e-mail':
- 'tibabenfortlapalanca@gmail.com',
+ 'bromagosa@citilab.eu',
'last_changed':
- '2013-11-26'
+ '2015-01-21'
};
SnapTranslator.dict.fi = {
@@ -392,6 +392,18 @@ SnapTranslator.dict.fi = {
'2014-04-18'
};
+SnapTranslator.dict.sv = {
+ // meta information
+ 'language_name':
+ 'svenska',
+ 'language_translator':
+ 'Erik A. Olsson',
+ 'translator_e-mail':
+ 'eolsson@gmail.com',
+ 'last_changed':
+ '2014-12-14'
+};
+
SnapTranslator.dict.pt_BR = {
// meta information
'language_name':
@@ -415,3 +427,15 @@ SnapTranslator.dict.bn = {
'last_changed':
'2014-07-02'
};
+
+SnapTranslator.dict.kn = {
+ // translations meta information
+ 'language_name':
+ '\u0C95\u0CA8\u0CCD\u0CA8\u0CA1',
+ 'language_translator':
+ 'Vinayakumar R',
+ 'translator_e-mail':
+ 'vnkmr7620@gmail.com',
+ 'last_changed':
+ '2014-12-02'
+};
diff --git a/manifest.mf b/manifest.mf
index 353d47f0..d0409612 100644
--- a/manifest.mf
+++ b/manifest.mf
@@ -10,5 +10,4 @@ threads.js
widgets.js
store.js
xml.js
-scriptsPaneTexture.gif
-snap_logo_sm.gif
+snap_logo_sm.png
diff --git a/morphic.js b/morphic.js
index 4e184820..96168972 100644
--- a/morphic.js
+++ b/morphic.js
@@ -464,9 +464,15 @@
MyMorph.prototype.mouseMove = function(pos) {};
- The only optional parameter of such a method is a Point object
+ All of these methods have as optional parameter a Point object
indicating the current position of the Hand inside the World's
- coordinate system.
+ coordinate system. The
+
+ mouseMove(pos, button)
+
+ event method has an additional optional parameter indicating the
+ currently pressed mouse button, which is either 'left' or 'right'.
+ You can use this to let users interact with 3D environments.
Events may be "bubbled" up a morph's owner chain by calling
@@ -1035,7 +1041,7 @@
/*global window, HTMLCanvasElement, getMinimumFontHeight, FileReader, Audio,
FileList, getBlurredShadowSupport*/
-var morphicVersion = '2014-September-30';
+var morphicVersion = '2014-December-05';
var modules = {}; // keep track of additional loaded modules
var useBlurredShadows = getBlurredShadowSupport(); // check for Chrome-bug
@@ -1925,7 +1931,9 @@ Rectangle.prototype.round = function () {
Rectangle.prototype.spread = function () {
// round me by applying floor() to my origin and ceil() to my corner
- return this.origin.floor().corner(this.corner.ceil());
+ // expand by 1 to be on the safe side, this eliminates rounding
+ // artefacts caused by Safari's auto-scaling on retina displays
+ return this.origin.floor().corner(this.corner.ceil()).expandBy(1);
};
Rectangle.prototype.amountToTranslateWithin = function (aRect) {
@@ -3972,6 +3980,7 @@ PenMorph.prototype.init = function () {
this.size = 1;
this.wantsRedraw = false;
this.penPoint = 'tip'; // or 'center"
+ this.penBounds = null; // rect around the visible arrow shape
HandleMorph.uber.init.call(this);
this.setExtent(new Point(size, size));
@@ -3994,11 +4003,9 @@ PenMorph.prototype.changed = function () {
// PenMorph display:
PenMorph.prototype.drawNew = function (facing) {
-/*
- my orientation can be overridden with the "facing" parameter to
- implement Scratch-style rotation styles
+ // my orientation can be overridden with the "facing" parameter to
+ // implement Scratch-style rotation styles
-*/
var context, start, dest, left, right, len,
direction = facing || this.heading;
@@ -4021,6 +4028,15 @@ PenMorph.prototype.drawNew = function (facing) {
right = start.distanceAngle(len * 0.33, direction - 230);
}
+ // cache penBounds
+ this.penBounds = new Rectangle(
+ Math.min(start.x, dest.x, left.x, right.x),
+ Math.min(start.y, dest.y, left.y, right.y),
+ Math.max(start.x, dest.x, left.x, right.x),
+ Math.max(start.y, dest.y, left.y, right.y)
+ );
+
+ // draw arrow shape
context.fillStyle = this.color.toString();
context.beginPath();
@@ -4037,7 +4053,6 @@ PenMorph.prototype.drawNew = function (facing) {
context.lineWidth = 1;
context.stroke();
context.fill();
-
};
// PenMorph access:
@@ -5754,7 +5769,7 @@ SliderMorph.prototype.rangeSize = function () {
};
SliderMorph.prototype.ratio = function () {
- return this.size / this.rangeSize();
+ return this.size / (this.rangeSize() + 1);
};
SliderMorph.prototype.unitSize = function () {
@@ -9346,11 +9361,11 @@ HandMorph.prototype.init = function (aWorld) {
this.world = aWorld;
this.mouseButton = null;
this.mouseOverList = [];
- this.mouseDownMorph = null;
this.morphToGrab = null;
this.grabOrigin = null;
this.temporaries = [];
this.touchHoldTimeout = null;
+ this.contextMenuEnabled = false;
};
HandMorph.prototype.changed = function () {
@@ -9494,9 +9509,10 @@ HandMorph.prototype.drop = function () {
*/
HandMorph.prototype.processMouseDown = function (event) {
- var morph, expectedClick, actualClick;
+ var morph, actualClick;
this.destroyTemporaries();
+ this.contextMenuEnabled = true;
this.morphToGrab = null;
if (this.children.length !== 0) {
this.drop();
@@ -9529,15 +9545,9 @@ HandMorph.prototype.processMouseDown = function (event) {
if (event.button === 2 || event.ctrlKey) {
this.mouseButton = 'right';
actualClick = 'mouseDownRight';
- expectedClick = 'mouseClickRight';
} else {
this.mouseButton = 'left';
actualClick = 'mouseDownLeft';
- expectedClick = 'mouseClickLeft';
- }
- this.mouseDownMorph = morph;
- while (!this.mouseDownMorph[expectedClick]) {
- this.mouseDownMorph = this.mouseDownMorph.parent;
}
while (!morph[actualClick]) {
morph = morph.parent;
@@ -9596,7 +9606,7 @@ HandMorph.prototype.processMouseUp = function () {
expectedClick = 'mouseClickLeft';
} else {
expectedClick = 'mouseClickRight';
- if (this.mouseButton) {
+ if (this.mouseButton && this.contextMenuEnabled) {
context = morph;
contextMenu = context.contextMenu();
while ((!contextMenu) &&
@@ -9654,16 +9664,18 @@ HandMorph.prototype.processMouseMove = function (event) {
// mouseOverNew = this.allMorphsAtPointer();
mouseOverNew = this.morphAtPointer().allParents();
- if ((this.children.length === 0) &&
- (this.mouseButton === 'left')) {
+ if (!this.children.length && this.mouseButton) {
topMorph = this.morphAtPointer();
morph = topMorph.rootForGrab();
if (topMorph.mouseMove) {
- topMorph.mouseMove(pos);
+ topMorph.mouseMove(pos, this.mouseButton);
+ if (this.mouseButton === 'right') {
+ this.contextMenuEnabled = false;
+ }
}
// if a morph is marked for grabbing, just grab it
- if (this.morphToGrab) {
+ if (this.mouseButton === 'left' && this.morphToGrab) {
if (this.morphToGrab.isDraggable) {
morph = this.morphToGrab;
this.grab(morph);
diff --git a/objects.js b/objects.js
index 4be213ae..b433a83c 100644
--- a/objects.js
+++ b/objects.js
@@ -9,7 +9,7 @@
written by Jens Mönig
jens@moenig.org
- Copyright (C) 2014 by Jens Mönig
+ Copyright (C) 2015 by Jens Mönig
This file is part of Snap!.
@@ -125,7 +125,7 @@ PrototypeHatBlockMorph*/
// Global stuff ////////////////////////////////////////////////////////
-modules.objects = '2014-October-08';
+modules.objects = '2015-January-28';
var SpriteMorph;
var StageMorph;
@@ -793,6 +793,12 @@ SpriteMorph.prototype.initBlocks = function () {
category: 'sensing',
spec: 'frames'
},
+ reportThreadCount: {
+ dev: true,
+ type: 'reporter',
+ category: 'sensing',
+ spec: 'processes'
+ },
doAsk: {
type: 'command',
category: 'sensing',
@@ -1151,6 +1157,13 @@ SpriteMorph.prototype.initBlocks = function () {
category: 'lists',
spec: 'map %repRing over %l'
},
+ doForEach: {
+ dev: true,
+ type: 'command',
+ category: 'lists',
+ spec: 'for %upvar in %l %cs',
+ defaults: [localize('each item')]
+ },
// Code mapping - experimental
doMapCodeOrHeader: { // experimental
@@ -1302,6 +1315,7 @@ SpriteMorph.prototype.init = function (globals) {
this.anchor = null;
this.nestingScale = 1;
this.rotatesWithAnchor = true;
+ this.layers = null; // cache for dragging nested sprites, don't serialize
this.blocksCache = {}; // not to be serialized (!)
this.paletteCache = {}; // not to be serialized (!)
@@ -1674,6 +1688,20 @@ SpriteMorph.prototype.blockTemplates = function (category) {
return menu;
}
+ function addVar(pair) {
+ if (pair) {
+ if (myself.variables.silentFind(pair[0])) {
+ myself.inform('that name is already in use');
+ } else {
+ myself.addVariable(pair[0], pair[1]);
+ myself.toggleVariableWatcher(pair[0], pair[1]);
+ myself.blocksCache[cat] = null;
+ myself.paletteCache[cat] = null;
+ myself.parentThatIsA(IDE_Morph).refreshPalette();
+ }
+ }
+ }
+
if (cat === 'motion') {
blocks.push(block('forward'));
@@ -1897,6 +1925,8 @@ SpriteMorph.prototype.blockTemplates = function (category) {
txt.setColor(this.paletteTextColor);
blocks.push(txt);
blocks.push('-');
+ blocks.push(watcherToggle('reportThreadCount'));
+ blocks.push(block('reportThreadCount'));
blocks.push(block('colorFiltered'));
blocks.push(block('reportStackSize'));
blocks.push(block('reportFrameCount'));
@@ -1967,15 +1997,7 @@ SpriteMorph.prototype.blockTemplates = function (category) {
function () {
new VariableDialogMorph(
null,
- function (pair) {
- if (pair && !myself.variables.silentFind(pair[0])) {
- myself.addVariable(pair[0], pair[1]);
- myself.toggleVariableWatcher(pair[0], pair[1]);
- myself.blocksCache[cat] = null;
- myself.paletteCache[cat] = null;
- myself.parentThatIsA(IDE_Morph).refreshPalette();
- }
- },
+ addVar,
myself
).prompt(
'Variable name',
@@ -2057,6 +2079,8 @@ SpriteMorph.prototype.blockTemplates = function (category) {
blocks.push(txt);
blocks.push('-');
blocks.push(block('reportMap'));
+ blocks.push('-');
+ blocks.push(block('doForEach'));
}
/////////////////////////////////
@@ -2164,8 +2188,8 @@ SpriteMorph.prototype.freshPalette = function (category) {
var defs = SpriteMorph.prototype.blocks,
hiddens = StageMorph.prototype.hiddenPrimitives;
return Object.keys(hiddens).some(function (any) {
- return defs[any].category === category ||
- contains((more[category] || []), any);
+ return !isNil(defs[any]) && (defs[any].category === category
+ || contains((more[category] || []), any));
});
}
@@ -2204,7 +2228,7 @@ SpriteMorph.prototype.freshPalette = function (category) {
var hiddens = StageMorph.prototype.hiddenPrimitives,
defs = SpriteMorph.prototype.blocks;
Object.keys(hiddens).forEach(function (sel) {
- if (defs[sel].category === category) {
+ if (defs[sel] && (defs[sel].category === category)) {
delete StageMorph.prototype.hiddenPrimitives[sel];
}
});
@@ -2619,7 +2643,9 @@ SpriteMorph.prototype.userMenu = function () {
menu.addItem("duplicate", 'duplicate');
menu.addItem("delete", 'remove');
menu.addItem("move", 'move');
- menu.addItem("edit", 'edit');
+ if (!this.isClone) {
+ menu.addItem("edit", 'edit');
+ }
menu.addLine();
if (this.anchor) {
menu.addItem(
@@ -2635,6 +2661,7 @@ SpriteMorph.prototype.userMenu = function () {
};
SpriteMorph.prototype.exportSprite = function () {
+ if (this.isCoone) {return; }
var ide = this.parentThatIsA(IDE_Morph);
if (ide) {
ide.exportSprite(this);
@@ -2731,7 +2758,7 @@ SpriteMorph.prototype.setColor = function (aColor) {
var x = this.xPosition(),
y = this.yPosition();
if (!this.color.eq(aColor)) {
- this.color = aColor;
+ this.color = aColor.copy();
this.drawNew();
this.gotoXY(x, y);
}
@@ -3128,13 +3155,11 @@ SpriteMorph.prototype.positionTalkBubble = function () {
bubble.changed();
};
-// dragging and dropping adjustments b/c of talk bubbles
+// dragging and dropping adjustments b/c of talk bubbles and parts
SpriteMorph.prototype.prepareToBeGrabbed = function (hand) {
- var bubble = this.talkBubble();
- if (!bubble) {return null; }
this.removeShadow();
- bubble.hide();
+ this.recordLayers();
if (!this.bounds.containsPoint(hand.position())) {
this.setCenter(hand.position());
}
@@ -3142,6 +3167,7 @@ SpriteMorph.prototype.prepareToBeGrabbed = function (hand) {
};
SpriteMorph.prototype.justDropped = function () {
+ this.restoreLayers();
this.positionTalkBubble();
};
@@ -3232,8 +3258,11 @@ SpriteMorph.prototype.setCenter = function (aPoint, justMe) {
SpriteMorph.prototype.nestingBounds = function () {
// same as fullBounds(), except that it uses "parts" instead of children
- var result;
- result = this.bounds;
+ // and special cases the costume-less "arrow" shape's bounding box
+ var result = this.bounds;
+ if (!this.costume && this.penBounds) {
+ result = this.penBounds.translateBy(this.position());
+ }
this.parts.forEach(function (part) {
if (part.isVisible) {
result = result.merge(part.nestingBounds());
@@ -3504,6 +3533,7 @@ SpriteMorph.prototype.mouseClickLeft = function () {
};
SpriteMorph.prototype.mouseDoubleClick = function () {
+ if (this.isClone) {return; }
this.edit();
};
@@ -3561,6 +3591,16 @@ SpriteMorph.prototype.reportMouseY = function () {
return 0;
};
+// SpriteMorph thread count (for debugging)
+
+SpriteMorph.prototype.reportThreadCount = function () {
+ var stage = this.parentThatIsA(StageMorph);
+ if (stage) {
+ return stage.threads.processes.length;
+ }
+ return 0;
+};
+
// SpriteMorph variable watchers (for palette checkbox toggling)
SpriteMorph.prototype.findVariableWatcher = function (varName) {
@@ -4005,6 +4045,33 @@ SpriteMorph.prototype.allAnchors = function () {
return result;
};
+SpriteMorph.prototype.recordLayers = function () {
+ var stage = this.parentThatIsA(StageMorph);
+ if (!stage) {
+ this.layerCache = null;
+ return;
+ }
+ this.layers = this.allParts();
+ this.layers.forEach(function (part) {
+ var bubble = part.talkBubble();
+ if (bubble) {bubble.hide(); }
+ });
+ this.layers.sort(function (x, y) {
+ return stage.children.indexOf(x) < stage.children.indexOf(y) ?
+ -1 : 1;
+ });
+};
+
+SpriteMorph.prototype.restoreLayers = function () {
+ if (this.layers && this.layers.length > 1) {
+ this.layers.forEach(function (sprite) {
+ sprite.comeToFront();
+ sprite.positionTalkBubble();
+ });
+ }
+ this.layers = null;
+};
+
// SpriteMorph highlighting
SpriteMorph.prototype.addHighlight = function (oldHighlight) {
@@ -4858,6 +4925,20 @@ StageMorph.prototype.blockTemplates = function (category) {
);
}
+ function addVar(pair) {
+ if (pair) {
+ if (myself.variables.silentFind(pair[0])) {
+ myself.inform('that name is already in use');
+ } else {
+ myself.addVariable(pair[0], pair[1]);
+ myself.toggleVariableWatcher(pair[0], pair[1]);
+ myself.blocksCache[cat] = null;
+ myself.paletteCache[cat] = null;
+ myself.parentThatIsA(IDE_Morph).refreshPalette();
+ }
+ }
+ }
+
if (cat === 'motion') {
txt = new TextMorph(localize(
@@ -5027,6 +5108,8 @@ StageMorph.prototype.blockTemplates = function (category) {
txt.setColor(this.paletteTextColor);
blocks.push(txt);
blocks.push('-');
+ blocks.push(watcherToggle('reportThreadCount'));
+ blocks.push(block('reportThreadCount'));
blocks.push(block('colorFiltered'));
blocks.push(block('reportStackSize'));
blocks.push(block('reportFrameCount'));
@@ -5099,15 +5182,7 @@ StageMorph.prototype.blockTemplates = function (category) {
function () {
new VariableDialogMorph(
null,
- function (pair) {
- if (pair && !myself.variables.silentFind(pair[0])) {
- myself.addVariable(pair[0], pair[1]);
- myself.toggleVariableWatcher(pair[0], pair[1]);
- myself.blocksCache[cat] = null;
- myself.paletteCache[cat] = null;
- myself.parentThatIsA(IDE_Morph).refreshPalette();
- }
- },
+ addVar,
myself
).prompt(
'Variable name',
@@ -5183,6 +5258,8 @@ StageMorph.prototype.blockTemplates = function (category) {
blocks.push(txt);
blocks.push('-');
blocks.push(block('reportMap'));
+ blocks.push('-');
+ blocks.push(block('doForEach'));
}
/////////////////////////////////
@@ -5321,7 +5398,7 @@ StageMorph.prototype.thumbnail = function (extentPoint, excludedSprite) {
this.dimensions.y * this.scale
);
this.children.forEach(function (morph) {
- if (morph !== excludedSprite) {
+ if (morph.isVisible && (morph !== excludedSprite)) {
fb = morph.fullBounds();
fimg = morph.fullImage();
if (fimg.width && fimg.height) {
@@ -5483,6 +5560,9 @@ StageMorph.prototype.watcherFor =
StageMorph.prototype.getLastAnswer
= SpriteMorph.prototype.getLastAnswer;
+StageMorph.prototype.reportThreadCount
+ = SpriteMorph.prototype.reportThreadCount;
+
// StageMorph message broadcasting
StageMorph.prototype.allMessageNames
@@ -6731,7 +6811,7 @@ WatcherMorph.prototype.object = function () {
WatcherMorph.prototype.isGlobal = function (selector) {
return contains(
['getLastAnswer', 'getLastMessage', 'getTempo', 'getTimer',
- 'reportMouseX', 'reportMouseY'],
+ 'reportMouseX', 'reportMouseY', 'reportThreadCount'],
selector
);
};
diff --git a/scriptsPaneTexture.gif b/scriptsPaneTexture.gif
deleted file mode 100755
index 846c77f5..00000000
Binary files a/scriptsPaneTexture.gif and /dev/null differ
diff --git a/snap.html b/snap.html
index 904aba8c..93b4c730 100755
--- a/snap.html
+++ b/snap.html
@@ -3,7 +3,7 @@
Snap! Build Your Own Blocks. Beta
-
+
@@ -33,5 +33,5 @@
-
+