var Shape=function(e,t,n){var r={constAreaWidth:10,constAreaHeight:17},i=0,s=0,o=[new Array(3),new Array(3),new Array(3)],u=function(){n=n||{},r.constAreaWidth=n.constAreaWidth||r.constAreaWidth,r.constAreaHeight=n.constAreaHeight||r.constAreaHeight,o=a(o),f(e),l(t)},a=function(e){for(var t=0;t<3;t++)for(var n=0;n<3;n++)e[t][n]=null;return e},f=function(e){i+=e},l=function(e){s+=e},c=function(){return i},h=function(){return s},p=function(e,t,n){o[n][t]=e},d=function(e,t){o[t][e]=null},v=function(){var e=[new Array(3),new Array(3),new Array(3)];e=a(e);for(var t=0;t<3;t++)for(var n=0;n<3;n++)e[t][n]=o[t][n];o[0][0]=e[2][0],o[0][1]=e[1][0],o[0][2]=e[0][0],o[1][0]=e[2][1],o[1][1]=e[1][1],o[1][2]=e[0][1],o[2][0]=e[2][2],o[2][1]=e[1][2],o[2][2]=e[0][2]},m=function(){var e=[new Array(3),new Array(3),new Array(3)];e=a(e);for(var t=0;t<3;t++)for(var n=0;n<3;n++)e[t][n]=o[t][n];o[0][0]=e[0][2],o[0][1]=e[1][2],o[0][2]=e[2][2],o[1][0]=e[0][1],o[1][1]=e[1][1],o[1][2]=e[2][1],o[2][0]=e[0][0],o[2][1]=e[1][0],o[2][2]=e[2][0]},g=function(e){var t=[new Array(3),new Array(3),new Array(3)];t=a(t);for(var n=0;n<3;n++)for(var r=0;r<3;r++)if(o[n][r]!==null){if(e[r][n]!==null)return t=null,t;t[r][n]=o[n][r]}else t[r][n]=e[r][n];return t},y=function(e){var t=!1;for(var n=0;n<3;n++)for(var r=0;r<3;r++)e.isRectangle(c()+r,h()+n)&&(t=!0),o[n][r]!==null&&e.addRectangle(o[n][r],h()+n,c()+r);return t},b=function(e){if(e!==null)for(var t=0;t<3;t++)for(var n=0;n<3;n++)if(o[t][n]===e)return!0;return!1},w=function(e,t){for(var n=0;n<3;n++)for(var i=0;i<3;i++)if(o[n][i]!==null&&(c()+i+e<0||h()+n+t<0||c()+i+e>=r.constAreaWidth||h()+n+t>=r.constAreaHeight))return!1;return!0},E=function(e){for(var t=0;t<3;t++)for(var n=0;n<3;n++)o[t][n]!==null&&o[t][n].setColor(e)},S=function(e){for(var t=0;t<3;t++)for(var n=0;n<3;n++)o[t][n]!==null&&o[t][n].setColor(Math.floor(Math.random()*e+1))};return u(),{matrix:function(){return o},setX:f,setY:l,getX:c,getY:h,add:p,remove:d,rotateRight:v,rotateLeft:m,addMatrix:g,addToArea:y,isInShape:b,isInArea:w,setColor:E,setRandomColor:S}};