// Array2D.js 0.0.5 // Copyright (c) 2014 Matthew Trost // Array2D.js may be freely distributed under the MIT license. (function(){function r(r){return"[object Array]"===Object.prototype.toString.call(r)}function n(r){return null===r}function t(r){return void 0===r}function e(r){return n(r)||t(r)}function u(r){return!e(r)}function o(r){return!t(r)}function a(r){for(var n=[],t=0,e=r.length;e>t;t++)n[t]=r[t];return n}function i(r,n,t,e,u,o,a,h,s,l,v){if(!f(h,n,t)&&(h[n]||(h[n]=[]),h[n][t]=!0,t>-1&&u>t&&n>-1&&o>n&&s(r,n,t,e))){v||(v=[],a.push(v)),v.push([n,t]);var c=n-1,g=n+1,d=t-1,p=t+1;c>-1&&o>c&&i(e[c][t],c,t,e,u,o,a,h,s,l,v),g>-1&&o>g&&i(e[g][t],g,t,e,u,o,a,h,s,l,v),d>-1&&u>d&&i(e[n][d],n,d,e,u,o,a,h,s,l,v),p>-1&&u>p&&i(e[n][p],n,p,e,u,o,a,h,s,l,v),l&&(c>-1&&o>c&&d>-1&&u>d&&i(e[c][d],c,d,e,u,o,a,h,s,l,v),c>-1&&o>c&&p>-1&&u>p&&i(e[c][p],c,p,e,u,o,a,h,s,l,v),g>-1&&o>g&&d>-1&&u>d&&i(e[g][d],g,d,e,u,o,a,h,s,l,v),g>-1&&o>g&&p>-1&&u>p&&i(e[g][p],g,p,e,u,o,a,h,s,l,v))}}function f(r,n,t){return r[n]&&r[n][t]===!0}var h=this,s=h.Array2D,l=function(){return this instanceof l?void 0:new l};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=l),exports.Array2D=l):h.Array2D=l,l.VERSION="0.0.5",l.noConflict=function(){return h.Array2D=s,this},l.AXES={X:1,Y:2},l.BEARINGS={NORTH:1,NORTHWEST:2,NORTHEAST:3,SOUTH:4,SOUTHWEST:5,SOUTHEAST:6,EAST:7,WEST:8},l.BOUNDARIES={UPPER:1,LOWER:2,LEFT:3,RIGHT:4},l.CORNERS={TOP_LEFT:1,TOP_RIGHT:2,BOTTOM_LEFT:3,BOTTOM_RIGHT:4},l.CROOKS={UPPER_LEFT:1,UPPER_RIGHT:2,LOWER_LEFT:3,LOWER_RIGHT:4},l.DIRECTIONS={UP:1,DOWN:2,LEFT:3,RIGHT:4},l.EDGES={TOP:1,BOTTOM:2,LEFT:3,RIGHT:4},l.QUADRANTS={I:1,II:2,III:3,IV:4},l.get=function(n,t,e){return r(n[t])?n[t][e]:void 0},l.set=function(n,t,e,u){var o=l.clone(n);return r(o[t])||(o[t]=[]),o[t][e]=u,o},l.width=function(r){return l.widest(r).length},l.height=function(r){return l.tallest(r).length},l.dimensions=function(r){for(var n=0,t=0,e=0,u=r.length;u>e;e++){var o=r[e].length;o>0&&(n=e+1),o>t&&(t=o)}return[t,n]},l.area=function(r){var n=l.width(r),t=l.height(r);return n*t},l.cells=function(r){for(var n=0,t=0,e=r.length;e>t;t++)for(var u=r[t],a=0,i=u.length;i>a;a++){var f=u[a];o(f)&&n++}return n},l.crop=function(r,n,t,e,u){for(var o=[],a=l.width(r),i=l.height(r),f=0;u>f;f++){var h=n+f;if(i>h&&h>=0){o.push([]);for(var s=0;e>s;s++){var v=t+s;if(a>v&&v>=0){var c=o[o.length-1],g=r[h][v];c.push(g)}}}}return o},l.harvest=function(r,n,t,e,u){for(var o=[],a=l.width(r),i=l.height(r),f=0;u>f;f++){o[f]=[];for(var h=0;e>h;h++){var s=n+f,v=t+h;if(s>=i||0>s)o[f][h]=null;else if(v>=a||0>v)o[f][h]=null;else{var c=r[s][v];o[f][h]=c}}}return o},l.rotate=function(r,n){if(n===l.DIRECTIONS.LEFT)return l.lrotate(r);if(n===l.DIRECTIONS.RIGHT)return l.rrotate(r);throw"Array2D.js: Invalid direction provided for `rotate`"},l.lrotate=function(r){var n=l.transpose(r);return l.vflip(n)},l.rrotate=function(r){var n=l.transpose(r);return l.hflip(n)},l.flip=function(r,n){if(n===l.AXES.X)return l.vflip(r);if(n===l.AXES.Y)return l.hflip(r);throw"Array2D.js: Invalid axis provided for `flip`"},l.vflip=function(r){for(var n=[],t=0,e=r.length;e>t;t++){var u=t-e+1;n[t]=r[Math.abs(u)]}return n},l.hflip=function(r){for(var n=[],t=0,e=r.length;e>t;t++){n[t]=[];for(var u=r[t],o=0,a=u.length;a>o;o++){var i=o-a+1;n[t][o]=r[t][Math.abs(i)]}}return n},l.pan=function(r,n,t){switch(n){case l.DIRECTIONS.LEFT:return l.lpan(r,t);case l.DIRECTIONS.RIGHT:return l.rpan(r,t);case l.DIRECTIONS.UP:return l.upan(r,t);case l.DIRECTIONS.DOWN:return l.dpan(r,t);default:throw"Array2D.js: Invalid direction provided for `pan`"}},l.upan=function(r,n){var t=l.clone(r);for(n||(n=1);n>0;){var e=t.pop();t.unshift(e),n--}return t},l.lpan=function(r,n){var t=l.transpose(r),e=l.upan(t,n);return l.transpose(e)},l.dpan=function(r,n){var t=l.clone(r);for(n||(n=1);n>0;){var e=t.shift();t.push(e),n--}return t},l.rpan=function(r,n){var t=l.transpose(r),e=l.dpan(t,n);return l.transpose(e)},l.slide=function(r,n,t){switch(n){case l.DIRECTIONS.LEFT:return l.lslide(r,t);case l.DIRECTIONS.RIGHT:return l.rslide(r,t);case l.DIRECTIONS.UP:return l.uslide(r,t);case l.DIRECTIONS.DOWN:return l.dslide(r,t);default:throw"Array2D.js: Invalid direction provided for `slide`"}},l.rslide=function(r,n){return l.lpan(r,n)},l.lslide=function(r,n){return l.rpan(r,n)},l.dslide=function(r,n){return l.upan(r,n)},l.uslide=function(r,n){return l.dpan(r,n)},l.transpose=function(r){for(var n=[],t=0,e=r.length;e>t;t++)for(var u=r[t],o=0,a=u.length;a>o;o++)n[o]||(n[o]=[]),n[o][t]=u[o];return n},l.antitranspose=function(r){var n=l.rrotate(r);return l.vflip(n)},l.fill=function(r,n){for(var t=[],e=0,u=r.length;u>e;e++){var o=r[e];t[e]=[];for(var a=0,i=o.length;i>a;a++)t[e][a]=n}return t},l.fillArea=function(r,n,t,e,u,o){var a=l.build(e,u,o);return l.paste(r,a,n,t)},l.pad=function(r,n,t,e){switch(n){case l.EDGES.TOP:return l.upad(r,t,e);case l.EDGES.BOTTOM:return l.dpad(r,t,e);case l.EDGES.LEFT:return l.lpad(r,t,e);case l.EDGES.RIGHT:return l.rpad(r,t,e);default:throw"Array2D.js: Invalid side provided for `pad`"}},l.upad=function(r,n,e){for(var u=[],o=l.dimensions(r),a=o[0],i=o[1],f=-n;i>f;f++){var h=f+n;u[h]=[];for(var s=0;a>s;s++)u[h][s]=f>-1?r[f][s]:t(e)?null:e}return u},l.dpad=function(r,n,e){for(var u=[],o=l.dimensions(r),a=o[0],i=o[1],f=0;i+n>f;f++){u[f]=[];for(var h=0;a>h;h++)u[f][h]=i>f?r[f][h]:t(e)?null:e}return u},l.lpad=function(r,n,e){for(var u=[],o=l.dimensions(r),a=o[0],i=o[1],f=0;i>f;f++){u[f]=[];for(var h=-n;a>h;h++){var s=h+n;u[f][s]=h>-1?r[f][h]:t(e)?null:e}}return u},l.rpad=function(r,n,e){for(var u=[],o=l.dimensions(r),a=o[0],i=o[1],f=0;i>f;f++){u[f]=[];for(var h=0;a+n>h;h++)u[f][h]=a>h?r[f][h]:t(e)?null:e}return u},l.trim=function(r,n,t){switch(n){case l.EDGES.TOP:return l.utrim(r,t);case l.EDGES.BOTTOM:return l.dtrim(r,t);case l.EDGES.LEFT:return l.ltrim(r,t);case l.EDGES.RIGHT:return l.rtrim(r,t);default:throw"Array2D.js: Invalid edge provided for `trim`"}},l.utrim=function(r,n){var t=[];n||(n=1);for(var e=n,u=r.length;u>e;e++)t[e-n]=a(r[e]);return t},l.dtrim=function(r,n){var t=[];n||(n=1);for(var e=0,u=r.length-n;u>e;e++)t[e]=a(r[e]);return t},l.ltrim=function(r,n){var t=[];n||(n=1);for(var e=0,u=r.length;u>e;e++){t[e]=[];for(var o=r[e],a=n,i=o.length;i>a;a++)t[e][a-n]=o[a]}return t},l.rtrim=function(r,n){var t=[];n||(n=1);for(var e=0,u=r.length;u>e;e++){t[e]=[];for(var o=r[e],a=0,i=o.length-n;i>a;a++)t[e][a]=o[a]}return t},l.stitch=function(r,n,t){switch(t){case l.EDGES.TOP:return l.ustitch(r,n);case l.EDGES.BOTTOM:return l.dstitch(r,n);case l.EDGES.LEFT:return l.lstitch(r,n);case l.EDGES.RIGHT:return l.rstitch(r,n);default:throw"Array2D.js: Invalid edge provided for `stitch`"}},l.ustitch=function(r,n){var t=l.dimensions(n)[1];return l.glue(r,n,-t,0)},l.dstitch=function(r,n){var t=l.dimensions(r)[1];return l.glue(r,n,t,0)},l.lstitch=function(r,n){var t=l.dimensions(n)[0];return l.glue(r,n,0,-t)},l.rstitch=function(r,n){var t=l.dimensions(r)[0];return l.glue(r,n,0,t)},l.paste=function(n,e,u,o){for(var a=[],i=0,f=n.length;f>i;i++){a[i]=[];for(var h=n[i].length,s=i-u,l=0;h>l;l++){var v=l-o;a[i][l]=r(e[s])&&!t(e[s][v])&&i>=u&&l>=o&&f>s&&h>v?e[s][v]:n[i][l]}}return a},l.glue=function(r,n,t,e){var u=l.dimensions(r),o=l.dimensions(n),a=u[0]>o[0]?u[0]:o[0],i=u[1]>o[1]?u[1]:o[1],f=Math.abs(e)+a,h=Math.abs(t)+i,s=l.build(f,h),v=0>t?-t:0,c=0>e?-e:0,g=l.paste(s,r,v,c),d=t>0?t:0,p=e>0?e:0,E=l.paste(g,n,d,p);return E},l.shuffle=function(r){for(var n=[],t=0,e=r.length;e>t;t++)n.push(r[t].length);for(var u=l.flatten(r),t=u.length-1;t>0;t--){var o=Math.floor(Math.random()*(t+1)),a=u[t];u[t]=u[o],u[o]=a}for(var i=[],t=0,e=n.length;e>t;t++){for(var f=[],h=n[t];h--;)f.push(u.pop());i.push(f)}return i},l.tidy=function(r){for(var n=[],e=l.width(r),u=l.height(r),o=0,a=e;a>o;o++){n[o]=[];for(var i=0,f=u;f>i;i++){var h=l.get(r,o,i);n[o][i]=t(h)?null:h}}return n},l.clone=function(r){for(var n=[],t=0,e=r.length;e>t;t++){n[t]=[];for(var u=r[t],o=0,a=u.length;a>o;o++){var i=u[o];n[t][o]=i}}return n},l.build=function(r,n,e){var u=[];t(e)&&(e=null);for(var o=0,a=n;a>o;o++){u[o]=[];for(var i=0,f=r;f>i;i++)u[o][i]=e}return u},l.buildWith=function(r,n,t){for(var e=[],u=0,o=n;o>u;u++){e[u]=[];for(var a=0,i=r;i>a;a++)e[u][a]=t?t(u,a,e):null}return e},l.serialize=function(r){return JSON.stringify(r)},l.nullify=function(r){for(var n=[],t=0,e=r.length;e>t;t++){n[t]=[];for(var u=r[t],a=0,i=u.length;i>a;a++){var f=u[a];o(f)&&(n[t][a]=null)}}return n},l.integerize=function(r){for(var n=[],t=0,e=r.length;e>t;t++){n[t]=[];for(var u=r[t],o=0,a=u.length;a>o;o++){var i=u[o];n[t][o]=parseInt(i)}}return n},l.stringize=function(r){for(var n=[],t=0,e=r.length;e>t;t++){n[t]=[];for(var u=r[t],o=0,a=u.length;a>o;o++){var i=u[o];n[t][o]=String(i)}}return n},l.check=function(n){return r(n)&&r(n[0])?!0:!1},l.ragged=function(r){var n=l.widest(r),t=l.thinnest(r);return n.length!==t.length},l.rectangular=function(r){return!l.ragged(r)},l.empty=function(r){return r.length<1?!0:1===r.length&&r[0].length<1?!0:!1},l.blank=function(r){var n=!0,t=l.empty(r);if(t)return!0;for(var u=0,o=r.length;o>u;u++)for(var a=r[u],i=0,f=a.length;f>i;i++){var h=a[i];e(h)||(n=!1)}return n},l.singular=function(r){var n=l.width(r),t=l.height(r);return 1===n&&1===t},l.multitudinous=function(r){return!l.singular(r)},l.sparse=function(r){for(var n=!1,t=0,u=r.length;u>t;t++)for(var o=r[t],a=0,i=o.length;i>a;a++){var f=o[a];e(f)&&(n=!0)}return n},l.dense=function(r){return!l.sparse(r)},l.same=function(r,n){var t=l.width(r),e=l.height(r),u=l.width(n),o=l.height(n);if(t!==u)return!1;if(e!==o)return!1;for(var a=0;t>a;a++)for(var i=0;u>i;i++)if(r[a][i]!==n[a][i])return!1;return!0},l.different=function(r,n){return!l.same(r,n)},l.diff=function(n,t){for(var e=[],u=l.dimensions(n),o=l.dimensions(t),a=u[0]>o[0]?u[0]:o[0],i=u[1]>o[1]?o[1]:o[1],f=0;i>f;f++)for(var h=n[f],s=t[f],v=r(h),c=r(s),g=0;a>g;g++)if(v&&c){var d=h[g],p=s[g];d!==p&&e.push([f,g])}else e.push([f,g]);return e},l.contains=function(r,n){for(var t=!1,e=0,u=r.length;u>e;e++)for(var o=r[e],a=0,i=o.length;i>a;a++){var f=o[a];f===n&&(t=!0)}return t},l.includes=function(n,t){var e=l.dimensions(n),u=l.dimensions(t),o=e[0],a=e[1],i=u[0],f=u[1];if(1>i)return!1;if(1>f)return!1;if(i>o)return!1;if(f>a)return!1;for(var h=t[0][0],s=[],v=0;vd)return!1;for(var p=0;d>p;p++){for(var E=s[p][0],T=s[p][1],R=!0,v=0;vn;n++)for(var e=r[n],u=0,o=e.length;o>u;u++){var a=e[u],i=e[o-1-u];if(a!==i)return!1}return!0},l.vsymmetrical=function(r){var n=l.transpose(r);return l.hsymmetrical(n)},l.eachCell=function(r,n){for(var t=0,e=r.length;e>t;t++)for(var u=r[t],o=0,a=u.length;a>o;o++){var i=u[o];n(i,t,o,r)}},l.nthCell=function(r,n,t,e){for(var u=0,o=0,a=r.length;a>o;o++)for(var i=r[o],f=0,h=i.length;h>f;f++){var s=i[f],l=u>=t,v=(u-t)%n===0;l&&v&&e(s,o,f,r),u+=1}},l.eachRow=function(r,n){for(var t=0,e=r.length;e>t;t++){var u=r[t];n(a(u),t,r)}},l.eachColumn=function(r,n){for(var t=l.transpose(r),e=0,u=t.length;u>e;e++){var o=t[e];n(a(o),e,r)}},l.forArea=function(r,n,t,e,u,o){for(var a=l.crop(r,n,t,e,u),i=0,f=a.length;f>i;i++)for(var h=a[i],s=0,v=h.length;v>s;s++){var c=h[s];o(c,i,s,r)}},l.forRow=function(r,n,t){for(var e=l.row(r,n),u=0,o=e.length;o>u;u++)t(e[u],n,u,r)},l.forColumn=function(r,n,t){for(var e=l.column(r,n),u=0,o=e.length;o>u;u++)t(e[u],u,n,r)},l.flatten=function(r){for(var n=[],t=0,e=r.length;e>t;t++)for(var u=r[t],o=0,a=u.length;a>o;o++)n.push(u[o]);return n},l.squash=function(r){var n=l.transpose(r);return l.flatten(n)},l.map=function(r,n){for(var t=[],e=0,u=r.length;u>e;e++){t[e]=[];for(var o=r[e],a=0,i=o.length;i>a;a++){var f,h=o[a];f=n?n(h,e,a,r):h,t[e][a]=f}}return t},l.reduce=function(r,n){for(var t=[],e=0,u=r.length;u>e;e++)t[e]=n(r[e],e,r);return t},l.boildown=function(r,n){var t=l.transpose(r);return l.reduce(t,n)},l.row=function(r,n){return a(r[n])},l.column=function(r,n){var t=l.transpose(r);return l.row(t,n)},l.top=function(r){return a(r[0])},l.bottom=function(r){return a(r[r.length-1])},l.left=function(r){l.transpose(r);return l.top(r)},l.right=function(r){l.transpose(r);return l.bottom(r)},l.widest=function(r){for(var n=r[0],t=0,e=r.length;e>t;t++){var u=r[t];u.length>n.length&&(n=u)}return a(n)},l.thinnest=function(r){for(var n=r[0],t=0,e=r.length;e>t;t++){var u=r[t];u.lengthu;u++)e[u]=a(u===n?t:r[u]);return e},l.setColumn=function(r,n,t){for(var e=[],u=0,o=r.length;o>u;u++){var a=r[u];e[u]=[];for(var i=0,f=a.length;f>i;i++)e[u][i]=i===n?t[i]:a[i]}return e},l.fillRow=function(r,n,t){for(var e=[],u=0,o=r.length;o>u;u++){var a=r[u];e[u]=[];for(var i=0,f=a.length;f>i;i++)e[u][i]=u===n?t:a[i]}return e},l.fillColumn=function(r,n,t){for(var e=[],u=0,o=r.length;o>u;u++){var a=r[u];e[u]=[];for(var i=0,f=a.length;f>i;i++)e[u][i]=i===n?t:a[i]}return e},l.spliceRow=function(r,n,t){for(var e=[],u=0,o=r.length;o>u;u++)u===n&&e.push(t),e.push(r[u]);return e},l.spliceColumn=function(r,n,t){for(var e=[],u=0,o=r.length;o>u;u++){var a=r[u];e[u]=[];for(var i=0,f=a.length;f>i;i++)i===n&&e[u].push(t[i]),e[u].push(a[i])}return e},l.deleteRow=function(r,n){for(var t=[],e=0,u=r.length;u>e;e++)e!==n&&t.push(r[e]);return t},l.deleteColumn=function(r,n){for(var t=[],e=0,u=r.length;u>e;e++){var o=r[e];t[e]=[];for(var a=0,i=o.length;i>a;a++)a!==n&&t[e].push(o[a])}return t},l.exists=function(r,n,e){return!t(l.get(r,n,e))},l.occupied=function(r,n,t){return u(l.get(r,n,t))},l.inBounds=function(n,t,e){return 0>t||0>e?!1:r(n[t])?e>n[t].length-1?!1:!0:!1},l.copy=function(r,n,t,e,u){var o=l.get(r,n,t);return l.set(r,e,u,o)},l.move=function(r,n,t,e,u){var o=l.get(r,n,t),a=l.set(r,e,u,o);return l.set(a,n,t,null)},l.swap=function(r,n,t,e,u){var o=l.get(r,n,t),a=l.get(r,e,u),i=l.set(r,e,u,o);return l.set(i,n,t,a)},l.edge=function(r,n,t){if(0===n)return!0;if(0===t)return!0;var e=l.width(r),u=l.height(r);return n===u-1?!0:t===e-1?!0:!1},l.edges=function(r,n,t){var e=[];0===n&&e.push(l.EDGES.TOP),0===t&&e.push(l.EDGES.LEFT);var u=l.width(r),o=l.height(r);return n===o-1&&e.push(l.EDGES.BOTTOM),t===u-1&&e.push(l.EDGES.RIGHT),e},l.corner=function(r,n,t){if(0===n&&0===t)return!0;var e=l.width(r),u=l.height(r);return 0===n&&t===e-1?!0:n===u-1&&t===e-1?!0:n===u-1&&0===t?!0:!1},l.corners=function(r,n,t){var e=[];0===n&&0===t&&e.push(l.CORNERS.TOP_LEFT);var u=l.width(r),o=l.height(r);return 0===n&&t===u-1&&e.push(l.CORNERS.TOP_RIGHT),n===o-1&&t===u-1&&e.push(l.CORNERS.BOTTOM_RIGHT),n===o-1&&0===t&&e.push(l.CORNERS.BOTTOM_LEFT),e},l.boundary=function(r,n,t){if(0===n)return!0;if(0===t)return!0;var e=l.row(r,n),u=e.length-1;if(t===u)return!0;var o=l.column(r,t),a=o.length-1;return n===a?!0:!1},l.boundaries=function(r,n,t){var e=[];0===n&&e.push(l.BOUNDARIES.UPPER),0===t&&e.push(l.BOUNDARIES.LEFT);var u=l.row(r,n),o=u.length-1;t===o&&e.push(l.BOUNDARIES.RIGHT);var a=l.column(r,t),i=a.length-1;return n===i&&e.push(l.BOUNDARIES.LOWER),e},l.crook=function(r,n,t){if(0===n&&0===t)return!0;var e=l.row(r,n),u=e.length-1,o=l.column(r,t),a=o.length-1;return 0===n&&t===a?!0:n===u&&0===t?!0:n===u&&t===a?!0:!1},l.crooks=function(r,n,t){var e=[],u=l.row(r,n),o=u.length-1,a=l.column(r,t),i=a.length-1;return 0===n&&0===t&&e.push(l.CROOKS.UPPER_LEFT),0===n&&t===i&&e.push(l.CROOKS.LOWER_LEFt),n===o&&0===t&&e.push(l.CROOKS.UPPER_RIGHT),n===o&&t===i&&e.push(l.CROOKS.LOWER_RIGHT),e},l.center=function(r,n,t){var e=l.width(r),u=l.height(r);return e%2===0?!1:u%2===0?!1:Math.floor(u/2)!==n?!1:Math.floor(e/2)!==t?!1:!0},l.interior=function(r,n,t){if(0===n)return!1;if(0===t)return!1;var e=l.width(r),u=l.height(r);return 3>e?!1:3>u?!1:n>=u-1?!1:t>=e-1?!1:!0},l.quadrants=function(r,n,t){var e=[],u=l.width(r),o=l.height(r),a=Math.floor(u/2),i=Math.floor(o/2);return i>=n&&t>a&&e.push(l.QUADRANTS.I),i>=n&&a>=t&&e.push(l.QUADRANTS.II),n>i&&a>=t&&e.push(l.QUADRANTS.III),n>i&&t>a&&e.push(l.QUADRANTS.IV),e},l.orthogonals=function(r,n,t){var e=[];return e[0]=l.get(r,n-1,t),e[1]=l.get(r,n,t-1),e[2]=l.get(r,n,t+1),e[3]=l.get(r,n+1,t),e},l.diagonals=function(r,n,t){var e=[];return e[0]=l.get(r,n-1,t-1),e[1]=l.get(r,n-1,t+1),e[2]=l.get(r,n+1,t-1),e[3]=l.get(r,n+1,t+1),e},l.neighbors=function(r,n,t){var e=l.orthogonals(r,n,t),u=l.diagonals(r,n,t),o=[];return o[0]=u[0],o[1]=e[0],o[2]=u[1],o[3]=e[1],o[4]=e[2],o[5]=u[2],o[6]=e[3],o[7]=u[3],o},l.neighborhood=function(r,n,t){var e=l.get(r,n,t),u=l.neighbors(r,n,t);return[[u[0],u[1],u[2]],[u[3],e,u[4]],[u[5],u[6],u[7]]]},l.euclidean=function(r,n,t,e,u){return Math.sqrt(Math.pow(e-n,2)+Math.pow(u-t,2))},l.chebyshev=function(r,n,t,e,u){var o=Math.abs(e-n),a=Math.abs(u-t);return o>a?o:a},l.manhattan=function(r,n,t,e,u){return Math.abs(e-n)+Math.abs(u-t)},l.find=function(r,n){for(var t=[],e=0,u=r.length;u>e;e++)for(var o=r[e],a=0,i=o.length;i>a;a++){var f=o[a];n(f,e,a,r)&&t.push([e,a])}return t},l.contiguous=function(r,n,t){for(var e=[],u=[],o=l.dimensions(r),a=o[0],f=o[1],h=0;f>h;h++)for(var s=0;a>s;s++)i(r[h][s],h,s,r,a,f,e,u,n,t);return e},l.touching=function(r,n){return l.contiguous(r,n,!0)},l.surrounds=function(r,n,t,e){var u=[],o=l.dimensions(r),a=o[0],i=o[1],f=a-1,h=i-1;return(n>0&&t>0||e)&&u.push([n-1,t-1]),(n>0||e)&&u.push([n-1,t]),(n>0&&f>t||e)&&u.push([n-1,t+1]),(t>0||e)&&u.push([n,t-1]),(f>t||e)&&u.push([n,t+1]),(h>n&&t>0||e)&&u.push([n+1,t-1]),(h>n||e)&&u.push([n+1,t]),(h>n&&f>t||e)&&u.push([n+1,t+1]),u},l.fromArray=function(r,n,t){for(var e=[],u=0;n>u;u++){e[u]=[];for(var o=0;t>o;o++)e[u][o]=r[u*t+o]}return e},l.fromCanvas=function(r){for(var n=r.getContext("2d"),t=n.getImageData(0,0,r.width,r.width),e=t.width,u=t.height,o=t.data,a=[],i=0,f=o.length;f>i;i+=4){var h=o[i],s=o[i+1],v=o[i+2],c=o[i+3],g=[h,s,v,c];a.push(g)}return l.fromArray(a,u,e)},l.toCanvas=function(r,n,t){for(var e,u=n.getContext("2d"),o=n.width,a=n.height,i=u.createImageData(o,a),f=i.data,h=0,s=r.length;s>h;h++)for(var l=r[h],v=0,c=l.length;c>v;v++){var g=l[v];e=t?t(g,h,v,r):g;var d=4*(h*o+v);f[d+0]=e[0],f[d+1]=e[1],f[d+2]=e[2],f[d+3]=e[3]}u.putImageData(i,0,0)}}).call(this);