text: // Generated by Haxe 3.4.0 (git build development @ 4a40be3)
  (function ($global) { "use strict";
  var $estr = function() { return js_Boot.__string_rec(this,''); };
  function $extend(from, fields) {
  	function Inherit() {} Inherit.prototype = from; var proto = new Inherit();
  	for (var name in fields) proto[name] = fields[name];
  	if( fields.toString !== Object.prototype.toString ) proto.toString = fields.toString;
  	return proto;
  }
  var HxOverrides = function() { };
  HxOverrides.__name__ = true;
  HxOverrides.cca = function(s,index) {
  	var x = s.charCodeAt(index);
  	if(x != x) {
  		return undefined;
  	}
  	return x;
  };
  HxOverrides.substr = function(s,pos,len) {
  	if(len == null) {
  		len = s.length;
  	} else if(len < 0) {
  		if(pos == 0) {
  			len = s.length + len;
  		} else {
  			return "";
  		}
  	}
  	return s.substr(pos,len);
  };
  HxOverrides.iter = function(a) {
  	return { cur : 0, arr : a, hasNext : function() {
  		return this.cur < this.arr.length;
  	}, next : function() {
  		return this.arr[this.cur++];
  	}};
  };
  var Lambda = function() { };
  Lambda.__name__ = true;
  Lambda.array = function(it) {
  	var a = [];
  	var i = $iterator(it)();
  	while(i.hasNext()) a.push(i.next());
  	return a;
  };
  Lambda.map = function(it,f) {
  	var l = new List();
  	var x = $iterator(it)();
  	while(x.hasNext()) l.add(f(x.next()));
  	return l;
  };
  var List = function() {
  	this.length = 0;
  };
  List.__name__ = true;
  List.prototype = {
  	add: function(item) {
  		var x = new _$List_ListNode(item,null);
  		if(this.h == null) {
  			this.h = x;
  		} else {
  			this.q.next = x;
  		}
  		this.q = x;
  		this.length++;
  	}
  	,iterator: function() {
  		return new _$List_ListIterator(this.h);
  	}
  	,__class__: List
  };
  var _$List_ListNode = function(item,next) {
  	this.item = item;
  	this.next = next;
  };
  _$List_ListNode.__name__ = true;
  _$List_ListNode.prototype = {
  	__class__: _$List_ListNode
  };
  var _$List_ListIterator = function(head) {
  	this.head = head;
  };
  _$List_ListIterator.__name__ = true;
  _$List_ListIterator.prototype = {
  	hasNext: function() {
  		return this.head != null;
  	}
  	,next: function() {
  		var val = this.head.item;
  		this.head = this.head.next;
  		return val;
  	}
  	,__class__: _$List_ListIterator
  };
  Math.__name__ = true;
  var Std = function() { };
  Std.__name__ = true;
  Std.string = function(s) {
  	return js_Boot.__string_rec(s,"");
  };
  Std.parseInt = function(x) {
  	var v = parseInt(x,10);
  	if(v == 0 && (HxOverrides.cca(x,1) == 120 || HxOverrides.cca(x,1) == 88)) {
  		v = parseInt(x);
  	}
  	if(isNaN(v)) {
  		return null;
  	}
  	return v;
  };
  var StringTools = function() { };
  StringTools.__name__ = true;
  StringTools.hex = function(n,digits) {
  	var s = "";
  	while(true) {
  		s = "0123456789ABCDEF".charAt(n & 15) + s;
  		n >>>= 4;
  		if(!(n > 0)) {
  			break;
  		}
  	}
  	if(digits != null) {
  		while(s.length < digits) s = "0" + s;
  	}
  	return s;
  };
  var haxe_IMap = function() { };
  haxe_IMap.__name__ = true;
  var haxe_Resource = function() { };
  haxe_Resource.__name__ = true;
  haxe_Resource.getString = function(name) {
  	var _g = 0;
  	var _g1 = haxe_Resource.content;
  	while(_g < _g1.length) {
  		var x = _g1[_g];
  		++_g;
  		if(x.name == name) {
  			if(x.str != null) {
  				return x.str;
  			}
  			return haxe_crypto_Base64.decode(x.data).toString();
  		}
  	}
  	return null;
  };
  var haxe_Timer = function(time_ms) {
  	var me = this;
  	this.id = setInterval(function() {
  		me.run();
  	},time_ms);
  };
  haxe_Timer.__name__ = true;
  haxe_Timer.prototype = {
  	run: function() {
  	}
  	,__class__: haxe_Timer
  };
  var haxe_io_Bytes = function(data) {
  	this.length = data.byteLength;
  	this.b = new Uint8Array(data);
  	this.b.bufferValue = data;
  	data.hxBytes = this;
  	data.bytes = this.b;
  };
  haxe_io_Bytes.__name__ = true;
  haxe_io_Bytes.ofString = function(s) {
  	var a = [];
  	var i = 0;
  	while(i < s.length) {
  		var c = s.charCodeAt(i++);
  		if(55296 <= c && c <= 56319) {
  			c = c - 55232 << 10 | s.charCodeAt(i++) & 1023;
  		}
  		if(c <= 127) {
  			a.push(c);
  		} else if(c <= 2047) {
  			a.push(192 | c >> 6);
  			a.push(128 | c & 63);
  		} else if(c <= 65535) {
  			a.push(224 | c >> 12);
  			a.push(128 | c >> 6 & 63);
  			a.push(128 | c & 63);
  		} else {
  			a.push(240 | c >> 18);
  			a.push(128 | c >> 12 & 63);
  			a.push(128 | c >> 6 & 63);
  			a.push(128 | c & 63);
  		}
  	}
  	return new haxe_io_Bytes(new Uint8Array(a).buffer);
  };
  haxe_io_Bytes.prototype = {
  	getString: function(pos,len) {
  		if(pos < 0 || len < 0 || pos + len > this.length) {
  			throw new js__$Boot_HaxeError(haxe_io_Error.OutsideBounds);
  		}
  		var s = "";
  		var b = this.b;
  		var fcc = String.fromCharCode;
  		var i = pos;
  		var max = pos + len;
  		while(i < max) {
  			var c = b[i++];
  			if(c < 128) {
  				if(c == 0) {
  					break;
  				}
  				s += fcc(c);
  			} else if(c < 224) {
  				s += fcc((c & 63) << 6 | b[i++] & 127);
  			} else if(c < 240) {
  				s += fcc((c & 31) << 12 | (b[i++] & 127) << 6 | b[i++] & 127);
  			} else {
  				var u = (c & 15) << 18 | (b[i++] & 127) << 12 | (b[i++] & 127) << 6 | b[i++] & 127;
  				s += fcc((u >> 10) + 55232);
  				s += fcc(u & 1023 | 56320);
  			}
  		}
  		return s;
  	}
  	,toString: function() {
  		return this.getString(0,this.length);
  	}
  	,__class__: haxe_io_Bytes
  };
  var haxe_crypto_Base64 = function() { };
  haxe_crypto_Base64.__name__ = true;
  haxe_crypto_Base64.decode = function(str,complement) {
  	if(complement == null) {
  		complement = true;
  	}
  	if(complement) {
  		while(HxOverrides.cca(str,str.length - 1) == 61) str = HxOverrides.substr(str,0,-1);
  	}
  	return new haxe_crypto_BaseCode(haxe_crypto_Base64.BYTES).decodeBytes(haxe_io_Bytes.ofString(str));
  };
  var haxe_crypto_BaseCode = function(base) {
  	var len = base.length;
  	var nbits = 1;
  	while(len > 1 << nbits) ++nbits;
  	if(nbits > 8 || len != 1 << nbits) {
  		throw new js__$Boot_HaxeError("BaseCode : base length must be a power of two.");
  	}
  	this.base = base;
  	this.nbits = nbits;
  };
  haxe_crypto_BaseCode.__name__ = true;
  haxe_crypto_BaseCode.prototype = {
  	initTable: function() {
  		var tbl = [];
  		var _g = 0;
  		while(_g < 256) tbl[_g++] = -1;
  		var _g1 = 0;
  		var _g2 = this.base.length;
  		while(_g1 < _g2) {
  			var i = _g1++;
  			tbl[this.base.b[i]] = i;
  		}
  		this.tbl = tbl;
  	}
  	,decodeBytes: function(b) {
  		var nbits = this.nbits;
  		if(this.tbl == null) {
  			this.initTable();
  		}
  		var tbl = this.tbl;
  		var size = b.length * nbits >> 3;
  		var out = new haxe_io_Bytes(new ArrayBuffer(size));
  		var buf = 0;
  		var curbits = 0;
  		var pin = 0;
  		var pout = 0;
  		while(pout < size) {
  			while(curbits < 8) {
  				curbits += nbits;
  				buf <<= nbits;
  				var i = tbl[b.b[pin++]];
  				if(i == -1) {
  					throw new js__$Boot_HaxeError("BaseCode : invalid encoded char");
  				}
  				buf |= i;
  			}
  			curbits -= 8;
  			out.b[pout++] = buf >> curbits & 255 & 255;
  		}
  		return out;
  	}
  	,__class__: haxe_crypto_BaseCode
  };
  var haxe_ds_StringMap = function() {
  	this.h = { };
  };
  haxe_ds_StringMap.__name__ = true;
  haxe_ds_StringMap.__interfaces__ = [haxe_IMap];
  haxe_ds_StringMap.prototype = {
  	setReserved: function(key,value) {
  		if(this.rh == null) {
  			this.rh = { };
  		}
  		this.rh["$" + key] = value;
  	}
  	,getReserved: function(key) {
  		if(this.rh == null) {
  			return null;
  		} else {
  			return this.rh["$" + key];
  		}
  	}
  	,existsReserved: function(key) {
  		if(this.rh == null) {
  			return false;
  		}
  		return this.rh.hasOwnProperty("$" + key);
  	}
  	,__class__: haxe_ds_StringMap
  };
  var haxe_io_Error = { __ename__ : true, __constructs__ : ["Blocked","Overflow","OutsideBounds","Custom"] };
  haxe_io_Error.Blocked = ["Blocked",0];
  haxe_io_Error.Blocked.toString = $estr;
  haxe_io_Error.Blocked.__enum__ = haxe_io_Error;
  haxe_io_Error.Overflow = ["Overflow",1];
  haxe_io_Error.Overflow.toString = $estr;
  haxe_io_Error.Overflow.__enum__ = haxe_io_Error;
  haxe_io_Error.OutsideBounds = ["OutsideBounds",2];
  haxe_io_Error.OutsideBounds.toString = $estr;
  haxe_io_Error.OutsideBounds.__enum__ = haxe_io_Error;
  haxe_io_Error.Custom = function(e) { var $x = ["Custom",3,e]; $x.__enum__ = haxe_io_Error; $x.toString = $estr; return $x; };
  var js__$Boot_HaxeError = function(val) {
  	Error.call(this);
  	this.val = val;
  	this.message = String(val);
  	if(Error.captureStackTrace) {
  		Error.captureStackTrace(this,js__$Boot_HaxeError);
  	}
  };
  js__$Boot_HaxeError.__name__ = true;
  js__$Boot_HaxeError.wrap = function(val) {
  	if((val instanceof Error)) {
  		return val;
  	} else {
  		return new js__$Boot_HaxeError(val);
  	}
  };
  js__$Boot_HaxeError.__super__ = Error;
  js__$Boot_HaxeError.prototype = $extend(Error.prototype,{
  	__class__: js__$Boot_HaxeError
  });
  var js_Boot = function() { };
  js_Boot.__name__ = true;
  js_Boot.getClass = function(o) {
  	if((o instanceof Array) && o.__enum__ == null) {
  		return Array;
  	} else {
  		var cl = o.__class__;
  		if(cl != null) {
  			return cl;
  		}
  		var name = js_Boot.__nativeClassName(o);
  		if(name != null) {
  			return js_Boot.__resolveNativeClass(name);
  		}
  		return null;
  	}
  };
  js_Boot.__string_rec = function(o,s) {
  	if(o == null) {
  		return "null";
  	}
  	if(s.length >= 5) {
  		return "<...>";
  	}
  	var t = typeof(o);
  	if(t == "function" && (o.__name__ || o.__ename__)) {
  		t = "object";
  	}
  	switch(t) {
  	case "function":
  		return "<function>";
  	case "object":
  		if(o instanceof Array) {
  			if(o.__enum__) {
  				if(o.length == 2) {
  					return o[0];
  				}
  				var str = o[0] + "(";
  				s += "\t";
  				var _g1 = 2;
  				var _g = o.length;
  				while(_g1 < _g) {
  					var i = _g1++;
  					if(i != 2) {
  						str += "," + js_Boot.__string_rec(o[i],s);
  					} else {
  						str += js_Boot.__string_rec(o[i],s);
  					}
  				}
  				return str + ")";
  			}
  			var l = o.length;
  			var i1;
  			var str1 = "[";
  			s += "\t";
  			var _g11 = 0;
  			var _g2 = l;
  			while(_g11 < _g2) {
  				var i2 = _g11++;
  				str1 += (i2 > 0 ? "," : "") + js_Boot.__string_rec(o[i2],s);
  			}
  			str1 += "]";
  			return str1;
  		}
  		var tostr;
  		try {
  			tostr = o.toString;
  		} catch( e ) {
  			return "???";
  		}
  		if(tostr != null && tostr != Object.toString && typeof(tostr) == "function") {
  			var s2 = o.toString();
  			if(s2 != "[object Object]") {
  				return s2;
  			}
  		}
  		var k = null;
  		var str2 = "{\n";
  		s += "\t";
  		var hasp = o.hasOwnProperty != null;
  		for( var k in o ) {
  		if(hasp && !o.hasOwnProperty(k)) {
  			continue;
  		}
  		if(k == "prototype" || k == "__class__" || k == "__super__" || k == "__interfaces__" || k == "__properties__") {
  			continue;
  		}
  		if(str2.length != 2) {
  			str2 += ", \n";
  		}
  		str2 += s + k + " : " + js_Boot.__string_rec(o[k],s);
  		}
  		s = s.substring(1);
  		str2 += "\n" + s + "}";
  		return str2;
  	case "string":
  		return o;
  	default:
  		return String(o);
  	}
  };
  js_Boot.__interfLoop = function(cc,cl) {
  	if(cc == null) {
  		return false;
  	}
  	if(cc == cl) {
  		return true;
  	}
  	var intf = cc.__interfaces__;
  	if(intf != null) {
  		var _g1 = 0;
  		var _g = intf.length;
  		while(_g1 < _g) {
  			var i = intf[_g1++];
  			if(i == cl || js_Boot.__interfLoop(i,cl)) {
  				return true;
  			}
  		}
  	}
  	return js_Boot.__interfLoop(cc.__super__,cl);
  };
  js_Boot.__instanceof = function(o,cl) {
  	if(cl == null) {
  		return false;
  	}
  	switch(cl) {
  	case Array:
  		if((o instanceof Array)) {
  			return o.__enum__ == null;
  		} else {
  			return false;
  		}
  		break;
  	case Bool:
  		return typeof(o) == "boolean";
  	case Dynamic:
  		return true;
  	case Float:
  		return typeof(o) == "number";
  	case Int:
  		if(typeof(o) == "number") {
  			return (o|0) === o;
  		} else {
  			return false;
  		}
  		break;
  	case String:
  		return typeof(o) == "string";
  	default:
  		if(o != null) {
  			if(typeof(cl) == "function") {
  				if(o instanceof cl) {
  					return true;
  				}
  				if(js_Boot.__interfLoop(js_Boot.getClass(o),cl)) {
  					return true;
  				}
  			} else if(typeof(cl) == "object" && js_Boot.__isNativeObj(cl)) {
  				if(o instanceof cl) {
  					return true;
  				}
  			}
  		} else {
  			return false;
  		}
  		if(cl == Class ? o.__name__ != null : false) {
  			return true;
  		}
  		if(cl == Enum ? o.__ename__ != null : false) {
  			return true;
  		}
  		return o.__enum__ == cl;
  	}
  };
  js_Boot.__nativeClassName = function(o) {
  	var name = js_Boot.__toStr.call(o).slice(8,-1);
  	if(name == "Object" || name == "Function" || name == "Math" || name == "JSON") {
  		return null;
  	}
  	return name;
  };
  js_Boot.__isNativeObj = function(o) {
  	return js_Boot.__nativeClassName(o) != null;
  };
  js_Boot.__resolveNativeClass = function(name) {
  	return $global[name];
  };
  var js_html_compat_ArrayBuffer = function(a) {
  	if((a instanceof Array) && a.__enum__ == null) {
  		this.a = a;
  		this.byteLength = a.length;
  	} else {
  		var len = a;
  		this.a = [];
  		var _g1 = 0;
  		var _g = len;
  		while(_g1 < _g) this.a[_g1++] = 0;
  		this.byteLength = len;
  	}
  };
  js_html_compat_ArrayBuffer.__name__ = true;
  js_html_compat_ArrayBuffer.sliceImpl = function(begin,end) {
  	var u = new Uint8Array(this,begin,end == null ? null : end - begin);
  	var result = new ArrayBuffer(u.byteLength);
  	new Uint8Array(result).set(u);
  	return result;
  };
  js_html_compat_ArrayBuffer.prototype = {
  	slice: function(begin,end) {
  		return new js_html_compat_ArrayBuffer(this.a.slice(begin,end));
  	}
  	,__class__: js_html_compat_ArrayBuffer
  };
  var js_html_compat_Uint8Array = function() { };
  js_html_compat_Uint8Array.__name__ = true;
  js_html_compat_Uint8Array._new = function(arg1,offset,length) {
  	var arr;
  	if(typeof(arg1) == "number") {
  		arr = [];
  		var _g1 = 0;
  		var _g = arg1;
  		while(_g1 < _g) {
  			var i = _g1++;
  			arr[i] = 0;
  		}
  		arr.byteLength = arr.length;
  		arr.byteOffset = 0;
  		arr.buffer = new js_html_compat_ArrayBuffer(arr);
  	} else if(js_Boot.__instanceof(arg1,js_html_compat_ArrayBuffer)) {
  		var buffer = arg1;
  		if(offset == null) {
  			offset = 0;
  		}
  		if(length == null) {
  			length = buffer.byteLength - offset;
  		}
  		if(offset == 0) {
  			arr = buffer.a;
  		} else {
  			arr = buffer.a.slice(offset,offset + length);
  		}
  		arr.byteLength = arr.length;
  		arr.byteOffset = offset;
  		arr.buffer = buffer;
  	} else if((arg1 instanceof Array) && arg1.__enum__ == null) {
  		arr = arg1.slice();
  		arr.byteLength = arr.length;
  		arr.byteOffset = 0;
  		arr.buffer = new js_html_compat_ArrayBuffer(arr);
  	} else {
  		throw new js__$Boot_HaxeError("TODO " + Std.string(arg1));
  	}
  	arr.subarray = js_html_compat_Uint8Array._subarray;
  	arr.set = js_html_compat_Uint8Array._set;
  	return arr;
  };
  js_html_compat_Uint8Array._set = function(arg,offset) {
  	if(js_Boot.__instanceof(arg.buffer,js_html_compat_ArrayBuffer)) {
  		var a = arg;
  		if(arg.byteLength + offset > this.byteLength) {
  			throw new js__$Boot_HaxeError("set() outside of range");
  		}
  		var _g1 = 0;
  		var _g = arg.byteLength;
  		while(_g1 < _g) {
  			var i = _g1++;
  			this[i + offset] = a[i];
  		}
  	} else if((arg instanceof Array) && arg.__enum__ == null) {
  		var a1 = arg;
  		if(a1.length + offset > this.byteLength) {
  			throw new js__$Boot_HaxeError("set() outside of range");
  		}
  		var _g11 = 0;
  		var _g2 = a1.length;
  		while(_g11 < _g2) {
  			var i1 = _g11++;
  			this[i1 + offset] = a1[i1];
  		}
  	} else {
  		throw new js__$Boot_HaxeError("TODO");
  	}
  };
  js_html_compat_Uint8Array._subarray = function(start,end) {
  	var a = js_html_compat_Uint8Array._new(this.slice(start,end));
  	a.byteOffset = start;
  	return a;
  };
  var letters_LetterResource = function() {
  	this.letters = new haxe_ds_StringMap();
  };
  letters_LetterResource.__name__ = true;
  letters_LetterResource.preAdjustX = function(str) {
  	switch(str) {
  	case "r":
  		return 1.;
  	case "i":case "s":
  		return 2.;
  	default:
  		return 0.;
  	}
  };
  letters_LetterResource.postAdjustX = function(str) {
  	switch(str) {
  	case "f":
  		return -2.;
  	case "i":case "j":
  		return 3.;
  	case "r":
  		return -1.;
  	default:
  		return 0.;
  	}
  };
  letters_LetterResource.verticalAdj = function(str) {
  	switch(str) {
  	case "g":
  		return -1.9;
  	case "m":
  		return -0.5;
  	default:
  		return 0.;
  	}
  };
  letters_LetterResource.space = function() {
  	return 15;
  };
  letters_LetterResource.prototype = {
  	getLetter: function(str) {
  		var _this = this.letters;
  		if(__map_reserved[str] != null ? _this.existsReserved(str) : _this.h.hasOwnProperty(str)) {
  			var _this1 = this.letters;
  			if(__map_reserved[str] != null) {
  				return _this1.getReserved(str);
  			} else {
  				return _this1.h[str];
  			}
  		} else {
  			var patha = new letters_Path(haxe_Resource.getString(str + "letter"));
  			var _this2 = this.letters;
  			if(__map_reserved[str] != null) {
  				_this2.setReserved(str,patha);
  			} else {
  				_this2.h[str] = patha;
  			}
  			return patha;
  		}
  	}
  	,__class__: letters_LetterResource
  };
  var letters__$Path_T2_$Impl_$ = {};
  letters__$Path_T2_$Impl_$.__name__ = true;
  letters__$Path_T2_$Impl_$._new = function(s,t) {
  	return { v0 : s, v1 : t};
  };
  letters__$Path_T2_$Impl_$.make = function(s,t) {
  	return { v0 : s, v1 : t};
  };
  letters__$Path_T2_$Impl_$.get_v0 = function(this1) {
  	return this1.v0;
  };
  letters__$Path_T2_$Impl_$.set_v0 = function(this1,v0) {
  	return this1.v0 = v0;
  };
  letters__$Path_T2_$Impl_$.get_v1 = function(this1) {
  	return this1.v1;
  };
  letters__$Path_T2_$Impl_$.set_v1 = function(this1,v1) {
  	return this1.v1 = v1;
  };
  letters__$Path_T2_$Impl_$.toString = function(this1) {
  	return "(" + Std.string(this1.v0) + "," + Std.string(this1.v1) + ")";
  };
  var letters_Path = function(str_) {
  	this.hasIterated = false;
  	this.bottom = -1000000;
  	this.right = -1000000;
  	this.top = 1000000;
  	this.left = 1000000;
  	this.count = 0;
  	this.length = str_.length;
  	this.str = str_;
  };
  letters_Path.__name__ = true;
  letters_Path.rainbowPencilColors = function() {
  	return [13816001,13467688,13802769,14905640,15755121,13777201,11480113,9450302,8797520,5786205,5545667,2912413,4553390,3558765,3640429,7251784,3562916,4550210,12683310,8467492,4206116,2696224,5396305,1776409];
  };
  letters_Path.isNum = function(x) {
  	switch(x) {
  	case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9":
  		return true;
  	default:
  		return false;
  	}
  };
  letters_Path.isNumOrDot = function(x) {
  	var tmp;
  	switch(x) {
  	case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9":
  		tmp = true;
  		break;
  	default:
  		tmp = false;
  	}
  	if(!tmp) {
  		return x == ".";
  	} else {
  		return true;
  	}
  };
  letters_Path.generateVectorText = function(str,x,y,scale,width,lineSpace,path,highlightFunction,outlineFunction) {
  	var dim2_pos;
  	if(path == null) {
  		path = [];
  	}
  	if(width == null) {
  		width = 1000000;
  		lineSpace = 0;
  	}
  	var temp;
  	var x1 = x;
  	var x2 = x;
  	var dx = 0.;
  	var y1 = y;
  	var tempDim;
  	var word = [];
  	var letterResource = new letters_LetterResource();
  	var arrStr = str.split("");
  	var counta = 0;
  	if(highlightFunction != null) {
  		var j = "";
  		var count = 1;
  		var wordContent = "";
  		if(1 < arrStr.length) {
  			while(j != " " && count < arrStr.length) {
  				j = arrStr[count];
  				if(j != " ") {
  					wordContent += j;
  				}
  				++count;
  			}
  			var $float = [highlightFunction(wordContent)];
  			var commandEnum = "F";
  			var this1 = { v0 : $float, v1 : commandEnum};
  			if(outlineFunction != null) {
  				$float = [outlineFunction(wordContent)];
  				commandEnum = "O";
  				path.push({ v0 : $float, v1 : commandEnum});
  			}
  			path.push(this1);
  		}
  	}
  	var _g = 0;
  	while(_g < arrStr.length) {
  		var i = arrStr[_g];
  		++_g;
  		x2 = x1;
  		if(i != " " && i != "") {
  			y1 = y;
  			var vert;
  			switch(i) {
  			case "g":
  				vert = -1.9;
  				break;
  			case "m":
  				vert = -0.5;
  				break;
  			default:
  				vert = 0.;
  			}
  			var preX;
  			switch(i) {
  			case "r":
  				preX = 1.;
  				break;
  			case "i":case "s":
  				preX = 2.;
  				break;
  			default:
  				preX = 0.;
  			}
  			if(vert != 0) {
  				y1 += vert * scale;
  			}
  			if(preX != 0) {
  				x1 += preX * scale;
  			}
  			var path1;
  			var _this = letterResource.letters;
  			if(__map_reserved[i] != null ? _this.existsReserved(i) : _this.h.hasOwnProperty(i)) {
  				var _this1 = letterResource.letters;
  				if(__map_reserved[i] != null) {
  					path1 = _this1.getReserved(i);
  				} else {
  					path1 = _this1.h[i];
  				}
  			} else {
  				var patha = new letters_Path(haxe_Resource.getString(i + "letter"));
  				var _this2 = letterResource.letters;
  				if(__map_reserved[i] != null) {
  					_this2.setReserved(i,patha);
  				} else {
  					_this2.h[i] = patha;
  				}
  				path1 = patha;
  			}
  			var x3 = x1;
  			var y2 = y1;
  			var a = [];
  			var x4 = $iterator(path1)();
  			while(x4.hasNext()) {
  				var x5 = x4.next();
  				var v0 = x5.v0;
  				var v1 = x5.v1;
  				switch(v1) {
  				case "L":case "M":
  					v0 = [scale * v0[0] + x3,scale * v0[1] + y2];
  					break;
  				case "Q":
  					v0 = [scale * v0[0] + x3,scale * v0[1] + y2,scale * v0[2] + x3,scale * v0[3] + y2];
  					break;
  				default:
  				}
  				a.push({ v0 : v0, v1 : v1});
  			}
  			temp = a;
  			var l = 1000000;
  			var t = 1000000;
  			var r = -1000000;
  			var b = -1000000;
  			var x6;
  			var y3;
  			var i1 = $iterator(a)();
  			while(i1.hasNext()) {
  				var i2 = i1.next();
  				var v = i2.v0;
  				switch(i2.v1) {
  				case "L":case "M":case "Q":
  					x6 = v[0];
  					y3 = v[1];
  					if(x6 < l) {
  						l = x6;
  					}
  					if(x6 > r) {
  						r = x6;
  					}
  					if(y3 < t) {
  						t = y3;
  					}
  					if(y3 > b) {
  						b = y3;
  					}
  					if(v.length > 2) {
  						x6 = v[2];
  						y3 = v[3];
  						if(x6 < l) {
  							l = x6;
  						}
  						if(x6 > r) {
  							r = x6;
  						}
  						if(y3 < t) {
  							t = y3;
  						}
  						if(y3 > b) {
  							b = y3;
  						}
  					}
  					break;
  				default:
  				}
  			}
  			tempDim = { pos : { x : l, y : t}, dim : { x : r - l, y : b - t}, centre : { x : l + (r - l) / 2, y : t + (b - t) / 2}, end : { x : r, y : b}};
  			dx = x2 - tempDim.pos.x;
  			var postX;
  			switch(i) {
  			case "f":
  				postX = -2.;
  				break;
  			case "i":case "j":
  				postX = 3.;
  				break;
  			case "r":
  				postX = -1.;
  				break;
  			default:
  				postX = 0.;
  			}
  			if(postX != 0) {
  				x1 += postX * scale;
  			}
  			if(preX != 0) {
  				dx += preX * scale;
  			}
  			x1 += tempDim.dim.x + 2 * scale;
  			var x7 = dx;
  			var y4 = 0;
  			var x0 = x7 == 0;
  			if(x0) {
  				temp = Lambda.array(a);
  			} else if(x0) {
  				var a1 = [];
  				var x8 = $iterator(a)();
  				while(x8.hasNext()) {
  					var x9 = x8.next();
  					var v01 = x9.v0;
  					var v11 = x9.v1;
  					switch(v11) {
  					case "L":case "M":
  						v01 = [v01[0],y4 + v01[1]];
  						break;
  					case "Q":
  						v01 = [v01[0],y4 + v01[1],v01[2],y4 + v01[3]];
  						break;
  					default:
  					}
  					a1.push({ v0 : v01, v1 : v11});
  				}
  				temp = a1;
  			} else {
  				var a2 = [];
  				var x10 = $iterator(a)();
  				while(x10.hasNext()) {
  					var x11 = x10.next();
  					var v02 = x11.v0;
  					var v12 = x11.v1;
  					switch(v12) {
  					case "L":case "M":
  						v02 = [x7 + v02[0],v02[1]];
  						break;
  					case "Q":
  						v02 = [x7 + v02[0],v02[1],x7 + v02[2],v02[3]];
  						break;
  					default:
  					}
  					a2.push({ v0 : v02, v1 : v12});
  				}
  				temp = a2;
  			}
  			if(x1 > width) {
  				y += lineSpace;
  				word = word.concat(temp);
  				var l1 = 1000000;
  				var t1 = 1000000;
  				var r1 = -1000000;
  				var b1 = -1000000;
  				var x12;
  				var y5;
  				var i3 = $iterator(word)();
  				while(i3.hasNext()) {
  					var i4 = i3.next();
  					var v2 = i4.v0;
  					switch(i4.v1) {
  					case "L":case "M":case "Q":
  						x12 = v2[0];
  						y5 = v2[1];
  						if(x12 < l1) {
  							l1 = x12;
  						}
  						if(x12 > r1) {
  							r1 = x12;
  						}
  						if(y5 < t1) {
  							t1 = y5;
  						}
  						if(y5 > b1) {
  							b1 = y5;
  						}
  						if(v2.length > 2) {
  							x12 = v2[2];
  							y5 = v2[3];
  							if(x12 < l1) {
  								l1 = x12;
  							}
  							if(x12 > r1) {
  								r1 = x12;
  							}
  							if(y5 < t1) {
  								t1 = y5;
  							}
  							if(y5 > b1) {
  								b1 = y5;
  							}
  						}
  						break;
  					default:
  					}
  				}
  				dim2_pos = { x : l1, y : t1};
  				var repos = x - dim2_pos.x;
  				var y6 = lineSpace;
  				var x01 = repos == 0;
  				var y0 = y6 == 0;
  				if(x01 && y0) {
  					word = Lambda.array(word);
  				} else if(x01) {
  					var a3 = [];
  					var x13 = $iterator(word)();
  					while(x13.hasNext()) {
  						var x14 = x13.next();
  						var v03 = x14.v0;
  						var v13 = x14.v1;
  						switch(v13) {
  						case "L":case "M":
  							v03 = [v03[0],y6 + v03[1]];
  							break;
  						case "Q":
  							v03 = [v03[0],y6 + v03[1],v03[2],y6 + v03[3]];
  							break;
  						default:
  						}
  						a3.push({ v0 : v03, v1 : v13});
  					}
  					word = a3;
  				} else if(y0) {
  					var a4 = [];
  					var x15 = $iterator(word)();
  					while(x15.hasNext()) {
  						var x16 = x15.next();
  						var v04 = x16.v0;
  						var v14 = x16.v1;
  						switch(v14) {
  						case "L":case "M":
  							v04 = [repos + v04[0],v04[1]];
  							break;
  						case "Q":
  							v04 = [repos + v04[0],v04[1],repos + v04[2],v04[3]];
  							break;
  						default:
  						}
  						a4.push({ v0 : v04, v1 : v14});
  					}
  					word = a4;
  				} else {
  					var a5 = [];
  					var x17 = $iterator(word)();
  					while(x17.hasNext()) {
  						var x18 = x17.next();
  						var v05 = x18.v0;
  						var v15 = x18.v1;
  						switch(v15) {
  						case "L":case "M":
  							v05 = [repos + v05[0],y6 + v05[1]];
  							break;
  						case "Q":
  							v05 = [repos + v05[0],y6 + v05[1],repos + v05[2],y6 + v05[3]];
  							break;
  						default:
  						}
  						a5.push({ v0 : v05, v1 : v15});
  					}
  					word = a5;
  				}
  				x1 += repos;
  			} else {
  				word = word.concat(temp);
  			}
  		} else {
  			path = path.concat(word);
  			if(highlightFunction != null) {
  				var j1 = "";
  				var count1 = counta + 1;
  				var wordContent1 = "";
  				if(count1 < arrStr.length) {
  					while(j1 != " " && count1 < arrStr.length) {
  						j1 = arrStr[count1];
  						if(j1 != " ") {
  							wordContent1 += j1;
  						}
  						++count1;
  					}
  					var float1 = [highlightFunction(wordContent1)];
  					var commandEnum1 = "F";
  					var this2 = { v0 : float1, v1 : commandEnum1};
  					if(outlineFunction != null) {
  						float1 = [outlineFunction(wordContent1)];
  						commandEnum1 = "O";
  						path.push({ v0 : float1, v1 : commandEnum1});
  					}
  					path.push(this2);
  				}
  			}
  			x1 += 15 * scale;
  			word = [];
  		}
  		++counta;
  	}
  	path = path.concat(word);
  	return path;
  };
  letters_Path.rainbowPencilHighlight = function(str) {
  	return [13816001,13467688,13802769,14905640,15755121,13777201,11480113,9450302,8797520,5786205,5545667,2912413,4553390,3558765,3640429,7251784,3562916,4550210,12683310,8467492,4206116,2696224,5396305,1776409][Math.random() * ([13816001,13467688,13802769,14905640,15755121,13777201,11480113,9450302,8797520,5786205,5545667,2912413,4553390,3558765,3640429,7251784,3562916,4550210,12683310,8467492,4206116,2696224,5396305,1776409].length - 1) | 0];
  };
  letters_Path.highlightAnd = function(str) {
  	if(str == "and") {
  		return 16711680;
  	}
  	if(str == "in") {
  		return 65535;
  	}
  	return 16763904;
  };
  letters_Path.translate = function(path,x_,y_) {
  	var x0 = x_ == 0;
  	var y0 = y_ == 0;
  	if(x0 && y0) {
  		return Lambda.array(path);
  	}
  	if(x0) {
  		var a = [];
  		var x = $iterator(path)();
  		while(x.hasNext()) {
  			var x1 = x.next();
  			var v0 = x1.v0;
  			var v1 = x1.v1;
  			switch(v1) {
  			case "L":case "M":
  				v0 = [v0[0],y_ + v0[1]];
  				break;
  			case "Q":
  				v0 = [v0[0],y_ + v0[1],v0[2],y_ + v0[3]];
  				break;
  			default:
  			}
  			a.push({ v0 : v0, v1 : v1});
  		}
  		return a;
  	}
  	if(y0) {
  		var a1 = [];
  		var x2 = $iterator(path)();
  		while(x2.hasNext()) {
  			var x3 = x2.next();
  			var v01 = x3.v0;
  			var v11 = x3.v1;
  			switch(v11) {
  			case "L":case "M":
  				v01 = [x_ + v01[0],v01[1]];
  				break;
  			case "Q":
  				v01 = [x_ + v01[0],v01[1],x_ + v01[2],v01[3]];
  				break;
  			default:
  			}
  			a1.push({ v0 : v01, v1 : v11});
  		}
  		return a1;
  	}
  	var a2 = [];
  	var x4 = $iterator(path)();
  	while(x4.hasNext()) {
  		var x5 = x4.next();
  		var v02 = x5.v0;
  		var v12 = x5.v1;
  		switch(v12) {
  		case "L":case "M":
  			v02 = [x_ + v02[0],y_ + v02[1]];
  			break;
  		case "Q":
  			v02 = [x_ + v02[0],y_ + v02[1],x_ + v02[2],y_ + v02[3]];
  			break;
  		default:
  		}
  		a2.push({ v0 : v02, v1 : v12});
  	}
  	return a2;
  };
  letters_Path.scale = function(path,x_,y_) {
  	var x0 = x_ == 1;
  	var y0 = y_ == 1;
  	if(x0 && y0) {
  		return Lambda.array(path);
  	}
  	if(x0) {
  		var a = [];
  		var x = $iterator(path)();
  		while(x.hasNext()) {
  			var x1 = x.next();
  			var v0 = x1.v0;
  			var v1 = x1.v1;
  			switch(v1) {
  			case "L":case "M":
  				v0 = [v0[0],y_ * v0[1]];
  				break;
  			case "Q":
  				v0 = [v0[0],y_ * v0[1],v0[2],y_ * v0[3]];
  				break;
  			default:
  			}
  			a.push({ v0 : v0, v1 : v1});
  		}
  		return a;
  	}
  	if(y0) {
  		var a1 = [];
  		var x2 = $iterator(path)();
  		while(x2.hasNext()) {
  			var x3 = x2.next();
  			var v01 = x3.v0;
  			var v11 = x3.v1;
  			switch(v11) {
  			case "L":case "M":
  				v01 = [x_ * v01[0],v01[1]];
  				break;
  			case "Q":
  				v01 = [x_ * v01[0],v01[1],x_ * v01[2],v01[3]];
  				break;
  			default:
  			}
  			a1.push({ v0 : v01, v1 : v11});
  		}
  		return a1;
  	}
  	var a2 = [];
  	var x4 = $iterator(path)();
  	while(x4.hasNext()) {
  		var x5 = x4.next();
  		var v02 = x5.v0;
  		var v12 = x5.v1;
  		switch(v12) {
  		case "L":case "M":
  			v02 = [x_ * v02[0],y_ * v02[1]];
  			break;
  		case "Q":
  			v02 = [x_ * v02[0],y_ * v02[1],x_ * v02[2],y_ * v02[3]];
  			break;
  		default:
  		}
  		a2.push({ v0 : v02, v1 : v12});
  	}
  	return a2;
  };
  letters_Path.scaleTranslate = function(path,x_,y_,sx_,sy_) {
  	var a = [];
  	var x = $iterator(path)();
  	while(x.hasNext()) {
  		var x1 = x.next();
  		var v0 = x1.v0;
  		var v1 = x1.v1;
  		switch(v1) {
  		case "L":case "M":
  			v0 = [sx_ * v0[0] + x_,sy_ * v0[1] + y_];
  			break;
  		case "Q":
  			v0 = [sx_ * v0[0] + x_,sy_ * v0[1] + y_,sx_ * v0[2] + x_,sy_ * v0[3] + y_];
  			break;
  		default:
  		}
  		a.push({ v0 : v0, v1 : v1});
  	}
  	return a;
  };
  letters_Path.rotateXYZ = function(path,rX,rY,rZ,zSpecial,ox,oy,oz) {
  	var dim_centre;
  	if(ox == null || oy == null || oz == null) {
  		var l = 1000000;
  		var t = 1000000;
  		var r = -1000000;
  		var b = -1000000;
  		var x;
  		var y;
  		var i = $iterator(path)();
  		while(i.hasNext()) {
  			var i1 = i.next();
  			var v = i1.v0;
  			switch(i1.v1) {
  			case "L":case "M":case "Q":
  				x = v[0];
  				y = v[1];
  				if(x < l) {
  					l = x;
  				}
  				if(x > r) {
  					r = x;
  				}
  				if(y < t) {
  					t = y;
  				}
  				if(y > b) {
  					b = y;
  				}
  				if(v.length > 2) {
  					x = v[2];
  					y = v[3];
  					if(x < l) {
  						l = x;
  					}
  					if(x > r) {
  						r = x;
  					}
  					if(y < t) {
  						t = y;
  					}
  					if(y > b) {
  						b = y;
  					}
  				}
  				break;
  			default:
  			}
  		}
  		dim_centre = { x : l + (r - l) / 2, y : t + (b - t) / 2};
  		ox = dim_centre.x;
  		oy = dim_centre.y;
  		oz = zSpecial;
  	}
  	var sX = Math.sin(rX);
  	var sY = Math.sin(rY);
  	var sZ = Math.sin(rZ);
  	var cX = Math.cos(rX);
  	var cY = Math.cos(rY);
  	var cZ = Math.cos(rZ);
  	var x1;
  	var y1;
  	var z;
  	var x2;
  	var y2;
  	var z2;
  	var tx;
  	var ty;
  	var tz;
  	var s;
  	var fL = 420;
  	var a = [];
  	var x3 = $iterator(path)();
  	while(x3.hasNext()) {
  		var x4 = x3.next();
  		var v0 = x4.v0;
  		var v1 = x4.v1;
  		switch(v1) {
  		case "L":case "M":
  			tx = v0[0] - ox;
  			ty = v0[1] - oy;
  			tz = zSpecial - oz;
  			x1 = tx * cY * cZ + tz * sY - ty * sZ + ox;
  			y1 = ty * cX * cZ - tz * sX + tx * sZ + oy;
  			z = ty * sX + tz * cX * cY - tx * sY + oz;
  			s = 1 - -z / fL;
  			v0 = [x1 / s,y1 / s];
  			break;
  		case "Q":
  			tx = v0[0] - ox;
  			ty = v0[1] - oy;
  			tz = zSpecial - oz;
  			x1 = tx * cY * cZ + tz * sY - ty * sZ + ox;
  			y1 = ty * cX * cZ - tz * sX + tx * sZ + oy;
  			z = ty * sX + tz * cX * cY - tx * sY + oz;
  			s = 1 - -z / fL;
  			x1 /= s;
  			y1 /= s;
  			tx = v0[2] - ox;
  			ty = v0[3] - oy;
  			tz = zSpecial - oz;
  			x2 = tx * cY * cZ + tz * sY - ty * sZ + ox;
  			y2 = ty * cX * cZ - tz * sX + tx * sZ + oy;
  			z2 = ty * sX + tz * cX * cY - tx * sY + oz;
  			s = 1 - -z2 / fL;
  			x2 /= s;
  			y2 /= s;
  			v0 = [x1,y1,x2,y2];
  			break;
  		default:
  		}
  		a.push({ v0 : v0, v1 : v1});
  	}
  	return a;
  };
  letters_Path.getDim = function(path) {
  	var l = 1000000;
  	var t = 1000000;
  	var r = -1000000;
  	var b = -1000000;
  	var x;
  	var y;
  	var i = $iterator(path)();
  	while(i.hasNext()) {
  		var i1 = i.next();
  		var v = i1.v0;
  		switch(i1.v1) {
  		case "L":case "M":case "Q":
  			x = v[0];
  			y = v[1];
  			if(x < l) {
  				l = x;
  			}
  			if(x > r) {
  				r = x;
  			}
  			if(y < t) {
  				t = y;
  			}
  			if(y > b) {
  				b = y;
  			}
  			if(v.length > 2) {
  				x = v[2];
  				y = v[3];
  				if(x < l) {
  					l = x;
  				}
  				if(x > r) {
  					r = x;
  				}
  				if(y < t) {
  					t = y;
  				}
  				if(y > b) {
  					b = y;
  				}
  			}
  			break;
  		default:
  		}
  	}
  	return { pos : { x : l, y : t}, dim : { x : r - l, y : b - t}, centre : { x : l + (r - l) / 2, y : t + (b - t) / 2}, end : { x : r, y : b}};
  };
  letters_Path.tracePoints = function(path) {
  	var str = "";
  	Lambda.map(path,function(v) {
  		str += Std.string(v.v0[0]) + " " + Std.string(v.v0[1]) + "\n";
  		return v;
  	});
  	console.log(str);
  };
  letters_Path.mapArr = function(it,f) {
  	var a = [];
  	var x = $iterator(it)();
  	while(x.hasNext()) a.push(f(x.next()));
  	return a;
  };
  letters_Path.prototype = {
  	iterator: function() {
  		this.count = 0;
  		return this;
  	}
  	,hasNext: function() {
  		var hasAnother = this.count < this.length;
  		if(!hasAnother) {
  			this.hasIterated = true;
  		}
  		return hasAnother;
  	}
  	,next: function() {
  		var command = this.str.charAt(this.count++);
  		var commandEnum;
  		if(command == " ") {
  			command = this.str.charAt(this.count++);
  		}
  		var tmp;
  		switch(command) {
  		case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9":
  			tmp = true;
  			break;
  		default:
  			tmp = false;
  		}
  		if(tmp) {
  			commandEnum = this.last;
  			this.count--;
  		} else {
  			commandEnum = command;
  		}
  		switch(commandEnum) {
  		case "L":
  			var command1 = "L";
  			this.last = command1;
  			var num = "";
  			var increment = 0;
  			var isX = true;
  			var arr = [];
  			while(increment < 2) {
  				var $char = this.str.charAt(this.count);
  				this.count++;
  				var tmp1;
  				var tmp2;
  				switch($char) {
  				case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9":
  					tmp2 = true;
  					break;
  				default:
  					tmp2 = false;
  				}
  				if(!tmp2) {
  					tmp1 = $char == ".";
  				} else {
  					tmp1 = true;
  				}
  				if(tmp1) {
  					num += $char;
  				} else {
  					isX = !isX;
  					var out = parseFloat(num);
  					if(isX) {
  						if(out < this.left) {
  							this.left = out;
  						}
  						if(out > this.right) {
  							this.right = out;
  						}
  					} else {
  						if(out < this.top) {
  							this.top = out;
  						}
  						if(out > this.bottom) {
  							this.bottom = out;
  						}
  					}
  					num = "";
  					arr.push(out);
  					++increment;
  				}
  			}
  			this.count--;
  			return { v0 : arr, v1 : command1};
  		case "M":
  			var command2 = "M";
  			this.last = command2;
  			var num1 = "";
  			var increment1 = 0;
  			var isX1 = true;
  			var arr1 = [];
  			while(increment1 < 2) {
  				var char1 = this.str.charAt(this.count);
  				this.count++;
  				var tmp3;
  				var tmp4;
  				switch(char1) {
  				case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9":
  					tmp4 = true;
  					break;
  				default:
  					tmp4 = false;
  				}
  				if(!tmp4) {
  					tmp3 = char1 == ".";
  				} else {
  					tmp3 = true;
  				}
  				if(tmp3) {
  					num1 += char1;
  				} else {
  					isX1 = !isX1;
  					var out1 = parseFloat(num1);
  					if(isX1) {
  						if(out1 < this.left) {
  							this.left = out1;
  						}
  						if(out1 > this.right) {
  							this.right = out1;
  						}
  					} else {
  						if(out1 < this.top) {
  							this.top = out1;
  						}
  						if(out1 > this.bottom) {
  							this.bottom = out1;
  						}
  					}
  					num1 = "";
  					arr1.push(out1);
  					++increment1;
  				}
  			}
  			this.count--;
  			return { v0 : arr1, v1 : command2};
  		case "Q":
  			var command3 = "Q";
  			this.last = command3;
  			var num2 = "";
  			var increment2 = 0;
  			var isX2 = true;
  			var arr2 = [];
  			while(increment2 < 4) {
  				var char2 = this.str.charAt(this.count);
  				this.count++;
  				var tmp5;
  				var tmp6;
  				switch(char2) {
  				case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9":
  					tmp6 = true;
  					break;
  				default:
  					tmp6 = false;
  				}
  				if(!tmp6) {
  					tmp5 = char2 == ".";
  				} else {
  					tmp5 = true;
  				}
  				if(tmp5) {
  					num2 += char2;
  				} else {
  					isX2 = !isX2;
  					var out2 = parseFloat(num2);
  					if(isX2) {
  						if(out2 < this.left) {
  							this.left = out2;
  						}
  						if(out2 > this.right) {
  							this.right = out2;
  						}
  					} else {
  						if(out2 < this.top) {
  							this.top = out2;
  						}
  						if(out2 > this.bottom) {
  							this.bottom = out2;
  						}
  					}
  					num2 = "";
  					arr2.push(out2);
  					++increment2;
  				}
  			}
  			this.count--;
  			return { v0 : arr2, v1 : command3};
  		default:
  			var command4 = "M";
  			this.last = command4;
  			var num3 = "";
  			var increment3 = 0;
  			var isX3 = true;
  			var arr3 = [];
  			while(increment3 < 2) {
  				var char3 = this.str.charAt(this.count);
  				this.count++;
  				var tmp7;
  				var tmp8;
  				switch(char3) {
  				case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9":
  					tmp8 = true;
  					break;
  				default:
  					tmp8 = false;
  				}
  				if(!tmp8) {
  					tmp7 = char3 == ".";
  				} else {
  					tmp7 = true;
  				}
  				if(tmp7) {
  					num3 += char3;
  				} else {
  					isX3 = !isX3;
  					var out3 = parseFloat(num3);
  					if(isX3) {
  						if(out3 < this.left) {
  							this.left = out3;
  						}
  						if(out3 > this.right) {
  							this.right = out3;
  						}
  					} else {
  						if(out3 < this.top) {
  							this.top = out3;
  						}
  						if(out3 > this.bottom) {
  							this.bottom = out3;
  						}
  					}
  					num3 = "";
  					arr3.push(out3);
  					++increment3;
  				}
  			}
  			this.count--;
  			return { v0 : arr3, v1 : command4};
  		}
  	}
  	,createCommandData: function(len,command) {
  		this.last = command;
  		var num = "";
  		var increment = 0;
  		var isX = true;
  		var arr = [];
  		while(increment < len) {
  			var $char = this.str.charAt(this.count);
  			this.count++;
  			var tmp;
  			var tmp1;
  			switch($char) {
  			case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9":
  				tmp1 = true;
  				break;
  			default:
  				tmp1 = false;
  			}
  			if(!tmp1) {
  				tmp = $char == ".";
  			} else {
  				tmp = true;
  			}
  			if(tmp) {
  				num += $char;
  			} else {
  				isX = !isX;
  				var out = parseFloat(num);
  				if(isX) {
  					if(out < this.left) {
  						this.left = out;
  					}
  					if(out > this.right) {
  						this.right = out;
  					}
  				} else {
  					if(out < this.top) {
  						this.top = out;
  					}
  					if(out > this.bottom) {
  						this.bottom = out;
  					}
  				}
  				num = "";
  				arr.push(out);
  				++increment;
  			}
  		}
  		this.count--;
  		return { v0 : arr, v1 : command};
  	}
  	,getCentre: function() {
  		if(!this.hasIterated) {
  			var a = [];
  			var x = this.iterator();
  			while(x.hasNext()) a.push(x.next());
  		}
  		return { x : this.left + (this.right - this.left) / 2, y : this.top + (this.bottom - this.top) / 2};
  	}
  	,__class__: letters_Path
  };
  var letters_paragraphPath_GraphicsPoints = function() { };
  letters_paragraphPath_GraphicsPoints.__name__ = true;
  letters_paragraphPath_GraphicsPoints.drawLinePath = function(arr) {
  	var g = turtle_Turtle.surface;
  	var string;
  	g.fillStyle = "rgba(" + 255 + "," + 0 + "," + 255 + "," + 0.0 + ")";
  	string = "#" + StringTools.hex(3355443,6);
  	g.strokeStyle = string;
  	g.lineWidth = 1;
  	g.moveTo(arr[0].x,arr[0].y);
  	var _g = 0;
  	while(_g < arr.length) {
  		var p = arr[_g];
  		++_g;
  		g.lineTo(p.x,p.y);
  	}
  	g.stroke();
  };
  letters_paragraphPath_GraphicsPoints.drawCommandsMore = function(renderPath) {
  	var g = turtle_Turtle.surface;
  	g.strokeStyle = "#" + StringTools.hex(0,6);
  	g.lineWidth = 1;
  	g.fillStyle = "#" + StringTools.hex(0,6);
  	g.beginPath();
  	turtle_Turtle.drawCommands(g,renderPath);
  	g.stroke();
  	g.closePath();
  	g.fill();
  };
  letters_paragraphPath_GraphicsPoints.drawCommandsAndFill = function(renderPath,line,fill) {
  	var col;
  	var g = turtle_Turtle.surface;
  	col = line;
  	g.strokeStyle = "#" + StringTools.hex(col,6);
  	g.lineWidth = 1;
  	col = fill;
  	g.fillStyle = "#" + StringTools.hex(col,6);
  	g.beginPath();
  	turtle_Turtle.drawCommands(g,renderPath);
  	g.stroke();
  	g.closePath();
  	g.fill();
  };
  var letters_paragraphPath_ParagraphPathDemo = function() {
  	new turtle_Turtle();
  	this.showInstructions();
  	this.pointMaker = new letters_paragraphPath_PointMaker(40,$bind(this,this.draw));
  };
  letters_paragraphPath_ParagraphPathDemo.__name__ = true;
  letters_paragraphPath_ParagraphPathDemo.main = function() {
  	new letters_paragraphPath_ParagraphPathDemo();
  };
  letters_paragraphPath_ParagraphPathDemo.prototype = {
  	showInstructions: function() {
  		var dim2_pos;
  		var coloring = letters_Path.rainbowPencilHighlight;
  		var y = 50.;
  		var width = 300.;
  		var lineSpace = 22.;
  		var path = null;
  		if(path == null) {
  			path = [];
  		}
  		if(false) {
  			width = 1000000;
  			lineSpace = 0;
  		}
  		var temp;
  		var x1 = 100.;
  		var x2 = 100.;
  		var dx = 0.;
  		var y1 = 50.;
  		var tempDim;
  		var word = [];
  		var letterResource = new letters_LetterResource();
  		var arrStr = "click on screen to create a path of forty points for the text to follow".split("");
  		var counta = 0;
  		if(coloring != null) {
  			var j = "";
  			var count = 1;
  			var wordContent = "";
  			if(1 < arrStr.length) {
  				while(j != " " && count < arrStr.length) {
  					j = arrStr[count];
  					if(j != " ") {
  						wordContent += j;
  					}
  					++count;
  				}
  				path.push({ v0 : [coloring(wordContent)], v1 : "F"});
  			}
  		}
  		var _g = 0;
  		while(_g < arrStr.length) {
  			var i = arrStr[_g];
  			++_g;
  			x2 = x1;
  			if(i != " " && i != "") {
  				y1 = y;
  				var vert;
  				switch(i) {
  				case "g":
  					vert = -1.9;
  					break;
  				case "m":
  					vert = -0.5;
  					break;
  				default:
  					vert = 0.;
  				}
  				var preX;
  				switch(i) {
  				case "r":
  					preX = 1.;
  					break;
  				case "i":case "s":
  					preX = 2.;
  					break;
  				default:
  					preX = 0.;
  				}
  				if(vert != 0) {
  					y1 += vert * .7;
  				}
  				if(preX != 0) {
  					x1 += preX * .7;
  				}
  				var path1;
  				var _this = letterResource.letters;
  				if(__map_reserved[i] != null ? _this.existsReserved(i) : _this.h.hasOwnProperty(i)) {
  					var _this1 = letterResource.letters;
  					if(__map_reserved[i] != null) {
  						path1 = _this1.getReserved(i);
  					} else {
  						path1 = _this1.h[i];
  					}
  				} else {
  					var patha = new letters_Path(haxe_Resource.getString(i + "letter"));
  					var _this2 = letterResource.letters;
  					if(__map_reserved[i] != null) {
  						_this2.setReserved(i,patha);
  					} else {
  						_this2.h[i] = patha;
  					}
  					path1 = patha;
  				}
  				var x = x1;
  				var y2 = y1;
  				var a = [];
  				var x3 = $iterator(path1)();
  				while(x3.hasNext()) {
  					var x4 = x3.next();
  					var v0 = x4.v0;
  					var v1 = x4.v1;
  					switch(v1) {
  					case "L":case "M":
  						v0 = [.7 * v0[0] + x,.7 * v0[1] + y2];
  						break;
  					case "Q":
  						v0 = [.7 * v0[0] + x,.7 * v0[1] + y2,.7 * v0[2] + x,.7 * v0[3] + y2];
  						break;
  					default:
  					}
  					a.push({ v0 : v0, v1 : v1});
  				}
  				temp = a;
  				var l = 1000000;
  				var t = 1000000;
  				var r = -1000000;
  				var b = -1000000;
  				var x5;
  				var y3;
  				var i1 = $iterator(a)();
  				while(i1.hasNext()) {
  					var i2 = i1.next();
  					var v = i2.v0;
  					switch(i2.v1) {
  					case "L":case "M":case "Q":
  						x5 = v[0];
  						y3 = v[1];
  						if(x5 < l) {
  							l = x5;
  						}
  						if(x5 > r) {
  							r = x5;
  						}
  						if(y3 < t) {
  							t = y3;
  						}
  						if(y3 > b) {
  							b = y3;
  						}
  						if(v.length > 2) {
  							x5 = v[2];
  							y3 = v[3];
  							if(x5 < l) {
  								l = x5;
  							}
  							if(x5 > r) {
  								r = x5;
  							}
  							if(y3 < t) {
  								t = y3;
  							}
  							if(y3 > b) {
  								b = y3;
  							}
  						}
  						break;
  					default:
  					}
  				}
  				tempDim = { pos : { x : l, y : t}, dim : { x : r - l, y : b - t}, centre : { x : l + (r - l) / 2, y : t + (b - t) / 2}, end : { x : r, y : b}};
  				dx = x2 - tempDim.pos.x;
  				var postX;
  				switch(i) {
  				case "f":
  					postX = -2.;
  					break;
  				case "i":case "j":
  					postX = 3.;
  					break;
  				case "r":
  					postX = -1.;
  					break;
  				default:
  					postX = 0.;
  				}
  				if(postX != 0) {
  					x1 += postX * .7;
  				}
  				if(preX != 0) {
  					dx += preX * .7;
  				}
  				x1 += tempDim.dim.x + 1.4;
  				var x6 = dx;
  				var y4 = 0;
  				var x0 = x6 == 0;
  				if(x0) {
  					temp = Lambda.array(a);
  				} else if(x0) {
  					var a1 = [];
  					var x7 = $iterator(a)();
  					while(x7.hasNext()) {
  						var x8 = x7.next();
  						var v01 = x8.v0;
  						var v11 = x8.v1;
  						switch(v11) {
  						case "L":case "M":
  							v01 = [v01[0],y4 + v01[1]];
  							break;
  						case "Q":
  							v01 = [v01[0],y4 + v01[1],v01[2],y4 + v01[3]];
  							break;
  						default:
  						}
  						a1.push({ v0 : v01, v1 : v11});
  					}
  					temp = a1;
  				} else {
  					var a2 = [];
  					var x9 = $iterator(a)();
  					while(x9.hasNext()) {
  						var x10 = x9.next();
  						var v02 = x10.v0;
  						var v12 = x10.v1;
  						switch(v12) {
  						case "L":case "M":
  							v02 = [x6 + v02[0],v02[1]];
  							break;
  						case "Q":
  							v02 = [x6 + v02[0],v02[1],x6 + v02[2],v02[3]];
  							break;
  						default:
  						}
  						a2.push({ v0 : v02, v1 : v12});
  					}
  					temp = a2;
  				}
  				if(x1 > width) {
  					y += lineSpace;
  					word = word.concat(temp);
  					var l1 = 1000000;
  					var t1 = 1000000;
  					var r1 = -1000000;
  					var b1 = -1000000;
  					var x11;
  					var y5;
  					var i3 = $iterator(word)();
  					while(i3.hasNext()) {
  						var i4 = i3.next();
  						var v2 = i4.v0;
  						switch(i4.v1) {
  						case "L":case "M":case "Q":
  							x11 = v2[0];
  							y5 = v2[1];
  							if(x11 < l1) {
  								l1 = x11;
  							}
  							if(x11 > r1) {
  								r1 = x11;
  							}
  							if(y5 < t1) {
  								t1 = y5;
  							}
  							if(y5 > b1) {
  								b1 = y5;
  							}
  							if(v2.length > 2) {
  								x11 = v2[2];
  								y5 = v2[3];
  								if(x11 < l1) {
  									l1 = x11;
  								}
  								if(x11 > r1) {
  									r1 = x11;
  								}
  								if(y5 < t1) {
  									t1 = y5;
  								}
  								if(y5 > b1) {
  									b1 = y5;
  								}
  							}
  							break;
  						default:
  						}
  					}
  					dim2_pos = { x : l1, y : t1};
  					var repos = 100. - dim2_pos.x;
  					var y6 = lineSpace;
  					var x01 = repos == 0;
  					var y0 = y6 == 0;
  					if(x01 && y0) {
  						word = Lambda.array(word);
  					} else if(x01) {
  						var a3 = [];
  						var x12 = $iterator(word)();
  						while(x12.hasNext()) {
  							var x13 = x12.next();
  							var v03 = x13.v0;
  							var v13 = x13.v1;
  							switch(v13) {
  							case "L":case "M":
  								v03 = [v03[0],y6 + v03[1]];
  								break;
  							case "Q":
  								v03 = [v03[0],y6 + v03[1],v03[2],y6 + v03[3]];
  								break;
  							default:
  							}
  							a3.push({ v0 : v03, v1 : v13});
  						}
  						word = a3;
  					} else if(y0) {
  						var a4 = [];
  						var x14 = $iterator(word)();
  						while(x14.hasNext()) {
  							var x15 = x14.next();
  							var v04 = x15.v0;
  							var v14 = x15.v1;
  							switch(v14) {
  							case "L":case "M":
  								v04 = [repos + v04[0],v04[1]];
  								break;
  							case "Q":
  								v04 = [repos + v04[0],v04[1],repos + v04[2],v04[3]];
  								break;
  							default:
  							}
  							a4.push({ v0 : v04, v1 : v14});
  						}
  						word = a4;
  					} else {
  						var a5 = [];
  						var x16 = $iterator(word)();
  						while(x16.hasNext()) {
  							var x17 = x16.next();
  							var v05 = x17.v0;
  							var v15 = x17.v1;
  							switch(v15) {
  							case "L":case "M":
  								v05 = [repos + v05[0],y6 + v05[1]];
  								break;
  							case "Q":
  								v05 = [repos + v05[0],y6 + v05[1],repos + v05[2],y6 + v05[3]];
  								break;
  							default:
  							}
  							a5.push({ v0 : v05, v1 : v15});
  						}
  						word = a5;
  					}
  					x1 += repos;
  				} else {
  					word = word.concat(temp);
  				}
  			} else {
  				path = path.concat(word);
  				if(coloring != null) {
  					var j1 = "";
  					var count1 = counta + 1;
  					var wordContent1 = "";
  					if(count1 < arrStr.length) {
  						while(j1 != " " && count1 < arrStr.length) {
  							j1 = arrStr[count1];
  							if(j1 != " ") {
  								wordContent1 += j1;
  							}
  							++count1;
  						}
  						path.push({ v0 : [coloring(wordContent1)], v1 : "F"});
  					}
  				}
  				x1 += 10.5;
  				word = [];
  			}
  			++counta;
  		}
  		path = path.concat(word);
  		var path2 = path;
  		path2 = letters_Path.rotateXYZ(path2,Math.PI / 10,Math.PI / 3,Math.PI / 10,1);
  		var x18 = 3;
  		var y7 = 3;
  		var a6 = [];
  		var x19 = $iterator(path2)();
  		while(x19.hasNext()) {
  			var x20 = x19.next();
  			var v06 = x20.v0;
  			var v16 = x20.v1;
  			switch(v16) {
  			case "L":case "M":
  				v06 = [x18 * v06[0],y7 * v06[1]];
  				break;
  			case "Q":
  				v06 = [x18 * v06[0],y7 * v06[1],x18 * v06[2],y7 * v06[3]];
  				break;
  			default:
  			}
  			a6.push({ v0 : v06, v1 : v16});
  		}
  		path2 = a6;
  		turtle_Turtle.drawCommands(turtle_Turtle.surface,path2);
  	}
  	,draw: function() {
  		var arr = this.pointMaker.points;
  		var out = [];
  		var a;
  		var b;
  		var len = arr.length - 2;
  		var _g1 = 0;
  		while(_g1 < len) {
  			var i = _g1++;
  			a = arr[i];
  			b = arr[i + 1];
  			out.push({ x : (b.x + a.x) / 2, y : (b.y + a.y) / 2});
  			out.push({ x : b.x, y : b.y});
  		}
  		a = arr[0];
  		out.unshift({ x : a.x, y : a.y});
  		out.unshift({ x : a.x, y : a.y});
  		b = arr[arr.length - 1];
  		out.push({ x : b.x, y : b.y});
  		out.push({ x : b.x, y : b.y});
  		out.push({ x : b.x, y : b.y});
  		var totDistance;
  		var currDistance = [];
  		var accumDistance = [];
  		var points = [];
  		totDistance = 0;
  		var dist3 = new letters_pathway_ThreeIterator(0,out.length,1);
  		dist3.arr = out;
  		while(dist3.hasNext()) {
  			dist3.next();
  			var pNext = dist3.arrNext;
  			var p0 = pNext[0];
  			var p1 = pNext[1];
  			var x = p0.x - p1.x;
  			var y = p0.y - p1.y;
  			var d = Math.sqrt(x * x + y * y);
  			currDistance.push(d);
  			accumDistance.push(totDistance);
  			totDistance += d;
  		}
  		var iterator3 = new letters_pathway_ThreeIterator(0,out.length,2);
  		iterator3.arr = out;
  		while(iterator3.hasNext()) {
  			var i1 = iterator3.next();
  			var factor;
  			if(currDistance.length > i1) {
  				factor = 10 * currDistance[i1] / totDistance;
  			} else {
  				factor = 0.01;
  			}
  			if(factor == 0) {
  				factor = 0.01;
  			}
  			var it0_1 = new letters_pathway_Iterator0_$1(0.01);
  			var pNext1 = iterator3.arrNext;
  			while(it0_1.hasNext()) {
  				var t = it0_1.next();
  				var u = 1 - t;
  				var u1 = 1 - t;
  				points.push({ x : Math.pow(u,2) * pNext1[0].x + 2 * u * t * pNext1[1].x + Math.pow(t,2) * pNext1[2].x, y : Math.pow(u1,2) * pNext1[0].y + 2 * u1 * t * pNext1[1].y + Math.pow(t,2) * pNext1[2].y});
  			}
  		}
  		var thetas = [];
  		var points1 = [];
  		var iterTheta3 = new letters_pathway_ThreeIterator(0,points.length,1);
  		iterTheta3.arr = points;
  		while(iterTheta3.hasNext()) {
  			iterTheta3.next();
  			var pNext2 = iterTheta3.arrNext;
  			var p01 = pNext2[0];
  			var p11 = pNext2[1];
  			var p02 = pNext2[1];
  			var p12 = pNext2[2];
  			thetas.push((Math.atan2(p11.y - p01.y,p11.x - p01.x) + Math.atan2(p12.y - p02.y,p12.x - p02.x)) / 2);
  		}
  		thetas.unshift(thetas[0]);
  		thetas.unshift(thetas[0]);
  		var aSidePoint;
  		var theta = thetas[0];
  		var nextP = points[0];
  		var lastSidePoint = { x : nextP.x, y : nextP.y, dx : 5 * Math.cos(theta + Math.PI / 2), dy : 5 * Math.sin(theta + Math.PI / 2)};
  		var count = 0;
  		var _g = 0;
  		while(_g < points.length) {
  			var p = points[_g];
  			++_g;
  			var theta1 = thetas[count];
  			var dx = 5 * Math.cos(theta1 + Math.PI / 2);
  			var dy = 5 * Math.sin(theta1 + Math.PI / 2);
  			var x1 = p.x + 15 * dx;
  			var y1 = p.y + 15 * dy;
  			var x2 = p.x - 15 * dx;
  			var y2 = p.y - 15 * dy;
  			var sAx = lastSidePoint.x + 15 * lastSidePoint.dx;
  			var sAy = lastSidePoint.y + 15 * lastSidePoint.dy;
  			var sBx = lastSidePoint.x - 15 * lastSidePoint.dx;
  			var sBy = lastSidePoint.y - 15 * lastSidePoint.dy;
  			var x3 = x1 - sAx;
  			var y3 = y1 - sAy;
  			var x4 = x2 - sBx;
  			var y4 = y2 - sBy;
  			var x5 = x2 - sAx;
  			var y5 = y2 - sAy;
  			var x6 = x1 - sBx;
  			var y6 = y1 - sBy;
  			var x7 = x1 - sAx;
  			var y7 = y1 - sAy;
  			var x8 = x2 - sBx;
  			var y8 = y2 - sBy;
  			var x9 = x2 - sAx;
  			var y9 = y2 - sAy;
  			var x10 = x1 - sBx;
  			var y10 = y1 - sBy;
  			if(!(Math.abs(Math.sqrt(x3 * x3 + y3 * y3) - Math.sqrt(x4 * x4 + y4 * y4)) > Math.abs(Math.sqrt(x5 * x5 + y5 * y5) - Math.sqrt(x6 * x6 + y6 * y6)) && Math.sqrt(x7 * x7 + y7 * y7) + Math.sqrt(x8 * x8 + y8 * y8) < Math.sqrt(x9 * x9 + y9 * y9) + Math.sqrt(x10 * x10 + y10 * y10))) {
  				dx = -dx;
  				dy = -dy;
  			}
  			aSidePoint = { x : p.x, y : p.y, dx : dx, dy : dy};
  			++count;
  			points1.push(aSidePoint);
  			lastSidePoint = aSidePoint;
  		}
  		new letters_paragraphPath_ParagraphPathRepeat("hi my name is justin and i live in bath a small city in the south west of the uk",points1);
  	}
  	,__class__: letters_paragraphPath_ParagraphPathDemo
  };
  var letters_paragraphPath_ParagraphPathRepeat = function(sentence,sidePoints_) {
  	this.count = 0;
  	var dim2_pos;
  	turtle_Turtle.surface.clearRect(0,0,Std.parseInt("1000"),Std.parseInt("800"));
  	this.sidePoints = sidePoints_;
  	var coloring = letters_Path.rainbowPencilHighlight;
  	var y = 200.;
  	var path = null;
  	if(path == null) {
  		path = [];
  	}
  	var temp;
  	var x1 = 43.;
  	var x2 = 43.;
  	var dx = 0.;
  	var y1 = 200.;
  	var tempDim;
  	var word = [];
  	var letterResource = new letters_LetterResource();
  	var arrStr = sentence.split("");
  	var counta = 0;
  	if(coloring != null) {
  		var j = "";
  		var count = 1;
  		var wordContent = "";
  		if(1 < arrStr.length) {
  			while(j != " " && count < arrStr.length) {
  				j = arrStr[count];
  				if(j != " ") {
  					wordContent += j;
  				}
  				++count;
  			}
  			var $float = [coloring(wordContent)];
  			var commandEnum = "F";
  			var this1 = { v0 : $float, v1 : commandEnum};
  			if(coloring != null) {
  				$float = [coloring(wordContent)];
  				commandEnum = "O";
  				path.push({ v0 : $float, v1 : commandEnum});
  			}
  			path.push(this1);
  		}
  	}
  	var _g = 0;
  	while(_g < arrStr.length) {
  		var i = arrStr[_g];
  		++_g;
  		x2 = x1;
  		if(i != " " && i != "") {
  			y1 = y;
  			var vert;
  			switch(i) {
  			case "g":
  				vert = -1.9;
  				break;
  			case "m":
  				vert = -0.5;
  				break;
  			default:
  				vert = 0.;
  			}
  			var preX;
  			switch(i) {
  			case "r":
  				preX = 1.;
  				break;
  			case "i":case "s":
  				preX = 2.;
  				break;
  			default:
  				preX = 0.;
  			}
  			if(vert != 0) {
  				y1 += vert * .7;
  			}
  			if(preX != 0) {
  				x1 += preX * .7;
  			}
  			var path1;
  			var _this = letterResource.letters;
  			if(__map_reserved[i] != null ? _this.existsReserved(i) : _this.h.hasOwnProperty(i)) {
  				var _this1 = letterResource.letters;
  				if(__map_reserved[i] != null) {
  					path1 = _this1.getReserved(i);
  				} else {
  					path1 = _this1.h[i];
  				}
  			} else {
  				var patha = new letters_Path(haxe_Resource.getString(i + "letter"));
  				var _this2 = letterResource.letters;
  				if(__map_reserved[i] != null) {
  					_this2.setReserved(i,patha);
  				} else {
  					_this2.h[i] = patha;
  				}
  				path1 = patha;
  			}
  			var x = x1;
  			var y2 = y1;
  			var a = [];
  			var x3 = $iterator(path1)();
  			while(x3.hasNext()) {
  				var x4 = x3.next();
  				var v0 = x4.v0;
  				var v1 = x4.v1;
  				switch(v1) {
  				case "L":case "M":
  					v0 = [.7 * v0[0] + x,.7 * v0[1] + y2];
  					break;
  				case "Q":
  					v0 = [.7 * v0[0] + x,.7 * v0[1] + y2,.7 * v0[2] + x,.7 * v0[3] + y2];
  					break;
  				default:
  				}
  				a.push({ v0 : v0, v1 : v1});
  			}
  			temp = a;
  			var l = 1000000;
  			var t = 1000000;
  			var r = -1000000;
  			var b = -1000000;
  			var x5;
  			var y3;
  			var i1 = $iterator(a)();
  			while(i1.hasNext()) {
  				var i2 = i1.next();
  				var v = i2.v0;
  				switch(i2.v1) {
  				case "L":case "M":case "Q":
  					x5 = v[0];
  					y3 = v[1];
  					if(x5 < l) {
  						l = x5;
  					}
  					if(x5 > r) {
  						r = x5;
  					}
  					if(y3 < t) {
  						t = y3;
  					}
  					if(y3 > b) {
  						b = y3;
  					}
  					if(v.length > 2) {
  						x5 = v[2];
  						y3 = v[3];
  						if(x5 < l) {
  							l = x5;
  						}
  						if(x5 > r) {
  							r = x5;
  						}
  						if(y3 < t) {
  							t = y3;
  						}
  						if(y3 > b) {
  							b = y3;
  						}
  					}
  					break;
  				default:
  				}
  			}
  			tempDim = { pos : { x : l, y : t}, dim : { x : r - l, y : b - t}, centre : { x : l + (r - l) / 2, y : t + (b - t) / 2}, end : { x : r, y : b}};
  			dx = x2 - tempDim.pos.x;
  			var postX;
  			switch(i) {
  			case "f":
  				postX = -2.;
  				break;
  			case "i":case "j":
  				postX = 3.;
  				break;
  			case "r":
  				postX = -1.;
  				break;
  			default:
  				postX = 0.;
  			}
  			if(postX != 0) {
  				x1 += postX * .7;
  			}
  			if(preX != 0) {
  				dx += preX * .7;
  			}
  			x1 += tempDim.dim.x + 1.4;
  			var x6 = dx;
  			var y4 = 0;
  			var x0 = x6 == 0;
  			if(x0) {
  				temp = Lambda.array(a);
  			} else if(x0) {
  				var a1 = [];
  				var x7 = $iterator(a)();
  				while(x7.hasNext()) {
  					var x8 = x7.next();
  					var v01 = x8.v0;
  					var v11 = x8.v1;
  					switch(v11) {
  					case "L":case "M":
  						v01 = [v01[0],y4 + v01[1]];
  						break;
  					case "Q":
  						v01 = [v01[0],y4 + v01[1],v01[2],y4 + v01[3]];
  						break;
  					default:
  					}
  					a1.push({ v0 : v01, v1 : v11});
  				}
  				temp = a1;
  			} else {
  				var a2 = [];
  				var x9 = $iterator(a)();
  				while(x9.hasNext()) {
  					var x10 = x9.next();
  					var v02 = x10.v0;
  					var v12 = x10.v1;
  					switch(v12) {
  					case "L":case "M":
  						v02 = [x6 + v02[0],v02[1]];
  						break;
  					case "Q":
  						v02 = [x6 + v02[0],v02[1],x6 + v02[2],v02[3]];
  						break;
  					default:
  					}
  					a2.push({ v0 : v02, v1 : v12});
  				}
  				temp = a2;
  			}
  			if(x1 > 640.) {
  				y += 22.;
  				word = word.concat(temp);
  				var l1 = 1000000;
  				var t1 = 1000000;
  				var r1 = -1000000;
  				var b1 = -1000000;
  				var x11;
  				var y5;
  				var i3 = $iterator(word)();
  				while(i3.hasNext()) {
  					var i4 = i3.next();
  					var v2 = i4.v0;
  					switch(i4.v1) {
  					case "L":case "M":case "Q":
  						x11 = v2[0];
  						y5 = v2[1];
  						if(x11 < l1) {
  							l1 = x11;
  						}
  						if(x11 > r1) {
  							r1 = x11;
  						}
  						if(y5 < t1) {
  							t1 = y5;
  						}
  						if(y5 > b1) {
  							b1 = y5;
  						}
  						if(v2.length > 2) {
  							x11 = v2[2];
  							y5 = v2[3];
  							if(x11 < l1) {
  								l1 = x11;
  							}
  							if(x11 > r1) {
  								r1 = x11;
  							}
  							if(y5 < t1) {
  								t1 = y5;
  							}
  							if(y5 > b1) {
  								b1 = y5;
  							}
  						}
  						break;
  					default:
  					}
  				}
  				dim2_pos = { x : l1, y : t1};
  				var repos = 43. - dim2_pos.x;
  				if(repos == 0) {
  					var a3 = [];
  					var x12 = $iterator(word)();
  					while(x12.hasNext()) {
  						var x13 = x12.next();
  						var v03 = x13.v0;
  						var v13 = x13.v1;
  						switch(v13) {
  						case "L":case "M":
  							v03 = [v03[0],22. + v03[1]];
  							break;
  						case "Q":
  							v03 = [v03[0],22. + v03[1],v03[2],22. + v03[3]];
  							break;
  						default:
  						}
  						a3.push({ v0 : v03, v1 : v13});
  					}
  					word = a3;
  				} else {
  					var a5 = [];
  					var x16 = $iterator(word)();
  					while(x16.hasNext()) {
  						var x17 = x16.next();
  						var v05 = x17.v0;
  						var v15 = x17.v1;
  						switch(v15) {
  						case "L":case "M":
  							v05 = [repos + v05[0],22. + v05[1]];
  							break;
  						case "Q":
  							v05 = [repos + v05[0],22. + v05[1],repos + v05[2],22. + v05[3]];
  							break;
  						default:
  						}
  						a5.push({ v0 : v05, v1 : v15});
  					}
  					word = a5;
  				}
  				x1 += repos;
  			} else {
  				word = word.concat(temp);
  			}
  		} else {
  			path = path.concat(word);
  			if(coloring != null) {
  				var j1 = "";
  				var count1 = counta + 1;
  				var wordContent1 = "";
  				if(count1 < arrStr.length) {
  					while(j1 != " " && count1 < arrStr.length) {
  						j1 = arrStr[count1];
  						if(j1 != " ") {
  							wordContent1 += j1;
  						}
  						++count1;
  					}
  					var float1 = [coloring(wordContent1)];
  					var commandEnum1 = "F";
  					var this2 = { v0 : float1, v1 : commandEnum1};
  					if(coloring != null) {
  						float1 = [coloring(wordContent1)];
  						commandEnum1 = "O";
  						path.push({ v0 : float1, v1 : commandEnum1});
  					}
  					path.push(this2);
  				}
  			}
  			x1 += 10.5;
  			word = [];
  		}
  		++counta;
  	}
  	path = path.concat(word);
  	var x18 = 43;
  	var y7 = -197;
  	var tmp;
  	var a6 = [];
  	var x19 = $iterator(path)();
  	while(x19.hasNext()) {
  		var x20 = x19.next();
  		var v06 = x20.v0;
  		var v16 = x20.v1;
  		switch(v16) {
  		case "L":case "M":
  			v06 = [x18 + v06[0],y7 + v06[1]];
  			break;
  		case "Q":
  			v06 = [x18 + v06[0],y7 + v06[1],x18 + v06[2],y7 + v06[3]];
  			break;
  		default:
  		}
  		a6.push({ v0 : v06, v1 : v16});
  	}
  	tmp = a6;
  	this.path1 = tmp;
  	var path2 = this.path1;
  	var tmp1;
  	var a7 = [];
  	var x21 = $iterator(path2)();
  	while(x21.hasNext()) {
  		var x22 = x21.next();
  		var v07 = x22.v0;
  		var v17 = x22.v1;
  		switch(v17) {
  		case "L":case "M":
  			v07 = [1.4 * v07[0],-0.3 * v07[1]];
  			break;
  		case "Q":
  			v07 = [1.4 * v07[0],-0.3 * v07[1],1.4 * v07[2],-0.3 * v07[3]];
  			break;
  		default:
  		}
  		a7.push({ v0 : v07, v1 : v17});
  	}
  	tmp1 = a7;
  	this.path1 = tmp1;
  	var path3 = this.path1;
  	var y8 = 10;
  	var tmp2;
  	var a8 = [];
  	var x23 = $iterator(path3)();
  	while(x23.hasNext()) {
  		var x24 = x23.next();
  		var v08 = x24.v0;
  		var v18 = x24.v1;
  		switch(v18) {
  		case "L":case "M":
  			v08 = [v08[0],y8 + v08[1]];
  			break;
  		case "Q":
  			v08 = [v08[0],y8 + v08[1],v08[2],y8 + v08[3]];
  			break;
  		default:
  		}
  		a8.push({ v0 : v08, v1 : v18});
  	}
  	tmp2 = a8;
  	this.path1 = tmp2;
  	this.sidePoints2 = [].concat(this.sidePoints);
  	new haxe_Timer(30).run = $bind(this,this.redraw);
  };
  letters_paragraphPath_ParagraphPathRepeat.__name__ = true;
  letters_paragraphPath_ParagraphPathRepeat.prototype = {
  	redraw: function() {
  		this.count += 0.1;
  		turtle_Turtle.surface.clearRect(0,0,Std.parseInt("1000"),Std.parseInt("800"));
  		var _g1 = 0;
  		var _g = this.sidePoints.length;
  		while(_g1 < _g) {
  			var i = _g1++;
  			this.sidePoints2[i].dx = this.sidePoints[i].dx + 0.5 * Math.sin(this.count);
  			this.sidePoints2[i].dy = this.sidePoints[i].dy + 0.5 * Math.cos(this.count);
  		}
  		var sidePoints_ = this.sidePoints2;
  		var pathIn = this.path1;
  		var a = [];
  		var x = $iterator(pathIn)();
  		while(x.hasNext()) {
  			var x1 = x.next();
  			var v0 = x1.v0;
  			var v1 = x1.v1;
  			var p1 = sidePoints_[Math.round(v0[0])];
  			switch(v1) {
  			case "L":case "M":
  				v0 = [p1.x + v0[1] * p1.dx,p1.y + v0[1] * p1.dy];
  				break;
  			case "Q":
  				var p2 = sidePoints_[Math.round(v0[2])];
  				v0 = [p1.x + v0[1] * p1.dx,p1.y + v0[1] * p1.dy,p2.x + v0[3] * p1.dx,p2.y + v0[3] * p1.dy];
  				break;
  			default:
  			}
  			a.push({ v0 : v0, v1 : v1});
  		}
  		var g = turtle_Turtle.surface;
  		turtle_Turtle.drawCommands(g,a);
  		var g1 = turtle_Turtle.surface;
  		g1.strokeStyle = "#" + StringTools.hex(0,6);
  		g1.lineWidth = 1;
  		g1.fillStyle = "#" + StringTools.hex(0,6);
  		g1.beginPath();
  		turtle_Turtle.drawCommands(g1,a);
  		g1.stroke();
  		g1.closePath();
  		g1.fill();
  		var aPath;
  		var lastPath = this.path1;
  		var l = 1000000;
  		var t = 1000000;
  		var r = -1000000;
  		var b = -1000000;
  		var x2;
  		var y;
  		var i1 = $iterator(lastPath)();
  		while(i1.hasNext()) {
  			var i2 = i1.next();
  			var v = i2.v0;
  			switch(i2.v1) {
  			case "L":case "M":case "Q":
  				x2 = v[0];
  				y = v[1];
  				if(x2 < l) {
  					l = x2;
  				}
  				if(x2 > r) {
  					r = x2;
  				}
  				if(y < t) {
  					t = y;
  				}
  				if(y > b) {
  					b = y;
  				}
  				if(v.length > 2) {
  					x2 = v[2];
  					y = v[3];
  					if(x2 < l) {
  						l = x2;
  					}
  					if(x2 > r) {
  						r = x2;
  					}
  					if(y < t) {
  						t = y;
  					}
  					if(y > b) {
  						b = y;
  					}
  				}
  				break;
  			default:
  			}
  		}
  		var paragraphWidth = ({ pos : { x : l, y : t}, dim : { x : r - l, y : b - t}, centre : { x : l + (r - l) / 2, y : t + (b - t) / 2}, end : { x : r, y : b}}).end.x;
  		var maxY = this.sidePoints.length + 1;
  		while(true) {
  			var l1 = 1000000;
  			var t1 = 1000000;
  			var r1 = -1000000;
  			var b1 = -1000000;
  			var x3;
  			var y1;
  			var i3 = $iterator(this.path1)();
  			while(i3.hasNext()) {
  				var i4 = i3.next();
  				var v2 = i4.v0;
  				switch(i4.v1) {
  				case "L":case "M":case "Q":
  					x3 = v2[0];
  					y1 = v2[1];
  					if(x3 < l1) {
  						l1 = x3;
  					}
  					if(x3 > r1) {
  						r1 = x3;
  					}
  					if(y1 < t1) {
  						t1 = y1;
  					}
  					if(y1 > b1) {
  						b1 = y1;
  					}
  					if(v2.length > 2) {
  						x3 = v2[2];
  						y1 = v2[3];
  						if(x3 < l1) {
  							l1 = x3;
  						}
  						if(x3 > r1) {
  							r1 = x3;
  						}
  						if(y1 < t1) {
  							t1 = y1;
  						}
  						if(y1 > b1) {
  							b1 = y1;
  						}
  					}
  					break;
  				default:
  				}
  			}
  			var x_ = ({ pos : { x : l1, y : t1}, dim : { x : r1 - l1, y : b1 - t1}, centre : { x : l1 + (r1 - l1) / 2, y : t1 + (b1 - t1) / 2}, end : { x : r1, y : b1}}).end.x + 1;
  			var y2 = 0;
  			var x0 = x_ == 0;
  			if(x0) {
  				aPath = Lambda.array(lastPath);
  			} else if(x0) {
  				var a1 = [];
  				var x4 = $iterator(lastPath)();
  				while(x4.hasNext()) {
  					var x5 = x4.next();
  					var v01 = x5.v0;
  					var v11 = x5.v1;
  					switch(v11) {
  					case "L":case "M":
  						v01 = [v01[0],y2 + v01[1]];
  						break;
  					case "Q":
  						v01 = [v01[0],y2 + v01[1],v01[2],y2 + v01[3]];
  						break;
  					default:
  					}
  					a1.push({ v0 : v01, v1 : v11});
  				}
  				aPath = a1;
  			} else {
  				var a2 = [];
  				var x6 = $iterator(lastPath)();
  				while(x6.hasNext()) {
  					var x7 = x6.next();
  					var v02 = x7.v0;
  					var v12 = x7.v1;
  					switch(v12) {
  					case "L":case "M":
  						v02 = [x_ + v02[0],v02[1]];
  						break;
  					case "Q":
  						v02 = [x_ + v02[0],v02[1],x_ + v02[2],v02[3]];
  						break;
  					default:
  					}
  					a2.push({ v0 : v02, v1 : v12});
  				}
  				aPath = a2;
  			}
  			var l2 = 1000000;
  			var t2 = 1000000;
  			var r2 = -1000000;
  			var b2 = -1000000;
  			var x8;
  			var y3;
  			var i5 = $iterator(aPath)();
  			while(i5.hasNext()) {
  				var i6 = i5.next();
  				var v3 = i6.v0;
  				switch(i6.v1) {
  				case "L":case "M":case "Q":
  					x8 = v3[0];
  					y3 = v3[1];
  					if(x8 < l2) {
  						l2 = x8;
  					}
  					if(x8 > r2) {
  						r2 = x8;
  					}
  					if(y3 < t2) {
  						t2 = y3;
  					}
  					if(y3 > b2) {
  						b2 = y3;
  					}
  					if(v3.length > 2) {
  						x8 = v3[2];
  						y3 = v3[3];
  						if(x8 < l2) {
  							l2 = x8;
  						}
  						if(x8 > r2) {
  							r2 = x8;
  						}
  						if(y3 < t2) {
  							t2 = y3;
  						}
  						if(y3 > b2) {
  							b2 = y3;
  						}
  					}
  					break;
  				default:
  				}
  			}
  			paragraphWidth = ({ pos : { x : l2, y : t2}, dim : { x : r2 - l2, y : b2 - t2}, centre : { x : l2 + (r2 - l2) / 2, y : t2 + (b2 - t2) / 2}, end : { x : r2, y : b2}}).end.x;
  			if(paragraphWidth > maxY) {
  				break;
  			}
  			var sidePoints_1 = this.sidePoints2;
  			var a3 = [];
  			var x9 = $iterator(aPath)();
  			while(x9.hasNext()) {
  				var x10 = x9.next();
  				var v03 = x10.v0;
  				var v13 = x10.v1;
  				var p11 = sidePoints_1[Math.round(v03[0])];
  				switch(v13) {
  				case "L":case "M":
  					v03 = [p11.x + v03[1] * p11.dx,p11.y + v03[1] * p11.dy];
  					break;
  				case "Q":
  					var p21 = sidePoints_1[Math.round(v03[2])];
  					v03 = [p11.x + v03[1] * p11.dx,p11.y + v03[1] * p11.dy,p21.x + v03[3] * p11.dx,p21.y + v03[3] * p11.dy];
  					break;
  				default:
  				}
  				a3.push({ v0 : v03, v1 : v13});
  			}
  			turtle_Turtle.drawCommands(g,a3);
  			lastPath = aPath;
  		}
  	}
  	,__class__: letters_paragraphPath_ParagraphPathRepeat
  };
  var letters_paragraphPath_PointMaker = function(tot_,fin_) {
  	this.hasFin = false;
  	this.points = [];
  	this.fin = fin_;
  	this.tot = tot_;
  	var func = $bind(this,this.createPoint);
  	if(func == null) {
  		var _g = 0;
  		var _g1 = turtle_Turtle.pressDownStageFunc;
  		while(_g < _g1.length) {
  			++_g;
  			window.document.body.onmousedown = null;
  		}
  	} else {
  		window.document.body.onmousedown = func;
  		turtle_Turtle.pressDownStageFunc.push(func);
  	}
  };
  letters_paragraphPath_PointMaker.__name__ = true;
  letters_paragraphPath_PointMaker.prototype = {
  	createPoint: function(e) {
  		var currPos;
  		var p = e;
  		currPos = { x : Math.round(p.clientX), y : Math.round(p.clientY)};
  		var pos = currPos;
  		this.points.push({ x : pos.x, y : pos.y});
  		var arr = this.points;
  		var g = turtle_Turtle.surface;
  		var string;
  		var col;
  		g.fillStyle = "rgba(" + 255 + "," + 0 + "," + 255 + "," + 0.0 + ")";
  		col = 3355443;
  		string = "#" + StringTools.hex(col,6);
  		g.strokeStyle = string;
  		g.lineWidth = 1;
  		g.moveTo(arr[0].x,arr[0].y);
  		var _g = 0;
  		while(_g < arr.length) {
  			var p1 = arr[_g];
  			++_g;
  			g.lineTo(p1.x,p1.y);
  		}
  		g.stroke();
  		this.randomColor();
  		var x = pos.x;
  		var y = pos.y;
  		turtle_Turtle.surface.beginPath();
  		turtle_Turtle.surface.arc(x,y,8,0,2 * Math.PI,false);
  		turtle_Turtle.surface.stroke();
  		turtle_Turtle.surface.closePath();
  		turtle_Turtle.surface.fill();
  		if(this.points.length == this.tot) {
  			turtle_Turtle.surface.clearRect(0,0,Std.parseInt("1000"),Std.parseInt("800"));
  			var _g1 = 0;
  			var _g11 = turtle_Turtle.pressDownStageFunc;
  			while(_g1 < _g11.length) {
  				++_g1;
  				window.document.body.onmousedown = null;
  			}
  			this.hasFin = true;
  			this.fin();
  		}
  	}
  	,randomColor: function() {
  		var g = turtle_Turtle.surface;
  		var col1 = letters_paragraphPath_RainbowPencilColours.random();
  		var string = "#" + StringTools.hex(col1,6);
  		g.strokeStyle = string;
  		g.lineWidth = 2;
  		var col2 = col1;
  		while(col1 == col2) col2 = letters_paragraphPath_RainbowPencilColours.random();
  		if(this.points.length == 0) {
  			string = "#" + StringTools.hex(65280,6);
  			g.fillStyle = string;
  		} else if(this.points.length == this.tot - 1) {
  			string = "#" + StringTools.hex(16711680,6);
  			g.fillStyle = string;
  		} else {
  			string = "#" + StringTools.hex(col2,6);
  			g.fillStyle = string;
  		}
  	}
  	,__class__: letters_paragraphPath_PointMaker
  };
  var letters_paragraphPath_RainbowPencilColours = function() { };
  letters_paragraphPath_RainbowPencilColours.__name__ = true;
  letters_paragraphPath_RainbowPencilColours.colors = function() {
  	return [13816001,13467688,13802769,14905640,15755121,13777201,11480113,9450302,8797520,5786205,5545667,2912413,4553390,3558765,3640429,7251784,3562916,4550210,12683310,8467492,4206116,2696224,5396305,1776409];
  };
  letters_paragraphPath_RainbowPencilColours.random = function() {
  	var col = [13816001,13467688,13802769,14905640,15755121,13777201,11480113,9450302,8797520,5786205,5545667,2912413,4553390,3558765,3640429,7251784,3562916,4550210,12683310,8467492,4206116,2696224,5396305,1776409];
  	return col[Math.round(Math.random() * (col.length + 1))];
  };
  var letters_pathway_Equa = function() { };
  letters_pathway_Equa.__name__ = true;
  letters_pathway_Equa.getEquaPoints = function(pointsIn,numSections) {
  	var totDistance;
  	var currDistance = [];
  	var accumDistance = [];
  	var points = [];
  	totDistance = 0;
  	var dist3 = new letters_pathway_ThreeIterator(0,pointsIn.length,1);
  	dist3.arr = pointsIn;
  	while(dist3.hasNext()) {
  		dist3.next();
  		var pNext = dist3.arrNext;
  		var p0 = pNext[0];
  		var p1 = pNext[1];
  		var x = p0.x - p1.x;
  		var y = p0.y - p1.y;
  		var d = Math.sqrt(x * x + y * y);
  		currDistance.push(d);
  		accumDistance.push(totDistance);
  		totDistance += d;
  	}
  	var iterator3 = new letters_pathway_ThreeIterator(0,pointsIn.length,2);
  	iterator3.arr = pointsIn;
  	while(iterator3.hasNext()) {
  		var i = iterator3.next();
  		var factor;
  		var factorWorks = 1 / numSections;
  		if(currDistance.length > i) {
  			factor = 10 * currDistance[i] / totDistance;
  		} else {
  			factor = factorWorks;
  		}
  		if(factor == 0) {
  			factor = factorWorks;
  		}
  		var it0_1 = new letters_pathway_Iterator0_$1(factorWorks);
  		var pNext1 = iterator3.arrNext;
  		while(it0_1.hasNext()) {
  			var t = it0_1.next();
  			var u = 1 - t;
  			var u1 = 1 - t;
  			points.push({ x : Math.pow(u,2) * pNext1[0].x + 2 * u * t * pNext1[1].x + Math.pow(t,2) * pNext1[2].x, y : Math.pow(u1,2) * pNext1[0].y + 2 * u1 * t * pNext1[1].y + Math.pow(t,2) * pNext1[2].y});
  		}
  	}
  	return { totDistance : totDistance, currDistance : currDistance, accumDistance : accumDistance, points : points};
  };
  var letters_pathway_Iterator0_$1 = function(step_) {
  	this.min = 0.;
  	this.step = step_;
  	this.count = 1;
  	this.max = 1.;
  };
  letters_pathway_Iterator0_$1.__name__ = true;
  letters_pathway_Iterator0_$1.prototype = {
  	hasNext: function() {
  		return this.min < this.max;
  	}
  	,next: function() {
  		var minOld = Math.round(this.min * 1000000) / 1000000;
  		this.min = this.count++ * this.step;
  		return minOld;
  	}
  	,iterator: function() {
  		return this;
  	}
  	,__class__: letters_pathway_Iterator0_$1
  };
  var letters_pathway_MathPoints = function() { };
  letters_pathway_MathPoints.__name__ = true;
  letters_pathway_MathPoints.arcTan = function(p0,p1) {
  	return Math.atan2(p1.y - p0.y,p1.x - p0.x);
  };
  letters_pathway_MathPoints.distance = function(p0,p1) {
  	var x = p0.x - p1.x;
  	var y = p0.y - p1.y;
  	return Math.sqrt(x * x + y * y);
  };
  letters_pathway_MathPoints.quadraticBezier = function(t,arr) {
  	var u = 1 - t;
  	var u1 = 1 - t;
  	return { x : Math.pow(u,2) * arr[0].x + 2 * u * t * arr[1].x + Math.pow(t,2) * arr[2].x, y : Math.pow(u1,2) * arr[0].y + 2 * u1 * t * arr[1].y + Math.pow(t,2) * arr[2].y};
  };
  letters_pathway_MathPoints._quadraticBezier = function(t,startPoint,controlPoint,endPoint) {
  	var u = 1 - t;
  	return Math.pow(u,2) * startPoint + 2 * u * t * controlPoint + Math.pow(t,2) * endPoint;
  };
  letters_pathway_MathPoints.generateMidPoints = function(arr) {
  	var out = [];
  	var a;
  	var b;
  	var len = arr.length - 2;
  	var _g1 = 0;
  	while(_g1 < len) {
  		var i = _g1++;
  		a = arr[i];
  		b = arr[i + 1];
  		out.push({ x : (b.x + a.x) / 2, y : (b.y + a.y) / 2});
  		out.push({ x : b.x, y : b.y});
  	}
  	a = arr[0];
  	out.unshift({ x : a.x, y : a.y});
  	out.unshift({ x : a.x, y : a.y});
  	b = arr[arr.length - 1];
  	out.push({ x : b.x, y : b.y});
  	out.push({ x : b.x, y : b.y});
  	out.push({ x : b.x, y : b.y});
  	return out;
  };
  var letters_pathway_Sides = function() { };
  letters_pathway_Sides.__name__ = true;
  letters_pathway_Sides.getPoints = function(points_) {
  	var thetas = [];
  	var points = [];
  	var iterTheta3 = new letters_pathway_ThreeIterator(0,points_.length,1);
  	iterTheta3.arr = points_;
  	while(iterTheta3.hasNext()) {
  		iterTheta3.next();
  		var pNext = iterTheta3.arrNext;
  		var p0 = pNext[0];
  		var p1 = pNext[1];
  		var p01 = pNext[1];
  		var p11 = pNext[2];
  		thetas.push((Math.atan2(p1.y - p0.y,p1.x - p0.x) + Math.atan2(p11.y - p01.y,p11.x - p01.x)) / 2);
  	}
  	thetas.unshift(thetas[0]);
  	thetas.unshift(thetas[0]);
  	var aSidePoint;
  	var theta = thetas[0];
  	var nextP = points_[0];
  	var lastSidePoint = { x : nextP.x, y : nextP.y, dx : 5 * Math.cos(theta + Math.PI / 2), dy : 5 * Math.sin(theta + Math.PI / 2)};
  	var count = 0;
  	var _g = 0;
  	while(_g < points_.length) {
  		var p = points_[_g];
  		++_g;
  		var theta1 = thetas[count];
  		var dx = 5 * Math.cos(theta1 + Math.PI / 2);
  		var dy = 5 * Math.sin(theta1 + Math.PI / 2);
  		var x1 = p.x + 15 * dx;
  		var y1 = p.y + 15 * dy;
  		var x2 = p.x - 15 * dx;
  		var y2 = p.y - 15 * dy;
  		var sAx = lastSidePoint.x + 15 * lastSidePoint.dx;
  		var sAy = lastSidePoint.y + 15 * lastSidePoint.dy;
  		var sBx = lastSidePoint.x - 15 * lastSidePoint.dx;
  		var sBy = lastSidePoint.y - 15 * lastSidePoint.dy;
  		var x = x1 - sAx;
  		var y = y1 - sAy;
  		var x3 = x2 - sBx;
  		var y3 = y2 - sBy;
  		var x4 = x2 - sAx;
  		var y4 = y2 - sAy;
  		var x5 = x1 - sBx;
  		var y5 = y1 - sBy;
  		var x6 = x1 - sAx;
  		var y6 = y1 - sAy;
  		var x7 = x2 - sBx;
  		var y7 = y2 - sBy;
  		var x8 = x2 - sAx;
  		var y8 = y2 - sAy;
  		var x9 = x1 - sBx;
  		var y9 = y1 - sBy;
  		if(!(Math.abs(Math.sqrt(x * x + y * y) - Math.sqrt(x3 * x3 + y3 * y3)) > Math.abs(Math.sqrt(x4 * x4 + y4 * y4) - Math.sqrt(x5 * x5 + y5 * y5)) && Math.sqrt(x6 * x6 + y6 * y6) + Math.sqrt(x7 * x7 + y7 * y7) < Math.sqrt(x8 * x8 + y8 * y8) + Math.sqrt(x9 * x9 + y9 * y9))) {
  			dx = -dx;
  			dy = -dy;
  		}
  		aSidePoint = { x : p.x, y : p.y, dx : dx, dy : dy};
  		++count;
  		points.push(aSidePoint);
  		lastSidePoint = aSidePoint;
  	}
  	return points;
  };
  letters_pathway_Sides.createTheta = function(pNext) {
  	var p0 = pNext[0];
  	var p1 = pNext[1];
  	var p01 = pNext[1];
  	var p11 = pNext[2];
  	return (Math.atan2(p1.y - p0.y,p1.x - p0.x) + Math.atan2(p11.y - p01.y,p11.x - p01.x)) / 2;
  };
  letters_pathway_Sides.createInitSidePoint = function(theta,nextP) {
  	return { x : nextP.x, y : nextP.y, dx : 5 * Math.cos(theta + Math.PI / 2), dy : 5 * Math.sin(theta + Math.PI / 2)};
  };
  letters_pathway_Sides.createSidePoints = function(theta,lastSp,nextP) {
  	var dx = 5 * Math.cos(theta + Math.PI / 2);
  	var dy = 5 * Math.sin(theta + Math.PI / 2);
  	var x1 = nextP.x + 15 * dx;
  	var y1 = nextP.y + 15 * dy;
  	var x2 = nextP.x - 15 * dx;
  	var y2 = nextP.y - 15 * dy;
  	var sAx = lastSp.x + 15 * lastSp.dx;
  	var sAy = lastSp.y + 15 * lastSp.dy;
  	var sBx = lastSp.x - 15 * lastSp.dx;
  	var sBy = lastSp.y - 15 * lastSp.dy;
  	var x = x1 - sAx;
  	var y = y1 - sAy;
  	var x3 = x2 - sBx;
  	var y3 = y2 - sBy;
  	var x4 = x2 - sAx;
  	var y4 = y2 - sAy;
  	var x5 = x1 - sBx;
  	var y5 = y1 - sBy;
  	var x6 = x1 - sAx;
  	var y6 = y1 - sAy;
  	var x7 = x2 - sBx;
  	var y7 = y2 - sBy;
  	var x8 = x2 - sAx;
  	var y8 = y2 - sAy;
  	var x9 = x1 - sBx;
  	var y9 = y1 - sBy;
  	if(!(Math.abs(Math.sqrt(x * x + y * y) - Math.sqrt(x3 * x3 + y3 * y3)) > Math.abs(Math.sqrt(x4 * x4 + y4 * y4) - Math.sqrt(x5 * x5 + y5 * y5)) && Math.sqrt(x6 * x6 + y6 * y6) + Math.sqrt(x7 * x7 + y7 * y7) < Math.sqrt(x8 * x8 + y8 * y8) + Math.sqrt(x9 * x9 + y9 * y9))) {
  		dx = -dx;
  		dy = -dy;
  	}
  	return { x : nextP.x, y : nextP.y, dx : dx, dy : dy};
  };
  letters_pathway_Sides.distance = function(p0x,p0y,p1x,p1y) {
  	var x = p0x - p1x;
  	var y = p0y - p1y;
  	return Math.sqrt(x * x + y * y);
  };
  letters_pathway_Sides.mapToRouting = function(sidePoints_,pathIn) {
  	var a = [];
  	var x = $iterator(pathIn)();
  	while(x.hasNext()) {
  		var x1 = x.next();
  		var v0 = x1.v0;
  		var v1 = x1.v1;
  		var p1 = sidePoints_[Math.round(v0[0])];
  		switch(v1) {
  		case "L":case "M":
  			v0 = [p1.x + v0[1] * p1.dx,p1.y + v0[1] * p1.dy];
  			break;
  		case "Q":
  			var p2 = sidePoints_[Math.round(v0[2])];
  			v0 = [p1.x + v0[1] * p1.dx,p1.y + v0[1] * p1.dy,p2.x + v0[3] * p1.dx,p2.y + v0[3] * p1.dy];
  			break;
  		default:
  		}
  		a.push({ v0 : v0, v1 : v1});
  	}
  	return a;
  };
  var letters_pathway_ThreeIterator = function(min_,max_,step_) {
  	this.min = min_;
  	this.max = max_;
  	this.step = step_;
  };
  letters_pathway_ThreeIterator.__name__ = true;
  letters_pathway_ThreeIterator.prototype = {
  	hasNext: function() {
  		return this.min < this.max - 2;
  	}
  	,next: function() {
  		this.arrNext = this.arr.slice(this.min,this.min + 3);
  		this.min += this.step;
  		return this.min;
  	}
  	,iterator: function() {
  		return this;
  	}
  	,__class__: letters_pathway_ThreeIterator
  };
  var turtle_Turtle = function() {
  	turtle_Turtle.surface = new turtle_targetJS_BasicJs().surface;
  };
  turtle_Turtle.__name__ = true;
  turtle_Turtle.RemovePressDownStage = function() {
  	var _g = 0;
  	var _g1 = turtle_Turtle.pressDownStageFunc;
  	while(_g < _g1.length) {
  		++_g;
  		window.document.body.onmousedown = null;
  	}
  };
  turtle_Turtle.PressDownStage = function(func) {
  	if(func == null) {
  		var _g = 0;
  		var _g1 = turtle_Turtle.pressDownStageFunc;
  		while(_g < _g1.length) {
  			++_g;
  			window.document.body.onmousedown = null;
  		}
  		return;
  	}
  	window.document.body.onmousedown = func;
  	turtle_Turtle.pressDownStageFunc.push(func);
  };
  turtle_Turtle.CurrentPosFloat = function(e) {
  	var currPos;
  	var p = e;
  	currPos = { x : p.clientX, y : p.clientY};
  	return currPos;
  };
  turtle_Turtle.circle8 = function(x,y) {
  	turtle_Turtle.surface.beginPath();
  	turtle_Turtle.surface.arc(x,y,8,0,2 * Math.PI,false);
  	turtle_Turtle.surface.stroke();
  	turtle_Turtle.surface.closePath();
  	turtle_Turtle.surface.fill();
  };
  turtle_Turtle.CurrentPosInt = function(e) {
  	var currPos;
  	var p = e;
  	currPos = { x : Math.round(p.clientX), y : Math.round(p.clientY)};
  	return currPos;
  };
  turtle_Turtle.lines = function(g,renderPath) {
  	var p;
  	var _g = 0;
  	while(_g < renderPath.length) {
  		var cmd = renderPath[_g];
  		++_g;
  		p = cmd.v0;
  		switch(cmd.v1) {
  		case "L":
  			g.lineTo(p[0],p[1]);
  			break;
  		case "M":
  			g.moveTo(p[0],p[1]);
  			break;
  		default:
  		}
  	}
  };
  turtle_Turtle.drawCommands = function(g,renderPath) {
  	var p;
  	var lastCommand = "M";
  	var _g = 0;
  	while(_g < renderPath.length) {
  		var cmd = renderPath[_g];
  		++_g;
  		p = cmd.v0;
  		var command = cmd.v1;
  		switch(command) {
  		case "F":
  			if(lastCommand != "O") {
  				turtle_Turtle.surface.stroke();
  				turtle_Turtle.surface.closePath();
  				turtle_Turtle.surface.fill();
  			}
  			var tmp = StringTools.hex(p[0] | 0,6);
  			turtle_Turtle.surface.fillStyle = "#" + tmp;
  			turtle_Turtle.surface.beginPath();
  			break;
  		case "L":
  			g.lineTo(p[0],p[1]);
  			break;
  		case "M":
  			g.moveTo(p[0],p[1]);
  			break;
  		case "O":
  			turtle_Turtle.surface.closePath();
  			turtle_Turtle.surface.stroke();
  			turtle_Turtle.surface.fill();
  			turtle_Turtle.surface.lineWidth = 5;
  			var tmp1 = StringTools.hex(p[0] | 0,6);
  			turtle_Turtle.surface.strokeStyle = "#" + tmp1;
  			break;
  		case "Q":
  			g.quadraticCurveTo(p[0],p[1],p[2],p[3]);
  			break;
  		}
  		lastCommand = command;
  	}
  	turtle_Turtle.surface.stroke();
  	turtle_Turtle.surface.closePath();
  	turtle_Turtle.surface.fill();
  };
  turtle_Turtle.quadTo = function(g,x1,y1,x2,y2) {
  	g.quadraticCurveTo(x1,y1,x2,y2);
  };
  turtle_Turtle.clear = function() {
  	turtle_Turtle.surface.clearRect(0,0,Std.parseInt("1000"),Std.parseInt("800"));
  };
  turtle_Turtle.prototype = {
  	__class__: turtle_Turtle
  };
  var turtle_targetJS_BasicJs = function() {
  	var setup = new turtle_targetJS_SetupCanvas();
  	this.surface = setup.surface;
  	window.document.body.appendChild(setup.dom);
  };
  turtle_targetJS_BasicJs.__name__ = true;
  turtle_targetJS_BasicJs.prototype = {
  	__class__: turtle_targetJS_BasicJs
  };
  var turtle_targetJS__$ColorJS_ColorJS_$Impl_$ = {};
  turtle_targetJS__$ColorJS_ColorJS_$Impl_$.__name__ = true;
  turtle_targetJS__$ColorJS_ColorJS_$Impl_$.toString = function(this1) {
  	return "#" + StringTools.hex(this1,6);
  };
  var turtle_targetJS_SetupCanvas = function() {
  	this.canvas = window.document.createElement("canvas");
  	this.dom = this.canvas;
  	this.body = window.document.body;
  	this.surface = this.canvas.getContext("2d",null);
  	this.style = this.dom.style;
  	this.canvas.width = Std.parseInt("1000");
  	this.canvas.height = Std.parseInt("800");
  	this.style.paddingLeft = "0px";
  	this.style.paddingTop = "0px";
  	this.style.left = Std.string(0 + "px");
  	this.style.top = Std.string(0 + "px");
  	this.style.position = "absolute";
  	this.image = this.dom;
  };
  turtle_targetJS_SetupCanvas.__name__ = true;
  turtle_targetJS_SetupCanvas.prototype = {
  	parseInt: function(e) {
  		return Std.parseInt(e);
  	}
  	,__class__: turtle_targetJS_SetupCanvas
  };
  function $iterator(o) { if( o instanceof Array ) return function() { return HxOverrides.iter(o); }; return typeof(o.iterator) == 'function' ? $bind(o,o.iterator) : o.iterator; }
  var $_, $fid = 0;
  function $bind(o,m) { if( m == null ) return null; if( m.__id__ == null ) m.__id__ = $fid++; var f; if( o.hx__closures__ == null ) o.hx__closures__ = {}; else f = o.hx__closures__[m.__id__]; if( f == null ) { f = function(){ return f.method.apply(f.scope, arguments); }; f.scope = o; f.method = m; o.hx__closures__[m.__id__] = f; } return f; }
  String.prototype.__class__ = String;
  String.__name__ = true;
  Array.__name__ = true;
  var Int = { __name__ : ["Int"]};
  var Dynamic = { __name__ : ["Dynamic"]};
  var Float = Number;
  Float.__name__ = ["Float"];
  var Bool = Boolean;
  Bool.__ename__ = ["Bool"];
  var Class = { __name__ : ["Class"]};
  var Enum = { };
  haxe_Resource.content = [{ name : "gletter", data : "TTIxLjk1IDIxLjg1IFExOS4wNSAyMi4yIDE3LjMgMjQuNyAxNS4yIDI5LjI1IDE3LjIgMzMuOTUgMTguNDUgMzYuOSAyMS4zNSAzNy4zNSAyNS43NSAzNi45IDI2LjkgMzMuNCAyNy44NSAyOS44NSAyNi43NSAyNS4zIDI1LjM1IDIxLjQgMjEuOTUgMjEuODUgTTExLjc1IDQ3Ljk1IFExMS42NSA0Ni4zIDEyLjkgNDYuMSBMMTQuMTUgNDYuMzUgMTcuMDUgNDcuNyBRMjguNjUgNTAgMjYuNzUgMzguOTUgMTkuMDUgNDEuMzUgMTUuMyAzNy40NSAxMS45IDM1LjI1IDExLjM1IDI5LjI1IDEyLjE1IDI0LjU1IDE0Ljg1IDIxLjk1IDIwLjI1IDE2LjY1IDI4LjM1IDIwLjMgMzEuMTUgMjEuNyAzMi4zIDI5LjIgTDMxLjk1IDQ0IFEzMC4zIDUzLjIgMTkuOCA1Mi42IDE1LjEgNTEuOCAxMy4yIDUwLjQgMTIuMSA0OS43NSAxMS45IDQ4Ljk1IEwxMS43NSA0Ny45NQ"},{ name : "lletter", data : "TTIzLjcgMzcuMTUgUTIzLjg1IDM5Ljg1IDIwLjkgMzkuNSAxOS42NSAzOS40IDE4Ljc1IDM4LjYgMTcuOSAzNy4xIDE3Ljk1IDM0Ljg1IEwxOC4zIDQuNSBRMTguNzUgMy40IDE5Ljg1IDMuMiBMMjEuMyAyLjkgUTIyLjggMi43NSAyMi44NSAzLjcgTDIzIDI4LjggMjMuNyAzNy4xNQ"},{ name : "wletter", data : "TTMuOCAxNi42NSBRNS41NSAxNS41IDYuOSAxNi44NSA4LjggMTguOCA5LjcgMjEuNCBMMTMuNCAzMS42NSBRMTQuOCAzNS43NSAxNS45IDMxLjc1IEwxOS44NSAxOS42IFEyMC42NSAxNy42NSAyMi4yNSAxNy42IDIzLjYgMTguMDUgMjQgMTkuMyBMMjguMzUgMzIuMTUgUTI4LjggMzMuMSAyOS42NSAzMi41IDMyLjYgMjYuNTUgMzQuNCAyMC44IDM0Ljg1IDE5LjI1IDM1LjY1IDE4LjI1IDM2LjYgMTcuMiAzNy41NSAxNi45IEwzNy42NSAxNi45IFEzOC4xNSAxNi44NSAzOCAxNy44IEwzNi45NSAyMC44IDMxLjY1IDM3LjUgUTMwIDQyLjEgMjcuMzUgMzguNzUgTDI3LjMgMzguNyBRMjUuMDUgMzUuNDUgMjQuMSAzMi42IEwyMS4xIDI2LjQ1IFExOC40NSAzMi43IDE1LjI1IDM4LjY1IDEyLjc1IDQxLjYgMTEuMjUgMzguNTUgTDMuNjUgMTguNTUgUTMuMzUgMTcuNiAzLjggMTYuNjU"},{ name : "bletter", data : "TTI1LjQ1IDE1LjUgUTI5LjUgMTYuNCAzMS44IDIxLjIgMzIuOSAyMy40NSAzMy4wNSAyNi4xNSAzMy4yIDI5IDMyLjMgMzEuNDUgMzEuNCAzMy44NSAzMC4zNSAzNS4xNSBMMjguNTUgMzcuMiAyNi42IDM4LjUgMjYuMyAzOC43IDI1LjYgMzkgMjMuNyAzOS42NSAyMi41IDM5LjggMTkuMSAzOS45NSAxOCAzOS44NSAxNi4zIDM5LjcgMTQuNSAzOS41IFExMi4zNSAzOSAxMS41IDM3LjcgMTAuNTUgMzYuMiAxMC41NSAzNC4xIEwxMC45NSA3LjMgMTEgNC45IDExLjUgNC41IFExMi4xNSAzLjg1IDEyLjggMy43IDE0LjE1IDIuOTUgMTUuMyAzLjcgTDE2LjIgMTcuNyBRMjEuNDUgMTQuNiAyNS40NSAxNS41IE0xNi4yIDIxLjMgTDE1Ljc1IDIzLjE1IDE1LjUgMjUuNCAxNS41IDMxLjUgUTE1LjUgMzMuODUgMTYuMzUgMzUuNCAxNy42IDM3LjEgMjAuOCAzNy4zIDI3LjQgMzcuMDUgMjcuNSAyNy4yIDI3LjYgMTcuMzUgMTkuNyAxOC43IDE3LjY1IDE4LjkgMTYuMiAyMS4z"},{ name : "iletter", data : "TTIzLjYgNi43IFEyMy4zNSA4LjMgMjIuNiA4Ljg1IDIwLjYgOS42IDE5LjI1IDguODUgTDE4LjcgOC4zNSBRMTguMiA3Ljg1IDE4LjA1IDYuODUgMTguMjUgNS43NSAxOSA0Ljk1IDIwLjE1IDQuMzUgMjEuMyA0LjQ1IEwyMS41IDQuNSAyMS44NSA0LjU1IFEyMi43NSA0LjY1IDIzLjI1IDUuNDUgMjMuNjUgNS45IDIzLjYgNi43IE0yMC40NSAxNS43IEwyMS45IDE1LjU1IDIyLjMgMTUuNjUgMjIuNyAxNS43NSAyMy41NSAzNi4wNSBRMjQuMDUgNDAuMSAyMC4yIDQwLjEgMTkuMDUgNDAuMSAxOC43IDM5LjIgMTguNDUgMzguNDUgMTguNCAzNi4wNSBMMTguNCAzMS40IDE4LjM1IDI5LjQ1IDE4LjM1IDIwLjggMTguMyAxOC40IFExOC4yNSAxNy4xIDE4LjM1IDE2LjU1IEwxOC44IDE2LjE1IFExOS40NSAxNS44NSAyMC4yNSAxNS43IEwyMC40NSAxNS43"},{ name : "qletter", data : "TTE5IDE3Ljg1IFExNy45IDE4LjQgMTYuNSAxOS44NSAxNS4xIDIxLjI1IDE0LjY1IDI1LjI1IDE0LjEgMzYuMTUgMjEuMyAzNi4zNSAyNC44IDM2LjE1IDI2LjYgMzMuMzUgTDI2Ljc1IDIyLjMgUTI2LjggMTkuNSAyNS4wNSAxOC40IDIzLjggMTcuMzUgMjIgMTcuMyAyMC4xIDE3LjI1IDE5IDE3Ljg1IE0xMy4xNSAxOC4zIFExNS43NSAxNS43IDE4Ljc1IDE0Ljk1IDIyLjUgMTQgMjYuODUgMTYgTDI5LjY1IDE1LjU1IFEzMC44NSAxNS4zIDMxLjcgMTYuOTUgTDMxLjg1IDQ5LjU1IDMwLjI1IDQ5Ljk1IDMwLjA1IDQ5Ljk1IDI4LjYgNDkuNyBRMjcuMzUgNDkuMSAyNy4yNSA0OC4yIEwyNi41IDM3LjQgUTI1LjEgMzguNjUgMjIuNSAzOS41IEwyMC42IDM5LjcgUTE2LjIgMzkuNzUgMTQuNDUgMzguMiA5LjQgMzUgOS44NSAyNi4zIDEwLjA1IDIyLjIgMTMuMTUgMTguMw"},{ name : "vletter", data : "TTE1LjM1IDE4LjQgTDE2LjggMjIuNCAyMS4xIDMzLjI1IDIxLjQgMzMuNzUgMjEuNzUgMzMuNiBRMjUuMjUgMjYuODUgMjguMTUgMTguMjUgMjkuMjUgMTUuOCAzMC40IDE1LjggTDMxLjE1IDE1Ljc1IFEzMi4xIDE1Ljg1IDMyLjE1IDE2LjM1IEwyOS45IDIyLjYgMjQuODUgMzUgUTIyLjggMzkuNDUgMjIuMSAzOS43NSBMMjEuNSA0MCBRMjAgNDAuNCAxOC4zIDM3LjggTDE2Ljg1IDM0Ljg1IDkuOCAxNy41IFE5LjI1IDE2LjY1IDkuNTUgMTYuMTUgOS44NSAxNS42IDEwLjY1IDE1LjY1IDEzLjI1IDE1Ljc1IDEzLjk1IDE2LjI1IDE0LjggMTYuOSAxNS4zNSAxOC40"},{ name : "yletter", data : "TTEwLjcgMTggTDE0LjggMTcuOTUgUTE2LjE1IDE5LjggMTcuOTUgMjUuMzUgMTkgMjguMiAyMS40NSAzMy40NSAyMS44NSAzNC4zIDIyLjcgMzQuMSAyMy42IDMzLjg1IDI0Ljc1IDMxLjA1IEwyNi40NSAyNi44IDI3LjkgMjIuNCAyOS4zIDE4LjEgUTI5LjU1IDE3LjI1IDMwLjY1IDE3LjMgMzIuNDUgMTcuNDUgMzIuNiAxOC41NSBMMzAuMiAyNi43IDI4IDM0LjA1IFEyNi42NSAzOC4zNSAyNS4zNSA0MS4yNSAyMy4yIDQ2IDIwLjEgNDkuMzUgMTYuOCA1Mi40NSAxNC42NSA1Mi44IDEwLjA1IDUzLjIgMTAuMDUgNTEuMSAxMC4xIDUwLjQgMTAuNSA0OS45NSAxMC45IDQ5LjQ1IDExLjkgNDkuMTUgMTMuNCA0OC42NSAxNC45IDQ5LjE1IDE2LjYgNDkuMiAxOS43IDQ0Ljk1IDIwLjc1IDQzLjMgMjEuMSA0MS42IEwyMSA0MC45IFExNCAyOS4zNSAxMC4wNSAxOS42IDkuNyAxOS4xIDkuOSAxOC42IEwxMC43IDE4"},{ name : "cletter", data : "TTI5LjcgMjEuNjUgTDI5LjUgMjEuNiAyOC43IDIxLjM1IDI2LjcgMTkuMyBRMjUuNCAxNy45IDIyLjUgMTcuOSAxOS42NSAxNy45IDE3Ljc1IDIwLjggMTYuMiAyMy4yIDE2LjIgMjUuNyAxNi4yIDMwLjU1IDE4LjY1IDMzLjUgMjAuNyAzNS45NSAyMi45NSAzNS45NSAyOS43NSAzNS45NSAzMi4wNSAzMi4zIEwzMi4yIDMyLjUgMzIuMjUgMzMuMiBRMzIuMjUgMzUuNjUgMjkuNiAzNy43IDI2LjcgMzkuOTUgMjIuMzUgMzkuOTUgMTYuODUgMzkuOTUgMTMuODUgMzYgMTEuMzUgMzIuNzUgMTEuMzUgMjguMyAxMS4zNSAyMi4wNSAxNS4zNSAxOC4xNSAxOC43NSAxNC44NSAyMi44IDE0Ljg1IDI3LjQ1IDE0Ljg1IDI5LjggMTYuOCAzMS40NSAxOC4xNSAzMS40NSAxOS42NSAzMS40NSAyMS40IDI5LjcgMjEuNjU"},{ name : "fletter", data : "TTI4IDMuMjUgUTI5LjggMy41NSAzMC42NSA0Ljk1IDMxLjE1IDUuOSAzMS4wNSA2LjUgMzEuMiA3LjM1IDI5LjkgOC4xIDI5LjEgOC4yIDI4LjQgNy42NSBMMjcuOSA3LjIgMjcuNDUgNi43IDI2LjM1IDYuMiAyNS45NSA2LjE1IFEyNS4yIDYgMjQuNCA2LjQ1IDIxLjI1IDcuOTUgMjEuNyAxMi4wNSAyMS41IDE1LjEgMjQuNyAxNS4yIEwyNS41IDE1LjMgMjcuMTUgMTUuNjUgUTI4Ljc1IDE2LjggMjcuMyAxNy45NSBMMjUuNSAxOC4xNSAyNC44IDE4LjMgUTIxLjkgMTguMyAyMi4xIDIyIEwyMS40NSAzNy41IFEyMS44NSA0MC40IDE4Ljg1IDQwLjM1IDE2LjU1IDQwLjg1IDE2LjY1IDM2Ljg1IEwxNi42NSAyNC40IDE2LjE1IDE4LjkgUTE1LjMgMTcuOSAxNC41NSAxNy44NSAxMC43IDE2Ljc1IDE0LjUgMTUuNjUgMTYuMTUgMTUuMSAxNi4zNSAxMy44NSBMMTguMyA3LjkgUTE5Ljc1IDQuOCAyMi4xIDMuNyAyNC40IDIuNjUgMjggMy4yNQ"},{ name : "kletter", data : "TTEzLjggMy43NSBMMTQuNSAzLjk1IFExNC45NSAzLjg1IDE1LjMgNS42NSBMMTUuNTUgOS4wNSAxNS42IDE4Ljg1IFExNS42IDIxLjQgMTYuMSAyNC40NSBMMjQuNDUgMTcuNiBRMjcuMDUgMTUuOSAyOC4zIDE2IDI5LjMgMTYuMDUgMjguNzUgMTYuOCBMMjEuODUgMjQuNyBRMjEuNSAyNS4zIDIzLjQ1IDI3Ljk1IEwzMC43IDM3LjggUTMyIDM5LjUgMzAuMjUgMzkuNyAyOC40NSA0MC4zNSAyNS40IDM3LjkgMjIuMjUgMzUuMDUgMTkuNjUgMzAuNzUgMTguMSAyOS4xNSAxNi43NSAyOC41NSAxNi4xIDI4LjMgMTYuMDUgMjkuMSAxNS42IDMwLjc1IDE1LjU1IDM1LjUgMTUuMzUgMzcuOTUgMTQuOCAzOS4xIDEzLjkgMzkuODUgMTIuNjUgMzkuOCAxMS43IDM5LjYgMTEgMzkuMDUgMTAuNyAzOC4wNSAxMC41NSAzNi44NSAxMC4wNSAyMS4yIDEwLjk1IDUuNTUgMTAuOSA0LjY1IDEyLjEgNC4yNSAxMi45NSAzLjg1IDEzLjggMy43NQ"},{ name : "mletter", data : "TTE3Ljc1IDIzLjYgUTE3IDIwLjk1IDE1LjY1IDIwLjQgMTQuODUgMjAgMTQuMDUgMTkuOSBMMTMuNjUgMTkuODUgMTEuNjUgMjAuMjUgUTEwLjM1IDIwLjYgOS4yIDIxLjc1IDguMDUgMjIuOSA3LjY1IDI0Ljg1IDcuMjUgMjYuNzUgNy40IDMwLjQgNy40NSAzNy42IDYuNCAzOS4wNSAzLjA1IDQxLjI1IDMuMyAzNi42IEwzLjQ1IDE5LjE1IFEzLjQ1IDE2LjggNC42NSAxNi43NSA1LjkgMTYuNyA2LjQgMTguNSBMNi40NSAxOC42NSBRNy4xNSAxOS43IDguNyAxOC45IEwxMC45IDE3LjggUTE1LjkgMTMuNiAyMy4wNSAxOS40NSAyNy4wNSAxNi43IDMwLjEgMTYuNiAzMy4xNSAxNi40NSAzNC45NSAxNy45IDM2Ljc1IDE5LjM1IDM3LjMgMjEuNyAzOC4zIDI1LjY1IDM4LjM1IDM3LjU1IDM4LjEgMzkuNDUgMzcuMjUgMzkuNyAzNSA0MC43NSAzNC40IDM4Ljg1IDMzLjMgMzMuOCAzMy40NSAyOC40IEwzMy4wNSAyNS4wNSBRMzAuNjUgMTcuNzUgMjYuMyAyMC4xNSBMMjUuNSAyMC42NSBRMjQgMjEuOTUgMjMuNyAyMy41NSAyMy4zNSAyNS4yIDIzLjIgMjguNjUgTDIzLjI1IDMzLjIgMjMgMzYuNjUgUTIyLjcgMzkuNzUgMjEuNSA0MCAyMC41NSA0MC4zNSAxOS4yNSA0MCAxOC41NSAzOS43NSAxOC4zIDM4LjggTDE3Ljc1IDIzLjY"},{ name : "aletter", data : "TTIzLjUgMTguMSBRMTkuOSAxNi42IDE4LjIgMTkuMyAxNi40NSAyMS45NSAxNC44NSAyMS41IDEzLjg1IDIxLjI1IDEzLjU1IDIwLjYgTDEzLjM1IDIwIFExMy4yNSAxOS40NSAxMy40IDE4Ljk1IDEzLjY1IDE3Ljc1IDE1LjE1IDE2LjYgTDE2LjkgMTUuOCAxOS4yIDE1LjE1IDIwLjk1IDE0LjkgMjIuOTUgMTQuOSAyNi40NSAxNS4yNSBRMjcuNjUgMTUuNTUgMjguNCAxNi4xNSAzMS4xIDE3Ljk1IDMxLjE1IDIxLjU1IEwzMS44IDM4LjMgUTMxLjk1IDM5LjMgMzEuNSAzOS41NSBMMjkuNiAzOS45IFEyOC4yIDM5Ljk1IDI2Ljc1IDM5LjIgTDI2LjUgMzcuNyAyMi4yNSAzOS43IFEyMC4zIDQwLjQgMTcuOCA0MC40IDEzLjIgMzkuODUgMTIuMSAzNS43NSAxMS4yNSAzMy41IDEyLjU1IDMwLjY1IDEzLjEgMjguOSAxNS4zNSAyNy41NSAxOC40NSAyNS4yNSAyNC4yNSAyNC42NSAyNS4zIDI0LjcgMjUuOTUgMjQuMjUgMjYuNjUgMjMuNyAyNi4zNSAyMS40NSAyNiAxOS4xNSAyMy41IDE4LjEgTTIyLjQgMzYuOTUgUTI0LjggMzYuNjUgMjYuNCAzNC43IEwyNi43IDI3LjA1IDI0LjM1IDI3LjI1IFExOS43NSAyOC4xIDE4LjMgMjkuNiAxNi44NSAzMS4wNSAxNi45NSAzMy4yNSAxNy4wNSAzNS40IDE4LjUgMzYuMzUgMTkuOTUgMzcuMjUgMjIuNCAzNi45NQ"},{ name : "xletter", data : "TTIxLjQgMjMuMyBMMjYuMjUgMTcuMSBRMjcuMjUgMTUuODUgMjguMjUgMTUuNTUgMzAuMjUgMTUuNjUgMzAuNTUgMTYuMyBMMjMuNzUgMjUuNzUgUTIzLjM1IDI2LjI1IDI0LjE1IDI3LjYgTDMxLjc1IDM4LjUgUTMyLjc1IDM5Ljc1IDMwLjcgMzkuOCAyOC4xIDQwLjEgMjYuMjUgMzguMjUgTDIwLjA1IDMwLjE1IDEzLjQ1IDM5LjEgUTExLjA1IDQwLjIgOS43NSAzOS44NSA5LjI1IDM5LjM1IDkuODUgMzguNjUgTDE3Ljk1IDI3LjQ1IDEwLjUgMTYuMyBRMTAuNCAxNS44IDExIDE1Ljc1IEwxMy4yIDE1LjYgUTE1IDE1LjYgMTYuMiAxNi40IEwyMS40IDIzLjM"},{ name : "zletter", data : "TTEwLjQgMTYuNyBROS45IDE2LjMgMTAuMTUgMTUuOTUgTDEwLjU1IDE1LjY1IDExLjcgMTUuNSAxNC45IDE1LjMgUTI5LjE1IDE1IDMwLjg1IDE1LjUgMzIuMTUgMTYuMDUgMzEuNTUgMTcgTDE3LjQgMzYuMjUgMjcuNiAzNi43IFEzMS4yIDM2LjggMzIuNiAzOC4xIDMzLjI1IDM5IDMwLjk1IDM5LjQ1IEwyMC4xIDM5LjggMTIuOTUgMzkuNyBROC41IDM5LjggMTAuMSAzOC4wNSBMMjQuNjUgMTkgUTIyLjMgMTguMSAxNC42IDE3Ljc1IDExLjU1IDE3LjQ1IDEwLjQgMTYuNw"},{ name : "eletter", data : "TTMxIDE5IFEzMi4xIDIxLjQ1IDMyLjY1IDIzLjc1IDMxLjM1IDI1LjIgMjUuNSAyNi41NSBMMTYuNTUgMjcuNDUgMTYuNCAyNy44IFExNy4xIDMyLjQ1IDE3Ljc1IDMzLjQgMTkuMzUgMzUuNyAyMy41IDM1LjY1IDI3LjcgMzUuNTUgMzIuMiAzMyBMMzIuMyAzMy4wNSAzMi4zIDMzLjEgUTMyLjcgMzQuNiAzMSAzNi4zIDI5LjY1IDM3LjY1IDI3LjMgMzguNzUgMjMuODUgNDAuMyAyMC42IDQwLjA1IDE3LjIgMzkuNzUgMTUuMDUgMzcuODUgMTMuMyAzNi4zNSAxMS43NSAzMy4xIDEwLjU1IDI4LjYgMTEuMSAyNS4xIDExLjY1IDIxLjcgMTMuOSAxOC42NSAxNS44NSAxNi42IDE4LjcgMTUuNSAyMS44NSAxMy44IDI2LjQgMTUuMDUgMjkuNSAxNiAzMSAxOSBNMjQuNSAxNy45IFEyMC43NSAxNiAxOC4yIDE4LjMgMTUuNjUgMjAuNiAxNS44IDIyLjIgTDE1LjggMjQuMjUgMTguMzUgMjQuNiAyNC42IDIzLjk1IFEyNi41NSAyMy42NSAyNy40IDIyLjYgMjcuODUgMjAuNDUgMjQuNSAxNy45"},{ name : "nletter", data : "TTEwLjg1IDE3LjQ1IFExMSAxNi40NSAxMS44IDE2LjMgTDEyLjc1IDE2LjMgUTEzLjkgMTYuNDUgMTQuNyAxNy42IEwxNS42NSAxOS4yIDE5LjQ1IDE3LjEgUTIyLjQgMTUuMjUgMjUuMDUgMTUuOCAyNy42NSAxNi4zNSAyOC43NSAxNy42IDMwLjk1IDE5LjE1IDMxLjE1IDM1LjggMzEuMzUgMzguMTUgMzAuNzUgMzkuMTUgMzAuMjUgNDAgMjkuMDUgNDAgMjYuNDUgNDAgMjYuNSAzNS44IEwyNS41NSAyMiBRMjUuNCAyMSAyNC42NSAyMC40IDIzLjIgMTkuMSAyMS43IDE5LjIgMTguMTUgMTkuNiAxNiAyMi41IEwxNC45IDM4LjcgUTE0LjcgMzkuNiAxMy45NSAzOS43IEwxMy43NSAzOS43NSBRMTAuMTUgNDAuNCAxMC40NSAzOC41IEwxMC44NSAxNy40NQ"},{ name : "uletter", data : "TTEyLjY1IDE1LjU1IFExMy42NSAxNS42NSAxNC4zIDE2LjE1IDE0Ljk1IDE2LjY1IDE1IDE3LjQ1IEwxNS4xNSAyMC4xIFExNS4xIDI2Ljc1IDE1LjUgMzMuNDUgMTUuNzUgMzUuMSAxNy42NSAzNi4yIDIxLjc1IDM3LjI1IDI0LjE1IDM0LjkgMjYgMzMuMTUgMjYuMDUgMjguODUgTDI2LjMgMjEuNSBRMjYuMjUgMTcuMSAyNy4yNSAxNi40IDI3LjkgMTUuOTUgMjguNjUgMTUuOTUgTDMwLjEgMTYuMzUgUTMwLjg1IDE2LjggMzAuOSAxOS43NSBMMzEgMjMuNCAzMS4wNSAyNS4zNSAzMS4yIDM0LjcgMzEuMiAzNC45NSAzMS4xIDM4IDMwLjk1IDM4LjQ1IFEyOS40IDQwLjUgMjYuNjUgMzguNSBMMjUuNyAzNi45NSBRMTguNDUgNDEuNjUgMTQgMzguNzUgMTAuMTUgMzYuNjUgMTAuMzUgMjcuNjUgMTAuMyAyMi4zIDEwLjY1IDE3LjEgMTAuODUgMTUuNSAxMi42NSAxNS41NQ"},{ name : "jletter", data : "TTI1LjM1IDkuNCBMMjQuOCA5LjM1IDIzLjk1IDkuMjUgUTIzLjMgOS4xIDIzIDguOCBMMjIuNiA4LjMgUTIxLjggNy4zIDIyIDYuMyAyMi4yIDUuMiAyMi41NSA0LjkgTDIzLjIgNC4zNSBRMjYuOCAyLjkgMjcuNDUgNi4yNSAyNy43NSA3LjMgMjcuMSA4LjIgTDI2LjEgOS4xIDI1LjY1IDkuMyAyNS4zNSA5LjQgTTIxLjkgMTUuNTUgTDIyLjQgMTQuOTUgMjMuNSAxNC42NSAyNC41IDE0LjYgUTI1LjYgMTQuNDUgMjYuNCAxNC45IDI3LjI1IDE1IDI3LjA1IDE3Ljk1IDI3LjM1IDMyLjU1IDI3IDQyIDI2Ljc1IDUyLjA1IDE4Ljg1IDUxLjc1IDE2Ljc1IDUxLjYgMTUuNSA1MC44IDE0LjQ1IDUwLjUgMTQuMTUgNDkuNCAxMy40NSA0Ni45NSAxNy4xNSA0Ny44NSBMMTkuMTUgNDguNSAxOS44IDQ4LjQ1IDIwLjYgNDcuOTUgUTIxLjU1IDQ3IDIxLjk1IDQzLjggTDIxLjggMzEuMDUgMjEuOSAxNS41NQ"},{ name : "hletter", data : "TTI2Ljk1IDE2LjQgUTMxLjUgMTguMzUgMzEuNTUgMjMuMSBMMzEuOTUgMzUuMiBRMzIuMDUgMzcuMzUgMzEuNiAzOS40NSBMMzEuNDUgMzkuOTUgUTMwLjk1IDQwLjY1IDMwLjEgNDAuNjUgTDI5LjQgNDAuNTUgUTI4IDQwLjE1IDI3LjcgMzguNDUgTDI3LjU1IDM3LjcgMjcuMyAzNSAyNy4xNSAyNC41NSBRMjYuMzUgMTguMTUgMjEuMjUgMjAuMDUgMTguOCAyMC45NSAxNy45NSAyMi4xIDE2Ljk1IDIzLjQ1IDE2LjkgMjYuMyBMMTYuMDUgMzcuNDUgUTE2LjEgMzguNzUgMTUuNDUgMzkuNjUgMTQuOCA0MC41NSAxMy45IDQwLjU1IDEzIDQwLjU1IDEyLjM1IDM5LjY1IDExLjcgMzguNzUgMTEuNyAzNy40NSBMMTEuNyAzNiAxMi4xIDcuMDUgUTEyLjIgNC42IDE0LjEgNC41IDE2LjkgMy44IDE2Ljg1IDYuOSBMMTcuMDUgMTguOSAxOS40IDE3LjcgMjEuOTUgMTYuOCBRMjQuMiAxNS45NSAyNi45NSAxNi40"},{ name : "tletter", data : "TTE0LjA1IDE1LjggUTE1Ljk1IDE1LjQgMTcuNSAxMy43NSAxOC42IDEyLjM1IDE4Ljg1IDkuOTUgMTkuMjUgOCAyMCA3LjQgMjAuNyA2LjggMjEuMyA3LjA1IDIxLjg1IDcuMyAyMiA4IEwyMi4yIDkuNjUgUTIyLjE1IDExLjMgMjIuMzUgMTIuOCAyMi4zNSAxMy45IDIzLjQ1IDE0LjYgTDI2LjM1IDE1LjE1IFEyNy4zIDE1LjE1IDI3LjUgMTUuOCAyNy45IDE2LjkgMjYuOSAxNy40NSBMMjMuODUgMTcuOSBRMjEuODUgMTcuODUgMjEuOTUgMjUuNDUgTDIxLjk1IDMwLjU1IFEyMi41NSAzNy42NSAyNi44NSAzNS45IDI4LjQ1IDM1Ljc1IDI3LjcgMzcuNiAyNy4xNSAzOC44NSAyNS40IDM5LjQgMTYuOTUgNDEuNzUgMTcgMjkuNSBMMTcuMTUgMjQuNyAxNy4xNSAyNC41IFExNi45NSAxNy42NSAxNC4zNSAxNy4wNSAxMy4xIDE2LjUgMTQuMDUgMTUuOA"},{ name : "dletter", data : "TTI3LjMgMTUuNTUgTDI3Ljg1IDguMyBRMjcuOTUgNC4xIDMwLjcgMy43IDMyLjU1IDIuOCAzMi43NSA1LjEgTDMyLjcgMzIuOTUgMzMuMDUgMzUuOTUgUTMzLjQ1IDM2LjUgMzIuNjUgMzkuMTUgMzAuNTUgNDAuNzUgMjcuNzUgMzcuOCAxNy42IDQyLjcgMTIuNyAzNS44NSA3LjI1IDI1LjMgMTQuOCAxOC4zNSAxOC44NSAxNC4xNSAyNy4zIDE1LjU1IE0xNS45NSAyMy45NSBRMTQuNzUgMjcuOSAxNy4wNSAzNC4xIDE5LjQ1IDM3Ljk1IDI0LjQgMzYuNyAyNi4zNSAzNS43NSAyNy4yNSAzNC44IEwyNy4zIDMxLjY1IFEyOC4wNSAyMy4yIDI2Ljc1IDIwLjE1IDIzLjkgMTYuNTUgMjAuMTUgMTcuODUgMTcuODUgMTguODUgMTUuOTUgMjMuOTU"},{ name : "oletter", data : "TTE1LjkgMTkuNzUgUTEzLjggMjIuNTUgMTQuMDUgMjcuMyBMMTQuNCAzMC4yNSBRMTUuOSAzNy4zNSAyMS4yIDM3LjM1IDIzLjc1IDM3LjM1IDI1Ljk1IDM0LjY1IDI3LjM1IDMyLjI1IDI3LjUgMjcuMTUgMjcuNDUgMjQuMTUgMjYuNiAyMS45NSAyNS42IDE4Ljk1IDIyLjk1IDE3Ljc1IDIwLjkgMTcuMDUgMTkuMTUgMTcuMyAxNy40NSAxNy41IDE1LjkgMTkuNzUgTTE5LjE1IDE0LjggTDIxLjMgMTQuNjUgMjMuOTUgMTQuOTUgMjUuOCAxNS41NSBRMjcuOCAxNi4zIDI5IDE3LjQ1IDMxLjkgMjAuNzUgMzIuNSAyNC40IDMzLjIgMzIuNyAyOS4xIDM2LjcgMjYuMDUgNDAuMDUgMjAuMDUgNDAuMDUgMTMuMTUgMzkuOCAxMC40IDMzLjggOC43IDMwLjYgOS4xIDI1LjkgOS4zIDIzLjIgMTAuODUgMjAuMiAxMi4xIDE3Ljk1IDE0LjkgMTYuMDUgMTYuOTUgMTQuOSAxOS4xNSAxNC44"},{ name : "rletter", data : "TTEzLjI1IDE3LjA1IFExMy44NSAxNS42NSAxNS40IDE1LjggMTYuNjUgMTUuNjUgMTcuNzUgMTYuNyBMMTguOTUgMTguNSAyMiAxNi4xNSBRMjMuMzUgMTUuNDUgMjQuNyAxNS40IEwyNC45NSAxNS40IFEyNi4zNSAxNS41NSAyNy4xNSAxNi4xNSAyOS41NSAxOC4wNSAyNy4zIDE5LjggTDI2Ljg1IDIwLjA1IFEyNS44IDIwLjM1IDI0Ljc1IDIwLjA1IDIxLjMgMTguNjUgMTguNzUgMjMuNSBMMTguNDUgMzcgUTE3LjcgNDAuMjUgMTUgMzkuOSAxMy40NSAzOS44NSAxMy40IDM4LjU1IEwxMy4yNSAzNi42NSAxMy4yNSAxNy4wNQ"},{ name : "sletter", data : "TTE3LjIgMTUuMDUgUTIwLjA1IDE0LjMgMjIuNTUgMTQuOTUgTDI1Ljc1IDE1LjggMjcuNSAxNi43NSBRMjguNSAxNy42IDI4LjUgMTguMyAyOC40NSAxOC45NSAyOC4wNSAxOS40IDI3LjY1IDE5Ljg1IDI3IDE5LjggMjYuMyAxOS43NSAyNS40IDE5LjIgTDIzLjcgMTguMyAyMS44IDE3LjcgUTE4Ljk1IDE2Ljg1IDE3LjQ1IDE4LjE1IDE1LjkgMTkuNDUgMTYuMzUgMjAuOTUgMTYuOCAyMi40NSAxNy43IDIyLjk1IDIxLjQ1IDI1LjM1IDI1LjIgMjYuNDUgMjcuNDUgMjcuNCAyOC42IDI5IDMwLjQ1IDMyLjc1IDI5LjQgMzUuMjUgMjguMyAzNy43IDI1LjcgMzkgMjIuNSA0MC4yNSAxOC44NSA0MC4xIDE1Ljc1IDM5LjUgMTQgMzguNCAxMi4yNSAzNy4yNSAxMS45IDM2LjQgMTEuNiAzNS41NSAxMi4yNSAzNC43NSAxMi45NSAzNC4xNSAxMy40NSAzNC40IEwxNy44NSAzNi45NSBRMjIuNzUgMzguOCAyNC43IDM0LjYgMjUuMDUgMzMuNjUgMjQuNiAzMi43IDI0LjA1IDMxLjU1IDIyLjI1IDMwLjQ1IEwxNy4wNSAyNy44NSBRMTMuMSAyNi4wNSAxMi4xNSAyMy4xNSAxMS43NSAxOS43NSAxMy4yNSAxNy40NSBMMTQuMiAxNi41IFExNS40IDE1LjUgMTcuMiAxNS4wNQ"},{ name : "pletter", data : "TTIwLjM1IDE3LjU1IFExNy4xIDE3LjY1IDE0LjggMjEuNCBMMTQuNzUgMzMuMTUgUTE2LjQgMzYuOTUgMjAuODUgMzYuNyAyMy4yNSAzNi41NSAyNC43IDM0LjQ1IEwyNS4zIDMzLjQgUTI3IDMwIDI2LjcgMjUuNjUgMjYuNDUgMjMuMTUgMjUuNjUgMjAuNjUgMjQuMDUgMTcuMSAyMC4zNSAxNy41NSBNMTggMTUuNCBRMTkuOSAxNC4yNSAyMy4yIDE0LjEgMjYuNDUgMTMuOSAyOS4xIDE2Ljc1IDMxLjcgMTkuNTUgMzIgMjMuMiAzMi4yNSAyNi44IDMxLjMgMzAuMjUgMzAuNSAzMy40IDI4LjQgMzUuOTUgMjcuMSAzNy43NSAyNC4zIDM4LjY1IDIyLjYgMzkuMyAyMC43NSAzOS4yNSAxNy45NSAzOS4yNSAxNS4xIDM4LjM1IEwxNC4xNSA0OC41IFExMy4xNSA0OS41IDExLjU1IDQ5LjMgMTAuMSA0OS40IDkuNiA0Ny45IEw5Ljk1IDE3LjA1IFExMC4yIDE1LjcgMTEuNCAxNS4xIEwxMi4wNSAxNC45NSAxMy40IDE1LjEgUTE1LjIgMTYuNCAxNS4zIDE3LjcgMTYuMSAxNi41IDE4IDE1LjQ"}];
  var __map_reserved = {}
  var ArrayBuffer = $global.ArrayBuffer || js_html_compat_ArrayBuffer;
  if(ArrayBuffer.prototype.slice == null) {
  	ArrayBuffer.prototype.slice = js_html_compat_ArrayBuffer.sliceImpl;
  }
  var Uint8Array = $global.Uint8Array || js_html_compat_Uint8Array._new;
  haxe_crypto_Base64.CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  haxe_crypto_Base64.BYTES = haxe_io_Bytes.ofString(haxe_crypto_Base64.CHARS);
  js_Boot.__toStr = ({ }).toString;
  js_html_compat_Uint8Array.BYTES_PER_ELEMENT = 1;
  letters_Path.fl = 420;
  letters_paragraphPath_ParagraphPathDemo.numBeziers = 40;
  letters_paragraphPath_ParagraphPathDemo.numSections = 100;
  letters_pathway_Iterator0_$1.accuracy = 1000000;
  turtle_Turtle.pressDownStageFunc = [];
  turtle_targetJS_SetupCanvas.__meta__ = { fields : { parseInt : { 'static' : null}}};
  letters_paragraphPath_ParagraphPathDemo.main();
  })(typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this);
  