| 
						 | 
						- // Generated by LiveScript 1.6.0
 - var each, map, compact, filter, reject, remove, partition, find, head, first, tail, last, initial, empty, reverse, unique, uniqueBy, fold, foldl, fold1, foldl1, foldr, foldr1, unfoldr, concat, concatMap, flatten, difference, intersection, union, countBy, groupBy, andList, orList, any, all, sort, sortWith, sortBy, sum, product, mean, average, maximum, minimum, maximumBy, minimumBy, scan, scanl, scan1, scanl1, scanr, scanr1, slice, take, drop, splitAt, takeWhile, dropWhile, span, breakList, zip, zipWith, zipAll, zipAllWith, at, elemIndex, elemIndices, findIndex, findIndices, toString$ = {}.toString;
 - each = curry$(function(f, xs){
 -   var i$, len$, x;
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     f(x);
 -   }
 -   return xs;
 - });
 - map = curry$(function(f, xs){
 -   var i$, len$, x, results$ = [];
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     results$.push(f(x));
 -   }
 -   return results$;
 - });
 - compact = function(xs){
 -   var i$, len$, x, results$ = [];
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     if (x) {
 -       results$.push(x);
 -     }
 -   }
 -   return results$;
 - };
 - filter = curry$(function(f, xs){
 -   var i$, len$, x, results$ = [];
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     if (f(x)) {
 -       results$.push(x);
 -     }
 -   }
 -   return results$;
 - });
 - reject = curry$(function(f, xs){
 -   var i$, len$, x, results$ = [];
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     if (!f(x)) {
 -       results$.push(x);
 -     }
 -   }
 -   return results$;
 - });
 - remove = curry$(function(el, xs){
 -   var i, x$;
 -   i = elemIndex(el, xs);
 -   x$ = xs.slice();
 -   if (i != null) {
 -     x$.splice(i, 1);
 -   }
 -   return x$;
 - });
 - partition = curry$(function(f, xs){
 -   var passed, failed, i$, len$, x;
 -   passed = [];
 -   failed = [];
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     (f(x) ? passed : failed).push(x);
 -   }
 -   return [passed, failed];
 - });
 - find = curry$(function(f, xs){
 -   var i$, len$, x;
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     if (f(x)) {
 -       return x;
 -     }
 -   }
 - });
 - head = first = function(xs){
 -   return xs[0];
 - };
 - tail = function(xs){
 -   if (!xs.length) {
 -     return;
 -   }
 -   return xs.slice(1);
 - };
 - last = function(xs){
 -   return xs[xs.length - 1];
 - };
 - initial = function(xs){
 -   if (!xs.length) {
 -     return;
 -   }
 -   return xs.slice(0, -1);
 - };
 - empty = function(xs){
 -   return !xs.length;
 - };
 - reverse = function(xs){
 -   return xs.concat().reverse();
 - };
 - unique = function(xs){
 -   var result, i$, len$, x;
 -   result = [];
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     if (!in$(x, result)) {
 -       result.push(x);
 -     }
 -   }
 -   return result;
 - };
 - uniqueBy = curry$(function(f, xs){
 -   var seen, i$, len$, x, val, results$ = [];
 -   seen = [];
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     val = f(x);
 -     if (in$(val, seen)) {
 -       continue;
 -     }
 -     seen.push(val);
 -     results$.push(x);
 -   }
 -   return results$;
 - });
 - fold = foldl = curry$(function(f, memo, xs){
 -   var i$, len$, x;
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     memo = f(memo, x);
 -   }
 -   return memo;
 - });
 - fold1 = foldl1 = curry$(function(f, xs){
 -   return fold(f, xs[0], xs.slice(1));
 - });
 - foldr = curry$(function(f, memo, xs){
 -   var i$, x;
 -   for (i$ = xs.length - 1; i$ >= 0; --i$) {
 -     x = xs[i$];
 -     memo = f(x, memo);
 -   }
 -   return memo;
 - });
 - foldr1 = curry$(function(f, xs){
 -   return foldr(f, xs[xs.length - 1], xs.slice(0, -1));
 - });
 - unfoldr = curry$(function(f, b){
 -   var result, x, that;
 -   result = [];
 -   x = b;
 -   while ((that = f(x)) != null) {
 -     result.push(that[0]);
 -     x = that[1];
 -   }
 -   return result;
 - });
 - concat = function(xss){
 -   return [].concat.apply([], xss);
 - };
 - concatMap = curry$(function(f, xs){
 -   var x;
 -   return [].concat.apply([], (function(){
 -     var i$, ref$, len$, results$ = [];
 -     for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) {
 -       x = ref$[i$];
 -       results$.push(f(x));
 -     }
 -     return results$;
 -   }()));
 - });
 - flatten = function(xs){
 -   var x;
 -   return [].concat.apply([], (function(){
 -     var i$, ref$, len$, results$ = [];
 -     for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) {
 -       x = ref$[i$];
 -       if (toString$.call(x).slice(8, -1) === 'Array') {
 -         results$.push(flatten(x));
 -       } else {
 -         results$.push(x);
 -       }
 -     }
 -     return results$;
 -   }()));
 - };
 - difference = function(xs){
 -   var yss, res$, i$, to$, results, len$, x, j$, len1$, ys;
 -   res$ = [];
 -   for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) {
 -     res$.push(arguments[i$]);
 -   }
 -   yss = res$;
 -   results = [];
 -   outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     for (j$ = 0, len1$ = yss.length; j$ < len1$; ++j$) {
 -       ys = yss[j$];
 -       if (in$(x, ys)) {
 -         continue outer;
 -       }
 -     }
 -     results.push(x);
 -   }
 -   return results;
 - };
 - intersection = function(xs){
 -   var yss, res$, i$, to$, results, len$, x, j$, len1$, ys;
 -   res$ = [];
 -   for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) {
 -     res$.push(arguments[i$]);
 -   }
 -   yss = res$;
 -   results = [];
 -   outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     for (j$ = 0, len1$ = yss.length; j$ < len1$; ++j$) {
 -       ys = yss[j$];
 -       if (!in$(x, ys)) {
 -         continue outer;
 -       }
 -     }
 -     results.push(x);
 -   }
 -   return results;
 - };
 - union = function(){
 -   var xss, res$, i$, to$, results, len$, xs, j$, len1$, x;
 -   res$ = [];
 -   for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
 -     res$.push(arguments[i$]);
 -   }
 -   xss = res$;
 -   results = [];
 -   for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {
 -     xs = xss[i$];
 -     for (j$ = 0, len1$ = xs.length; j$ < len1$; ++j$) {
 -       x = xs[j$];
 -       if (!in$(x, results)) {
 -         results.push(x);
 -       }
 -     }
 -   }
 -   return results;
 - };
 - countBy = curry$(function(f, xs){
 -   var results, i$, len$, x, key;
 -   results = {};
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     key = f(x);
 -     if (key in results) {
 -       results[key] += 1;
 -     } else {
 -       results[key] = 1;
 -     }
 -   }
 -   return results;
 - });
 - groupBy = curry$(function(f, xs){
 -   var results, i$, len$, x, key;
 -   results = {};
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     key = f(x);
 -     if (key in results) {
 -       results[key].push(x);
 -     } else {
 -       results[key] = [x];
 -     }
 -   }
 -   return results;
 - });
 - andList = function(xs){
 -   var i$, len$, x;
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     if (!x) {
 -       return false;
 -     }
 -   }
 -   return true;
 - };
 - orList = function(xs){
 -   var i$, len$, x;
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     if (x) {
 -       return true;
 -     }
 -   }
 -   return false;
 - };
 - any = curry$(function(f, xs){
 -   var i$, len$, x;
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     if (f(x)) {
 -       return true;
 -     }
 -   }
 -   return false;
 - });
 - all = curry$(function(f, xs){
 -   var i$, len$, x;
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     if (!f(x)) {
 -       return false;
 -     }
 -   }
 -   return true;
 - });
 - sort = function(xs){
 -   return xs.concat().sort(function(x, y){
 -     if (x > y) {
 -       return 1;
 -     } else if (x < y) {
 -       return -1;
 -     } else {
 -       return 0;
 -     }
 -   });
 - };
 - sortWith = curry$(function(f, xs){
 -   return xs.concat().sort(f);
 - });
 - sortBy = curry$(function(f, xs){
 -   return xs.concat().sort(function(x, y){
 -     if (f(x) > f(y)) {
 -       return 1;
 -     } else if (f(x) < f(y)) {
 -       return -1;
 -     } else {
 -       return 0;
 -     }
 -   });
 - });
 - sum = function(xs){
 -   var result, i$, len$, x;
 -   result = 0;
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     result += x;
 -   }
 -   return result;
 - };
 - product = function(xs){
 -   var result, i$, len$, x;
 -   result = 1;
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     result *= x;
 -   }
 -   return result;
 - };
 - mean = average = function(xs){
 -   var sum, i$, len$, x;
 -   sum = 0;
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     x = xs[i$];
 -     sum += x;
 -   }
 -   return sum / xs.length;
 - };
 - maximum = function(xs){
 -   var max, i$, ref$, len$, x;
 -   max = xs[0];
 -   for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {
 -     x = ref$[i$];
 -     if (x > max) {
 -       max = x;
 -     }
 -   }
 -   return max;
 - };
 - minimum = function(xs){
 -   var min, i$, ref$, len$, x;
 -   min = xs[0];
 -   for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {
 -     x = ref$[i$];
 -     if (x < min) {
 -       min = x;
 -     }
 -   }
 -   return min;
 - };
 - maximumBy = curry$(function(f, xs){
 -   var max, i$, ref$, len$, x;
 -   max = xs[0];
 -   for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {
 -     x = ref$[i$];
 -     if (f(x) > f(max)) {
 -       max = x;
 -     }
 -   }
 -   return max;
 - });
 - minimumBy = curry$(function(f, xs){
 -   var min, i$, ref$, len$, x;
 -   min = xs[0];
 -   for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {
 -     x = ref$[i$];
 -     if (f(x) < f(min)) {
 -       min = x;
 -     }
 -   }
 -   return min;
 - });
 - scan = scanl = curry$(function(f, memo, xs){
 -   var last, x;
 -   last = memo;
 -   return [memo].concat((function(){
 -     var i$, ref$, len$, results$ = [];
 -     for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) {
 -       x = ref$[i$];
 -       results$.push(last = f(last, x));
 -     }
 -     return results$;
 -   }()));
 - });
 - scan1 = scanl1 = curry$(function(f, xs){
 -   if (!xs.length) {
 -     return;
 -   }
 -   return scan(f, xs[0], xs.slice(1));
 - });
 - scanr = curry$(function(f, memo, xs){
 -   xs = xs.concat().reverse();
 -   return scan(f, memo, xs).reverse();
 - });
 - scanr1 = curry$(function(f, xs){
 -   if (!xs.length) {
 -     return;
 -   }
 -   xs = xs.concat().reverse();
 -   return scan(f, xs[0], xs.slice(1)).reverse();
 - });
 - slice = curry$(function(x, y, xs){
 -   return xs.slice(x, y);
 - });
 - take = curry$(function(n, xs){
 -   if (n <= 0) {
 -     return xs.slice(0, 0);
 -   } else {
 -     return xs.slice(0, n);
 -   }
 - });
 - drop = curry$(function(n, xs){
 -   if (n <= 0) {
 -     return xs;
 -   } else {
 -     return xs.slice(n);
 -   }
 - });
 - splitAt = curry$(function(n, xs){
 -   return [take(n, xs), drop(n, xs)];
 - });
 - takeWhile = curry$(function(p, xs){
 -   var len, i;
 -   len = xs.length;
 -   if (!len) {
 -     return xs;
 -   }
 -   i = 0;
 -   while (i < len && p(xs[i])) {
 -     i += 1;
 -   }
 -   return xs.slice(0, i);
 - });
 - dropWhile = curry$(function(p, xs){
 -   var len, i;
 -   len = xs.length;
 -   if (!len) {
 -     return xs;
 -   }
 -   i = 0;
 -   while (i < len && p(xs[i])) {
 -     i += 1;
 -   }
 -   return xs.slice(i);
 - });
 - span = curry$(function(p, xs){
 -   return [takeWhile(p, xs), dropWhile(p, xs)];
 - });
 - breakList = curry$(function(p, xs){
 -   return span(compose$(p, not$), xs);
 - });
 - zip = curry$(function(xs, ys){
 -   var result, len, i$, len$, i, x;
 -   result = [];
 -   len = ys.length;
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     i = i$;
 -     x = xs[i$];
 -     if (i === len) {
 -       break;
 -     }
 -     result.push([x, ys[i]]);
 -   }
 -   return result;
 - });
 - zipWith = curry$(function(f, xs, ys){
 -   var result, len, i$, len$, i, x;
 -   result = [];
 -   len = ys.length;
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     i = i$;
 -     x = xs[i$];
 -     if (i === len) {
 -       break;
 -     }
 -     result.push(f(x, ys[i]));
 -   }
 -   return result;
 - });
 - zipAll = function(){
 -   var xss, res$, i$, to$, minLength, len$, xs, ref$, i, lresult$, j$, results$ = [];
 -   res$ = [];
 -   for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
 -     res$.push(arguments[i$]);
 -   }
 -   xss = res$;
 -   minLength = undefined;
 -   for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {
 -     xs = xss[i$];
 -     minLength <= (ref$ = xs.length) || (minLength = ref$);
 -   }
 -   for (i$ = 0; i$ < minLength; ++i$) {
 -     i = i$;
 -     lresult$ = [];
 -     for (j$ = 0, len$ = xss.length; j$ < len$; ++j$) {
 -       xs = xss[j$];
 -       lresult$.push(xs[i]);
 -     }
 -     results$.push(lresult$);
 -   }
 -   return results$;
 - };
 - zipAllWith = function(f){
 -   var xss, res$, i$, to$, minLength, len$, xs, ref$, i, results$ = [];
 -   res$ = [];
 -   for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) {
 -     res$.push(arguments[i$]);
 -   }
 -   xss = res$;
 -   minLength = undefined;
 -   for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {
 -     xs = xss[i$];
 -     minLength <= (ref$ = xs.length) || (minLength = ref$);
 -   }
 -   for (i$ = 0; i$ < minLength; ++i$) {
 -     i = i$;
 -     results$.push(f.apply(null, (fn$())));
 -   }
 -   return results$;
 -   function fn$(){
 -     var i$, ref$, len$, results$ = [];
 -     for (i$ = 0, len$ = (ref$ = xss).length; i$ < len$; ++i$) {
 -       xs = ref$[i$];
 -       results$.push(xs[i]);
 -     }
 -     return results$;
 -   }
 - };
 - at = curry$(function(n, xs){
 -   if (n < 0) {
 -     return xs[xs.length + n];
 -   } else {
 -     return xs[n];
 -   }
 - });
 - elemIndex = curry$(function(el, xs){
 -   var i$, len$, i, x;
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     i = i$;
 -     x = xs[i$];
 -     if (x === el) {
 -       return i;
 -     }
 -   }
 - });
 - elemIndices = curry$(function(el, xs){
 -   var i$, len$, i, x, results$ = [];
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     i = i$;
 -     x = xs[i$];
 -     if (x === el) {
 -       results$.push(i);
 -     }
 -   }
 -   return results$;
 - });
 - findIndex = curry$(function(f, xs){
 -   var i$, len$, i, x;
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     i = i$;
 -     x = xs[i$];
 -     if (f(x)) {
 -       return i;
 -     }
 -   }
 - });
 - findIndices = curry$(function(f, xs){
 -   var i$, len$, i, x, results$ = [];
 -   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 -     i = i$;
 -     x = xs[i$];
 -     if (f(x)) {
 -       results$.push(i);
 -     }
 -   }
 -   return results$;
 - });
 - module.exports = {
 -   each: each,
 -   map: map,
 -   filter: filter,
 -   compact: compact,
 -   reject: reject,
 -   remove: remove,
 -   partition: partition,
 -   find: find,
 -   head: head,
 -   first: first,
 -   tail: tail,
 -   last: last,
 -   initial: initial,
 -   empty: empty,
 -   reverse: reverse,
 -   difference: difference,
 -   intersection: intersection,
 -   union: union,
 -   countBy: countBy,
 -   groupBy: groupBy,
 -   fold: fold,
 -   fold1: fold1,
 -   foldl: foldl,
 -   foldl1: foldl1,
 -   foldr: foldr,
 -   foldr1: foldr1,
 -   unfoldr: unfoldr,
 -   andList: andList,
 -   orList: orList,
 -   any: any,
 -   all: all,
 -   unique: unique,
 -   uniqueBy: uniqueBy,
 -   sort: sort,
 -   sortWith: sortWith,
 -   sortBy: sortBy,
 -   sum: sum,
 -   product: product,
 -   mean: mean,
 -   average: average,
 -   concat: concat,
 -   concatMap: concatMap,
 -   flatten: flatten,
 -   maximum: maximum,
 -   minimum: minimum,
 -   maximumBy: maximumBy,
 -   minimumBy: minimumBy,
 -   scan: scan,
 -   scan1: scan1,
 -   scanl: scanl,
 -   scanl1: scanl1,
 -   scanr: scanr,
 -   scanr1: scanr1,
 -   slice: slice,
 -   take: take,
 -   drop: drop,
 -   splitAt: splitAt,
 -   takeWhile: takeWhile,
 -   dropWhile: dropWhile,
 -   span: span,
 -   breakList: breakList,
 -   zip: zip,
 -   zipWith: zipWith,
 -   zipAll: zipAll,
 -   zipAllWith: zipAllWith,
 -   at: at,
 -   elemIndex: elemIndex,
 -   elemIndices: elemIndices,
 -   findIndex: findIndex,
 -   findIndices: findIndices
 - };
 - function curry$(f, bound){
 -   var context,
 -   _curry = function(args) {
 -     return f.length > 1 ? function(){
 -       var params = args ? args.concat() : [];
 -       context = bound ? context || this : this;
 -       return params.push.apply(params, arguments) <
 -           f.length && arguments.length ?
 -         _curry.call(context, params) : f.apply(context, params);
 -     } : f;
 -   };
 -   return _curry();
 - }
 - function in$(x, xs){
 -   var i = -1, l = xs.length >>> 0;
 -   while (++i < l) if (x === xs[i]) return true;
 -   return false;
 - }
 - function compose$() {
 -   var functions = arguments;
 -   return function() {
 -     var i, result;
 -     result = functions[0].apply(this, arguments);
 -     for (i = 1; i < functions.length; ++i) {
 -       result = functions[i](result);
 -     }
 -     return result;
 -   };
 - }
 - function not$(x){ return !x; }
 
 
  |