src/assets/js/games/blockrain/blockrain.jquery.min.js

Summary

Maintainability
A
0 mins
Test Coverage
!function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(c){var n,i=0,r=Array.prototype.slice;c.cleanData=(n=c.cleanData,function(t){var e,i,o;for(o=0;null!=(i=t[o]);o++)try{(e=c._data(i,"events"))&&e.remove&&c(i).triggerHandler("remove")}catch(t){}n(t)}),c.widget=function(t,i,e){var o,n,s,a,r={},h=t.split(".")[0];return t=t.split(".")[1],o=h+"-"+t,e||(e=i,i=c.Widget),c.expr[":"][o.toLowerCase()]=function(t){return!!c.data(t,o)},c[h]=c[h]||{},n=c[h][t],s=c[h][t]=function(t,e){return this._createWidget?void(arguments.length&&this._createWidget(t,e)):new s(t,e)},c.extend(s,n,{version:e.version,_proto:c.extend({},e),_childConstructors:[]}),(a=new i).options=c.widget.extend({},a.options),c.each(e,function(e,o){return c.isFunction(o)?void(r[e]=(n=function(){return i.prototype[e].apply(this,arguments)},s=function(t){return i.prototype[e].apply(this,t)},function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=s,t=o.apply(this,arguments),this._super=e,this._superApply=i,t})):void(r[e]=o);var n,s}),s.prototype=c.widget.extend(a,{widgetEventPrefix:n&&a.widgetEventPrefix||t},r,{constructor:s,namespace:h,widgetName:t,widgetFullName:o}),n?(c.each(n._childConstructors,function(t,e){var i=e.prototype;c.widget(i.namespace+"."+i.widgetName,s,e._proto)}),delete n._childConstructors):i._childConstructors.push(s),c.widget.bridge(t,s),s},c.widget.extend=function(t){for(var e,i,o=r.call(arguments,1),n=0,s=o.length;n<s;n++)for(e in o[n])i=o[n][e],o[n].hasOwnProperty(e)&&void 0!==i&&(t[e]=c.isPlainObject(i)?c.isPlainObject(t[e])?c.widget.extend({},t[e],i):c.widget.extend({},i):i);return t},c.widget.bridge=function(s,e){var a=e.prototype.widgetFullName||s;c.fn[s]=function(i){var t="string"==typeof i,o=r.call(arguments,1),n=this;return i=!t&&o.length?c.widget.extend.apply(null,[i].concat(o)):i,t?this.each(function(){var t,e=c.data(this,a);return"instance"===i?(n=e,!1):e?c.isFunction(e[i])&&"_"!==i.charAt(0)?(t=e[i].apply(e,o))!==e&&void 0!==t?(n=t&&t.jquery?n.pushStack(t.get()):t,!1):void 0:c.error("no such method '"+i+"' for "+s+" widget instance"):c.error("cannot call methods on "+s+" prior to initialization; attempted to call method '"+i+"'")}):this.each(function(){var t=c.data(this,a);t?(t.option(i||{}),t._init&&t._init()):c.data(this,a,new e(i,this))}),n}},c.Widget=function(){},c.Widget._childConstructors=[],c.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,e){e=c(e||this.defaultElement||this)[0],this.element=c(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=c(),this.hoverable=c(),this.focusable=c(),e!==this&&(c.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=c(e.style?e.ownerDocument:e.document||e),this.window=c(this.document[0].defaultView||this.document[0].parentWindow)),this.options=c.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:c.noop,_getCreateEventData:c.noop,_create:c.noop,_init:c.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(c.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:c.noop,widget:function(){return this.element},option:function(t,e){var i,o,n,s=t;if(0===arguments.length)return c.widget.extend({},this.options);if("string"==typeof t)if(s={},t=(i=t.split(".")).shift(),i.length){for(o=s[t]=c.widget.extend({},this.options[t]),n=0;i.length-1>n;n++)o[i[n]]=o[i[n]]||{},o=o[i[n]];if(t=i.pop(),1===arguments.length)return void 0===o[t]?null:o[t];o[t]=e}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];s[t]=e}return this._setOptions(s),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return this.options[t]=e,"disabled"===t&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!e),e&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(a,r,t){var h,l=this;"boolean"!=typeof a&&(t=r,r=a,a=!1),t?(r=h=c(r),this.bindings=this.bindings.add(r)):(t=r,r=this.element,h=this.widget()),c.each(t,function(t,e){function i(){return a||!0!==l.options.disabled&&!c(this).hasClass("ui-state-disabled")?("string"==typeof e?l[e]:e).apply(l,arguments):void 0}"string"!=typeof e&&(i.guid=e.guid=e.guid||i.guid||c.guid++);var o=t.match(/^([\w:-]*)\s*(.*)$/),n=o[1]+l.eventNamespace,s=o[2];s?h.delegate(s,n,i):r.bind(n,i)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(e).undelegate(e),this.bindings=c(this.bindings.not(t).get()),this.focusable=c(this.focusable.not(t).get()),this.hoverable=c(this.hoverable.not(t).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return("string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){c(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){c(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){c(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){c(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,e,i){var o,n,s=this.options[t];if(i=i||{},(e=c.Event(e)).type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),e.target=this.element[0],n=e.originalEvent)for(o in n)o in e||(e[o]=n[o]);return this.element.trigger(e,i),!(c.isFunction(s)&&!1===s.apply(this.element[0],[e].concat(i))||e.isDefaultPrevented())}},c.each({show:"fadeIn",hide:"fadeOut"},function(s,a){c.Widget.prototype["_"+s]=function(e,t,i){"string"==typeof t&&(t={effect:t});var o,n=t?!0===t||"number"==typeof t?a:t.effect||a:s;"number"==typeof(t=t||{})&&(t={duration:t}),o=!c.isEmptyObject(t),t.complete=i,t.delay&&e.delay(t.delay),o&&c.effects&&c.effects.effect[n]?e[s](t):n!==s&&e[n]?e[n](t.duration,t.easing,i):e.queue(function(t){c(this)[s](),i&&i.call(e[0]),t()})}}),c.widget}),function(l){"use strict";l.widget("aerolab.blockrain",{options:{autoplay:!1,autoplayRestart:!0,showFieldOnStart:!0,theme:null,blockWidth:10,autoBlockWidth:!1,autoBlockSize:24,difficulty:"normal",speed:20,asdwKeys:!0,playText:"Let's play some Tetris",playButtonText:"Play",gameOverText:"Game Over",restartButtonText:"Play Again",scoreText:"Score",onStart:function(){},onRestart:function(){},onGameOver:function(t){},onPlaced:function(){},onLine:function(t,e,i){}},start:function(){this._doStart(),this.options.onStart.call(this.element)},restart:function(){this._doStart(),this.options.onRestart.call(this.element)},gameover:function(){this.showGameOverMessage(),this._board.gameover=!0,this.options.onGameOver.call(this.element,this._filled.score)},_doStart:function(){this._filled.clearAll(),this._filled._resetScore(),this._board.cur=this._board.nextShape(),this._board.started=!0,this._board.gameover=!1,this._board.dropDelay=5,this._board.render(!0),this._board.animate(),this._$start.fadeOut(150),this._$gameover.fadeOut(150),this._$score.fadeIn(150)},pause:function(){this._board.paused=!0},resume:function(){this._board.paused=!1},autoplay:function(t){"boolean"!=typeof t&&(t=!0),(this.options.autoplay=t)&&!this._board.started&&this._doStart(),this._setupControls(!t),this._setupTouchControls(!t)},controls:function(t){"boolean"!=typeof t&&(t=!0),this._setupControls(t)},touchControls:function(t){"boolean"!=typeof t&&(t=!0),this._setupTouchControls(t)},score:function(t){return void 0!==t&&0<=parseInt(t)&&(this._filled.score=parseInt(t),this._$scoreText.text(this._filled_score)),this._filled.score},freesquares:function(){return this._filled.getFreeSpaces()},showStartMessage:function(){this._$start.show()},showGameOverMessage:function(){this._$gameover.show()},updateSizes:function(){this._PIXEL_WIDTH=this.element.innerWidth(),this._PIXEL_HEIGHT=this.element.innerHeight(),this._BLOCK_WIDTH=this.options.blockWidth,this._BLOCK_HEIGHT=Math.floor(this.element.innerHeight()/this.element.innerWidth()*this._BLOCK_WIDTH),this._block_size=Math.floor(this._PIXEL_WIDTH/this._BLOCK_WIDTH),this._border_width=2,this._PIXEL_WIDTH=this._block_size*this._BLOCK_WIDTH,this._PIXEL_HEIGHT=this._block_size*this._BLOCK_HEIGHT,this._$canvas.attr("width",this._PIXEL_WIDTH).attr("height",this._PIXEL_HEIGHT)},theme:function(t){if(void 0===t)return this.options.theme||this._theme;"string"==typeof t?(this.options.theme=t,this._theme=l.extend(!0,{},BlockrainThemes[t])):(this.options.theme=null,this._theme=t),void 0!==this._theme&&null!==this._theme||(this._theme=l.extend(!0,{},BlockrainThemes.retro),this.options.theme="retro"),(isNaN(parseInt(this._theme.strokeWidth))||"number"!=typeof parseInt(this._theme.strokeWidth))&&(this._theme.strokeWidth=2),this._preloadThemeAssets(),null!==this._board&&("string"==typeof this._theme.background&&this._$canvas.css("background-color",this._theme.background),this._board.render())},_theme:{},_$game:null,_$canvas:null,_$gameholder:null,_$start:null,_$gameover:null,_$score:null,_$scoreText:null,_canvas:null,_ctx:null,_create:function(){var t=this;this.theme(this.options.theme),this._createHolder(),this._createUI(),this._refreshBlockSizes(),this.updateSizes(),l(window).resize(function(){}),this._SetupShapeFactory(),this._SetupFilled(),this._SetupInfo(),this._SetupBoard(),this._info.init(),this._board.init();var e=function(){requestAnimationFrame(e),t._board.render()};e(),this.options.autoplay?this.autoplay(!0):this._setupControls(!0),this._setupTouchControls(!1)},_checkCollisions:function(t,e,i,o){for(var n,s,a=0,r=i.length;a<r;a+=2){if(n=t+i[a],(s=e+i[a+1])>=this._BLOCK_HEIGHT||this._filled.check(n,s))return!0;if(!o&&n<0||n>=this._BLOCK_WIDTH)return!0}return!1},_board:null,_info:null,_filled:null,_drawBackground:function(){if("string"==typeof this._theme.background){if(this._theme.backgroundGrid instanceof Image){if(0===this._theme.backgroundGrid.width||0===this._theme.backgroundGrid.height)return;this._ctx.globalAlpha=1;for(var t=0;t<this._BLOCK_WIDTH;t++)for(var e=0;e<this._BLOCK_HEIGHT;e++){var i=t*this._block_size,o=e*this._block_size;this._ctx.drawImage(this._theme.backgroundGrid,0,0,this._theme.backgroundGrid.width,this._theme.backgroundGrid.height,i,o,this._block_size,this._block_size)}}else if("string"==typeof this._theme.backgroundGrid){var n=this._theme.strokeWidth;Math.round(.23*this._block_size),Math.round(.3*this._block_size);this._ctx.globalAlpha=1,this._ctx.fillStyle=this._theme.backgroundGrid;for(t=0;t<this._BLOCK_WIDTH;t++)for(e=0;e<this._BLOCK_HEIGHT;e++){i=t*this._block_size,o=e*this._block_size;this._ctx.fillRect(i+n,o+n,this._block_size-2*n,this._block_size-2*n)}}this._ctx.globalAlpha=1}},_shapeFactory:null,_shapes:{line:[[0,-1,0,-2,0,-3,0,-4],[2,-2,1,-2,0,-2,-1,-2],[0,-4,0,-3,0,-2,0,-1],[-1,-2,0,-2,1,-2,2,-2]],square:[[0,0,1,0,0,-1,1,-1],[1,0,1,-1,0,0,0,-1],[1,-1,0,-1,1,0,0,0],[0,-1,0,0,1,-1,1,0]],arrow:[[0,-1,1,-1,2,-1,1,-2],[1,0,1,-1,1,-2,0,-1],[2,-1,1,-1,0,-1,1,0],[1,-2,1,-1,1,0,2,-1]],rightHook:[[2,0,1,0,1,-1,1,-2],[2,-2,2,-1,1,-1,0,-1],[0,-2,1,-2,1,-1,1,0],[0,0,0,-1,1,-1,2,-1]],leftHook:[[0,0,1,0,1,-1,1,-2],[2,0,2,-1,1,-1,0,-1],[2,-2,1,-2,1,-1,1,0],[0,-2,0,-1,1,-1,2,-1]],leftZag:[[0,0,0,-1,1,-1,1,-2],[2,-1,1,-1,1,-2,0,-2],[1,-2,1,-1,0,-1,0,0],[0,-2,1,-2,1,-1,2,-1]],rightZag:[[1,0,1,-1,0,-1,0,-2],[2,-1,1,-1,1,0,0,0],[0,-2,0,-1,1,-1,1,0],[0,0,1,0,1,-1,2,-1]]},_SetupShapeFactory:function(){function t(h,t,e,i){return l.extend(this,{x:0,y:0,symmetrical:e,init:function(){return l.extend(this,{orientation:0,x:Math.floor(h._BLOCK_WIDTH/2)-1,y:-1}),this},blockType:i,blockVariation:null,blocksLen:t[0].length,orientations:t,orientation:0,rotate:function(t){var e=(this.orientation+("left"===t?1:-1)+4)%4;if(h._checkCollisions(this.x,this.y,this.getBlocks(e))){var i=this.orientation,o=this.x,n=this.y;for(this.orientation=e;this.x>=h._BLOCK_WIDTH-2;)this.x--;for(;this.x<0;)this.x++;"line"===this.blockType&&0===this.x&&this.x++,h._checkCollisions(this.x,this.y,this.getBlocks(e))&&(this.y--,h._checkCollisions(this.x,this.y,this.getBlocks(e))&&(this.x=o,this.y=n,this.orientation=i)),h._board.renderChanged=!0}else this.orientation=e,h._board.renderChanged=!0},moveRight:function(){h._checkCollisions(this.x+1,this.y,this.getBlocks())||(this.x++,h._board.renderChanged=!0)},moveLeft:function(){h._checkCollisions(this.x-1,this.y,this.getBlocks())||(this.x--,h._board.renderChanged=!0)},drop:function(){h._checkCollisions(this.x,this.y+1,this.getBlocks())||(this.y++,h._board.dropCount=-1,h._board.animate(),h._board.renderChanged=!0)},getBlocks:function(t){return this.orientations[void 0!==t?t:this.orientation]},draw:function(t,e,i){for(var o=this.getBlocks(i),n=void 0===t?this.x:t,s=void 0===e?this.y:e,a=0,r=0;a<this.blocksLen;a+=2)h._board.drawBlock(n+o[a],s+o[a+1],this.blockType,this.blockVariation,r,this.orientation,!0),r++},getBounds:function(t){for(var e=l.isArray(t)?t:this.getBlocks(t),i=0,o=e.length,n=999,s=-999,a=999,r=-999;i<o;i+=2)e[i]<n&&(n=e[i]),e[i]>s&&(s=e[i]),e[i+1]<a&&(a=e[i+1]),e[i+1]>r&&(r=e[i+1]);return{left:n,right:s,top:a,bottom:r,width:s-n,height:r-a}}}),this.init()}var e=this;null===this._shapeFactory&&(this._shapeFactory={line:function(){return new t(e,e._shapes.line,!1,"line")},square:function(){return new t(e,e._shapes.square,!1,"square")},arrow:function(){return new t(e,e._shapes.arrow,!1,"arrow")},leftHook:function(){return new t(e,e._shapes.leftHook,!1,"leftHook")},rightHook:function(){return new t(e,e._shapes.rightHook,!1,"rightHook")},leftZag:function(){return new t(e,e._shapes.leftZag,!1,"leftZag")},rightZag:function(){return new t(e,e._shapes.rightZag,!1,"rightZag")}})},_SetupFilled:function(){var r=this;null===this._filled&&(this._filled={data:new Array(r._BLOCK_WIDTH*r._BLOCK_HEIGHT),score:0,toClear:{},check:function(t,e){return this.data[this.asIndex(t,e)]},add:function(t,e,i,o,n,s){0<=t&&t<r._BLOCK_WIDTH&&0<=e&&e<r._BLOCK_HEIGHT&&(this.data[this.asIndex(t,e)]={blockType:i,blockVariation:o,blockIndex:n,blockOrientation:s})},getFreeSpaces:function(){for(var t=0;t<this.data.length;t++)this.data[t]?1:0},asIndex:function(t,e){return t+e*r._BLOCK_WIDTH},asX:function(t){return t%r._BLOCK_WIDTH},asY:function(t){return Math.floor(t/r._BLOCK_WIDTH)},clearAll:function(){delete this.data,this.data=new Array(r._BLOCK_WIDTH*r._BLOCK_HEIGHT)},_popRow:function(t){for(var e=r._BLOCK_WIDTH*(t+1)-1;0<=e;e--)this.data[e]=e>=r._BLOCK_WIDTH?this.data[e-r._BLOCK_WIDTH]:void 0},checkForClears:function(){var t,e,i,o,n=r._board.lines,s=[];for(t=0,e=this.data.length;t<e;t++)0==(o=this.asX(t))&&(i=0),this.data[t]&&void 0!==this.data[t]&&"string"==typeof this.data[t].blockType&&(i+=1),o==r._BLOCK_WIDTH-1&&i==r._BLOCK_WIDTH&&s.push(this.asY(t));for(t=0,e=s.length;t<e;t++)this._popRow(s[t]),r._board.lines++,r._board.lines%10==0&&1<r._board.dropDelay&&(r._board.dropDelay*=.9);var a=r._board.lines-n;this._updateScore(a)},_updateScore:function(t){if(!(t<=0)){var e=[0,400,1e3,3e3,12e3];t>=e.length&&(t=e.length-1),this.score+=e[t],r._$scoreText.text(this.score),r.options.onLine.call(r.element,t,e[t],this.score)}},_resetScore:function(){this.score=0,r._$scoreText.text(this.score)},draw:function(){for(var t,e=0,i=this.data.length;e<i;e++)if(void 0!==this.data[e]){t=this.asY(e);var o=this.data[e];r._board.drawBlock(this.asX(e),t,o.blockType,o.blockVariation,o.blockIndex,o.blockOrientation)}}})},_SetupInfo:function(){var e=this;this._info={mode:e.options.difficulty,modes:["normal","nice","evil"],modesY:170,autopilotY:null,init:function(){this.mode=e.options.difficulty},setMode:function(t){this.mode=t,e._board.nextShape(!0)}}},_SetupBoard:function(){var C=this,s=this._info;this._board={animateDelay:1e3/C.options.speed,animateTimeoutId:null,cur:null,lines:0,dropCount:0,dropDelay:5,holding:{left:null,right:null,drop:null},holdingThreshold:200,started:!1,gameover:!1,renderChanged:!0,init:function(){this.cur=this.nextShape(),C.options.showFieldOnStart&&(C._drawBackground(),C._board.createRandomBoard(),C._board.render()),this.showStartMessage()},showStartMessage:function(){C._$start.show()},showGameOverMessage:function(){C._$gameover.show()},nextShape:function(t){var e,i,o,n=this.next;if(e="nice"==s.mode||"evil"==s.mode?C._niceShapes:C._randomShapes(),C.options.no_preview){if(this.next=null,t)return null;if(!(i=e(C._filled,C._checkCollisions,C._BLOCK_WIDTH,C._BLOCK_HEIGHT,s.mode)))throw new Error("No shape returned from shape function!",e);i.init(),o=i}else{if(!(i=e(C._filled,C._checkCollisions,C._BLOCK_WIDTH,C._BLOCK_HEIGHT,s.mode)))throw new Error("No shape returned from shape function!",e);if(i.init(),this.next=i,t)return null;o=n||this.nextShape()}return C.options.autoplay&&(C._niceShapes(C._filled,C._checkCollisions,C._BLOCK_WIDTH,C._BLOCK_HEIGHT,"normal",o),o.orientation=o.best_orientation,o.x=o.best_x),void 0!==C._theme.complexBlocks?l.isArray(C._theme.complexBlocks[o.blockType])?o.blockVariation=C._randInt(0,C._theme.complexBlocks[o.blockType].length-1):o.blockVariation=null:void 0!==C._theme.blocks&&(l.isArray(C._theme.blocks[o.blockType])?o.blockVariation=C._randInt(0,C._theme.blocks[o.blockType].length-1):o.blockVariation=null),o},animate:function(){var t=!1,e=!1,i=!1,o=Date.now();if(this.animateTimeoutId&&clearTimeout(this.animateTimeoutId),!this.paused&&!this.gameover&&(this.dropCount++,(this.dropCount>=this.dropDelay||C.options.autoplay||this.holding.drop&&o-this.holding.drop>=this.holdingThreshold)&&(e=t=!0,this.dropCount=0),this.holding.left&&o-this.holding.left>=this.holdingThreshold&&(e=!0,this.cur.moveLeft()),this.holding.right&&o-this.holding.right>=this.holdingThreshold&&(e=!0,this.cur.moveRight()),t)){var n=this.cur,s=n.x,a=n.y,r=n.getBlocks();if(C._checkCollisions(s,a+1,r,!0)){t=!1;for(var h=0,l=0;l<n.blocksLen;l+=2)C._filled.add(s+r[l],a+r[l+1],n.blockType,n.blockVariation,h,n.orientation),a+r[l]<0&&(i=!0),h++;C._filled.checkForClears(),this.cur=this.nextShape(),this.renderChanged=!0,this.holding.left=null,this.holding.right=null,this.holding.drop=null,C.options.onPlaced.call(C.element)}}t&&(e=!0,this.cur.y++),(t||e)&&(this.renderChanged=!0),i?(this.gameover=!0,C.gameover(),C.options.autoplay&&C.options.autoplayRestart&&C.restart(),this.renderChanged=!0):(this.animateDelay=1e3/C.options.speed,this.animateTimeoutId=window.setTimeout(function(){C._board.animate()},this.animateDelay))},createRandomBoard:function(){var t,e,i,o,n,s;for(t=Object.keys(C._shapeFactory),e=0,i=C._BLOCK_WIDTH;e<i;e++)for(o=0,n=C._randChoice([C._randInt(0,8),C._randInt(5,9)]);o<n;o++)s&&C._randInt(0,3)||(s=C._randChoice(t)),C._filled.add(e,C._BLOCK_HEIGHT-o,s,C._randInt(0,3),null,C._randInt(0,3));C._board.render(!0)},render:function(t){(this.renderChanged||t)&&(this.renderChanged=!1,C._ctx.clearRect(0,0,C._PIXEL_WIDTH,C._PIXEL_HEIGHT),C._drawBackground(),C._filled.draw(),this.cur.draw())},drawBlock:function(t,e,i,o,n,s,a){t*=C._block_size,e*=C._block_size,a="boolean"==typeof a&&a;var r,h,l,c,d,u,g,A,f,b,p,m=C._theme.strokeWidth,k=Math.round(.23*C._block_size),_=Math.round(.3*C._block_size),I=this.getBlockColor(i,o,n,a);if(C._ctx.globalAlpha=1,I instanceof Image){if(C._ctx.globalAlpha=1,0===I.width||0===I.height)return;if(void 0!==C._theme.blocks&&null!==C._theme.blocks)C._ctx.drawImage(I,0,0,I.width,I.height,t,e,C._block_size,C._block_size);else if(void 0!==C._theme.complexBlocks&&null!==C._theme.complexBlocks){null==n&&(n=0);var v=(r=I,h=i,l=n,c=C._shapes[h][0],d=Math.min(c[0],c[2],c[4],c[6]),u=Math.max(c[0],c[2],c[4],c[6]),g=Math.min(c[1],c[3],c[5],c[7]),A=u-d+1,f=Math.max(c[1],c[3],c[5],c[7])-g+1,b=r.width/A,p=r.height/f,{x:b*(c[2*l]-d),y:p*Math.abs(g-c[2*l+1]),w:b,h:p});C._ctx.save(),C._ctx.translate(t,e),C._ctx.translate(C._block_size/2,C._block_size/2),C._ctx.rotate(-Math.PI/2*s),C._ctx.drawImage(I,v.x,v.y,v.w,v.h,-C._block_size/2,-C._block_size/2,C._block_size,C._block_size),C._ctx.restore()}else C._ctx.fillStyle="#ff0000",C._ctx.fillRect(t,e,C._block_size,C._block_size)}else"string"==typeof I&&(C._ctx.fillStyle=I,C._ctx.fillRect(t,e,C._block_size,C._block_size),"string"==typeof C._theme.innerShadow&&(C._ctx.globalAlpha=1,C._ctx.strokeStyle=C._theme.innerShadow,C._ctx.lineWidth=1,C._ctx.strokeRect(t+1,e+1,C._block_size-2,C._block_size-2)),"string"==typeof C._theme.stroke&&(C._ctx.globalAlpha=1,C._ctx.fillStyle=C._theme.stroke,C._ctx.strokeStyle=C._theme.stroke,C._ctx.lineWidth=m,C._ctx.strokeRect(t,e,C._block_size,C._block_size)),"string"==typeof C._theme.innerStroke&&(C._ctx.fillStyle=C._theme.innerStroke,C._ctx.fillRect(t+k,e+k,C._block_size-2*k,m),C._ctx.fillRect(t+k,e+k+m,m,C._block_size-2*k-m)),"string"==typeof C._theme.innerSquare&&(C._ctx.fillStyle=C._theme.innerSquare,C._ctx.globalAlpha=.2,C._ctx.fillRect(t+_,e+_,C._block_size-2*_,C._block_size-2*_)));C._ctx.globalAlpha=1},getBlockColor:function(t,e,i,o){var n=function(t,e){return l.isArray(t)?null!==e&&void 0!==t[e]?t[e]:0<t.length?t[0]:null:t};return"boolean"!=typeof o&&(o=!0),o?"string"==typeof C._theme.primary&&""!==C._theme.primary?C._theme.primary:void 0!==C._theme.blocks&&null!==C._theme.blocks?n(C._theme.blocks[t],e):n(C._theme.complexBlocks[t],e):"string"==typeof C._theme.secondary&&""!==C._theme.secondary?C._theme.secondary:void 0!==C._theme.blocks&&null!==C._theme.blocks?n(C._theme.blocks[t],e):n(C._theme.complexBlocks[t],e)}},C._niceShapes=C._getNiceShapes()},_randInt:function(t,e){return t+Math.floor(Math.random()*(1+e-t))},_randSign:function(){return 2*this._randInt(0,1)-1},_randChoice:function(t){return t[this._randInt(0,t.length-1)]},_preloadThemeAssets:function(){var t=this,i=new RegExp("^#[A-F0-9+]{3,6}","i"),o=(new RegExp("^data:image/(png|gif|jpg);base64,","i"),function(){t._board&&t._board.render(!0)}),n=function(t){var e=t;return i.test(e)?t=e:((t=new Image).src=e,t.onload=o),t},e=function(t){if(l.isArray(t)&&0<t.length)for(var e=0;e<t.length;e++)t[e]=n(t[e]);else"string"==typeof t&&(t=n(t));return t};if(void 0!==this._theme.complexBlocks)for(var s=Object.keys(this._theme.complexBlocks),a=0;a<s.length;a++)this._theme.complexBlocks[s[a]]=e(this._theme.complexBlocks[s[a]]);else if(void 0!==this._theme.blocks)for(s=Object.keys(this._theme.blocks),a=0;a<s.length;a++)this._theme.blocks[s[a]]=e(this._theme.blocks[s[a]]);if(void 0!==this._theme.backgroundGrid&&"string"==typeof this._theme.backgroundGrid&&!i.test(this._theme.backgroundGrid)){var r=this._theme.backgroundGrid;this._theme.backgroundGrid=new Image,this._theme.backgroundGrid.src=r,this._theme.backgroundGrid.onload=o}},_createHolder:function(){this._$gameholder=l('<div class="blockrain-game-holder"></div>'),this._$gameholder.css("position","relative").css("width","100%").css("height","100%"),this.element.html("").append(this._$gameholder),this._$canvas=l('<canvas style="display:block; width:100%; height:100%; padding:0; margin:0; border:none;" />'),"string"==typeof this._theme.background&&this._$canvas.css("background-color",this._theme.background),this._$gameholder.append(this._$canvas),this._canvas=this._$canvas.get(0),this._ctx=this._canvas.getContext("2d")},_createUI:function(){var e=this;e._$score=l('<div class="blockrain-score-holder" style="position:absolute;"><div class="blockrain-score"><div class="blockrain-score-msg">'+this.options.scoreText+'</div><div class="blockrain-score-num">0</div></div></div>').hide(),e._$scoreText=e._$score.find(".blockrain-score-num"),e._$gameholder.append(e._$score),e._$start=l('<div class="blockrain-start-holder" style="position:absolute;"><div class="blockrain-start"><div class="blockrain-start-msg">'+this.options.playText+'</div><a class="blockrain-btn blockrain-start-btn">'+this.options.playButtonText+"</a></div></div>").hide(),e._$gameholder.append(e._$start),e._$start.find(".blockrain-start-btn").click(function(t){t.preventDefault(),e.start()}),e._$gameover=l('<div class="blockrain-game-over-holder" style="position:absolute;"><div class="blockrain-game-over"><div class="blockrain-game-over-msg">'+this.options.gameOverText+'</div><a class="blockrain-btn blockrain-game-over-btn">'+this.options.restartButtonText+"</a></div></div>").hide(),e._$gameover.find(".blockrain-game-over-btn").click(function(t){t.preventDefault(),e.restart()}),e._$gameholder.append(e._$gameover),this._createControls()},_createControls:function(){var t=this;t._$touchLeft=l('<a class="blockrain-touch blockrain-touch-left" />').appendTo(t._$gameholder),t._$touchRight=l('<a class="blockrain-touch blockrain-touch-right" />').appendTo(t._$gameholder),t._$touchRotateRight=l('<a class="blockrain-touch blockrain-touch-rotate-right" />').appendTo(t._$gameholder),t._$touchRotateLeft=l('<a class="blockrain-touch blockrain-touch-rotate-left" />').appendTo(t._$gameholder),t._$touchDrop=l('<a class="blockrain-touch blockrain-touch-drop" />').appendTo(t._$gameholder)},_refreshBlockSizes:function(){this.options.autoBlockWidth&&(this.options.blockWidth=Math.ceil(this.element.width()/this.options.autoBlockSize))},_getNiceShapes:function(){function w(t,e,i,o,n,s,a){var r,h,l,c,d=e.length,u=0,g={};for(r=0;r<d;r+=2)u+=t[B._filled.asIndex(i+e[r],o+e[r+1])]||0;for(r=0;r<d;r+=2)h=e[r],l=e[r+1],(void 0===g[h]||g[h]<l)&&(g[h]=l);for(h in c=0,g)for(l=g[h=parseInt(h)]+1,r=0;o+l<a;l++,r++)if(!B._filled.check(i+h,o+l)){c+=0==r?2:1;break}return u-=c}var B=this,G={};for(var t in this._shapeFactory)G[t]=this._shapeFactory[t]();var e=function(t,e,i,o,n,s){s||function(){for(var t in G)G[t].x=0,G[t].y=-1}();var a,r,h,l,c,d,u,g,A,f,b,p,m,k,_,I=new Array(i*o),v="evil"==n,C=999*(v?1:-1);for(a=0;a<i;a++)for(r=0;r<=o;r++)if(r==o||t.check(a,r)){for(h=r-4;h<r;h++)I[t.asIndex(a,h)]=h;break}var y=void 0===s?G:{cur:s};for(l in y){for(c=y[l],m=-999,d=0;d<(c.symmetrical?2:4);d++)for(u=c.getBlocks(d),a=-(g=c.getBounds(u)).left;a<i-g.width;a++)for(r=-1;r<o-g.bottom;r++)if(B._checkCollisions(a,r+1,u,!0)){m<(A=w(I,u,a,r,0,0,o))&&(m=A,k=d,_=a);break}(v&&m<C||!v&&C<m)&&(f=c,C=m,b=k,p=_)}return f.best_orientation=b,f.best_x=p,f};return e.no_preview=!0,e},_randomShapes:function(){var i=[];return l.each(this._shapeFactory,function(t,e){i.push(e)}),this._randChoice(i)},_setupControls:function(t){function n(t){return"safekeypress."+t.keyCode}var i=this,o=function(t){t?i._board.holding.left||(i._board.cur.moveLeft(),i._board.holding.left=Date.now(),i._board.holding.right=null):i._board.holding.left=null},s=function(t){t?i._board.holding.right||(i._board.cur.moveRight(),i._board.holding.right=Date.now(),i._board.holding.left=null):i._board.holding.right=null},a=function(t){t?i._board.holding.drop||(i._board.cur.drop(),i._board.holding.drop=Date.now()):i._board.holding.drop=null},r=function(t){if(!i._board.cur)return!0;var e=!1;if(e=!0,i.options.asdwKeys)switch(t.keyCode){case 65:o(!0);break;case 68:s(!0);break;case 83:a(!0);break;case 87:i._board.cur.rotate("right")}switch(t.keyCode){case 37:o(!0);break;case 39:s(!0);break;case 40:a(!0);break;case 38:case 88:i._board.cur.rotate("right");break;case 90:i._board.cur.rotate("left");break;default:e=!1}return e&&t.preventDefault(),!e},h=function(t){if(!i._board.cur)return!0;var e=!1;if(e=!0,i.options.asdwKeys)switch(t.keyCode){case 65:o(!1);break;case 68:s(!1);break;case 83:a(!1)}switch(t.keyCode){case 37:o(!1);break;case 39:s(!1);break;case 40:a(!1);break;default:e=!1}return e&&t.preventDefault(),!e};l(document).unbind("keydown.blockrain").unbind("keyup.blockrain"),i.options.autoplay||t&&l(document).bind("keydown.blockrain",function(t){var e=n(t);return l.data(this,e,(l.data(this,e)||0)-1),r.call(this,t)}).bind("keyup.blockrain",function(t){return l.data(this,n(t),0),h.call(this,t),e=t,(o=(i={stopKeys:{37:1,38:1,39:1,40:1}}).stopKeys[e.keyCode]||i.moreStopKeys&&i.moreStopKeys[e.keyCode])&&e.preventDefault(),o;var e,i,o})},_setupTouchControls:function(t){var e=this;e._$touchLeft.unbind("touchstart touchend click"),e._$touchRight.unbind("touchstart touchend click"),e._$touchRotateLeft.unbind("touchstart touchend click"),e._$touchRotateRight.unbind("touchstart touchend click"),e._$touchDrop.unbind("touchstart touchend click"),!e.options.autoplay&&t?(e._$touchLeft.show().bind("touchstart click",function(t){t.preventDefault(),e._board.cur.moveLeft(),e._board.holding.left=Date.now(),e._board.holding.right=null,e._board.holding.drop=null}).bind("touchend",function(t){t.preventDefault(),e._board.holding.left=null}),e._$touchRight.show().bind("touchstart click",function(t){t.preventDefault(),e._board.cur.moveRight(),e._board.holding.right=Date.now(),e._board.holding.left=null,e._board.holding.drop=null}).bind("touchend",function(t){t.preventDefault(),e._board.holding.right=null}),e._$touchDrop.show().bind("touchstart click",function(t){t.preventDefault(),e._board.cur.drop(),e._board.holding.drop=Date.now()}).bind("touchend",function(t){t.preventDefault(),e._board.holding.drop=null}),e._$touchRotateLeft.show().bind("touchstart click",function(t){t.preventDefault(),e._board.cur.rotate("left")}),e._$touchRotateRight.show().bind("touchstart click",function(t){t.preventDefault(),e._board.cur.rotate("right")})):(e._$touchLeft.hide(),e._$touchRight.hide(),e._$touchRotateLeft.hide(),e._$touchRotateRight.hide(),e._$touchDrop.hide())}})}(jQuery),window.BlockrainThemes={custom:{background:"#040304",backgroundGrid:"data:image/png;base64,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",complexBlocks:{line:["assets/blocks/custom/line.png","assets/blocks/custom/line.png"],square:["assets/blocks/custom/square.png"],arrow:"assets/blocks/custom/arrow.png",rightHook:["assets/blocks/custom/rightHook.png"],leftHook:"assets/blocks/custom/leftHook.png",rightZag:["assets/blocks/custom/rightZag.png"],leftZag:"assets/blocks/custom/leftZag.png"}},candy:{background:"#040304",backgroundGrid:"data:image/png;base64,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",blocks:{line:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAACuklEQVR4Xi2MzW4cRRSFz/2p6p4eT2zjjE2MHBQWvAALNjwDS8SOFc/FIyCxQgh2LFHkBQgJyQo/wXKCEZ7x9E9VV93LBPNJ516dxXfo/U8+HTZ9uzrZympTjLo4DbtDiBpXSBGMocI5lkaMhKv0fz+LVX9P6ZuvvxqBby+3L3eJu6Zt27DL4qgIWW0KsxPC3Kjxz5fPT3z48csvtHSHd0C/1374RddPX/9xK6JdcjEutNfqFJMBsQat3By+i/7VxqJ6c/zd5avvn1+N7dl2V9Ad92M2ViI2ksyWSJ2QXQXc5/H25jYcHHKl1YYebcJqw/rW03OOzfr89NHbR8vH3Wq9Olofrddni+XhycXJhBSkKFLxWeHBZFFDVyD343Rzc/0XeYSXeXZIJaam2V9pLsBOtRIKYAorXqvAg8giaKsCKw1zJAGFbKhwtxrdG9E3BQxAIW1xyYUKUIwNxMAwDEwuSgA5iAw2l5ITOeE/GLRMihIOsnQZnKqOlWXRUWidyYkFpCxtCF1s8D+seBggYVYRhChkqqjmld3NKhhu1XKuKUf4g6egEitkvqc5ewo+3ZOVZJO4Q4OSEDGRRyAQkYH8QfMUCR07KS8DIsO8xhjcnUXnSv4GMRYShSUG2MFCeby/awOJFyvF3TU22ckk3E3FQjci+mJVggwz12rKVEvWOk3dwWpIr7ezrU4XZ+9ciBAxWCVlhDb2o5cZTgBR17R3w45hgg8/fu+Dj643adZVXzCmebsbp5T6fhr2L9W8z5xLNsyDpl2btrsXPynS9NvVVc28xzMLPDCUYbVUMy+TMgdinupCEapdvPv0lqGwjW9fHsXjF39eIzRpnFbLdiy918qCWmclnq3mcWhVnzw5v+83XYz0+LPP/8lL704NB3BBdbCDKlChAq8QgRvmGSFouyo3vz7Lr/8FMHqie3VCpNQAAAAASUVORK5CYII=",square:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAACfUlEQVR4Xh3LvY5cRRBA4VNV3ffe+fEaZARgWfBExEhEZEg8A69AgkC8AzEiICMgJCdAxggsGRuW3Z3dmenbXVWskT6d7MiXnz3qclu87esm1qW3NteRuqaCIAmQABwPvPU2NyeaUa6P159/9QV3l/HqlWqN41El0PaadEJAoZBKqS9+eybL/tvvvi8PrHA4ku33pz9v5rafKmc0I7QhbiGaJSikyeCh1T7OG6fMluOvP/5+8csb+/RxhUtlEXA5KUMpiEpWwZKU3D799Zl1CtpEjsoh++HRxUMBVhgry4yUXLvstnE8qWi/HZndTEwpppj5XLIg7fZ4+fJlb91jzSlGhjc2O7RMj995nApRIRW0BHRl9UXLona6PYiGGKpaa50qPtQ96/5BCgkpBKghpI7VJZK5bmYju5IxQkZONqtbu+txd5ZEQFI0KaRRJxEZY0wjh/dqKqbZ/z9tqmJIqpQSnaD8T9sYkGqWmuTIZHgoWYupKh4SqSQimqrJfeV1gTECF4NKmUHwDFRqNSuJjMTxFQANNKGUyTBxYqSX6J6USdc1BquYFhEMFEQCUvSeC5rheL/Y74kAvX/OPXRZojIkqHkaLpMwWdYJm1fHlZIJotdXN7tFtczvvfuB5MIyRZwQ11pora2BTKOvva3zPKtStpsKLNNmmcr53xtFMtLaGLSR61IKKaPHenO1L2+qThqrn5FvPuGjjz8s4x+NI6Ptdvtxckywo0cjstZZZfZhNhSWNuoPP/5Udhebc8+tbp4//zPd6dcaGtJtWtUiVkhTWSJkTn3y5P15M19ervL1p9UZFzX9zHYmO1Ph3KFQK+rkIBMScbY7DicOzn+QRoW5iamqhgAAAABJRU5ErkJggg==",arrow:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAACsklEQVR4XhWPu25bVxREZz/OuQ9RVKhXjBSu8gX5h+QD0udD8ilByjRpUqZxa6RxY8DuYlhwHhAc2qRIieK9vOfsvUMNBoPVrGLoh6+++7y7mbFfTNIVdShCxCGuAgE8tSilhOVWU6lrtPjPK33ffvvb6xd4KG9/+f1kenIYoAgOIc+AF9u5Rdteuvubty9LU168fqW9z7AFanr36uPZSOIgWHB1IJABKE0keSr3QdLolXitjw1n717++sfPP/7Ula6pfbYmeU7eaBybnzg6ewwpT8DW/vth2acFkzf9Pi0OOU1+/eVlM2/m14vZ+Rfz88t+Np+fnZ8tns1OL66vLss0FIughgppDumLzIpmYBrHz+uVsZVSsraorJoMQU5dOs3K3jaiSXGciNYoG3cQcbJjwiKC3Ny9ljhEEUlGBnh4IJwR+qQ6q7FbuMPBLEQCVjaYA0mYwcyIY6p5qYFQQqOexRMhHOqg6sV8mtiqQki51gSHV6YAMYMMxgIC2IOcBcIsQipBBCIjNqEQBWARjjAOHAtSh1eqk9bqLpBKQUSZE4ccIqpJFnWQiRSKypjUA1DgEDw5janNkgA4zKmGQtpgsNqhMoRCmRni4AgKJh6DB842TffENWWqU+m448eYje186GZT31nXo5EqPhUGIqoGwd1gtWFtRBeLxcXF1TydYh+td1E5lMdpOOxGr9bPOzdrtFGWk2lAg84e9/fYbGmsync0xD7mfkITgUMbJaKc26GOVn2sB61Gf958OE992wsoQjSSjBHUwEmlISTsxjEsOIsxP3v+/M3tey3wrRVh29wuA2Vo3Xoe3KP6Endhzh3v92NjKefcXZzETKxR+Sa+vt2s3/3z127YrYfN+mGz2m4+rT+tNuu77d3yfvn3+vbh8eH4bb3dLrer97c3q7L6H15gvODKB5u4AAAAAElFTkSuQmCC",rightHook:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAACqElEQVR4Xh3PO2tlZRSH8f9a73XvPTkTExl1dLAIKFpNY2Fl4UcT7G3FwmIaO3sbEfQjWAxDAkIORDHJyXFf3stayzC/9qke+ubrF0u7zqwfsJNFXEKtCAJriBGBoB0gNAZ5WIekcC0f+br8++3Pr1AP5Y/f6Xgfx4RqoB2kI27QgkYQw5BA2L95M+vTn379y0c2HI+Y5Ob6z3B/M/ZmlTieV7ISj9rXZ2n338NciEMedGshJacbZ9X16vK3H76vh/1paCOWiWvos5M1U9llLIebKeqz0zG4PmZ/dfl6XWc/9p4Ox/fMwnIcXrwL6ohPg54OZhYTUUc+w1YQ83z3kMadEKdp8EmE54cnKifTBLOr17cqtwIf4gAuKhUd8Lh4+TKPowjyOK1l8cxAm9nK2nWnsQeAyNtgldnClCLntkrRrTBcFyPjYRg8AEAY4JDhkhp7uOBIRbyqrmK+KcBm1qU30UbSxHcGnIGpKYk63dQxnC2sPcWo2slZUCCGYXPkkBnUqjcCSAGFsaOUQk5koqUqPFV5G2sDai+tG3vv6ZF3BojBzFrvpeij4KtDZTjPXTWGBA91uWJTo1WkqTAZoAbpT3ejd0YOBW1zoAHE/tG8FThm52KOLnDv1dA8DACTwbRU6TxSaX1WZII/1qBgwLvWtgN6ieQc2hC9hwLGTFS35eTJ7uOL5xxTkZI44l7BDGpwBke8FFCA9Pj2EAipHbd8Qre3fxOMDWykGryyM2Vv67JwmCJ7cQRRM6JXX+CrLz97/uHJ4bgHFUdKBi8B5gECLLAys4grAkr5Vt758ZdLTwhuPNvfHP7ZPzjrBAHYLBlChwPQ+jrtpq2UJv3i0/clni/Y03efYzxPvZdBkAzeAKATukENAoTA86ynZ3GrVQl3Eu/yJ/8D33mmeKR3Cz8AAAAASUVORK5CYII=",leftHook:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAACq0lEQVR4Xg3HO24mVRBH8X/Vrfv4ut02BjS8GSBAQuyCmE0gwSLICFgCBLASAhLiiQjQICFBMAMSFn63v+77qCp89EsO5U+/rus/0zQPPW8thXRQABLAjtHAAZ2gzGk2HRCG1YMPwgdf/fnXj1fX+O7732s/A0kzbwEUCW5Fgh8HGVdFTOn5H79NiZ/98rPATBVS8OzX5xTehYsxd3KFwXcGEljVOGVJ8a7W4Q4YT8sb33z70xdf/oB8HufzhjI0m2a3JLykuAyV4RGxrLVN5+f/3dxSKXJc59qfUk77djhdXhGx0/mMAg/rpm30bXq97Fp3su1mrMe19e46BLLw9Nb1w0WaZoO+fPmCNbTW3D1Fcjci77Cnn3wMhCBpWU7vuwqo3evgaar6QHRqfRXKhQiELFG1O6H3MZUyLpTIx24UMkNASbqZwZiN3AQsgKhZ6/VYR9OcDw/blg5xmKqPnIRBLQUZw4iIWQKydRcEcvLOOZ2A80Nv8SRv1iiHQWPXewbztm3MbObMYgpGCMwiwgwAIhJCAGBmjMD+KDJJThJzTI8TKZm5E9S7U3c0s6PrkVujvYbm0Qr1iceJ+GZ9772OMawNDNAgVm8cADcAQSgzCSiChZj8MRLwXCTPufQEC8SlVKPWNTJJ4BTDcds58tCaMsVoIQ8Nq2AgS97uVg2h7v29Dz86W86MGqB922F+djjsdbWE0eu233fbwF0opd57KYU43l5ewQ43N7d17CwUHJnlsl4QmUwkJJKZ5uXaLdBrnzl6EGbTbV2nVIiMuMU44EMwMjn76GMHeWAKhKuLvyXoC+F3IvXrfy9zmO/WKyUM6c1riWUY7btKiA+9UkyvPnk7KFMPtLz/uS9vrjVFLNqTUSEJNLN5hQL7gIXpsGytO0ekCduR/fg/hV+olVqSm3YAAAAASUVORK5CYII=",rightZag:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAACt0lEQVR4Xg3LOW6eVRQG4PcM937DP9hYlkgUQ6RQsAiEWAC7YCWUtGyAFqhpEHRI0CCBIjpHJBSxEhzkxP6H+93pHPz0D3358IsbuyY/XlCs7/YU5zjFZgdGp07BEDq4KXwA0PvuqIfDGbT0u69/+hZvr/DrH1gc1WENwUAGM3RDcXQGRbA9/e3nJPX3F5dqdY/ja8ztx++/+YhX5S6P47REODW2Pra+qsbOR5VFWwjHVPKJJF1FevPn019++O7jeYo3h5VG8Ua5OLnCh25T7+RwYfZavVz993q5OehccfImnV3nqdLjD54gTiDAF3cnEJrBAbZNSS//vTKP1FcTk0ppsfYzkpEt58Pls8vb29vTabDWYZJzjsqnJ+vHjx9tVvf3qG3QVpXJ0Y5L2xWmYbPt7W5WeK7RKUqICic7poQY6q4Fw2AUDSykUGUlQ0cUy3XUqCxm8Obe4SypVoRwOC7kLE5szIoBHsmlO6NJO3Qv5GEozI3IiE25K2EeLAiYADiBOwi51NLdCRrGcQ5xTLVUcg1BVeFszXtaWinkIAcALigQDwISby0Vq3dpR8IA2r1cKNfZRTq9F2c1iLuYqQcHg2Dmvbam08QUG1V07zASqDCLouSSE0tojCbGablFoMgkpMxht9QukvICASIXtNLy7rDDakVDeGepzpIUup1mlIZs5Dbo9OknnwEELGgZJgBhHHDYIx/v8/r98+d/P2cVVSOkitRPN9uXfz0j2rRSh1CZDKRmFomgnns62Wyvrq+ncTy2JJ/rRXv76vx04ymr83pci9gYRYISS4N3cgRKvYb15EHOHzy8fPaPgtMe8zHG5y8uH6y3wa7LPbNOIIkQRpCOZt7KzatHFx+Ww0Ki9NX8ZHWy7Sltchtz2aj32nicjZkpLr1m760vp5tN2e8jtHX0Yf4f3da+1L4oEEQAAAAASUVORK5CYII=",leftZag:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAACtElEQVR4Xg2Lu25cZRhF93f5L3OOPeOQmJuDhEIHDa/CC/B4SHSICqS0CERDE2MJAYKEmITEcewZz/nvH7O0taq16eTL++P66nhCDegOAEhghFYhDDM0hSgowQkKkDIwJi0pP/72G9j24vIi8S7nN34lYG1VyOKg0uVKFFIiY/XL+R8s977+6nvttBMkovTDz9/Np3G3fTlvYkoFJswzaxtya2haQ0nUdGa2PLY6GD/9+vjJ+Y+bD+K2vFxtrLS3cQq9t1rLwUZ7IpuOAmQQ8u9/PgFDWbG5708/jK/Ti9OzExErhYVU1TMrCZqV7fY2Or2+uQ5H7zgPMNQF5HL7+upZeFeHLU//etrraM2YedQBAXsnoPXHn8yrcHVzE0LICWoECTQf+SG19dRqK3tMUxSRZtkIZtqbsblW+vF8/Pzy1XoNvdthjDas7He7swdno+JkM21v997r6A1MIKNBwiCiXssqhNsbcAwQosPTeek1MzBa947NmnewYcGR8Oh1sZG8s5LvQoACaK0Yegi+965MNWXnxIAx0AdyWnqDMjuh1KoIkYGNUPqh0zHaYcpwoin1ZiBFjFBVEWLm1ppzTkQAsAQYQdwhTap+dBCRXzkW6g2lIpdqRkYE1v1+AZgEuiRo8G2YaCBo75ZylSCdiMnoYPVefO1k8AYm7rlAjUDi7/ZN18HIffbp5zFO22Vf0bzXfsBQUu4DIJ6P1/t/XowB9RGl4Xj94M62zy+vou2sDUySyhJjTDXpAeL9YFKXaxYnuoL2BRfnzxghj7YKm4liHkszGkOUjtxIYjKM9ncpTnPr4+HDj8j+U5/B5R5k/vfv344m6rfXHb3NSqKvdrs5xKUWeN95nUd69Oi9vpQI0PtfTAn7eE/eLF0Y92eUjrcDISBmrBjbgkrIDPFYCfoCLPgflXOjuIEFgMYAAAAASUVORK5CYII="}},modern:{background:"#000000",backgroundGrid:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAIAAAC0Ujn1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZTg0NzU4MC00ODk3LTRkNjAtOWNhYi1mZTk1NzQ5NzhiNjkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTEzOEQwMDc5MDQyMTFFNDlBMzlFNzY4RjBCNkNENzMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTEzOEQwMDY5MDQyMTFFNDlBMzlFNzY4RjBCNkNENzMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDplNDRjOWZiNC0yNzE5LTQ3NDYtYmRmMi0wMmY2ZTA4ZjAxMmUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MzMwNTNEOTk5MDM1MTFFNDlBMzlFNzY4RjBCNkNENzMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7Y01+zAAAAMklEQVR42mJgGAWjYBSMgkEJGIlUd+j/WjjbjjGYGC1MtHP10DR6FIyCUTAKBikACDAA0NoDCLGGjH8AAAAASUVORK5CYII=",primary:null,secondary:null,stroke:null,blocks:{line:"#fa1e1e",square:"#f1fa1e",arrow:"#d838cb",rightHook:"#f5821f",leftHook:"#42c6f0",rightZag:"#4bd838",leftZag:"#fa1e1e"}},retro:{background:"#000000",backgroundGrid:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAIAAAC0Ujn1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZTg0NzU4MC00ODk3LTRkNjAtOWNhYi1mZTk1NzQ5NzhiNjkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTEzOEQwMDc5MDQyMTFFNDlBMzlFNzY4RjBCNkNENzMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTEzOEQwMDY5MDQyMTFFNDlBMzlFNzY4RjBCNkNENzMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDplNDRjOWZiNC0yNzE5LTQ3NDYtYmRmMi0wMmY2ZTA4ZjAxMmUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MzMwNTNEOTk5MDM1MTFFNDlBMzlFNzY4RjBCNkNENzMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7Y01+zAAAAMklEQVR42mJgGAWjYBSMgkEJGIlUd+j/WjjbjjGYGC1MtHP10DR6FIyCUTAKBikACDAA0NoDCLGGjH8AAAAASUVORK5CYII=",primary:null,secondary:null,stroke:"#000000",innerStroke:"#000000",blocks:{line:"#fa1e1e",square:"#f1fa1e",arrow:"#d838cb",rightHook:"#f5821f",leftHook:"#42c6f0",rightZag:"#4bd838",leftZag:"#fa1e1e"}},monochrome:{background:"#000000",backgroundGrid:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAIAAAC0Ujn1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZTg0NzU4MC00ODk3LTRkNjAtOWNhYi1mZTk1NzQ5NzhiNjkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTEzOEQwMDc5MDQyMTFFNDlBMzlFNzY4RjBCNkNENzMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTEzOEQwMDY5MDQyMTFFNDlBMzlFNzY4RjBCNkNENzMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDplNDRjOWZiNC0yNzE5LTQ3NDYtYmRmMi0wMmY2ZTA4ZjAxMmUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MzMwNTNEOTk5MDM1MTFFNDlBMzlFNzY4RjBCNkNENzMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7Y01+zAAAAMklEQVR42mJgGAWjYBSMgkEJGIlUd+j/WjjbjjGYGC1MtHP10DR6FIyCUTAKBikACDAA0NoDCLGGjH8AAAAASUVORK5CYII=",primary:"#ffffff",secondary:"#ffffff",stroke:"#000000",innerStroke:"#000000"},aerolab:{background:"#ffffff",primary:"#ff7b00",secondary:"#000000"},gameboy:{background:"#C4CFA1",primary:null,secondary:null,stroke:"#414141",innerStroke:"#414141",innerSquare:"#000000",blocks:{line:"#88926A",square:"#585E44",arrow:"#A4AC8C",rightHook:"#6B7353",leftHook:"#6B7353",rightZag:"#595F45",leftZag:"#595F45"}},vim:{background:"#000000",backgroundGrid:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAIAAAC0Ujn1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZTg0NzU4MC00ODk3LTRkNjAtOWNhYi1mZTk1NzQ5NzhiNjkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTEzOEQwMDc5MDQyMTFFNDlBMzlFNzY4RjBCNkNENzMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTEzOEQwMDY5MDQyMTFFNDlBMzlFNzY4RjBCNkNENzMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDplNDRjOWZiNC0yNzE5LTQ3NDYtYmRmMi0wMmY2ZTA4ZjAxMmUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MzMwNTNEOTk5MDM1MTFFNDlBMzlFNzY4RjBCNkNENzMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7Y01+zAAAAMklEQVR42mJgGAWjYBSMgkEJGIlUd+j/WjjbjjGYGC1MtHP10DR6FIyCUTAKBikACDAA0NoDCLGGjH8AAAAASUVORK5CYII=",primary:"#C2FFAE",secondary:"#C2FFAE",stroke:"#000000",strokeWidth:3,innerStroke:null}};