2012-06-21 07:37:28 +04:00
var Guid = function ( ) { var f = 0 ; return { guid : function ( ) { return f += 1 } } } ( ) , Value = function ( ) { var f = function ( a ) { a . replace ( '"' , """ ) ; a . replace ( "&" , "&" ) ; a . replace ( "'" , "'" ) ; a . replace ( "<" , "<" ) ; a . replace ( ">" , ">" ) ; return a } , b = function ( a ) { if ( "boolean" === typeof a ) return a ? "True" : "False" ; if ( "number" !== typeof a && a [ 0 ] ) { if ( "Tuple" === a [ 0 ] . substring ( 0 , 5 ) ) { for ( var c = "" , g = a . length ; -- g ; ) c = "," + b ( a [ g ] ) + c ; "," === c [ 0 ] && ( c = c . substring ( 1 ) ) ; return "(" + c + ")" } if ( "Cons" === a [ 0 ] ) for ( var g = "string" === typeof a [ 1 ] ? '"' : "]" ,
h = "string" === typeof a [ 1 ] ? "" : "," , c = ( "string" === typeof a [ 1 ] ? '"' : "[" ) + b ( a [ 1 ] ) , a = a [ 2 ] ; ; ) if ( "Cons" === a [ 0 ] ) c += h + b ( a [ 1 ] ) , a = a [ 2 ] ; else return c + g ; else { if ( "Nil" === a [ 0 ] ) return "[]" ; c = "" ; for ( g = a . length ; -- g ; ) c = " " + b ( a [ g ] ) + c ; c = a [ 0 ] + c ; return 1 < a . length ? "(" + c + ")" : c } } return a + "" } ; return { show : function ( a ) { return Text . monospace ( f ( b ( a ) ) ) } , Tuple : function ( ) { var a = arguments . length , c = Array ( a + 1 ) ; for ( c [ 0 ] = "Tuple" + arguments . length ; a -- ; ) c [ a + 1 ] = arguments [ a ] ; return c } , append : function ( a , c ) { if ( "string" === typeof a && "string" === typeof c ) return a . concat ( c ) ;
if ( "Nil" === a [ 0 ] ) return c ; for ( var b = [ "Cons" , a [ 1 ] , [ "Nil" ] ] , h = b , a = a [ 2 ] ; "Cons" === a [ 0 ] ; ) h [ 2 ] = [ "Cons" , a [ 1 ] , [ "Nil" ] ] , a = a [ 2 ] , h = h [ 2 ] ; h [ 2 ] = c ; return b } , toText : function ( a ) { if ( "string" === typeof a ) return a ; for ( var b = [ ] ; "Cons" === a [ 0 ] ; ) b . push ( a [ 1 ] ) , a = a [ 2 ] ; return f ( b . join ( "" ) ) } , properEscape : f } } ( ) , List = function ( ) { function f ( a ) { return function ( e ) { if ( "Nil" === e [ 0 ] ) return e ; "Cons" !== e [ 0 ] && i ( "map" ) ; for ( var d = [ "Cons" , a ( e [ 1 ] ) , [ "Nil" ] ] , b = d , e = e [ 2 ] ; "Cons" === e [ 0 ] ; ) b [ 2 ] = [ "Cons" , a ( e [ 1 ] ) , [ "Nil" ] ] , e = e [ 2 ] , b = b [ 2 ] ; return d } } function b ( e ) { return function ( a ) { return function ( d ) { var b =
a ; if ( "Nil" === d [ 0 ] ) return b ; for ( "Cons" !== d [ 0 ] && i ( "foldl" ) ; "Cons" === d [ 0 ] ; ) b = e ( d [ 1 ] ) ( b ) , d = d [ 2 ] ; return b } } } function a ( e ) { return function ( a ) { return function ( d ) { var b = a ; if ( "Nil" === d [ 0 ] ) return b ; "Cons" !== d [ 0 ] && i ( "foldr" ) ; for ( var c = [ ] ; "Cons" === d [ 0 ] ; ) c . push ( d [ 1 ] ) , d = d [ 2 ] ; for ( d = c . length ; d -- ; ) b = e ( c [ d ] ) ( b ) ; return b } } } function c ( e ) { return function ( a ) { var d ; "Cons" !== a [ 0 ] ? d = void 0 : ( d = a [ 1 ] , a = a [ 2 ] , d = b ( e ) ( d ) ( a ) ) ; return d } } function g ( a ) { return function ( e ) { return function ( d ) { if ( "Nil" === d [ 0 ] ) return [ "Cons" , e , [ "Nil" ] ] ; "Cons" !==
d [ 0 ] && i ( "scanl" ) ; for ( var b = [ e ] ; "Cons" === d [ 0 ] ; ) e = a ( d [ 1 ] ) ( e ) , b . push ( e ) , d = d [ 2 ] ; for ( var d = [ "Nil" ] , c = b . length ; c -- ; ) d = [ "Cons" , b [ c ] , d ] ; return d } } } function h ( e ) { return function ( a ) { return function ( ) { for ( var d = [ function ( e ) { return "Nil" !== e [ 0 ] ? void 0 : [ "Tuple2" , [ "Nil" ] , [ "Nil" ] ] } , function ( a ) { if ( "Cons" === a [ 0 ] ) { var d = a [ 1 ] , a = a [ 2 ] ; var b = h ( e ) ( a ) ; "Tuple2" !== b [ 0 ] ? d = void 0 : ( a = b [ 1 ] , b = b [ 2 ] , d = e ( d ) ? [ "Tuple2" , [ "Cons" , d , a ] , b ] : [ "Tuple2" , a , [ "Cons" , d , b ] ] ) ; return d } } ] , b = d . length ; b -- ; ) { var c = d [ b ] ( a ) ; if ( void 0 !== c ) return c } } ( ) } } function k ( a ) { return function ( ) { for ( var e =
[ function ( a ) { return "Nil" !== a [ 0 ] ? void 0 : [ "Tuple2" , [ "Nil" ] , [ "Nil" ] ] } , function ( a ) { if ( "Cons" !== a [ 0 ] ) a = void 0 ; else if ( a = [ "Tuple2" , a [ 1 ] , k ( a [ 2 ] ) ] , "Tuple2" !== a [ 0 ] || "Tuple2" !== a [ 1 ] [ 0 ] ) a = void 0 ; else var e = a [ 1 ] [ 1 ] , d = a [ 1 ] [ 2 ] , a = "Tuple2" !== a [ 2 ] [ 0 ] ? void 0 : [ "Tuple2" , [ "Cons" , e , a [ 2 ] [ 1 ] ] , [ "Cons" , d , a [ 2 ] [ 2 ] ] ] ; return a } ] , d = e . length ; d -- ; ) { var b = e [ d ] ( a ) ; if ( void 0 !== b ) return b } } ( ) } function n ( a ) { return function ( e ) { return function ( ) { for ( var d = [ function ( a ) { return "Nil" !== a [ 0 ] ? void 0 : [ "Nil" ] } , function ( a ) { if ( "Cons" === a [ 0 ] ) { var e =
a [ 1 ] ; return "Nil" !== a [ 2 ] [ 0 ] ? void 0 : [ "Cons" , e , [ "Nil" ] ] } } , function ( e ) { if ( "Cons" === e [ 0 ] ) { var d = e [ 1 ] ; if ( "Cons" === e [ 2 ] [ 0 ] ) { var b = e [ 2 ] [ 1 ] , e = e [ 2 ] [ 2 ] ; return [ "Cons" , d , [ "Cons" , a , n ( a ) ( [ "Cons" , b , e ] ) ] ] } } } ] , b = d . length ; b -- ; ) { var c = d [ b ] ( e ) ; if ( void 0 !== c ) return c } } ( ) } } function o ( a ) { return function ( e ) { return function ( ) { for ( var d = [ function ( a ) { return "Nil" !== a [ 0 ] ? void 0 : [ "Nil" ] } , function ( a ) { if ( "Cons" === a [ 0 ] ) { var e = a [ 1 ] ; return "Nil" !== a [ 2 ] [ 0 ] ? void 0 : e } } , function ( e ) { if ( "Cons" === e [ 0 ] ) { var d = e [ 1 ] ; if ( "Cons" === e [ 2 ] [ 0 ] ) { var b =
e [ 2 ] [ 1 ] , e = e [ 2 ] [ 2 ] ; return Value . append ( d , Value . append ( a , o ( a ) ( [ "Cons" , b , e ] ) ) ) } } } ] , b = d . length ; b -- ; ) { var c = d [ b ] ( e ) ; if ( void 0 !== c ) return c } } ( ) } } var i = function ( a ) { throw "Function '" + a + "' expecting a list!" ; } , j = b ( function ( a ) { return function ( e ) { return [ "Cons" , a , e ] } } ) ( [ "Nil" ] ) , l = a ( function ( a ) { return function ( e ) { return Value . append ( a , e ) } } ) ( [ "Nil" ] ) , m = b ( function ( a ) { return function ( e ) { return a && e } } ) ( ! 0 ) , e = b ( function ( a ) { return function ( e ) { return a || e } } ) ( ! 1 ) , d = b ( function ( a ) { return function ( e ) { return a + e } } ) ( 0 ) , p =
b ( function ( a ) { return function ( e ) { return a * e } } ) ( 1 ) , r = c ( function ( a ) { return function ( e ) { return Math . max ( a , e ) } } ) , t = c ( function ( a ) { return function ( e ) { return Math . min ( a , e ) } } ) ; return { head : function ( a ) { if ( "Cons" !== a [ 0 ] ) throw "Error: 'head' only accepts lists of length greater than one." ; return a [ 1 ] } , tail : function ( a ) { if ( "Cons" !== a [ 0 ] ) throw "Error: 'tail' only accepts lists of length greater than one." ; return a [ 2 ] } , map : f , foldl : b , foldr : a , foldl1 : c , foldr1 : function ( e ) { return function ( d ) { var b ; "Cons" !== d [ 0 ] ? b = void 0 :
( b = d [ 1 ] , d = d [ 2 ] , b = a ( e ) ( b ) ( d ) ) ; return b } } , scanl : g , scanl1 : function ( a ) { return function ( e ) { if ( "Cons" !== e [ 0 ] ) throw "Error: 'scanl1' requires a list of at least length 1." ; return g ( a ) ( e [ 1 ] ) ( e [ 2 ] ) } } , filter : function ( a ) { return function ( e ) { if ( "Nil" === e [ 0 ] ) return e ; "Cons" !== e [ 0 ] && i ( "filter" ) ; for ( var d = [ ] ; "Cons" === e [ 0 ] ; ) a ( e [ 1 ] ) && d . push ( e [ 1 ] ) , e = e [ 2 ] ; for ( var e = [ "Nil" ] , b = d . length ; b -- ; ) e = [ "Cons" , d [ b ] , e ] ; return e } } , length : function ( a ) { for ( var e = 0 ; "Cons" === a [ 0 ] ; ) e += 1 , a = a [ 2 ] ; return e } , reverse : j , concat : l , concatMap : function ( a ) { return function ( e ) { return l ( f ( a ) ( e ) ) } } ,
and : m , or : e , forall : function ( a ) { return b ( function ( e ) { return function ( d ) { return d && a ( e ) } } ) ( ! 0 ) } , exists : function ( a ) { return b ( function ( e ) { return function ( d ) { return d || a ( e ) } } ) ( ! 1 ) } , sum : d , product : p , maximum : r , minimum : t , partition : h , zipWith : function ( a ) { return function ( e ) { return function ( d ) { if ( "Nil" === e [ 0 ] || "Nil" === d [ 0 ] ) return [ "Nil" ] ; ( "Cons" !== e [ 0 ] || "Cons" !== d [ 0 ] ) && i ( "zipWith" ) ; for ( var b = [ ] ; "Cons" === e [ 0 ] && "Cons" === d [ 0 ] ; ) b . push ( a ( e [ 1 ] ) ( d [ 1 ] ) ) , e = e [ 2 ] , d = d [ 2 ] ; for ( var d = [ "Nil" ] , c = b . length ; c -- ; ) d = [ "Cons" , b [ c ] , d ] ;
return d } } } , zip : function ( a ) { return function ( e ) { if ( "Nil" === a [ 0 ] || "Nil" === e [ 0 ] ) return [ "Nil" ] ; ( "Cons" !== a [ 0 ] || "Cons" !== e [ 0 ] ) && i ( "zip" ) ; for ( var d = [ ] ; "Cons" === a [ 0 ] && "Cons" === e [ 0 ] ; ) d . push ( [ "Tuple2" , a [ 1 ] , e [ 1 ] ] ) , a = a [ 2 ] , e = e [ 2 ] ; for ( var e = [ "Nil" ] , b = d . length ; b -- ; ) e = [ "Cons" , d [ b ] , e ] ; return e } } , unzip : k , intersperse : n , intercalate : o , sort : function ( e ) { if ( "Nil" === e [ 0 ] ) return e ; "Cons" !== e [ 0 ] && i ( "sort" ) ; for ( var a = [ ] ; "Cons" === e [ 0 ] ; ) a . push ( e [ 1 ] ) , e = e [ 2 ] ; a . sort ( function ( e , a ) { return e - a } ) ; for ( var e = [ "Nil" ] , d = a . length ; d -- ; ) e =
[ "Cons" , a [ d ] , e ] ; return e } , take : function ( e ) { return function ( a ) { if ( 0 >= e ) return [ "Nil" ] ; if ( "Nil" === a [ 0 ] ) return a ; "Cons" !== a [ 0 ] && i ( "take" ) ; var d = [ "Cons" , a [ 1 ] , [ "Nil" ] ] , b = d , a = a [ 2 ] ; for ( -- e ; "Cons" === a [ 0 ] && 0 < e ; ) b [ 2 ] = [ "Cons" , a [ 1 ] , [ "Nil" ] ] , b = b [ 2 ] , a = a [ 2 ] , -- e ; return d } } , drop : function ( e ) { return function ( a ) { if ( "Nil" === a [ 0 ] ) return a ; for ( "Cons" !== a [ 0 ] && i ( "drop" ) ; "Cons" === a [ 0 ] && 0 < e ; ) a = a [ 2 ] , -- e ; return a } } } } ( ) , Data = function ( ) { var f = function ( ) { return { fromCode : function ( a ) { return String . fromCharCode ( a ) } , toCode : function ( a ) { return a . charCodeAt ( 0 ) } ,
toUpper : function ( a ) { return a . toUpperCase ( ) } , toLower : function ( a ) { return a . toLowerCase ( ) } , toLocaleUpper : function ( a ) { return a . toLocaleUpperCase ( ) } , toLocaleLower : function ( a ) { return a . toLocaleLowerCase ( ) } } } ( ) , b = function ( ) { function a ( a ) { return function ( b ) { return "Just" === a [ 0 ] ? [ "Cons" , a [ 1 ] , b ] : b } } function b ( a ) { return function ( ) { return function ( b ) { var c = a ( c ) ; return "Just" === c [ 0 ] ? [ "Cons" , c [ 1 ] , b ] : b } } } return { Just : function ( a ) { return [ "Just" , a ] } , Nothing : [ "Nothing" ] , catMaybes : List . foldr ( a ) ( [ "Nil" ] ) , isJust : function ( a ) { return "Just" ===
a [ 0 ] } , isNothing : function ( a ) { return "Nothing" === a [ 0 ] } , fromMaybe : function ( a ) { return function ( b ) { return "Just" === b [ 0 ] ? b [ 1 ] : a } } , consMaybe : a , mapMaybe : function ( a ) { return List . foldr ( b ( a ) ) ( [ "Nil" ] ) } , maybe : function ( a ) { return function ( b ) { return function ( c ) { return "Just" === c [ 0 ] ? b ( c [ 1 ] ) : a } } } } } ( ) ; return { String : { toText : Value . toText , properEscape : Value . properEscape } , Char : f , Maybe : b , List : List } } ( ) , Color = function ( ) { var f = function ( b , a , c , g ) { return { r : Math . round ( 255 * b ) , g : Math . round ( 255 * a ) , b : Math . round ( 255 * c ) , a : g } } ; return { black : f ( 0 ,
0 , 0 , 1 ) , white : f ( 1 , 1 , 1 , 1 ) , red : f ( 1 , 0 , 0 , 1 ) , green : f ( 0 , 1 , 0 , 1 ) , blue : f ( 0 , 0 , 1 , 1 ) , rgba : function ( b ) { return function ( a ) { return function ( c ) { return function ( g ) { return f ( b , a , c , g ) } } } } , rgb : function ( b ) { return function ( a ) { return function ( c ) { return f ( b , a , c , 1 ) } } } , Internal : { extract : function ( b ) { return 1 === b . a ? "rgb(" + b . r + "," + b . g + "," + b . b + ")" : "rgba(" + b . r + "," + b . g + "," + b . b + "," + b . a + ")" } } } } ( ) , Element = function ( ) { var f = function ( a ) { a = document . createElement ( a ) ; a . id = Guid . guid ( ) ; return a } , b = function ( a ) { var d = f ( "div" ) ; d . appendChild ( a ) ;
return d } , a = function ( a ) { return function ( d ) { return function ( b ) { var c = f ( "div" ) ; c . isElmLeaf = ! 0 ; c . isElmText = ! 0 ; c . innerHTML = b ; c . style . textAlign = d ; 0 < a && ( c . style . width = a + "px" ) ; return c } } } , c = a ( 0 ) ( "left" ) , g = a ( 0 ) ( "justify" ) , h = a ( 0 ) ( "center" ) , k = a ( 0 ) ( "right" ) , n = function ( a ) { return "DIV" === a . tagName ? a : b ( a ) } , o = function ( a ) { a . style . styleFloat = "left" ; a . style . cssFloat = "left" ; return a } , i = function ( a ) { a . style . position = "absolute" ; return a } , j = function ( a , d , b ) { for ( var c = f ( "div" ) , i = b . length ; i -- ; ) { var h = d ( b [ i ] ) ; c . appendChild ( h ) } c . elmFlowDirection =
a ; return c } , l = function ( a ) { return function ( d ) { for ( var b = [ ] ; "Cons" === d [ 0 ] ; ) b . push ( d [ 1 ] ) , d = d [ 2 ] ; 3 <= a && b . reverse ( ) ; d = a % 3 ; if ( 0 == d ) return j ( "Y" , n , b ) ; if ( 1 == d ) return j ( "X" , o , b ) ; if ( 2 == d ) return j ( "Z" , i , b ) } } , m = function ( e ) { return function ( d ) { if ( "A" === d . tagName ) return m ( e ) ( d . firstChild ) , d ; if ( d . hasOwnProperty ( "isElmText" ) ) { var b = a ( e ) ( d . style . textAlign ) ( d . innerHTML ) ; d . style . height = b . style . height } d . style . width = e + "px" ; return d } } ; return { text : c , image : function ( a ) { var d = f ( "img" ) ; d . isElmLeaf = ! 0 ; d . onload = function ( ) { "" ===
d . style . width && 0 < this . width && ( d . style . width = d . width = this . width + "px" ) ; "" === d . style . height && 0 < this . height && ( d . style . height = d . height = this . height + "px" ) ; Dispatcher . adjust ( ) } ; d . src = Data . String . toText ( a ) ; d . name = d . src ; return d } , fittedImage : function ( a ) { return function ( d ) { return function ( b ) { var c = f ( "canvas" ) ; c . style . width = a + "px" ; c . style . height = d + "px" ; c . width = a ; c . height = d ; c . innerHTML = "Your browser does not support the canvas element." ; c . isElmLeaf = ! 0 ; var i = f ( "img" ) ; i . onload = function ( ) { if ( c . getContext ) { var b =
c . getContext ( "2d" ) , h = 0 , g = 0 , f = this . width , j = this . height ; a / d > this . width / this . height ? ( j = this . width * d / a , g = ( this . height - j ) / 2 ) : ( f = this . height * a / d , h = ( this . width - f ) / 2 ) ; b . drawImage ( i , h , g , f , j , 0 , 0 , c . width , c . height ) } } ; i . src = Data . String . toText ( b ) ; return c } } } , video : function ( a ) { var a = Data . String . toText ( a ) , d = f ( "video" ) ; d . controls = "controls" ; var b = f ( "source" ) ; b . src = a ; b . type = "video/" + a . substring ( a . length - 3 , a . length ) ; d . appendChild ( b ) ; d . isElmLeaf = ! 0 ; return d } , audio : function ( a ) { var a = Data . String . toString ( a ) , d = f ( "video" ) ;
d . controls = "controls" ; var b = f ( "source" ) ; b . src = a ; b . type = "audio/" + a . substring ( a . length - 3 , a . length ) ; d . appendChild ( b ) ; d . isElmLeaf = ! 0 ; return d } , collage : function ( a ) { return function ( d ) { return function ( b ) { var c = f ( "canvas" ) ; c . style . width = a + "px" ; c . style . height = d + "px" ; c . width = a ; c . height = d ; if ( c . getContext ) { var i = c . getContext ( "2d" ) ; for ( i . clearRect ( 0 , 0 , c . width , c . height ) ; "Cons" === b [ 0 ] ; ) i = b [ 1 ] ( i ) , b = b [ 2 ] ; return c } c . innerHTML = "Your browser does not support the canvas element." ; c . isElmLeaf = ! 0 ; return c } } } , flow : l , layers : l ( 2 ) ,
rectangle : function ( a ) { return function ( d ) { var b = f ( "div" ) ; b . isElmLeaf = ! 0 ; b . style . width = a + "px" ; b . style . height = d + "px" ; return b } } , beside : function ( a ) { return function ( d ) { return l ( 4 ) ( [ "Cons" , a , [ "Cons" , d , [ "Nil" ] ] ] ) } } , above : function ( a ) { return function ( d ) { return l ( 3 ) ( [ "Cons" , a , [ "Cons" , d , [ "Nil" ] ] ] ) } } , below : function ( a ) { return function ( d ) { return l ( 0 ) ( [ "Cons" , a , [ "Cons" , d , [ "Nil" ] ] ] ) } } , box : function ( a ) { return function ( d ) { d . style . position = "absolute" ; d . style . margin = "auto" ; var b = ( a - 1 ) % 3 , c = ( a - 1 ) / 3 ; 2 > b && ( d . style . left = 0 ) ;
0 < b && ( d . style . right = 0 ) ; 2 > c && ( d . style . top = 0 ) ; 0 < c && ( d . style . bottom = 0 ) ; b = f ( "div" ) ; b . style . position = "relative" ; b . appendChild ( d ) ; return b } } , width : m , height : function ( a ) { return function ( b ) { ( "A" === b . tagName ? b . firstChild : b ) . style . height = a + "px" ; return b } } , size : function ( a ) { return function ( b ) { return function ( c ) { var i = "A" === c . tagName ? c . firstChild : c ; i . style . width = a + "px" ; i . style . height = b + "px" ; return c } } } , color : function ( a ) { return function ( b ) { b . style . backgroundColor = Color . Internal . extract ( a ) ; return b } } , opacity : function ( a ) { return function ( b ) { b . style . opacity =
a ; return b } } , link : function ( a ) { return function ( d ) { var c = f ( "a" ) ; c . href = Text . fromString ( a ) ; c . appendChild ( d ) ; return b ( c ) } } , asText : function ( b ) { return a ( 0 ) ( "left" ) ( Value . show ( b ) ) } , plainText : function ( b ) { return a ( 0 ) ( "left" ) ( Data . String . toText ( b ) ) } , justifiedText : g , centeredText : h , rightedText : k , up : 0 , left : 1 , inward : 2 , down : 3 , right : 4 , outward : 5 , correctTextSize : function ( a ) { var b = a . style . width ? a . style . width . slice ( 0 , - 2 ) : 0 , c = f ( "div" ) ; c . innerHTML = a . innerHTML ; c . style . textAlign = a . style . textAlign ; 0 < b && ( c . style . width = b + "px" ) ;
c . style . visibility = "hidden" ; c . style . styleFloat = "left" ; c . style . cssFloat = "left" ; document . body . appendChild ( c ) ; var i = window . getComputedStyle ( c ) ; 0 >= b && ( a . style . width = i . getPropertyValue ( "width" ) ) ; a . style . height = i . getPropertyValue ( "height" ) ; document . body . removeChild ( c ) } } } ( ) , Text = function ( ) { var f = function ( a ) { if ( "string" === typeof a ) return a ; for ( var b = [ ] ; "Cons" === a [ 0 ] ; ) b . push ( a [ 1 ] ) , a = a [ 2 ] ; return Data . String . properEscape ( b . join ( "" ) ) } , b = function ( a ) { return function ( b ) { return "<" + a + ">" + b + "</" + a + ">" } } , a = function ( a ,
b ) { return function ( c ) { return "<span style='" + a + ":" + b + "'>" + c + "</span>" } } , c = b ( "h1" ) , g = a ( "font-style" , "italic" ) , b = b ( "b" ) , h = a ( "text-decoration" , "underline" ) , k = a ( "text-decoration" , "overline" ) , n = a ( "text-decoration" , "line-through" ) ; return { fromString : f , toText : f , header : c , height : function ( b ) { return a ( "font-size" , b + "em" ) } , italic : g , bold : b , underline : h , overline : k , strikeThrough : n , monospace : a ( "font-family" , "monospace" ) , color : function ( b ) { return a ( "color" , Color . Internal . extract ( b ) ) } , link : function ( a ) { return function ( b ) { return "<a href='" +
f ( a ) + "'>" + b + "</a>" } } } } ( ) , Shape = function ( ) { var f = function ( a , b , g , h ) { return { center : a , points : b , theta : g , scale : h } } , b = function ( a ) { return function ( b ) { return function ( g ) { return function ( h ) { h . save ( ) ; h . translate ( g . center [ 0 ] , g . center [ 1 ] ) ; h . rotate ( g . theta ) ; h . scale ( g . scale , g . scale ) ; h . beginPath ( ) ; var f = g . points ; h . moveTo ( f [ 0 ] [ 0 ] , f [ 0 ] [ 1 ] ) ; for ( var n = f . length ; n -- ; ) h . lineTo ( f [ n ] [ 0 ] , f [ n ] [ 1 ] ) ; h . closePath ( ) ; a ? ( h . fillStyle = Color . Internal . extract ( b ) , h . fill ( ) ) : ( h . strokeStyle = Color . Internal . extract ( b ) , h . stroke ( ) ) ; h . restore ( ) ;
return h } } } } ; return { polygon : function ( a ) { return function ( b ) { for ( var g = [ ] ; "Cons" === a [ 0 ] ; ) g . push ( [ a [ 1 ] [ 1 ] , a [ 1 ] [ 2 ] ] ) , a = a [ 2 ] ; b = [ b [ 1 ] , b [ 2 ] ] ; return f ( b , g , 0 , 1 ) } } , ngon : function ( a ) { return function ( b ) { return function ( g ) { for ( var h = [ ] , k = a ; k -- ; ) h . push ( [ b * Math . cos ( 2 * Math . PI * k / a ) , b * Math . sin ( 2 * Math . PI * k / a ) ] ) ; g = [ g [ 1 ] , g [ 2 ] ] ; return f ( g , h , 0 , 1 ) } } } , rect : function ( a ) { return function ( b ) { return function ( g ) { var h = [ [ - a / 2 , - b / 2 ] , [ a / 2 , - b / 2 ] , [ a / 2 , b / 2 ] , [ - a / 2 , b / 2 ] ] , g = [ g [ 1 ] , g [ 2 ] ] ; return f ( g , h , 0 , 1 ) } } } , oval : function ( a ) { return function ( b ) { return function ( g ) { for ( var h =
[ ] , k = 2 * Math . PI ; 0 < k ; k -= Math . PI / 50 ) h . push ( [ a / 2 * Math . cos ( k ) , b / 2 * Math . sin ( k ) ] ) ; g = [ g [ 1 ] , g [ 2 ] ] ; return f ( g , h , 0 , 1 ) } } } , move : function ( a ) { return function ( b ) { return function ( g ) { return f ( [ a + g . center [ 0 ] , b + g . center [ 1 ] ] , g . points , g . theta , g . scale ) } } } , rotate : function ( a ) { return function ( b ) { return f ( b . center , b . points , b . theta + 2 * Math . PI * a , b . scale ) } } , scale : function ( a ) { return function ( b ) { return f ( b . center , b . points , b . theta , b . scale * a ) } } , filled : b ( ! 0 ) , outlined : b ( ! 1 ) , customOutline : function ( a ) { return function ( b ) { return function ( f ) { f . points . push ( f . points [ 0 ] ) ;
return Line . customLine ( a ) ( b ) ( f ) } } } } } ( ) , Line = function ( ) { var f = function ( b ) { return function ( a ) { return function ( c ) { if ( "string" === typeof b [ 0 ] ) { for ( var f = [ ] ; "Cons" === b [ 0 ] ; ) f . push ( b [ 1 ] ) , b = b [ 2 ] ; b = f } 0 === b . length && ( b = [ 8 , 4 ] ) ; return function ( h ) { h . save ( ) ; h . beginPath ( ) ; h . translate ( c . center [ 0 ] , c . center [ 1 ] ) ; h . rotate ( c . theta ) ; h . scale ( c . scale , c . scale ) ; var f = b , g = c . points , o = g . length - 1 , i = g [ o ] [ 0 ] , j = g [ o ] [ 1 ] , l = 0 , m = 0 , e = 0 , d = 0 , p = 0 , r = 0 , t = f . length , s = ! 0 , q = f [ 0 ] ; for ( h . moveTo ( i , j ) ; o -- ; ) { l = g [ o ] [ 0 ] ; m = g [ o ] [ 1 ] ; e = l - i ; d = m - j ; for ( p = Math . sqrt ( e *
e + d * d ) ; q <= p ; ) i += e * q / p , j += d * q / p , h [ s ? "lineTo" : "moveTo" ] ( i , j ) , e = l - i , d = m - j , p = Math . sqrt ( e * e + d * d ) , s = ! s , r = ( r + 1 ) % t , q = f [ r ] ; 0 < p && ( h [ s ? "lineTo" : "moveTo" ] ( l , m ) , q -= p ) ; i = l ; j = m } h . strokeStyle = Color . Internal . extract ( a ) ; h . stroke ( ) ; h . restore ( ) ; return h } } } } ; return { line : function ( b ) { for ( var a = [ ] ; "Cons" === b [ 0 ] ; ) a . push ( [ b [ 1 ] [ 1 ] , b [ 1 ] [ 2 ] ] ) , b = b [ 2 ] ; return { center : [ 0 , 0 ] , points : a , theta : 0 , scale : 1 } } , customLine : f , solid : function ( b ) { return function ( a ) { return function ( c ) { c . save ( ) ; c . beginPath ( ) ; c . translate ( a . center [ 0 ] , a . center [ 1 ] ) ; c . rotate ( a . theta ) ;
c . scale ( a . scale , a . scale ) ; var f = a . points , h = f . length ; for ( c . moveTo ( f [ h - 1 ] [ 0 ] , f [ h - 1 ] [ 1 ] ) ; h -- ; ) c . lineTo ( f [ h ] [ 0 ] , f [ h ] [ 1 ] ) ; c . strokeStyle = Color . Internal . extract ( b ) ; c . stroke ( ) ; c . restore ( ) ; return c } } } , dashed : f ( [ 8 , 4 ] ) , dotted : f ( [ 3 , 3 ] ) } } ( ) , Elm = function ( ) { var f = function ( a , b , c ) { for ( var f = a . length ; f -- ; ) a [ f ] . recv ( b , c ) } , b = function ( a ) { this . id = Guid . guid ( ) ; this . value = a ; this . kids = [ ] ; this . recv = function ( a , b , c ) { if ( b = b === this . id ) this . value = c ; f ( this . kids , a , b ) } ; Dispatcher . inputs . push ( this ) } , a = function ( a , b ) { this . id = Guid . guid ( ) ;
this . value = null ; this . kids = [ ] ; this . inbox = { } ; b . reverse ( ) ; this . recalc = function ( ) { for ( var c = a , f = b . length ; f -- ; ) c = c ( b [ f ] . value ) ; this . value = c } ; this . recalc ( ) ; this . recv = function ( a , c ) { this . inbox . hasOwnProperty ( a ) || ( this . inbox [ a ] = { changed : ! 1 , count : 0 } ) ; var i = this . inbox [ a ] ; i . count += 1 ; c && ( i . changed = ! 0 ) ; i . count == b . length && ( i . changed && this . recalc ( ) , f ( this . kids , a , i . changed ) , delete this . inbox [ a ] ) } ; for ( var c = b . length ; c -- ; ) b [ c ] . kids . push ( this ) } , c = function ( a , b , c ) { this . id = Guid . guid ( ) ; this . value = b ; this . kids = [ ] ; this . recv =
function ( b , h ) { h && ( this . value = a ( c . value ) ( this . value ) ) ; f ( this . kids , b , h ) } ; c . kids . push ( this ) } ; return { Input : function ( a ) { return new b ( a ) } , Lift : function ( b , c ) { return new a ( b , c ) } , Fold : function ( a , b , f ) { return new c ( a , b , f ) } } } ( ) , Dispatcher = function ( ) { var f = null , b = 0 , a = [ ] , c = function ( a ) { var b = a . childNodes , f = b . length ; if ( a . hasOwnProperty ( "isElmLeaf" ) ) { a . hasOwnProperty ( "isElmText" ) && Element . correctTextSize ( a ) ; var b = "" === a . style . width ? 0 : a . style . width . slice ( 0 , - 2 ) - 0 , g = "" === a . style . height ? 0 : a . style . height . slice ( 0 , - 2 ) - 0 ;
return [ b , g ] } if ( 1 === f ) { var i = c ( b [ 0 ] ) ; "" !== a . style . width && ( i [ 0 ] = a . style . width . slice ( 0 , - 2 ) - 0 ) ; "" !== a . style . height && ( i [ 1 ] = a . style . height . slice ( 0 , - 2 ) - 0 ) ; 0 !== i [ 0 ] && ( a . style . width = i [ 0 ] + "px" ) ; 0 !== i [ 1 ] && ( a . style . height = i [ 1 ] + "px" ) ; return i } for ( var j = 0 , l = g = 0 , m = 0 , e = ! 0 , d = ! 0 ; f -- ; ) i = c ( b [ f ] ) , j = Math . max ( j , i [ 0 ] ) , g = Math . max ( g , i [ 1 ] ) , l += i [ 0 ] , m += i [ 1 ] , e = e && 0 < i [ 0 ] , d = d && 0 < i [ 1 ] ; b = j ; f = a . elmFlowDirection ; "X" === f && ( b = e ? l : 0 ) ; "Y" === f && ( g = d ? m : 0 ) ; 0 < b && ( a . style . width = b + "px" ) ; 0 < g && ( a . style . height = g + "px" ) ; return [ b , g ] } , g = function ( ) { var a =
document . getElementById ( "content" ) ; c ( a . children [ 0 ] ) } ; return { initialize : function ( ) { var a = ElmCode . hasOwnProperty ( "main" ) ? ElmCode . main : main ; try { f = a ( ) } catch ( b ) { throw b ; } f . hasOwnProperty ( "recv" ) || ( f = Elm . Input ( f ) ) ; document . getElementById ( "content" ) . appendChild ( f . value ) ; g ( ) ; a = document . getElementById ( "widthChecker" ) . offsetWidth ; a !== window . innerWidth && Dispatcher . notify ( Window . dimensions . id , Value . Tuple ( a , window . innerHeight ) ) ; f = Elm . Lift ( function ( a ) { var b = document . getElementById ( "content" ) , c = b . children [ 0 ] ; b . replaceChild ( a ,
c ) ; delete c ; g ( ) ; return a } , [ f ] ) } , notify : function ( c , f ) { b += 1 ; for ( var g = a . length ; g -- ; ) a [ g ] . recv ( b , c , f ) } , adjust : g , inputs : a } } ( ) , Signal = function ( ) { function f ( a ) { for ( var b = [ "Nil" ] , c = a . length ; c -- ; ) b = [ "Cons" , a [ c ] , b ] ; return b } var b = function ( ) { return document . addEventListener ? function ( a , b , c ) { a . addEventListener ( b , c , ! 1 ) } : function ( a , b , c ) { a . attachEvent ( "on" + b , c ) } } ( ) , a = function ( ) { function a ( b ) { var d = 0 , c = 0 ; b || ( b = window . event ) ; if ( b . pageX || b . pageY ) d = b . pageX , c = b . pageY ; else if ( b . clientX || b . clientY ) d = b . clientX + document . body . scrollLeft +
document . documentElement . scrollLeft , c = b . clientY + document . body . scrollTop + document . documentElement . scrollTop ; return Value . Tuple ( d , c ) } var c = Elm . Input ( Value . Tuple ( 0 , 0 ) ) , f = Elm . Input ( ! 1 ) , g = Elm . Input ( ! 1 ) ; b ( document , "click" , function ( ) { Dispatcher . notify ( g . id , ! 0 ) ; Dispatcher . notify ( g . id , ! 1 ) } ) ; b ( document , "mousedown" , function ( ) { Dispatcher . notify ( f . id , ! 0 ) } ) ; b ( document , "mouseup" , function ( ) { Dispatcher . notify ( f . id , ! 1 ) } ) ; b ( document , "mousemove" , function ( b ) { Dispatcher . notify ( c . id , a ( b ) ) } ) ; return { position : c , x : Elm . Lift ( function ( a ) { return a [ 1 ] } ,
[ c ] ) , y : Elm . Lift ( function ( a ) { return a [ 2 ] } , [ c ] ) , isClicked : g , isDown : f , clickedOn : function ( a ) { var d = Elm . Input ( ! 1 ) ; b ( a , "click" , function ( ) { Dispatcher . notify ( d . id , ! 0 ) ; Dispatcher . notify ( d . id , ! 1 ) } ) ; return Value . Tuple ( a , d ) } } } ( ) , c = function ( ) { return { every : function ( a ) { var a = 1E3 * a , b = Elm . Input ( 0 ) , c = 0 ; setInterval ( function ( ) { c += a ; Dispatcher . notify ( b . id , c / 1E3 ) } , a ) ; return b } , after : function ( a ) { var a = 1E3 * a , b = Elm . Input ( ! 1 ) ; setTimeout ( function ( ) { Dispatcher . notify ( b . id , ! 0 ) } , a ) ; return b } , before : function ( a ) { var a = 1E3 * a , b = Elm . Input ( ! 0 ) ;
setTimeout ( function ( ) { Dispatcher . notify ( b . id , ! 1 ) } , a ) ; return b } } } ( ) , g = function ( ) { var a = Elm . Input ( Value . Tuple ( window . innerWidth , window . innerHeight ) ) ; b ( window , "resize" , function ( ) { var b = document . getElementById ( "widthChecker" ) . offsetWidth ; Dispatcher . notify ( a . id , Value . Tuple ( b , window . innerHeight ) ) } ) ; return { dimensions : a , width : Elm . Lift ( function ( a ) { return a [ 1 ] } , [ a ] ) , height : Elm . Lift ( function ( a ) { return a [ 2 ] } , [ a ] ) } } ( ) , h = { Raw : function ( ) { function a ( b , c ) { return "Nil" === c [ 0 ] ? c : c [ 1 ] === b ? c [ 2 ] : [ "Cons" , c [ 1 ] , a ( b , c [ 2 ] ) ] }
var c = Elm . Input ( [ "Nil" ] ) , f = Elm . Input ( [ "Nothing" ] ) ; b ( document , "keydown" , function ( a ) { var b ; a : { for ( b = c . value ; "Nil" !== b [ 0 ] ; ) { if ( b [ 1 ] === a . keyCode ) { b = ! 0 ; break a } b = b [ 2 ] } b = ! 1 } b || Dispatcher . notify ( c . id , [ "Cons" , a . keyCode , c . value ] ) } ) ; b ( document , "keyup" , function ( b ) { b = a ( b . keyCode , c . value ) ; Dispatcher . notify ( c . id , b ) } ) ; b ( window , "blur" , function ( ) { Dispatcher . notify ( c . id , [ "Nil" ] ) } ) ; b ( document , "keypress" , function ( a ) { Dispatcher . notify ( f . id , [ "Just" , a . charCode || a . keyCode ] ) ; Dispatcher . notify ( f . id , [ "Nothing" ] ) } ) ; return { keysDown : c ,
charPressed : f } } ( ) } , k = function ( ) { var a = function ( a ) { return function ( b ) { var c = Elm . Input ( [ "Waiting" ] ) , d = { } ; window . XMLHttpRequest ? d = new XMLHttpRequest : window . ActiveXObject && ( d = new ActiveXObject ( "Microsoft.XMLHTTP" ) ) ; d . onreadystatechange = function ( ) { 4 === d . readyState && Dispatcher . notify ( c . id , 200 === d . status ? [ "Success" , f ( d . responseText ) ] : [ "Failure" , d . status , f ( d . statusText ) ] ) } ; d . open ( a , Data . String . toText ( b ) , ! 0 ) ; d . send ( null ) ; return c } } , b = function ( a ) { return function ( b ) { var c = Elm . Input ( [ "Nothing" ] ) , b = Elm . Lift ( function ( b ) { if ( "Just" !==
b [ 0 ] ) { try { Dispatcher . notify ( c . id , [ "Nothing" ] ) } catch ( g ) { } return [ ] } try { Dispatcher . notify ( c . id , [ "Just" , [ "Waiting" ] ] ) } catch ( i ) { c . value = [ "Just" , [ "Waiting" ] ] } var h = { } ; window . XMLHttpRequest ? h = new XMLHttpRequest : window . ActiveXObject && ( h = new ActiveXObject ( "Microsoft.XMLHTTP" ) ) ; h . onreadystatechange = function ( ) { 4 === h . readyState && Dispatcher . notify ( c . id , [ "Just" , 200 === h . status ? [ "Success" , f ( h . responseText ) ] : [ "Failure" , h . status , f ( h . statusText ) ] ] ) } ; h . open ( a , Data . String . toText ( b [ 1 ] ) , ! 0 ) ; h . send ( null ) ; return [ ] } , [ b ] ) ;
return Elm . Lift ( function ( a ) { return function ( ) { return a } } , [ c , b ] ) } } ; return { get : a ( "GET" ) , post : a ( "POST" ) , gets : b ( "GET" ) , posts : b ( "POST" ) } } ( ) , n = function ( ) { return { inRange : function ( a ) { return function ( b ) { return Elm . Input ( Math . floor ( Math . random ( ) * ( b - a + 1 ) ) + a ) } } , randomize : function ( a ) { return function ( b ) { return function ( c ) { return Elm . Lift ( function ( ) { return Math . floor ( Math . random ( ) * ( b - a + 1 ) ) + a } , [ c ] ) } } } } } ( ) , o = function ( ) { var a = function ( a ) { a . isElmLeaf = ! 0 ; var c = Elm . Input ( [ "Nil" ] ) ; b ( a , "keyup" , function ( ) { Dispatcher . notify ( c . id ,
f ( a . value ) ) ; a . focus ( ) } ) ; return Value . Tuple ( a , c ) } , c = function ( a ) { a = document . createElement ( a ) ; a . id = Guid . guid ( ) ; return a } , g = function ( a ) { for ( var e = c ( "select" ) , d = [ ] ; "Cons" === a [ 0 ] ; ) { var f = c ( "option" ) , g = Text . toText ( a [ 1 ] [ 1 ] ) ; f . value = g ; f . innerHTML = g ; e . appendChild ( f ) ; d . push ( a [ 1 ] [ 2 ] ) ; a = a [ 2 ] } var h = Elm . Input ( d [ 0 ] ) ; b ( e , "change" , function ( ) { Dispatcher . notify ( h . id , d [ e . selectedIndex ] ) } ) ; return Value . Tuple ( e , h ) } ; return { textArea : function ( b ) { return function ( e ) { var d = c ( "textarea" ) ; d . rows = e ; d . cols = b ; return a ( d , "" ) } } , textField : function ( b ) { var e =
c ( "input" ) ; e . type = "text" ; return a ( e , b ) } , password : function ( b ) { var e = c ( "input" ) ; e . type = "password" ; return a ( e , b ) } , checkbox : function ( a ) { var e = c ( "input" ) ; e . type = "checkbox" ; e . checked = a ; var d = Elm . Input ( a ) ; b ( e , "change" , function ( ) { Dispatcher . notify ( d . id , e . checked ) } ) ; return Value . Tuple ( e , d ) } , dropDown : g , stringDropDown : function ( a ) { return g ( List . map ( function ( a ) { return Value . Tuple ( a , a ) } ) ( a ) ) } , button : function ( a ) { var e = c ( "input" ) ; e . type = "button" ; e . value = Text . toText ( a ) ; var d = Elm . Input ( ! 1 ) ; b ( e , "click" , function ( ) { Dispatcher . notify ( d . id ,
! 0 ) ; Dispatcher . notify ( d . id , ! 1 ) } ) ; return Value . Tuple ( e , d ) } } } ( ) ; return { Mouse : a , Keyboard : h , Time : c , Window : g , HTTP : k , Random : n , Input : o , constant : function ( a ) { return Elm . Input ( a ) } , lift : function ( a ) { return function ( b ) { return Elm . Lift ( a , [ b ] ) } } , lift2 : function ( a ) { return function ( b ) { return function ( c ) { return Elm . Lift ( a , [ b , c ] ) } } } , lift3 : function ( a ) { return function ( b ) { return function ( c ) { return function ( f ) { return Elm . Lift ( a , [ b , c , f ] ) } } } } , lift4 : function ( a ) { return function ( b ) { return function ( c ) { return function ( f ) { return function ( e ) { return Elm . Lift ( a ,
[ b , c , f , e ] ) } } } } } , foldp : function ( a ) { return function ( b ) { return function ( c ) { return Elm . Fold ( a , b , c ) } } } } } ( ) , Prelude = function ( ) { var f = function ( b ) { return function ( a ) { var c = b % a , c = 0 == b ? 0 : 0 < a ? 0 <= b ? c : c + a : - f ( - b ) ( - a ) ; return c == a ? 0 : c } } ; return { id : function ( b ) { return b } , not : function ( b ) { return ! b } , fst : function ( b ) { return b [ 1 ] } , snd : function ( b ) { return b [ 2 ] } , rem : function ( b ) { return function ( a ) { return b % a } } , sqrt : Math . sqrt , abs : Math . abs , pi : Math . PI , sin : Math . sin , cos : Math . cos , tan : Math . tan , asin : Math . asin , acos : Math . acos , atan : Math . atan ,
mod : f , min : function ( b ) { return function ( a ) { return Math . min ( b , a ) } } , max : function ( b ) { return function ( a ) { return Math . max ( b , a ) } } , flip : function ( b ) { return function ( a ) { return function ( c ) { return b ( c ) ( a ) } } } , clamp : function ( b ) { return function ( a ) { return function ( c ) { return Math . min ( a , Math . max ( b , c ) ) } } } , curry : function ( b ) { return function ( a ) { return function ( c ) { return b ( [ "Tuple2" , a , c ] ) } } } , uncurry : function ( b ) { return function ( a ) { if ( "Tuple2" !== a [ 0 ] ) throw "Function was uncurry'd but was not given a pair." ; return b ( a [ 1 ] ) ( a [ 2 ] ) } } ,
logBase : function ( b ) { return function ( a ) { return Math . log ( a ) / Math . log ( b ) } } , Just : Data . Maybe . Just , Nothing : Data . Maybe . Nothing , maybe : Data . Maybe . maybe , map : Data . List . map , filter : Data . List . filter , head : Data . List . head , tail : Data . List . tail , length : Data . List . length , reverse : Data . List . reverse , foldr : Data . List . foldr , foldr1 : Data . List . foldr1 , foldl : Data . List . foldl , foldl1 : Data . List . foldl1 , and : Data . List . and , or : Data . List . or , forall : Data . List . forall , exists : Data . List . exists , sum : Data . List . sum , product : Data . List . product , concat : Data . List . concat ,
concatMap : Data . List . concatMap , maximum : Data . List . maximum , minimum : Data . List . minimum , scanl : Data . List . scanl , scanl1 : Data . List . scanl1 , take : Data . List . take , drop : Data . List . drop , lift : Signal . lift , lift2 : Signal . lift2 , lift3 : Signal . lift3 , lift4 : Signal . lift4 , foldp : Signal . foldp , constant : Signal . constant } } ( ) , eq = function ( f , b ) { if ( "object" === typeof f ) { if ( f === b ) return ! 0 ; if ( f . length !== b . length ) return ! 1 ; for ( var a = f . length ; a -- ; ) if ( ! eq ( f [ a ] , b [ a ] ) ) return ! 1 ; return ! 0 } return f === b } , includeGlobal = this ;
( function ( ) { var f = function ( a ) { for ( var b in a ) if ( "Internal" !== b ) try { includeGlobal [ b ] = a [ b ] } catch ( f ) { "length" === b && ( includeGlobal . execScript ( "var length;" ) , length = a [ b ] ) } } , b = function ( a ) { return function ( b ) { includeGlobal [ a ] = includeGlobal [ a ] || { } ; for ( var f in b ) "Internal" !== f && ( includeGlobal [ a ] [ f ] = b [ f ] ) } } ; f ( Element ) ; f ( Text ) ; color = Element . color ; height = Element . height ; show = Value . show ; f ( Color ) ; f ( Shape ) ; f ( Line ) ; b ( "Time" ) ( Signal . Time ) ; b ( "Mouse" ) ( Signal . Mouse ) ; b ( "Keyboard" ) ( Signal . Keyboard ) ; b ( "Window" ) ( Signal . Window ) ;
b ( "HTTP" ) ( Signal . HTTP ) ; b ( "Input" ) ( Signal . Input ) ; b ( "Random" ) ( Signal . Random ) } ) ( ) ; var ElmCode = { } ; ElmCode . Data = Data ; ElmCode . Signal = Signal ; ElmCode . Data . List = List ; ElmCode . Prelude = Prelude ;